From 6fab75958218c01e4335d55aba0189e89aef8f22 Mon Sep 17 00:00:00 2001 From: Ethan Chen Date: Wed, 13 Aug 2014 16:27:35 -0700 Subject: [PATCH] peregrine: Use msm8226-common repo * Remove extra init scripts * Use nested cm.dependencies * Remove extra makefiles * Add device specific WCNSS NV * Add setup-makefiles.sh, extract-files.sh --- Android.mk | 26 ++ AndroidBoard.mk | 8 - AndroidProducts.mk | 15 + BoardConfig.mk | 43 +-- cm.dependencies | 24 -- cm.mk | 10 +- device-proprietary-files.txt | 2 - device.mk | 32 ++ device_peregrine.mk | 27 -- extract-files.sh | 11 +- full_peregrine.mk | 18 +- proprietary-files.txt | 4 + rootdir/Android.mk | 9 - rootdir/etc/fstab.qcom | 4 +- rootdir/etc/init.qcom.rc | 640 ----------------------------------- rootdir/etc/twrp.fstab | 20 -- setup-makefiles.sh | 7 + system.prop | 18 +- wifi/WCNSS_qcom_wlan_nv.bin | Bin 0 -> 29816 bytes 19 files changed, 126 insertions(+), 792 deletions(-) create mode 100644 Android.mk delete mode 100644 AndroidBoard.mk delete mode 100644 device-proprietary-files.txt create mode 100644 device.mk delete mode 100644 device_peregrine.mk create mode 100644 proprietary-files.txt delete mode 100755 rootdir/etc/init.qcom.rc delete mode 100644 rootdir/etc/twrp.fstab create mode 100755 setup-makefiles.sh create mode 100644 wifi/WCNSS_qcom_wlan_nv.bin diff --git a/Android.mk b/Android.mk new file mode 100644 index 0000000..68a3a47 --- /dev/null +++ b/Android.mk @@ -0,0 +1,26 @@ +# +# Copyright (C) 2014 The CyanogenMod Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# WARNING: Everything listed here will be built on ALL platforms, +# including x86, the emulator, and the SDK. Modules must be uniquely +# named (liblights.tuna), and must build everywhere, or limit themselves +# to only building on ARM if they include assembly. Individual makefiles +# are responsible for having their own logic, for fine-grained control. + +LOCAL_PATH := $(call my-dir) + +ifeq ($(TARGET_DEVICE),peregrine) +include $(call all-makefiles-under,$(LOCAL_PATH)) +endif diff --git a/AndroidBoard.mk b/AndroidBoard.mk deleted file mode 100644 index 7044e6f..0000000 --- a/AndroidBoard.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -ALL_PREBUILT += $(INSTALLED_KERNEL_TARGET) - -# include the non-open-source counterpart to this file --include vendor/motorola/peregrine/AndroidBoardVendor.mk diff --git a/AndroidProducts.mk b/AndroidProducts.mk index fd21ea7..b296cf8 100644 --- a/AndroidProducts.mk +++ b/AndroidProducts.mk @@ -1,2 +1,17 @@ +# +# Copyright (C) 2014 The CyanogenMod Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/full_peregrine.mk diff --git a/BoardConfig.mk b/BoardConfig.mk index 47e5e03..6060dda 100644 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -13,34 +13,23 @@ # See the License for the specific language governing permissions and # limitations under the License. -# -# This file sets variables that control the way modules are built -# thorughout the system. It should not be used to conditionally -# disable makefiles (the proper mechanism to control what gets -# included in a build is to use PRODUCT_PACKAGES in a product -# definition file). -# - +# inherit from common msm8226-common -include device/motorola/msm8226-common/BoardConfigCommon.mk +LOCAL_PATH := device/motorola/peregrine + +# Kernel +BOARD_CUSTOM_BOOTIMG_MK := $(LOCAL_PATH)/mkbootimg.mk +TARGET_KERNEL_CONFIG := msm8926_mmi_defconfig + +# Partitions +BOARD_BOOTIMAGE_PARTITION_SIZE := 10485760 +BOARD_RECOVERYIMAGE_PARTITION_SIZE := 10485760 +BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1023410176 +BOARD_USERDATAIMAGE_PARTITION_SIZE := 5930614784 + +# Recovery +TARGET_RECOVERY_FSTAB := $(LOCAL_PATH)/rootdir/etc/fstab.qcom + # inherit from the proprietary version -include vendor/motorola/peregrine/BoardConfigVendor.mk - -LOCAL_PATH := device/motorola/perergine - -BOARD_CUSTOM_BOOTIMG_MK := device/motorola/peregrine/mkbootimg.mk -BOARD_HAS_NO_MISC_PARTITION := true - -TARGET_UNIFIED_DEVICE := true -TARGET_INIT_VENDOR_LIB := libinit_msm - -BOARD_USERDATAIMAGE_PARTITION_SIZE := 8589934592 - -TARGET_RECOVERY_FSTAB := device/motorola/peregrine/rootdir/etc/fstab.qcom - -#TWRP -DEVICE_RESOLUTION := 720x1280 -TW_IGNORE_MAJOR_AXIS_0 := true -TW_EXTERNAL_STORAGE_PATH := "/external_sd" -TW_EXTERNAL_STORAGE_MOUNT_POINT := "external_sd" -#TW_CUSTOM_POWER_BUTTON := 107 diff --git a/cm.dependencies b/cm.dependencies index af910ef..f8e8f73 100644 --- a/cm.dependencies +++ b/cm.dependencies @@ -1,30 +1,6 @@ [ - { - "repository": "android_device_qcom_common", - "target_path": "device/qcom/common" - }, - { - "repository": "android_device_motorola_qcom-common", - "target_path": "device/motorola/qcom-common" - }, { "repository": "android_device_motorola_msm8226-common", "target_path": "device/motorola/msm8226-common" - }, - { - "repository": "android_kernel_motorola_msm8226", - "target_path": "kernel/motorola/msm8226" - }, - { - "repository": "android_hardware_qcom_fm", - "target_path": "hardware/qcom/fm" - }, - { - "repository": "android_hardware_qcom_display-caf-new", - "target_path": "hardware/qcom/display-caf-new" - }, - { - "repository": "android_hardware_qcom_media-caf-new", - "target_path": "hardware/qcom/media-caf-new" } ] diff --git a/cm.mk b/cm.mk index 2e02c6a..9ef95cc 100644 --- a/cm.mk +++ b/cm.mk @@ -1,13 +1,7 @@ +$(call inherit-product, device/motorola/peregrine/full_peregrine.mk) + # Inherit some common CM stuff. $(call inherit-product, vendor/cm/config/common_full_phone.mk) -# Boot animation -TARGET_SCREEN_WIDTH := 720 -TARGET_SCREEN_HEIGHT := 1280 - -# Inherit device configuration -$(call inherit-product, device/motorola/peregrine/full_peregrine.mk) - -## Device identifier. This must come after all inclusions PRODUCT_RELEASE_NAME := peregrine PRODUCT_NAME := cm_peregrine diff --git a/device-proprietary-files.txt b/device-proprietary-files.txt deleted file mode 100644 index 9aecffe..0000000 --- a/device-proprietary-files.txt +++ /dev/null @@ -1,2 +0,0 @@ -# proprietary file list -# bin/filename diff --git a/device.mk b/device.mk new file mode 100644 index 0000000..95516bc --- /dev/null +++ b/device.mk @@ -0,0 +1,32 @@ +# +# Copyright (C) 2014 The CyanogenMod Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# call the proprietary setup +$(call inherit-product-if-exists, vendor/motorola/peregrine/peregrine-vendor.mk) + +# Overlay +DEVICE_PACKAGE_OVERLAYS += $(LOCAL_PATH)/overlay + +# Ramdisk +PRODUCT_PACKAGES += \ + fstab.qcom + +# Wifi +PRODUCT_COPY_FILES += \ + $(LOCAL_PATH)/wifi/WCNSS_qcom_wlan_nv.bin:system/etc/firmware/wlan/prima/WCNSS_qcom_wlan_nv.bin + +# Inherit from msm8226-common +$(call inherit-product, device/motorola/msm8226-common/msm8226.mk) diff --git a/device_peregrine.mk b/device_peregrine.mk deleted file mode 100644 index e69b39e..0000000 --- a/device_peregrine.mk +++ /dev/null @@ -1,27 +0,0 @@ -$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk) - -$(call inherit-product-if-exists, vendor/motorola/peregrine/peregrine-vendor.mk) - -LOCAL_PATH := device/motorola/peregrine - -# peregrine specific overlay -DEVICE_PACKAGE_OVERLAYS += $(LOCAL_PATH)/overlay - -# Ramdisk -PRODUCT_PACKAGES += \ - init.qcom.rc \ - fstab.qcom - -# TWRP -PRODUCT_COPY_FILES += \ - $(LOCAL_PATH)/rootdir/etc/twrp.fstab:recovery/root/etc/twrp.fstab - -PRODUCT_LOCALES := en_US -PRODUCT_LOCALES += xhdpi -PRODUCT_AAPT_CONFIG := normal hdpi xhdpi -PRODUCT_AAPT_PREF_CONFIG := xhdpi - -$(call inherit-product, frameworks/native/build/phone-xhdpi-1024-dalvik-heap.mk) - -$(call inherit-product, device/motorola/msm8226-common/msm8226.mk) -$(call inherit-product, device/motorola/msm8226-common/keylayout/keylayout.mk) diff --git a/extract-files.sh b/extract-files.sh index 246c631..4a50a54 100755 --- a/extract-files.sh +++ b/extract-files.sh @@ -1,10 +1,7 @@ -#!/bin/bash +#!/bin/sh + +set -e export VENDOR=motorola export DEVICE=peregrine -# Comment these out if there is no common device tree for this device -export COMMON_DEVICE=msm8226-common -export BOARD_VENDOR=motorola-qcom -export TARGET_BOARD_PLATFORM=msm8226 - -../$COMMON_DEVICE/extract-files.sh $@ +./../../$VENDOR/msm8226-common/extract-files.sh $@ diff --git a/full_peregrine.mk b/full_peregrine.mk index 648054d..1fe1a5f 100644 --- a/full_peregrine.mk +++ b/full_peregrine.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2013 The CyanogenMod Project +# Copyright (C) 2014 The CyanogenMod Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,21 +14,13 @@ # limitations under the License. # -# -# This file is the build configuration for a full Android -# build for peregrine hardware. This cleanly combines a set of -# device-specific aspects (drivers) with a device-agnostic -# product configuration (apps). Except for a few implementation -# details, it only fundamentally contains two inherit-product -# lines, full and peregrine, hence its name. -# - # Inherit from those products. Most specific first. $(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk) -# Inherit from peregrine device -$(call inherit-product, device/motorola/peregrine/device_peregrine.mk) -## Device identifier. This must come after all inclusions +# Inherit from peregrine device +$(call inherit-product, device/motorola/peregrine/device.mk) + +# Device identifier. This must come after all inclusions PRODUCT_DEVICE := peregrine PRODUCT_NAME := full_peregrine PRODUCT_BRAND := motorola diff --git a/proprietary-files.txt b/proprietary-files.txt new file mode 100644 index 0000000..cd37526 --- /dev/null +++ b/proprietary-files.txt @@ -0,0 +1,4 @@ +# proprietary files for peregrine + +# Sensors +lib/hw/sensors.msm8226.so diff --git a/rootdir/Android.mk b/rootdir/Android.mk index bfb2319..2a7c711 100644 --- a/rootdir/Android.mk +++ b/rootdir/Android.mk @@ -1,5 +1,4 @@ LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) include $(CLEAR_VARS) LOCAL_MODULE := fstab.qcom @@ -8,11 +7,3 @@ LOCAL_MODULE_CLASS := ETC LOCAL_SRC_FILES := etc/fstab.qcom LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := init.qcom.rc -LOCAL_MODULE_TAGS := optional eng -LOCAL_MODULE_CLASS := ETC -LOCAL_SRC_FILES := etc/init.qcom.rc -LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) -include $(BUILD_PREBUILT) diff --git a/rootdir/etc/fstab.qcom b/rootdir/etc/fstab.qcom index 1101fc5..a02e3e5 100644 --- a/rootdir/etc/fstab.qcom +++ b/rootdir/etc/fstab.qcom @@ -11,7 +11,7 @@ /dev/block/platform/msm_sdcc.1/by-name/boot /boot emmc defaults recoveryonly /dev/block/platform/msm_sdcc.1/by-name/recovery /recovery emmc defaults recoveryonly -/dev/block/mmcblk1p1 /external_sd auto default recoveryonly -/devices/msm_sdcc.2/mmc_host auto vfat defaults voldmanaged=sdcard1:auto,migrate=target,noemulatedsd +/dev/block/mmcblk1p1 /external_sd auto default recoveryonly +/devices/msm_sdcc.2/mmc_host auto vfat defaults voldmanaged=sdcard1:auto,migrate=target,noemulatedsd /devices/platform/msm_hsusb_host auto auto defaults voldmanaged=usbdisk:auto /dev/block/zram0 none swap defaults zramsize=134217728 diff --git a/rootdir/etc/init.qcom.rc b/rootdir/etc/init.qcom.rc deleted file mode 100755 index 09673fd..0000000 --- a/rootdir/etc/init.qcom.rc +++ /dev/null @@ -1,640 +0,0 @@ -# Copyright (c) 2009-2012,2014 The Linux Foundation. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of The Linux Foundation nor -# the names of its contributors may be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -import init.qcom.usb.rc -# import init.target.rc - -on early-init - write /sys/block/mmcblk0/queue/scheduler noop - -on init - loglevel 8 - - # Set permissions for persist partition - mkdir /persist 0771 system system - # See storage config details at http://source.android.com/tech/storage/ - mkdir /mnt/shell/emulated 0700 shell shell - mkdir /storage/emulated 0555 root root - - #External storage directories - mkdir /mnt/media_rw/sdcard1 0700 media_rw media_rw - mkdir /storage/sdcard1 0700 root root - mkdir /storage/emulated/legacy 0555 root root - mkdir /mnt/media_rw/usbdisk 0700 media_rw media_rw - mkdir /storage/usbdisk 0700 root root - - export EXTERNAL_STORAGE /storage/emulated/legacy - export EMULATED_STORAGE_SOURCE /mnt/shell/emulated - export EMULATED_STORAGE_TARGET /storage/emulated - export SECONDARY_STORAGE /storage/sdcard1 - - # Support legacy paths - symlink /storage/emulated/legacy /sdcard - symlink /storage/emulated/legacy /mnt/sdcard - symlink /storage/emulated/legacy /storage/sdcard0 - symlink /storage/usbdisk /usbdisk - symlink /storage/usbdisk /mnt/usbdisk - -on fs - setprop ro.crypto.fuse_sdcard true - -on early-boot - # set RLIMIT_MEMLOCK to 64MB - setrlimit 8 67108864 67108864 - # Allow subsystem (modem etc) debugging - write /sys/module/subsystem_restart/parameters/enable_debug ${persist.sys.ssr.enable_debug} - exec /system/bin/sh /init.qcom.early_boot.sh ${ro.board.platform} - exec /system/bin/sh /init.qcom.syspart_fixup.sh ${ro.board.platform} ${ro.serialno} - -on boot - chown bluetooth bluetooth /sys/module/bluetooth_power/parameters/power - chown bluetooth bluetooth /sys/class/rfkill/rfkill0/type - chown bluetooth bluetooth /sys/class/rfkill/rfkill0/state - chown bluetooth bluetooth /proc/bluetooth/sleep/proto - chown bluetooth bluetooth /sys/module/hci_uart/parameters/ath_lpm - chown bluetooth bluetooth /sys/module/hci_uart/parameters/ath_btwrite - chown system system /sys/module/sco/parameters/disable_esco - chown bluetooth bluetooth /sys/module/hci_smd/parameters/hcismd_set - chmod 0660 /sys/module/bluetooth_power/parameters/power - chmod 0660 /sys/module/hci_smd/parameters/hcismd_set - chmod 0660 /sys/class/rfkill/rfkill0/state - chmod 0660 /proc/bluetooth/sleep/proto - chown bluetooth bluetooth /dev/ttyHS0 - chmod 0660 /sys/module/hci_uart/parameters/ath_lpm - chmod 0660 /sys/module/hci_uart/parameters/ath_btwrite - chmod 0660 /dev/ttyHS0 - chown bluetooth bluetooth /sys/devices/platform/msm_serial_hs.0/clock - chmod 0660 /sys/devices/platform/msm_serial_hs.0/clock - - chmod 0660 /dev/ttyHS2 - chown bluetooth bluetooth /dev/ttyHS2 - - #Create QMUX deamon socket area - mkdir /dev/socket/qmux_radio 0770 radio radio - chmod 2770 /dev/socket/qmux_radio - mkdir /dev/socket/qmux_audio 0770 media audio - chmod 2770 /dev/socket/qmux_audio - mkdir /dev/socket/qmux_bluetooth 0770 bluetooth bluetooth - chmod 2770 /dev/socket/qmux_bluetooth - mkdir /dev/socket/qmux_gps 0770 gps gps - chmod 2770 /dev/socket/qmux_gps - - # Prevents permission denied error for telephony - chmod 0644 /proc/cmdline - - setprop wifi.interface wlan0 - -# Define TCP buffer sizes for various networks -# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax, - setprop net.tcp.buffersize.wifi 524288,2097152,4194304,262144,524288,1048576 - - - setprop ro.telephony.call_ring.multiple false - - #Remove SUID bit for iproute2 ip tool - chmod 0755 /system/bin/ip - - - chmod 0444 /sys/devices/platform/msm_hsusb/gadget/usb_state - - #For bridgemgr daemon to inform the USB driver of the correct transport - chown radio radio /sys/class/android_usb/f_rmnet_smd_sdio/transport - - # For setting tcp delayed ack - chown system system /sys/kernel/ipv4/tcp_delack_seg - chown system system /sys/kernel/ipv4/tcp_use_userconfig - -# Define TCP delayed ack settings for WiFi & LTE - setprop net.tcp.delack.default 1 - setprop net.tcp.delack.wifi 20 - setprop net.tcp.delack.lte 8 - setprop net.tcp.usercfg.default 0 - setprop net.tcp.usercfg.wifi 1 - setprop net.tcp.usercfg.lte 1 - - #To allow interfaces to get v6 address when tethering is enabled - write /proc/sys/net/ipv6/conf/rmnet0/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet1/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet2/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet3/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet4/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet5/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet6/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet7/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_sdio0/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_sdio1/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_sdio2/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_sdio3/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_sdio4/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_sdio5/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_sdio6/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_sdio7/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_usb0/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_usb1/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_usb2/accept_ra 2 - write /proc/sys/net/ipv6/conf/rmnet_usb3/accept_ra 2 - - # To prevent out of order acknowledgements from making - # connection tracking to treat them as not belonging to - # the connection they belong to. - # Otherwise, a weird issue happens in which some long - # connections on high-throughput links get dropped when - # an ack packet comes out of order - write /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal 1 - - # NFC local data and nfcee xml storage - mkdir /data/nfc 0770 nfc nfc - mkdir /data/nfc/param 0770 nfc nfc - - # Flash storage isn't a good entropy source, and only causes locking - # overhead in the kernel. Turn it off. - write /sys/block/mmcblk0/queue/add_random 0 - - setprop ro.hw.device ${ro.boot.device} - setprop ro.hw.hwrev ${ro.boot.hwrev} - setprop ro.hw.radio ${ro.boot.radio} - - # activate zram - swapon_all fstab.qcom - write /proc/sys/vm/page-cluster - -# msm specific files that need to be created on /data -on post-fs-data - # we will remap this as /mnt/sdcard with the sdcard fuse tool - mkdir /data/media 0770 media_rw media_rw - chown media_rw media_rw /data/media - - mkdir /data/misc/bluetooth 0770 bluetooth bluetooth - - # Create the directories used by the Wireless subsystem - mkdir /data/misc/wifi 0770 wifi wifi - mkdir /data/misc/wifi/sockets 0770 wifi wifi - mkdir /data/misc/wifi/wpa_supplicant 0770 wifi wifi - mkdir /data/misc/dhcp 0770 dhcp dhcp - chown dhcp dhcp /data/misc/dhcp - - # Create directory used by audio subsystem - mkdir /data/misc/audio 0770 audio audio - - # Create directory used by the DASH client - mkdir /data/misc/dash 0770 media audio - - # Mounting of persist is moved to 'on emmc-fs' and 'on fs' sections - # We chown/chmod /persist again so because mount is run as root + defaults - chown system system /persist - chmod 0771 /persist - chmod 0664 /sys/devices/platform/msm_sdcc.1/polling - chmod 0664 /sys/devices/platform/msm_sdcc.2/polling - chmod 0664 /sys/devices/platform/msm_sdcc.3/polling - chmod 0664 /sys/devices/platform/msm_sdcc.4/polling - - # Chown polling nodes as needed from UI running on system server - chown system system /sys/devices/platform/msm_sdcc.1/polling - chown system system /sys/devices/platform/msm_sdcc.2/polling - chown system system /sys/devices/platform/msm_sdcc.3/polling - chown system system /sys/devices/platform/msm_sdcc.4/polling - - #Create the symlink to qcn wpa_supplicant folder for ar6000 wpa_supplicant - mkdir /data/system 0775 system system - #symlink /data/misc/wifi/wpa_supplicant /data/system/wpa_supplicant - - #Create directories for Location services - mkdir /data/misc/location 0770 gps gps - mkdir /data/misc/location/mq 0770 gps gps - mkdir /data/misc/location/xtwifi 0770 gps gps - mkdir /data/misc/location/gpsone_d 0770 system gps - mkdir /data/misc/location/quipc 0770 gps system - mkdir /data/misc/location/gsiff 0770 gps gps - - #Create directory from IMS services - mkdir /data/shared 0755 - chown system system /data/shared - - #Create directory for FOTA - mkdir /data/fota 0771 - chown system system /data/fota - - #Create directory for hostapd - mkdir /data/hostapd 0770 system wifi - - # Create /data/time folder for time-services - mkdir /data/time/ 0700 system system - - mkdir /data/audio/ 0770 media audio - # Enable the setgid bit on the directory - chmod 2770 /data/audio - - setprop vold.post_fs_data_done 1 - - #Create a folder for SRS to be able to create a usercfg file - mkdir /data/data/media 0770 media media - -on property:init.svc.surfaceflinger=stopped - stop ppd - stop hdmid - -on property:init.svc.wpa_supplicant=stopped - stop dhcpcd - -on property:bluetooth.isEnabled=true - start btwlancoex - write /sys/class/bluetooth/hci0/idle_timeout 7000 - -service qcom-c_core-sh /system/bin/sh /init.qcom.class_core.sh - class core - user root - oneshot - -service qcom-c_main-sh /system/bin/sh /init.class_main.sh - class main - user root - oneshot - -service ril-qmi /system/bin/sh /init.qcom.ril.sh - class main - user root - oneshot - -on property:vold.decrypt=trigger_restart_framework - start qcom-c_main-sh - start config_bluetooth - -on property:persist.env.fastdorm.enabled=true - setprop persist.radio.data_no_toggle 1 - -service irsc_util /system/bin/logwrapper /system/bin/irsc_util "/etc/sec_config" - class main - user root - oneshot - -service rmt_storage /system/bin/rmt_storage - class core - user root - disabled - -on property:ro.boot.emmc=true - start rmt_storage - -service rfs_access /system/bin/rfs_access - class core - user system - group system net_raw - -on property:ro.boot.emmc=true - start rfs_access - -service config_bluetooth /system/bin/sh /system/etc/init.qcom.bt.sh - class core - user root - oneshot - -service hciattach /system/bin/sh /system/etc/init.qcom.bt.sh - class late_start - user bluetooth - group bluetooth net_bt_admin - disabled - oneshot - -on property:bluetooth.hciattach=true - start hciattach - -on property:bluetooth.hciattach=false - setprop bluetooth.status off - -service bridgemgrd /system/bin/bridgemgrd - class late_start - user radio - group radio qcom_diag - disabled - -service port-bridge /system/bin/port-bridge /dev/smd0 /dev/ttyGS0 - class late_start - user system - group system inet - disabled - -service qmiproxy /system/bin/qmiproxy - class main - user radio - group radio qcom_diag - disabled - -# QMUX must be in multiple groups to support external process connections -service qmuxd /system/bin/qmuxd - class main - user radio - group radio audio bluetooth gps qcom_diag - disabled - -service netmgrd /system/bin/netmgrd - class main - disabled - -on property:ro.use_data_netmgrd=false - # netmgr not supported on specific target - stop netmgrd - -# Adjust socket buffer to enlarge TCP receive window for high bandwidth -# but only if ro.data.large_tcp_window_size property is set. -on property:ro.data.large_tcp_window_size=true - write /proc/sys/net/ipv4/tcp_adv_win_scale 2 - -service btwlancoex /system/bin/sh /system/etc/init.qcom.coex.sh - class late_start - user bluetooth - group bluetooth net_bt_admin inet net_admin net_raw - disabled - oneshot - -service p2p_supplicant /system/bin/wpa_supplicant \ - -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \ - -I/system/etc/wifi/p2p_supplicant_overlay.conf -N \ - -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ - -I/system/etc/wifi/wpa_supplicant_overlay.conf \ - -O/data/misc/wifi/sockets -puse_p2p_group_interface=1 \ - -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0 -# we will start as root and wpa_supplicant will switch to user wifi -# after setting up the capabilities required for WEXT -# user wifi -# group wifi inet keystore - class main - socket wpa_wlan0 dgram 660 wifi wifi - disabled - oneshot - -service wpa_supplicant /system/bin/wpa_supplicant \ - -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ - -I/system/etc/wifi/wpa_supplicant_overlay.conf \ - -O/data/misc/wifi/sockets \ - -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0 - # we will start as root and wpa_supplicant will switch to user wifi - # after setting up the capabilities required for WEXT - # user wifi - # group wifi inet keystore - class main - socket wpa_wlan0 dgram 660 wifi wifi - disabled - oneshot - -service dhcpcd_wlan0 /system/bin/dhcpcd -ABKLG - class late_start - disabled - oneshot - -service dhcpcd_p2p /system/bin/dhcpcd -ABKLG - class late_start - disabled - oneshot - -service iprenew_wlan0 /system/bin/dhcpcd -n - class late_start - disabled - oneshot - -service iprenew_p2p /system/bin/dhcpcd -n - class late_start - disabled - oneshot - -service ptt_socket_app /system/bin/ptt_socket_app -d - class main - user root - group root - oneshot - -service ptt_ffbm /system/bin/ptt_socket_app -f -d - user root - group root - disabled - oneshot - -service dhcpcd_bt-pan /system/bin/dhcpcd -BKLG - class late_start - disabled - oneshot - -service iprenew_bt-pan /system/bin/dhcpcd -n - class late_start - disabled - oneshot - -service dhcpcd_bnep0 /system/bin/dhcpcd -BKLG - disabled - oneshot - -service dhcpcd_bnep1 /system/bin/dhcpcd -BKLG - disabled - oneshot - -service dhcpcd_bnep2 /system/bin/dhcpcd -BKLG - disabled - oneshot - -service dhcpcd_bnep3 /system/bin/dhcpcd -BKLG - disabled - oneshot - -service dhcpcd_bnep4 /system/bin/dhcpcd -BKLG - disabled - oneshot - -service gpsone_daemon /system/bin/gpsone_daemon - class late_start - user gps - group gps inet net_raw - disabled - -service quipc_igsn /system/bin/quipc_igsn - class late_start - user gps - group inet gps qcom_diag - disabled - -service quipc_main /system/bin/quipc_main - class late_start - user gps - group gps net_admin wifi inet qcom_diag - disabled - -service location_mq /system/bin/location-mq - class late_start - user gps - group gps - disabled - -service xtwifi_inet /system/bin/xtwifi-inet-agent - class late_start - user gps - group inet gps - disabled - -service xtwifi_client /system/bin/xtwifi-client - class late_start - user gps - group net_admin wifi inet gps - disabled - -service lowi-server /system/bin/lowi-server - class late_start - user gps - group gps net_admin wifi inet qcom_diag - disabled - -service fm_dl /system/bin/sh /system/etc/init.qcom.fm.sh - class late_start - user root - group system fm_radio - disabled - oneshot - -on property:crypto.driver.load=1 - insmod /system/lib/modules/qce.ko - insmod /system/lib/modules/qcedev.ko - -on property:crypto.driver.load=0 - exec /system/bin/rmmod qcedev.ko - exec /system/bin/rmmod qce.ko - -service qcom-sh /system/bin/sh /init.qcom.sh - class late_start - user root - oneshot - -service qcom-post-boot /system/bin/sh /system/etc/init.qcom.post_boot.sh - class late_start - user root - disabled - oneshot - -service wifi-crda /system/bin/sh /system/etc/init.crda.sh - class late_start - user root - disabled - oneshot - -on property:sys.boot_completed=1 - start qcom-post-boot - write /sys/block/mmcblk0/queue/scheduler row - -service hostapd /system/bin/hostapd -dddd /data/hostapd/hostapd.conf - class late_start - user root - group root - oneshot - disabled - -service ds_fmc_appd /system/bin/ds_fmc_appd -p "rmnet0" -D - class late_start - group radio wifi inet - disabled - oneshot - -on property:persist.data.ds_fmc_app.mode=1 - start ds_fmc_appd - -on property:ro.data.large_tcp_window_size=true - # Adjust socket buffer to enlarge TCP receive window for high bandwidth (e.g. DO-RevB) - write /proc/sys/net/ipv4/tcp_adv_win_scale 2 - -service ril-daemon1 /system/bin/rild -c 1 - class main - socket rild1 stream 660 root radio - socket rild-debug1 stream 660 radio system - user root - disabled - group radio cache inet misc audio sdcard_r sdcard_rw diag qcom_diag log - -service ril-daemon2 /system/bin/rild -c 2 - class main - socket rild2 stream 660 root radio - socket rild-debug2 stream 660 radio system - user root - disabled - group radio cache inet misc audio sdcard_r sdcard_rw diag qcom_diag log - -service sdcard /system/bin/sdcard -u 1023 -g 1023 -l /data/media /mnt/shell/emulated - class late_start - -service fuse_sdcard1 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/sdcard1 /storage/sdcard1 - class late_start - disabled - -service fuse_usbdisk /system/bin/sdcard -u 1023 -g 1023 -d /mnt/media_rw/usbdisk /storage/usbdisk - class late_start - disabled - -# Binding fuse mount point to /storage/emulated/legacy -on property:init.svc.sdcard=running - wait /mnt/shell/emulated/0 - mount none /mnt/shell/emulated/0 /storage/emulated/legacy bind - -service charger /charger - class charger - -service ssr_diag /system/bin/ssr_diag - class late_start - user system - group system - -# SSR setting -on property:persist.sys.ssr.restart_level=* - exec /system/bin/sh /init.qcom.ssr.sh ${persist.sys.ssr.restart_level} - -service hvdcp /system/bin/hvdcp - class core - user root - disabled - -on property:persist.usb.hvdcp.detect=true - start hvdcp - -on property:persist.usb.hvdcp.detect=false - stop hvdcp - -# CM Performance Profiles - -# Powersave -on property:sys.perf.profile=0 - start mpdecision - write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor powersave - write /sys/class/devfreq/qcom,cpubw.55 powersave - -# Balanced -on property:sys.perf.profile=1 - start mpdecision - write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor interactive - write /sys/class/devfreq/qcom,cpubw.55 msm_cpufreq - -# High performance -on property:sys.perf.profile=2 - stop mpdecision - write /sys/devices/system/cpu/cpu0/online 1 - write /sys/devices/system/cpu/cpu1/online 1 - write /sys/devices/system/cpu/cpu2/online 1 - write /sys/devices/system/cpu/cpu3/online 1 - write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor performance - write /sys/class/devfreq/qcom,cpubw.65 performance diff --git a/rootdir/etc/twrp.fstab b/rootdir/etc/twrp.fstab deleted file mode 100644 index fc429ee..0000000 --- a/rootdir/etc/twrp.fstab +++ /dev/null @@ -1,20 +0,0 @@ -# mount point fstype device - -/data f2fs /dev/block/platform/msm_sdcc.1/by-name/userdata flags=fsflags="inline_xattr";length=-16384 -/cache ext4 /dev/block/platform/msm_sdcc.1/by-name/cache -/system ext4 /dev/block/platform/msm_sdcc.1/by-name/system -/boot emmc /dev/block/platform/msm_sdcc.1/by-name/boot -/recovery emmc /dev/block/platform/msm_sdcc.1/by-name/recovery -/pds emmc /dev/block/platform/msm_sdcc.1/by-name/pds flags=backup=1;display=PDS -/utags emmc /dev/block/platform/msm_sdcc.1/by-name/utags flags=backup=1;display=utags -/persist emmc /dev/block/platform/msm_sdcc.1/by-name/persist flags=backup=1;display=persist -# Some of those partitions (e.g. modem, fsg) are actually ext4, but shouldn't be mounted in normal circumstances. -/modem emmc /dev/block/platform/msm_sdcc.1/by-name/modem flags=backup=1;display=NON-HLOS -/modemst1 emmc /dev/block/mmcblk0p17 flags=backup=1;display=modemst1 -/modemst2 emmc /dev/block/mmcblk0p18 flags=backup=1;display=modemst2 -/fsg emmc /dev/block/mmcblk0p21 flags=backup=1;display=fsg -/fsc emmc /dev/block/mmcblk0p22 flags=backup=1;display=fsc -/sp emmc /dev/block/platform/msm_sdcc.1/by-name/sp flags=backup=1;display=sp -/cid emmc /dev/block/mmcblk0p25 flags=backup=1;display=cid -/external_sd auto /dev/block/mmcblk1p1 /dev/block/mmcblk1 flags=display="microSD card";storage;wipeingui;removable -/usb-otg auto /dev/block/sda1 /dev/block/sda flags=display="USB OTG";storage;wipeingui;removable diff --git a/setup-makefiles.sh b/setup-makefiles.sh new file mode 100755 index 0000000..8179e1f --- /dev/null +++ b/setup-makefiles.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +set -e + +export DEVICE=peregrine +export VENDOR=motorola +./../../$VENDOR/msm8226-common/setup-makefiles.sh $@ diff --git a/system.prop b/system.prop index 29c1140..f7cf76e 100644 --- a/system.prop +++ b/system.prop @@ -1,7 +1,15 @@ -# # system.prop for peregrine -# Use reference RIL for initial bringup -rild.libpath=/system/lib/libreference-ril.so -rild.libpath=/vendor/lib/libril-qc-qmi-1.so + +# radio rild.libargs=-d /dev/smd0 -persist.debug.wfd.enable=1 +rild.libpath=/vendor/lib/libril-qc-qmi-1.so + +# usb +ro.usb.mtp=0x2e82 +ro.usb.mtp_adb=0x2e76 +ro.usb.ptp=0x2e83 +ro.usb.ptp_adb=0x2e84 +ro.usb.bpt=0x2e28 +ro.usb.bpt_adb=0x2e29 +ro.usb.bpteth=0x2e2a +ro.usb.bpteth_adb=0x2e2b diff --git a/wifi/WCNSS_qcom_wlan_nv.bin b/wifi/WCNSS_qcom_wlan_nv.bin new file mode 100644 index 0000000000000000000000000000000000000000..3067f7875b62c6b6c5d9bf27a87db44d8b13d4fe GIT binary patch literal 29816 zcmeHQ*>{!o75#2VAWTUJAqfEk;=mLz;)DSa5yv_e5obh2RGg|sjN;Hgq%VE#Q~!iM zcJ-lab*-+p4=!t;>R%z-1=R7{=GrY%-;XQr~ z?}x92*JF5(&p-9sbFufs&mZ!i|40AX;b$!Ney?6=zOV5>5uX7nb~5mTGRfhTI2EaX?za#n6B2C9$Q*`Y_2A&EqJ7h zuk1HSU&}r_4`q4*&+ze#zYbqJ9l%xeU9FLB4;YbUplYHwta$F2M*pJ8L01tD zdihm5BV{4I0(D`J@%WkjhxFBkS9OAr#|JJSHZjS~l zOLpqd^e?uCx;+}K{7jF0$!4|Ib$cxNM=twc41JaGvFWcYyUXoA@YItJ>62AMV-r); z*IvJK&&>YWTW-7K;GKsKAG!PJv3u{k|NaLaeCXj{J@Uw-k3IgxuTPwK^5n^_pcqD*s}eGU3>Q7@NYjjclfTm z?~(O7dNcpYCr|3!{nYKyGuwIKIB^|#IPMOIExYZc{ha-jm-UcKlZ#ihzgn?o!{jv3 zzwf34x6*!{K9SGEe*(BC?1_3=FUSM%#Ji(CnhvZ7q}!24m^;P^a2+=7)=?L~&X4|r z=C2vqG_~#eoj^Zg|IR}={bRtstbg3Bhw*~F;hypCN6%1?kZ(Kp5aNaHjBEw=a)x!! zeuVk`>qa(hp1uypZ}!{q-zVY|_<8>FKym!>{1e%c>ca6m&vkKud_ZdJ`4?TLZ-o7; zhc-@Lv*U(cd-u%-_!9sQf6%_!PY6Wn%OJoI=oI}V`w#;ndZIv~&j=8~GXk!#3yA;L z;PBXHcz^^DLg1(vkOcT>!T>=K6W?j&y_W+AD(fWr2pMBWiX_c|eK4LZOfWLH`8#Q|KQ+p1h-~a>{ z!X}K$cpw%!c!6@bP)NBOmPZQHehMJwfNgNVuDvJ$JOI3&;bj}To9Q31F(N$>KahM&fR1-& zAo;*Mh_QX5UODxkNuf*&MKOfViM0-Yn2u?(A63BWp$!B86d(}*DLg|5Py(6;BnEO1 z5Co+QAOr;i$>R(Ms+S=JQ7D*5W~oq?OBoiV2%(HsBbg?YD0EfmcyLdshqPowQy7mC7m+ zRTO-b^^%v|H!1AzTeW@^3IG5w2khJ(iU5xRmI1*5UI|1ZU@2f8P&H7L1KmB4!@z6C z&^ie7qtHnU{lw5Q2xFt&aAfERuCbnqn3BFJTM7n| z+&!g(yuW5+R=6llS7SmbHJD!U@!;{01zx2WFCM66c5n>)CLjyS}@OXV*nyEjdJq7ZC5V9FfP?^>H>aM`o49P|93uog zkpK`oi)^swQBt>G`1j+_>}M*pjg1pB9;gku0KX8+LyfSdsy zw!BymfQ|t0{MZQqt`d4SAJ%s=zXJob*^dBNKQgvy95QgL1%M}jc>E~<X@oKW5dZ8bM*=|nrvQL#EDk?pfHwPE)Bqbs;eiQM0`3CK z0g3>SAWDLa1(FkDBJ@lc5`nY<+)!r%69^#}WRZ|_LC%H7gi$6GQDAw%Xt3^vxNcO? zpcGS^{S`&v$Off=(ta@jNsuK`Jqbn<6bC2`2J>AVmgc(_XbS|-1e5|Ul7bYd883-c zjch9RLDIhwsLF3XB@4h=6qV9c0kLS)gWnAVJH4saouM z>?Qc)p|>MnmZMmJOs?BsA^e98{v<#aLXd!_0F?o2ho4el#(?)_8b}P-1^ER9xb=SU zG`_7&%tJq;{Sfy#>7`mRs=lcCf-+_Yq0RpO!SxyVP5)5;st}^_O#jfoC=fns9JL%Lx7m*bxC#jn3XlO% z@L!Ms8UN7_K?ZfEfGi3M3QTIyJwh?ii35v#*w#E*R1c?okOW~IE?&6M$$km|lt5kV z4=OmoAmAXH&q62=U}?QdA##8l-#GzLoHC)-&(m2hL3Na z;;~x?0B7!Hk3^qNJJmciRTYnAd&9fBAZDQ|U`YMY6E&Uhyjs`#Gd+2XHjFtxb8K`x6d+do5Y~q~cNb?lu zSXVC?k zWuEpyhWQ|_fxn^Ql{z-=1$L?A1dh$US=xU6C4%RD}<(}0X4+}5yf?*+m!S>eKf^L}ovmKO?sP#SK7i!0{G<*#nG$+YcU`n*#=plu_UyU>FDm3WO&Z2o?#N?pr9R zkICD{2!sp?ypa}I&_r9qOzr)sr>#*|hzY@gZQTnI4+6v|bi|Sok=tMOuO1r3{+IS& z-~jf%*!+V700DKpt@Ve_*Rf;Aj0YC*fOT|528smULQ5RT1s)6{gfnO80&#-k!ET|` zL|<4CF&Hz58Wa^Ghl?EI3J(?-fgpMgjlzBd0PP0=H1*gsgWG`^0*(OR_mBh7`qP|) zy?(a(2>~1M1S;Tt)97i_0~QDFf#(Vjh!5Na77Z2-Tx`h#!nOg!_7kWf%yqQTAUA}& zO1}e9miD9b4FK5rV*?Tq;341+P#$2TTfI-F0uA|$36lpB85UuXgP>C&V7zTO5F_|# zUp`2K{cNrsMjecZcxNqpp`yvS0!Di1o&^f~@uJm_>4(xFo8a5G@7QrY{lG4;^}!Jf z2nIw0`2cVrBfuSs2&P8nM%*w)mt+GV=1B93rAh0FhjE9s#gQ&G^F)NC^%o^g+y1ee z&O@9yXIiK@Ol(2S@~H30VIl;m04yX9rw$7m3!A$ARX;Jn{hz6=`T7HZFtcA|Xybp_ z&%p=m_qm5TfF59OnQx+&@U+Mfi*k4Ql>-N`YpEeVL{YDOP0gQ6#*>(VA=`yT;nEe=% zbl?9;_FI%hvRG{YsU-)Dj!l9ENP`OnKmtIF044=R0MmjgMCC?Hjv)f16wQ7hz!HR$ zL%RbyMSwIzh=6nANmCBz&r?C+q66N2ms&DJfF%t}o~9}p0rm682xuiXAlm~V3_ooU z)VBZR({HI`Uw~l*P$ClmmKiVZ{I04oOAe(?&LWnD%9sn*5d$*qmKmZi;-Y)jD zdI$s%&8PKlzOqCz-x$!%N4mt+P}X-k|31oKuK$<=7y)4ebVdw_<)5}301qexP##Ga z5GbHRaE*XKAPL|yp_HVO$wkm$D4$#`1qkE_cuV8bs20)+RKWqZ7SQ4R zwF3q;{}%^#+JCYvAZ4sHP>TW&gCY*HK=4#hV}g_mO)O>gW6(+hfoY|4nOG_? zpcSwf0E9r$3R?eb+y85E{cmKH8E|q+bMU}`Sb>HF;Pl^T!B~iA4n$EP5y0wL=PwS- zNH7C{YGtdIK?DLo4FPukUN|QJkObRLUkRYVe|GjgEI(ldsLp>anveaTapE79AoqVj z04N1yepr6HEf8Sa{!co4Q$b`vqrejW$^oVEu8|}9bCqn!H|}HXyF_;8i;@3Mp%1Bh zinTvcUebr?C)Dk)82`Erh{qokP*i|YKq>tF_!kZTZaJ{DKNbmICwZZy1n8%4#iCaU zXHhPe?4KP!*e^?d8TE(AH=W#Oe`O1>#DC}gAGjdje~f!j!3iu41p?&(wMje?nio6< ztWtJ09Q=r2X0E#AnYCs%xssU}? zJ!l=j3CNTVGn|ATmi(CBl;q0|KbT8xBW){XoA1By5Y-Q|Y^Jytl{1xt$Ys%`rTj0& z%Jcu}y*i6u>6iX&<^Plk{K1!euEn#ew(HOKKh}M_?pyvV6j%P@`L$m^o!_thcWb`# zT|F>AFh9V5yRg@5GW%Z|PqrpoJ6bb%+^z>-U+KrW!Co!7GT%3cf8+9}eEst~VBt#I F@qdc0R-6C; literal 0 HcmV?d00001