Giter VIP home page Giter VIP logo

android_device_asus_zenfone9's People

Contributors

micky387 avatar luca020400 avatar demon000 avatar zvnexus avatar luk1337 avatar maxwen avatar sourajitk avatar bgcngm avatar darkobas avatar mikeng avatar ordenkrieger avatar anayw2001 avatar danielml3 avatar dmd79 avatar sebaubuntu avatar rpius avatar pipipig233666 avatar lucchetto avatar jiyongp avatar jackeagle avatar jmtrivi avatar kchyn3 avatar haggertk avatar loganchien avatar lweiss-fairphone avatar sgcmarkus avatar ritujb avatar thescarastic avatar vachounet avatar vishalcj17 avatar

Stargazers

Samuel Kendall avatar Carlo Dee avatar Colin Kinloch avatar Brian avatar pthunar avatar

Watchers

Colin Kinloch avatar  avatar  avatar  avatar  avatar  avatar SpiritCroc avatar  avatar

Forkers

1375272391

android_device_asus_zenfone9's Issues

CTS Fail

Whatever I do, I can't get this ROM to pass CTS anymore, whether rooted or unrooted with the stock boot.img. The issue started for me near the end of January. PIF doesn't help anymore. Causes many problems for banking, DRM, and payment apps.

device information
❯ adb shell getprop ro.build.version.release
14

❯ adb shell getprop ro.vendor.build.id
AP1A.240505.005

❯ adb shell getprop ro.product.build.fingerprint
asus/WW_AI2202/ASUS_AI2202:14/UKQ1.230924.001/34.0304.2004.87:user/release-keys

❯ adb shell getprop ro.modversion
OmniROM-14-202405141642-zenfone9-GAPPS

❯ adb shell uname -r
5.10.81-android12-9-g9729dec572d0

❯ (ls Y:/data/adb/modules).Name
avbctl
magisk_overlayfs
playintegrityfix
sensitive_props
ssh
xmlpak-RE
zygisk_lsposed
zygisk-assistant
zygisk-sui
zygisksu

❯ adb shell su -c /data/adb/lspd/bin/cli modules ls -e
balti.xposed.pixelifygooglephotos             10212 enable
com.thinkdifferent.anywebview                 10292 enable
es.chiteroman.bootloaderspoofer               10309 enable
PIF logcat (using Xiaomi EU FP)
❯ cat Y:/data/adb/pif.json
{
    "MANUFACTURER": "motorola",
    "MODEL": "XT1575",
    "FINGERPRINT": "motorola/clark_retus/clark:6.0/MPHS24.49-18-8/4:user/release-keys",
    "BRAND": "motorola",
    "PRODUCT": "clark_retus",
    "DEVICE": "clark",
    "RELEASE": "6.0",
    "ID": "MPHS24.49-18-8",
    "INCREMENTAL": "4",
    "TYPE": "user",
    "TAGS": "release-keys",
    "SECURITY_PATCH": "2016-09-01",
    "DEVICE_INITIAL_SDK_INT": "25",
    "*.build.id": "MPHS24.49-18-8",
    "*.security_patch": "2016-09-01",
    "*api_level": "25"
}

❯ adb shell

AI2202:/ $ su
AI2202:/ # logcat -c
AI2202:/ # killall com.google.android.gms.unstable
killall: com.google.android.gms.unstable: No such process
AI2202:/ # killall com.google.android.gms
AI2202:/ # logcat -d | grep PIF
logcat -d | grep PIF
05-16 06:11:44.248 15557 15557 D PIF     : Dex file size: 7552
05-16 06:11:44.248 15557 15557 D PIF     : Json file size: 516
05-16 06:11:44.296 15557 15557 D PIF     : get system classloader
05-16 06:11:44.296 15557 15557 D PIF     : create class loader
05-16 06:11:44.297 15557 15557 D PIF     : load class
05-16 06:11:44.297 15557 15557 D PIF     : call init
05-16 06:11:44.298 15557 15557 D PIF     : Field *.build.id not found!
05-16 06:11:44.298 15557 15557 D PIF     : Field *.security_patch not found!
05-16 06:11:44.298 15557 15557 D PIF     : Field *api_level not found!
05-16 06:11:44.298 15557 15557 D PIF     : Save BRAND with value: motorola
05-16 06:11:44.298 15557 15557 D PIF     : Save DEVICE with value: clark
05-16 06:11:44.298 15557 15557 D PIF     : Save DEVICE_INITIAL_SDK_INT with value: 25
05-16 06:11:44.298 15557 15557 D PIF     : Save FINGERPRINT with value: motorola/clark_retus/clark:6.0/MPHS24.49-18-8/4:u
ser/release-keys
05-16 06:11:44.298 15557 15557 D PIF     : Save ID with value: MPHS24.49-18-8
05-16 06:11:44.298 15557 15557 D PIF     : Save INCREMENTAL with value: 4
05-16 06:11:44.298 15557 15557 D PIF     : Save MANUFACTURER with value: motorola
05-16 06:11:44.298 15557 15557 D PIF     : Save MODEL with value: XT1575
05-16 06:11:44.298 15557 15557 D PIF     : Save PRODUCT with value: clark_retus
05-16 06:11:44.298 15557 15557 D PIF     : Save RELEASE with value: 6.0
05-16 06:11:44.298 15557 15557 D PIF     : Save SECURITY_PATCH with value: 2016-09-01
05-16 06:11:44.298 15557 15557 D PIF     : Save TAGS with value: release-keys
05-16 06:11:44.298 15557 15557 D PIF     : Save TYPE with value: user
05-16 06:11:44.298 15557 15557 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.298 15557 15557 D PIF     : Set ID field value: MPHS24.49-18-8
05-16 06:11:44.298 15557 15557 D PIF     : Set FINGERPRINT field value: motorola/clark_retus/clark:6.0/MPHS24.49-18-8/4:u
ser/release-keys
05-16 06:11:44.298 15557 15557 D PIF     : Set PRODUCT field value: clark_retus
05-16 06:11:44.298 15557 15557 D PIF     : Set INCREMENTAL field value: 4
05-16 06:11:44.298 15557 15557 D PIF     : Set MANUFACTURER field value: motorola
05-16 06:11:44.298 15557 15557 D PIF     : Set BRAND field value: motorola
05-16 06:11:44.298 15557 15557 D PIF     : Set DEVICE field value: clark
05-16 06:11:44.298 15557 15557 D PIF     : Set MODEL field value: XT1575
05-16 06:11:44.298 15557 15557 D PIF     : Set SECURITY_PATCH field value: 2016-09-01
05-16 06:11:44.298 15557 15557 D PIF     : Set RELEASE field value: 6.0
05-16 06:11:44.299 15557 15557 D PIF     : Found and hooked __system_property_read_callback at 0x7f7ace93b0
05-16 06:11:44.311 15557 15579 D PIF     : [ro.treble.enabled]: true
05-16 06:11:44.312 15557 15579 D PIF     : [sys.use_memfd]: false
05-16 06:11:44.316 15557 15557 D PIF     : [dalvik.vm.dexopt.secondary]: true
05-16 06:11:44.317 15557 15557 D PIF     : [dalvik.vm.dexopt.secondary]: true
05-16 06:11:44.318 15557 15557 D PIF     : [dalvik.vm.dexopt.secondary]: true
05-16 06:11:44.334 15557 15557 D PIF     : [dalvik.vm.dexopt.secondary]: true
05-16 06:11:44.342 15557 15557 D PIF     : Service: 'CertificateFactory' | Algorithm: 'X.509'
05-16 06:11:44.343 15557 15583 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.349 15557 15557 D PIF     : [build.version.extensions.r]: 11
05-16 06:11:44.349 15557 15557 D PIF     : [build.version.extensions.s]: 11
05-16 06:11:44.349 15557 15557 D PIF     : [build.version.extensions.t]: 11
05-16 06:11:44.349 15557 15557 D PIF     : [build.version.extensions.u]: 11
05-16 06:11:44.349 15557 15557 D PIF     : [build.version.extensions.ad_services]: 11
05-16 06:11:44.370 15557 15557 D PIF     : Service: 'KeyStore' | Algorithm: 'BKS'
05-16 06:11:44.370 15557 15588 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.423 15557 15578 D PIF     : [dalvik.vm.dexopt.secondary]: true
05-16 06:11:44.620 15557 15608 D PIF     : Service: 'KeyStore' | Algorithm: 'AndroidCAStore'
05-16 06:11:44.622 15557 15618 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.628 15557 15608 D PIF     : Service: 'KeyStore' | Algorithm: 'BKS'
05-16 06:11:44.628 15557 15619 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.629 15557 15608 D PIF     : Service: 'CertPathValidator' | Algorithm: 'PKIX'
05-16 06:11:44.629 15557 15620 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.644 15557 15608 D PIF     : Service: 'AlgorithmParameters' | Algorithm: '1.2.840.10045.2.1'
05-16 06:11:44.645 15557 15621 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.735 15557 15578 D PIF     : [dalvik.vm.dexopt.secondary]: true
05-16 06:11:44.751 15557 15578 D PIF     : Service: 'KeyStore' | Algorithm: 'AndroidKeyStore'
05-16 06:11:44.752 15557 15578 D PIF     : Service: 'KeyStore' | Algorithm: 'AndroidKeyStore'
05-16 06:11:44.752 15557 15623 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.752 15557 15624 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.755 15557 15578 D PIF     : Service: 'KeyPairGenerator' | Algorithm: 'EC'
05-16 06:11:44.755 15557 15578 D PIF     : Service: 'KeyPairGenerator' | Algorithm: 'EC'
05-16 06:11:44.755 15557 15627 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.756 15557 15626 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.812 15557 15578 D PIF     : DroidGuard call detected. Throw exception!
05-16 06:11:44.859 15557 15578 D PIF     : [ro.build.version.security_patch]: 2024-05-05
05-16 06:11:44.867 15557 15578 D PIF     : [ro.product.first_api_level]: 31
05-16 06:11:44.867 15557 15578 D PIF     : [ro.boot.verifiedbootstate]: green
05-16 06:11:44.882 15557 15578 D PIF     : Service: 'KeyStore' | Algorithm: 'AndroidKeyStore'
05-16 06:11:44.882 15557 15631 D PIF     : java.lang.IllegalArgumentException: field android.os.Build$VERSION.DEVICE_INIT
IAL_SDK_INT has type int, got java.lang.String
05-16 06:11:44.884 15557 15578 D PIF     : DroidGuard call detected. Throw exception!
05-16 06:11:44.884 15557 15578 D PIF     : [ro.secure]: 1
05-16 06:11:44.884 15557 15578 D PIF     : [ro.debuggable]: 0
05-16 06:11:44.886 15557 15578 D PIF     : [ro.board.first_api_level]: 31
05-16 06:11:44.886 15557 15578 D PIF     : [ro.vendor.api_level]: 31
05-16 06:11:45.086 15557 15578 D PIF     : [ro.vendor.api_level]: 31
05-16 06:11:45.086 15557 15578 D PIF     : [hwservicemanager.ready]: true
05-16 06:11:45.087 15557 15578 D PIF     : [ro.vendor.api_level]: 31
05-16 06:11:45.087 15557 15578 D PIF     : [ro.vndk.version]: 35
05-16 06:11:45.090 15557 15578 D PIF     : [ro.surface_flinger.has_wide_color_display]: true
05-16 06:11:45.090 15557 15578 D PIF     : [ro.surface_flinger.has_HDR_display]: true
05-16 06:11:45.092 15557 15578 D PIF     : [ro.build.id]: AP1A.240505.005
05-16 06:11:45.167 15557 15578 D PIF     : [ro.zygote]: zygote64_32
Momo

Hunter

Play Integrity (SPIC)
{
  "accountDetails": {
    "appLicensingVerdict": "LICENSED"
  },
  "appIntegrity": {
    "appRecognitionVerdict": "PLAY_RECOGNIZED",
    "certificateSha256Digest": [
      "_zjHvW5D0vMAQ78JM2p2uWx9XLBnXWGIsg7yiyrP7ec"
    ],
    "packageName": "[com.henrikherzig.playintegritychecker](http://com.henrikherzig.playintegritychecker/)",
    "versionCode": "7"
  },
  "deviceIntegrity": {
    "deviceRecognitionVerdict": [
      "MEETS_BASIC_INTEGRITY"
    ]
  },
  "requestDetails": {
    "nonce": "a2dRWDRXSE1PcTBsRmFFQTVEVkx5ZkNZR09GTzhhM1liZjRVYnBrY2Y4SnNVR3BQeGU\u003d",
    "requestPackageName": "[com.henrikherzig.playintegritychecker](http://com.henrikherzig.playintegritychecker/)",
    "timestampMillis": 1715853567775
  }
}
SafteyNet (SPIC)
{
  "apkCertificateDigestSha256": [
    "/zjHvW5D0vMAQ78JM2p2uWx9XLBnXWGIsg7yiyrP7ec\u003d"
  ],
  "apkDigestSha256": "DptbkXD9gp0gJo6lxUSvpwb8DfNB29O7WvBnFbl4P9I\u003d",
  "apkPackageName": "com.henrikherzig.playintegritychecker",
  "basicIntegrity": true,
  "ctsProfileMatch": false,
  "evaluationType": "BASIC",
  "nonce": "ZWM2NzQ2ZDktMzNiNi00ZjdhLWE4NGItMTkxNGZkZDU1MDBh",
  "timestampMs": 1715853757312,
  "deprecationInformation": "The app is allowlisted to use the SafetyNet Attestation API until the full turndown: [https://g.co/play/safetynet-timeline."](https://g.co/play/safetynet-timeline.%22)
}

Unable to call or receive calls on `omni-14-202404091525-zenfone9-GAPPS`

Worked fine previously, calling results in an immediate disconnect. Receiving calls goes directly to voicemail. Reinstalling SIM doesn't help. Occurs on both stock build.prop and boot.img.

Still occurs on 14-202404301527-zenfone9-GAPPS.

I see the following exceptions in logcat

04-30 14:21:55.210  2688  2688 E Telecom : InCallController: Package Manager could not find ComponentName: ComponentInfo{com.android.dialer/com.android.incallui.InCallServiceImpl}. Trying to bind anyway.: TSI.pC->CM.fOCP->CM.sOCPA->CM.dSMCP->CM.dSPA->CM.pASP(cgad)@EMY
04-30 14:21:55.210  2688  2688 E Telecom : java.lang.Exception
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.server.telecom.InCallController.getInCallServiceComponent(InCallController.java:2080)
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.server.telecom.InCallController.bindToServices(InCallController.java:1920)
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.server.telecom.InCallController.onCallAdded(InCallController.java:1353)
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.server.telecom.CallsManager.addCall(CallsManager.java:4383)
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.server.telecom.CallsManager.lambda$startOutgoingCall$11(CallsManager.java:2268)
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.server.telecom.CallsManager.$r8$lambda$ReExtwr9Kd8fbi7sMbxjjmf3yEI(CallsManager.java:0)
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.server.telecom.CallsManager$$ExternalSyntheticLambda13.apply(R8$$SyntheticClass:0)
04-30 14:21:55.210  2688  2688 E Telecom :      at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1126)
04-30 14:21:55.210  2688  2688 E Telecom :      at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:458)
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.server.telecom.LoggedHandlerExecutor$1.loggedRun(LoggedHandlerExecutor.java:41)
04-30 14:21:55.210  2688  2688 E Telecom :      at android.telecom.Logging.Runnable$1.run(Runnable.java:37)
04-30 14:21:55.210  2688  2688 E Telecom :      at android.os.Handler.handleCallback(Handler.java:959)
04-30 14:21:55.210  2688  2688 E Telecom :      at android.os.Handler.dispatchMessage(Handler.java:100)
04-30 14:21:55.210  2688  2688 E Telecom :      at android.os.Looper.loopOnce(Looper.java:232)
04-30 14:21:55.210  2688  2688 E Telecom :      at android.os.Looper.loop(Looper.java:317)
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.server.SystemServer.run(SystemServer.java:1002)
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.server.SystemServer.main(SystemServer.java:686)
04-30 14:21:55.210  2688  2688 E Telecom :      at java.lang.reflect.Method.invoke(Native Method)
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
04-30 14:21:55.210  2688  2688 E Telecom :      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:856)

04-30 14:21:55.385 15291 15291 E AndroidRuntime: FATAL EXCEPTION: main
04-30 14:21:55.385 15291 15291 E AndroidRuntime: Process: org.codeaurora.ims, PID: 15291
04-30 14:21:55.385 15291 15291 E AndroidRuntime: java.lang.NoSuchMethodError: No static method isVosSupported(ILandroid/content/Context;)Z in class Lorg/codeaurora/ims/utils/QtiImsExtUtils; or its super classes (declaration of 'org.codeaurora.ims.utils.QtiImsExtUtils' appears in /product/framework/ims-ext-common.jar)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at org.codeaurora.ims.ImsCallSessionImpl.updateImsCallProfile(ImsCallSessionImpl.java:1931)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at org.codeaurora.ims.ImsCallSessionImpl.updateCall(ImsCallSessionImpl.java:377)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at org.codeaurora.ims.ImsServiceClassTracker.handleCalls(ImsServiceClassTracker.java:246)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at org.codeaurora.ims.ImsServiceSub.handleCalls(ImsServiceSub.java:1343)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at org.codeaurora.ims.ImsServiceSub.-$$Nest$mhandleCalls(Unknown Source:0)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at org.codeaurora.ims.ImsServiceSub$ImsServiceSubHandler.handleMessage(ImsServiceSub.java:1580)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:107)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at android.os.Looper.loopOnce(Looper.java:232)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:317)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:8501)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
04-30 14:21:55.385 15291 15291 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)
04-30 14:21:55.385  3778  3778 I ImsExternalCallTracker: onPhoneStateChanged : hasActiveCalls = true

(arter97 Kernel only) Crashing apps due to inaccessibility of their own `/sdcard/Android/data/<package name>` dirs

For some reason lots of apps are complaining about a lack of access to their own /sdcard/Android/data/<package name> dirs, after updating to omni-14-202403121645-zenfone9-GAPPS. This causes tons of crashes, and logs within logcat. Deleting the dirs, clearing the app data, and reinstalling the apps, all don't work. I'm not sure if the /data/data/<package name> dir's are also effected by this.

DeX-like function

Hello,
There is no discussion thread so I opened a bug report; I hope you don’t mind. I’m looking to buy a Zenfone 9 but it lacks the one feature I really want: PnP mobile desktop! I am genuinely surprised at the lack of support across the board for this feature from every manufacturer, except Samsung and Motorola. However, Samsung is bloated to the nines annd I’m not a big fan of Motorola ‘s design, so for a similar price point the Zenfone has the S22 beat and is close to the S23 and Edge Plus.

Does this ROM have PnP mobile desktop? If not can you point me to one that does? Or… maybe you can add that feature?

Animation lag on `omni-14-202403121645-zenfone9-GAPPS`

With 120Hz set, and Force Peak Refresh Rate also set, 13 was very smooth, but in the current latest release when the device's under minimal load, the animations can get very laggy (the refresh rate itself doesn't dip), most noticeable when scrolling. When there's no longer minimal load, it seems fine.

omni-13-202310010228 breaks mtp and adb via USB

OTG flash drives seem to work and mount fine, and wireless adb also seems to work, to be clear, but mtp and adb via USB are straight up not working, not even in recovery, no matter if I'm rooted, have any /system modifications, or just stuck flash the ROM. Do I require some new drivers? I have the latest Google USB drivers

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.