diff --git a/.crowdin.yml b/.crowdin.yml deleted file mode 100644 index 4cfca9e373..0000000000 --- a/.crowdin.yml +++ /dev/null @@ -1,4 +0,0 @@ -base_path: Clover/app/src/main -files: - - source: /res/values/strings.xml - translation: /res/values-%android_code%/strings.xml diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 89aaa32c65..0000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,9 +0,0 @@ -[short and descriptive title] - -[detailed explanation of the issue] - -[steps to reproduce the issue] - -Android version: [Find at Settings > About phone > android version] -Phone model: [Find at Settings > About phone > Model number] -Clover version: [Find at the bottom of the settings screen of Clover] diff --git a/.github/workflows/dispatch.yml b/.github/workflows/dispatch.yml new file mode 100644 index 0000000000..da2b749223 --- /dev/null +++ b/.github/workflows/dispatch.yml @@ -0,0 +1,14 @@ +name: Dispatch Build Request +on: + push: + branches: [ multi-feature ] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: peter-evans/repository-dispatch@v1 + with: + token: ${{ secrets.REPO_ACCESS_TOKEN }} + repository: ${{ github.repository_owner }}/${{ secrets.DEV_REPO }} + event-type: build_dev \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5272c0c035..c74405a520 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ gps/ -Clover/app/keys.properties -Clover/app/version.properties -Clover/captures/ +**/keys.properties +**/keystore.jks +**/version.properties #built application files @@ -27,6 +27,8 @@ local.properties .gradle build/ *.iml +# Layout captures +**/*.li ## Windows detritus ############# diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 0f21f21aee..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -sudo: false -language: android -jdk: - - oraclejdk8 -android: - components: - - platform-tools - - tools - - extra-android-m2repository - - build-tools-28.0.3 - - android-27 - -script: cd Clover && ./gradlew build --console plain -x lint - -notifications: - email: false diff --git a/CHANGES.txt b/CHANGES.txt deleted file mode 100644 index 37f2ea5219..0000000000 --- a/CHANGES.txt +++ /dev/null @@ -1,188 +0,0 @@ -New in 3.0.2 (2019-03-12) -- More sites added. -- New video player. -- Translations added. - - -New in 3.0.1 (2018-04-29) -- Bug fixes. - - -New in 3.0.0 (2018-04-27) -This release adds the foundation for support of multiple sites. Beta implementations of 8chan and Lainchan are implemented. - -- Multisite support. -- Noscript recaptcha 2 support. -- Added a scrollbar. -- New posting options. -- Post text selection. - - -New in 2.3.1 (2017-07-15) -- Better link detection. -- More themes. -- Fix image loading taking a long time if the cache is full. -- Fix crashing bug related to the status view. -- Bug fixes. - - -New in 2.3.0 (2017-03-19) -- Added update checker to notify of new releases. -- Force new captcha for thread making. -- Bug fixes. - - -New in 2.2.0 (2016-10-03) -- Add sliding of threads back. -- Rewrote thread watching, it's more stable and works correctly with doze now. -- Optimized parsing with multithreading. -- Added album view. -- Added bookmark clearing. - -- Added inline reporting. -- All boards are added by default now. -- Thread positions are retained across restarts. -- Allow setting of multiple types on filters simultaneously. -- Made single frame gifs zoomable. -- Add saving of images into their own board folder. -- More advanced settings. -- Many bug fixes. - - -New in 2.1.3 (2016-01-28) -- New Google Play release - - -New in 2.1.2 (2016-01-17) -- Fix for a crash on Android 4 -- Changed the top boards again - - -New in 2.1.1 (2016-01-17) -- Fix for the freeze bug -- Bug fixes -- The reply button color can be changed -- Reply button hides on scroll - - -New in 2.1.0 (2015-11-18) -This is the release version of 2.0.0 that added: -- Swipeable controllers -- Fixed recaptcha v1 -- Added some more advanced options -- Bug fixes - - -New in 2.0.0 (2015-08-23) -- New design. -- New inline reply layout. -- Support for thread hiding. -- Support for filtering threads, making posts either highlighted, hidden or completely removed. -- Support for history. -- More themes were added. -- Album downloads have been improved. -- Catalog mode now uses cards. -- More advanced options added. -- Minor features and bug fixes. - - -New in 1.2.11 (2015-06-20) -- Update/fix captchas - - -New in 1.2.10 (2015-04-01) -With the help of recaptcha support and nin9tyfour (developer of the iOS 4chan app Fortune), recaptcha v2 has been implemented. This means you will see the captcha box you also see on the desktop. - -- Replaced fallback captcha with the captcha v2 box -- Bug fixes - - -New in 1.2.9 (2015-02-06) -- More captcha fixing, should be easier now. - - -New in 1.2.8 (2015-02-06) -- Fix captcha not working - - -New in 1.2.7 (2015-01-31) -- Fix some image loading issues - - -New in 1.2.6 (2015-01-28) -- Fix for captcha image not loading - - -New in 1.2.5 (2014-12-11) -- Fix 4chan pass - - -New in 1.2.4 (2014-12-10) -- Properly fixed captchas -- Other bug fixes - - -New in 1.2.3 (2014-12-08) -- Hotfix for captchas - - -New in 1.2.2 (2014-10-26) -- Fixed HTTPS errors on Android below Android 4.4 - - -New in 1.2.1 (2014-10-23) -- Improved replying, adding spoiler support -- Image spoiler support -- Better text spoilers -- Improved notifications -- HTTPS option -- Bug fixes - - -New in 1.2.0 (2014-08-22) -- Added search (boards and threads) -- Updated the image loader -- Added reverse image search -- Fixed some file picking issues -- And more bug fixes - - -New in 1.1.3 (2014-07-23) -- Added an overflow button to posts, replaces long holding -- Added gridview -- Added advanced settings -- Added dead link support -- Added code tag support -- Added linking to other threads -- Added thumbnails and countdowns to pins -- Loading catalog mode by default, can be changed under advanced settings -- All worksafe boards are now added by default -- Fixed issue where pins could not be removed -- Lots of bug fixes - - -New in 1.1.2 (2014-06-18) -- Added quick reply -- Bug fixes and other improvements - - -New in 1.1 (2014-05-28) -- Added light, dark and black theme -- Add option for auto refreshing threads -- Add option for auto loading images -- Lots of bug fixes. - - -New in 1.0.2 (2014-05-07) -- Fixed APK - - -New in 1.0.1 (2014-05-07) -- Bigger comment view -- Added button to scroll up/down a thread -- Fix images sometimes appearing empty -- More bug fixes - - -New in 1.0 (2014-05-04) -- Release! diff --git a/Clover/app/build.gradle b/Clover/app/build.gradle deleted file mode 100644 index ad8ff1fd27..0000000000 --- a/Clover/app/build.gradle +++ /dev/null @@ -1,163 +0,0 @@ -apply plugin: 'com.android.application' - -/** - * Gets the version name from the latest Git tag - */ -def getCommitHash = { -> - def stdout = new ByteArrayOutputStream() - exec { - commandLine 'git', 'rev-parse', '--short=8', 'HEAD' - standardOutput = stdout - } - return stdout.toString().trim() -} - -android { - compileSdkVersion 27 - // update the travis config when changing this - buildToolsVersion '28.0.3' - - defaultConfig { - minSdkVersion 15 - targetSdkVersion 25 - - versionName "v3.0.2" - // of the format XXYYZZ, where XX is major, YY is minor, ZZ is patch - // (watch out for octal notation, never start with a 0) - versionCode 30002 - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - lintOptions { - abortOnError false - } - - // Needed for volley - useLibrary 'org.apache.http.legacy' - - /* - If you want to sign releases, make a file in app/keys.properties with the following content: - keystoreFile=yourkey.store - keystorePass=pass - keyAlias=alias - keyPass=pass - */ - - def hash = getCommitHash(); - - File f = file('keys.properties') - boolean doSign = f.exists(); - - if (doSign) { - Properties props = new Properties() - InputStream is = new FileInputStream(f) - props.load(is) - - signingConfigs { - release { - storeFile file(props['keystoreFile']) - storePassword props['keystorePass'] - keyAlias props['keyAlias'] - keyPassword props['keyPass'] - } - } - - is.close() - } - - defaultPublishConfig "default" - flavorDimensions "default" - productFlavors { - // NOTE: the file provider authority names append to the package name. - // When changing this also update the authority in the manifest files. - - // The app name refers to the name as displayed on the launcher. - // the flavor name is appended to the name in the settings. - "default" { - dimension "default" - applicationId "org.floens.chan" - resValue "string", "app_name", "Clover" - resValue "string", "app_flavor_name", "" - buildConfigField "String", "BUILD_HASH", "\"$hash\"" - buildConfigField "String", "UPDATE_API_ENDPOINT", "\"https://build.floens.org/api/update\"" - buildConfigField "String", "CRASH_REPORT_ENDPOINT", "\"https://acra.floens.org/clover/report\"" - } - - dev { - dimension "default" - applicationId "org.floens.chan.dev" - resValue "string", "app_name", "Clover dev" - resValue "string", "app_flavor_name", "" - buildConfigField "String", "BUILD_HASH", "\"$hash\"" - buildConfigField "String", "UPDATE_API_ENDPOINT", "\"https://build.floens.org/api/update_dev\"" - buildConfigField "String", "CRASH_REPORT_ENDPOINT", "\"https://acra.floens.org/clover/report\"" - - versionNameSuffix "-" + hash - } - - fdroid { - dimension "default" - applicationId "org.floens.chan" - resValue "string", "app_name", "Clover" - resValue "string", "app_flavor_name", "F-Droid" - buildConfigField "String", "BUILD_HASH", "\"$hash\"" - buildConfigField "String", "UPDATE_API_ENDPOINT", "\"https://floens.github.io/Clover/api/update\"" - buildConfigField "String", "CRASH_REPORT_ENDPOINT", "\"https://acra.floens.org/clover/report\"" - } - } - - buildTypes { - release { - if (doSign) { - signingConfig signingConfigs.release - } - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg' - } - - debug { -// minifyEnabled true -// proguardFiles 'proguard.cfg' - } - } -} - -dependencies { - def supportVersion = '27.1.1' - - implementation "com.android.support:support-v13:${supportVersion}" - implementation "com.android.support:appcompat-v7:${supportVersion}" - implementation "com.android.support:recyclerview-v7:${supportVersion}" - implementation "com.android.support:cardview-v7:${supportVersion}" - implementation "com.android.support:support-annotations:${supportVersion}" - implementation "com.android.support:exifinterface:${supportVersion}" - implementation "com.android.support:design:${supportVersion}" - implementation "com.android.support:customtabs:${supportVersion}" - implementation 'com.android.support.constraint:constraint-layout:1.1.2' - - implementation 'com.google.android.exoplayer:exoplayer-core:2.9.0' - implementation 'com.google.android.exoplayer:exoplayer-ui:2.9.0' - - implementation 'com.squareup.okhttp3:okhttp:3.10.0' - //noinspection GradleDependency - implementation 'com.j256.ormlite:ormlite-core:4.48' - //noinspection GradleDependency - implementation 'com.j256.ormlite:ormlite-android:4.48' - implementation 'org.jsoup:jsoup:1.11.3' - implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.12' - implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.10.0' - //noinspection GradleDependency - implementation 'de.greenrobot:eventbus:2.4.0' - implementation 'org.nibor.autolink:autolink:0.9.0' - implementation 'com.google.code.gson:gson:2.8.5' - implementation 'me.xdrop:fuzzywuzzy:1.1.10' - implementation 'org.codejargon.feather:feather:1.0' - - releaseImplementation 'ch.acra:acra-http:5.1.3' - testImplementation 'junit:junit:4.12' - testImplementation 'org.mockito:mockito-core:2.27.0' -} diff --git a/Clover/app/proguard.cfg b/Clover/app/proguard.cfg deleted file mode 100644 index a3ac73614f..0000000000 --- a/Clover/app/proguard.cfg +++ /dev/null @@ -1,125 +0,0 @@ -# This is a configuration file for ProGuard. -# http://proguard.sourceforge.net/index.html#manual/usage.html - -# Optimizations: If you don't want to optimize, use the -# proguard-android.txt configuration file instead of this one, which -# turns off the optimization flags. Adding optimization introduces -# certain risks, since for example not all optimizations performed by -# ProGuard works on all versions of Dalvik. The following flags turn -# off various optimizations known to have issues, but the list may not -# be complete or up to date. (The "arithmetic" optimization can be -# used if you are only targeting Android 2.0 or later.) Make sure you -# test thoroughly if you go this route. -#-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* -#-optimizationpasses 2 -#-allowaccessmodification --dontoptimize --dontpreverify - -# The remainder of this file is identical to the non-optimized version -# of the Proguard configuration file (except that the other file has -# flags to turn off optimization). - --dontusemixedcaseclassnames --dontskipnonpubliclibraryclasses --verbose - -# Keep sourcefile and linenumbers for easier crash report inspection --keepattributes SourceFile,LineNumberTable - --keepattributes *Annotation* --keep public class com.google.vending.licensing.ILicensingService --keep public class com.android.vending.licensing.ILicensingService - -# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native --keepclasseswithmembernames class * { - native ; -} - -# keep setters in Views so that animations can still work. -# see http://proguard.sourceforge.net/manual/examples.html#beans --keepclassmembers public class * extends android.view.View { - void set*(***); - *** get*(); -} - -# We want to keep methods in Activity that could be used in the XML attribute onClick --keepclassmembers class * extends android.app.Activity { - public void *(android.view.View); -} - -# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations --keepclassmembers enum * { - public static **[] values(); - public static ** valueOf(java.lang.String); -} - --keepclassmembers class * implements android.os.Parcelable { - public static final android.os.Parcelable$Creator CREATOR; -} - --keepclassmembers class **.R$* { - public static ; -} - -# The support library contains references to newer platform versions. -# Don't warn about those in case this app is linking against an older -# platform version. We know about them, and they are safe. --dontwarn android.support.** - -# OrmLite uses reflection --keep class com.j256.** --keepclassmembers class com.j256.** { *; } --keep enum com.j256.** --keepclassmembers enum com.j256.** { *; } --keep interface com.j256.** --keepclassmembers interface com.j256.** { *; } - -# Clover database models --keep class org.floens.chan.core.model.orm.** { *; } -# And JSON models --keep class org.floens.chan.core.model.json.** { *; } - -# Required for the gif library --keep public class pl.droidsonroids.gif.GifIOException{(int);} --keep class pl.droidsonroids.gif.GifInfoHandle{(long,int,int,int);} - -# OkHttp and LeakCanary --dontwarn java.nio.** --dontwarn javax.annotation.** --dontwarn org.codehaus.mojo.** -# LeakCanary uses removed method (checks the API level) --dontwarn com.squareup.leakcanary.DisplayLeakService --dontwarn org.conscrypt.** - -# Jsoup --keeppackagenames org.jsoup.nodes - -# JS interfaces --keepclassmembers class * { - @android.webkit.JavascriptInterface ; -} - -# EventBus --keepclassmembers class ** { - public void onEvent*(**); -} - -#-keep public class * extends android.support.design.** - -# Some reflection is used on RecyclerView and SlidingPaneLayout --keep public class android.support.v7.widget.RecyclerView --keep public class android.support.v4.widget.SlidingPaneLayout - -# Keep Feather inject working. --keepclassmembers,allowobfuscation class * { - @javax.inject.* *; - (); -} - -# ACRA stuff -# ACRA loads Plugins using reflection, so we need to keep all Plugin classes --keep class * extends @android.support.annotation.Keep org.acra.** {*;} - -# ACRA uses enum fields in annotations, so we have to keep those --keep enum org.acra.** {*;} diff --git a/Clover/app/src/debug/java/org/floens/chan/ChanApplication.java b/Clover/app/src/debug/java/org/floens/chan/ChanApplication.java deleted file mode 100644 index ebad39edf4..0000000000 --- a/Clover/app/src/debug/java/org/floens/chan/ChanApplication.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan; - -/** - * The ChanApplication belonging to the debug configuration. - * - * It does not have acra enabled, unlike the release version, and immediately calls initialize. - */ -public class ChanApplication extends Chan { - @Override - public void onCreate() { - super.onCreate(); - - initialize(); - } -} diff --git a/Clover/app/src/debug/java/org/floens/chan/ChanBuild.java b/Clover/app/src/debug/java/org/floens/chan/ChanBuild.java deleted file mode 100644 index 2029f65f9d..0000000000 --- a/Clover/app/src/debug/java/org/floens/chan/ChanBuild.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan; - -// debug version -public class ChanBuild { - public static final boolean DEVELOPER_MODE = true; -} diff --git a/Clover/app/src/default/AndroidManifest.xml b/Clover/app/src/default/AndroidManifest.xml deleted file mode 100644 index 0b5bc286bb..0000000000 --- a/Clover/app/src/default/AndroidManifest.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - diff --git a/Clover/app/src/dev/AndroidManifest.xml b/Clover/app/src/dev/AndroidManifest.xml deleted file mode 100644 index e4f437e27d..0000000000 --- a/Clover/app/src/dev/AndroidManifest.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - diff --git a/Clover/app/src/fdroid/AndroidManifest.xml b/Clover/app/src/fdroid/AndroidManifest.xml deleted file mode 100644 index 0b5bc286bb..0000000000 --- a/Clover/app/src/fdroid/AndroidManifest.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - diff --git a/Clover/app/src/main/AndroidManifest.xml b/Clover/app/src/main/AndroidManifest.xml deleted file mode 100644 index c0c9ddd2b5..0000000000 --- a/Clover/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/assets/font/Roboto-Medium.ttf b/Clover/app/src/main/assets/font/Roboto-Medium.ttf deleted file mode 100644 index a3c1a1f170..0000000000 Binary files a/Clover/app/src/main/assets/font/Roboto-Medium.ttf and /dev/null differ diff --git a/Clover/app/src/main/assets/font/Roboto-MediumItalic.ttf b/Clover/app/src/main/assets/font/Roboto-MediumItalic.ttf deleted file mode 100644 index b828205541..0000000000 Binary files a/Clover/app/src/main/assets/font/Roboto-MediumItalic.ttf and /dev/null differ diff --git a/Clover/app/src/main/assets/font/RobotoCondensed-Regular.ttf b/Clover/app/src/main/assets/font/RobotoCondensed-Regular.ttf deleted file mode 100644 index b9fc49c95b..0000000000 Binary files a/Clover/app/src/main/assets/font/RobotoCondensed-Regular.ttf and /dev/null differ diff --git a/Clover/app/src/main/assets/html/license.html b/Clover/app/src/main/assets/html/license.html deleted file mode 100644 index 46dd27314b..0000000000 --- a/Clover/app/src/main/assets/html/license.html +++ /dev/null @@ -1,701 +0,0 @@ - - - - Clover Licence - - - -
-        
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    
-    Copyright (C)   
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-      Copyright (C)   
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-.
-        
-    
-
- - - diff --git a/Clover/app/src/main/assets/html/licenses.html b/Clover/app/src/main/assets/html/licenses.html deleted file mode 100644 index 0c3bc6de33..0000000000 --- a/Clover/app/src/main/assets/html/licenses.html +++ /dev/null @@ -1,294 +0,0 @@ - - - - Open Source Licences - - - - -

This software includes several Android classes from the Android Open Source Project.

-
-        
-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.
-        
-    
-
- -

OrmLite

- http://ormlite.com/ -
-        
-Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby
-granted, provided that this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
-DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
-USE OR PERFORMANCE OF THIS SOFTWARE.
-
-The author may be contacted via http://ormlite.com/
-        
-    
-
- -

EventBus

- https://github.com/greenrobot/EventBus -
-        
-Copyright (C) 2012 Markus Junginger, greenrobot (http://greenrobot.de)
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-        
-    
-
- -

Subsampling Scale Image View

- https://github.com/davemorrissey/subsampling-scale-image-view -
-        
-Copyright 2014 David Morrissey
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-        
-    
-
- -

Square okhttp

- https://github.com/square/okhttp -
-        
-Copyright (C) 2014 Square, 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.
-        
-    
-
- -

Jsoup

- http://jsoup.org/ -
-        
-The jsoup code-base (include source and compiled packages) are distributed under the open source MIT license as described below.
-
-The MIT License
-Copyright © 2009 - 2013 Jonathan Hedley (jonathan@hedley.net)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-        
-    
-
- -

android-gif-drawable

- https://github.com/koral--/android-gif-drawable -
-        
-MIT License
-Copyright (c)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-// Copyright (c) 2011 Google Inc. 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 Google Inc. 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 AND FITNESS FOR
-// A PARTICULAR PURPOSE 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.
-
-The GIFLIB distribution is Copyright (c) 1997  Eric S. Raymond
-        
-    
-
- -

autolink-java

- https://github.com/robinst/autolink-java -
-        
-The MIT License (MIT)
-
-Copyright (c) 2015 Robin Stocker
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-        
-    
- -

Google Gson

- https://github.com/google/gson -
-        
-Copyright 2008 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.
-        
-    
-
- -

xdrop fuzzywuzzy

- https://github.com/xdrop/fuzzywuzzy -
-        
-fuzzywuzzy
-Java fuzzy string matching implementation of the well known Python's fuzzywuzzy algorithm. Fuzzy search for Java
-
-Copyright (C) 2016 xdrop
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-        
-    
-
- -

zsoltherpai feather

- https://github.com/zsoltherpai/feather -
-        
-Copyright {2015} {Zsolt Herpai}
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-        
-    
-
- - - diff --git a/Clover/app/src/main/assets/icons/4chan.png b/Clover/app/src/main/assets/icons/4chan.png deleted file mode 100644 index dec7c4b673..0000000000 Binary files a/Clover/app/src/main/assets/icons/4chan.png and /dev/null differ diff --git a/Clover/app/src/main/java/com/android/volley/AuthFailureError.java b/Clover/app/src/main/java/com/android/volley/AuthFailureError.java deleted file mode 100644 index 7bb2e15fca..0000000000 --- a/Clover/app/src/main/java/com/android/volley/AuthFailureError.java +++ /dev/null @@ -1,61 +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.volley; - -import android.content.Intent; - -import com.android.volley.NetworkResponse; -import com.android.volley.VolleyError; - -/** - * Error indicating that there was an authentication failure when performing a Request. - */ -@SuppressWarnings("serial") -public class AuthFailureError extends VolleyError { - /** An intent that can be used to resolve this exception. (Brings up the password dialog.) */ - private Intent mResolutionIntent; - - public AuthFailureError() { } - - public AuthFailureError(Intent intent) { - mResolutionIntent = intent; - } - - public AuthFailureError(NetworkResponse response) { - super(response); - } - - public AuthFailureError(String message) { - super(message); - } - - public AuthFailureError(String message, Exception reason) { - super(message, reason); - } - - public Intent getResolutionIntent() { - return mResolutionIntent; - } - - @Override - public String getMessage() { - if (mResolutionIntent != null) { - return "User needs to (re)enter credentials."; - } - return super.getMessage(); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/Cache.java b/Clover/app/src/main/java/com/android/volley/Cache.java deleted file mode 100644 index eafd118825..0000000000 --- a/Clover/app/src/main/java/com/android/volley/Cache.java +++ /dev/null @@ -1,97 +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.volley; - -import java.util.Collections; -import java.util.Map; - -/** - * An interface for a cache keyed by a String with a byte array as data. - */ -public interface Cache { - /** - * Retrieves an entry from the cache. - * @param key Cache key - * @return An {@link Entry} or null in the event of a cache miss - */ - public Entry get(String key); - - /** - * Adds or replaces an entry to the cache. - * @param key Cache key - * @param entry Data to store and metadata for cache coherency, TTL, etc. - */ - public void put(String key, Entry entry); - - /** - * Performs any potentially long-running actions needed to initialize the cache; - * will be called from a worker thread. - */ - public void initialize(); - - /** - * Invalidates an entry in the cache. - * @param key Cache key - * @param fullExpire True to fully expire the entry, false to soft expire - */ - public void invalidate(String key, boolean fullExpire); - - /** - * Removes an entry from the cache. - * @param key Cache key - */ - public void remove(String key); - - /** - * Empties the cache. - */ - public void clear(); - - /** - * Data and metadata for an entry returned by the cache. - */ - public static class Entry { - /** The data returned from cache. */ - public byte[] data; - - /** ETag for cache coherency. */ - public String etag; - - /** Date of this response as reported by the server. */ - public long serverDate; - - /** TTL for this record. */ - public long ttl; - - /** Soft TTL for this record. */ - public long softTtl; - - /** Immutable response headers as received from server; must be non-null. */ - public Map responseHeaders = Collections.emptyMap(); - - /** True if the entry is expired. */ - public boolean isExpired() { - return this.ttl < System.currentTimeMillis(); - } - - /** True if a refresh is needed from the original data source. */ - public boolean refreshNeeded() { - return this.softTtl < System.currentTimeMillis(); - } - } - -} diff --git a/Clover/app/src/main/java/com/android/volley/CacheDispatcher.java b/Clover/app/src/main/java/com/android/volley/CacheDispatcher.java deleted file mode 100644 index 18d219b4c9..0000000000 --- a/Clover/app/src/main/java/com/android/volley/CacheDispatcher.java +++ /dev/null @@ -1,158 +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.volley; - -import android.os.Process; - -import java.util.concurrent.BlockingQueue; - -/** - * Provides a thread for performing cache triage on a queue of requests. - * - * Requests added to the specified cache queue are resolved from cache. - * Any deliverable response is posted back to the caller via a - * {@link ResponseDelivery}. Cache misses and responses that require - * refresh are enqueued on the specified network queue for processing - * by a {@link NetworkDispatcher}. - */ -public class CacheDispatcher extends Thread { - - private static final boolean DEBUG = VolleyLog.DEBUG; - - /** The queue of requests coming in for triage. */ - private final BlockingQueue> mCacheQueue; - - /** The queue of requests going out to the network. */ - private final BlockingQueue> mNetworkQueue; - - /** The cache to read from. */ - private final Cache mCache; - - /** For posting responses. */ - private final ResponseDelivery mDelivery; - - /** Used for telling us to die. */ - private volatile boolean mQuit = false; - - /** - * Creates a new cache triage dispatcher thread. You must call {@link #start()} - * in order to begin processing. - * - * @param cacheQueue Queue of incoming requests for triage - * @param networkQueue Queue to post requests that require network to - * @param cache Cache interface to use for resolution - * @param delivery Delivery interface to use for posting responses - */ - public CacheDispatcher( - BlockingQueue> cacheQueue, BlockingQueue> networkQueue, - Cache cache, ResponseDelivery delivery) { - mCacheQueue = cacheQueue; - mNetworkQueue = networkQueue; - mCache = cache; - mDelivery = delivery; - } - - /** - * Forces this dispatcher to quit immediately. If any requests are still in - * the queue, they are not guaranteed to be processed. - */ - public void quit() { - mQuit = true; - interrupt(); - } - - @Override - public void run() { - if (DEBUG) VolleyLog.v("start new dispatcher"); - Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); - - // Make a blocking call to initialize the cache. - mCache.initialize(); - - while (true) { - try { - // Get a request from the cache triage queue, blocking until - // at least one is available. - final Request request = mCacheQueue.take(); - request.addMarker("cache-queue-take"); - - // If the request has been canceled, don't bother dispatching it. - if (request.isCanceled()) { - request.finish("cache-discard-canceled"); - continue; - } - - // Attempt to retrieve this item from cache. - Cache.Entry entry = mCache.get(request.getCacheKey()); - if (entry == null) { - request.addMarker("cache-miss"); - // Cache miss; send off to the network dispatcher. - mNetworkQueue.put(request); - continue; - } - - // If it is completely expired, just send it to the network. - if (entry.isExpired()) { - request.addMarker("cache-hit-expired"); - request.setCacheEntry(entry); - mNetworkQueue.put(request); - continue; - } - - // We have a cache hit; parse its data for delivery back to the request. - request.addMarker("cache-hit"); - Response response = request.parseNetworkResponse( - new NetworkResponse(entry.data, entry.responseHeaders)); - request.addMarker("cache-hit-parsed"); - - if (!entry.refreshNeeded()) { - // Completely unexpired cache hit. Just deliver the response. - mDelivery.postResponse(request, response); - } else { - // Soft-expired cache hit. We can deliver the cached response, - // but we need to also send the request to the network for - // refreshing. - request.addMarker("cache-hit-refresh-needed"); - request.setCacheEntry(entry); - - // Mark the response as intermediate. - response.intermediate = true; - - // Post the intermediate response back to the user and have - // the delivery then forward the request along to the network. - mDelivery.postResponse(request, response, new Runnable() { - @Override - public void run() { - try { - mNetworkQueue.put(request); - } catch (InterruptedException e) { - // Not much we can do about this. - } - } - }); - } - - } catch (InterruptedException e) { - // We may have been interrupted because it was time to quit. - if (mQuit) { - return; - } - continue; - } - } - } -} diff --git a/Clover/app/src/main/java/com/android/volley/DefaultRetryPolicy.java b/Clover/app/src/main/java/com/android/volley/DefaultRetryPolicy.java deleted file mode 100644 index ce4f9e0a09..0000000000 --- a/Clover/app/src/main/java/com/android/volley/DefaultRetryPolicy.java +++ /dev/null @@ -1,98 +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.volley; - -/** - * Default retry policy for requests. - */ -public class DefaultRetryPolicy implements RetryPolicy { - /** The current timeout in milliseconds. */ - private int mCurrentTimeoutMs; - - /** The current retry count. */ - private int mCurrentRetryCount; - - /** The maximum number of attempts. */ - private final int mMaxNumRetries; - - /** The backoff multiplier for for the policy. */ - private final float mBackoffMultiplier; - - /** The default socket timeout in milliseconds */ - public static final int DEFAULT_TIMEOUT_MS = 2500; - - /** The default number of retries */ - public static final int DEFAULT_MAX_RETRIES = 1; - - /** The default backoff multiplier */ - public static final float DEFAULT_BACKOFF_MULT = 1f; - - /** - * Constructs a new retry policy using the default timeouts. - */ - public DefaultRetryPolicy() { - this(DEFAULT_TIMEOUT_MS, DEFAULT_MAX_RETRIES, DEFAULT_BACKOFF_MULT); - } - - /** - * Constructs a new retry policy. - * @param initialTimeoutMs The initial timeout for the policy. - * @param maxNumRetries The maximum number of retries. - * @param backoffMultiplier Backoff multiplier for the policy. - */ - public DefaultRetryPolicy(int initialTimeoutMs, int maxNumRetries, float backoffMultiplier) { - mCurrentTimeoutMs = initialTimeoutMs; - mMaxNumRetries = maxNumRetries; - mBackoffMultiplier = backoffMultiplier; - } - - /** - * Returns the current timeout. - */ - @Override - public int getCurrentTimeout() { - return mCurrentTimeoutMs; - } - - /** - * Returns the current retry count. - */ - @Override - public int getCurrentRetryCount() { - return mCurrentRetryCount; - } - - /** - * Prepares for the next retry by applying a backoff to the timeout. - * @param error The error code of the last attempt. - */ - @Override - public void retry(VolleyError error) throws VolleyError { - mCurrentRetryCount++; - mCurrentTimeoutMs += (mCurrentTimeoutMs * mBackoffMultiplier); - if (!hasAttemptRemaining()) { - throw error; - } - } - - /** - * Returns true if this policy has attempts remaining, false otherwise. - */ - protected boolean hasAttemptRemaining() { - return mCurrentRetryCount <= mMaxNumRetries; - } -} diff --git a/Clover/app/src/main/java/com/android/volley/ExecutorDelivery.java b/Clover/app/src/main/java/com/android/volley/ExecutorDelivery.java deleted file mode 100644 index 1babfcd195..0000000000 --- a/Clover/app/src/main/java/com/android/volley/ExecutorDelivery.java +++ /dev/null @@ -1,118 +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.volley; - -import android.os.Handler; - -import java.util.concurrent.Executor; - -/** - * Delivers responses and errors. - */ -public class ExecutorDelivery implements ResponseDelivery { - /** Used for posting responses, typically to the main thread. */ - private final Executor mResponsePoster; - - /** - * Creates a new response delivery interface. - * @param handler {@link Handler} to post responses on - */ - public ExecutorDelivery(final Handler handler) { - // Make an Executor that just wraps the handler. - mResponsePoster = new Executor() { - @Override - public void execute(Runnable command) { - handler.post(command); - } - }; - } - - /** - * Creates a new response delivery interface, mockable version - * for testing. - * @param executor For running delivery tasks - */ - public ExecutorDelivery(Executor executor) { - mResponsePoster = executor; - } - - @Override - public void postResponse(Request request, Response response) { - postResponse(request, response, null); - } - - @Override - public void postResponse(Request request, Response response, Runnable runnable) { - request.markDelivered(); - request.addMarker("post-response"); - mResponsePoster.execute(new ResponseDeliveryRunnable(request, response, runnable)); - } - - @Override - public void postError(Request request, VolleyError error) { - request.addMarker("post-error"); - Response response = Response.error(error); - mResponsePoster.execute(new ResponseDeliveryRunnable(request, response, null)); - } - - /** - * A Runnable used for delivering network responses to a listener on the - * main thread. - */ - @SuppressWarnings("rawtypes") - private class ResponseDeliveryRunnable implements Runnable { - private final Request mRequest; - private final Response mResponse; - private final Runnable mRunnable; - - public ResponseDeliveryRunnable(Request request, Response response, Runnable runnable) { - mRequest = request; - mResponse = response; - mRunnable = runnable; - } - - @SuppressWarnings("unchecked") - @Override - public void run() { - // If this request has canceled, finish it and don't deliver. - if (mRequest.isCanceled()) { - mRequest.finish("canceled-at-delivery"); - return; - } - - // Deliver a normal response or error, depending. - if (mResponse.isSuccess()) { - mRequest.deliverResponse(mResponse.result); - } else { - mRequest.deliverError(mResponse.error); - } - - // If this is an intermediate response, add a marker, otherwise we're done - // and the request can be finished. - if (mResponse.intermediate) { - mRequest.addMarker("intermediate-response"); - } else { - mRequest.finish("done"); - } - - // If we have been provided a post-delivery runnable, run it. - if (mRunnable != null) { - mRunnable.run(); - } - } - } -} diff --git a/Clover/app/src/main/java/com/android/volley/Network.java b/Clover/app/src/main/java/com/android/volley/Network.java deleted file mode 100644 index ab45830f6a..0000000000 --- a/Clover/app/src/main/java/com/android/volley/Network.java +++ /dev/null @@ -1,30 +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.volley; - -/** - * An interface for performing requests. - */ -public interface Network { - /** - * Performs the specified request. - * @param request Request to process - * @return A {@link NetworkResponse} with data and caching metadata; will never be null - * @throws VolleyError on errors - */ - public NetworkResponse performRequest(Request request) throws VolleyError; -} diff --git a/Clover/app/src/main/java/com/android/volley/NetworkDispatcher.java b/Clover/app/src/main/java/com/android/volley/NetworkDispatcher.java deleted file mode 100644 index 9c1c2e34a2..0000000000 --- a/Clover/app/src/main/java/com/android/volley/NetworkDispatcher.java +++ /dev/null @@ -1,147 +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.volley; - -import android.annotation.TargetApi; -import android.net.TrafficStats; -import android.os.Build; -import android.os.Process; - -import java.util.concurrent.BlockingQueue; - -/** - * Provides a thread for performing network dispatch from a queue of requests. - * - * Requests added to the specified queue are processed from the network via a - * specified {@link Network} interface. Responses are committed to cache, if - * eligible, using a specified {@link Cache} interface. Valid responses and - * errors are posted back to the caller via a {@link ResponseDelivery}. - */ -public class NetworkDispatcher extends Thread { - /** The queue of requests to service. */ - private final BlockingQueue> mQueue; - /** The network interface for processing requests. */ - private final Network mNetwork; - /** The cache to write to. */ - private final Cache mCache; - /** For posting responses and errors. */ - private final ResponseDelivery mDelivery; - /** Used for telling us to die. */ - private volatile boolean mQuit = false; - - /** - * Creates a new network dispatcher thread. You must call {@link #start()} - * in order to begin processing. - * - * @param queue Queue of incoming requests for triage - * @param network Network interface to use for performing requests - * @param cache Cache interface to use for writing responses to cache - * @param delivery Delivery interface to use for posting responses - */ - public NetworkDispatcher(BlockingQueue> queue, - Network network, Cache cache, - ResponseDelivery delivery) { - mQueue = queue; - mNetwork = network; - mCache = cache; - mDelivery = delivery; - } - - /** - * Forces this dispatcher to quit immediately. If any requests are still in - * the queue, they are not guaranteed to be processed. - */ - public void quit() { - mQuit = true; - interrupt(); - } - - @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) - private void addTrafficStatsTag(Request request) { - // Tag the request (if API >= 14) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - TrafficStats.setThreadStatsTag(request.getTrafficStatsTag()); - } - } - - @Override - public void run() { - Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); - while (true) { - Request request; - try { - // Take a request from the queue. - request = mQueue.take(); - } catch (InterruptedException e) { - // We may have been interrupted because it was time to quit. - if (mQuit) { - return; - } - continue; - } - - try { - request.addMarker("network-queue-take"); - - // If the request was cancelled already, do not perform the - // network request. - if (request.isCanceled()) { - request.finish("network-discard-cancelled"); - continue; - } - - addTrafficStatsTag(request); - - // Perform the network request. - NetworkResponse networkResponse = mNetwork.performRequest(request); - request.addMarker("network-http-complete"); - - // If the server returned 304 AND we delivered a response already, - // we're done -- don't deliver a second identical response. - if (networkResponse.notModified && request.hasHadResponseDelivered()) { - request.finish("not-modified"); - continue; - } - - // Parse the response here on the worker thread. - Response response = request.parseNetworkResponse(networkResponse); - request.addMarker("network-parse-complete"); - - // Write to cache if applicable. - // TODO: Only update cache metadata instead of entire record for 304s. - if (request.shouldCache() && response.cacheEntry != null) { - mCache.put(request.getCacheKey(), response.cacheEntry); - request.addMarker("network-cache-written"); - } - - // Post the response back. - request.markDelivered(); - mDelivery.postResponse(request, response); - } catch (VolleyError volleyError) { - parseAndDeliverNetworkError(request, volleyError); - } catch (Exception e) { - VolleyLog.e(e, "Unhandled exception %s", e.toString()); - mDelivery.postError(request, new VolleyError(e)); - } - } - } - - private void parseAndDeliverNetworkError(Request request, VolleyError error) { - error = request.parseNetworkError(error); - mDelivery.postError(request, error); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/NetworkError.java b/Clover/app/src/main/java/com/android/volley/NetworkError.java deleted file mode 100644 index 42fbcc2649..0000000000 --- a/Clover/app/src/main/java/com/android/volley/NetworkError.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 com.android.volley; - -import com.android.volley.NetworkResponse; -import com.android.volley.VolleyError; - -/** - * Indicates that there was a network error when performing a Volley request. - */ -@SuppressWarnings("serial") -public class NetworkError extends VolleyError { - public NetworkError() { - super(); - } - - public NetworkError(Throwable cause) { - super(cause); - } - - public NetworkError(NetworkResponse networkResponse) { - super(networkResponse); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/NetworkResponse.java b/Clover/app/src/main/java/com/android/volley/NetworkResponse.java deleted file mode 100644 index 6a0b5c2b5d..0000000000 --- a/Clover/app/src/main/java/com/android/volley/NetworkResponse.java +++ /dev/null @@ -1,62 +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.volley; - -import org.apache.http.HttpStatus; - -import java.util.Collections; -import java.util.Map; - -/** - * Data and headers returned from {@link Network#performRequest(Request)}. - */ -public class NetworkResponse { - /** - * Creates a new network response. - * @param statusCode the HTTP status code - * @param data Response body - * @param headers Headers returned with this response, or null for none - * @param notModified True if the server returned a 304 and the data was already in cache - */ - public NetworkResponse(int statusCode, byte[] data, Map headers, - boolean notModified) { - this.statusCode = statusCode; - this.data = data; - this.headers = headers; - this.notModified = notModified; - } - - public NetworkResponse(byte[] data) { - this(HttpStatus.SC_OK, data, Collections.emptyMap(), false); - } - - public NetworkResponse(byte[] data, Map headers) { - this(HttpStatus.SC_OK, data, headers, false); - } - - /** The HTTP status code. */ - public final int statusCode; - - /** Raw data from this response. */ - public final byte[] data; - - /** Response headers. */ - public final Map headers; - - /** True if the server returned a 304 (Not Modified). */ - public final boolean notModified; -} \ No newline at end of file diff --git a/Clover/app/src/main/java/com/android/volley/NoConnectionError.java b/Clover/app/src/main/java/com/android/volley/NoConnectionError.java deleted file mode 100644 index fc231562ad..0000000000 --- a/Clover/app/src/main/java/com/android/volley/NoConnectionError.java +++ /dev/null @@ -1,31 +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.volley; - -/** - * Error indicating that no connection could be established when performing a Volley request. - */ -@SuppressWarnings("serial") -public class NoConnectionError extends NetworkError { - public NoConnectionError() { - super(); - } - - public NoConnectionError(Throwable reason) { - super(reason); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/ParseError.java b/Clover/app/src/main/java/com/android/volley/ParseError.java deleted file mode 100644 index a55da4707c..0000000000 --- a/Clover/app/src/main/java/com/android/volley/ParseError.java +++ /dev/null @@ -1,36 +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.volley; - -import com.android.volley.NetworkResponse; -import com.android.volley.VolleyError; - -/** - * Indicates that the server's response could not be parsed. - */ -@SuppressWarnings("serial") -public class ParseError extends VolleyError { - public ParseError() { } - - public ParseError(NetworkResponse networkResponse) { - super(networkResponse); - } - - public ParseError(Throwable cause) { - super(cause); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/Request.java b/Clover/app/src/main/java/com/android/volley/Request.java deleted file mode 100644 index 9832952728..0000000000 --- a/Clover/app/src/main/java/com/android/volley/Request.java +++ /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. - */ - -package com.android.volley; - -import android.net.TrafficStats; -import android.net.Uri; -import android.os.Handler; -import android.os.Looper; -import android.os.SystemClock; -import android.text.TextUtils; - -import com.android.volley.VolleyLog.MarkerLog; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.Collections; -import java.util.Map; - -/** - * Base class for all network requests. - * - * @param The type of parsed response this request expects. - */ -public abstract class Request implements Comparable> { - - /** - * Default encoding for POST or PUT parameters. See {@link #getParamsEncoding()}. - */ - private static final String DEFAULT_PARAMS_ENCODING = "UTF-8"; - - /** - * Supported request methods. - */ - public interface Method { - int DEPRECATED_GET_OR_POST = -1; - int GET = 0; - int POST = 1; - int PUT = 2; - int DELETE = 3; - int HEAD = 4; - int OPTIONS = 5; - int TRACE = 6; - int PATCH = 7; - } - - /** An event log tracing the lifetime of this request; for debugging. */ - private final MarkerLog mEventLog = MarkerLog.ENABLED ? new MarkerLog() : null; - - /** - * Request method of this request. Currently supports GET, POST, PUT, DELETE, HEAD, OPTIONS, - * TRACE, and PATCH. - */ - private final int mMethod; - - /** URL of this request. */ - private final String mUrl; - - /** Default tag for {@link TrafficStats}. */ - private final int mDefaultTrafficStatsTag; - - /** Listener interface for errors. */ - private final Response.ErrorListener mErrorListener; - - /** Sequence number of this request, used to enforce FIFO ordering. */ - private Integer mSequence; - - /** The request queue this request is associated with. */ - private RequestQueue mRequestQueue; - - /** Whether or not responses to this request should be cached. */ - private boolean mShouldCache = true; - - /** Whether or not this request has been canceled. */ - private boolean mCanceled = false; - - /** Whether or not a response has been delivered for this request yet. */ - private boolean mResponseDelivered = false; - - // A cheap variant of request tracing used to dump slow requests. - private long mRequestBirthTime = 0; - - /** Threshold at which we should log the request (even when debug logging is not enabled). */ - private static final long SLOW_REQUEST_THRESHOLD_MS = 3000; - - /** The retry policy for this request. */ - private RetryPolicy mRetryPolicy; - - /** - * When a request can be retrieved from cache but must be refreshed from - * the network, the cache entry will be stored here so that in the event of - * a "Not Modified" response, we can be sure it hasn't been evicted from cache. - */ - private Cache.Entry mCacheEntry = null; - - /** An opaque token tagging this request; used for bulk cancellation. */ - private Object mTag; - - /** - * Creates a new request with the given URL and error listener. Note that - * the normal response listener is not provided here as delivery of responses - * is provided by subclasses, who have a better idea of how to deliver an - * already-parsed response. - * - * @deprecated Use {@link #Request(int, String, com.android.volley.Response.ErrorListener)}. - */ - @Deprecated - public Request(String url, Response.ErrorListener listener) { - this(Method.DEPRECATED_GET_OR_POST, url, listener); - } - - /** - * Creates a new request with the given method (one of the values from {@link Method}), - * URL, and error listener. Note that the normal response listener is not provided here as - * delivery of responses is provided by subclasses, who have a better idea of how to deliver - * an already-parsed response. - */ - public Request(int method, String url, Response.ErrorListener listener) { - mMethod = method; - mUrl = url; - mErrorListener = listener; - setRetryPolicy(new DefaultRetryPolicy()); - - mDefaultTrafficStatsTag = findDefaultTrafficStatsTag(url); - } - - /** - * Return the method for this request. Can be one of the values in {@link Method}. - */ - public int getMethod() { - return mMethod; - } - - /** - * Set a tag on this request. Can be used to cancel all requests with this - * tag by {@link RequestQueue#cancelAll(Object)}. - * - * @return This Request object to allow for chaining. - */ - public Request setTag(Object tag) { - mTag = tag; - return this; - } - - /** - * Returns this request's tag. - * @see Request#setTag(Object) - */ - public Object getTag() { - return mTag; - } - - /** - * @return this request's {@link com.android.volley.Response.ErrorListener}. - */ - public Response.ErrorListener getErrorListener() { - return mErrorListener; - } - - /** - * @return A tag for use with {@link TrafficStats#setThreadStatsTag(int)} - */ - public int getTrafficStatsTag() { - return mDefaultTrafficStatsTag; - } - - /** - * @return The hashcode of the URL's host component, or 0 if there is none. - */ - private static int findDefaultTrafficStatsTag(String url) { - if (!TextUtils.isEmpty(url)) { - Uri uri = Uri.parse(url); - if (uri != null) { - String host = uri.getHost(); - if (host != null) { - return host.hashCode(); - } - } - } - return 0; - } - - /** - * Sets the retry policy for this request. - * - * @return This Request object to allow for chaining. - */ - public Request setRetryPolicy(RetryPolicy retryPolicy) { - mRetryPolicy = retryPolicy; - return this; - } - - /** - * Adds an event to this request's event log; for debugging. - */ - public void addMarker(String tag) { - if (MarkerLog.ENABLED) { - mEventLog.add(tag, Thread.currentThread().getId()); - } else if (mRequestBirthTime == 0) { - mRequestBirthTime = SystemClock.elapsedRealtime(); - } - } - - /** - * Notifies the request queue that this request has finished (successfully or with error). - * - *

Also dumps all events from this request's event log; for debugging.

- */ - void finish(final String tag) { - if (mRequestQueue != null) { - mRequestQueue.finish(this); - } - if (MarkerLog.ENABLED) { - final long threadId = Thread.currentThread().getId(); - if (Looper.myLooper() != Looper.getMainLooper()) { - // If we finish marking off of the main thread, we need to - // actually do it on the main thread to ensure correct ordering. - Handler mainThread = new Handler(Looper.getMainLooper()); - mainThread.post(new Runnable() { - @Override - public void run() { - mEventLog.add(tag, threadId); - mEventLog.finish(this.toString()); - } - }); - return; - } - - mEventLog.add(tag, threadId); - mEventLog.finish(this.toString()); - } else { - long requestTime = SystemClock.elapsedRealtime() - mRequestBirthTime; - if (requestTime >= SLOW_REQUEST_THRESHOLD_MS) { - VolleyLog.d("%d ms: %s", requestTime, this.toString()); - } - } - } - - /** - * Associates this request with the given queue. The request queue will be notified when this - * request has finished. - * - * @return This Request object to allow for chaining. - */ - public Request setRequestQueue(RequestQueue requestQueue) { - mRequestQueue = requestQueue; - return this; - } - - /** - * Sets the sequence number of this request. Used by {@link RequestQueue}. - * - * @return This Request object to allow for chaining. - */ - public final Request setSequence(int sequence) { - mSequence = sequence; - return this; - } - - /** - * Returns the sequence number of this request. - */ - public final int getSequence() { - if (mSequence == null) { - throw new IllegalStateException("getSequence called before setSequence"); - } - return mSequence; - } - - /** - * Returns the URL of this request. - */ - public String getUrl() { - return mUrl; - } - - /** - * Returns the cache key for this request. By default, this is the URL. - */ - public String getCacheKey() { - return getUrl(); - } - - /** - * Annotates this request with an entry retrieved for it from cache. - * Used for cache coherency support. - * - * @return This Request object to allow for chaining. - */ - public Request setCacheEntry(Cache.Entry entry) { - mCacheEntry = entry; - return this; - } - - /** - * Returns the annotated cache entry, or null if there isn't one. - */ - public Cache.Entry getCacheEntry() { - return mCacheEntry; - } - - /** - * Mark this request as canceled. No callback will be delivered. - */ - public void cancel() { - mCanceled = true; - } - - /** - * Returns true if this request has been canceled. - */ - public boolean isCanceled() { - return mCanceled; - } - - /** - * Returns a list of extra HTTP headers to go along with this request. Can - * throw {@link AuthFailureError} as authentication may be required to - * provide these values. - * @throws AuthFailureError In the event of auth failure - */ - public Map getHeaders() throws AuthFailureError { - return Collections.emptyMap(); - } - - /** - * Returns a Map of POST parameters to be used for this request, or null if - * a simple GET should be used. Can throw {@link AuthFailureError} as - * authentication may be required to provide these values. - * - *

Note that only one of getPostParams() and getPostBody() can return a non-null - * value.

- * @throws AuthFailureError In the event of auth failure - * - * @deprecated Use {@link #getParams()} instead. - */ - @Deprecated - protected Map getPostParams() throws AuthFailureError { - return getParams(); - } - - /** - * Returns which encoding should be used when converting POST parameters returned by - * {@link #getPostParams()} into a raw POST body. - * - *

This controls both encodings: - *

    - *
  1. The string encoding used when converting parameter names and values into bytes prior - * to URL encoding them.
  2. - *
  3. The string encoding used when converting the URL encoded parameters into a raw - * byte array.
  4. - *
- * - * @deprecated Use {@link #getParamsEncoding()} instead. - */ - @Deprecated - protected String getPostParamsEncoding() { - return getParamsEncoding(); - } - - /** - * @deprecated Use {@link #getBodyContentType()} instead. - */ - @Deprecated - public String getPostBodyContentType() { - return getBodyContentType(); - } - - /** - * Returns the raw POST body to be sent. - * - * @throws AuthFailureError In the event of auth failure - * - * @deprecated Use {@link #getBody()} instead. - */ - @Deprecated - public byte[] getPostBody() throws AuthFailureError { - // Note: For compatibility with legacy clients of volley, this implementation must remain - // here instead of simply calling the getBody() function because this function must - // call getPostParams() and getPostParamsEncoding() since legacy clients would have - // overridden these two member functions for POST requests. - Map postParams = getPostParams(); - if (postParams != null && postParams.size() > 0) { - return encodeParameters(postParams, getPostParamsEncoding()); - } - return null; - } - - /** - * Returns a Map of parameters to be used for a POST or PUT request. Can throw - * {@link AuthFailureError} as authentication may be required to provide these values. - * - *

Note that you can directly override {@link #getBody()} for custom data.

- * - * @throws AuthFailureError in the event of auth failure - */ - protected Map getParams() throws AuthFailureError { - return null; - } - - /** - * Returns which encoding should be used when converting POST or PUT parameters returned by - * {@link #getParams()} into a raw POST or PUT body. - * - *

This controls both encodings: - *

    - *
  1. The string encoding used when converting parameter names and values into bytes prior - * to URL encoding them.
  2. - *
  3. The string encoding used when converting the URL encoded parameters into a raw - * byte array.
  4. - *
- */ - protected String getParamsEncoding() { - return DEFAULT_PARAMS_ENCODING; - } - - /** - * Returns the content type of the POST or PUT body. - */ - public String getBodyContentType() { - return "application/x-www-form-urlencoded; charset=" + getParamsEncoding(); - } - - /** - * Returns the raw POST or PUT body to be sent. - * - *

By default, the body consists of the request parameters in - * application/x-www-form-urlencoded format. When overriding this method, consider overriding - * {@link #getBodyContentType()} as well to match the new body format. - * - * @throws AuthFailureError in the event of auth failure - */ - public byte[] getBody() throws AuthFailureError { - Map params = getParams(); - if (params != null && params.size() > 0) { - return encodeParameters(params, getParamsEncoding()); - } - return null; - } - - /** - * Converts params into an application/x-www-form-urlencoded encoded string. - */ - private byte[] encodeParameters(Map params, String paramsEncoding) { - StringBuilder encodedParams = new StringBuilder(); - try { - for (Map.Entry entry : params.entrySet()) { - encodedParams.append(URLEncoder.encode(entry.getKey(), paramsEncoding)); - encodedParams.append('='); - encodedParams.append(URLEncoder.encode(entry.getValue(), paramsEncoding)); - encodedParams.append('&'); - } - return encodedParams.toString().getBytes(paramsEncoding); - } catch (UnsupportedEncodingException uee) { - throw new RuntimeException("Encoding not supported: " + paramsEncoding, uee); - } - } - - /** - * Set whether or not responses to this request should be cached. - * - * @return This Request object to allow for chaining. - */ - public final Request setShouldCache(boolean shouldCache) { - mShouldCache = shouldCache; - return this; - } - - /** - * Returns true if responses to this request should be cached. - */ - public final boolean shouldCache() { - return mShouldCache; - } - - /** - * Priority values. Requests will be processed from higher priorities to - * lower priorities, in FIFO order. - */ - public enum Priority { - LOW, - NORMAL, - HIGH, - IMMEDIATE - } - - /** - * Returns the {@link Priority} of this request; {@link Priority#NORMAL} by default. - */ - public Priority getPriority() { - return Priority.NORMAL; - } - - /** - * Returns the socket timeout in milliseconds per retry attempt. (This value can be changed - * per retry attempt if a backoff is specified via backoffTimeout()). If there are no retry - * attempts remaining, this will cause delivery of a {@link TimeoutError} error. - */ - public final int getTimeoutMs() { - return mRetryPolicy.getCurrentTimeout(); - } - - /** - * Returns the retry policy that should be used for this request. - */ - public RetryPolicy getRetryPolicy() { - return mRetryPolicy; - } - - /** - * Mark this request as having a response delivered on it. This can be used - * later in the request's lifetime for suppressing identical responses. - */ - public void markDelivered() { - mResponseDelivered = true; - } - - /** - * Returns true if this request has had a response delivered for it. - */ - public boolean hasHadResponseDelivered() { - return mResponseDelivered; - } - - /** - * Subclasses must implement this to parse the raw network response - * and return an appropriate response type. This method will be - * called from a worker thread. The response will not be delivered - * if you return null. - * @param response Response from the network - * @return The parsed response, or null in the case of an error - */ - abstract protected Response parseNetworkResponse(NetworkResponse response); - - /** - * Subclasses can override this method to parse 'networkError' and return a more specific error. - * - *

The default implementation just returns the passed 'networkError'.

- * - * @param volleyError the error retrieved from the network - * @return an NetworkError augmented with additional information - */ - protected VolleyError parseNetworkError(VolleyError volleyError) { - return volleyError; - } - - /** - * Subclasses must implement this to perform delivery of the parsed - * response to their listeners. The given response is guaranteed to - * be non-null; responses that fail to parse are not delivered. - * @param response The parsed response returned by - * {@link #parseNetworkResponse(NetworkResponse)} - */ - abstract protected void deliverResponse(T response); - - /** - * Delivers error message to the ErrorListener that the Request was - * initialized with. - * - * @param error Error details - */ - public void deliverError(VolleyError error) { - if (mErrorListener != null) { - mErrorListener.onErrorResponse(error); - } - } - - /** - * Our comparator sorts from high to low priority, and secondarily by - * sequence number to provide FIFO ordering. - */ - @Override - public int compareTo(Request other) { - Priority left = this.getPriority(); - Priority right = other.getPriority(); - - // High-priority requests are "lesser" so they are sorted to the front. - // Equal priorities are sorted by sequence number to provide FIFO ordering. - return left == right ? - this.mSequence - other.mSequence : - right.ordinal() - left.ordinal(); - } - - @Override - public String toString() { - String trafficStatsTag = "0x" + Integer.toHexString(getTrafficStatsTag()); - return (mCanceled ? "[X] " : "[ ] ") + getUrl() + " " + trafficStatsTag + " " - + getPriority() + " " + mSequence; - } -} diff --git a/Clover/app/src/main/java/com/android/volley/RequestQueue.java b/Clover/app/src/main/java/com/android/volley/RequestQueue.java deleted file mode 100644 index 5c0e7afb01..0000000000 --- a/Clover/app/src/main/java/com/android/volley/RequestQueue.java +++ /dev/null @@ -1,286 +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.volley; - -import android.os.Handler; -import android.os.Looper; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.Map; -import java.util.Queue; -import java.util.Set; -import java.util.concurrent.PriorityBlockingQueue; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * A request dispatch queue with a thread pool of dispatchers. - * - * Calling {@link #add(Request)} will enqueue the given Request for dispatch, - * resolving from either cache or network on a worker thread, and then delivering - * a parsed response on the main thread. - */ -public class RequestQueue { - - /** Used for generating monotonically-increasing sequence numbers for requests. */ - private AtomicInteger mSequenceGenerator = new AtomicInteger(); - - /** - * Staging area for requests that already have a duplicate request in flight. - * - *
    - *
  • containsKey(cacheKey) indicates that there is a request in flight for the given cache - * key.
  • - *
  • get(cacheKey) returns waiting requests for the given cache key. The in flight request - * is not contained in that list. Is null if no requests are staged.
  • - *
- */ - private final Map>> mWaitingRequests = - new HashMap>>(); - - /** - * The set of all requests currently being processed by this RequestQueue. A Request - * will be in this set if it is waiting in any queue or currently being processed by - * any dispatcher. - */ - private final Set> mCurrentRequests = new HashSet>(); - - /** The cache triage queue. */ - private final PriorityBlockingQueue> mCacheQueue = - new PriorityBlockingQueue>(); - - /** The queue of requests that are actually going out to the network. */ - private final PriorityBlockingQueue> mNetworkQueue = - new PriorityBlockingQueue>(); - - /** Number of network request dispatcher threads to start. */ - private static final int DEFAULT_NETWORK_THREAD_POOL_SIZE = 4; - - /** Cache interface for retrieving and storing responses. */ - private final Cache mCache; - - /** Network interface for performing requests. */ - private final Network mNetwork; - - /** Response delivery mechanism. */ - private final ResponseDelivery mDelivery; - - /** The network dispatchers. */ - private NetworkDispatcher[] mDispatchers; - - /** The cache dispatcher. */ - private CacheDispatcher mCacheDispatcher; - - /** - * Creates the worker pool. Processing will not begin until {@link #start()} is called. - * - * @param cache A Cache to use for persisting responses to disk - * @param network A Network interface for performing HTTP requests - * @param threadPoolSize Number of network dispatcher threads to create - * @param delivery A ResponseDelivery interface for posting responses and errors - */ - public RequestQueue(Cache cache, Network network, int threadPoolSize, - ResponseDelivery delivery) { - mCache = cache; - mNetwork = network; - mDispatchers = new NetworkDispatcher[threadPoolSize]; - mDelivery = delivery; - } - - /** - * Creates the worker pool. Processing will not begin until {@link #start()} is called. - * - * @param cache A Cache to use for persisting responses to disk - * @param network A Network interface for performing HTTP requests - * @param threadPoolSize Number of network dispatcher threads to create - */ - public RequestQueue(Cache cache, Network network, int threadPoolSize) { - this(cache, network, threadPoolSize, - new ExecutorDelivery(new Handler(Looper.getMainLooper()))); - } - - /** - * Creates the worker pool. Processing will not begin until {@link #start()} is called. - * - * @param cache A Cache to use for persisting responses to disk - * @param network A Network interface for performing HTTP requests - */ - public RequestQueue(Cache cache, Network network) { - this(cache, network, DEFAULT_NETWORK_THREAD_POOL_SIZE); - } - - /** - * Starts the dispatchers in this queue. - */ - public void start() { - stop(); // Make sure any currently running dispatchers are stopped. - // Create the cache dispatcher and start it. - mCacheDispatcher = new CacheDispatcher(mCacheQueue, mNetworkQueue, mCache, mDelivery); - mCacheDispatcher.start(); - - // Create network dispatchers (and corresponding threads) up to the pool size. - for (int i = 0; i < mDispatchers.length; i++) { - NetworkDispatcher networkDispatcher = new NetworkDispatcher(mNetworkQueue, mNetwork, - mCache, mDelivery); - mDispatchers[i] = networkDispatcher; - networkDispatcher.start(); - } - } - - /** - * Stops the cache and network dispatchers. - */ - public void stop() { - if (mCacheDispatcher != null) { - mCacheDispatcher.quit(); - } - for (int i = 0; i < mDispatchers.length; i++) { - if (mDispatchers[i] != null) { - mDispatchers[i].quit(); - } - } - } - - /** - * Gets a sequence number. - */ - public int getSequenceNumber() { - return mSequenceGenerator.incrementAndGet(); - } - - /** - * Gets the {@link Cache} instance being used. - */ - public Cache getCache() { - return mCache; - } - - /** - * A simple predicate or filter interface for Requests, for use by - * {@link RequestQueue#cancelAll(RequestFilter)}. - */ - public interface RequestFilter { - public boolean apply(Request request); - } - - /** - * Cancels all requests in this queue for which the given filter applies. - * @param filter The filtering function to use - */ - public void cancelAll(RequestFilter filter) { - synchronized (mCurrentRequests) { - for (Request request : mCurrentRequests) { - if (filter.apply(request)) { - request.cancel(); - } - } - } - } - - /** - * Cancels all requests in this queue with the given tag. Tag must be non-null - * and equality is by identity. - */ - public void cancelAll(final Object tag) { - if (tag == null) { - throw new IllegalArgumentException("Cannot cancelAll with a null tag"); - } - cancelAll(new RequestFilter() { - @Override - public boolean apply(Request request) { - return request.getTag() == tag; - } - }); - } - - /** - * Adds a Request to the dispatch queue. - * @param request The request to service - * @return The passed-in request - */ - public Request add(Request request) { - // Tag the request as belonging to this queue and add it to the set of current requests. - request.setRequestQueue(this); - synchronized (mCurrentRequests) { - mCurrentRequests.add(request); - } - - // Process requests in the order they are added. - request.setSequence(getSequenceNumber()); - request.addMarker("add-to-queue"); - - // If the request is uncacheable, skip the cache queue and go straight to the network. - if (!request.shouldCache()) { - mNetworkQueue.add(request); - return request; - } - - // Insert request into stage if there's already a request with the same cache key in flight. - synchronized (mWaitingRequests) { - String cacheKey = request.getCacheKey(); - if (mWaitingRequests.containsKey(cacheKey)) { - // There is already a request in flight. Queue up. - Queue> stagedRequests = mWaitingRequests.get(cacheKey); - if (stagedRequests == null) { - stagedRequests = new LinkedList>(); - } - stagedRequests.add(request); - mWaitingRequests.put(cacheKey, stagedRequests); - if (VolleyLog.DEBUG) { - VolleyLog.v("Request for cacheKey=%s is in flight, putting on hold.", cacheKey); - } - } else { - // Insert 'null' queue for this cacheKey, indicating there is now a request in - // flight. - mWaitingRequests.put(cacheKey, null); - mCacheQueue.add(request); - } - return request; - } - } - - /** - * Called from {@link Request#finish(String)}, indicating that processing of the given request - * has finished. - * - *

Releases waiting requests for request.getCacheKey() if - * request.shouldCache().

- */ - void finish(Request request) { - // Remove from the set of requests currently being processed. - synchronized (mCurrentRequests) { - mCurrentRequests.remove(request); - } - - if (request.shouldCache()) { - synchronized (mWaitingRequests) { - String cacheKey = request.getCacheKey(); - Queue> waitingRequests = mWaitingRequests.remove(cacheKey); - if (waitingRequests != null) { - if (VolleyLog.DEBUG) { - VolleyLog.v("Releasing %d waiting requests for cacheKey=%s.", - waitingRequests.size(), cacheKey); - } - // Process all queued up requests. They won't be considered as in flight, but - // that's not a problem as the cache has been primed by 'request'. - mCacheQueue.addAll(waitingRequests); - } - } - } - } -} diff --git a/Clover/app/src/main/java/com/android/volley/Response.java b/Clover/app/src/main/java/com/android/volley/Response.java deleted file mode 100644 index 1165595da6..0000000000 --- a/Clover/app/src/main/java/com/android/volley/Response.java +++ /dev/null @@ -1,85 +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.volley; - -/** - * Encapsulates a parsed response for delivery. - * - * @param Parsed type of this response - */ -public class Response { - - /** Callback interface for delivering parsed responses. */ - public interface Listener { - /** Called when a response is received. */ - public void onResponse(T response); - } - - /** Callback interface for delivering error responses. */ - public interface ErrorListener { - /** - * Callback method that an error has been occurred with the - * provided error code and optional user-readable message. - */ - public void onErrorResponse(VolleyError error); - } - - /** Returns a successful response containing the parsed result. */ - public static Response success(T result, Cache.Entry cacheEntry) { - return new Response(result, cacheEntry); - } - - /** - * Returns a failed response containing the given error code and an optional - * localized message displayed to the user. - */ - public static Response error(VolleyError error) { - return new Response(error); - } - - /** Parsed response, or null in the case of error. */ - public final T result; - - /** Cache metadata for this response, or null in the case of error. */ - public final Cache.Entry cacheEntry; - - /** Detailed error information if errorCode != OK. */ - public final VolleyError error; - - /** True if this response was a soft-expired one and a second one MAY be coming. */ - public boolean intermediate = false; - - /** - * Returns whether this response is considered successful. - */ - public boolean isSuccess() { - return error == null; - } - - - private Response(T result, Cache.Entry cacheEntry) { - this.result = result; - this.cacheEntry = cacheEntry; - this.error = null; - } - - private Response(VolleyError error) { - this.result = null; - this.cacheEntry = null; - this.error = error; - } -} diff --git a/Clover/app/src/main/java/com/android/volley/ResponseDelivery.java b/Clover/app/src/main/java/com/android/volley/ResponseDelivery.java deleted file mode 100644 index 87706afcb7..0000000000 --- a/Clover/app/src/main/java/com/android/volley/ResponseDelivery.java +++ /dev/null @@ -1,35 +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.volley; - -public interface ResponseDelivery { - /** - * Parses a response from the network or cache and delivers it. - */ - public void postResponse(Request request, Response response); - - /** - * Parses a response from the network or cache and delivers it. The provided - * Runnable will be executed after delivery. - */ - public void postResponse(Request request, Response response, Runnable runnable); - - /** - * Posts an error for the given request. - */ - public void postError(Request request, VolleyError error); -} diff --git a/Clover/app/src/main/java/com/android/volley/RetryPolicy.java b/Clover/app/src/main/java/com/android/volley/RetryPolicy.java deleted file mode 100644 index 0dd198b206..0000000000 --- a/Clover/app/src/main/java/com/android/volley/RetryPolicy.java +++ /dev/null @@ -1,41 +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.volley; - -/** - * Retry policy for a request. - */ -public interface RetryPolicy { - - /** - * Returns the current timeout (used for logging). - */ - public int getCurrentTimeout(); - - /** - * Returns the current retry count (used for logging). - */ - public int getCurrentRetryCount(); - - /** - * Prepares for the next retry by applying a backoff to the timeout. - * @param error The error code of the last attempt. - * @throws VolleyError In the event that the retry could not be performed (for example if we - * ran out of attempts), the passed in error is thrown. - */ - public void retry(VolleyError error) throws VolleyError; -} diff --git a/Clover/app/src/main/java/com/android/volley/ServerError.java b/Clover/app/src/main/java/com/android/volley/ServerError.java deleted file mode 100644 index b29a6c6618..0000000000 --- a/Clover/app/src/main/java/com/android/volley/ServerError.java +++ /dev/null @@ -1,34 +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.volley; - -import com.android.volley.NetworkResponse; -import com.android.volley.VolleyError; - -/** - * Indicates that the error responded with an error response. - */ -@SuppressWarnings("serial") -public class ServerError extends VolleyError { - public ServerError(NetworkResponse networkResponse) { - super(networkResponse); - } - - public ServerError() { - super(); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/TimeoutError.java b/Clover/app/src/main/java/com/android/volley/TimeoutError.java deleted file mode 100644 index 0b5d6acb79..0000000000 --- a/Clover/app/src/main/java/com/android/volley/TimeoutError.java +++ /dev/null @@ -1,23 +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.volley; - -/** - * Indicates that the connection or the socket timed out. - */ -@SuppressWarnings("serial") -public class TimeoutError extends VolleyError { } diff --git a/Clover/app/src/main/java/com/android/volley/VolleyError.java b/Clover/app/src/main/java/com/android/volley/VolleyError.java deleted file mode 100644 index 4f7b883dbc..0000000000 --- a/Clover/app/src/main/java/com/android/volley/VolleyError.java +++ /dev/null @@ -1,48 +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.volley; - -/** - * Exception style class encapsulating Volley errors - */ -@SuppressWarnings("serial") -public class VolleyError extends Exception { - public final NetworkResponse networkResponse; - - public VolleyError() { - networkResponse = null; - } - - public VolleyError(NetworkResponse response) { - networkResponse = response; - } - - public VolleyError(String exceptionMessage) { - super(exceptionMessage); - networkResponse = null; - } - - public VolleyError(String exceptionMessage, Throwable reason) { - super(exceptionMessage, reason); - networkResponse = null; - } - - public VolleyError(Throwable cause) { - super(cause); - networkResponse = null; - } -} diff --git a/Clover/app/src/main/java/com/android/volley/VolleyLog.java b/Clover/app/src/main/java/com/android/volley/VolleyLog.java deleted file mode 100644 index ca1f9ee4c8..0000000000 --- a/Clover/app/src/main/java/com/android/volley/VolleyLog.java +++ /dev/null @@ -1,179 +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.volley; - -import android.os.SystemClock; -import android.util.Log; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -/** Logging helper class. */ -public class VolleyLog { - public static String TAG = "Volley"; - - public static boolean DEBUG = Log.isLoggable(TAG, Log.VERBOSE); - - /** - * Customize the log tag for your application, so that other apps - * using Volley don't mix their logs with yours. - *
- * Enable the log property for your tag before starting your app: - *
- * {@code adb shell setprop log.tag.<tag>} - */ - public static void setTag(String tag) { - d("Changing log tag to %s", tag); - TAG = tag; - - // Reinitialize the DEBUG "constant" - DEBUG = Log.isLoggable(TAG, Log.VERBOSE); - } - - public static void v(String format, Object... args) { - if (DEBUG) { - Log.v(TAG, buildMessage(format, args)); - } - } - - public static void d(String format, Object... args) { - if (DEBUG) { - Log.d(TAG, buildMessage(format, args)); - } - } - - public static void e(String format, Object... args) { - Log.e(TAG, buildMessage(format, args)); - } - - public static void e(Throwable tr, String format, Object... args) { - Log.e(TAG, buildMessage(format, args), tr); - } - - public static void wtf(String format, Object... args) { - Log.wtf(TAG, buildMessage(format, args)); - } - - public static void wtf(Throwable tr, String format, Object... args) { - Log.wtf(TAG, buildMessage(format, args), tr); - } - - /** - * Formats the caller's provided message and prepends useful info like - * calling thread ID and method name. - */ - private static String buildMessage(String format, Object... args) { - String msg = (args == null) ? format : String.format(Locale.US, format, args); - StackTraceElement[] trace = new Throwable().fillInStackTrace().getStackTrace(); - - String caller = ""; - // Walk up the stack looking for the first caller outside of VolleyLog. - // It will be at least two frames up, so start there. - for (int i = 2; i < trace.length; i++) { - Class clazz = trace[i].getClass(); - if (!clazz.equals(VolleyLog.class)) { - String callingClass = trace[i].getClassName(); - callingClass = callingClass.substring(callingClass.lastIndexOf('.') + 1); - callingClass = callingClass.substring(callingClass.lastIndexOf('$') + 1); - - caller = callingClass + "." + trace[i].getMethodName(); - break; - } - } - return String.format(Locale.US, "[%d] %s: %s", - Thread.currentThread().getId(), caller, msg); - } - - /** - * A simple event log with records containing a name, thread ID, and timestamp. - */ - static class MarkerLog { - public static final boolean ENABLED = VolleyLog.DEBUG; - - /** Minimum duration from first marker to last in an marker log to warrant logging. */ - private static final long MIN_DURATION_FOR_LOGGING_MS = 0; - - private static class Marker { - public final String name; - public final long thread; - public final long time; - - public Marker(String name, long thread, long time) { - this.name = name; - this.thread = thread; - this.time = time; - } - } - - private final List mMarkers = new ArrayList(); - private boolean mFinished = false; - - /** Adds a marker to this log with the specified name. */ - public synchronized void add(String name, long threadId) { - if (mFinished) { - throw new IllegalStateException("Marker added to finished log"); - } - - mMarkers.add(new Marker(name, threadId, SystemClock.elapsedRealtime())); - } - - /** - * Closes the log, dumping it to logcat if the time difference between - * the first and last markers is greater than {@link #MIN_DURATION_FOR_LOGGING_MS}. - * @param header Header string to print above the marker log. - */ - public synchronized void finish(String header) { - mFinished = true; - - long duration = getTotalDuration(); - if (duration <= MIN_DURATION_FOR_LOGGING_MS) { - return; - } - - long prevTime = mMarkers.get(0).time; - d("(%-4d ms) %s", duration, header); - for (Marker marker : mMarkers) { - long thisTime = marker.time; - d("(+%-4d) [%2d] %s", (thisTime - prevTime), marker.thread, marker.name); - prevTime = thisTime; - } - } - - @Override - protected void finalize() throws Throwable { - // Catch requests that have been collected (and hence end-of-lifed) - // but had no debugging output printed for them. - if (!mFinished) { - finish("Request on the loose"); - e("Marker log finalized without finish() - uncaught exit point for request"); - } - super.finalize(); - } - - /** Returns the time difference between the first and last events in this log. */ - private long getTotalDuration() { - if (mMarkers.size() == 0) { - return 0; - } - - long first = mMarkers.get(0).time; - long last = mMarkers.get(mMarkers.size() - 1).time; - return last - first; - } - } -} diff --git a/Clover/app/src/main/java/com/android/volley/compat/DelegateSSLSocket.java b/Clover/app/src/main/java/com/android/volley/compat/DelegateSSLSocket.java deleted file mode 100644 index 728934d829..0000000000 --- a/Clover/app/src/main/java/com/android/volley/compat/DelegateSSLSocket.java +++ /dev/null @@ -1,331 +0,0 @@ -package com.android.volley.compat; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.InetAddress; -import java.net.SocketAddress; -import java.net.SocketException; -import java.nio.channels.SocketChannel; - -import javax.net.ssl.HandshakeCompletedListener; -import javax.net.ssl.SSLParameters; -import javax.net.ssl.SSLSession; -import javax.net.ssl.SSLSocket; - -/** - * Created by robUx4 on 25/10/2014. - */ -public class DelegateSSLSocket extends SSLSocket { - - protected final SSLSocket delegate; - - DelegateSSLSocket(SSLSocket delegate) { - this.delegate = delegate; - } - - @Override - public String[] getSupportedCipherSuites() { - return delegate.getSupportedCipherSuites(); - } - - @Override - public String[] getEnabledCipherSuites() { - return delegate.getEnabledCipherSuites(); - } - - @Override - public void setEnabledCipherSuites(String[] suites) { - delegate.setEnabledCipherSuites(suites); - } - - @Override - public String[] getSupportedProtocols() { - return delegate.getSupportedProtocols(); - } - - @Override - public String[] getEnabledProtocols() { - return delegate.getEnabledProtocols(); - } - - @Override - public void setEnabledProtocols(String[] protocols) { - delegate.setEnabledProtocols(protocols); - } - - @Override - public SSLSession getSession() { - return delegate.getSession(); - } - - @Override - public void addHandshakeCompletedListener(HandshakeCompletedListener listener) { - delegate.addHandshakeCompletedListener(listener); - } - - @Override - public void removeHandshakeCompletedListener(HandshakeCompletedListener listener) { - delegate.removeHandshakeCompletedListener(listener); - } - - @Override - public void startHandshake() throws IOException { - delegate.startHandshake(); - } - - @Override - public void setUseClientMode(boolean mode) { - delegate.setUseClientMode(mode); - } - - @Override - public boolean getUseClientMode() { - return delegate.getUseClientMode(); - } - - @Override - public void setNeedClientAuth(boolean need) { - delegate.setNeedClientAuth(need); - } - - @Override - public void setWantClientAuth(boolean want) { - delegate.setWantClientAuth(want); - } - - @Override - public boolean getNeedClientAuth() { - return delegate.getNeedClientAuth(); - } - - @Override - public boolean getWantClientAuth() { - return delegate.getWantClientAuth(); - } - - @Override - public void setEnableSessionCreation(boolean flag) { - delegate.setEnableSessionCreation(flag); - } - - @Override - public boolean getEnableSessionCreation() { - return delegate.getEnableSessionCreation(); - } - - @Override - public void bind(SocketAddress localAddr) throws IOException { - delegate.bind(localAddr); - } - - @Override - public synchronized void close() throws IOException { - delegate.close(); - } - - @Override - public void connect(SocketAddress remoteAddr) throws IOException { - delegate.connect(remoteAddr); - } - - @Override - public void connect(SocketAddress remoteAddr, int timeout) throws IOException { - delegate.connect(remoteAddr, timeout); - } - - @Override - public SocketChannel getChannel() { - return delegate.getChannel(); - } - - @Override - public InetAddress getInetAddress() { - return delegate.getInetAddress(); - } - - @Override - public InputStream getInputStream() throws IOException { - return delegate.getInputStream(); - } - - @Override - public boolean getKeepAlive() throws SocketException { - return delegate.getKeepAlive(); - } - - @Override - public InetAddress getLocalAddress() { - return delegate.getLocalAddress(); - } - - @Override - public int getLocalPort() { - return delegate.getLocalPort(); - } - - @Override - public SocketAddress getLocalSocketAddress() { - return delegate.getLocalSocketAddress(); - } - - @Override - public boolean getOOBInline() throws SocketException { - return delegate.getOOBInline(); - } - - @Override - public OutputStream getOutputStream() throws IOException { - return delegate.getOutputStream(); - } - - @Override - public int getPort() { - return delegate.getPort(); - } - - @Override - public synchronized int getReceiveBufferSize() throws SocketException { - return delegate.getReceiveBufferSize(); - } - - @Override - public SocketAddress getRemoteSocketAddress() { - return delegate.getRemoteSocketAddress(); - } - - @Override - public boolean getReuseAddress() throws SocketException { - return delegate.getReuseAddress(); - } - - @Override - public synchronized int getSendBufferSize() throws SocketException { - return delegate.getSendBufferSize(); - } - - @Override - public int getSoLinger() throws SocketException { - return delegate.getSoLinger(); - } - - @Override - public synchronized int getSoTimeout() throws SocketException { - return delegate.getSoTimeout(); - } - - @Override - public boolean getTcpNoDelay() throws SocketException { - return delegate.getTcpNoDelay(); - } - - @Override - public int getTrafficClass() throws SocketException { - return delegate.getTrafficClass(); - } - - @Override - public boolean isBound() { - return delegate.isBound(); - } - - @Override - public boolean isClosed() { - return delegate.isClosed(); - } - - @Override - public boolean isConnected() { - return delegate.isConnected(); - } - - @Override - public boolean isInputShutdown() { - return delegate.isInputShutdown(); - } - - @Override - public boolean isOutputShutdown() { - return delegate.isOutputShutdown(); - } - - @Override - public void sendUrgentData(int value) throws IOException { - delegate.sendUrgentData(value); - } - - @Override - public void setKeepAlive(boolean keepAlive) throws SocketException { - delegate.setKeepAlive(keepAlive); - } - - @Override - public void setOOBInline(boolean oobinline) throws SocketException { - delegate.setOOBInline(oobinline); - } - - @Override - public void setPerformancePreferences(int connectionTime, int latency, int bandwidth) { - delegate.setPerformancePreferences(connectionTime, latency, bandwidth); - } - - @Override - public synchronized void setReceiveBufferSize(int size) throws SocketException { - delegate.setReceiveBufferSize(size); - } - - @Override - public void setReuseAddress(boolean reuse) throws SocketException { - delegate.setReuseAddress(reuse); - } - - @Override - public synchronized void setSendBufferSize(int size) throws SocketException { - delegate.setSendBufferSize(size); - } - - @Override - public void setSoLinger(boolean on, int timeout) throws SocketException { - delegate.setSoLinger(on, timeout); - } - - @Override - public synchronized void setSoTimeout(int timeout) throws SocketException { - delegate.setSoTimeout(timeout); - } - - @Override - public void setSSLParameters(SSLParameters p) { - delegate.setSSLParameters(p); - } - - @Override - public void setTcpNoDelay(boolean on) throws SocketException { - delegate.setTcpNoDelay(on); - } - - @Override - public void setTrafficClass(int value) throws SocketException { - delegate.setTrafficClass(value); - } - - @Override - public void shutdownInput() throws IOException { - delegate.shutdownInput(); - } - - @Override - public void shutdownOutput() throws IOException { - delegate.shutdownOutput(); - } - - @Override - public String toString() { - return delegate.toString(); - } - - @Override - public boolean equals(Object o) { - return delegate.equals(o); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/compat/NoSSLv3Compat.java b/Clover/app/src/main/java/com/android/volley/compat/NoSSLv3Compat.java deleted file mode 100644 index f8d82fe0d8..0000000000 --- a/Clover/app/src/main/java/com/android/volley/compat/NoSSLv3Compat.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.android.volley.compat; - -import com.android.volley.VolleyLog; - -import java.io.IOException; -import java.net.InetAddress; -import java.net.Socket; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLSocket; -import javax.net.ssl.SSLSocketFactory; - -public class NoSSLv3Compat { - /** - * An {@link javax.net.ssl.SSLSocket} that doesn't allow {@code SSLv3} only connections - *

fixes https://github.com/koush/ion/issues/386

- *

Android bug report: https://code.google.com/p/android/issues/detail?id=78187

- */ - private static class NoSSLv3SSLSocket extends DelegateSSLSocket { - - private NoSSLv3SSLSocket(SSLSocket delegate) { - super(delegate); - - /*String canonicalName = delegate.getClass().getCanonicalName(); - if (!canonicalName.equals("org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl")) { - // try replicate the code from HttpConnection.setupSecureSocket() - try { - Method msetUseSessionTickets = delegate.getClass().getMethod("setUseSessionTickets", boolean.class); - if (null != msetUseSessionTickets) { - msetUseSessionTickets.invoke(delegate, true); - } - } catch (NoSuchMethodException ignored) { - } catch (InvocationTargetException ignored) { - } catch (IllegalAccessException ignored) { - } - }*/ - } - - @Override - public void setEnabledProtocols(String[] protocols) { - if (protocols != null && protocols.length == 1 && "SSLv3".equals(protocols[0])) { - // no way jose - // see issue https://code.google.com/p/android/issues/detail?id=78187 - List enabledProtocols = new ArrayList<>(Arrays.asList(delegate.getEnabledProtocols())); - if (enabledProtocols.size() > 1) { - enabledProtocols.remove("SSLv3"); - VolleyLog.d("Removed SSLv3 from enabled protocols"); - } else { - VolleyLog.d("SSL stuck with protocol available for " + String.valueOf(enabledProtocols)); - } - protocols = enabledProtocols.toArray(new String[enabledProtocols.size()]); - } - - super.setEnabledProtocols(protocols); - } - } - - /** - * {@link javax.net.ssl.SSLSocketFactory} that doesn't allow {@code SSLv3} only connections - */ - public static class NoSSLv3Factory extends SSLSocketFactory { - private final SSLSocketFactory delegate; - - public NoSSLv3Factory() { - this.delegate = HttpsURLConnection.getDefaultSSLSocketFactory(); - } - - @Override - public String[] getDefaultCipherSuites() { - return delegate.getDefaultCipherSuites(); - } - - @Override - public String[] getSupportedCipherSuites() { - return delegate.getSupportedCipherSuites(); - } - - private static Socket makeSocketSafe(Socket socket) { - if (socket instanceof SSLSocket) { - socket = new NoSSLv3SSLSocket((SSLSocket) socket); - } - return socket; - } - - @Override - public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException { - return makeSocketSafe(delegate.createSocket(s, host, port, autoClose)); - } - - @Override - public Socket createSocket(String host, int port) throws IOException { - return makeSocketSafe(delegate.createSocket(host, port)); - } - - @Override - public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException { - return makeSocketSafe(delegate.createSocket(host, port, localHost, localPort)); - } - - @Override - public Socket createSocket(InetAddress host, int port) throws IOException { - return makeSocketSafe(delegate.createSocket(host, port)); - } - - @Override - public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { - return makeSocketSafe(delegate.createSocket(address, port, localAddress, localPort)); - } - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/AndroidAuthenticator.java b/Clover/app/src/main/java/com/android/volley/toolbox/AndroidAuthenticator.java deleted file mode 100644 index 371fd83d36..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/AndroidAuthenticator.java +++ /dev/null @@ -1,102 +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.volley.toolbox; - -import com.android.volley.AuthFailureError; - -import android.accounts.Account; -import android.accounts.AccountManager; -import android.accounts.AccountManagerFuture; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; - -/** - * An Authenticator that uses {@link AccountManager} to get auth - * tokens of a specified type for a specified account. - */ -public class AndroidAuthenticator implements Authenticator { - private final Context mContext; - private final Account mAccount; - private final String mAuthTokenType; - private final boolean mNotifyAuthFailure; - - /** - * Creates a new authenticator. - * @param context Context for accessing AccountManager - * @param account Account to authenticate as - * @param authTokenType Auth token type passed to AccountManager - */ - public AndroidAuthenticator(Context context, Account account, String authTokenType) { - this(context, account, authTokenType, false); - } - - /** - * Creates a new authenticator. - * @param context Context for accessing AccountManager - * @param account Account to authenticate as - * @param authTokenType Auth token type passed to AccountManager - * @param notifyAuthFailure Whether to raise a notification upon auth failure - */ - public AndroidAuthenticator(Context context, Account account, String authTokenType, - boolean notifyAuthFailure) { - mContext = context; - mAccount = account; - mAuthTokenType = authTokenType; - mNotifyAuthFailure = notifyAuthFailure; - } - - /** - * Returns the Account being used by this authenticator. - */ - public Account getAccount() { - return mAccount; - } - - // TODO: Figure out what to do about notifyAuthFailure - @SuppressWarnings("deprecation") - @Override - public String getAuthToken() throws AuthFailureError { - final AccountManager accountManager = AccountManager.get(mContext); - AccountManagerFuture future = accountManager.getAuthToken(mAccount, - mAuthTokenType, mNotifyAuthFailure, null, null); - Bundle result; - try { - result = future.getResult(); - } catch (Exception e) { - throw new AuthFailureError("Error while retrieving auth token", e); - } - String authToken = null; - if (future.isDone() && !future.isCancelled()) { - if (result.containsKey(AccountManager.KEY_INTENT)) { - Intent intent = result.getParcelable(AccountManager.KEY_INTENT); - throw new AuthFailureError(intent); - } - authToken = result.getString(AccountManager.KEY_AUTHTOKEN); - } - if (authToken == null) { - throw new AuthFailureError("Got null auth token for type: " + mAuthTokenType); - } - - return authToken; - } - - @Override - public void invalidateAuthToken(String authToken) { - AccountManager.get(mContext).invalidateAuthToken(mAccount.type, authToken); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/Authenticator.java b/Clover/app/src/main/java/com/android/volley/toolbox/Authenticator.java deleted file mode 100644 index d9f5e3c2f2..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/Authenticator.java +++ /dev/null @@ -1,36 +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.volley.toolbox; - -import com.android.volley.AuthFailureError; - -/** - * An interface for interacting with auth tokens. - */ -public interface Authenticator { - /** - * Synchronously retrieves an auth token. - * - * @throws AuthFailureError If authentication did not succeed - */ - public String getAuthToken() throws AuthFailureError; - - /** - * Invalidates the provided auth token. - */ - public void invalidateAuthToken(String authToken); -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/BasicNetwork.java b/Clover/app/src/main/java/com/android/volley/toolbox/BasicNetwork.java deleted file mode 100644 index c76ef6abc1..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/BasicNetwork.java +++ /dev/null @@ -1,263 +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.volley.toolbox; - -import android.os.SystemClock; - -import com.android.volley.AuthFailureError; -import com.android.volley.Cache; -import com.android.volley.Cache.Entry; -import com.android.volley.Network; -import com.android.volley.NetworkError; -import com.android.volley.NetworkResponse; -import com.android.volley.NoConnectionError; -import com.android.volley.Request; -import com.android.volley.RetryPolicy; -import com.android.volley.ServerError; -import com.android.volley.TimeoutError; -import com.android.volley.VolleyError; -import com.android.volley.VolleyLog; - -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.StatusLine; -import org.apache.http.conn.ConnectTimeoutException; -import org.apache.http.impl.cookie.DateUtils; - -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.SocketTimeoutException; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.TreeMap; - -/** - * A network performing Volley requests over an {@link HttpStack}. - */ -public class BasicNetwork implements Network { - protected static final boolean DEBUG = VolleyLog.DEBUG; - - private static int SLOW_REQUEST_THRESHOLD_MS = 3000; - - private static int DEFAULT_POOL_SIZE = 4096; - - protected final HttpStack mHttpStack; - - protected final ByteArrayPool mPool; - - /** - * @param httpStack HTTP stack to be used - */ - public BasicNetwork(HttpStack httpStack) { - // If a pool isn't passed in, then build a small default pool that will give us a lot of - // benefit and not use too much memory. - this(httpStack, new ByteArrayPool(DEFAULT_POOL_SIZE)); - } - - /** - * @param httpStack HTTP stack to be used - * @param pool a buffer pool that improves GC performance in copy operations - */ - public BasicNetwork(HttpStack httpStack, ByteArrayPool pool) { - mHttpStack = httpStack; - mPool = pool; - } - - @Override - public NetworkResponse performRequest(Request request) throws VolleyError { - long requestStart = SystemClock.elapsedRealtime(); - while (true) { - HttpResponse httpResponse = null; - byte[] responseContents = null; - Map responseHeaders = Collections.emptyMap(); - try { - // Gather headers. - Map headers = new HashMap(); - addCacheHeaders(headers, request.getCacheEntry()); - httpResponse = mHttpStack.performRequest(request, headers); - StatusLine statusLine = httpResponse.getStatusLine(); - int statusCode = statusLine.getStatusCode(); - - responseHeaders = convertHeaders(httpResponse.getAllHeaders()); - // Handle cache validation. - if (statusCode == HttpStatus.SC_NOT_MODIFIED) { - - Entry entry = request.getCacheEntry(); - if (entry == null) { - return new NetworkResponse(HttpStatus.SC_NOT_MODIFIED, null, - responseHeaders, true); - } - - // A HTTP 304 response does not have all header fields. We - // have to use the header fields from the cache entry plus - // the new ones from the response. - // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5 - entry.responseHeaders.putAll(responseHeaders); - return new NetworkResponse(HttpStatus.SC_NOT_MODIFIED, entry.data, - entry.responseHeaders, true); - } - - // Some responses such as 204s do not have content. We must check. - if (httpResponse.getEntity() != null) { - responseContents = entityToBytes(httpResponse.getEntity()); - } else { - // Add 0 byte response as a way of honestly representing a - // no-content request. - responseContents = new byte[0]; - } - - // if the request is slow, log it. - long requestLifetime = SystemClock.elapsedRealtime() - requestStart; - logSlowRequests(requestLifetime, request, responseContents, statusLine); - - if (statusCode < 200 || statusCode > 299) { - throw new IOException(); - } - return new NetworkResponse(statusCode, responseContents, responseHeaders, false); - } catch (SocketTimeoutException e) { - attemptRetryOnException("socket", request, new TimeoutError()); - } catch (ConnectTimeoutException e) { - attemptRetryOnException("connection", request, new TimeoutError()); - } catch (MalformedURLException e) { - throw new RuntimeException("Bad URL " + request.getUrl(), e); - } catch (IOException e) { - int statusCode = 0; - NetworkResponse networkResponse = null; - if (httpResponse != null) { - statusCode = httpResponse.getStatusLine().getStatusCode(); - } else { - throw new NoConnectionError(e); - } - VolleyLog.e("Unexpected response code %d for %s", statusCode, request.getUrl()); - if (responseContents != null) { - networkResponse = new NetworkResponse(statusCode, responseContents, - responseHeaders, false); - if (statusCode == HttpStatus.SC_UNAUTHORIZED || - statusCode == HttpStatus.SC_FORBIDDEN) { - attemptRetryOnException("auth", - request, new AuthFailureError(networkResponse)); - } else { - // TODO: Only throw ServerError for 5xx status codes. - throw new ServerError(networkResponse); - } - } else { - throw new NetworkError(networkResponse); - } - } - } - } - - /** - * Logs requests that took over SLOW_REQUEST_THRESHOLD_MS to complete. - */ - private void logSlowRequests(long requestLifetime, Request request, - byte[] responseContents, StatusLine statusLine) { - if (DEBUG || requestLifetime > SLOW_REQUEST_THRESHOLD_MS) { - VolleyLog.d("HTTP response for request=<%s> [lifetime=%d], [size=%s], " + - "[rc=%d], [retryCount=%s]", request, requestLifetime, - responseContents != null ? responseContents.length : "null", - statusLine.getStatusCode(), request.getRetryPolicy().getCurrentRetryCount()); - } - } - - /** - * Attempts to prepare the request for a retry. If there are no more attempts remaining in the - * request's retry policy, a timeout exception is thrown. - * @param request The request to use. - */ - private static void attemptRetryOnException(String logPrefix, Request request, - VolleyError exception) throws VolleyError { - RetryPolicy retryPolicy = request.getRetryPolicy(); - int oldTimeout = request.getTimeoutMs(); - - try { - retryPolicy.retry(exception); - } catch (VolleyError e) { - request.addMarker( - String.format("%s-timeout-giveup [timeout=%s]", logPrefix, oldTimeout)); - throw e; - } - request.addMarker(String.format("%s-retry [timeout=%s]", logPrefix, oldTimeout)); - } - - private void addCacheHeaders(Map headers, Cache.Entry entry) { - // If there's no cache entry, we're done. - if (entry == null) { - return; - } - - if (entry.etag != null) { - headers.put("If-None-Match", entry.etag); - } - - if (entry.serverDate > 0) { - Date refTime = new Date(entry.serverDate); - headers.put("If-Modified-Since", DateUtils.formatDate(refTime)); - } - } - - protected void logError(String what, String url, long start) { - long now = SystemClock.elapsedRealtime(); - VolleyLog.v("HTTP ERROR(%s) %d ms to fetch %s", what, (now - start), url); - } - - /** Reads the contents of HttpEntity into a byte[]. */ - private byte[] entityToBytes(HttpEntity entity) throws IOException, ServerError { - PoolingByteArrayOutputStream bytes = - new PoolingByteArrayOutputStream(mPool, (int) entity.getContentLength()); - byte[] buffer = null; - try { - InputStream in = entity.getContent(); - if (in == null) { - throw new ServerError(); - } - buffer = mPool.getBuf(1024); - int count; - while ((count = in.read(buffer)) != -1) { - bytes.write(buffer, 0, count); - } - return bytes.toByteArray(); - } finally { - try { - // Close the InputStream and release the resources by "consuming the content". - entity.consumeContent(); - } catch (IOException e) { - // This can happen if there was an exception above that left the entity in - // an invalid state. - VolleyLog.v("Error occured when calling consumingContent"); - } - mPool.returnBuf(buffer); - bytes.close(); - } - } - - /** - * Converts Headers[] to Map. - */ - protected static Map convertHeaders(Header[] headers) { - Map result = new TreeMap(String.CASE_INSENSITIVE_ORDER); - for (int i = 0; i < headers.length; i++) { - result.put(headers[i].getName(), headers[i].getValue()); - } - return result; - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/ByteArrayPool.java b/Clover/app/src/main/java/com/android/volley/toolbox/ByteArrayPool.java deleted file mode 100644 index af95076ad1..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/ByteArrayPool.java +++ /dev/null @@ -1,135 +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.volley.toolbox; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.List; - -/** - * ByteArrayPool is a source and repository of byte[] objects. Its purpose is to - * supply those buffers to consumers who need to use them for a short period of time and then - * dispose of them. Simply creating and disposing such buffers in the conventional manner can - * considerable heap churn and garbage collection delays on Android, which lacks good management of - * short-lived heap objects. It may be advantageous to trade off some memory in the form of a - * permanently allocated pool of buffers in order to gain heap performance improvements; that is - * what this class does. - *

- * A good candidate user for this class is something like an I/O system that uses large temporary - * byte[] buffers to copy data around. In these use cases, often the consumer wants - * the buffer to be a certain minimum size to ensure good performance (e.g. when copying data chunks - * off of a stream), but doesn't mind if the buffer is larger than the minimum. Taking this into - * account and also to maximize the odds of being able to reuse a recycled buffer, this class is - * free to return buffers larger than the requested size. The caller needs to be able to gracefully - * deal with getting buffers any size over the minimum. - *

- * If there is not a suitably-sized buffer in its recycling pool when a buffer is requested, this - * class will allocate a new buffer and return it. - *

- * This class has no special ownership of buffers it creates; the caller is free to take a buffer - * it receives from this pool, use it permanently, and never return it to the pool; additionally, - * it is not harmful to return to this pool a buffer that was allocated elsewhere, provided there - * are no other lingering references to it. - *

- * This class ensures that the total size of the buffers in its recycling pool never exceeds a - * certain byte limit. When a buffer is returned that would cause the pool to exceed the limit, - * least-recently-used buffers are disposed. - */ -public class ByteArrayPool { - /** The buffer pool, arranged both by last use and by buffer size */ - private List mBuffersByLastUse = new LinkedList(); - private List mBuffersBySize = new ArrayList(64); - - /** The total size of the buffers in the pool */ - private int mCurrentSize = 0; - - /** - * The maximum aggregate size of the buffers in the pool. Old buffers are discarded to stay - * under this limit. - */ - private final int mSizeLimit; - - /** Compares buffers by size */ - protected static final Comparator BUF_COMPARATOR = new Comparator() { - @Override - public int compare(byte[] lhs, byte[] rhs) { - return lhs.length - rhs.length; - } - }; - - /** - * @param sizeLimit the maximum size of the pool, in bytes - */ - public ByteArrayPool(int sizeLimit) { - mSizeLimit = sizeLimit; - } - - /** - * Returns a buffer from the pool if one is available in the requested size, or allocates a new - * one if a pooled one is not available. - * - * @param len the minimum size, in bytes, of the requested buffer. The returned buffer may be - * larger. - * @return a byte[] buffer is always returned. - */ - public synchronized byte[] getBuf(int len) { - for (int i = 0; i < mBuffersBySize.size(); i++) { - byte[] buf = mBuffersBySize.get(i); - if (buf.length >= len) { - mCurrentSize -= buf.length; - mBuffersBySize.remove(i); - mBuffersByLastUse.remove(buf); - return buf; - } - } - return new byte[len]; - } - - /** - * Returns a buffer to the pool, throwing away old buffers if the pool would exceed its allotted - * size. - * - * @param buf the buffer to return to the pool. - */ - public synchronized void returnBuf(byte[] buf) { - if (buf == null || buf.length > mSizeLimit) { - return; - } - mBuffersByLastUse.add(buf); - int pos = Collections.binarySearch(mBuffersBySize, buf, BUF_COMPARATOR); - if (pos < 0) { - pos = -pos - 1; - } - mBuffersBySize.add(pos, buf); - mCurrentSize += buf.length; - trim(); - } - - /** - * Removes buffers from the pool until it is under its size limit. - */ - private synchronized void trim() { - while (mCurrentSize > mSizeLimit) { - byte[] buf = mBuffersByLastUse.remove(0); - mBuffersBySize.remove(buf); - mCurrentSize -= buf.length; - } - } - -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/ClearCacheRequest.java b/Clover/app/src/main/java/com/android/volley/toolbox/ClearCacheRequest.java deleted file mode 100644 index a3478bf148..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/ClearCacheRequest.java +++ /dev/null @@ -1,70 +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.volley.toolbox; - -import com.android.volley.Cache; -import com.android.volley.NetworkResponse; -import com.android.volley.Request; -import com.android.volley.Response; - -import android.os.Handler; -import android.os.Looper; - -/** - * A synthetic request used for clearing the cache. - */ -public class ClearCacheRequest extends Request { - private final Cache mCache; - private final Runnable mCallback; - - /** - * Creates a synthetic request for clearing the cache. - * @param cache Cache to clear - * @param callback Callback to make on the main thread once the cache is clear, - * or null for none - */ - public ClearCacheRequest(Cache cache, Runnable callback) { - super(Method.GET, null, null); - mCache = cache; - mCallback = callback; - } - - @Override - public boolean isCanceled() { - // This is a little bit of a hack, but hey, why not. - mCache.clear(); - if (mCallback != null) { - Handler handler = new Handler(Looper.getMainLooper()); - handler.postAtFrontOfQueue(mCallback); - } - return true; - } - - @Override - public Priority getPriority() { - return Priority.IMMEDIATE; - } - - @Override - protected Response parseNetworkResponse(NetworkResponse response) { - return null; - } - - @Override - protected void deliverResponse(Object response) { - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/DiskBasedCache.java b/Clover/app/src/main/java/com/android/volley/toolbox/DiskBasedCache.java deleted file mode 100644 index a65a8f4dfc..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/DiskBasedCache.java +++ /dev/null @@ -1,569 +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.volley.toolbox; - -import android.os.SystemClock; - -import com.android.volley.Cache; -import com.android.volley.VolleyLog; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FilterInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * Cache implementation that caches files directly onto the hard disk in the specified - * directory. The default disk usage size is 5MB, but is configurable. - */ -public class DiskBasedCache implements Cache { - - /** Map of the Key, CacheHeader pairs */ - private final Map mEntries = - new LinkedHashMap(16, .75f, true); - - /** Total amount of space currently used by the cache in bytes. */ - private long mTotalSize = 0; - - /** The root directory to use for the cache. */ - private final File mRootDirectory; - - /** The maximum size of the cache in bytes. */ - private final int mMaxCacheSizeInBytes; - - /** Default maximum disk usage in bytes. */ - private static final int DEFAULT_DISK_USAGE_BYTES = 5 * 1024 * 1024; - - /** High water mark percentage for the cache */ - private static final float HYSTERESIS_FACTOR = 0.9f; - - /** Magic number for current version of cache file format. */ - private static final int CACHE_MAGIC = 0x20140623; - - private static final int DEFAULT_DISK_FILES_MAX = 250; - - /** - * Constructs an instance of the DiskBasedCache at the specified directory. - * @param rootDirectory The root directory of the cache. - * @param maxCacheSizeInBytes The maximum size of the cache in bytes. - */ - public DiskBasedCache(File rootDirectory, int maxCacheSizeInBytes) { - mRootDirectory = rootDirectory; - mMaxCacheSizeInBytes = maxCacheSizeInBytes; - } - - /** - * Constructs an instance of the DiskBasedCache at the specified directory using - * the default maximum cache size of 5MB. - * @param rootDirectory The root directory of the cache. - */ - public DiskBasedCache(File rootDirectory) { - this(rootDirectory, DEFAULT_DISK_USAGE_BYTES); - } - - /** - * Clears the cache. Deletes all cached files from disk. - */ - @Override - public synchronized void clear() { - File[] files = mRootDirectory.listFiles(); - if (files != null) { - for (File file : files) { - file.delete(); - } - } - mEntries.clear(); - mTotalSize = 0; - VolleyLog.d("Cache cleared."); - } - - /** - * Returns the cache entry with the specified key if it exists, null otherwise. - */ - @Override - public synchronized Entry get(String key) { - CacheHeader entry = mEntries.get(key); - // if the entry does not exist, return. - if (entry == null) { - return null; - } - - File file = getFileForKey(key); - CountingInputStream cis = null; - try { - cis = new CountingInputStream(new BufferedInputStream(new FileInputStream(file))); - CacheHeader.readHeader(cis); // eat header - byte[] data = streamToBytes(cis, (int) (file.length() - cis.bytesRead)); - return entry.toCacheEntry(data); - } catch (IOException e) { - VolleyLog.d("%s: %s", file.getAbsolutePath(), e.toString()); - remove(key); - return null; - } finally { - if (cis != null) { - try { - cis.close(); - } catch (IOException ioe) { - return null; - } - } - } - } - - /** - * Initializes the DiskBasedCache by scanning for all files currently in the - * specified root directory. Creates the root directory if necessary. - */ - @Override - public synchronized void initialize() { - if (!mRootDirectory.exists()) { - if (!mRootDirectory.mkdirs()) { - VolleyLog.e("Unable to create cache dir %s", mRootDirectory.getAbsolutePath()); - } - return; - } - - File[] files = mRootDirectory.listFiles(); - if (files == null) { - return; - } - for (File file : files) { - BufferedInputStream fis = null; - try { - fis = new BufferedInputStream(new FileInputStream(file)); - CacheHeader entry = CacheHeader.readHeader(fis); - entry.size = file.length(); - putEntry(entry.key, entry); - } catch (IOException e) { - if (file != null) { - file.delete(); - } - } finally { - try { - if (fis != null) { - fis.close(); - } - } catch (IOException ignored) { } - } - } - } - - /** - * Invalidates an entry in the cache. - * @param key Cache key - * @param fullExpire True to fully expire the entry, false to soft expire - */ - @Override - public synchronized void invalidate(String key, boolean fullExpire) { - Entry entry = get(key); - if (entry != null) { - entry.softTtl = 0; - if (fullExpire) { - entry.ttl = 0; - } - put(key, entry); - } - - } - - /** - * Puts the entry with the specified key into the cache. - */ - @Override - public synchronized void put(String key, Entry entry) { - pruneIfNeeded(entry.data.length); - File file = getFileForKey(key); - try { - BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(file)); - CacheHeader e = new CacheHeader(key, entry); - boolean success = e.writeHeader(fos); - if (!success) { - fos.close(); - VolleyLog.d("Failed to write header for %s", file.getAbsolutePath()); - throw new IOException(); - } - fos.write(entry.data); - fos.close(); - putEntry(key, e); - return; - } catch (IOException e) { - } - boolean deleted = file.delete(); - if (!deleted) { - VolleyLog.d("Could not clean up file %s", file.getAbsolutePath()); - } - } - - /** - * Removes the specified key from the cache if it exists. - */ - @Override - public synchronized void remove(String key) { - boolean deleted = getFileForKey(key).delete(); - removeEntry(key); - if (!deleted) { - VolleyLog.d("Could not delete cache entry for key=%s, filename=%s", - key, getFilenameForKey(key)); - } - } - - /** - * Creates a pseudo-unique filename for the specified cache key. - * @param key The key to generate a file name for. - * @return A pseudo-unique filename. - */ - private String getFilenameForKey(String key) { - int firstHalfLength = key.length() / 2; - String localFilename = String.valueOf(key.substring(0, firstHalfLength).hashCode()); - localFilename += String.valueOf(key.substring(firstHalfLength).hashCode()); - return localFilename; - } - - /** - * Returns a file object for the given cache key. - */ - public File getFileForKey(String key) { - return new File(mRootDirectory, getFilenameForKey(key)); - } - - /** - * Prunes the cache to fit the amount of bytes specified. - * @param neededSpace The amount of bytes we are trying to fit into the cache. - */ - private void pruneIfNeeded(int neededSpace) { - if (mEntries.size() <= DEFAULT_DISK_FILES_MAX && (mTotalSize + neededSpace) < mMaxCacheSizeInBytes) { - return; - } - if (VolleyLog.DEBUG) { - VolleyLog.v("Pruning old cache entries."); - } - - long before = mTotalSize; - int prunedFiles = 0; - long startTime = SystemClock.elapsedRealtime(); - - Iterator> iterator = mEntries.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - CacheHeader e = entry.getValue(); - boolean deleted = getFileForKey(e.key).delete(); - if (deleted) { - mTotalSize -= e.size; - } else { - VolleyLog.d("Could not delete cache entry for key=%s, filename=%s", - e.key, getFilenameForKey(e.key)); - } - iterator.remove(); - prunedFiles++; - - if (mEntries.size() < DEFAULT_DISK_FILES_MAX * HYSTERESIS_FACTOR && (mTotalSize + neededSpace) < mMaxCacheSizeInBytes * HYSTERESIS_FACTOR) { - break; - } - } - - if (VolleyLog.DEBUG) { - VolleyLog.v("pruned %d files, %d bytes, %d ms", - prunedFiles, (mTotalSize - before), SystemClock.elapsedRealtime() - startTime); - } - } - - /** - * Puts the entry with the specified key into the cache. - * @param key The key to identify the entry by. - * @param entry The entry to cache. - */ - private void putEntry(String key, CacheHeader entry) { - if (!mEntries.containsKey(key)) { - mTotalSize += entry.size; - } else { - CacheHeader oldEntry = mEntries.get(key); - mTotalSize += (entry.size - oldEntry.size); - } - mEntries.put(key, entry); - } - - /** - * Removes the entry identified by 'key' from the cache. - */ - private void removeEntry(String key) { - CacheHeader entry = mEntries.get(key); - if (entry != null) { - mTotalSize -= entry.size; - mEntries.remove(key); - } - } - - /** - * Reads the contents of an InputStream into a byte[]. - * */ - private static byte[] streamToBytes(InputStream in, int length) throws IOException { - if (length < 0) { - throw new IOException("length < 0"); - } - - byte[] bytes = new byte[length]; - int count; - int pos = 0; - while (pos < length && ((count = in.read(bytes, pos, length - pos)) != -1)) { - pos += count; - } - if (pos != length) { - throw new IOException("Expected " + length + " bytes, read " + pos + " bytes"); - } - return bytes; - } - - /** - * Handles holding onto the cache headers for an entry. - */ - // Visible for testing. - static class CacheHeader { - /** The size of the data identified by this CacheHeader. (This is not - * serialized to disk. */ - public long size; - - /** The key that identifies the cache entry. */ - public String key; - - /** ETag for cache coherence. */ - public String etag; - - /** Date of this response as reported by the server. */ - public long serverDate; - - /** TTL for this record. */ - public long ttl; - - /** Soft TTL for this record. */ - public long softTtl; - - /** Headers from the response resulting in this cache entry. */ - public Map responseHeaders; - - private CacheHeader() { } - - /** - * Instantiates a new CacheHeader object - * @param key The key that identifies the cache entry - * @param entry The cache entry. - */ - public CacheHeader(String key, Entry entry) { - this.key = key; - this.size = entry.data.length; - this.etag = entry.etag; - this.serverDate = entry.serverDate; - this.ttl = entry.ttl; - this.softTtl = entry.softTtl; - this.responseHeaders = entry.responseHeaders; - } - - /** - * Reads the header off of an InputStream and returns a CacheHeader object. - * @param is The InputStream to read from. - * @throws IOException - */ - public static CacheHeader readHeader(InputStream is) throws IOException { - CacheHeader entry = new CacheHeader(); - int magic = readInt(is); - if (magic != CACHE_MAGIC) { - // don't bother deleting, it'll get pruned eventually - throw new IOException(); - } - entry.key = readString(is); - entry.etag = readString(is); - if (entry.etag.equals("")) { - entry.etag = null; - } - entry.serverDate = readLong(is); - entry.ttl = readLong(is); - entry.softTtl = readLong(is); - entry.responseHeaders = readStringStringMap(is); - return entry; - } - - /** - * Creates a cache entry for the specified data. - */ - public Entry toCacheEntry(byte[] data) { - Entry e = new Entry(); - e.data = data; - e.etag = etag; - e.serverDate = serverDate; - e.ttl = ttl; - e.softTtl = softTtl; - e.responseHeaders = responseHeaders; - return e; - } - - - /** - * Writes the contents of this CacheHeader to the specified OutputStream. - */ - public boolean writeHeader(OutputStream os) { - try { - writeInt(os, CACHE_MAGIC); - writeString(os, key); - writeString(os, etag == null ? "" : etag); - writeLong(os, serverDate); - writeLong(os, ttl); - writeLong(os, softTtl); - writeStringStringMap(responseHeaders, os); - os.flush(); - return true; - } catch (IOException e) { - VolleyLog.d("%s", e.toString()); - return false; - } - } - - } - - private static class CountingInputStream extends FilterInputStream { - private int bytesRead = 0; - - private CountingInputStream(InputStream in) { - super(in); - } - - @Override - public int read() throws IOException { - int result = super.read(); - if (result != -1) { - bytesRead++; - } - return result; - } - - @Override - public int read(byte[] buffer, int offset, int count) throws IOException { - int result = super.read(buffer, offset, count); - if (result != -1) { - bytesRead += result; - } - return result; - } - } - - /* - * Homebrewed simple serialization system used for reading and writing cache - * headers on disk. Once upon a time, this used the standard Java - * Object{Input,Output}Stream, but the default implementation relies heavily - * on reflection (even for standard types) and generates a ton of garbage. - */ - - /** - * Simple wrapper around {@link InputStream#read()} that throws EOFException - * instead of returning -1. - */ - private static int read(InputStream is) throws IOException { - int b = is.read(); - if (b == -1) { - throw new EOFException(); - } - return b; - } - - static void writeInt(OutputStream os, int n) throws IOException { - os.write((n >> 0) & 0xff); - os.write((n >> 8) & 0xff); - os.write((n >> 16) & 0xff); - os.write((n >> 24) & 0xff); - } - - static int readInt(InputStream is) throws IOException { - int n = 0; - n |= (read(is) << 0); - n |= (read(is) << 8); - n |= (read(is) << 16); - n |= (read(is) << 24); - return n; - } - - static void writeLong(OutputStream os, long n) throws IOException { - os.write((byte)(n >>> 0)); - os.write((byte)(n >>> 8)); - os.write((byte)(n >>> 16)); - os.write((byte)(n >>> 24)); - os.write((byte)(n >>> 32)); - os.write((byte)(n >>> 40)); - os.write((byte)(n >>> 48)); - os.write((byte)(n >>> 56)); - } - - static long readLong(InputStream is) throws IOException { - long n = 0; - n |= ((read(is) & 0xFFL) << 0); - n |= ((read(is) & 0xFFL) << 8); - n |= ((read(is) & 0xFFL) << 16); - n |= ((read(is) & 0xFFL) << 24); - n |= ((read(is) & 0xFFL) << 32); - n |= ((read(is) & 0xFFL) << 40); - n |= ((read(is) & 0xFFL) << 48); - n |= ((read(is) & 0xFFL) << 56); - return n; - } - - static void writeString(OutputStream os, String s) throws IOException { - byte[] b = s.getBytes("UTF-8"); - writeLong(os, b.length); - os.write(b, 0, b.length); - } - - static String readString(InputStream is) throws IOException { - int n = (int) readLong(is); - byte[] b = streamToBytes(is, n); - return new String(b, "UTF-8"); - } - - static void writeStringStringMap(Map map, OutputStream os) throws IOException { - if (map != null) { - writeInt(os, map.size()); - for (Map.Entry entry : map.entrySet()) { - writeString(os, entry.getKey()); - writeString(os, entry.getValue()); - } - } else { - writeInt(os, 0); - } - } - - static Map readStringStringMap(InputStream is) throws IOException { - int size = readInt(is); - Map result = (size == 0) - ? Collections.emptyMap() - : new HashMap(size); - for (int i = 0; i < size; i++) { - String key = readString(is).intern(); - String value = readString(is).intern(); - result.put(key, value); - } - return result; - } - - -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/HttpClientStack.java b/Clover/app/src/main/java/com/android/volley/toolbox/HttpClientStack.java deleted file mode 100644 index 377110efbf..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/HttpClientStack.java +++ /dev/null @@ -1,194 +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.volley.toolbox; - -import com.android.volley.AuthFailureError; -import com.android.volley.Request; -import com.android.volley.Request.Method; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpDelete; -import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpHead; -import org.apache.http.client.methods.HttpOptions; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; -import org.apache.http.client.methods.HttpTrace; -import org.apache.http.client.methods.HttpUriRequest; -import org.apache.http.entity.ByteArrayEntity; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.params.HttpConnectionParams; -import org.apache.http.params.HttpParams; - -import java.io.IOException; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * An HttpStack that performs request over an {@link HttpClient}. - */ -public class HttpClientStack implements HttpStack { - protected final HttpClient mClient; - - private final static String HEADER_CONTENT_TYPE = "Content-Type"; - - public HttpClientStack(HttpClient client) { - mClient = client; - } - - private static void addHeaders(HttpUriRequest httpRequest, Map headers) { - for (String key : headers.keySet()) { - httpRequest.setHeader(key, headers.get(key)); - } - } - - @SuppressWarnings("unused") - private static List getPostParameterPairs(Map postParams) { - List result = new ArrayList(postParams.size()); - for (String key : postParams.keySet()) { - result.add(new BasicNameValuePair(key, postParams.get(key))); - } - return result; - } - - @Override - public HttpResponse performRequest(Request request, Map additionalHeaders) - throws IOException, AuthFailureError { - HttpUriRequest httpRequest = createHttpRequest(request, additionalHeaders); - addHeaders(httpRequest, additionalHeaders); - addHeaders(httpRequest, request.getHeaders()); - onPrepareRequest(httpRequest); - HttpParams httpParams = httpRequest.getParams(); - int timeoutMs = request.getTimeoutMs(); - // TODO: Reevaluate this connection timeout based on more wide-scale - // data collection and possibly different for wifi vs. 3G. - HttpConnectionParams.setConnectionTimeout(httpParams, 5000); - HttpConnectionParams.setSoTimeout(httpParams, timeoutMs); - return mClient.execute(httpRequest); - } - - /** - * Creates the appropriate subclass of HttpUriRequest for passed in request. - */ - @SuppressWarnings("deprecation") - /* protected */ static HttpUriRequest createHttpRequest(Request request, - Map additionalHeaders) throws AuthFailureError { - switch (request.getMethod()) { - case Method.DEPRECATED_GET_OR_POST: { - // This is the deprecated way that needs to be handled for backwards compatibility. - // If the request's post body is null, then the assumption is that the request is - // GET. Otherwise, it is assumed that the request is a POST. - byte[] postBody = request.getPostBody(); - if (postBody != null) { - HttpPost postRequest = new HttpPost(request.getUrl()); - postRequest.addHeader(HEADER_CONTENT_TYPE, request.getPostBodyContentType()); - HttpEntity entity; - entity = new ByteArrayEntity(postBody); - postRequest.setEntity(entity); - return postRequest; - } else { - return new HttpGet(request.getUrl()); - } - } - case Method.GET: - return new HttpGet(request.getUrl()); - case Method.DELETE: - return new HttpDelete(request.getUrl()); - case Method.POST: { - HttpPost postRequest = new HttpPost(request.getUrl()); - postRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType()); - setEntityIfNonEmptyBody(postRequest, request); - return postRequest; - } - case Method.PUT: { - HttpPut putRequest = new HttpPut(request.getUrl()); - putRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType()); - setEntityIfNonEmptyBody(putRequest, request); - return putRequest; - } - case Method.HEAD: - return new HttpHead(request.getUrl()); - case Method.OPTIONS: - return new HttpOptions(request.getUrl()); - case Method.TRACE: - return new HttpTrace(request.getUrl()); - case Method.PATCH: { - HttpPatch patchRequest = new HttpPatch(request.getUrl()); - patchRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType()); - setEntityIfNonEmptyBody(patchRequest, request); - return patchRequest; - } - default: - throw new IllegalStateException("Unknown request method."); - } - } - - private static void setEntityIfNonEmptyBody(HttpEntityEnclosingRequestBase httpRequest, - Request request) throws AuthFailureError { - byte[] body = request.getBody(); - if (body != null) { - HttpEntity entity = new ByteArrayEntity(body); - httpRequest.setEntity(entity); - } - } - - /** - * Called before the request is executed using the underlying HttpClient. - * - *

Overwrite in subclasses to augment the request.

- */ - protected void onPrepareRequest(HttpUriRequest request) throws IOException { - // Nothing. - } - - /** - * The HttpPatch class does not exist in the Android framework, so this has been defined here. - */ - public static final class HttpPatch extends HttpEntityEnclosingRequestBase { - - public final static String METHOD_NAME = "PATCH"; - - public HttpPatch() { - super(); - } - - public HttpPatch(final URI uri) { - super(); - setURI(uri); - } - - /** - * @throws IllegalArgumentException if the uri is invalid. - */ - public HttpPatch(final String uri) { - super(); - setURI(URI.create(uri)); - } - - @Override - public String getMethod() { - return METHOD_NAME; - } - - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/HttpHeaderParser.java b/Clover/app/src/main/java/com/android/volley/toolbox/HttpHeaderParser.java deleted file mode 100644 index cb08432267..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/HttpHeaderParser.java +++ /dev/null @@ -1,137 +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.volley.toolbox; - -import com.android.volley.Cache; -import com.android.volley.NetworkResponse; - -import org.apache.http.impl.cookie.DateParseException; -import org.apache.http.impl.cookie.DateUtils; -import org.apache.http.protocol.HTTP; - -import java.util.Map; - -/** - * Utility methods for parsing HTTP headers. - */ -public class HttpHeaderParser { - - /** - * Extracts a {@link Cache.Entry} from a {@link NetworkResponse}. - * - * @param response The network response to parse headers from - * @return a cache entry for the given response, or null if the response is not cacheable. - */ - public static Cache.Entry parseCacheHeaders(NetworkResponse response) { - long now = System.currentTimeMillis(); - - Map headers = response.headers; - - long serverDate = 0; - long serverExpires = 0; - long softExpire = 0; - long maxAge = 0; - boolean hasCacheControl = false; - - String serverEtag = null; - String headerValue; - - headerValue = headers.get("Date"); - if (headerValue != null) { - serverDate = parseDateAsEpoch(headerValue); - } - - headerValue = headers.get("Cache-Control"); - if (headerValue != null) { - hasCacheControl = true; - String[] tokens = headerValue.split(","); - for (int i = 0; i < tokens.length; i++) { - String token = tokens[i].trim(); - if (token.equals("no-cache") || token.equals("no-store")) { - return null; - } else if (token.startsWith("max-age=")) { - try { - maxAge = Long.parseLong(token.substring(8)); - } catch (Exception e) { - } - } else if (token.equals("must-revalidate") || token.equals("proxy-revalidate")) { - maxAge = 0; - } - } - } - - headerValue = headers.get("Expires"); - if (headerValue != null) { - serverExpires = parseDateAsEpoch(headerValue); - } - - serverEtag = headers.get("ETag"); - - // Cache-Control takes precedence over an Expires header, even if both exist and Expires - // is more restrictive. - if (hasCacheControl) { - softExpire = now + maxAge * 1000; - } else if (serverDate > 0 && serverExpires >= serverDate) { - // Default semantic for Expire header in HTTP specification is softExpire. - softExpire = now + (serverExpires - serverDate); - } - - Cache.Entry entry = new Cache.Entry(); - entry.data = response.data; - entry.etag = serverEtag; - entry.softTtl = softExpire; - entry.ttl = entry.softTtl; - entry.serverDate = serverDate; - entry.responseHeaders = headers; - - return entry; - } - - /** - * Parse date in RFC1123 format, and return its value as epoch - */ - public static long parseDateAsEpoch(String dateStr) { - try { - // Parse date in RFC1123 format if this header contains one - return DateUtils.parseDate(dateStr).getTime(); - } catch (DateParseException e) { - // Date in invalid format, fallback to 0 - return 0; - } - } - - /** - * Returns the charset specified in the Content-Type of this header, - * or the HTTP default (ISO-8859-1) if none can be found. - */ - public static String parseCharset(Map headers) { - String contentType = headers.get(HTTP.CONTENT_TYPE); - if (contentType != null) { - String[] params = contentType.split(";"); - for (int i = 1; i < params.length; i++) { - String[] pair = params[i].trim().split("="); - if (pair.length == 2) { - if (pair[0].equals("charset")) { - return pair[1]; - } - } - } - } - - return HTTP.DEFAULT_CONTENT_CHARSET; - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/HttpStack.java b/Clover/app/src/main/java/com/android/volley/toolbox/HttpStack.java deleted file mode 100644 index a52fd06ca7..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/HttpStack.java +++ /dev/null @@ -1,45 +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.volley.toolbox; - -import com.android.volley.AuthFailureError; -import com.android.volley.Request; - -import org.apache.http.HttpResponse; - -import java.io.IOException; -import java.util.Map; - -/** - * An HTTP stack abstraction. - */ -public interface HttpStack { - /** - * Performs an HTTP request with the given parameters. - * - *

A GET request is sent if request.getPostBody() == null. A POST request is sent otherwise, - * and the Content-Type header is set to request.getPostBodyContentType().

- * - * @param request the request to perform - * @param additionalHeaders additional headers to be sent together with - * {@link Request#getHeaders()} - * @return the HTTP response - */ - public HttpResponse performRequest(Request request, Map additionalHeaders) - throws IOException, AuthFailureError; - -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/HurlStack.java b/Clover/app/src/main/java/com/android/volley/toolbox/HurlStack.java deleted file mode 100644 index 7bd5bf7ae5..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/HurlStack.java +++ /dev/null @@ -1,248 +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.volley.toolbox; - -import com.android.volley.AuthFailureError; -import com.android.volley.Request; -import com.android.volley.Request.Method; - -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.ProtocolVersion; -import org.apache.http.StatusLine; -import org.apache.http.entity.BasicHttpEntity; -import org.apache.http.message.BasicHeader; -import org.apache.http.message.BasicHttpResponse; -import org.apache.http.message.BasicStatusLine; - -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLSocketFactory; - -/** - * An {@link HttpStack} based on {@link HttpURLConnection}. - */ -public class HurlStack implements HttpStack { - - private static final String HEADER_CONTENT_TYPE = "Content-Type"; - private final String mUserAgent; - - /** - * An interface for transforming URLs before use. - */ - public interface UrlRewriter { - /** - * Returns a URL to use instead of the provided one, or null to indicate - * this URL should not be used at all. - */ - public String rewriteUrl(String originalUrl); - } - - private final UrlRewriter mUrlRewriter; - private final SSLSocketFactory mSslSocketFactory; - - public HurlStack(String userAgent) { - this(userAgent, null); - } - - /** - * @param urlRewriter Rewriter to use for request URLs - */ - public HurlStack(String userAgent, UrlRewriter urlRewriter) { - this(userAgent, urlRewriter, null); - } - - /** - * @param urlRewriter Rewriter to use for request URLs - * @param sslSocketFactory SSL factory to use for HTTPS connections - */ - public HurlStack(String userAgent, UrlRewriter urlRewriter, SSLSocketFactory sslSocketFactory) { - mUserAgent = userAgent; - mUrlRewriter = urlRewriter; - mSslSocketFactory = sslSocketFactory; - } - - @Override - public HttpResponse performRequest(Request request, Map additionalHeaders) - throws IOException, AuthFailureError { - String url = request.getUrl(); - HashMap map = new HashMap(); - map.putAll(request.getHeaders()); - map.putAll(additionalHeaders); - map.put("User-Agent", mUserAgent); - if (mUrlRewriter != null) { - String rewritten = mUrlRewriter.rewriteUrl(url); - if (rewritten == null) { - throw new IOException("URL blocked by rewriter: " + url); - } - url = rewritten; - } - URL parsedUrl = new URL(url); - HttpURLConnection connection = openConnection(parsedUrl, request); - for (String headerName : map.keySet()) { - connection.addRequestProperty(headerName, map.get(headerName)); - } - setConnectionParametersForRequest(connection, request); - // Initialize HttpResponse with data from the HttpURLConnection. - ProtocolVersion protocolVersion = new ProtocolVersion("HTTP", 1, 1); - int responseCode = connection.getResponseCode(); - if (responseCode == -1) { - // -1 is returned by getResponseCode() if the response code could not be retrieved. - // Signal to the caller that something was wrong with the connection. - throw new IOException("Could not retrieve response code from HttpUrlConnection."); - } - StatusLine responseStatus = new BasicStatusLine(protocolVersion, - connection.getResponseCode(), connection.getResponseMessage()); - BasicHttpResponse response = new BasicHttpResponse(responseStatus); - response.setEntity(entityFromConnection(connection)); - for (Entry> header : connection.getHeaderFields().entrySet()) { - if (header.getKey() != null) { - Header h = new BasicHeader(header.getKey(), header.getValue().get(0)); - response.addHeader(h); - } - } - return response; - } - - /** - * Initializes an {@link HttpEntity} from the given {@link HttpURLConnection}. - * @param connection - * @return an HttpEntity populated with data from connection. - */ - private static HttpEntity entityFromConnection(HttpURLConnection connection) { - BasicHttpEntity entity = new BasicHttpEntity(); - InputStream inputStream; - try { - inputStream = connection.getInputStream(); - } catch (IOException ioe) { - inputStream = connection.getErrorStream(); - } - entity.setContent(inputStream); - entity.setContentLength(connection.getContentLength()); - entity.setContentEncoding(connection.getContentEncoding()); - entity.setContentType(connection.getContentType()); - return entity; - } - - /** - * Create an {@link HttpURLConnection} for the specified {@code url}. - */ - protected HttpURLConnection createConnection(URL url) throws IOException { - return (HttpURLConnection) url.openConnection(); - } - - /** - * Opens an {@link HttpURLConnection} with parameters. - * @param url - * @return an open connection - * @throws IOException - */ - private HttpURLConnection openConnection(URL url, Request request) throws IOException { - HttpURLConnection connection = createConnection(url); - - int timeoutMs = request.getTimeoutMs(); - connection.setConnectTimeout(timeoutMs); - connection.setReadTimeout(timeoutMs); - connection.setUseCaches(false); - connection.setDoInput(true); - - // use caller-provided custom SslSocketFactory, if any, for HTTPS - if ("https".equals(url.getProtocol()) && mSslSocketFactory != null) { - ((HttpsURLConnection)connection).setSSLSocketFactory(mSslSocketFactory); - } - - return connection; - } - - @SuppressWarnings("deprecation") - /* package */ static void setConnectionParametersForRequest(HttpURLConnection connection, - Request request) throws IOException, AuthFailureError { - switch (request.getMethod()) { - case Method.DEPRECATED_GET_OR_POST: - // This is the deprecated way that needs to be handled for backwards compatibility. - // If the request's post body is null, then the assumption is that the request is - // GET. Otherwise, it is assumed that the request is a POST. - byte[] postBody = request.getPostBody(); - if (postBody != null) { - // Prepare output. There is no need to set Content-Length explicitly, - // since this is handled by HttpURLConnection using the size of the prepared - // output stream. - connection.setDoOutput(true); - connection.setRequestMethod("POST"); - connection.addRequestProperty(HEADER_CONTENT_TYPE, - request.getPostBodyContentType()); - DataOutputStream out = new DataOutputStream(connection.getOutputStream()); - out.write(postBody); - out.close(); - } - break; - case Method.GET: - // Not necessary to set the request method because connection defaults to GET but - // being explicit here. - connection.setRequestMethod("GET"); - break; - case Method.DELETE: - connection.setRequestMethod("DELETE"); - break; - case Method.POST: - connection.setRequestMethod("POST"); - addBodyIfExists(connection, request); - break; - case Method.PUT: - connection.setRequestMethod("PUT"); - addBodyIfExists(connection, request); - break; - case Method.HEAD: - connection.setRequestMethod("HEAD"); - break; - case Method.OPTIONS: - connection.setRequestMethod("OPTIONS"); - break; - case Method.TRACE: - connection.setRequestMethod("TRACE"); - break; - case Method.PATCH: - connection.setRequestMethod("PATCH"); - addBodyIfExists(connection, request); - break; - default: - throw new IllegalStateException("Unknown method type."); - } - } - - private static void addBodyIfExists(HttpURLConnection connection, Request request) - throws IOException, AuthFailureError { - byte[] body = request.getBody(); - if (body != null) { - connection.setDoOutput(true); - connection.addRequestProperty(HEADER_CONTENT_TYPE, request.getBodyContentType()); - DataOutputStream out = new DataOutputStream(connection.getOutputStream()); - out.write(body); - out.close(); - } - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/ImageLoader.java b/Clover/app/src/main/java/com/android/volley/toolbox/ImageLoader.java deleted file mode 100644 index 5348dc69a1..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/ImageLoader.java +++ /dev/null @@ -1,482 +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.volley.toolbox; - -import android.graphics.Bitmap; -import android.graphics.Bitmap.Config; -import android.os.Handler; -import android.os.Looper; -import android.widget.ImageView; - -import com.android.volley.Request; -import com.android.volley.RequestQueue; -import com.android.volley.Response.ErrorListener; -import com.android.volley.Response.Listener; -import com.android.volley.VolleyError; - -import java.util.HashMap; -import java.util.LinkedList; - -/** - * Helper that handles loading and caching images from remote URLs. - * - * The simple way to use this class is to call {@link ImageLoader#get(String, ImageListener)} - * and to pass in the default image listener provided by - * {@link ImageLoader#getImageListener(ImageView, int, int)}. Note that all function calls to - * this class must be made from the main thead, and all responses will be delivered to the main - * thread as well. - */ -public class ImageLoader { - /** RequestQueue for dispatching ImageRequests onto. */ - private final RequestQueue mRequestQueue; - - /** Amount of time to wait after first response arrives before delivering all responses. */ - private int mBatchResponseDelayMs = 100; - - /** The cache implementation to be used as an L1 cache before calling into volley. */ - private final ImageCache mCache; - - /** - * HashMap of Cache keys -> BatchedImageRequest used to track in-flight requests so - * that we can coalesce multiple requests to the same URL into a single network request. - */ - private final HashMap mInFlightRequests = - new HashMap(); - - /** HashMap of the currently pending responses (waiting to be delivered). */ - private final HashMap mBatchedResponses = - new HashMap(); - - /** Handler to the main thread. */ - private final Handler mHandler = new Handler(Looper.getMainLooper()); - - /** Runnable for in-flight response delivery. */ - private Runnable mRunnable; - - /** - * Simple cache adapter interface. If provided to the ImageLoader, it - * will be used as an L1 cache before dispatch to Volley. Implementations - * must not block. Implementation with an LruCache is recommended. - */ - public interface ImageCache { - public Bitmap getBitmap(String url); - public void putBitmap(String url, Bitmap bitmap); - } - - /** - * Constructs a new ImageLoader. - * @param queue The RequestQueue to use for making image requests. - * @param imageCache The cache to use as an L1 cache. - */ - public ImageLoader(RequestQueue queue, ImageCache imageCache) { - mRequestQueue = queue; - mCache = imageCache; - } - - /** - * The default implementation of ImageListener which handles basic functionality - * of showing a default image until the network response is received, at which point - * it will switch to either the actual image or the error image. - * @param imageView The imageView that the listener is associated with. - * @param defaultImageResId Default image resource ID to use, or 0 if it doesn't exist. - * @param errorImageResId Error image resource ID to use, or 0 if it doesn't exist. - */ - public static ImageListener getImageListener(final ImageView view, - final int defaultImageResId, final int errorImageResId) { - return new ImageListener() { - @Override - public void onErrorResponse(VolleyError error) { - if (errorImageResId != 0) { - view.setImageResource(errorImageResId); - } - } - - @Override - public void onResponse(ImageContainer response, boolean isImmediate) { - if (response.getBitmap() != null) { - view.setImageBitmap(response.getBitmap()); - } else if (defaultImageResId != 0) { - view.setImageResource(defaultImageResId); - } - } - }; - } - - /** - * Interface for the response handlers on image requests. - * - * The call flow is this: - * 1. Upon being attached to a request, onResponse(response, true) will - * be invoked to reflect any cached data that was already available. If the - * data was available, response.getBitmap() will be non-null. - * - * 2. After a network response returns, only one of the following cases will happen: - * - onResponse(response, false) will be called if the image was loaded. - * or - * - onErrorResponse will be called if there was an error loading the image. - */ - public interface ImageListener extends ErrorListener { - /** - * Listens for non-error changes to the loading of the image request. - * - * @param response Holds all information pertaining to the request, as well - * as the bitmap (if it is loaded). - * @param isImmediate True if this was called during ImageLoader.get() variants. - * This can be used to differentiate between a cached image loading and a network - * image loading in order to, for example, run an animation to fade in network loaded - * images. - */ - public void onResponse(ImageContainer response, boolean isImmediate); - } - - /** - * Checks if the item is available in the cache. - * @param requestUrl The url of the remote image - * @param maxWidth The maximum width of the returned image. - * @param maxHeight The maximum height of the returned image. - * @return True if the item exists in cache, false otherwise. - */ - public boolean isCached(String requestUrl, int maxWidth, int maxHeight) { - throwIfNotOnMainThread(); - - String cacheKey = getCacheKey(requestUrl, maxWidth, maxHeight); - return mCache.getBitmap(cacheKey) != null; - } - - /** - * Returns an ImageContainer for the requested URL. - * - * The ImageContainer will contain either the specified default bitmap or the loaded bitmap. - * If the default was returned, the {@link ImageLoader} will be invoked when the - * request is fulfilled. - * - * @param requestUrl The URL of the image to be loaded. - * @param defaultImage Optional default image to return until the actual image is loaded. - */ - public ImageContainer get(String requestUrl, final ImageListener listener) { - return get(requestUrl, listener, 0, 0); - } - - /** - * Issues a bitmap request with the given URL if that image is not available - * in the cache, and returns a bitmap container that contains all of the data - * relating to the request (as well as the default image if the requested - * image is not available). - * @param requestUrl The url of the remote image - * @param imageListener The listener to call when the remote image is loaded - * @param maxWidth The maximum width of the returned image. - * @param maxHeight The maximum height of the returned image. - * @return A container object that contains all of the properties of the request, as well as - * the currently available image (default if remote is not loaded). - */ - public ImageContainer get(String requestUrl, ImageListener imageListener, - int maxWidth, int maxHeight) { - // only fulfill requests that were initiated from the main thread. - throwIfNotOnMainThread(); - - final String cacheKey = getCacheKey(requestUrl, maxWidth, maxHeight); - - // Try to look up the request in the cache of remote images. - Bitmap cachedBitmap = mCache.getBitmap(cacheKey); - if (cachedBitmap != null) { - // Return the cached bitmap. - ImageContainer container = new ImageContainer(cachedBitmap, requestUrl, null, null); - imageListener.onResponse(container, true); - return container; - } - - // The bitmap did not exist in the cache, fetch it! - ImageContainer imageContainer = - new ImageContainer(null, requestUrl, cacheKey, imageListener); - - // Update the caller to let them know that they should use the default bitmap. - imageListener.onResponse(imageContainer, true); - - // Check to see if a request is already in-flight. - BatchedImageRequest request = mInFlightRequests.get(cacheKey); - if (request != null) { - // If it is, add this request to the list of listeners. - request.addContainer(imageContainer); - return imageContainer; - } - - // The request is not already in flight. Send the new request to the network and - // track it. - Request newRequest = makeImageRequest(requestUrl, maxWidth, maxHeight, cacheKey); - - mRequestQueue.add(newRequest); - mInFlightRequests.put(cacheKey, - new BatchedImageRequest(newRequest, imageContainer)); - return imageContainer; - } - - protected Request makeImageRequest(String requestUrl, int maxWidth, int maxHeight, final String cacheKey) { - return new ImageRequest(requestUrl, new Listener() { - @Override - public void onResponse(Bitmap response) { - onGetImageSuccess(cacheKey, response); - } - }, maxWidth, maxHeight, - Config.RGB_565, new ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - onGetImageError(cacheKey, error); - } - }); - } - - /** - * Sets the amount of time to wait after the first response arrives before delivering all - * responses. Batching can be disabled entirely by passing in 0. - * @param newBatchedResponseDelayMs The time in milliseconds to wait. - */ - public void setBatchedResponseDelay(int newBatchedResponseDelayMs) { - mBatchResponseDelayMs = newBatchedResponseDelayMs; - } - - /** - * Handler for when an image was successfully loaded. - * @param cacheKey The cache key that is associated with the image request. - * @param response The bitmap that was returned from the network. - */ - protected void onGetImageSuccess(String cacheKey, Bitmap response) { - // cache the image that was fetched. - mCache.putBitmap(cacheKey, response); - - // remove the request from the list of in-flight requests. - BatchedImageRequest request = mInFlightRequests.remove(cacheKey); - - if (request != null) { - // Update the response bitmap. - request.mResponseBitmap = response; - - // Send the batched response - batchResponse(cacheKey, request); - } - } - - /** - * Handler for when an image failed to load. - * @param cacheKey The cache key that is associated with the image request. - */ - protected void onGetImageError(String cacheKey, VolleyError error) { - // Notify the requesters that something failed via a null result. - // Remove this request from the list of in-flight requests. - BatchedImageRequest request = mInFlightRequests.remove(cacheKey); - - if (request != null) { - // Set the error for this request - request.setError(error); - - // Send the batched response - batchResponse(cacheKey, request); - } - } - - /** - * Container object for all of the data surrounding an image request. - */ - public class ImageContainer { - /** - * The most relevant bitmap for the container. If the image was in cache, the - * Holder to use for the final bitmap (the one that pairs to the requested URL). - */ - private Bitmap mBitmap; - - private final ImageListener mListener; - - /** The cache key that was associated with the request */ - private final String mCacheKey; - - /** The request URL that was specified */ - private final String mRequestUrl; - - /** - * Constructs a BitmapContainer object. - * @param bitmap The final bitmap (if it exists). - * @param requestUrl The requested URL for this container. - * @param cacheKey The cache key that identifies the requested URL for this container. - */ - public ImageContainer(Bitmap bitmap, String requestUrl, - String cacheKey, ImageListener listener) { - mBitmap = bitmap; - mRequestUrl = requestUrl; - mCacheKey = cacheKey; - mListener = listener; - } - - /** - * Releases interest in the in-flight request (and cancels it if no one else is listening). - */ - public void cancelRequest() { - if (mListener == null) { - return; - } - - BatchedImageRequest request = mInFlightRequests.get(mCacheKey); - if (request != null) { - boolean canceled = request.removeContainerAndCancelIfNecessary(this); - if (canceled) { - mInFlightRequests.remove(mCacheKey); - } - } else { - // check to see if it is already batched for delivery. - request = mBatchedResponses.get(mCacheKey); - if (request != null) { - request.removeContainerAndCancelIfNecessary(this); - if (request.mContainers.size() == 0) { - mBatchedResponses.remove(mCacheKey); - } - } - } - } - - /** - * Returns the bitmap associated with the request URL if it has been loaded, null otherwise. - */ - public Bitmap getBitmap() { - return mBitmap; - } - - /** - * Returns the requested URL for this container. - */ - public String getRequestUrl() { - return mRequestUrl; - } - } - - /** - * Wrapper class used to map a Request to the set of active ImageContainer objects that are - * interested in its results. - */ - private class BatchedImageRequest { - /** The request being tracked */ - private final Request mRequest; - - /** The result of the request being tracked by this item */ - private Bitmap mResponseBitmap; - - /** Error if one occurred for this response */ - private VolleyError mError; - - /** List of all of the active ImageContainers that are interested in the request */ - private final LinkedList mContainers = new LinkedList(); - - /** - * Constructs a new BatchedImageRequest object - * @param request The request being tracked - * @param container The ImageContainer of the person who initiated the request. - */ - public BatchedImageRequest(Request request, ImageContainer container) { - mRequest = request; - mContainers.add(container); - } - - /** - * Set the error for this response - */ - public void setError(VolleyError error) { - mError = error; - } - - /** - * Get the error for this response - */ - public VolleyError getError() { - return mError; - } - - /** - * Adds another ImageContainer to the list of those interested in the results of - * the request. - */ - public void addContainer(ImageContainer container) { - mContainers.add(container); - } - - /** - * Detatches the bitmap container from the request and cancels the request if no one is - * left listening. - * @param container The container to remove from the list - * @return True if the request was canceled, false otherwise. - */ - public boolean removeContainerAndCancelIfNecessary(ImageContainer container) { - mContainers.remove(container); - if (mContainers.size() == 0) { - mRequest.cancel(); - return true; - } - return false; - } - } - - /** - * Starts the runnable for batched delivery of responses if it is not already started. - * @param cacheKey The cacheKey of the response being delivered. - * @param request The BatchedImageRequest to be delivered. - * @param error The volley error associated with the request (if applicable). - */ - private void batchResponse(String cacheKey, BatchedImageRequest request) { - mBatchedResponses.put(cacheKey, request); - // If we don't already have a batch delivery runnable in flight, make a new one. - // Note that this will be used to deliver responses to all callers in mBatchedResponses. - if (mRunnable == null) { - mRunnable = new Runnable() { - @Override - public void run() { - for (BatchedImageRequest bir : mBatchedResponses.values()) { - for (ImageContainer container : bir.mContainers) { - // If one of the callers in the batched request canceled the request - // after the response was received but before it was delivered, - // skip them. - if (container.mListener == null) { - continue; - } - if (bir.getError() == null) { - container.mBitmap = bir.mResponseBitmap; - container.mListener.onResponse(container, false); - } else { - container.mListener.onErrorResponse(bir.getError()); - } - } - } - mBatchedResponses.clear(); - mRunnable = null; - } - - }; - // Post the runnable. - mHandler.postDelayed(mRunnable, mBatchResponseDelayMs); - } - } - - private void throwIfNotOnMainThread() { - if (Looper.myLooper() != Looper.getMainLooper()) { - throw new IllegalStateException("ImageLoader must be invoked from the main thread."); - } - } - /** - * Creates a cache key for use with the L1 cache. - * @param url The URL of the request. - * @param maxWidth The max-width of the output. - * @param maxHeight The max-height of the output. - */ - private static String getCacheKey(String url, int maxWidth, int maxHeight) { - return new StringBuilder(url.length() + 12).append("#W").append(maxWidth) - .append("#H").append(maxHeight).append(url).toString(); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/ImageRequest.java b/Clover/app/src/main/java/com/android/volley/toolbox/ImageRequest.java deleted file mode 100644 index dd613e8dae..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/ImageRequest.java +++ /dev/null @@ -1,217 +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.volley.toolbox; - -import android.graphics.Bitmap; -import android.graphics.Bitmap.Config; -import android.graphics.BitmapFactory; - -import com.android.volley.DefaultRetryPolicy; -import com.android.volley.NetworkResponse; -import com.android.volley.ParseError; -import com.android.volley.Request; -import com.android.volley.Response; -import com.android.volley.VolleyLog; - -/** - * A canned request for getting an image at a given URL and calling - * back with a decoded Bitmap. - */ -public class ImageRequest extends Request { - /** Socket timeout in milliseconds for image requests */ - private static final int IMAGE_TIMEOUT_MS = 1000; - - /** Default number of retries for image requests */ - private static final int IMAGE_MAX_RETRIES = 2; - - /** Default backoff multiplier for image requests */ - private static final float IMAGE_BACKOFF_MULT = 2f; - - private final Response.Listener mListener; - private final Config mDecodeConfig; - private final int mMaxWidth; - private final int mMaxHeight; - - /** Decoding lock so that we don't decode more than one image at a time (to avoid OOM's) */ - private static final Object sDecodeLock = new Object(); - - /** - * Creates a new image request, decoding to a maximum specified width and - * height. If both width and height are zero, the image will be decoded to - * its natural size. If one of the two is nonzero, that dimension will be - * clamped and the other one will be set to preserve the image's aspect - * ratio. If both width and height are nonzero, the image will be decoded to - * be fit in the rectangle of dimensions width x height while keeping its - * aspect ratio. - * - * @param url URL of the image - * @param listener Listener to receive the decoded bitmap - * @param maxWidth Maximum width to decode this bitmap to, or zero for none - * @param maxHeight Maximum height to decode this bitmap to, or zero for - * none - * @param decodeConfig Format to decode the bitmap to - * @param errorListener Error listener, or null to ignore errors - */ - public ImageRequest(String url, Response.Listener listener, int maxWidth, int maxHeight, - Config decodeConfig, Response.ErrorListener errorListener) { - super(Method.GET, url, errorListener); - setRetryPolicy( - new DefaultRetryPolicy(IMAGE_TIMEOUT_MS, IMAGE_MAX_RETRIES, IMAGE_BACKOFF_MULT)); - mListener = listener; - mDecodeConfig = decodeConfig; - mMaxWidth = maxWidth; - mMaxHeight = maxHeight; - } - - @Override - public Priority getPriority() { - return Priority.LOW; - } - - /** - * Scales one side of a rectangle to fit aspect ratio. - * - * @param maxPrimary Maximum size of the primary dimension (i.e. width for - * max width), or zero to maintain aspect ratio with secondary - * dimension - * @param maxSecondary Maximum size of the secondary dimension, or zero to - * maintain aspect ratio with primary dimension - * @param actualPrimary Actual size of the primary dimension - * @param actualSecondary Actual size of the secondary dimension - */ - private static int getResizedDimension(int maxPrimary, int maxSecondary, int actualPrimary, - int actualSecondary) { - // If no dominant value at all, just return the actual. - if (maxPrimary == 0 && maxSecondary == 0) { - return actualPrimary; - } - - // If primary is unspecified, scale primary to match secondary's scaling ratio. - if (maxPrimary == 0) { - double ratio = (double) maxSecondary / (double) actualSecondary; - return (int) (actualPrimary * ratio); - } - - if (maxSecondary == 0) { - return maxPrimary; - } - - double ratio = (double) actualSecondary / (double) actualPrimary; - int resized = maxPrimary; - if (resized * ratio > maxSecondary) { - resized = (int) (maxSecondary / ratio); - } - return resized; - } - - @Override - protected Response parseNetworkResponse(NetworkResponse response) { - // Serialize all decode on a global lock to reduce concurrent heap usage. - synchronized (sDecodeLock) { - try { - return doParse(response); - } catch (OutOfMemoryError e) { - VolleyLog.e("Caught OOM for %d byte image, url=%s", response.data.length, getUrl()); - return Response.error(new ParseError(e)); - } - } - } - - /** - * The real guts of parseNetworkResponse. Broken out for readability. - */ - private Response doParse(NetworkResponse response) { - byte[] data = response.data; - BitmapFactory.Options decodeOptions = new BitmapFactory.Options(); - Bitmap bitmap = null; - if (mMaxWidth == 0 && mMaxHeight == 0) { - decodeOptions.inPreferredConfig = mDecodeConfig; - bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, decodeOptions); - } else { - // If we have to resize this image, first get the natural bounds. - decodeOptions.inJustDecodeBounds = true; - BitmapFactory.decodeByteArray(data, 0, data.length, decodeOptions); - int actualWidth = decodeOptions.outWidth; - int actualHeight = decodeOptions.outHeight; - - // Then compute the dimensions we would ideally like to decode to. - int desiredWidth = getResizedDimension(mMaxWidth, mMaxHeight, - actualWidth, actualHeight); - int desiredHeight = getResizedDimension(mMaxHeight, mMaxWidth, - actualHeight, actualWidth); - - // Decode to the nearest power of two scaling factor. - decodeOptions.inJustDecodeBounds = false; - // TODO(ficus): Do we need this or is it okay since API 8 doesn't support it? - // decodeOptions.inPreferQualityOverSpeed = PREFER_QUALITY_OVER_SPEED; - decodeOptions.inSampleSize = - findBestSampleSize(actualWidth, actualHeight, desiredWidth, desiredHeight); - Bitmap tempBitmap = - BitmapFactory.decodeByteArray(data, 0, data.length, decodeOptions); - - // Disallow dos by checking the size of the tempBitmap, otherwise the bitmap - // constructor will throw an IllegalArgumentException. - if (tempBitmap != null && - (tempBitmap.getWidth() == 0 || tempBitmap.getHeight() == 0)) { - bitmap = null; - tempBitmap.recycle(); - } else if (tempBitmap != null && (tempBitmap.getWidth() > desiredWidth || - tempBitmap.getHeight() > desiredHeight)) { - // If necessary, scale down to the maximal acceptable size. - bitmap = Bitmap.createScaledBitmap(tempBitmap, - desiredWidth, desiredHeight, true); - tempBitmap.recycle(); - } else { - bitmap = tempBitmap; - } - } - - if (bitmap == null) { - return Response.error(new ParseError(response)); - } else { - return Response.success(bitmap, HttpHeaderParser.parseCacheHeaders(response)); - } - } - - @Override - protected void deliverResponse(Bitmap response) { - mListener.onResponse(response); - } - - /** - * Returns the largest power-of-two divisor for use in downscaling a bitmap - * that will not result in the scaling past the desired dimensions. - * - * @param actualWidth Actual width of the bitmap - * @param actualHeight Actual height of the bitmap - * @param desiredWidth Desired width of the bitmap - * @param desiredHeight Desired height of the bitmap - */ - // Visible for testing. - static int findBestSampleSize( - int actualWidth, int actualHeight, int desiredWidth, int desiredHeight) { - double wr = (double) actualWidth / desiredWidth; - double hr = (double) actualHeight / desiredHeight; - double ratio = Math.min(wr, hr); - float n = 1.0f; - while ((n * 2) <= ratio) { - n *= 2; - } - - return (int) n; - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/JsonArrayRequest.java b/Clover/app/src/main/java/com/android/volley/toolbox/JsonArrayRequest.java deleted file mode 100644 index b1eae805f7..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/JsonArrayRequest.java +++ /dev/null @@ -1,58 +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.volley.toolbox; - -import com.android.volley.NetworkResponse; -import com.android.volley.ParseError; -import com.android.volley.Response; -import com.android.volley.Response.ErrorListener; -import com.android.volley.Response.Listener; - -import org.json.JSONArray; -import org.json.JSONException; - -import java.io.UnsupportedEncodingException; - -/** - * A request for retrieving a {@link JSONArray} response body at a given URL. - */ -public class JsonArrayRequest extends JsonRequest { - - /** - * Creates a new request. - * @param url URL to fetch the JSON from - * @param listener Listener to receive the JSON response - * @param errorListener Error listener, or null to ignore errors. - */ - public JsonArrayRequest(String url, Listener listener, ErrorListener errorListener) { - super(Method.GET, url, null, listener, errorListener); - } - - @Override - protected Response parseNetworkResponse(NetworkResponse response) { - try { - String jsonString = - new String(response.data, HttpHeaderParser.parseCharset(response.headers)); - return Response.success(new JSONArray(jsonString), - HttpHeaderParser.parseCacheHeaders(response)); - } catch (UnsupportedEncodingException e) { - return Response.error(new ParseError(e)); - } catch (JSONException je) { - return Response.error(new ParseError(je)); - } - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/JsonObjectRequest.java b/Clover/app/src/main/java/com/android/volley/toolbox/JsonObjectRequest.java deleted file mode 100644 index 74821cba7f..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/JsonObjectRequest.java +++ /dev/null @@ -1,76 +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.volley.toolbox; - -import com.android.volley.NetworkResponse; -import com.android.volley.ParseError; -import com.android.volley.Response; -import com.android.volley.Response.ErrorListener; -import com.android.volley.Response.Listener; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.UnsupportedEncodingException; - -/** - * A request for retrieving a {@link JSONObject} response body at a given URL, allowing for an - * optional {@link JSONObject} to be passed in as part of the request body. - */ -public class JsonObjectRequest extends JsonRequest { - - /** - * Creates a new request. - * @param method the HTTP method to use - * @param url URL to fetch the JSON from - * @param jsonRequest A {@link JSONObject} to post with the request. Null is allowed and - * indicates no parameters will be posted along with request. - * @param listener Listener to receive the JSON response - * @param errorListener Error listener, or null to ignore errors. - */ - public JsonObjectRequest(int method, String url, JSONObject jsonRequest, - Listener listener, ErrorListener errorListener) { - super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, - errorListener); - } - - /** - * Constructor which defaults to GET if jsonRequest is - * null, POST otherwise. - * - * @see #JsonObjectRequest(int, String, JSONObject, Listener, ErrorListener) - */ - public JsonObjectRequest(String url, JSONObject jsonRequest, Listener listener, - ErrorListener errorListener) { - this(jsonRequest == null ? Method.GET : Method.POST, url, jsonRequest, - listener, errorListener); - } - - @Override - protected Response parseNetworkResponse(NetworkResponse response) { - try { - String jsonString = - new String(response.data, HttpHeaderParser.parseCharset(response.headers)); - return Response.success(new JSONObject(jsonString), - HttpHeaderParser.parseCacheHeaders(response)); - } catch (UnsupportedEncodingException e) { - return Response.error(new ParseError(e)); - } catch (JSONException je) { - return Response.error(new ParseError(je)); - } - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/JsonRequest.java b/Clover/app/src/main/java/com/android/volley/toolbox/JsonRequest.java deleted file mode 100644 index f11ac14e43..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/JsonRequest.java +++ /dev/null @@ -1,102 +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.volley.toolbox; - -import com.android.volley.NetworkResponse; -import com.android.volley.Request; -import com.android.volley.Response; -import com.android.volley.Response.ErrorListener; -import com.android.volley.Response.Listener; -import com.android.volley.VolleyLog; - -import java.io.UnsupportedEncodingException; - -/** - * A request for retrieving a T type response body at a given URL that also - * optionally sends along a JSON body in the request specified. - * - * @param JSON type of response expected - */ -public abstract class JsonRequest extends Request { - /** Charset for request. */ - private static final String PROTOCOL_CHARSET = "utf-8"; - - /** Content type for request. */ - private static final String PROTOCOL_CONTENT_TYPE = - String.format("application/json; charset=%s", PROTOCOL_CHARSET); - - private final Listener mListener; - private final String mRequestBody; - - /** - * Deprecated constructor for a JsonRequest which defaults to GET unless {@link #getPostBody()} - * or {@link #getPostParams()} is overridden (which defaults to POST). - * - * @deprecated Use {@link #JsonRequest(int, String, String, Listener, ErrorListener)}. - */ - public JsonRequest(String url, String requestBody, Listener listener, - ErrorListener errorListener) { - this(Method.DEPRECATED_GET_OR_POST, url, requestBody, listener, errorListener); - } - - public JsonRequest(int method, String url, String requestBody, Listener listener, - ErrorListener errorListener) { - super(method, url, errorListener); - mListener = listener; - mRequestBody = requestBody; - } - - @Override - protected void deliverResponse(T response) { - mListener.onResponse(response); - } - - @Override - abstract protected Response parseNetworkResponse(NetworkResponse response); - - /** - * @deprecated Use {@link #getBodyContentType()}. - */ - @Override - public String getPostBodyContentType() { - return getBodyContentType(); - } - - /** - * @deprecated Use {@link #getBody()}. - */ - @Override - public byte[] getPostBody() { - return getBody(); - } - - @Override - public String getBodyContentType() { - return PROTOCOL_CONTENT_TYPE; - } - - @Override - public byte[] getBody() { - try { - return mRequestBody == null ? null : mRequestBody.getBytes(PROTOCOL_CHARSET); - } catch (UnsupportedEncodingException uee) { - VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", - mRequestBody, PROTOCOL_CHARSET); - return null; - } - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/NetworkImageView.java b/Clover/app/src/main/java/com/android/volley/toolbox/NetworkImageView.java deleted file mode 100644 index 692e988583..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/NetworkImageView.java +++ /dev/null @@ -1,219 +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.volley.toolbox; - -import android.content.Context; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.view.ViewGroup.LayoutParams; -import android.widget.ImageView; - -import com.android.volley.VolleyError; -import com.android.volley.toolbox.ImageLoader.ImageContainer; -import com.android.volley.toolbox.ImageLoader.ImageListener; - -/** - * Handles fetching an image from a URL as well as the life-cycle of the - * associated request. - */ -public class NetworkImageView extends ImageView { - /** The URL of the network image to load */ - private String mUrl; - - /** - * Resource ID of the image to be used as a placeholder until the network image is loaded. - */ - private int mDefaultImageId; - - /** - * Resource ID of the image to be used if the network response fails. - */ - private int mErrorImageId; - - /** Local copy of the ImageLoader. */ - private ImageLoader mImageLoader; - - /** Current ImageContainer. (either in-flight or finished) */ - private ImageContainer mImageContainer; - - public NetworkImageView(Context context) { - this(context, null); - } - - public NetworkImageView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public NetworkImageView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - /** - * Sets URL of the image that should be loaded into this view. Note that calling this will - * immediately either set the cached image (if available) or the default image specified by - * {@link NetworkImageView#setDefaultImageResId(int)} on the view. - * - * NOTE: If applicable, {@link NetworkImageView#setDefaultImageResId(int)} and - * {@link NetworkImageView#setErrorImageResId(int)} should be called prior to calling - * this function. - * - * @param url The URL that should be loaded into this ImageView. - * @param imageLoader ImageLoader that will be used to make the request. - */ - public void setImageUrl(String url, ImageLoader imageLoader) { - mUrl = url; - mImageLoader = imageLoader; - // The URL has potentially changed. See if we need to load it. - loadImageIfNecessary(false); - } - - /** - * Sets the default image resource ID to be used for this view until the attempt to load it - * completes. - */ - public void setDefaultImageResId(int defaultImage) { - mDefaultImageId = defaultImage; - } - - /** - * Sets the error image resource ID to be used for this view in the event that the image - * requested fails to load. - */ - public void setErrorImageResId(int errorImage) { - mErrorImageId = errorImage; - } - - /** - * Loads the image for the view if it isn't already loaded. - * @param isInLayoutPass True if this was invoked from a layout pass, false otherwise. - */ - void loadImageIfNecessary(final boolean isInLayoutPass) { - int width = getWidth(); - int height = getHeight(); - - boolean wrapWidth = false, wrapHeight = false; - if (getLayoutParams() != null) { - wrapWidth = getLayoutParams().width == LayoutParams.WRAP_CONTENT; - wrapHeight = getLayoutParams().height == LayoutParams.WRAP_CONTENT; - } - - // if the view's bounds aren't known yet, and this is not a wrap-content/wrap-content - // view, hold off on loading the image. - boolean isFullyWrapContent = wrapWidth && wrapHeight; - if (width == 0 && height == 0 && !isFullyWrapContent) { - return; - } - - // if the URL to be loaded in this view is empty, cancel any old requests and clear the - // currently loaded image. - if (TextUtils.isEmpty(mUrl)) { - if (mImageContainer != null) { - mImageContainer.cancelRequest(); - mImageContainer = null; - } - setDefaultImageOrNull(); - return; - } - - // if there was an old request in this view, check if it needs to be canceled. - if (mImageContainer != null && mImageContainer.getRequestUrl() != null) { - if (mImageContainer.getRequestUrl().equals(mUrl)) { - // if the request is from the same URL, return. - return; - } else { - // if there is a pre-existing request, cancel it if it's fetching a different URL. - mImageContainer.cancelRequest(); - setDefaultImageOrNull(); - } - } - - // Calculate the max image width / height to use while ignoring WRAP_CONTENT dimens. - int maxWidth = wrapWidth ? 0 : width; - int maxHeight = wrapHeight ? 0 : height; - - // The pre-existing content of this view didn't match the current URL. Load the new image - // from the network. - ImageContainer newContainer = mImageLoader.get(mUrl, - new ImageListener() { - @Override - public void onErrorResponse(VolleyError error) { - if (mErrorImageId != 0) { - setImageResource(mErrorImageId); - } - } - - @Override - public void onResponse(final ImageContainer response, boolean isImmediate) { - // If this was an immediate response that was delivered inside of a layout - // pass do not set the image immediately as it will trigger a requestLayout - // inside of a layout. Instead, defer setting the image by posting back to - // the main thread. - if (isImmediate && isInLayoutPass) { - post(new Runnable() { - @Override - public void run() { - onResponse(response, false); - } - }); - return; - } - - if (response.getBitmap() != null) { - setImageBitmap(response.getBitmap()); - } else if (mDefaultImageId != 0) { - setImageResource(mDefaultImageId); - } - } - }, maxWidth, maxHeight); - - // update the ImageContainer to be the new bitmap container. - mImageContainer = newContainer; - } - - private void setDefaultImageOrNull() { - if(mDefaultImageId != 0) { - setImageResource(mDefaultImageId); - } - else { - setImageBitmap(null); - } - } - - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - super.onLayout(changed, left, top, right, bottom); - loadImageIfNecessary(true); - } - - @Override - protected void onDetachedFromWindow() { - if (mImageContainer != null) { - // If the view was bound to an image request, cancel it and clear - // out the image from the view. - mImageContainer.cancelRequest(); - setImageBitmap(null); - // also clear out the container so we can reload the image if necessary. - mImageContainer = null; - } - super.onDetachedFromWindow(); - } - - @Override - protected void drawableStateChanged() { - super.drawableStateChanged(); - invalidate(); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/NoCache.java b/Clover/app/src/main/java/com/android/volley/toolbox/NoCache.java deleted file mode 100644 index ab6625435c..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/NoCache.java +++ /dev/null @@ -1,49 +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.volley.toolbox; - -import com.android.volley.Cache; - -/** - * A cache that doesn't. - */ -public class NoCache implements Cache { - @Override - public void clear() { - } - - @Override - public Entry get(String key) { - return null; - } - - @Override - public void put(String key, Entry entry) { - } - - @Override - public void invalidate(String key, boolean fullExpire) { - } - - @Override - public void remove(String key) { - } - - @Override - public void initialize() { - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/PoolingByteArrayOutputStream.java b/Clover/app/src/main/java/com/android/volley/toolbox/PoolingByteArrayOutputStream.java deleted file mode 100644 index d082e84a2b..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/PoolingByteArrayOutputStream.java +++ /dev/null @@ -1,94 +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.volley.toolbox; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -/** - * A variation of {@link java.io.ByteArrayOutputStream} that uses a pool of byte[] buffers instead - * of always allocating them fresh, saving on heap churn. - */ -public class PoolingByteArrayOutputStream extends ByteArrayOutputStream { - /** - * If the {@link #PoolingByteArrayOutputStream(ByteArrayPool)} constructor is called, this is - * the default size to which the underlying byte array is initialized. - */ - private static final int DEFAULT_SIZE = 256; - - private final ByteArrayPool mPool; - - /** - * Constructs a new PoolingByteArrayOutputStream with a default size. If more bytes are written - * to this instance, the underlying byte array will expand. - */ - public PoolingByteArrayOutputStream(ByteArrayPool pool) { - this(pool, DEFAULT_SIZE); - } - - /** - * Constructs a new {@code ByteArrayOutputStream} with a default size of {@code size} bytes. If - * more than {@code size} bytes are written to this instance, the underlying byte array will - * expand. - * - * @param size initial size for the underlying byte array. The value will be pinned to a default - * minimum size. - */ - public PoolingByteArrayOutputStream(ByteArrayPool pool, int size) { - mPool = pool; - buf = mPool.getBuf(Math.max(size, DEFAULT_SIZE)); - } - - @Override - public void close() throws IOException { - mPool.returnBuf(buf); - buf = null; - super.close(); - } - - @Override - public void finalize() throws Throwable { - mPool.returnBuf(buf); - super.finalize(); - } - - /** - * Ensures there is enough space in the buffer for the given number of additional bytes. - */ - private void expand(int i) { - /* Can the buffer handle @i more bytes, if not expand it */ - if (count + i <= buf.length) { - return; - } - byte[] newbuf = mPool.getBuf((count + i) * 2); - System.arraycopy(buf, 0, newbuf, 0, count); - mPool.returnBuf(buf); - buf = newbuf; - } - - @Override - public synchronized void write(byte[] buffer, int offset, int len) { - expand(len); - super.write(buffer, offset, len); - } - - @Override - public synchronized void write(int oneByte) { - expand(1); - super.write(oneByte); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/RequestFuture.java b/Clover/app/src/main/java/com/android/volley/toolbox/RequestFuture.java deleted file mode 100644 index 173c44ccbc..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/RequestFuture.java +++ /dev/null @@ -1,153 +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.volley.toolbox; - -import com.android.volley.Request; -import com.android.volley.Response; -import com.android.volley.VolleyError; - -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -/** - * A Future that represents a Volley request. - * - * Used by providing as your response and error listeners. For example: - *
- * RequestFuture<JSONObject> future = RequestFuture.newFuture();
- * MyRequest request = new MyRequest(URL, future, future);
- *
- * // If you want to be able to cancel the request:
- * future.setRequest(requestQueue.add(request));
- *
- * // Otherwise:
- * requestQueue.add(request);
- *
- * try {
- *   JSONObject response = future.get();
- *   // do something with response
- * } catch (InterruptedException e) {
- *   // handle the error
- * } catch (ExecutionException e) {
- *   // handle the error
- * }
- * 
- * - * @param The type of parsed response this future expects. - */ -public class RequestFuture implements Future, Response.Listener, - Response.ErrorListener { - private Request mRequest; - private boolean mResultReceived = false; - private T mResult; - private VolleyError mException; - - public static RequestFuture newFuture() { - return new RequestFuture(); - } - - private RequestFuture() {} - - public void setRequest(Request request) { - mRequest = request; - } - - @Override - public synchronized boolean cancel(boolean mayInterruptIfRunning) { - if (mRequest == null) { - return false; - } - - if (!isDone()) { - mRequest.cancel(); - return true; - } else { - return false; - } - } - - @Override - public T get() throws InterruptedException, ExecutionException { - try { - return doGet(null); - } catch (TimeoutException e) { - throw new AssertionError(e); - } - } - - @Override - public T get(long timeout, TimeUnit unit) - throws InterruptedException, ExecutionException, TimeoutException { - return doGet(TimeUnit.MILLISECONDS.convert(timeout, unit)); - } - - private synchronized T doGet(Long timeoutMs) - throws InterruptedException, ExecutionException, TimeoutException { - if (mException != null) { - throw new ExecutionException(mException); - } - - if (mResultReceived) { - return mResult; - } - - if (timeoutMs == null) { - wait(0); - } else if (timeoutMs > 0) { - wait(timeoutMs); - } - - if (mException != null) { - throw new ExecutionException(mException); - } - - if (!mResultReceived) { - throw new TimeoutException(); - } - - return mResult; - } - - @Override - public boolean isCancelled() { - if (mRequest == null) { - return false; - } - return mRequest.isCanceled(); - } - - @Override - public synchronized boolean isDone() { - return mResultReceived || mException != null || isCancelled(); - } - - @Override - public synchronized void onResponse(T response) { - mResultReceived = true; - mResult = response; - notifyAll(); - } - - @Override - public synchronized void onErrorResponse(VolleyError error) { - mException = error; - notifyAll(); - } -} - diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/StringRequest.java b/Clover/app/src/main/java/com/android/volley/toolbox/StringRequest.java deleted file mode 100644 index 6b3dfcf8ab..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/StringRequest.java +++ /dev/null @@ -1,73 +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.volley.toolbox; - -import com.android.volley.NetworkResponse; -import com.android.volley.Request; -import com.android.volley.Response; -import com.android.volley.Response.ErrorListener; -import com.android.volley.Response.Listener; - -import java.io.UnsupportedEncodingException; - -/** - * A canned request for retrieving the response body at a given URL as a String. - */ -public class StringRequest extends Request { - private final Listener mListener; - - /** - * Creates a new request with the given method. - * - * @param method the request {@link Method} to use - * @param url URL to fetch the string at - * @param listener Listener to receive the String response - * @param errorListener Error listener, or null to ignore errors - */ - public StringRequest(int method, String url, Listener listener, - ErrorListener errorListener) { - super(method, url, errorListener); - mListener = listener; - } - - /** - * Creates a new GET request. - * - * @param url URL to fetch the string at - * @param listener Listener to receive the String response - * @param errorListener Error listener, or null to ignore errors - */ - public StringRequest(String url, Listener listener, ErrorListener errorListener) { - this(Method.GET, url, listener, errorListener); - } - - @Override - protected void deliverResponse(String response) { - mListener.onResponse(response); - } - - @Override - protected Response parseNetworkResponse(NetworkResponse response) { - String parsed; - try { - parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); - } catch (UnsupportedEncodingException e) { - parsed = new String(response.data); - } - return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); - } -} diff --git a/Clover/app/src/main/java/com/android/volley/toolbox/Volley.java b/Clover/app/src/main/java/com/android/volley/toolbox/Volley.java deleted file mode 100644 index b840c6d1ad..0000000000 --- a/Clover/app/src/main/java/com/android/volley/toolbox/Volley.java +++ /dev/null @@ -1,58 +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.volley.toolbox; - -import android.content.Context; -import android.net.http.AndroidHttpClient; -import android.os.Build; - -import com.android.volley.Network; -import com.android.volley.RequestQueue; -import com.android.volley.compat.NoSSLv3Compat; - -import java.io.File; - -public class Volley { - - /** Default on-disk cache directory. */ - public static final String DEFAULT_CACHE_DIR = "volley"; - - public static RequestQueue newRequestQueue(Context context, String userAgent, HttpStack stack, File cacheDir, int diskCacheSize) { - if (stack == null) { - if (Build.VERSION.SDK_INT >= 9) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { - // Use a socket factory that removes sslv3 - stack = new HurlStack(userAgent, null, new NoSSLv3Compat.NoSSLv3Factory()); - } else { - stack = new HurlStack(userAgent); - } - } else { - // Prior to Gingerbread, HttpUrlConnection was unreliable. - // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html - stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); - } - } - - Network network = new BasicNetwork(stack); - - DiskBasedCache diskCache = diskCacheSize < 0 ? new DiskBasedCache(cacheDir) : new DiskBasedCache(cacheDir, diskCacheSize); - RequestQueue queue = new RequestQueue(diskCache, network); - queue.start(); - - return queue; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/Chan.java b/Clover/app/src/main/java/org/floens/chan/Chan.java deleted file mode 100644 index 792892fbd6..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/Chan.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.Application; -import android.content.Context; -import android.content.pm.PackageManager; -import android.os.Build; -import android.os.Bundle; -import android.os.StrictMode; - -import org.codejargon.feather.Feather; -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.di.AppModule; -import org.floens.chan.core.di.NetModule; -import org.floens.chan.core.di.UserAgentProvider; -import org.floens.chan.core.manager.BoardManager; -import org.floens.chan.core.site.SiteService; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.LocaleUtils; -import org.floens.chan.utils.Logger; -import org.floens.chan.utils.Time; - -import java.util.Locale; - -import javax.inject.Inject; - -import de.greenrobot.event.EventBus; - -@SuppressLint("Registered") // extended by ChanApplication, which is registered in the manifest. -public class Chan extends Application implements UserAgentProvider, Application.ActivityLifecycleCallbacks { - private static final String TAG = "ChanApplication"; - - @SuppressLint("StaticFieldLeak") - private static Chan instance; - - private String userAgent; - private int activityForegroundCounter = 0; - - @Inject - DatabaseManager databaseManager; - - @Inject - SiteService siteService; - - @Inject - BoardManager boardManager; - - private Feather feather; - - public Chan() { - instance = this; - } - - public static Chan getInstance() { - return instance; - } - - public static Feather injector() { - return instance.feather; - } - - public static T inject(T instance) { - Chan.instance.feather.injectFields(instance); - return instance; - } - - @Override - protected void attachBaseContext(Context base) { - super.attachBaseContext(base); - - AndroidUtils.init(this); - } - - public void initialize() { - LocaleUtils.overrideLocaleToEnglishIfNeeded(this); - - final long startTime = Time.startTiming(); - - registerActivityLifecycleCallbacks(this); - - userAgent = createUserAgent(); - - initializeGraph(); - - siteService.initialize(); - boardManager.initialize(); - databaseManager.initializeAndTrim(); - - Time.endTiming("Initializing application", startTime); - - // Start watching for slow disk reads and writes after the heavy initializing is done - if (ChanBuild.DEVELOPER_MODE) { - StrictMode.setThreadPolicy( - new StrictMode.ThreadPolicy.Builder() - .detectCustomSlowCalls() - .detectNetwork() - .detectDiskReads() - .detectDiskWrites() - .penaltyLog() - .build()); - StrictMode.setVmPolicy( - new StrictMode.VmPolicy.Builder() - .detectAll() - .penaltyLog() - .build()); - - //noinspection PointlessBooleanExpression - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { -// WebView.setWebContentsDebuggingEnabled(true); - } - } - } - - private void initializeGraph() { - feather = Feather.with( - new AppModule(this, this), - new NetModule() - ); - feather.injectFields(this); - } - - @Override - public String getUserAgent() { - return userAgent; - } - - private void activityEnteredForeground() { - boolean lastForeground = getApplicationInForeground(); - - activityForegroundCounter++; - - if (getApplicationInForeground() != lastForeground) { - EventBus.getDefault().post(new ForegroundChangedMessage(getApplicationInForeground())); - } - } - - private void activityEnteredBackground() { - boolean lastForeground = getApplicationInForeground(); - - activityForegroundCounter--; - if (activityForegroundCounter < 0) { - Logger.wtf(TAG, "activityForegroundCounter below 0"); - } - - if (getApplicationInForeground() != lastForeground) { - EventBus.getDefault().post(new ForegroundChangedMessage(getApplicationInForeground())); - } - } - - public boolean getApplicationInForeground() { - return activityForegroundCounter > 0; - } - - public static class ForegroundChangedMessage { - public boolean inForeground; - - public ForegroundChangedMessage(boolean inForeground) { - this.inForeground = inForeground; - } - } - - private String createUserAgent() { - // User agent is / - String version = "Unknown"; - try { - version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; - } catch (PackageManager.NameNotFoundException e) { - Logger.e(TAG, "Error getting app version", e); - } - version = version.toLowerCase(Locale.ENGLISH).replace(" ", "_"); - return getString(R.string.app_name) + "/" + version; - } - - @Override - public void onActivityCreated(Activity activity, Bundle savedInstanceState) { - } - - @Override - public void onActivityStarted(Activity activity) { - activityEnteredForeground(); - } - - @Override - public void onActivityResumed(Activity activity) { - } - - @Override - public void onActivityPaused(Activity activity) { - } - - @Override - public void onActivityStopped(Activity activity) { - activityEnteredBackground(); - } - - @Override - public void onActivitySaveInstanceState(Activity activity, Bundle outState) { - } - - @Override - public void onActivityDestroyed(Activity activity) { - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/controller/Controller.java b/Clover/app/src/main/java/org/floens/chan/controller/Controller.java deleted file mode 100644 index a119e7fcb7..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/controller/Controller.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.controller; - -import android.content.Context; -import android.content.res.Configuration; -import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import org.floens.chan.controller.transition.FadeInTransition; -import org.floens.chan.controller.transition.FadeOutTransition; -import org.floens.chan.ui.activity.StartActivity; -import org.floens.chan.ui.controller.DoubleNavigationController; -import org.floens.chan.ui.toolbar.NavigationItem; -import org.floens.chan.ui.toolbar.Toolbar; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.Logger; - -import java.util.ArrayList; -import java.util.List; - -public abstract class Controller { - private static final boolean LOG_STATES = false; - - public Context context; - public ViewGroup view; - - public NavigationItem navigation = new NavigationItem(); - - public Controller parentController; - - public List childControllers = new ArrayList<>(); - - // NavigationControllers members - public Controller previousSiblingController; - public NavigationController navigationController; - - public DoubleNavigationController doubleNavigationController; - - /** - * Controller that this controller is presented by. - */ - public Controller presentedByController; - - /** - * Controller that this controller is presenting. - */ - public Controller presentingThisController; - - public boolean alive = false; - public boolean shown = false; - - public Controller(Context context) { - this.context = context; - } - - public void onCreate() { - alive = true; - if (LOG_STATES) { - Logger.test(getClass().getSimpleName() + " onCreate"); - } - } - - public void onShow() { - shown = true; - if (LOG_STATES) { - Logger.test(getClass().getSimpleName() + " onShow"); - } - - view.setVisibility(View.VISIBLE); - - for (Controller controller : childControllers) { - if (!controller.shown) { - controller.onShow(); - } - } - } - - public void onHide() { - shown = false; - if (LOG_STATES) { - Logger.test(getClass().getSimpleName() + " onHide"); - } - - view.setVisibility(View.GONE); - - for (Controller controller : childControllers) { - if (controller.shown) { - controller.onHide(); - } - } - } - - public void onDestroy() { - alive = false; - if (LOG_STATES) { - Logger.test(getClass().getSimpleName() + " onDestroy"); - } - - while (childControllers.size() > 0) { - removeChildController(childControllers.get(0)); - } - - if (AndroidUtils.removeFromParentView(view)) { - if (LOG_STATES) { - Logger.test(getClass().getSimpleName() + " view removed onDestroy"); - } - } - } - - public void addChildController(Controller controller) { - childControllers.add(controller); - controller.parentController = this; - if (doubleNavigationController != null) { - controller.doubleNavigationController = doubleNavigationController; - } - if (navigationController != null) { - controller.navigationController = navigationController; - } - controller.onCreate(); - } - - public boolean removeChildController(Controller controller) { - controller.onDestroy(); - return childControllers.remove(controller); - } - - public void attachToParentView(ViewGroup parentView) { - if (view.getParent() != null) { - if (LOG_STATES) { - Logger.test(getClass().getSimpleName() + " view removed"); - } - AndroidUtils.removeFromParentView(view); - } - - if (parentView != null) { - if (LOG_STATES) { - Logger.test(getClass().getSimpleName() + " view attached"); - } - attachToView(parentView, true); - } - } - - public void onConfigurationChanged(Configuration newConfig) { - for (Controller controller : childControllers) { - controller.onConfigurationChanged(newConfig); - } - } - - public boolean dispatchKeyEvent(KeyEvent event) { - for (int i = childControllers.size() - 1; i >= 0; i--) { - Controller controller = childControllers.get(i); - if (controller.dispatchKeyEvent(event)) { - return true; - } - } - - return false; - } - - public boolean onBack() { - for (int i = childControllers.size() - 1; i >= 0; i--) { - Controller controller = childControllers.get(i); - if (controller.onBack()) { - return true; - } - } - - return false; - } - - public void presentController(Controller controller) { - presentController(controller, true); - } - - public void presentController(Controller controller, boolean animated) { - ViewGroup contentView = ((StartActivity) context).getContentView(); - presentingThisController = controller; - controller.presentedByController = this; - - controller.onCreate(); - controller.attachToView(contentView, true); - controller.onShow(); - - if (animated) { - ControllerTransition transition = new FadeInTransition(); - transition.to = controller; - transition.perform(); - } - - ((StartActivity) context).addController(controller); - } - - public void stopPresenting() { - stopPresenting(true); - } - - public void stopPresenting(boolean animated) { - if (animated) { - ControllerTransition transition = new FadeOutTransition(); - transition.from = this; - transition.setCallback(new ControllerTransition.Callback() { - @Override - public void onControllerTransitionCompleted(ControllerTransition transition) { - finishPresenting(); - } - }); - transition.perform(); - } else { - finishPresenting(); - } - - ((StartActivity) context).removeController(this); - presentedByController.presentingThisController = null; - } - - private void finishPresenting() { - onHide(); - onDestroy(); - } - - public Controller getTop() { - if (childControllers.size() > 0) { - return childControllers.get(childControllers.size() - 1); - } else { - return null; - } - } - - public ViewGroup inflateRes(int resId) { - return (ViewGroup) LayoutInflater.from(context).inflate(resId, null); - } - - public Toolbar getToolbar() { - return null; - } - - private void attachToView(ViewGroup parentView, boolean over) { - ViewGroup.LayoutParams params = view.getLayoutParams(); - - if (params == null) { - params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); - } else { - params.width = ViewGroup.LayoutParams.MATCH_PARENT; - params.height = ViewGroup.LayoutParams.MATCH_PARENT; - } - - view.setLayoutParams(params); - - if (over) { - parentView.addView(view, view.getLayoutParams()); - } else { - parentView.addView(view, 0, view.getLayoutParams()); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/controller/transition/FadeInTransition.java b/Clover/app/src/main/java/org/floens/chan/controller/transition/FadeInTransition.java deleted file mode 100644 index d49c3106b7..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/controller/transition/FadeInTransition.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.controller.transition; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; -import android.view.View; -import android.view.animation.AccelerateDecelerateInterpolator; - -import org.floens.chan.controller.ControllerTransition; - -public class FadeInTransition extends ControllerTransition { - @Override - public void perform() { - Animator toAlpha = ObjectAnimator.ofFloat(to.view, View.ALPHA, 0f, 1f); - toAlpha.setDuration(200); - toAlpha.setInterpolator(new AccelerateDecelerateInterpolator()); - - toAlpha.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - onCompleted(); - } - }); - - AnimatorSet set = new AnimatorSet(); - set.playTogether(toAlpha); - set.start(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/controller/transition/FadeOutTransition.java b/Clover/app/src/main/java/org/floens/chan/controller/transition/FadeOutTransition.java deleted file mode 100644 index df64b68b89..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/controller/transition/FadeOutTransition.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.controller.transition; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; -import android.view.View; -import android.view.animation.AccelerateDecelerateInterpolator; - -import org.floens.chan.controller.ControllerTransition; - -public class FadeOutTransition extends ControllerTransition { - @Override - public void perform() { - Animator toAlpha = ObjectAnimator.ofFloat(from.view, View.ALPHA, 1f, 0f); - toAlpha.setDuration(200); - toAlpha.setInterpolator(new AccelerateDecelerateInterpolator()); - - toAlpha.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - onCompleted(); - } - }); - - AnimatorSet set = new AnimatorSet(); - set.playTogether(toAlpha); - set.start(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/controller/transition/PopControllerTransition.java b/Clover/app/src/main/java/org/floens/chan/controller/transition/PopControllerTransition.java deleted file mode 100644 index 285efe13bd..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/controller/transition/PopControllerTransition.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.controller.transition; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; -import android.view.View; -import android.view.animation.AccelerateInterpolator; -import android.view.animation.DecelerateInterpolator; - -import org.floens.chan.controller.ControllerTransition; - -public class PopControllerTransition extends ControllerTransition { - public PopControllerTransition() { - viewOver = false; - } - - @Override - public void perform() { - Animator toAlpha = ObjectAnimator.ofFloat(to.view, View.ALPHA, to.view.getAlpha(), 1f); - toAlpha.setInterpolator(new DecelerateInterpolator()); // new PathInterpolator(0f, 0f, 0.2f, 1f) - toAlpha.setDuration(250); - - Animator fromY = ObjectAnimator.ofFloat(from.view, View.TRANSLATION_Y, 0f, from.view.getHeight() * 0.05f); - fromY.setInterpolator(new AccelerateInterpolator(2.5f)); - fromY.setDuration(250); - - fromY.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - onCompleted(); - } - }); - - Animator fromAlpha = ObjectAnimator.ofFloat(from.view, View.ALPHA, from.view.getAlpha(), 0f); - fromAlpha.setInterpolator(new AccelerateInterpolator(2f)); - fromAlpha.setStartDelay(100); - fromAlpha.setDuration(150); - - AnimatorSet set = new AnimatorSet(); - set.playTogether(/*toAlpha, */fromY, fromAlpha); - set.start(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/controller/transition/PushControllerTransition.java b/Clover/app/src/main/java/org/floens/chan/controller/transition/PushControllerTransition.java deleted file mode 100644 index eb1a75c295..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/controller/transition/PushControllerTransition.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.controller.transition; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; -import android.view.View; -import android.view.animation.DecelerateInterpolator; - -import org.floens.chan.controller.ControllerTransition; -import org.floens.chan.utils.AndroidUtils; - -public class PushControllerTransition extends ControllerTransition { - @Override - public void perform() { - AndroidUtils.waitForMeasure(to.view, new AndroidUtils.OnMeasuredCallback() { - @Override - public boolean onMeasured(View view) { - /*Animator fromAlpha = ObjectAnimator.ofFloat(from.view, View.ALPHA, 1f, 0.7f); - fromAlpha.setDuration(217); - fromAlpha.setInterpolator(new AccelerateDecelerateInterpolator()); // new PathInterpolator(0.4f, 0f, 0.2f, 1f)*/ - - Animator toAlpha = ObjectAnimator.ofFloat(to.view, View.ALPHA, 0f, 1f); - toAlpha.setDuration(200); - toAlpha.setInterpolator(new DecelerateInterpolator(2f)); - - Animator toY = ObjectAnimator.ofFloat(to.view, View.TRANSLATION_Y, to.view.getHeight() * 0.08f, 0f); - toY.setDuration(350); - toY.setInterpolator(new DecelerateInterpolator(2.5f)); - - toY.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - onCompleted(); - } - }); - - AnimatorSet set = new AnimatorSet(); - set.playTogether(/*fromAlpha, */toAlpha, toY); - set.start(); - return true; - } - }); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/controller/ui/NavigationControllerContainerLayout.java b/Clover/app/src/main/java/org/floens/chan/controller/ui/NavigationControllerContainerLayout.java deleted file mode 100644 index 749839e397..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/controller/ui/NavigationControllerContainerLayout.java +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.controller.ui; - -import android.content.Context; -import android.content.res.Configuration; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; -import android.support.v4.view.ViewCompat; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.VelocityTracker; -import android.view.ViewConfiguration; -import android.widget.FrameLayout; -import android.widget.Scroller; - -import org.floens.chan.controller.Controller; -import org.floens.chan.controller.NavigationController; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public class NavigationControllerContainerLayout extends FrameLayout { - // The shadow starts at this alpha and goes up to 1f - public static final float SHADOW_MIN_ALPHA = 0.5f; - - - private NavigationController navigationController; - - private int slopPixels; - private int minimalMovedPixels; - private int flingPixels; - private int maxFlingPixels; - - private boolean swipeEnabled = true; - - // The event used in onInterceptTouchEvent to track the initial down event - private MotionEvent interceptedEvent; - - // The tracking is blocked when the user has moved too much in the y direction - private boolean blockTracking = false; - - // Is the top controller being tracked and moved - private boolean tracking = false; - - // The controller being tracked, corresponds with tracking - private Controller trackingController; - - // The controller behind the tracking controller - private Controller behindTrackingController; - - // The position of the touch after tracking has started, used to calculate the total offset from - private int trackStartPosition; - - // Tracks the motion when tracking - private VelocityTracker velocityTracker; - - // Used to fling and scroll the tracking view - private Scroller scroller; - - // Indicate if the controller should be popped after the animation ends - private boolean finishTransitionAfterAnimation = false; - - // Paint, draw rect and position for drawing the shadow - // The shadow is only drawn when tracking is true - private Paint shadowPaint; - private Rect shadowRect = new Rect(); - private int shadowPosition; - - public NavigationControllerContainerLayout(Context context) { - super(context); - init(); - } - - public NavigationControllerContainerLayout(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - public NavigationControllerContainerLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - private void init() { - ViewConfiguration viewConfiguration = ViewConfiguration.get(getContext()); - slopPixels = viewConfiguration.getScaledTouchSlop(); - minimalMovedPixels = dp(3); - flingPixels = viewConfiguration.getScaledMinimumFlingVelocity(); - maxFlingPixels = viewConfiguration.getScaledMaximumFlingVelocity(); - - scroller = new Scroller(getContext()); - - shadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - } - - public void setSwipeEnabled(boolean swipeEnabled) { - this.swipeEnabled = swipeEnabled; - } - - public void setNavigationController(NavigationController navigationController) { - this.navigationController = navigationController; - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent event) { - if (!swipeEnabled || tracking || navigationController.isBlockingInput() || !navigationController.getTop().navigation.swipeable || getBelowTop() == null) { - return false; - } - - int actionMasked = event.getActionMasked(); - - if (actionMasked != MotionEvent.ACTION_DOWN && interceptedEvent == null) { - // Action down wasn't called here, ignore - return false; - } - - switch (actionMasked) { - case MotionEvent.ACTION_DOWN: -// Logger.test("onInterceptTouchEvent down"); - interceptedEvent = MotionEvent.obtain(event); - break; - case MotionEvent.ACTION_MOVE: { -// Logger.test("onInterceptTouchEvent move"); - float x = (event.getX() - interceptedEvent.getX()); - float y = (event.getY() - interceptedEvent.getY()); - - if (Math.abs(y) >= slopPixels || interceptedEvent.getX() < dp(20)) { -// Logger.test("blockTracking = true"); - blockTracking = true; - } - - if (!blockTracking && x >= minimalMovedPixels && Math.abs(x) > Math.abs(y)) { - startTracking(event); - - return true; - } - break; - } - case MotionEvent.ACTION_CANCEL: - case MotionEvent.ACTION_UP: { -// Logger.test("onInterceptTouchEvent cancel/up"); - interceptedEvent.recycle(); - interceptedEvent = null; - blockTracking = false; - break; - } - } - - return false; - } - - @Override - public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) { - if (disallowIntercept) { - if (interceptedEvent != null) { - interceptedEvent.recycle(); - interceptedEvent = null; - } - blockTracking = false; - if (tracking) { - endTracking(false); - } - } - - super.requestDisallowInterceptTouchEvent(disallowIntercept); - } - - @Override - protected void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - -// endTracking(); - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - if (!tracking) { - return false; - } - - int translationX = Math.max(0, ((int) event.getX()) - trackStartPosition); - setTopControllerTranslation(translationX); - - velocityTracker.addMovement(event); - - switch (event.getActionMasked()) { - case MotionEvent.ACTION_CANCEL: - case MotionEvent.ACTION_UP: { -// Logger.test("onTouchEvent cancel or up"); - - scroller.forceFinished(true); - - velocityTracker.addMovement(event); - velocityTracker.computeCurrentVelocity(1000); - int velocity = (int) velocityTracker.getXVelocity(); - - if (translationX > 0) { - boolean doFlingAway = false; - - if ((velocity > 0 && Math.abs(velocity) > dp(800) && Math.abs(velocity) < maxFlingPixels) || translationX >= getWidth() * 3 / 4) { -// int left = getWidth() - translationX; -// int flingVelocity = Math.max(velocity, 0); - -// Logger.test("flinging with velocity = %d", velocity); - velocity = Math.max(dp(2000), velocity); - - scroller.fling(translationX, 0, velocity, 0, 0, Integer.MAX_VALUE, 0, 0); -// Logger.test("finalX = %d getWidth = %d", scroller.getFinalX(), getWidth()); - - // Make sure the animation always goes past the end - if (scroller.getFinalX() < getWidth()) { - scroller.startScroll(translationX, 0, getWidth(), 0, 2000); - } - - doFlingAway = true; -// Logger.test("Flinging away with velocity = %d", velocity); - } - - if (doFlingAway) { - startFlingAnimation(true); - } else { -// Logger.test("Snapping back"); - scroller.forceFinished(true); - scroller.startScroll(translationX, 0, -translationX, 0, 250); - startFlingAnimation(false); - } - } else { - // User swiped back to the left - endTracking(false); - } - - velocityTracker.recycle(); - velocityTracker = null; - - break; - } - } - - return true; - } - - @Override - protected void dispatchDraw(Canvas canvas) { - super.dispatchDraw(canvas); - - if (tracking) { - float alpha = Math.min(1f, Math.max(0f, SHADOW_MIN_ALPHA - (shadowPosition / (float) getWidth()) * SHADOW_MIN_ALPHA)); - shadowPaint.setColor(Color.argb((int) (alpha * 255f), 0, 0, 0)); - shadowRect.set(0, 0, shadowPosition, getHeight()); - canvas.drawRect(shadowRect, shadowPaint); - } - } - - private void startTracking(MotionEvent startEvent) { - if (tracking) { - throw new IllegalStateException("startTracking called but already tracking"); - } - - tracking = true; - trackingController = navigationController.getTop(); - behindTrackingController = getBelowTop(); - - interceptedEvent.recycle(); - interceptedEvent = null; - - trackStartPosition = (int) startEvent.getX(); - velocityTracker = VelocityTracker.obtain(); - velocityTracker.addMovement(startEvent); - -// long start = Time.startTiming(); - - navigationController.beginSwipeTransition(trackingController, behindTrackingController); - -// Time.endTiming("attach", start); - -// Logger.test("Start tracking " + trackingController.getClass().getSimpleName()); - } - - private void endTracking(boolean finishTransition) { -// Logger.test("endTracking finishTransition = " + finishTransition); - - if (!tracking) { - throw new IllegalStateException("endTracking called but was not tracking"); - } - - navigationController.endSwipeTransition(trackingController, behindTrackingController, finishTransition); - tracking = false; - trackingController = null; - behindTrackingController = null; - } - - private void startFlingAnimation(boolean finishTransitionAfterAnimation) { - this.finishTransitionAfterAnimation = finishTransitionAfterAnimation; - ViewCompat.postOnAnimation(this, flingRunnable); - } - - private Runnable flingRunnable = new Runnable() { - @Override - public void run() { - if (!tracking) { - throw new IllegalStateException("fling animation running while not tracking"); - } - - boolean finished = false; - - if (scroller.computeScrollOffset()) { - float translationX = scroller.getCurrX(); - - setTopControllerTranslation((int) translationX); - - // The view is not visible anymore. End it before the fling completely finishes. - if (translationX >= getWidth()) { - finished = true; - } - } else { - finished = true; - } - - if (!finished) { - ViewCompat.postOnAnimation(NavigationControllerContainerLayout.this, flingRunnable); - } else { - endTracking(finishTransitionAfterAnimation); - } - } - }; - - private void setTopControllerTranslation(int translationX) { - shadowPosition = translationX; - trackingController.view.setTranslationX(translationX); - navigationController.swipeTransitionProgress(translationX / (float) getWidth()); - invalidate(); - } - - private Controller getBelowTop() { - if (navigationController.childControllers.size() >= 2) { - return navigationController.childControllers.get(navigationController.childControllers.size() - 2); - } else { - return null; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/cache/CacheHandler.java b/Clover/app/src/main/java/org/floens/chan/core/cache/CacheHandler.java deleted file mode 100644 index 4095ee4501..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/cache/CacheHandler.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.cache; - -import android.support.annotation.AnyThread; -import android.support.annotation.MainThread; -import android.support.annotation.WorkerThread; -import android.util.Pair; - -import org.floens.chan.utils.Logger; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicLong; - -public class CacheHandler { - private static final String TAG = "CacheHandler"; - private static final int TRIM_TRIES = 20; - - private final ExecutorService pool = Executors.newFixedThreadPool(1); - - private final File directory; - private final long maxSize; - - /** - * An estimation of the current size of the directory. Used to check if trim must be run - * because the folder exceeds the maximum size. - */ - private AtomicLong size = new AtomicLong(); - private AtomicBoolean trimRunning = new AtomicBoolean(false); - - public CacheHandler(File directory, long maxSize) { - this.directory = directory; - this.maxSize = maxSize; - - createDirectories(); - backgroundRecalculateSize(); - } - - @MainThread - public boolean exists(String key) { - return get(key).exists(); - } - - @MainThread - public File get(String key) { - createDirectories(); - - return new File(directory, hash(key)); - } - - @MainThread - protected void fileWasAdded(File file) { - long adjustedSize = size.addAndGet(file.length()); - - if (adjustedSize > maxSize && trimRunning.compareAndSet(false, true)) { - pool.submit(() -> { - try { - trim(); - } catch (Exception e) { - Logger.e(TAG, "Error trimming", e); - } finally { - trimRunning.set(false); - } - }); - } - } - - @MainThread - public void clearCache() { - Logger.d(TAG, "Clearing cache"); - - if (directory.exists() && directory.isDirectory()) { - for (File file : directory.listFiles()) { - if (!file.delete()) { - Logger.d(TAG, "Could not delete cache file while clearing cache " + - file.getName()); - } - } - } - - recalculateSize(); - } - - @MainThread - public void createDirectories() { - if (!directory.exists()) { - if (!directory.mkdirs()) { - Logger.e(TAG, "Unable to create file cache dir " + - directory.getAbsolutePath()); - } - } - } - - @MainThread - private void backgroundRecalculateSize() { - pool.submit(this::recalculateSize); - } - - @AnyThread - private void recalculateSize() { - long calculatedSize = 0; - - File[] files = directory.listFiles(); - if (files != null) { - for (File file : files) { - calculatedSize += file.length(); - } - } - - size.set(calculatedSize); - } - - @WorkerThread - private void trim() { - File[] directoryFiles = directory.listFiles(); - - // Don't try to trim empty directories or just one file in it. - if (directoryFiles == null || directoryFiles.length <= 1) { - return; - } - - // Get all files with their last modified times. - List> files = new ArrayList<>(directoryFiles.length); - for (File file : directoryFiles) { - files.add(new Pair<>(file, file.lastModified())); - } - - // Sort by oldest first. - Collections.sort(files, (o1, o2) -> Long.signum(o1.second - o2.second)); - - // Trim as long as the directory size exceeds the threshold and we haven't reached - // the trim limit. - long workingSize = size.get(); - for (int i = 0; workingSize >= maxSize && i < Math.min(files.size(), TRIM_TRIES); i++) { - File file = files.get(i).first; - - Logger.d(TAG, "Delete for trim " + file.getAbsolutePath()); - workingSize -= file.length(); - - boolean deleteResult = file.delete(); - - if (!deleteResult) { - Logger.e(TAG, "Failed to delete cache file for trim"); - } - } - - recalculateSize(); - } - - @AnyThread - private String hash(String key) { - return String.valueOf(key.hashCode()); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/cache/FileCache.java b/Clover/app/src/main/java/org/floens/chan/core/cache/FileCache.java deleted file mode 100644 index c6c3b81474..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/cache/FileCache.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.cache; - -import android.support.annotation.MainThread; - -import org.floens.chan.utils.Logger; -import org.floens.chan.utils.Time; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; - -import okhttp3.OkHttpClient; -import okhttp3.Protocol; - -public class FileCache implements FileCacheDownloader.Callback { - private static final String TAG = "FileCache"; - private static final int TIMEOUT = 10000; - private static final int DOWNLOAD_POOL_SIZE = 2; - - private final ExecutorService downloadPool = Executors.newFixedThreadPool(DOWNLOAD_POOL_SIZE); - private String userAgent; - protected OkHttpClient httpClient; - - private final CacheHandler cacheHandler; - - private List downloaders = new ArrayList<>(); - - public FileCache(File directory, long maxSize, String userAgent) { - this.userAgent = userAgent; - - httpClient = new OkHttpClient.Builder() - .connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS) - .readTimeout(TIMEOUT, TimeUnit.MILLISECONDS) - .writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS) - // Disable SPDY, causes reproducible timeouts, only one download at the same time and other fun stuff - .protocols(Collections.singletonList(Protocol.HTTP_1_1)) - .build(); - - cacheHandler = new CacheHandler(directory, maxSize); - } - - public void clearCache() { - for (FileCacheDownloader downloader : downloaders) { - downloader.cancel(); - } - - cacheHandler.clearCache(); - } - - /** - * Start downloading the file located at the url.
- * If the file is in the cache then the callback is executed immediately and null is - * returned.
- * Otherwise if the file is downloading or has not yet started downloading a - * {@link FileCacheDownloader} is returned.
- * - * @param url the url to download. - * @param listener listener to execute callbacks on. - * @return {@code null} if in the cache, {@link FileCacheDownloader} otherwise. - */ - @MainThread - public FileCacheDownloader downloadFile(String url, FileCacheListener listener) { - FileCacheDownloader runningDownloaderForKey = getDownloaderByKey(url); - if (runningDownloaderForKey != null) { - runningDownloaderForKey.addListener(listener); - return runningDownloaderForKey; - } - - File file = get(url); - if (file.exists()) { - handleFileImmediatelyAvailable(listener, file); - return null; - } else { - return handleStartDownload(listener, file, url); - } - } - - public FileCacheDownloader getDownloaderByKey(String key) { - for (FileCacheDownloader downloader : downloaders) { - if (downloader.getUrl().equals(key)) { - return downloader; - } - } - return null; - } - - @Override - public void downloaderFinished(FileCacheDownloader fileCacheDownloader) { - downloaders.remove(fileCacheDownloader); - } - - @Override - public void downloaderAddedFile(File file) { - cacheHandler.fileWasAdded(file); - } - - public boolean exists(String key) { - return cacheHandler.exists(key); - } - - public File get(String key) { - return cacheHandler.get(key); - } - - private void handleFileImmediatelyAvailable(FileCacheListener listener, File file) { - // TODO: setLastModified doesn't seem to work on Android... - if (!file.setLastModified(Time.get())) { - Logger.e(TAG, "Could not set last modified time on file"); - } - listener.onSuccess(file); - listener.onEnd(); - } - - private FileCacheDownloader handleStartDownload( - FileCacheListener listener, File file, String url) { - FileCacheDownloader downloader = FileCacheDownloader.fromCallbackClientUrlOutputUserAgent( - this, httpClient, url, file, userAgent); - downloader.addListener(listener); - downloader.execute(downloadPool); - downloaders.add(downloader); - return downloader; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/cache/FileCacheDownloader.java b/Clover/app/src/main/java/org/floens/chan/core/cache/FileCacheDownloader.java deleted file mode 100644 index 64baafc7b8..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/cache/FileCacheDownloader.java +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.cache; - -import android.os.Handler; -import android.os.Looper; -import android.support.annotation.AnyThread; -import android.support.annotation.MainThread; -import android.support.annotation.WorkerThread; - -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.utils.Logger; - -import java.io.Closeable; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; -import java.util.concurrent.atomic.AtomicBoolean; - -import okhttp3.Call; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; -import okhttp3.internal.Util; -import okio.Buffer; -import okio.BufferedSink; -import okio.Okio; -import okio.Source; - -public class FileCacheDownloader implements Runnable { - private static final String TAG = "FileCacheDownloader"; - private static final long BUFFER_SIZE = 8192; - private static final long NOTIFY_SIZE = BUFFER_SIZE * 8; - - private final OkHttpClient httpClient; - private final String url; - private final File output; - private final String userAgent; - private final Handler handler; - - // Main thread only. - private final Callback callback; - private final List listeners = new ArrayList<>(); - - // Main and worker thread. - private AtomicBoolean running = new AtomicBoolean(false); - private AtomicBoolean cancel = new AtomicBoolean(false); - private Future future; - - // Worker thread. - private Call call; - private ResponseBody body; - - static FileCacheDownloader fromCallbackClientUrlOutputUserAgent( - Callback callback, OkHttpClient httpClient, String url, - File output, String userAgent) { - return new FileCacheDownloader(callback, httpClient, url, output, userAgent); - } - - private FileCacheDownloader(Callback callback, OkHttpClient httpClient, - String url, File output, String userAgent) { - this.callback = callback; - this.httpClient = httpClient; - this.url = url; - this.output = output; - this.userAgent = userAgent; - - handler = new Handler(Looper.getMainLooper()); - } - - @MainThread - public void execute(ExecutorService executor) { - future = executor.submit(this); - } - - @MainThread - public String getUrl() { - return url; - } - - @AnyThread - public Future getFuture() { - return future; - } - - @MainThread - public void addListener(FileCacheListener callback) { - listeners.add(callback); - } - - /** - * Cancel this download. - */ - @MainThread - public void cancel() { - if (cancel.compareAndSet(false, true)) { - // Did not start running yet, mark finished here. - if (!running.get()) { - callback.downloaderFinished(this); - } - } - } - - @AnyThread - private void post(Runnable runnable) { - handler.post(runnable); - } - - @AnyThread - private void log(String message) { - Logger.d(TAG, logPrefix() + message); - } - - @AnyThread - private void log(String message, Exception e) { - Logger.e(TAG, logPrefix() + message, e); - } - - private String logPrefix() { - return "[" + url.substring(0, Math.min(url.length(), 45)) + "] "; - } - - @Override - @WorkerThread - public void run() { - log("start"); - running.set(true); - execute(); - } - - @WorkerThread - private void execute() { - Closeable sourceCloseable = null; - Closeable sinkCloseable = null; - - try { - checkCancel(); - - ResponseBody body = getBody(); - - Source source = body.source(); - sourceCloseable = source; - - BufferedSink sink = Okio.buffer(Okio.sink(output)); - sinkCloseable = sink; - - checkCancel(); - - log("got input stream"); - - pipeBody(source, sink); - - log("done"); - - post(() -> { - callback.downloaderAddedFile(output); - callback.downloaderFinished(this); - for (FileCacheListener callback : listeners) { - callback.onSuccess(output); - callback.onEnd(); - } - }); - } catch (IOException e) { - boolean isNotFound = false; - boolean cancelled = false; - if (e instanceof HttpCodeIOException) { - int code = ((HttpCodeIOException) e).code; - log("exception: http error, code: " + code, e); - isNotFound = code == 404; - } else if (e instanceof CancelException) { - // Don't log the stack. - log("exception: cancelled"); - cancelled = true; - } else { - log("exception", e); - } - - final boolean finalIsNotFound = isNotFound; - final boolean finalCancelled = cancelled; - post(() -> { - purgeOutput(); - for (FileCacheListener callback : listeners) { - if (finalCancelled) { - callback.onCancel(); - } else { - callback.onFail(finalIsNotFound); - } - - callback.onEnd(); - } - callback.downloaderFinished(this); - }); - } finally { - Util.closeQuietly(sourceCloseable); - Util.closeQuietly(sinkCloseable); - - if (call != null) { - call.cancel(); - } - - if (body != null) { - Util.closeQuietly(body); - } - } - } - - @WorkerThread - private ResponseBody getBody() throws IOException { - Request request = new Request.Builder() - .url(url) - .header("User-Agent", userAgent) - .build(); - - call = httpClient.newBuilder() - .proxy(ChanSettings.getProxy()) - .build() - .newCall(request); - - Response response = call.execute(); - if (!response.isSuccessful()) { - throw new HttpCodeIOException(response.code()); - } - - checkCancel(); - - body = response.body(); - if (body == null) { - throw new IOException("body == null"); - } - - checkCancel(); - - return body; - } - - @WorkerThread - private void pipeBody(Source source, BufferedSink sink) throws IOException { - long contentLength = body.contentLength(); - - long read; - long total = 0; - long notifyTotal = 0; - - Buffer buffer = new Buffer(); - - while ((read = source.read(buffer, BUFFER_SIZE)) != -1) { - sink.write(buffer, read); - total += read; - - if (total >= notifyTotal + NOTIFY_SIZE) { - notifyTotal = total; - log("progress " + (total / (float) contentLength)); - postProgress(total, contentLength <= 0 ? total : contentLength); - } - - checkCancel(); - } - - Util.closeQuietly(source); - Util.closeQuietly(sink); - - call = null; - Util.closeQuietly(body); - body = null; - } - - @WorkerThread - private void checkCancel() throws IOException { - if (cancel.get()) { - throw new CancelException(); - } - } - - @WorkerThread - private void purgeOutput() { - if (output.exists()) { - final boolean deleteResult = output.delete(); - - if (!deleteResult) { - log("could not delete the file in purgeOutput"); - } - } - } - - @WorkerThread - private void postProgress(final long downloaded, final long total) { - post(() -> { - for (FileCacheListener callback : listeners) { - callback.onProgress(downloaded, total); - } - }); - } - - private static class CancelException extends IOException { - public CancelException() { - } - } - - private static class HttpCodeIOException extends IOException { - private int code; - - public HttpCodeIOException(int code) { - this.code = code; - } - } - - public interface Callback { - void downloaderFinished(FileCacheDownloader fileCacheDownloader); - - void downloaderAddedFile(File file); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/cache/FileCacheListener.java b/Clover/app/src/main/java/org/floens/chan/core/cache/FileCacheListener.java deleted file mode 100644 index f06f5fb12c..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/cache/FileCacheListener.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.cache; - -import java.io.File; - -public abstract class FileCacheListener { - public void onProgress(long downloaded, long total) { - } - - /** - * Called when the file download was completed. - */ - public void onSuccess(File file) { - } - - /** - * Called when there was an error downloading the file. - * This is not called when the download was cancelled. - * - * @param notFound when it was a http 404 error. - */ - public void onFail(boolean notFound) { - } - - /** - * Called when the file download was cancelled. - */ - public void onCancel() { - } - - /** - * When the download was ended, this is always called, when it failed, succeeded or was - * cancelled. - */ - public void onEnd() { - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/cache/FileCacheProvider.java b/Clover/app/src/main/java/org/floens/chan/core/cache/FileCacheProvider.java deleted file mode 100644 index 7e4cebf30d..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/cache/FileCacheProvider.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.cache; - -import android.content.Context; -import android.net.Uri; -import android.support.v4.content.FileProvider; - -import org.floens.chan.utils.AndroidUtils; - -import java.io.File; - -public class FileCacheProvider { - public static Uri getUriForFile(File file) { - Context applicationContext = AndroidUtils.getAppContext(); - String authority = getAuthority(applicationContext); - return FileProvider.getUriForFile(applicationContext, authority, file); - } - - private static String getAuthority(Context applicationContext) { - // NOTE: keep this in line with the name defined in the different manifests for the - // different flavors. - return applicationContext.getPackageName() + ".fileprovider"; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java deleted file mode 100644 index 8126059746..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java +++ /dev/null @@ -1,261 +0,0 @@ -package org.floens.chan.core.database; - -import android.annotation.SuppressLint; -import android.util.Pair; - -import com.j256.ormlite.stmt.PreparedUpdate; -import com.j256.ormlite.stmt.QueryBuilder; -import com.j256.ormlite.stmt.SelectArg; -import com.j256.ormlite.stmt.UpdateBuilder; - -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.SiteModel; -import org.floens.chan.core.site.Site; -import org.floens.chan.utils.Time; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; - -public class DatabaseBoardManager { - private static final String TAG = "DatabaseBoardManager"; - - private DatabaseManager databaseManager; - private DatabaseHelper helper; - - public DatabaseBoardManager(DatabaseManager databaseManager, DatabaseHelper helper) { - this.databaseManager = databaseManager; - this.helper = helper; - } - - public Callable createOrUpdate(final Board board) { - return () -> { - QueryBuilder q = helper.boardsDao.queryBuilder(); - q.where().eq("site", board.getSite().id()) - .and().eq("value", board.code); - Board existing = q.queryForFirst(); - if (existing != null) { - existing.updateExcludingUserFields(board); - helper.boardsDao.update(existing); - board.updateExcludingUserFields(existing); - } else { - helper.boardsDao.create(board); - } - - return board; - }; - } - - public Callable updateIncludingUserFields(final Board board) { - return () -> { - helper.boardsDao.update(board); - - return null; - }; - } - - public Callable updateIncludingUserFields(final List boards) { - return () -> { - for (Board board : boards) { - helper.boardsDao.update(board); - } - - return null; - }; - } - - public Callable updateOrders(final List boards) { - return () -> { - SelectArg id = new SelectArg(); - SelectArg order = new SelectArg(); - - UpdateBuilder updateBuilder = helper.boardsDao.updateBuilder(); - updateBuilder.where().eq("id", id); - updateBuilder.updateColumnValue("order", order); - PreparedUpdate statement = updateBuilder.prepare(); - - for (int i = 0; i < boards.size(); i++) { - Board board = boards.get(i); - - id.setValue(board.id); - order.setValue(i); - helper.boardsDao.update(statement); - } - - return null; - }; - } - - public Callable createAll(final Site site, final List boards) { - return () -> { - long start = Time.startTiming(); - - List allFromDb = helper.boardsDao.queryForEq("site", site.id()); - Map byCodeFromDb = new HashMap<>(); - for (Board board : allFromDb) { - byCodeFromDb.put(board.code, board); - board.site = site; - } - - List toCreate = new ArrayList<>(); - List> toUpdate = new ArrayList<>(); - for (Board board : boards) { - if (byCodeFromDb.containsKey(board.code)) { - Board dbBoard = byCodeFromDb.get(board.code); - if (!dbBoard.propertiesEqual(board)) { - toUpdate.add(new Pair<>(dbBoard, board)); - } - } else { - toCreate.add(board); - } - } - - if (!toCreate.isEmpty()) { - for (Board board : toCreate) { - helper.boardsDao.create(board); - } - } - - if (!toUpdate.isEmpty()) { - for (Pair pair : toUpdate) { - Board dbBoard = pair.first; - Board newPropertiesBoard = pair.second; - - dbBoard.updateExcludingUserFields(newPropertiesBoard); - helper.boardsDao.update(dbBoard); - } - } - - /*for (Board board : boards) { - QueryBuilder q = helper.boardsDao.queryBuilder(); - q.where().eq("site", board.getSite().id()) - .and().eq("value", board.code); - Board existing = q.queryForFirst(); - if (existing != null) { - existing.updateExcludingUserFields(board); - helper.boardsDao.update(existing); - board.updateExcludingUserFields(existing); - } else { - helper.boardsDao.create(board); - } - }*/ - - Time.endTiming("createAll boards " + - toCreate.size() + ", " + toUpdate.size(), start); - - return !toCreate.isEmpty() || !toUpdate.isEmpty(); - }; - } - - public Callable getBoard(final Site site, final String code) { - return () -> { - Board board = helper.boardsDao.queryBuilder() - .where().eq("site", site.id()) - .and().eq("value", code) - .queryForFirst(); - - if (board != null) { - board.site = site; - } - - return board; - }; - } - - @SuppressLint("UseSparseArrays") - public Callable>>> getBoardsForAllSitesOrdered(List sites) { - return () -> { - long start = Time.startTiming(); - - // Query the orders of the sites. - QueryBuilder q = helper.siteDao.queryBuilder(); - q.selectColumns("id", "order"); - List modelsWithOrder = q.query(); - Map ordering = new HashMap<>(); - for (SiteModel siteModel : modelsWithOrder) { - ordering.put(siteModel.id, siteModel.order); - } - - Time.endTiming("getboards sites", start); - start = Time.startTiming(); - - List sitesOrdered = new ArrayList<>(sites); - // Sort the given sites array with these orders. - Collections.sort(sitesOrdered, - (lhs, rhs) -> ordering.get(lhs.id()) - ordering.get(rhs.id())); - - // Query all boards belonging to any of these sites. - List siteIds = new ArrayList<>(sitesOrdered.size()); - for (Site site : sitesOrdered) { - siteIds.add(site.id()); - } - List allBoards = helper.boardsDao.queryBuilder() - .where().in("site", siteIds) - .query(); - - Time.endTiming("getboards boards", start); - start = Time.startTiming(); - - // Map the boards from siteId to a list of boards. - Map sitesById = new HashMap<>(); - for (Site site : sites) { - sitesById.put(site.id(), site); - } - Map> bySite = new HashMap<>(); - for (Board board : allBoards) { - board.site = sitesById.get(board.siteId); - - List boards = bySite.get(board.siteId); - if (boards == null) { - boards = new ArrayList<>(); - bySite.put(board.siteId, boards); - } - boards.add(board); - } - - // And map the site to the board, and order these boards. - List>> res = new ArrayList<>(); - for (Site site : sitesOrdered) { - List siteBoards = bySite.get(site.id()); - if (siteBoards == null) siteBoards = new ArrayList<>(); - Collections.sort(siteBoards, (lhs, rhs) -> lhs.order - rhs.order); - res.add(new Pair<>(site, siteBoards)); - } - - Time.endTiming("getboards process", start); - start = Time.startTiming(); - - return res; - }; - } - - public Callable> getSiteBoards(final Site site) { - return () -> { - List boards = helper.boardsDao.queryBuilder() - .where().eq("site", site.id()) - .query(); - for (int i = 0; i < boards.size(); i++) { - Board board = boards.get(i); - board.site = site; - } - return boards; - }; - } - - public Callable> getSiteSavedBoards(final Site site) { - return () -> { - List boards = helper.boardsDao.queryBuilder() - .where().eq("site", site.id()) - .and().eq("saved", true) - .query(); - for (int i = 0; i < boards.size(); i++) { - Board board = boards.get(i); - board.site = site; - } - return boards; - }; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseFilterManager.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseFilterManager.java deleted file mode 100644 index 9e33886e34..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseFilterManager.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.database; - -import org.floens.chan.core.model.orm.Filter; - -import java.util.List; -import java.util.concurrent.Callable; - -public class DatabaseFilterManager { - private static final String TAG = "DatabaseFilterManager"; - - private DatabaseManager databaseManager; - private DatabaseHelper helper; - - public DatabaseFilterManager(DatabaseManager databaseManager, DatabaseHelper helper) { - this.databaseManager = databaseManager; - this.helper = helper; - } - - public Callable createFilter(final Filter filter) { - return new Callable() { - @Override - public Filter call() throws Exception { - helper.filterDao.create(filter); - return filter; - } - }; - } - - public Callable deleteFilter(final Filter filter) { - return new Callable() { - @Override - public Void call() throws Exception { - helper.filterDao.delete(filter); - return null; - } - }; - } - - public Callable updateFilter(final Filter filter) { - return new Callable() { - @Override - public Filter call() throws Exception { - helper.filterDao.update(filter); - return filter; - } - }; - } - - public Callable> getFilters() { - return new Callable>() { - @Override - public List call() throws Exception { - return helper.filterDao.queryForAll(); - } - }; - } - - public Callable getCount() { - return () -> helper.filterDao.countOf(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseHelper.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseHelper.java deleted file mode 100644 index db616a0108..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseHelper.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.database; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; - -import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; -import com.j256.ormlite.dao.Dao; -import com.j256.ormlite.support.ConnectionSource; -import com.j256.ormlite.table.TableUtils; - -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Filter; -import org.floens.chan.core.model.orm.History; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.model.orm.Pin; -import org.floens.chan.core.model.orm.SavedReply; -import org.floens.chan.core.model.orm.SiteModel; -import org.floens.chan.core.model.orm.ThreadHide; -import org.floens.chan.core.site.SiteService; -import org.floens.chan.utils.Logger; - -import java.sql.SQLException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class DatabaseHelper extends OrmLiteSqliteOpenHelper { - private static final String TAG = "DatabaseHelper"; - - private static final String DATABASE_NAME = "ChanDB"; - private static final int DATABASE_VERSION = 25; - - public Dao pinDao; - public Dao loadableDao; - public Dao savedDao; - public Dao boardsDao; - public Dao threadHideDao; - public Dao historyDao; - public Dao filterDao; - public Dao siteDao; - - private final Context context; - - public DatabaseHelper(Context context) { - super(context, DATABASE_NAME, null, DATABASE_VERSION); - - this.context = context; - - try { - pinDao = getDao(Pin.class); - loadableDao = getDao(Loadable.class); - savedDao = getDao(SavedReply.class); - boardsDao = getDao(Board.class); - threadHideDao = getDao(ThreadHide.class); - historyDao = getDao(History.class); - filterDao = getDao(Filter.class); - siteDao = getDao(SiteModel.class); - } catch (SQLException e) { - Logger.e(TAG, "Error creating dao's", e); - } - } - - @Override - public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { - try { - TableUtils.createTable(connectionSource, Pin.class); - TableUtils.createTable(connectionSource, Loadable.class); - TableUtils.createTable(connectionSource, SavedReply.class); - TableUtils.createTable(connectionSource, Board.class); - TableUtils.createTable(connectionSource, ThreadHide.class); - TableUtils.createTable(connectionSource, History.class); - TableUtils.createTable(connectionSource, Filter.class); - TableUtils.createTable(connectionSource, SiteModel.class); - } catch (SQLException e) { - Logger.e(TAG, "Error creating db", e); - throw new RuntimeException(e); - } - } - - @Override - public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) { - Logger.i(TAG, "Upgrading database from " + oldVersion + " to " + newVersion); - - if (oldVersion < 12) { - try { - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN perPage INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN pages INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN maxFileSize INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN maxWebmSize INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN maxCommentChars INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN bumpLimit INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN imageLimit INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN cooldownThreads INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN cooldownReplies INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN cooldownImages INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN cooldownRepliesIntra INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN cooldownImagesIntra INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN spoilers INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN customSpoilers INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN userIds INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN codeTags INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN preuploadCaptcha INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN countryFlags INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN trollFlags INTEGER;"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN mathTags INTEGER;"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 12", e); - } - - try { - Map fieldValues = new HashMap<>(); - fieldValues.put("value", "f"); - List list = boardsDao.queryForFieldValues(fieldValues); - if (list != null) { - boardsDao.delete(list); - Logger.i(TAG, "Deleted f board"); - } - } catch (SQLException e) { - Logger.e(TAG, "Error removing /f/ board while upgrading to version 12", e); - } - } - - if (oldVersion < 13) { - try { - boardsDao.executeRawNoArgs("ALTER TABLE pin ADD COLUMN isError SMALLINT;"); - boardsDao.executeRawNoArgs("ALTER TABLE pin ADD COLUMN thumbnailUrl VARCHAR;"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 13", e); - } - } - - if (oldVersion < 14) { - try { - pinDao.executeRawNoArgs("ALTER TABLE pin ADD COLUMN \"order\" INTEGER;"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 14", e); - } - } - - if (oldVersion < 15) { - try { - pinDao.executeRawNoArgs("ALTER TABLE pin ADD COLUMN archived INTEGER;"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 15", e); - } - } - - if (oldVersion < 16) { - try { - threadHideDao.executeRawNoArgs("CREATE TABLE `threadhide` (`board` VARCHAR , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `no` INTEGER );"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 16", e); - } - } - - if (oldVersion < 17) { - try { - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN description TEXT;"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 17", e); - } - } - - if (oldVersion < 18) { - try { - historyDao.executeRawNoArgs("CREATE TABLE `history` (`date` BIGINT , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `loadable_id` INTEGER NOT NULL , `thumbnailUrl` VARCHAR );"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 18", e); - } - } - - if (oldVersion < 19) { - try { - filterDao.executeRawNoArgs("CREATE TABLE `filter` (`action` INTEGER NOT NULL , `allBoards` SMALLINT NOT NULL , `boards` VARCHAR NOT NULL , `color` INTEGER NOT NULL , `enabled` SMALLINT NOT NULL , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `pattern` VARCHAR NOT NULL , `type` INTEGER NOT NULL );"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 19", e); - } - } - - if (oldVersion < 20) { - try { - loadableDao.executeRawNoArgs("ALTER TABLE loadable ADD COLUMN lastViewed default -1;"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 20", e); - } - } - - if (oldVersion < 21) { - try { - loadableDao.executeRawNoArgs("ALTER TABLE loadable ADD COLUMN lastLoaded default -1;"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 21", e); - } - } - - if (oldVersion < 22) { - try { - siteDao.executeRawNoArgs("CREATE TABLE `site` (`configuration` VARCHAR , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `userSettings` VARCHAR );"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 22", e); - } - - final int siteId = 0; - - try { - boardsDao.executeRawNoArgs("ALTER TABLE loadable ADD COLUMN site INTEGER default " + siteId + ";"); - boardsDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN site INTEGER default " + siteId + ";"); - boardsDao.executeRawNoArgs("ALTER TABLE savedreply ADD COLUMN site INTEGER default " + siteId + ";"); - boardsDao.executeRawNoArgs("ALTER TABLE threadhide ADD COLUMN site INTEGER default " + siteId + ";"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 22", e); - } - - SiteService.addSiteForLegacy(); - } - - if (oldVersion < 23) { - try { - pinDao.executeRawNoArgs("ALTER TABLE board ADD COLUMN \"archive\" INTEGER;"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 23", e); - } - } - - if (oldVersion < 24) { - try { - siteDao.executeRawNoArgs("ALTER TABLE site ADD COLUMN \"order\" INTEGER;"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 24", e); - } - } - - if (oldVersion < 25) { - try { - boardsDao.executeRawNoArgs("CREATE INDEX board_site_idx ON board(site);"); - boardsDao.executeRawNoArgs("CREATE INDEX board_saved_idx ON board(saved);"); - boardsDao.executeRawNoArgs("CREATE INDEX board_value_idx ON board(value);"); - } catch (SQLException e) { - Logger.e(TAG, "Error upgrading to version 25", e); - } - } - } - - public void reset() { - Logger.i(TAG, "Resetting database!"); - - if (context.deleteDatabase(DATABASE_NAME)) { - Logger.i(TAG, "Deleted database"); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseHideManager.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseHideManager.java deleted file mode 100644 index f5981af4e3..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseHideManager.java +++ /dev/null @@ -1,118 +0,0 @@ -package org.floens.chan.core.database; - -import com.j256.ormlite.table.TableUtils; - -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.orm.ThreadHide; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; - -public class DatabaseHideManager { - private static final long THREAD_HIDE_TRIM_TRIGGER = 250; - private static final long THREAD_HIDE_TRIM_COUNT = 50; - - private DatabaseManager databaseManager; - private DatabaseHelper helper; - - private final Map> hides = new HashMap<>(); - - public DatabaseHideManager(DatabaseManager databaseManager, DatabaseHelper helper) { - this.databaseManager = databaseManager; - this.helper = helper; - } - - public Callable load() { - return () -> { - databaseManager.trimTable(helper.threadHideDao, "threadhide", - THREAD_HIDE_TRIM_TRIGGER, THREAD_HIDE_TRIM_COUNT); - - synchronized (hides) { - hides.clear(); - - List threadHides = helper.threadHideDao.queryForAll(); - for (ThreadHide hide : threadHides) { - List hidesForId = hides.get(hide.no); - if (hidesForId == null) { - hidesForId = new ArrayList<>(1); - hides.put(hide.no, hidesForId); - } - - hidesForId.add(hide); - } - } - - return null; - }; - } - - /** - * Returns if the given post is hidden. The Post must be a OP of a thread. - *

- * This method is thread-safe, and doesn't need to be called through - * {@link DatabaseManager#runTask(Callable)}. - * - * @param post The Post to check if it is hidden. - * @return {@code true} if hidden, {@code false} otherwise. - */ - public boolean isThreadHidden(Post post) { - synchronized (hides) { - if (hides.containsKey(post.no)) { - for (ThreadHide threadHide : hides.get(post.no)) { - if (threadHide.equalsPost(post)) { - return true; - } - } - } - } - return false; - } - - public Callable addThreadHide(ThreadHide hide) { - return () -> { - helper.threadHideDao.create(hide); - - synchronized (hides) { - List hidesForId = hides.get(hide.no); - if (hidesForId == null) { - hidesForId = new ArrayList<>(1); - hides.put(hide.no, hidesForId); - } - - hidesForId.add(hide); - } - - return null; - }; - } - - public Callable removeThreadHide(ThreadHide hide) { - return () -> { - helper.threadHideDao.delete(hide); - - synchronized (hides) { - List hidesForId = hides.get(hide.no); - if (hidesForId != null) { - hidesForId.remove(hide); - } - } - - return null; - }; - } - - public Callable clearAllThreadHides() { - return () -> { - TableUtils.clearTable(helper.getConnectionSource(), ThreadHide.class); - - synchronized (hides) { - hides.clear(); - } - - return null; - }; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseHistoryManager.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseHistoryManager.java deleted file mode 100644 index 2f04b9d2ce..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseHistoryManager.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.database; - -import com.j256.ormlite.stmt.QueryBuilder; -import com.j256.ormlite.table.TableUtils; - -import org.floens.chan.core.model.orm.History; -import org.floens.chan.utils.Time; - -import java.util.List; -import java.util.concurrent.Callable; - -public class DatabaseHistoryManager { - private static final String TAG = "DatabaseHistoryManager"; - - private static final long HISTORY_TRIM_TRIGGER = 100; - private static final long HISTORY_TRIM_COUNT = 50; - - private DatabaseManager databaseManager; - private DatabaseHelper helper; - private DatabaseLoadableManager databaseLoadableManager; - - public DatabaseHistoryManager(DatabaseManager databaseManager, DatabaseHelper helper, DatabaseLoadableManager databaseLoadableManager) { - this.databaseManager = databaseManager; - this.helper = helper; - this.databaseLoadableManager = databaseLoadableManager; - } - - public Callable load() { - return new Callable() { - @Override - public Void call() throws Exception { - databaseManager.trimTable(helper.historyDao, "history", HISTORY_TRIM_TRIGGER, HISTORY_TRIM_COUNT); - - return null; - } - }; - } - - public Callable> getHistory() { - return new Callable>() { - @Override - public List call() throws Exception { - QueryBuilder historyQuery = helper.historyDao.queryBuilder(); - List date = historyQuery.orderBy("date", false).query(); - for (int i = 0; i < date.size(); i++) { - History history = date.get(i); - history.loadable = databaseLoadableManager.refreshForeign(history.loadable); - } - return date; - } - }; - } - - public Callable addHistory(final History history) { - if (!history.loadable.isThreadMode()) { - throw new IllegalArgumentException("History loadables must be in thread mode"); - } - - if (history.loadable.id == 0) { - throw new IllegalArgumentException("History loadable is not yet in the db"); - } - - return new Callable() { - @Override - public History call() throws Exception { - QueryBuilder builder = helper.historyDao.queryBuilder(); - List existingHistories = builder.where().eq("loadable_id", history.loadable.id).query(); - History existingHistoryForLoadable = existingHistories.isEmpty() ? null : existingHistories.get(0); - - if (existingHistoryForLoadable != null) { - existingHistoryForLoadable.date = Time.get(); - helper.historyDao.update(existingHistoryForLoadable); - } else { - history.date = Time.get(); - helper.historyDao.create(history); - } - - return history; - } - }; - } - - public Callable removeHistory(final History history) { - return new Callable() { - @Override - public Void call() throws Exception { - helper.historyDao.delete(history); - return null; - } - }; - } - - public Callable clearHistory() { - return new Callable() { - @Override - public Void call() throws Exception { - long start = Time.startTiming(); - TableUtils.clearTable(helper.getConnectionSource(), History.class); - Time.endTiming("Clear history table", start); - - return null; - } - }; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseLoadableManager.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseLoadableManager.java deleted file mode 100644 index 32bc5888fa..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseLoadableManager.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.database; - -import android.util.Log; - -import com.j256.ormlite.stmt.QueryBuilder; - -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.repository.SiteRepository; -import org.floens.chan.utils.Logger; -import org.floens.chan.utils.Time; - -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; - -public class DatabaseLoadableManager { - private static final String TAG = "DatabaseLoadableManager"; - - private DatabaseManager databaseManager; - private DatabaseHelper helper; - - private Map cachedLoadables = new HashMap<>(); - - public DatabaseLoadableManager(DatabaseManager databaseManager, DatabaseHelper helper) { - this.databaseManager = databaseManager; - this.helper = helper; - } - - /** - * Called when the application goes into the background, to do intensive update calls for loadables - * whose list indexes or titles have changed. - */ - public Callable flush() { - return new Callable() { - @Override - public Void call() throws Exception { - List toFlush = new ArrayList<>(); - for (Loadable loadable : cachedLoadables.values()) { - if (loadable.dirty) { - loadable.dirty = false; - toFlush.add(loadable); - } - } - - if (!toFlush.isEmpty()) { - Logger.d(TAG, "Flushing " + toFlush.size() + " loadable(s)"); - long start = Time.startTiming(); - for (int i = 0; i < toFlush.size(); i++) { - Loadable loadable = toFlush.get(i); - helper.loadableDao.update(loadable); - } - Time.endTiming("Loadable flushing", start); - } - - return null; - } - }; - } - - /** - * All loadables that are not gotten from a database (like from any of the Loadable.for...() factory methods) - * need to go through this method to correctly get a loadable if it already existed in the db. - *

It will search the database for existing loadables of the mode is THREAD, and return one of those if there is - * else it will create the loadable in the database and return the given loadable. - * - * @param loadable Loadable to search from that was not yet gotten from the db. - * @return a loadable ready to use. - */ - public Loadable get(final Loadable loadable) { - if (loadable.id != 0) { - throw new IllegalArgumentException("get() only works for transient loadables"); - } - - // We only cache THREAD loadables in the db - if (loadable.isThreadMode()) { - long start = Time.startTiming(); - Loadable result = databaseManager.runTask(getLoadable(loadable)); - Time.endTiming("get loadable from db " + loadable.boardCode, start); - return result; - } else { - return loadable; - } - } - - /** - * Call this when you use a thread loadable as a foreign object on your table - *

It will correctly update the loadable cache - * - * @param loadable Loadable that only has its id loaded - * @return a loadable ready to use. - * @throws SQLException - */ - public Loadable refreshForeign(final Loadable loadable) throws SQLException { - if (loadable.id == 0) { - throw new IllegalArgumentException("This only works loadables that have their id loaded"); - } - - // If the loadable was already loaded in the cache, return that entry - for (Loadable key : cachedLoadables.keySet()) { - if (key.id == loadable.id) { - return key; - } - } - - // Add it to the cache, refresh contents - helper.loadableDao.refresh(loadable); - loadable.site = SiteRepository.forId(loadable.siteId); - loadable.board = loadable.site.board(loadable.boardCode); - cachedLoadables.put(loadable, loadable); - return loadable; - } - - private Callable getLoadable(final Loadable loadable) { - if (!loadable.isThreadMode()) { - throw new IllegalArgumentException("getLoadable can only be used for thread loadables"); - } - - return new Callable() { - @Override - public Loadable call() throws Exception { - Loadable cachedLoadable = cachedLoadables.get(loadable); - if (cachedLoadable != null) { - Logger.v(TAG, "Cached loadable found"); - return cachedLoadable; - } else { - QueryBuilder builder = helper.loadableDao.queryBuilder(); - List results = builder.where() - .eq("site", loadable.siteId).and() - .eq("mode", loadable.mode) - .and().eq("board", loadable.boardCode) - .and().eq("no", loadable.no) - .query(); - - if (results.size() > 1) { - Log.w(TAG, "Multiple loadables found for where Loadable.equals() would return true"); - for (Loadable result : results) { - Log.w(TAG, result.toString()); - } - } - - Loadable result = results.isEmpty() ? null : results.get(0); - if (result == null) { - Log.d(TAG, "Creating loadable"); - helper.loadableDao.create(loadable); - result = loadable; - } else { - Log.d(TAG, "Loadable found in db"); - result.site = SiteRepository.forId(result.siteId); - result.board = result.site.board(result.boardCode); - } - - cachedLoadables.put(result, result); - return result; - } - } - }; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseManager.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseManager.java deleted file mode 100644 index 9e71946eb0..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseManager.java +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.database; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.os.Handler; -import android.os.Looper; -import android.support.annotation.NonNull; - -import com.j256.ormlite.dao.Dao; -import com.j256.ormlite.misc.TransactionManager; - -import org.floens.chan.Chan; -import org.floens.chan.utils.Logger; -import org.floens.chan.utils.Time; - -import java.sql.SQLException; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import de.greenrobot.event.EventBus; - -/** - * The central point for database related access.
- * All database queries are run on a single database thread, therefor all functions return a - * {@link Callable} that needs to be queued on either {@link #runTaskAsync(Callable)}, - * {@link #runTaskAsync(Callable, TaskResult)} or {@link #runTask(Callable)}.
- * You often want the sync flavour for queries that return data, it waits for the task to be finished on the other thread.
- * Use the async versions when you don't care when the query is done. - */ -@Singleton -public class DatabaseManager { - private static final String TAG = "DatabaseManager"; - - private final ExecutorService backgroundExecutor; - private Thread executorThread; - private final DatabaseHelper helper; - - private final DatabasePinManager databasePinManager; - private final DatabaseLoadableManager databaseLoadableManager; - private final DatabaseHistoryManager databaseHistoryManager; - private final DatabaseSavedReplyManager databaseSavedReplyManager; - private final DatabaseFilterManager databaseFilterManager; - private final DatabaseBoardManager databaseBoardManager; - private final DatabaseSiteManager databaseSiteManager; - private final DatabaseHideManager databaseHideManager; - - @Inject - public DatabaseManager(Context context) { - backgroundExecutor = new ThreadPoolExecutor( - 1, 1, - 1000L, TimeUnit.DAYS, - new LinkedBlockingQueue<>()); - - helper = new DatabaseHelper(context); - - // Immediately trigger onUpgrade if necessary. - SQLiteDatabase writableDatabase = helper.getWritableDatabase(); - writableDatabase.close(); - - databaseLoadableManager = new DatabaseLoadableManager(this, helper); - databasePinManager = new DatabasePinManager(this, helper, databaseLoadableManager); - databaseHistoryManager = new DatabaseHistoryManager(this, helper, databaseLoadableManager); - databaseSavedReplyManager = new DatabaseSavedReplyManager(this, helper); - databaseFilterManager = new DatabaseFilterManager(this, helper); - databaseBoardManager = new DatabaseBoardManager(this, helper); - databaseSiteManager = new DatabaseSiteManager(this, helper); - databaseHideManager = new DatabaseHideManager(this, helper); - EventBus.getDefault().register(this); - } - - public void initializeAndTrim() { - // Loads data into fields. - runTask(databaseSavedReplyManager.load()); - - // Only trims. - runTaskAsync(databaseHistoryManager.load()); - runTaskAsync(databaseHideManager.load()); - } - - public DatabasePinManager getDatabasePinManager() { - return databasePinManager; - } - - public DatabaseLoadableManager getDatabaseLoadableManager() { - return databaseLoadableManager; - } - - public DatabaseHistoryManager getDatabaseHistoryManager() { - return databaseHistoryManager; - } - - public DatabaseSavedReplyManager getDatabaseSavedReplyManager() { - return databaseSavedReplyManager; - } - - public DatabaseFilterManager getDatabaseFilterManager() { - return databaseFilterManager; - } - - public DatabaseBoardManager getDatabaseBoardManager() { - return databaseBoardManager; - } - - public DatabaseSiteManager getDatabaseSiteManager() { - return databaseSiteManager; - } - - public DatabaseHideManager getDatabaseHideManager() { - return databaseHideManager; - } - // Called when the app changes foreground state - - public void onEvent(Chan.ForegroundChangedMessage message) { - if (!message.inForeground) { - runTaskAsync(databaseLoadableManager.flush()); - } - } - - /** - * Reset all tables in the database. Used for the developer screen. - */ - public void reset() { - helper.reset(); - initializeAndTrim(); - } - - /** - * Summary of the database tables row count, for the developer screen. - * - * @return list of all tables and their row count. - */ - public String getSummary() { - String o = ""; - - try { - o += "Loadable rows: " + helper.loadableDao.countOf() + "\n"; - o += "Pin rows: " + helper.pinDao.countOf() + "\n"; - o += "SavedReply rows: " + helper.savedDao.countOf() + "\n"; - o += "Board rows: " + helper.boardsDao.countOf() + "\n"; - o += "ThreadHide rows: " + helper.threadHideDao.countOf() + "\n"; - o += "History rows: " + helper.historyDao.countOf() + "\n"; - o += "Filter rows: " + helper.filterDao.countOf() + "\n"; - o += "Site rows: " + helper.siteDao.countOf() + "\n"; - } catch (SQLException e) { - e.printStackTrace(); - } - - return o; - } - - /** - * Trim a table with the specified trigger and trim count. - * - * @param dao {@link Dao} to use. - * @param table name of the table, used in the query (not escaped). - * @param trigger Trim if there are more rows than {@code trigger}. - * @param trim Count of rows to trim. - */ - /*package*/ void trimTable(Dao dao, String table, long trigger, long trim) { - try { - long count = dao.countOf(); - if (count > trigger) { - long start = Time.startTiming(); - dao.executeRaw("DELETE FROM " + table + " WHERE id IN (SELECT id FROM " + table + " ORDER BY id ASC LIMIT ?)", String.valueOf(trim)); - Time.endTiming("Trimmed " + table + " from " + count + " to " + dao.countOf() + " rows", start); - } - } catch (SQLException e) { - Logger.e(TAG, "Error trimming table " + table, e); - } - } - - public void runTaskAsync(final Callable taskCallable) { - runTaskAsync(taskCallable, result -> { - }); - } - - public void runTaskAsync(final Callable taskCallable, final TaskResult taskResult) { - executeTask(taskCallable, taskResult); - } - - public T runTask(final Callable taskCallable) { - try { - return executeTask(taskCallable, null).get(); - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } - } - - private Future executeTask(final Callable taskCallable, final TaskResult taskResult) { - if (Thread.currentThread() == executorThread) { - DatabaseCallable databaseCallable = new DatabaseCallable<>(taskCallable, taskResult); - T result = databaseCallable.call(); - - return new Future() { - @Override - public boolean cancel(boolean mayInterruptIfRunning) { - return false; - } - - @Override - public boolean isCancelled() { - return false; - } - - @Override - public boolean isDone() { - return true; - } - - @Override - public T get() throws InterruptedException, ExecutionException { - return result; - } - - @Override - public T get(long timeout, @NonNull TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { - return result; - } - }; - } else { - return backgroundExecutor.submit(new DatabaseCallable<>(taskCallable, taskResult)); - } - } - - private class DatabaseCallable implements Callable { - private final Callable taskCallable; - private final TaskResult taskResult; - - public DatabaseCallable(Callable taskCallable, TaskResult taskResult) { - this.taskCallable = taskCallable; - this.taskResult = taskResult; - } - - @Override - public T call() { - executorThread = Thread.currentThread(); - - try { - final T result = TransactionManager.callInTransaction(helper.getConnectionSource(), taskCallable); - if (taskResult != null) { - new Handler(Looper.getMainLooper()).post(() -> taskResult.onComplete(result)); - } - return result; - } catch (Exception e) { - Logger.e(TAG, "executeTask", e); - throw new RuntimeException(e); - } - } - } - - public interface TaskResult { - void onComplete(T result); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabasePinManager.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabasePinManager.java deleted file mode 100644 index 1002a6efa4..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabasePinManager.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.database; - -import org.floens.chan.core.model.orm.Pin; - -import java.util.List; -import java.util.concurrent.Callable; - -public class DatabasePinManager { - private static final String TAG = "DatabasePinManager"; - - private DatabaseManager databaseManager; - private DatabaseHelper helper; - private DatabaseLoadableManager databaseLoadableManager; - - public DatabasePinManager(DatabaseManager databaseManager, DatabaseHelper helper, DatabaseLoadableManager databaseLoadableManager) { - this.databaseManager = databaseManager; - this.helper = helper; - this.databaseLoadableManager = databaseLoadableManager; - } - - public Callable createPin(final Pin pin) { - if (pin.loadable.id == 0) { - throw new IllegalArgumentException("Pin loadable is not yet in the db"); - } - - return new Callable() { - @Override - public Pin call() throws Exception { - helper.pinDao.create(pin); - return pin; - } - }; - } - - public Callable deletePin(final Pin pin) { - return new Callable() { - @Override - public Void call() throws Exception { - helper.pinDao.delete(pin); - - return null; - } - }; - } - - public Callable updatePin(final Pin pin) { - return new Callable() { - @Override - public Pin call() throws Exception { - helper.pinDao.update(pin); - return pin; - } - }; - } - - public Callable> updatePins(final List pins) { - return new Callable>() { - @Override - public List call() throws Exception { - for (int i = 0; i < pins.size(); i++) { - Pin pin = pins.get(i); - helper.pinDao.update(pin); - } - - return null; - } - }; - } - - public Callable> getPins() { - return new Callable>() { - @Override - public List call() throws Exception { - List list = helper.pinDao.queryForAll(); - for (int i = 0; i < list.size(); i++) { - Pin p = list.get(i); - p.loadable = databaseLoadableManager.refreshForeign(p.loadable); - } - return list; - } - }; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseSavedReplyManager.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseSavedReplyManager.java deleted file mode 100644 index 49d38f523a..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseSavedReplyManager.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.database; - -import android.support.annotation.AnyThread; - -import com.j256.ormlite.stmt.QueryBuilder; -import com.j256.ormlite.table.TableUtils; - -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.SavedReply; -import org.floens.chan.core.repository.SiteRepository; -import org.floens.chan.utils.Time; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; - -/** - * Saved replies are posts-password combinations used to track what posts are posted by the app, - * and used to delete posts. - */ -public class DatabaseSavedReplyManager { - private static final String TAG = "DatabaseSavedReplyManager"; - - private static final long SAVED_REPLY_TRIM_TRIGGER = 250; - private static final long SAVED_REPLY_TRIM_COUNT = 50; - - private final DatabaseManager databaseManager; - private final DatabaseHelper helper; - - private final Map> savedRepliesByNo = new HashMap<>(); - - public DatabaseSavedReplyManager(DatabaseManager databaseManager, DatabaseHelper helper) { - this.databaseManager = databaseManager; - this.helper = helper; - } - - /** - * Check if the given board-no combination is in the database.
- * This is unlike other methods in that it immediately returns the result instead of - * a Callable. This method is thread-safe and optimized. - * - * @param board board of the post - * @param postNo post number - * @return {@code true} if the post is in the saved reply database, {@code false} otherwise. - */ - @AnyThread - public boolean isSaved(Board board, int postNo) { - synchronized (savedRepliesByNo) { - if (savedRepliesByNo.containsKey(postNo)) { - List items = savedRepliesByNo.get(postNo); - for (int i = 0; i < items.size(); i++) { - SavedReply item = items.get(i); - if (item.board.equals(board.code) && item.siteId == board.site.id()) { - return true; - } - } - return false; - } else { - return false; - } - } - } - - public Callable load() { - return () -> { - databaseManager.trimTable(helper.savedDao, "savedreply", - SAVED_REPLY_TRIM_TRIGGER, SAVED_REPLY_TRIM_COUNT); - - final List all = helper.savedDao.queryForAll(); - - synchronized (savedRepliesByNo) { - savedRepliesByNo.clear(); - for (int i = 0; i < all.size(); i++) { - SavedReply savedReply = all.get(i); - - savedReply.site = SiteRepository.forId(savedReply.siteId); - - List list = savedRepliesByNo.get(savedReply.no); - if (list == null) { - list = new ArrayList<>(1); - savedRepliesByNo.put(savedReply.no, list); - } - - list.add(savedReply); - } - } - return null; - }; - } - - public Callable clearSavedReplies() { - return () -> { - long start = Time.startTiming(); - TableUtils.clearTable(helper.getConnectionSource(), SavedReply.class); - synchronized (savedRepliesByNo) { - savedRepliesByNo.clear(); - } - Time.endTiming("Clear saved replies", start); - - return null; - }; - } - - public Callable saveReply(final SavedReply savedReply) { - return () -> { - helper.savedDao.create(savedReply); - synchronized (savedRepliesByNo) { - List list = savedRepliesByNo.get(savedReply.no); - if (list == null) { - list = new ArrayList<>(1); - savedRepliesByNo.put(savedReply.no, list); - } - - list.add(savedReply); - } - return savedReply; - }; - } - - public Callable findSavedReply(final Board board, final int no) { - return () -> { - QueryBuilder builder = helper.savedDao.queryBuilder(); - List query = builder.where() - .eq("site", board.site.id()) - .and().eq("board", board.code) - .and().eq("no", no).query(); - return query.isEmpty() ? null : query.get(0); - }; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseSiteManager.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseSiteManager.java deleted file mode 100644 index effa2a2709..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseSiteManager.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.database; - - -import com.j256.ormlite.stmt.QueryBuilder; - -import org.floens.chan.core.model.orm.SiteModel; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; - -public class DatabaseSiteManager { - private DatabaseManager databaseManager; - private DatabaseHelper helper; - - public DatabaseSiteManager(DatabaseManager databaseManager, DatabaseHelper helper) { - this.databaseManager = databaseManager; - this.helper = helper; - } - - public Callable byId(int id) { - return () -> helper.siteDao.queryForId(id); - } - - public Callable> getAll() { - return () -> helper.siteDao.queryForAll(); - } - - public Callable getCount() { - return () -> helper.siteDao.countOf(); - } - - public Callable add(final SiteModel site) { - return () -> { - helper.siteDao.create(site); - return site; - }; - } - - public Callable update(final SiteModel site) { - return () -> { - helper.siteDao.update(site); - return site; - }; - } - - public Callable updateId(final SiteModel site, final int newId) { - return () -> { - helper.siteDao.updateId(site, newId); - return site; - }; - } - - public Callable> getOrdering() { - return () -> { - QueryBuilder q = helper.siteDao.queryBuilder(); - q.selectColumns("id", "order"); - List modelsWithOrder = q.query(); - Map ordering = new HashMap<>(); - for (SiteModel siteModel : modelsWithOrder) { - ordering.put(siteModel.id, siteModel.order); - } - return ordering; - }; - } - - public Callable updateOrdering(final List siteIdsWithCorrectOrder) { - return () -> { - for (int i = 0; i < siteIdsWithCorrectOrder.size(); i++) { - Integer id = siteIdsWithCorrectOrder.get(i); - SiteModel m = helper.siteDao.queryForId(id); - m.order = i; - helper.siteDao.update(m); - } - return null; - }; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/LoadableProvider.java b/Clover/app/src/main/java/org/floens/chan/core/database/LoadableProvider.java deleted file mode 100644 index d98fd0bfe1..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/database/LoadableProvider.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.database; - -import org.floens.chan.core.model.orm.Loadable; - -import javax.inject.Inject; - -public class LoadableProvider { - private DatabaseManager databaseManager; - - @Inject - public LoadableProvider(DatabaseManager databaseManager) { - this.databaseManager = databaseManager; - } - - public Loadable get(Loadable definition) { - return databaseManager.getDatabaseLoadableManager().get(definition); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/di/AppModule.java b/Clover/app/src/main/java/org/floens/chan/core/di/AppModule.java deleted file mode 100644 index c553e90d92..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/di/AppModule.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.floens.chan.core.di; - -import android.content.Context; - -import com.android.volley.RequestQueue; -import com.android.volley.toolbox.ImageLoader; - -import org.codejargon.feather.Provides; -import org.floens.chan.core.net.BitmapLruImageCache; - -import javax.inject.Singleton; - -public class AppModule { - private Context applicationContext; - private UserAgentProvider userAgentProvider; - - public AppModule(Context applicationContext, UserAgentProvider userAgentProvider) { - this.applicationContext = applicationContext; - this.userAgentProvider = userAgentProvider; - } - - @Provides - @Singleton - public Context provideApplicationContext() { - return applicationContext; - } - - @Provides - @Singleton - public UserAgentProvider provideUserAgentProvider() { - return userAgentProvider; - } - - @Provides - @Singleton - public ImageLoader provideImageLoader(RequestQueue requestQueue) { - final int runtimeMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); - final int lruImageCacheSize = runtimeMemory / 8; - return new ImageLoader(requestQueue, new BitmapLruImageCache(lruImageCacheSize)); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/di/NetModule.java b/Clover/app/src/main/java/org/floens/chan/core/di/NetModule.java deleted file mode 100644 index 42fa72737d..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/di/NetModule.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.floens.chan.core.di; - -import android.content.Context; - -import com.android.volley.RequestQueue; -import com.android.volley.toolbox.Volley; - -import org.codejargon.feather.Provides; -import org.floens.chan.core.cache.FileCache; -import org.floens.chan.core.net.ProxiedHurlStack; - -import java.io.File; - -import javax.inject.Singleton; - -public class NetModule { - private static final int VOLLEY_CACHE_SIZE = 10 * 1024 * 1024; - private static final long FILE_CACHE_DISK_SIZE = 50 * 1024 * 1024; - private static final String FILE_CACHE_NAME = "filecache"; - - @Provides - @Singleton - public RequestQueue provideRequestQueue(Context applicationContext, UserAgentProvider userAgentProvider) { - File cacheDir = getCacheDir(applicationContext); - - String userAgent = userAgentProvider.getUserAgent(); - return Volley.newRequestQueue(applicationContext, - userAgent, - new ProxiedHurlStack(userAgent), - new File(cacheDir, Volley.DEFAULT_CACHE_DIR), VOLLEY_CACHE_SIZE); - } - - @Provides - @Singleton - public FileCache provideFileCache(Context applicationContext, UserAgentProvider userAgentProvider) { - return new FileCache(new File(getCacheDir(applicationContext), FILE_CACHE_NAME), FILE_CACHE_DISK_SIZE, userAgentProvider.getUserAgent()); - } - - private File getCacheDir(Context applicationContext) { - // See also res/xml/filepaths.xml for the fileprovider. - if (applicationContext.getExternalCacheDir() != null) { - return applicationContext.getExternalCacheDir(); - } else { - return applicationContext.getCacheDir(); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/di/UserAgentProvider.java b/Clover/app/src/main/java/org/floens/chan/core/di/UserAgentProvider.java deleted file mode 100644 index a050dc4523..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/di/UserAgentProvider.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.floens.chan.core.di; - -public interface UserAgentProvider { - String getUserAgent(); -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/exception/ChanLoaderException.java b/Clover/app/src/main/java/org/floens/chan/core/exception/ChanLoaderException.java deleted file mode 100644 index 755a38e417..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/exception/ChanLoaderException.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.exception; - -import com.android.volley.AuthFailureError; -import com.android.volley.NetworkError; -import com.android.volley.ParseError; -import com.android.volley.ServerError; -import com.android.volley.TimeoutError; -import com.android.volley.VolleyError; - -import org.floens.chan.R; - -import javax.net.ssl.SSLException; - -public class ChanLoaderException extends Exception { - private VolleyError volleyError; - - public ChanLoaderException(VolleyError volleyError) { - this.volleyError = volleyError; - } - - public ChanLoaderException() { - } - - public ChanLoaderException(String message) { - super(message); - } - - public ChanLoaderException(String message, Throwable cause) { - super(message, cause); - } - - public ChanLoaderException(Throwable cause) { - super(cause); - } - - public boolean isNotFound() { - return volleyError instanceof ServerError && isServerErrorNotFound((ServerError) volleyError); - } - - public int getErrorMessage() { - int errorMessage; - if (volleyError.getCause() instanceof SSLException) { - errorMessage = R.string.thread_load_failed_ssl; - } else if (volleyError instanceof NetworkError || - volleyError instanceof TimeoutError || - volleyError instanceof ParseError || - volleyError instanceof AuthFailureError) { - errorMessage = R.string.thread_load_failed_network; - } else if (volleyError instanceof ServerError) { - if (isServerErrorNotFound((ServerError) volleyError)) { - errorMessage = R.string.thread_load_failed_not_found; - } else { - errorMessage = R.string.thread_load_failed_server; - } - } else { - errorMessage = R.string.thread_load_failed_parsing; - } - return errorMessage; - } - - private boolean isServerErrorNotFound(ServerError serverError) { - return serverError.networkResponse != null && serverError.networkResponse.statusCode == 404; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/FilterEngine.java b/Clover/app/src/main/java/org/floens/chan/core/manager/FilterEngine.java deleted file mode 100644 index 3e28dc96d1..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/FilterEngine.java +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.manager; - -import android.support.annotation.AnyThread; -import android.text.TextUtils; - -import org.floens.chan.core.database.DatabaseFilterManager; -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Filter; -import org.floens.chan.ui.helper.BoardHelper; -import org.floens.chan.utils.Logger; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; - -import javax.inject.Inject; -import javax.inject.Singleton; - -@Singleton -public class FilterEngine { - private static final String TAG = "FilterEngine"; - - public enum FilterAction { - HIDE(0), - COLOR(1), - REMOVE(2); - - public final int id; - - FilterAction(int id) { - this.id = id; - } - - public static FilterAction forId(int id) { - return enums[id]; - } - - private static FilterAction[] enums = new FilterAction[3]; - - static { - for (FilterAction type : values()) { - enums[type.id] = type; - } - } - } - - private final DatabaseManager databaseManager; - private final BoardManager boardManager; - - private final DatabaseFilterManager databaseFilterManager; - - private final Map patternCache = new HashMap<>(); - private final List enabledFilters = new ArrayList<>(); - - @Inject - public FilterEngine(DatabaseManager databaseManager, BoardManager boardManager) { - this.databaseManager = databaseManager; - this.boardManager = boardManager; - databaseFilterManager = databaseManager.getDatabaseFilterManager(); - update(); - } - - public void deleteFilter(Filter filter) { - databaseManager.runTask(databaseFilterManager.deleteFilter(filter)); - update(); - } - - public void createOrUpdateFilter(Filter filter) { - if (filter.id == 0) { - databaseManager.runTask(databaseFilterManager.createFilter(filter)); - } else { - databaseManager.runTask(databaseFilterManager.updateFilter(filter)); - } - update(); - } - - public List getEnabledFilters() { - return enabledFilters; - } - - @AnyThread - public boolean matchesBoard(Filter filter, Board board) { - if (filter.allBoards || TextUtils.isEmpty(filter.boards)) { - return true; - } else { - for (String uniqueId : filter.boards.split(",")) { - if (BoardHelper.matchesUniqueId(board, uniqueId)) { - return true; - } - } - return false; - } - } - - public int getFilterBoardCount(Filter filter) { - if (filter.allBoards) { - return -1; - } else { - return filter.boards.split(",").length; - } - } - - public void saveBoardsToFilter(List appliedBoards, boolean all, Filter filter) { - filter.allBoards = all; - if (all) { - filter.boards = ""; - } else { - List boardsString = new ArrayList<>(appliedBoards.size()); - for (int i = 0; i < appliedBoards.size(); i++) { - boardsString.add(BoardHelper.boardUniqueId(appliedBoards.get(i))); - } - filter.boards = TextUtils.join(",", boardsString); - } - } - - @AnyThread - public boolean matches(Filter filter, Post.Builder post) { - if ((filter.type & FilterType.TRIPCODE.flag) != 0 && matches(filter, FilterType.TRIPCODE.isRegex, post.tripcode, false)) { - return true; - } - - if ((filter.type & FilterType.NAME.flag) != 0 && matches(filter, FilterType.NAME.isRegex, post.name, false)) { - return true; - } - - if ((filter.type & FilterType.COMMENT.flag) != 0 && matches(filter, FilterType.COMMENT.isRegex, post.comment.toString(), false)) { - return true; - } - - if ((filter.type & FilterType.ID.flag) != 0 && matches(filter, FilterType.ID.isRegex, post.posterId, false)) { - return true; - } - - if ((filter.type & FilterType.SUBJECT.flag) != 0 && matches(filter, FilterType.SUBJECT.isRegex, post.subject, false)) { - return true; - } - - if (post.images != null) { - StringBuilder filename = new StringBuilder(); - for (PostImage image : post.images) { - filename.append(image.filename).append(" "); - } - if ((filename.length() > 0) && (filter.type & FilterType.FILENAME.flag) != 0 && matches(filter, FilterType.FILENAME.isRegex, filename.toString(), false)) { - return true; - } - } - - return false; - } - - @AnyThread - public boolean matches(Filter filter, boolean matchRegex, String text, boolean forceCompile) { - if (TextUtils.isEmpty(text)) { - return false; - } - - if (matchRegex) { - Pattern pattern = null; - if (!forceCompile) { - synchronized (patternCache) { - pattern = patternCache.get(filter.pattern); - } - } - - if (pattern == null) { - pattern = compile(filter.pattern); - if (pattern != null) { - synchronized (patternCache) { - patternCache.put(filter.pattern, pattern); - } - Logger.d(TAG, "Resulting pattern: " + pattern.pattern()); - } - } - - if (pattern != null) { - Matcher matcher = pattern.matcher(text); - try { - return matcher.find(); - } catch (IllegalArgumentException e) { - Logger.w(TAG, "matcher.find() exception", e); - return false; - } - } else { - Logger.e(TAG, "Invalid pattern"); - return false; - } - } else { - return text.equals(filter.pattern); - } - } - - private static final Pattern isRegexPattern = Pattern.compile("^/(.*)/(i?)$"); - private static final Pattern filterFilthyPattern = Pattern.compile("(\\.|\\^|\\$|\\*|\\+|\\?|\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\||\\-)"); - private static final Pattern wildcardPattern = Pattern.compile("\\\\\\*"); // an escaped \ and an escaped *, to replace an escaped * from escapeRegex - - @AnyThread - public Pattern compile(String rawPattern) { - if (TextUtils.isEmpty(rawPattern)) { - return null; - } - - Pattern pattern; - - Matcher isRegex = isRegexPattern.matcher(rawPattern); - if (isRegex.matches()) { - // This is a /Pattern/ - String flagsGroup = isRegex.group(2); - int flags = 0; - if (flagsGroup.contains("i")) { - flags |= Pattern.CASE_INSENSITIVE; - } - - try { - pattern = Pattern.compile(isRegex.group(1), flags); - } catch (PatternSyntaxException e) { - return null; - } - } else if (rawPattern.length() >= 2 && rawPattern.charAt(0) == '"' && rawPattern.charAt(rawPattern.length() - 1) == '"') { - // "matches an exact sentence" - String text = escapeRegex(rawPattern.substring(1, rawPattern.length() - 1)); - pattern = Pattern.compile(text, Pattern.CASE_INSENSITIVE); - } else { - String[] words = rawPattern.split(" "); - String text = ""; - for (int i = 0, wordsLength = words.length; i < wordsLength; i++) { - String word = words[i]; - // Find a word (bounded by \b), replacing any * with \S* - text += "(\\b" + (wildcardPattern.matcher(escapeRegex(word)).replaceAll("\\\\S*")) + "\\b)"; - // Allow multiple words by joining them with | - if (i < words.length - 1) { - text += "|"; - } - } - - pattern = Pattern.compile(text, Pattern.CASE_INSENSITIVE); - } - - return pattern; - } - - private String escapeRegex(String filthy) { - return filterFilthyPattern.matcher(filthy).replaceAll("\\\\$1"); // Escape regex special characters with a \ - } - - private void update() { - List filters = databaseManager.runTask(databaseFilterManager.getFilters()); - List enabled = new ArrayList<>(); - for (Filter filter : filters) { - if (filter.enabled) { - enabled.add(filter); - } - } - - enabledFilters.clear(); - enabledFilters.addAll(enabled); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/FilterType.java b/Clover/app/src/main/java/org/floens/chan/core/manager/FilterType.java deleted file mode 100644 index 11654975ee..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/FilterType.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.manager; - -import java.util.ArrayList; -import java.util.List; - -public enum FilterType { - TRIPCODE(0x1, false), - NAME(0x2, false), - COMMENT(0x4, true), - ID(0x8, false), - SUBJECT(0x10, true), - FILENAME(0x20, true); - - public final int flag; - public final boolean isRegex; - - FilterType(int flag, boolean isRegex) { - this.flag = flag; - this.isRegex = isRegex; - } - - public static List forFlags(int flag) { - List enabledTypes = new ArrayList<>(); - for (FilterType filterType : values()) { - if ((filterType.flag & flag) != 0) { - enabledTypes.add(filterType); - } - } - return enabledTypes; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/ReplyManager.java b/Clover/app/src/main/java/org/floens/chan/core/manager/ReplyManager.java deleted file mode 100644 index 94735ce8c1..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/ReplyManager.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.manager; - -import android.content.Context; - -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.site.http.Reply; - -import java.io.File; -import java.util.HashMap; -import java.util.Map; - -import javax.inject.Inject; -import javax.inject.Singleton; - -/** - * Manages replies. - */ -@Singleton -public class ReplyManager { - private final Context context; - - private Map drafts = new HashMap<>(); - - @Inject - public ReplyManager(Context context) { - this.context = context; - } - - public Reply getReply(Loadable loadable) { - Reply reply = drafts.get(loadable); - if (reply == null) { - reply = new Reply(); - drafts.put(loadable, reply); - } - return reply; - } - - public void putReply(Loadable loadable, Reply reply) { - // Remove files from all other replies because there can only be one picked_file at the same time. - // Not doing this would be confusing and cause invalid fileNames. - for (Map.Entry entry : drafts.entrySet()) { - if (!entry.getKey().equals(loadable)) { - Reply value = entry.getValue(); - value.file = null; - value.fileName = ""; - } - } - - drafts.put(loadable, reply); - } - - public File getPickFile() { - return new File(context.getCacheDir(), "picked_file"); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java b/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java deleted file mode 100644 index 9ee4a05b7b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java +++ /dev/null @@ -1,836 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.manager; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.os.PowerManager; -import android.support.annotation.Nullable; - -import org.floens.chan.Chan; -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.database.DatabasePinManager; -import org.floens.chan.core.exception.ChanLoaderException; -import org.floens.chan.core.model.ChanThread; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.model.orm.Pin; -import org.floens.chan.core.pool.ChanLoaderFactory; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.core.site.loader.ChanThreadLoader; -import org.floens.chan.ui.helper.PostHelper; -import org.floens.chan.ui.service.WatchNotifier; -import org.floens.chan.utils.Logger; - -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.Map; -import java.util.Set; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import de.greenrobot.event.EventBus; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.utils.AndroidUtils.getAppContext; - -/** - * Manages all Pin related management. - *

- *

Pins are threads that are pinned to a pane on the left. - *

- *

The pin watcher is an optional feature that watches threads for new posts and displays a new - * post counter next to the pin view. Watching happens with the same backoff timer as used for - * the auto updater for open threads. - *

- *

Background watching is a feature that can be enabled. With background watching enabled then - * the PinManager will register an AlarmManager to check for updates in intervals. It will acquire - * a wakelock shortly while checking for updates. - *

- *

All pin adding and removing must go through this class to properly update the watchers. - */ -@Singleton -public class WatchManager { - private static final String TAG = "WatchManager"; - - private enum IntervalType { - /** - * A timer that uses a {@link Handler} that calls {@link #update(boolean)} every {@value #FOREGROUND_INTERVAL}ms. - */ - FOREGROUND, - - /** - * A timer that schedules a broadcast to be send that calls {@link #update(boolean)}. - */ - BACKGROUND, - - /** - * No scheduling. - */ - NONE - } - - public static final int DEFAULT_BACKGROUND_INTERVAL = 15 * 60 * 1000; - - private static final long FOREGROUND_INTERVAL = 15 * 1000; - private static final int MESSAGE_UPDATE = 1; - private static final int REQUEST_CODE_WATCH_UPDATE = 2; - private static final String WATCHER_UPDATE_ACTION = "org.floens.chan.intent.action.WATCHER_UPDATE"; - private static final String WAKELOCK_TAG = "WatchManagerUpdateLock"; - private static final long WAKELOCK_MAX_TIME = 60 * 1000; - private static final long BACKGROUND_UPDATE_MIN_DELAY = 90 * 1000; - - private static final Comparator SORT_PINS = new Comparator() { - @Override - public int compare(Pin lhs, Pin rhs) { - return lhs.order - rhs.order; - } - }; - - ChanLoaderFactory chanLoaderFactory; - - private final AlarmManager alarmManager; - private final PowerManager powerManager; - - private final List pins; - private final DatabaseManager databaseManager; - private final DatabasePinManager databasePinManager; - - private final Handler handler; - - private IntervalType currentInterval = IntervalType.NONE; - - private Map pinWatchers = new HashMap<>(); - - private Set waitingForPinWatchersForBackgroundUpdate; - private PowerManager.WakeLock wakeLock; - private long lastBackgroundUpdateTime; - - @Inject - public WatchManager(DatabaseManager databaseManager, ChanLoaderFactory chanLoaderFactory) { - alarmManager = (AlarmManager) getAppContext().getSystemService(Context.ALARM_SERVICE); - powerManager = (PowerManager) getAppContext().getSystemService(Context.POWER_SERVICE); - - this.databaseManager = databaseManager; - this.chanLoaderFactory = chanLoaderFactory; - - databasePinManager = databaseManager.getDatabasePinManager(); - pins = databaseManager.runTask(databasePinManager.getPins()); - Collections.sort(pins, SORT_PINS); - - handler = new Handler(Looper.getMainLooper(), new Handler.Callback() { - @Override - public boolean handleMessage(Message msg) { - if (msg.what == MESSAGE_UPDATE) { - update(false); - return true; - } else { - return false; - } - } - }); - - EventBus.getDefault().register(this); - - updateState(); - } - - public boolean createPin(Loadable loadable) { - return createPin(loadable, null); - } - - public boolean createPin(Loadable loadable, @Nullable Post opPost) { - Pin pin = new Pin(); - pin.loadable = loadable; - pin.loadable.title = PostHelper.getTitle(opPost, loadable); - if (opPost != null) { - PostImage image = opPost.image(); - pin.thumbnailUrl = image == null ? "" : image.getThumbnailUrl().toString(); - } - return createPin(pin); - } - - public boolean createPin(Pin pin) { - // No duplicates - for (int i = 0; i < pins.size(); i++) { - Pin e = pins.get(i); - if (e.loadable.equals(pin.loadable)) { - return false; - } - } - - // Default order is 0. - if (pin.order < 0) { - pin.order = 0; - } - // Move all down one. - for (Pin p : pins) { - p.order++; - } - pins.add(pin); - sortListAndApplyOrders(); - - databaseManager.runTask(databasePinManager.createPin(pin)); - - // apply orders. - updatePinsInDatabase(); - - updateState(); - - EventBus.getDefault().post(new PinAddedMessage(pin)); - - return true; - } - - public void deletePin(Pin pin) { - pins.remove(pin); - - destroyPinWatcher(pin); - - databaseManager.runTask(databasePinManager.deletePin(pin)); - // Update the new orders - sortListAndApplyOrders(); - updatePinsInDatabase(); - - updateState(); - - EventBus.getDefault().post(new PinRemovedMessage(pin)); - } - - public void updatePin(Pin pin) { - databaseManager.runTask(databasePinManager.updatePin(pin)); - - updateState(); - - EventBus.getDefault().post(new PinChangedMessage(pin)); - } - - public Pin findPinByLoadable(Loadable other) { - for (int i = 0; i < pins.size(); i++) { - Pin pin = pins.get(i); - if (pin.loadable.equals(other)) { - return pin; - } - } - - return null; - } - - public Pin findPinById(int id) { - for (int i = 0; i < pins.size(); i++) { - Pin pin = pins.get(i); - if (pin.id == id) { - return pin; - } - } - - return null; - } - - public void reorder(List pins) { - for (int i = 0; i < pins.size(); i++) { - Pin pin = pins.get(i); - pin.order = i; - } - updatePinsInDatabase(); - } - - public List getAllPins() { - return pins; - } - - public List getWatchingPins() { - if (isWatchingSettingEnabled()) { - List l = new ArrayList<>(); - - for (int i = 0; i < pins.size(); i++) { - Pin p = pins.get(i); - if (p.watching) - l.add(p); - } - - return l; - } else { - return Collections.emptyList(); - } - } - - public void toggleWatch(Pin pin) { - pin.watching = !pin.watching; - - updateState(); - EventBus.getDefault().post(new PinChangedMessage(pin)); - } - - public void onBottomPostViewed(Pin pin) { - if (pin.watchNewCount >= 0) { - pin.watchLastCount = pin.watchNewCount; - } - - if (pin.quoteNewCount >= 0) { - pin.quoteLastCount = pin.quoteNewCount; - } - - PinWatcher pinWatcher = getPinWatcher(pin); - if (pinWatcher != null) { - pinWatcher.onViewed(); - } - - updatePin(pin); - } - - // Called when the app changes foreground state - public void onEvent(Chan.ForegroundChangedMessage message) { - updateState(); - if (!message.inForeground) { - updatePinsInDatabase(); - } - } - - public void onEvent(ChanSettings.SettingChanged settingChanged) { - if (settingChanged.setting == ChanSettings.watchBackground) { - onBackgroundWatchingChanged(ChanSettings.watchBackground.get()); - } else if (settingChanged.setting == ChanSettings.watchEnabled) { - onWatchEnabledChanged(ChanSettings.watchEnabled.get()); - } - } - - // Called when the broadcast scheduled by the alarmmanager was received - public void onBroadcastReceived() { - if (currentInterval != IntervalType.BACKGROUND) { - Logger.e(TAG, "Received a broadcast for a watchmanager update, but the current state is not BACKGROUND. Ignoring the broadcast."); - } else if (System.currentTimeMillis() - lastBackgroundUpdateTime < BACKGROUND_UPDATE_MIN_DELAY) { - Logger.w(TAG, "Background update broadcast ignored because it was requested too soon"); - } else { - lastBackgroundUpdateTime = System.currentTimeMillis(); - update(true); - } - } - - // Called from the button on the notification - public void pauseAll() { - List watchingPins = getWatchingPins(); - for (int i = 0; i < watchingPins.size(); i++) { - Pin pin = watchingPins.get(i); - pin.watching = false; - } - - updateState(); - updatePinsInDatabase(); - - List allPins = getAllPins(); - for (int i = 0; i < allPins.size(); i++) { - Pin pin = allPins.get(i); - EventBus.getDefault().post(new PinChangedMessage(pin)); - } - } - - // Clear all non watching pins or all pins - // Returns a list of pins that can later be given to addAll - // to undo the clearing - public List clearPins(boolean all) { - List toRemove = new ArrayList<>(); - for (int i = 0; i < pins.size(); i++) { - Pin pin = pins.get(i); - - if (all) { - toRemove.add(pin); - } else { - if (isWatchingSettingEnabled()) { - if (!pin.watching) { - toRemove.add(pin); - } - } else { - if (pin.archived || pin.isError) { - toRemove.add(pin); - } - } - } - } - - List undo = new ArrayList<>(toRemove.size()); - for (int i = 0; i < toRemove.size(); i++) { - Pin pin = toRemove.get(i); - undo.add(pin.copy()); - } - - for (int i = 0; i < toRemove.size(); i++) { - Pin pin = toRemove.get(i); - deletePin(pin); - } - - return undo; - } - - public void addAll(List pins) { - Collections.sort(pins, SORT_PINS); - for (int i = 0; i < pins.size(); i++) { - Pin pin = pins.get(i); - createPin(pin); - } - } - - public PinWatcher getPinWatcher(Pin pin) { - return pinWatchers.get(pin); - } - - // Called when the user changes the watch enabled preference - private void onWatchEnabledChanged(boolean watchEnabled) { - updateState(watchEnabled, isBackgroundWatchingSettingEnabled()); - List pins = getAllPins(); - for (int i = 0; i < pins.size(); i++) { - Pin pin = pins.get(i); - EventBus.getDefault().post(new PinChangedMessage(pin)); - } - } - - // Called when the user changes the watch background enabled preference - private void onBackgroundWatchingChanged(boolean backgroundEnabled) { - updateState(isTimerEnabled(), backgroundEnabled); - List pins = getAllPins(); - for (int i = 0; i < pins.size(); i++) { - Pin pin = pins.get(i); - EventBus.getDefault().post(new PinChangedMessage(pin)); - } - } - - private void sortListAndApplyOrders() { - Collections.sort(pins, SORT_PINS); - for (int i = 0; i < pins.size(); i++) { - Pin pin = pins.get(i); - pin.order = i; - } - } - - private boolean createPinWatcher(Pin pin) { - if (!pinWatchers.containsKey(pin)) { - pinWatchers.put(pin, new PinWatcher(pin)); - return true; - } else { - return false; - } - } - - private boolean destroyPinWatcher(Pin pin) { - PinWatcher pinWatcher = pinWatchers.remove(pin); - if (pinWatcher != null) { - pinWatcher.destroy(); - } - return pinWatcher != null; - } - - private void updatePinsInDatabase() { - databaseManager.runTaskAsync(databasePinManager.updatePins(pins)); - } - - private Boolean isWatchingSettingEnabled() { - return ChanSettings.watchEnabled.get(); - } - - private boolean isBackgroundWatchingSettingEnabled() { - return ChanSettings.watchBackground.get(); - } - - private boolean isInForeground() { - return Chan.getInstance().getApplicationInForeground(); - } - - private boolean isTimerEnabled() { - return !getWatchingPins().isEmpty(); - } - - private int getBackgroundIntervalSetting() { - return ChanSettings.watchBackgroundInterval.get(); - } - - private void updateState() { - updateState(isTimerEnabled(), isBackgroundWatchingSettingEnabled()); - } - - // Update the interval type, according to the current settings, - // creates and destroys the PinWatchers where needed and - // updates the notification. - private void updateState(boolean watchEnabled, boolean backgroundEnabled) { - Logger.d(TAG, "updateState watchEnabled=" + watchEnabled + " backgroundEnabled=" + backgroundEnabled + " foreground=" + isInForeground()); - - IntervalType intervalType; - if (!watchEnabled) { - intervalType = IntervalType.NONE; - } else { - if (isInForeground()) { - intervalType = IntervalType.FOREGROUND; - } else { - if (backgroundEnabled) { - intervalType = IntervalType.BACKGROUND; - } else { - intervalType = IntervalType.NONE; - } - } - } - - // Changing interval type, like when watching is disabled or the app goes to the background - if (currentInterval != intervalType) { - // Handle the preview state - switch (currentInterval) { - case FOREGROUND: - // Stop receiving handler messages - handler.removeMessages(MESSAGE_UPDATE); - break; - case BACKGROUND: - // Stop the scheduled broadcast - scheduleAlarmManager(false); - break; - case NONE: - // Nothing to do when no timer was set. - break; - } - - Logger.d(TAG, "Setting interval type from " + currentInterval.name() + " to " + intervalType.name()); - currentInterval = intervalType; - - switch (currentInterval) { - case FOREGROUND: - // Schedule a delayed handler that will call update(false) - handler.sendMessageDelayed(handler.obtainMessage(MESSAGE_UPDATE), FOREGROUND_INTERVAL); - break; - case BACKGROUND: - // Schedule an intervaled broadcast receiver - scheduleAlarmManager(true); - break; - case NONE: - // Nothing to do when no timer is set. - break; - } - } - - // Update pin watchers - boolean isWatchingSettingEnabled = isWatchingSettingEnabled(); - for (int i = 0; i < pins.size(); i++) { - Pin pin = pins.get(i); - if (isWatchingSettingEnabled) { - createPinWatcher(pin); - } else { - destroyPinWatcher(pin); - } - } - - // Update notification state - if (watchEnabled && backgroundEnabled) { - // Also calls onStartCommand, which updates the notification with new info - getAppContext().startService(new Intent(getAppContext(), WatchNotifier.class)); - } else { - getAppContext().stopService(new Intent(getAppContext(), WatchNotifier.class)); - } - } - - // Schedule a broadcast that calls WatchUpdateReceiver.onReceive() if enabled is true, - // and unschedules it when false - private void scheduleAlarmManager(boolean enable) { - Intent intent = new Intent(WATCHER_UPDATE_ACTION); - PendingIntent pendingIntent = PendingIntent.getBroadcast(getAppContext(), REQUEST_CODE_WATCH_UPDATE, intent, 0); - if (enable) { - int interval = getBackgroundIntervalSetting(); - Logger.d(TAG, "Scheduled for an inexact repeating broadcast receiver with an interval of " + (interval / 1000 / 60) + " minutes"); - alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, interval, interval, pendingIntent); - } else { - Logger.d(TAG, "Unscheduled the repeating broadcast receiver"); - alarmManager.cancel(pendingIntent); - } - } - - // Update the watching pins - private void update(boolean fromBackground) { - Logger.d(TAG, "update() fromBackground = " + fromBackground); - - switch (currentInterval) { - case FOREGROUND: - // reschedule handler message - handler.sendMessageDelayed(handler.obtainMessage(MESSAGE_UPDATE), FOREGROUND_INTERVAL); - break; - case BACKGROUND: - // AlarmManager is scheduled as an interval - break; - } - - // A set of watchers that all have to complete being updated - // before the wakelock is released again - waitingForPinWatchersForBackgroundUpdate = null; - if (fromBackground) { - waitingForPinWatchersForBackgroundUpdate = new HashSet<>(); - } - - List watchingPins = getWatchingPins(); - for (int i = 0; i < watchingPins.size(); i++) { - Pin pin = watchingPins.get(i); - PinWatcher pinWatcher = getPinWatcher(pin); - if (pinWatcher != null && pinWatcher.update(fromBackground)) { - EventBus.getDefault().post(new PinChangedMessage(pin)); - - if (fromBackground) { - waitingForPinWatchersForBackgroundUpdate.add(pinWatcher); - } - } - } - - if (fromBackground && !waitingForPinWatchersForBackgroundUpdate.isEmpty()) { - Logger.i(TAG, "Acquiring wakelock for pin watcher updates"); - manageLock(true); - } - } - - private void pinWatcherUpdated(PinWatcher pinWatcher) { - updateState(); - EventBus.getDefault().post(new PinChangedMessage(pinWatcher.pin)); - - if (waitingForPinWatchersForBackgroundUpdate != null) { - waitingForPinWatchersForBackgroundUpdate.remove(pinWatcher); - - if (waitingForPinWatchersForBackgroundUpdate.isEmpty()) { - Logger.i(TAG, "All watchers updated, removing wakelock"); - waitingForPinWatchersForBackgroundUpdate = null; - manageLock(false); - } - } - } - - private void manageLock(boolean lock) { - if (lock) { - if (wakeLock != null) { - Logger.e(TAG, "Wakelock not null while trying to acquire one"); - if (wakeLock.isHeld()) { - wakeLock.release(); - } - wakeLock = null; - } - wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG); - wakeLock.setReferenceCounted(false); - wakeLock.acquire(WAKELOCK_MAX_TIME); - } else { - if (wakeLock == null) { - Logger.e(TAG, "Wakelock null while trying to release it"); - } else { - if (wakeLock.isHeld()) { - wakeLock.release(); - } - wakeLock = null; - } - } - } - - public static class PinAddedMessage { - public Pin pin; - - public PinAddedMessage(Pin pin) { - this.pin = pin; - } - } - - public static class PinRemovedMessage { - public Pin pin; - - public PinRemovedMessage(Pin pin) { - this.pin = pin; - } - } - - public static class PinChangedMessage { - public Pin pin; - - public PinChangedMessage(Pin pin) { - this.pin = pin; - } - } - - public class PinWatcher implements ChanThreadLoader.ChanLoaderCallback { - private static final String TAG = "PinWatcher"; - - private final Pin pin; - private ChanThreadLoader chanLoader; - - private final List posts = new ArrayList<>(); - private final List quotes = new ArrayList<>(); - private boolean wereNewQuotes = false; - private boolean wereNewPosts = false; - - public PinWatcher(Pin pin) { - this.pin = pin; - inject(this); - - Logger.d(TAG, "PinWatcher: created for " + pin); - chanLoader = chanLoaderFactory.obtain(pin.loadable, this); - } - - public List getUnviewedPosts() { - if (posts.size() == 0) { - return posts; - } else { - return posts.subList(Math.max(0, posts.size() - pin.getNewPostCount()), posts.size()); - } - } - - public List getUnviewedQuotes() { - return quotes.subList(Math.max(0, quotes.size() - pin.getNewQuoteCount()), quotes.size()); - } - - public boolean getWereNewQuotes() { - if (wereNewQuotes) { - wereNewQuotes = false; - return true; - } else { - return false; - } - } - - public boolean getWereNewPosts() { - if (wereNewPosts) { - wereNewPosts = false; - return true; - } else { - return false; - } - } - - private void destroy() { - if (chanLoader != null) { - Logger.d(TAG, "PinWatcher: destroyed for " + pin); - chanLoaderFactory.release(chanLoader, this); - chanLoader = null; - } - } - - private void onViewed() { - wereNewPosts = false; - wereNewQuotes = false; - } - - private boolean update(boolean fromBackground) { - if (!pin.isError && pin.watching) { - if (fromBackground) { - // Always load regardless of timer, since the time left is not accurate for 15min+ intervals - chanLoader.clearTimer(); - chanLoader.requestMoreData(); - return true; - } else { - // true if a load was started - return chanLoader.loadMoreIfTime(); - } - } else { - return false; - } - } - - @Override - public void onChanLoaderError(ChanLoaderException error) { - // Ignore normal network errors, we only pause pins when there is absolutely no way - // we'll ever need watching again: a 404. - if (error.isNotFound()) { - pin.isError = true; - pin.watching = false; - } - - pinWatcherUpdated(this); - } - - @Override - public void onChanLoaderData(ChanThread thread) { - pin.isError = false; - - if (pin.thumbnailUrl == null && thread.op != null && thread.op.image() != null) { - pin.thumbnailUrl = thread.op.image().getThumbnailUrl().toString(); - } - - // Populate posts list - posts.clear(); - posts.addAll(thread.posts); - - // Populate quotes list - quotes.clear(); - - // Get list of saved replies from this thread - List savedReplies = new ArrayList<>(); - for (Post item : thread.posts) { - // saved.title = pin.loadable.title; - - if (item.isSavedReply) { - savedReplies.add(item); - } - } - - // Now get a list of posts that have a quote to a saved reply - for (Post post : thread.posts) { - for (Post saved : savedReplies) { - if (post.repliesTo.contains(saved.no)) { - quotes.add(post); - } - } - } - - boolean isFirstLoad = pin.watchNewCount < 0 || pin.quoteNewCount < 0; - - // If it was more than before processing - int lastWatchNewCount = pin.watchNewCount; - int lastQuoteNewCount = pin.quoteNewCount; - - if (isFirstLoad) { - pin.watchLastCount = posts.size(); - pin.quoteLastCount = quotes.size(); - } - - pin.watchNewCount = posts.size(); - pin.quoteNewCount = quotes.size(); - - if (!isFirstLoad) { - // There were new posts after processing - if (pin.watchNewCount > lastWatchNewCount) { - wereNewPosts = true; - } - - // There were new quotes after processing - if (pin.quoteNewCount > lastQuoteNewCount) { - wereNewQuotes = true; - } - } - - if (Logger.debugEnabled()) { - Logger.d(TAG, String.format(Locale.ENGLISH, - "postlast=%d postnew=%d werenewposts=%b quotelast=%d quotenew=%d werenewquotes=%b nextload=%ds", - pin.watchLastCount, pin.watchNewCount, wereNewPosts, pin.quoteLastCount, - pin.quoteNewCount, wereNewQuotes, chanLoader.getTimeUntilLoadMore() / 1000)); - } - - if (thread.archived || thread.closed) { - pin.archived = true; - pin.watching = false; - } - - pinWatcherUpdated(this); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/Archive.java b/Clover/app/src/main/java/org/floens/chan/core/model/Archive.java deleted file mode 100644 index 08709ab524..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/Archive.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model; - -import java.util.List; - -public class Archive { - public final List items; - - public static Archive fromItems(List items) { - return new Archive(items); - } - - private Archive(List items) { - this.items = items; - } - - public static class ArchiveItem { - public final String description; - - public final int id; - - public static ArchiveItem fromDescriptionId(String description, int id) { - return new ArchiveItem(description, id); - } - - private ArchiveItem(String description, int id) { - this.description = description; - this.id = id; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/BoardReference.java b/Clover/app/src/main/java/org/floens/chan/core/model/BoardReference.java deleted file mode 100644 index a3aadad606..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/BoardReference.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model; - - -import org.floens.chan.core.model.orm.Board; - -public interface BoardReference { - /** - * Get the Board object that this model references. - * - * @return a {@link Board} - */ - Board getBoard(); -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/ChanThread.java b/Clover/app/src/main/java/org/floens/chan/core/model/ChanThread.java deleted file mode 100644 index 134c2edad9..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/ChanThread.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model; - -import org.floens.chan.core.model.orm.Loadable; - -import java.util.List; - -public class ChanThread { - public Loadable loadable; - public List posts; - public Post op; - public boolean closed = false; - public boolean archived = false; - - public ChanThread(Loadable loadable, List posts) { - this.loadable = loadable; - this.posts = posts; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/Post.java b/Clover/app/src/main/java/org/floens/chan/core/model/Post.java deleted file mode 100644 index 66384b5e69..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/Post.java +++ /dev/null @@ -1,434 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model; - -import android.support.annotation.MainThread; - -import org.floens.chan.core.model.orm.Board; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; - -/** - * Contains all data needed to represent a single post.
- * All {@code final} fields are thread-safe. - */ -public class Post { - public final String boardId; - - public final Board board; - - public final int no; - - public final boolean isOP; - -// public final String date; - - public final String name; - - public final CharSequence comment; - - public final String subject; - - /** - * Unix timestamp, in seconds. - */ - public final long time; - - public final List images; - - public final String tripcode; - - public final String id; - - public final String capcode; - - public final List httpIcons; - - public final boolean isSavedReply; - - public final int filterHighlightedColor; - - public final boolean filterStub; - - public final boolean filterRemove; - - /** - * This post replies to the these ids. - */ - public final Set repliesTo; - - public final List linkables; - - public final CharSequence subjectSpan; - - public final CharSequence nameTripcodeIdCapcodeSpan; - - /** - * This post has been deleted (the server isn't sending it anymore). - *

This boolean is modified in worker threads, use {@code .get()} to access it. - */ - public final AtomicBoolean deleted = new AtomicBoolean(false); - - /** - * These ids replied to this post. - *

Manual synchronization is needed, since this list can be modified from any thread. - * Wrap all accesses in a {@code synchronized} block. - */ - public final List repliesFrom = new ArrayList<>(); - - // These members may only mutate on the main thread. - private boolean sticky; - private boolean closed; - private boolean archived; - private int replies; - private int imagesCount; - private int uniqueIps; - private long lastModified; - private String title = ""; - - private Post(Builder builder) { - board = builder.board; - boardId = builder.board.code; - no = builder.id; - - isOP = builder.op; - replies = builder.replies; - imagesCount = builder.imagesCount; - uniqueIps = builder.uniqueIps; - lastModified = builder.lastModified; - sticky = builder.sticky; - closed = builder.closed; - archived = builder.archived; - - subject = builder.subject; - name = builder.name; - comment = builder.comment; - tripcode = builder.tripcode; - - time = builder.unixTimestampSeconds; - if (builder.images == null) { - images = Collections.emptyList(); - } else { - images = Collections.unmodifiableList(builder.images); - } - - if (builder.httpIcons != null) { - httpIcons = Collections.unmodifiableList(builder.httpIcons); - } else { - httpIcons = null; - } - - id = builder.posterId; - capcode = builder.moderatorCapcode; - - filterHighlightedColor = builder.filterHighlightedColor; - filterStub = builder.filterStub; - filterRemove = builder.filterRemove; - - isSavedReply = builder.isSavedReply; - - subjectSpan = builder.subjectSpan; - nameTripcodeIdCapcodeSpan = builder.nameTripcodeIdCapcodeSpan; - - linkables = Collections.unmodifiableList(builder.linkables); - repliesTo = Collections.unmodifiableSet(builder.repliesToIds); - } - - @MainThread - public boolean isSticky() { - return sticky; - } - - @MainThread - public void setSticky(boolean sticky) { - this.sticky = sticky; - } - - @MainThread - public boolean isClosed() { - return closed; - } - - @MainThread - public void setClosed(boolean closed) { - this.closed = closed; - } - - @MainThread - public boolean isArchived() { - return archived; - } - - @MainThread - public void setArchived(boolean archived) { - this.archived = archived; - } - - @MainThread - public int getReplies() { - return replies; - } - - @MainThread - public void setReplies(int replies) { - this.replies = replies; - } - - @MainThread - public int getImagesCount() { - return imagesCount; - } - - @MainThread - public void setImagesCount(int imagesCount) { - this.imagesCount = imagesCount; - } - - @MainThread - public int getUniqueIps() { - return uniqueIps; - } - - @MainThread - public void setUniqueIps(int uniqueIps) { - this.uniqueIps = uniqueIps; - } - - @MainThread - public long getLastModified() { - return lastModified; - } - - @MainThread - public void setLastModified(long lastModified) { - this.lastModified = lastModified; - } - - @MainThread - public String getTitle() { - return title; - } - - @MainThread - public void setTitle(String title) { - this.title = title; - } - - /** - * Return the first image, or {@code null} if post has no images. - * - * @return the first image, or {@code null} - */ - @MainThread - public PostImage image() { - return images.isEmpty() ? null : images.get(0); - } - - public static final class Builder { - public Board board; - public int id = -1; - public int opId = -1; - - public boolean op; - public int replies = -1; - public int imagesCount = -1; - public int uniqueIps = -1; - public boolean sticky; - public boolean closed; - public boolean archived; - public long lastModified = -1L; - - public String subject = ""; - public String name = ""; - public CharSequence comment = ""; - public String tripcode = ""; - - public long unixTimestampSeconds = -1L; - public List images; - - public List httpIcons; - - public String posterId = ""; - public String moderatorCapcode = ""; - - public int filterHighlightedColor; - public boolean filterStub; - public boolean filterRemove; - - public boolean isSavedReply; - - public CharSequence subjectSpan; - public CharSequence nameTripcodeIdCapcodeSpan; - - private List linkables = new ArrayList<>(); - private Set repliesToIds = new HashSet<>(); - - public Builder() { - } - - public Builder board(Board board) { - this.board = board; - return this; - } - - public Builder id(int id) { - this.id = id; - return this; - } - - public Builder opId(int opId) { - this.opId = opId; - return this; - } - - public Builder op(boolean op) { - this.op = op; - return this; - } - - public Builder replies(int replies) { - this.replies = replies; - return this; - } - - public Builder images(int images) { - this.imagesCount = images; - return this; - } - - public Builder uniqueIps(int uniqueIps) { - this.uniqueIps = uniqueIps; - return this; - } - - public Builder sticky(boolean sticky) { - this.sticky = sticky; - return this; - } - - public Builder archived(boolean archived) { - this.archived = archived; - return this; - } - - public Builder lastModified(long lastModified) { - this.lastModified = lastModified; - return this; - } - - public Builder closed(boolean closed) { - this.closed = closed; - return this; - } - - public Builder subject(String subject) { - this.subject = subject; - return this; - } - - public Builder name(String name) { - this.name = name; - return this; - } - - public Builder comment(String comment) { - this.comment = comment; - return this; - } - - public Builder tripcode(String tripcode) { - this.tripcode = tripcode; - return this; - } - - public Builder setUnixTimestampSeconds(long unixTimestampSeconds) { - this.unixTimestampSeconds = unixTimestampSeconds; - return this; - } - - public Builder images(List images) { - if (this.images == null) { - this.images = new ArrayList<>(images.size()); - } - - this.images.addAll(images); - - return this; - } - - public Builder posterId(String posterId) { - this.posterId = posterId; - return this; - } - - public Builder moderatorCapcode(String moderatorCapcode) { - this.moderatorCapcode = moderatorCapcode; - return this; - } - - public Builder addHttpIcon(PostHttpIcon httpIcon) { - if (httpIcons == null) { - httpIcons = new ArrayList<>(); - } - httpIcons.add(httpIcon); - - return this; - } - - public Builder filter(int highlightedColor, boolean stub, boolean remove) { - filterHighlightedColor = highlightedColor; - filterStub = stub; - filterRemove = remove; - return this; - } - - public Builder isSavedReply(boolean isSavedReply) { - this.isSavedReply = isSavedReply; - return this; - } - - public Builder spans(CharSequence subjectSpan, CharSequence nameTripcodeIdCapcodeSpan) { - this.subjectSpan = subjectSpan; - this.nameTripcodeIdCapcodeSpan = nameTripcodeIdCapcodeSpan; - return this; - } - - public Builder addLinkable(PostLinkable linkable) { - linkables.add(linkable); - return this; - } - - public Builder addReplyTo(int postId) { - repliesToIds.add(postId); - return this; - } - - public Post build() { - if (board == null || id < 0 || opId < 0 || unixTimestampSeconds < 0 || comment == null) { - throw new IllegalArgumentException("Post data not complete"); - } - - return new Post(this); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/PostHttpIcon.java b/Clover/app/src/main/java/org/floens/chan/core/model/PostHttpIcon.java deleted file mode 100644 index 3ddbf0b726..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/PostHttpIcon.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model; - - -import okhttp3.HttpUrl; - -public class PostHttpIcon { - public final HttpUrl url; - public final String name; - - public PostHttpIcon(HttpUrl url, String name) { - this.url = url; - this.name = name; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/PostImage.java b/Clover/app/src/main/java/org/floens/chan/core/model/PostImage.java deleted file mode 100644 index 28ced983fa..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/PostImage.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model; - -import org.floens.chan.core.settings.ChanSettings; - -import okhttp3.HttpUrl; - -public class PostImage { - public enum Type { - STATIC, GIF, MOVIE - } - - public final String originalName; - public final HttpUrl thumbnailUrl; - public final HttpUrl spoilerThumbnailUrl; - public final HttpUrl imageUrl; - public final String filename; - public final String extension; - public final int imageWidth; - public final int imageHeight; - public final boolean spoiler; - public final long size; - - public final Type type; - - private PostImage(Builder builder) { - this.originalName = builder.originalName; - this.thumbnailUrl = builder.thumbnailUrl; - this.spoilerThumbnailUrl = builder.spoilerThumbnailUrl; - this.imageUrl = builder.imageUrl; - this.filename = builder.filename; - this.extension = builder.extension; - this.imageWidth = builder.imageWidth; - this.imageHeight = builder.imageHeight; - this.spoiler = builder.spoiler; - this.size = builder.size; - - switch (extension) { - case "gif": - type = Type.GIF; - break; - case "webm": - case "mp4": - type = Type.MOVIE; - break; - default: - type = Type.STATIC; - break; - } - } - - public boolean equalUrl(PostImage other) { - return imageUrl.equals(other.imageUrl); - } - - public HttpUrl getThumbnailUrl() { - if (!spoiler) { - return thumbnailUrl; - } else { - return spoilerThumbnailUrl; - } - } - - public static final class Builder { - private String originalName; - private HttpUrl thumbnailUrl; - private HttpUrl spoilerThumbnailUrl; - private HttpUrl imageUrl; - private String filename; - private String extension; - private int imageWidth; - private int imageHeight; - private boolean spoiler; - private long size; - - public Builder() { - } - - public Builder originalName(String originalName) { - this.originalName = originalName; - return this; - } - - public Builder thumbnailUrl(HttpUrl thumbnailUrl) { - this.thumbnailUrl = thumbnailUrl; - return this; - } - - public Builder spoilerThumbnailUrl(HttpUrl spoilerThumbnailUrl) { - this.spoilerThumbnailUrl = spoilerThumbnailUrl; - return this; - } - - public Builder imageUrl(HttpUrl imageUrl) { - this.imageUrl = imageUrl; - return this; - } - - public Builder filename(String filename) { - this.filename = filename; - return this; - } - - public Builder extension(String extension) { - this.extension = extension; - return this; - } - - public Builder imageWidth(int imageWidth) { - this.imageWidth = imageWidth; - return this; - } - - public Builder imageHeight(int imageHeight) { - this.imageHeight = imageHeight; - return this; - } - - public Builder spoiler(boolean spoiler) { - this.spoiler = spoiler; - return this; - } - - public Builder size(long size) { - this.size = size; - return this; - } - - public PostImage build() { - if (ChanSettings.revealImageSpoilers.get()) { - spoiler = false; - } - - return new PostImage(this); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java b/Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java deleted file mode 100644 index ea93d1ce0b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model; - -import android.support.annotation.NonNull; -import android.text.TextPaint; -import android.text.style.ClickableSpan; -import android.view.View; - -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.cell.PostCell; -import org.floens.chan.ui.theme.Theme; - -/** - * A Clickable span that handles post clicks. These are created in PostParser for post quotes, spoilers etc.
- * PostCell has a {@link PostCell.PostViewMovementMethod}, that searches spans at the location the TextView was tapped, - * and handled if it was a PostLinkable. - */ -public class PostLinkable extends ClickableSpan { - public enum Type { - QUOTE, LINK, SPOILER, THREAD - } - - public final Theme theme; - public final CharSequence key; - public final Object value; - public final Type type; - - private boolean spoilerVisible = ChanSettings.revealTextSpoilers.get(); - private int markedNo = -1; - - public PostLinkable(Theme theme, CharSequence key, Object value, Type type) { - this.theme = theme; - this.key = key; - this.value = value; - this.type = type; - } - - @Override - public void onClick(View widget) { - spoilerVisible = !spoilerVisible; - } - - public void setMarkedNo(int markedNo) { - this.markedNo = markedNo; - } - - @Override - public void updateDrawState(@NonNull TextPaint ds) { - if (type == Type.QUOTE || type == Type.LINK || type == Type.THREAD) { - if (type == Type.QUOTE) { - if (value instanceof Integer && ((int) value) == markedNo) { - ds.setColor(theme.highlightQuoteColor); - } else { - ds.setColor(theme.quoteColor); - } - } else if (type == Type.LINK) { - ds.setColor(theme.linkColor); - } else { - ds.setColor(theme.quoteColor); - } - - ds.setUnderlineText(true); - } else if (type == Type.SPOILER) { - ds.bgColor = theme.spoilerColor; - ds.setUnderlineText(false); - if (!spoilerVisible) { - ds.setColor(theme.spoilerColor); - } else { - ds.setColor(theme.textColorRevealSpoiler); - } - } - } - - public static class ThreadLink { - public String board; - public int threadId; - public int postId; - - public ThreadLink(String board, int threadId, int postId) { - this.board = board; - this.threadId = threadId; - this.postId = postId; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/SiteReference.java b/Clover/app/src/main/java/org/floens/chan/core/model/SiteReference.java deleted file mode 100644 index fde8462074..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/SiteReference.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model; - - -import org.floens.chan.core.site.Site; - -public interface SiteReference { - /** - * Get the Site object that this model references. - * - * @return a {@link Site} - */ - Site getSite(); -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/json/site/SiteConfig.java b/Clover/app/src/main/java/org/floens/chan/core/model/json/site/SiteConfig.java deleted file mode 100644 index 83db7402b9..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/json/site/SiteConfig.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model.json.site; - -import com.google.gson.annotations.SerializedName; - -public class SiteConfig { - @SerializedName("external") - public boolean external; - - @SerializedName("internal_site_id") - public int classId; -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/orm/Board.java b/Clover/app/src/main/java/org/floens/chan/core/model/orm/Board.java deleted file mode 100644 index 09addf4249..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/orm/Board.java +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model.orm; - -import android.support.v4.util.ObjectsCompat; -import android.text.TextUtils; - -import com.j256.ormlite.field.DatabaseField; -import com.j256.ormlite.table.DatabaseTable; - -import org.floens.chan.core.model.SiteReference; -import org.floens.chan.core.site.Site; - -/** - * A board is something that can be browsed, it is unique by it's site and code. - */ -@DatabaseTable(tableName = "board") -public class Board implements SiteReference { - @DatabaseField(generatedId = true) - public int id; - - @DatabaseField(columnName = "site", index = true, indexName = "board_site_idx") - public int siteId; - - /** - * The site this board belongs to, loaded with {@link #siteId} in the database manager. - */ - public transient Site site; - - /** - * The board appears in the dropdown. - */ - @DatabaseField(index = true, indexName = "board_saved_idx") - public boolean saved = false; - - /** - * Order of the board in the dropdown, user-set. - */ - @DatabaseField - public int order; - - @DatabaseField(columnName = "key") // named key for legacy support - public String name; - - // named value for legacy support - @DatabaseField(columnName = "value", index = true, indexName = "board_value_idx") - // TODO(sec) force filter this to ascii & numbers. - public String code; - - @DatabaseField - public boolean workSafe = false; - - @DatabaseField - public int perPage = 15; - - @DatabaseField - public int pages = 10; - - @DatabaseField - public int maxFileSize = -1; - - @DatabaseField - public int maxWebmSize = -1; - - @DatabaseField - public int maxCommentChars = -1; - - @DatabaseField - public int bumpLimit = -1; - - @DatabaseField - public int imageLimit = -1; - - @DatabaseField - public int cooldownThreads = 0; - - @DatabaseField - public int cooldownReplies = 0; - - @DatabaseField - public int cooldownImages = 0; - - // unused, to be removed - @Deprecated - @DatabaseField - public int cooldownRepliesIntra = -1; - - // unused, to be removed - @Deprecated - @DatabaseField - public int cooldownImagesIntra = -1; - - @DatabaseField - public boolean spoilers = false; - - @DatabaseField - public int customSpoilers = -1; - - @DatabaseField - public boolean userIds = false; - - @DatabaseField - public boolean codeTags = false; - - @DatabaseField - public boolean preuploadCaptcha = false; - - @DatabaseField - public boolean countryFlags = false; - - @Deprecated - @DatabaseField - public boolean trollFlags = false; - - @DatabaseField - public boolean mathTags = false; - - @DatabaseField - public String description; - - @DatabaseField - public boolean archive = false; - - @Deprecated // public, at least - public Board() { - } - - @Deprecated - public Board(Site site, String name, String code, boolean saved, boolean workSafe) { - this.siteId = site.id(); - this.site = site; - this.name = name; - this.code = code; - this.saved = saved; - this.workSafe = workSafe; - } - - public static Board fromSiteNameCode(Site site, String name, String code) { - Board board = new Board(); - board.siteId = site.id(); - board.site = site; - board.name = name; - board.code = code; - return board; - } - - public boolean finish() { - if (TextUtils.isEmpty(name) || TextUtils.isEmpty(code) || perPage < 0 || pages < 0) { - return false; - } - - return true; - } - - @Override - public Site getSite() { - return site; - } - - public boolean siteCodeEquals(Board other) { - return code.equals(other.code) && other.siteId == siteId; - } - - /** - * Updates the board with data from {@code o}.
- * {@link #id}, {@link #saved}, {@link #order} are skipped because these are user-set. - * - * @param o other board to update from. - */ - public void updateExcludingUserFields(Board o) { - siteId = o.siteId; - site = o.site; - name = o.name; - code = o.code; - workSafe = o.workSafe; - perPage = o.perPage; - pages = o.pages; - maxFileSize = o.maxFileSize; - maxWebmSize = o.maxWebmSize; - maxCommentChars = o.maxCommentChars; - bumpLimit = o.bumpLimit; - imageLimit = o.imageLimit; - cooldownThreads = o.cooldownThreads; - cooldownReplies = o.cooldownReplies; - cooldownImages = o.cooldownImages; - cooldownRepliesIntra = o.cooldownRepliesIntra; - cooldownImagesIntra = o.cooldownImagesIntra; - spoilers = o.spoilers; - customSpoilers = o.customSpoilers; - userIds = o.userIds; - codeTags = o.codeTags; - preuploadCaptcha = o.preuploadCaptcha; - countryFlags = o.countryFlags; - trollFlags = o.trollFlags; - mathTags = o.mathTags; - description = o.description; - archive = o.archive; - } - - /** - * Creates a complete copy of this board. - * - * @return copy of this board. - */ - public Board copy() { - Board b = new Board(); - b.id = id; - b.siteId = siteId; - b.site = site; - b.name = name; - b.code = code; - b.saved = saved; - b.order = order; - b.workSafe = workSafe; - b.perPage = perPage; - b.pages = pages; - b.maxFileSize = maxFileSize; - b.maxWebmSize = maxWebmSize; - b.maxCommentChars = maxCommentChars; - b.bumpLimit = bumpLimit; - b.imageLimit = imageLimit; - b.cooldownThreads = cooldownThreads; - b.cooldownReplies = cooldownReplies; - b.cooldownImages = cooldownImages; - b.cooldownRepliesIntra = cooldownRepliesIntra; - b.cooldownImagesIntra = cooldownImagesIntra; - b.spoilers = spoilers; - b.customSpoilers = customSpoilers; - b.userIds = userIds; - b.codeTags = codeTags; - b.preuploadCaptcha = preuploadCaptcha; - b.countryFlags = countryFlags; - b.trollFlags = trollFlags; - b.mathTags = mathTags; - b.description = description; - b.archive = archive; - return b; - } - - public boolean propertiesEqual(Board b) { - return name.equals(b.name) && - code.equals(b.code) && - workSafe == b.workSafe && - perPage == b.perPage && - pages == b.pages && - maxFileSize == b.maxFileSize && - maxWebmSize == b.maxWebmSize && - maxCommentChars == b.maxCommentChars && - bumpLimit == b.bumpLimit && - imageLimit == b.imageLimit && - cooldownThreads == b.cooldownThreads && - cooldownReplies == b.cooldownReplies && - cooldownImages == b.cooldownImages && - cooldownRepliesIntra == b.cooldownRepliesIntra && - cooldownImagesIntra == b.cooldownImagesIntra && - spoilers == b.spoilers && - customSpoilers == b.customSpoilers && - userIds == b.userIds && - codeTags == b.codeTags && - preuploadCaptcha == b.preuploadCaptcha && - countryFlags == b.countryFlags && - trollFlags == b.trollFlags && - mathTags == b.mathTags && - ObjectsCompat.equals(description, b.description) && - archive == b.archive; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/orm/Filter.java b/Clover/app/src/main/java/org/floens/chan/core/model/orm/Filter.java deleted file mode 100644 index a4ef4f9336..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/orm/Filter.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model.orm; - -import com.j256.ormlite.field.DatabaseField; -import com.j256.ormlite.table.DatabaseTable; - -import org.floens.chan.core.manager.FilterType; - -@DatabaseTable(tableName = "filter") -public class Filter { - @DatabaseField(generatedId = true) - public int id; - - @DatabaseField(canBeNull = false) - public boolean enabled = true; - - // Flags of FilterTypes that this filter is applied to - @DatabaseField(canBeNull = false) - public int type = FilterType.SUBJECT.flag | FilterType.COMMENT.flag; - - @DatabaseField(canBeNull = false) - public String pattern; - - @DatabaseField(canBeNull = false) - public boolean allBoards = true; - - @DatabaseField(canBeNull = false) - public String boards = ""; - - @DatabaseField(canBeNull = false) - public int action; - - @DatabaseField(canBeNull = false) - public int color; - - public boolean hasFilter(FilterType filterType) { - return (type & filterType.flag) != 0; - } - - public String[] boardCodes() { - return boards.split(","); - } - - public void apply(Filter filter) { - enabled = filter.enabled; - type = filter.type; - pattern = filter.pattern; - allBoards = filter.allBoards; - boards = filter.boards; - action = filter.action; - color = filter.color; - } - - public Filter copy() { - Filter copy = new Filter(); - copy.enabled = enabled; - copy.type = type; - copy.pattern = pattern; - copy.allBoards = allBoards; - copy.boards = boards; - copy.action = action; - copy.color = color; - return copy; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/orm/History.java b/Clover/app/src/main/java/org/floens/chan/core/model/orm/History.java deleted file mode 100644 index ff5bf65744..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/orm/History.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model.orm; - -import com.j256.ormlite.field.DatabaseField; -import com.j256.ormlite.table.DatabaseTable; - -@DatabaseTable(tableName = "history") -public class History { - @DatabaseField(generatedId = true) - public int id; - - @DatabaseField(canBeNull = false, foreign = true) - public Loadable loadable; - - @DatabaseField - public String thumbnailUrl; - - @DatabaseField - public long date; -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/orm/Loadable.java b/Clover/app/src/main/java/org/floens/chan/core/model/orm/Loadable.java deleted file mode 100644 index 50d3ee37ed..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/orm/Loadable.java +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model.orm; - -import android.os.Parcel; -import android.text.TextUtils; - -import com.j256.ormlite.field.DatabaseField; -import com.j256.ormlite.table.DatabaseTable; - -import org.floens.chan.core.model.BoardReference; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.SiteReference; -import org.floens.chan.core.site.Site; - -/** - * Something that can be loaded, like a board or thread. - * Used instead of {@link Board} or {@link Post} because of the unique things a loadable can do and save in the database:
- * - It keeps track of the list index where the user last viewed.
- * - It keeps track of what post was last seen and loaded.
- * - It keeps track of the title the toolbar should show, generated from the first post (so after loading).
- *

Obtain Loadables through {@link org.floens.chan.core.database.DatabaseLoadableManager} to make sure everyone - * references the same loadable and that the loadable is properly saved in the database. - */ -@DatabaseTable(tableName = "loadable") -public class Loadable implements SiteReference, BoardReference { - @DatabaseField(generatedId = true) - public int id; - - @DatabaseField(columnName = "site") - public int siteId; - - public transient Site site; - - /** - * Mode for the loadable. - * Either thread or catalog. Board is deprecated. - */ - @DatabaseField - public int mode = Mode.INVALID; - - @DatabaseField(columnName = "board", canBeNull = false, index = true) - public String boardCode; - - public Board board; - - /** - * Thread number. - */ - @DatabaseField(index = true) - public int no = -1; - - @DatabaseField(canBeNull = false) - public String title = ""; - - @DatabaseField - public int listViewIndex; - - @DatabaseField - public int listViewTop; - - @DatabaseField - public int lastViewed = -1; - - @DatabaseField - public int lastLoaded = -1; - - public int markedNo = -1; - - // when the title, listViewTop, listViewIndex or lastViewed were changed - public boolean dirty = false; - - /** - * Constructs an empty loadable. The mode is INVALID. - */ - protected Loadable() { - } - - public static Loadable emptyLoadable() { - return new Loadable(); - } - - public static Loadable forCatalog(Board board) { - Loadable loadable = new Loadable(); - loadable.siteId = board.site.id(); - loadable.site = board.site; - loadable.board = board; - loadable.boardCode = board.code; - loadable.mode = Mode.CATALOG; - return loadable; - } - - public static Loadable forThread(Site site, Board board, int no) { - return Loadable.forThread(site, board, no, ""); - } - - public static Loadable forThread(Site site, Board board, int no, String title) { - Loadable loadable = new Loadable(); - loadable.siteId = site.id(); - loadable.site = site; - loadable.mode = Mode.THREAD; - loadable.board = board; - loadable.boardCode = board.code; - loadable.no = no; - loadable.title = title; - return loadable; - } - - @Override - public Site getSite() { - return site; - } - - @Override - public Board getBoard() { - return board; - } - - public void setTitle(String title) { - if (!TextUtils.equals(this.title, title)) { - this.title = title; - dirty = true; - } - } - - public void setLastViewed(int lastViewed) { - if (this.lastViewed != lastViewed) { - this.lastViewed = lastViewed; - dirty = true; - } - } - - public void setLastLoaded(int lastLoaded) { - if (this.lastLoaded != lastLoaded) { - this.lastLoaded = lastLoaded; - dirty = true; - } - } - - public void setListViewTop(int listViewTop) { - if (this.listViewTop != listViewTop) { - this.listViewTop = listViewTop; - dirty = true; - } - } - - public void setListViewIndex(int listViewIndex) { - if (this.listViewIndex != listViewIndex) { - this.listViewIndex = listViewIndex; - dirty = true; - } - } - - /** - * Compares the mode, site, board and no. - */ - @Override - public boolean equals(Object object) { - if (!(object instanceof Loadable)) - return false; - - Loadable other = (Loadable) object; - - if (site.id() != other.site.id()) { - return false; - } - - if (mode == other.mode) { - switch (mode) { - case Mode.INVALID: - return true; - case Mode.CATALOG: - case Mode.BOARD: - return boardCode.equals(other.boardCode); - case Mode.THREAD: - return boardCode.equals(other.boardCode) && no == other.no; - default: - throw new IllegalArgumentException(); - } - } else { - return false; - } - } - - @Override - public int hashCode() { - int result = mode; - - if (mode == Mode.THREAD || mode == Mode.CATALOG || mode == Mode.BOARD) { - result = 31 * result + (boardCode != null ? boardCode.hashCode() : 0); - } - if (mode == Mode.THREAD) { - result = 31 * result + no; - } - return result; - } - - @Override - public String toString() { - return "Loadable{" + - "id=" + id + - ", mode=" + mode + - ", board='" + boardCode + '\'' + - ", no=" + no + - ", title='" + title + '\'' + - ", listViewIndex=" + listViewIndex + - ", listViewTop=" + listViewTop + - ", lastViewed=" + lastViewed + - ", lastLoaded=" + lastLoaded + - ", markedNo=" + markedNo + - ", dirty=" + dirty + - '}'; - } - - public boolean isThreadMode() { - return mode == Mode.THREAD; - } - - public boolean isCatalogMode() { - return mode == Mode.CATALOG; - } - - // TODO(multi-site) remove - public boolean isFromDatabase() { - return id > 0; - } - - public static Loadable readFromParcel(Parcel parcel) { - Loadable loadable = new Loadable(); - /*loadable.id = */ - parcel.readInt(); - loadable.siteId = parcel.readInt(); - loadable.mode = parcel.readInt(); - loadable.boardCode = parcel.readString(); - loadable.no = parcel.readInt(); - loadable.title = parcel.readString(); - loadable.listViewIndex = parcel.readInt(); - loadable.listViewTop = parcel.readInt(); - return loadable; - } - - public void writeToParcel(Parcel parcel) { - parcel.writeInt(id); - // TODO(multi-site) - parcel.writeInt(siteId); - parcel.writeInt(mode); - // TODO(multi-site) - parcel.writeString(boardCode); - parcel.writeInt(no); - parcel.writeString(title); - parcel.writeInt(listViewIndex); - parcel.writeInt(listViewTop); - } - - public Loadable copy() { - Loadable copy = new Loadable(); - copy.id = id; - copy.siteId = siteId; - copy.site = site; - copy.mode = mode; - // TODO: for empty loadables - if (board != null) copy.board = board.copy(); - copy.boardCode = boardCode; - copy.no = no; - copy.title = title; - copy.listViewIndex = listViewIndex; - copy.listViewTop = listViewTop; - copy.lastViewed = lastViewed; - copy.lastLoaded = lastLoaded; - - return copy; - } - - public static class Mode { - public static final int INVALID = -1; - public static final int THREAD = 0; - @Deprecated - public static final int BOARD = 1; - public static final int CATALOG = 2; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/orm/Pin.java b/Clover/app/src/main/java/org/floens/chan/core/model/orm/Pin.java deleted file mode 100644 index f8756f885a..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/orm/Pin.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model.orm; - -import com.j256.ormlite.field.DatabaseField; -import com.j256.ormlite.table.DatabaseTable; - -@DatabaseTable(tableName = "pin") -public class Pin { - @DatabaseField(generatedId = true) - public int id; - - @DatabaseField(canBeNull = false, foreign = true) - public Loadable loadable; - - @DatabaseField - public boolean watching = true; - - @DatabaseField - public int watchLastCount = -1; - - @DatabaseField - public int watchNewCount = -1; - - @DatabaseField - public int quoteLastCount = -1; - - @DatabaseField - public int quoteNewCount = -1; - - @DatabaseField - public boolean isError = false; - - @DatabaseField - public String thumbnailUrl = null; - - @DatabaseField - public int order = -1; - - @DatabaseField - public boolean archived = false; - - public Pin() { - } - - public int getNewPostCount() { - if (watchLastCount < 0 || watchNewCount < 0) { - return 0; - } else { - return Math.max(0, watchNewCount - watchLastCount); - } - } - - public int getNewQuoteCount() { - if (quoteNewCount < 0 || quoteLastCount < 0) { - return 0; - } else { - return Math.max(0, quoteNewCount - quoteLastCount); - } - } - - public Pin copy() { - Pin copy = new Pin(); - copy.loadable = loadable; - copy.watching = watching; - copy.watchLastCount = watchLastCount; - copy.watchNewCount = watchNewCount; - copy.quoteLastCount = quoteLastCount; - copy.quoteNewCount = quoteNewCount; - copy.isError = isError; - copy.thumbnailUrl = thumbnailUrl; - copy.order = order; - copy.archived = archived; - return copy; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/orm/SavedReply.java b/Clover/app/src/main/java/org/floens/chan/core/model/orm/SavedReply.java deleted file mode 100644 index 2525da39f6..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/orm/SavedReply.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model.orm; - -import com.j256.ormlite.field.DatabaseField; -import com.j256.ormlite.table.DatabaseTable; - -import org.floens.chan.core.site.Site; - -@DatabaseTable(tableName = "savedreply") -public class SavedReply { - public SavedReply() { - } - - @Deprecated - public SavedReply(String board, int no, String password) { - this.board = board; - this.no = no; - this.password = password; - } - - public static SavedReply fromSiteBoardNoPassword(Site site, Board board, int no, - String password) { - SavedReply savedReply = new SavedReply(); - savedReply.siteId = site.id(); - savedReply.site = site; - savedReply.board = board.code; - savedReply.no = no; - savedReply.password = password; - return savedReply; - } - - @DatabaseField(generatedId = true) - private int id; - - @DatabaseField(columnName = "site") - public int siteId; - - /** - * The site this board belongs to, loaded with {@link #siteId} in the database manager. - */ - public transient Site site; - - @DatabaseField(index = true, canBeNull = false) - public String board; - - @DatabaseField(index = true) - public int no; - - @DatabaseField - public String password = ""; - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - SavedReply other = (SavedReply) o; - - return no == other.no && board.equals(other.board) && siteId == other.siteId; - } - - @Override - public int hashCode() { - int result = board.hashCode(); - result = 31 * result + no; - return result; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/orm/SiteModel.java b/Clover/app/src/main/java/org/floens/chan/core/model/orm/SiteModel.java deleted file mode 100644 index 22176cf376..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/orm/SiteModel.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model.orm; - -import android.util.Pair; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.j256.ormlite.field.DatabaseField; -import com.j256.ormlite.table.DatabaseTable; - -import org.floens.chan.core.model.json.site.SiteConfig; -import org.floens.chan.core.settings.json.BooleanJsonSetting; -import org.floens.chan.core.settings.json.IntegerJsonSetting; -import org.floens.chan.core.settings.json.JsonSetting; -import org.floens.chan.core.settings.json.JsonSettings; -import org.floens.chan.core.settings.json.LongJsonSetting; -import org.floens.chan.core.settings.json.RuntimeTypeAdapterFactory; -import org.floens.chan.core.settings.json.StringJsonSetting; -import org.floens.chan.utils.Logger; - -@DatabaseTable(tableName = "site") -public class SiteModel { - private static final Gson gson; - - static { - RuntimeTypeAdapterFactory userSettingAdapter = - RuntimeTypeAdapterFactory.of(JsonSetting.class, "type") - .registerSubtype(StringJsonSetting.class, "string") - .registerSubtype(IntegerJsonSetting.class, "integer") - .registerSubtype(LongJsonSetting.class, "long") - .registerSubtype(BooleanJsonSetting.class, "boolean"); - - gson = new GsonBuilder() - .registerTypeAdapterFactory(userSettingAdapter) - .create(); - } - - @DatabaseField(generatedId = true, allowGeneratedIdInsert = true) - public int id; - - @DatabaseField - public String configuration; - - @DatabaseField - public String userSettings; - - @DatabaseField - public int order; - - public SiteModel() { - } - - public void storeConfig(SiteConfig config) { - this.configuration = gson.toJson(config); - } - - public void storeUserSettings(JsonSettings userSettings) { - this.userSettings = gson.toJson(userSettings); - Logger.test("userSettings = " + this.userSettings); - } - - public Pair loadConfigFields() { - return Pair.create( - gson.fromJson(this.configuration, SiteConfig.class), - gson.fromJson(this.userSettings, JsonSettings.class) - ); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/orm/ThreadHide.java b/Clover/app/src/main/java/org/floens/chan/core/model/orm/ThreadHide.java deleted file mode 100644 index dba8a7e13d..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/model/orm/ThreadHide.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.model.orm; - -import com.j256.ormlite.field.DatabaseField; -import com.j256.ormlite.table.DatabaseTable; - -import org.floens.chan.core.model.Post; - -@DatabaseTable(tableName = "threadhide") -public class ThreadHide { - @DatabaseField(generatedId = true) - public int id; - - @DatabaseField(columnName = "site") - public int site; - - @DatabaseField - public String board; - - @DatabaseField - public int no; - - public ThreadHide() { - } - - public static ThreadHide fromPost(Post post) { - ThreadHide hide = new ThreadHide(); - hide.board = post.board.code; - hide.no = post.no; - hide.site = post.board.siteId; - return hide; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - ThreadHide that = (ThreadHide) o; - - return no == that.no && board.equals(that.board) && site == that.site; - } - - @Override - public int hashCode() { - int result = board.hashCode(); - result = 31 * result + no; - return result; - } - - public boolean equalsPost(Post post) { - return post.no == no && board.equals(post.board.code) && post.board.siteId == site; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/net/BitmapLruImageCache.java b/Clover/app/src/main/java/org/floens/chan/core/net/BitmapLruImageCache.java deleted file mode 100644 index 665c98504e..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/net/BitmapLruImageCache.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.net; - -import android.graphics.Bitmap; -import android.util.LruCache; - -import com.android.volley.toolbox.ImageLoader.ImageCache; - -public class BitmapLruImageCache extends LruCache implements ImageCache { - public BitmapLruImageCache(int maxSize) { - super(maxSize); - } - - @Override - protected int sizeOf(String key, Bitmap value) { - return value.getRowBytes() * value.getHeight() / 1024; - } - - @Override - public Bitmap getBitmap(String url) { - return get(url); - } - - @Override - public void putBitmap(String url, Bitmap bitmap) { - put(url, bitmap); - } -} \ No newline at end of file diff --git a/Clover/app/src/main/java/org/floens/chan/core/net/HtmlReaderRequest.java b/Clover/app/src/main/java/org/floens/chan/core/net/HtmlReaderRequest.java deleted file mode 100644 index d13cab287f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/net/HtmlReaderRequest.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.net; - -import com.android.volley.NetworkResponse; -import com.android.volley.Request; -import com.android.volley.Response; -import com.android.volley.Response.Listener; -import com.android.volley.VolleyError; -import com.android.volley.toolbox.HttpHeaderParser; - -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; - -import java.io.ByteArrayInputStream; -import java.io.IOException; - -public abstract class HtmlReaderRequest extends Request { - protected final Listener listener; - - public HtmlReaderRequest(String url, Listener listener, Response.ErrorListener errorListener) { - super(Request.Method.GET, url, errorListener); - - this.listener = listener; - } - - @Override - protected void deliverResponse(T response) { - listener.onResponse(response); - } - - @Override - protected Response parseNetworkResponse(NetworkResponse response) { - try { - Document document = Jsoup.parse(new ByteArrayInputStream(response.data), - HttpHeaderParser.parseCharset(response.headers), getUrl()); - - T result = readDocument(document); - - return Response.success(result, HttpHeaderParser.parseCacheHeaders(response)); - } catch (IOException e) { - return Response.error(new VolleyError(e)); - } - } - - public abstract T readDocument(Document document) throws IOException; -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/net/JsonReaderRequest.java b/Clover/app/src/main/java/org/floens/chan/core/net/JsonReaderRequest.java deleted file mode 100644 index 6dcf723e28..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/net/JsonReaderRequest.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.net; - -import android.util.JsonReader; - -import com.android.volley.NetworkResponse; -import com.android.volley.Request; -import com.android.volley.Response; -import com.android.volley.Response.ErrorListener; -import com.android.volley.Response.Listener; -import com.android.volley.VolleyError; -import com.android.volley.toolbox.HttpHeaderParser; - -import org.floens.chan.utils.IOUtils; - -import java.io.ByteArrayInputStream; -import java.io.InputStreamReader; -import java.nio.charset.Charset; - -public abstract class JsonReaderRequest extends Request { - private static final Charset UTF8 = Charset.forName("UTF-8"); - - protected final Listener listener; - - public JsonReaderRequest(String url, Listener listener, ErrorListener errorListener) { - super(Method.GET, url, errorListener); - - this.listener = listener; - } - - @Override - protected void deliverResponse(T response) { - listener.onResponse(response); - } - - @Override - protected Response parseNetworkResponse(NetworkResponse response) { - ByteArrayInputStream baos = new ByteArrayInputStream(response.data); - JsonReader reader = new JsonReader(new InputStreamReader(baos, UTF8)); - - Exception exception = null; - T read = null; - try { - read = readJson(reader); - } catch (Exception e) { - exception = e; - } - - IOUtils.closeQuietly(reader); - - if (read == null) { - if (exception != null) { - return Response.error(new VolleyError(exception)); - } else { - return Response.error(new VolleyError("Unknown error")); - } - } else { - return Response.success(read, HttpHeaderParser.parseCacheHeaders(response)); - } - } - - /** - * Read your json. Returning null or throwing something means a Response.error, Response.success is returned otherwise. - * The reader is closed for you. - * - * @param reader A json reader to use - * @return null or the data - * @throws Exception none or an exception - */ - public abstract T readJson(JsonReader reader) throws Exception; -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/net/ProxiedHurlStack.java b/Clover/app/src/main/java/org/floens/chan/core/net/ProxiedHurlStack.java deleted file mode 100644 index 7d57c2e3a5..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/net/ProxiedHurlStack.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.net; - -import com.android.volley.toolbox.HurlStack; - -import org.floens.chan.core.settings.ChanSettings; - -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.Proxy; -import java.net.URL; - -public class ProxiedHurlStack extends HurlStack { - public ProxiedHurlStack(String userAgent) { - super(userAgent, null); - } - - @Override - protected HttpURLConnection createConnection(URL url) throws IOException { - // Start the connection by specifying a proxy server - Proxy proxy = ChanSettings.getProxy(); - if (proxy != null) { - return (HttpURLConnection) url.openConnection(proxy); - } else { - return (HttpURLConnection) url.openConnection(); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/net/UpdateApiRequest.java b/Clover/app/src/main/java/org/floens/chan/core/net/UpdateApiRequest.java deleted file mode 100644 index 8c7c26bf4b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/net/UpdateApiRequest.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.net; - - -import android.util.JsonReader; - -import com.android.volley.Response; - -import org.floens.chan.BuildConfig; - -import java.io.IOException; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -import okhttp3.HttpUrl; - -public class UpdateApiRequest extends JsonReaderRequest { - public static final String TYPE_UPDATE = "update"; - - private static final int API_VERSION = 1; - - private String forFlavor; - - public UpdateApiRequest(Response.Listener listener, - Response.ErrorListener errorListener) { - super(BuildConfig.UPDATE_API_ENDPOINT, listener, errorListener); - forFlavor = BuildConfig.FLAVOR; - } - - @Override - public UpdateApiResponse readJson(JsonReader reader) throws Exception { - reader.beginObject(); - - UpdateApiResponse response = new UpdateApiResponse(); - - int apiVersion; - out: - while (reader.hasNext()) { - switch (reader.nextName()) { - case "api_version": - apiVersion = reader.nextInt(); - - if (apiVersion > API_VERSION) { - response.newerApiVersion = true; - - while (reader.hasNext()) reader.skipValue(); - - break out; - } - - break; - case "messages": - reader.beginArray(); - while (reader.hasNext()) { - response.messages.add(readMessage(reader)); - } - reader.endArray(); - break; - case "check_interval": - response.checkIntervalMs = reader.nextLong(); - break; - default: - reader.skipValue(); - break; - } - } - - reader.endObject(); - - return response; - } - - private UpdateApiMessage readMessage(JsonReader reader) throws IOException { - reader.beginObject(); - - UpdateApiMessage message = new UpdateApiMessage(); - - while (reader.hasNext()) { - switch (reader.nextName()) { - case "type": - message.type = reader.nextString(); - break; - case "code": - message.code = reader.nextInt(); - break; - case "hash": - message.hash = reader.nextString(); - break; - case "date": - DateFormat format = new SimpleDateFormat( - "yyyy-MM-dd'T'HH:mm:ss", Locale.US); - try { - message.date = format.parse(reader.nextString()); - } catch (ParseException ignore) { - } - break; - case "message_html": - message.messageHtml = reader.nextString(); - break; - case "apk": - reader.beginObject(); - while (reader.hasNext()) { - if (reader.nextName().equals(forFlavor)) { - reader.beginObject(); - while (reader.hasNext()) { - switch (reader.nextName()) { - case "url": - message.apkUrl = HttpUrl.parse(reader.nextString()); - break; - default: - reader.skipValue(); - break; - } - } - reader.endObject(); - } else { - reader.skipValue(); - } - } - reader.endObject(); - break; - default: - reader.skipValue(); - break; - } - } - - reader.endObject(); - - return message; - } - - public static class UpdateApiResponse { - public boolean newerApiVersion; - public List messages = new ArrayList<>(); - public long checkIntervalMs; - } - - public static class UpdateApiMessage { - public String type; - public int code; - public String hash; - public Date date; - public String messageHtml; - public HttpUrl apkUrl; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/pool/ChanLoaderFactory.java b/Clover/app/src/main/java/org/floens/chan/core/pool/ChanLoaderFactory.java deleted file mode 100644 index b4584437cd..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/pool/ChanLoaderFactory.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.pool; - -import android.util.LruCache; - -import org.floens.chan.core.site.loader.ChanThreadLoader; -import org.floens.chan.core.model.orm.Loadable; - -import java.util.HashMap; -import java.util.Map; - -import javax.inject.Inject; -import javax.inject.Singleton; - -/** - * ChanLoaderFactory is a factory for ChanLoaders. ChanLoaders for threads are cached. - *

Each reference to a loader is a {@link ChanThreadLoader.ChanLoaderCallback}, these - * references can be obtained with {@link #obtain(Loadable, ChanThreadLoader.ChanLoaderCallback)}} and released - * with {@link #release(ChanThreadLoader, ChanThreadLoader.ChanLoaderCallback)}. - */ -@Singleton -public class ChanLoaderFactory { - // private static final String TAG = "ChanLoaderFactory"; - public static final int THREAD_LOADERS_CACHE_SIZE = 25; - - private Map threadLoaders = new HashMap<>(); - private LruCache threadLoadersCache = new LruCache<>(THREAD_LOADERS_CACHE_SIZE); - - @Inject - public ChanLoaderFactory() { - } - - public ChanThreadLoader obtain(Loadable loadable, ChanThreadLoader.ChanLoaderCallback listener) { - ChanThreadLoader chanLoader; - if (loadable.isThreadMode()) { - if (!loadable.isFromDatabase()) { - throw new IllegalArgumentException(); - } - - chanLoader = threadLoaders.get(loadable); - if (chanLoader == null) { - chanLoader = threadLoadersCache.get(loadable); - if (chanLoader != null) { - threadLoadersCache.remove(loadable); - threadLoaders.put(loadable, chanLoader); - } - } - - if (chanLoader == null) { - chanLoader = new ChanThreadLoader(loadable); - threadLoaders.put(loadable, chanLoader); - } - } else { - chanLoader = new ChanThreadLoader(loadable); - } - - chanLoader.addListener(listener); - - return chanLoader; - } - - public void release(ChanThreadLoader chanLoader, ChanThreadLoader.ChanLoaderCallback listener) { - Loadable loadable = chanLoader.getLoadable(); - if (loadable.isThreadMode()) { - ChanThreadLoader foundChanLoader = threadLoaders.get(loadable); - - if (foundChanLoader == null) { - throw new IllegalStateException("The released loader does not exist"); - } - - if (chanLoader.removeListener(listener)) { - threadLoaders.remove(loadable); - threadLoadersCache.put(loadable, chanLoader); - } - } else { - chanLoader.removeListener(listener); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/ArchivePresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/ArchivePresenter.java deleted file mode 100644 index 20c63fb765..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/ArchivePresenter.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.presenter; - -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.model.Archive; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.site.SiteActions; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -import javax.inject.Inject; - -import static android.text.TextUtils.isEmpty; - -public class ArchivePresenter implements SiteActions.ArchiveListener { - private DatabaseManager databaseManager; - - private Callback callback; - private Board board; - - private boolean inRequest = false; - - private String filter; - private List items = new ArrayList<>(); - private List filteredItems = new ArrayList<>(); - - @Inject - public ArchivePresenter(DatabaseManager databaseManager) { - this.databaseManager = databaseManager; - } - - public void create(Callback callback, Board board) { - this.callback = callback; - this.board = board; - - loadArchive(); - } - - public void onRefresh() { - if (!inRequest) { - loadArchive(); - } - } - - private void loadArchive() { - inRequest = true; - callback.showError(false); - board.site.actions().archive(board, this); - } - - public void onSearchEntered(String query) { - filterArchive(query); - } - - public void onSearchVisibility(boolean visible) { - if (!visible) { - filterArchive(null); - } - } - - public void onItemClicked(Archive.ArchiveItem item) { - Loadable loadable = databaseManager.getDatabaseLoadableManager() - .get(Loadable.forThread(board.site, board, item.id)); - - callback.openThread(loadable); - } - - @Override - public void onArchive(Archive archive) { - inRequest = false; - callback.hideRefreshing(); - callback.showList(); - items = archive.items; - updateWithFilter(); - } - - @Override - public void onArchiveError() { - inRequest = false; - callback.hideRefreshing(); - callback.showError(true); - } - - private void filterArchive(String query) { - filter = query; - updateWithFilter(); - } - - private void updateWithFilter() { - filteredItems.clear(); - if (isEmpty(filter)) { - filteredItems.addAll(items); - } else { - for (Archive.ArchiveItem item : items) { - if (filterApplies(item, filter)) { - filteredItems.add(item); - } - } - } - - callback.setArchiveItems(filteredItems); - } - - private boolean filterApplies(Archive.ArchiveItem item, String filter) { - return item.description.toLowerCase(Locale.ENGLISH).contains(filter.toLowerCase()); - } - - public interface Callback { - void setArchiveItems(List items); - - void hideRefreshing(); - - void showList(); - - void showError(boolean show); - - void openThread(Loadable loadable); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java deleted file mode 100644 index 4b12d2416a..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java +++ /dev/null @@ -1,318 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.presenter; - - -import org.floens.chan.core.manager.BoardManager; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.repository.BoardRepository; -import org.floens.chan.core.site.Site; -import org.floens.chan.ui.helper.BoardHelper; -import org.floens.chan.utils.BackgroundUtils; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Observable; -import java.util.Observer; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; - -import javax.inject.Inject; - -public class BoardSetupPresenter implements Observer { - private BoardManager boardManager; - - private Callback callback; - private AddCallback addCallback; - - private Site site; - - private List savedBoards; - - private BoardRepository.SitesBoards allBoardsObservable; - - private Executor executor = Executors.newSingleThreadExecutor(); - private BackgroundUtils.Cancelable suggestionCall; - - private List suggestions = new ArrayList<>(); - private List selectedSuggestions = new LinkedList<>(); - - private String suggestionsQuery = null; - - @Inject - public BoardSetupPresenter(BoardManager boardManager) { - this.boardManager = boardManager; - } - - public void create(Callback callback, Site site) { - this.callback = callback; - this.site = site; - - savedBoards = boardManager.getSiteSavedBoards(site); - callback.setSavedBoards(savedBoards); - - allBoardsObservable = boardManager.getAllBoardsObservable(); - allBoardsObservable.addObserver(this); - } - - public void destroy() { - boardManager.updateBoardOrders(savedBoards); - - allBoardsObservable.deleteObserver(this); - } - - @Override - public void update(Observable o, Object arg) { - if (o == allBoardsObservable) { - if (addCallback != null) { - // Update the boards shown in the query. - queryBoardsWithQueryAndShowInAddDialog(); - } - } - } - - public void addClicked() { - callback.showAddDialog(); - } - - public void bindAddDialog(AddCallback addCallback) { - this.addCallback = addCallback; - - queryBoardsWithQueryAndShowInAddDialog(); - } - - public void unbindAddDialog() { - this.addCallback = null; - suggestions.clear(); - selectedSuggestions.clear(); - suggestionsQuery = null; - } - - public void onSelectAllClicked() { - for (BoardSuggestion suggestion : suggestions) { - suggestion.checked = true; - selectedSuggestions.add(suggestion.getCode()); - } - addCallback.suggestionsWereChanged(); - } - - public void onSuggestionClicked(BoardSuggestion suggestion) { - suggestion.checked = !suggestion.checked; - if (suggestion.checked) { - selectedSuggestions.add(suggestion.getCode()); - } else { - selectedSuggestions.remove(suggestion.getCode()); - } - } - - public List getSuggestions() { - return suggestions; - } - - public void onAddDialogPositiveClicked() { - int count = 0; - - List boardsToSave = new ArrayList<>(); - - if (site.boardsType().canList) { - List siteBoards = boardManager.getSiteBoards(site); - Map siteBoardsByCode = new HashMap<>(); - for (Board siteBoard : siteBoards) { - siteBoardsByCode.put(siteBoard.code, siteBoard); - } - for (String selectedSuggestion : selectedSuggestions) { - Board board = siteBoardsByCode.get(selectedSuggestion); - if (board != null) { - boardsToSave.add(board); - savedBoards.add(board); - count++; - } - } - } else { - for (String suggestion : selectedSuggestions) { - Board board = site.createBoard(suggestion, suggestion); - boardsToSave.add(board); - savedBoards.add(board); - count++; - } - } - - boardManager.setAllSaved(boardsToSave, true); - - setOrder(); - callback.setSavedBoards(savedBoards); - callback.boardsWereAdded(count); - } - - public void move(int from, int to) { - Board item = savedBoards.remove(from); - savedBoards.add(to, item); - setOrder(); - - callback.setSavedBoards(savedBoards); - } - - public void remove(int position) { - Board board = savedBoards.remove(position); - boardManager.setSaved(board, false); - - setOrder(); - callback.setSavedBoards(savedBoards); - - callback.showRemovedSnackbar(board); - } - - public void undoRemoveBoard(Board board) { - boardManager.setSaved(board, true); - savedBoards.add(board.order, board); - setOrder(); - callback.setSavedBoards(savedBoards); - } - - public void searchEntered(String userQuery) { - suggestionsQuery = userQuery; - queryBoardsWithQueryAndShowInAddDialog(); - } - - private void queryBoardsWithQueryAndShowInAddDialog() { - if (suggestionCall != null) { - suggestionCall.cancel(); - } - - final String query = suggestionsQuery == null ? null : - suggestionsQuery.replace("/", "").replace("\\", ""); - suggestionCall = BackgroundUtils.runWithExecutor(executor, () -> { - List suggestions = new ArrayList<>(); - if (site.boardsType().canList) { - List siteBoards = boardManager.getSiteBoards(site); - List allUnsavedBoards = new ArrayList<>(); - for (Board siteBoard : siteBoards) { - if (!siteBoard.saved) { - allUnsavedBoards.add(siteBoard); - } - } - - List toSuggest; - if (query == null || query.equals("")) { - toSuggest = new ArrayList<>(allUnsavedBoards.size()); - for (Board b : allUnsavedBoards) { - if (b.workSafe) toSuggest.add(b); - } - for (Board b : allUnsavedBoards) { - if (!b.workSafe) toSuggest.add(b); - } - } else { - toSuggest = BoardHelper.search(allUnsavedBoards, query); - } - - for (Board board : toSuggest) { - BoardSuggestion suggestion = new BoardSuggestion(board); - suggestions.add(suggestion); - } - } else { - if (query != null && !query.equals("")) { - suggestions.add(new BoardSuggestion(query)); - } - } - - return suggestions; - }, result -> { - updateSuggestions(result); - - if (addCallback != null) { - addCallback.suggestionsWereChanged(); - } - }); - } - - private void updateSuggestions(List suggestions) { - this.suggestions = suggestions; - for (BoardSuggestion suggestion : this.suggestions) { - suggestion.checked = selectedSuggestions.contains(suggestion.getCode()); - } - } - - private void setOrder() { - for (int i = 0; i < savedBoards.size(); i++) { - Board b = savedBoards.get(i); - b.order = i; - } - } - - public interface Callback { - void showAddDialog(); - - void setSavedBoards(List savedBoards); - - void showRemovedSnackbar(Board board); - - void boardsWereAdded(int count); - } - - public interface AddCallback { - void suggestionsWereChanged(); - } - - public static class BoardSuggestion { - private final Board board; - private final String code; - - private boolean checked = false; - - BoardSuggestion(Board board) { - this.board = board; - this.code = board.code; - } - - BoardSuggestion(String code) { - this.board = null; - this.code = code; - } - - public String getName() { - if (board != null) { - return BoardHelper.getName(board); - } else { - return "/" + code + "/"; - } - } - - public String getDescription() { - if (board != null) { - return BoardHelper.getDescription(board); - } else { - return ""; - } - } - - public String getCode() { - return code; - } - - public boolean isChecked() { - return checked; - } - - public long getId() { - return code.hashCode(); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardsMenuPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardsMenuPresenter.java deleted file mode 100644 index 63a6dd97ed..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardsMenuPresenter.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.presenter; - -import android.support.annotation.Nullable; - -import org.floens.chan.core.manager.BoardManager; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.repository.BoardRepository; -import org.floens.chan.core.site.Site; -import org.floens.chan.ui.helper.BoardHelper; - -import java.util.ArrayList; -import java.util.List; -import java.util.Observable; -import java.util.Observer; - -import javax.inject.Inject; - -public class BoardsMenuPresenter implements Observer { - private Callback callback; - private BoardRepository.SitesBoards allBoards; - - private Items items; - - @Nullable - private String filter; - - @Inject - public BoardsMenuPresenter(BoardManager boardManager) { - allBoards = boardManager.getAllBoardsObservable(); - } - - public void create(Callback callback, Board selectedBoard) { - this.callback = callback; - - this.allBoards.addObserver(this); - - items = new Items(); - - updateWithFilter(); - - callback.scrollToPosition(items.findBoardPosition(selectedBoard)); - } - - public void destroy() { - allBoards.deleteObserver(this); - } - - public Items items() { - return items; - } - - public void filterChanged(String filter) { - this.filter = filter; - updateWithFilter(); - } - - @Override - public void update(Observable o, Object arg) { - if (o == allBoards) { - updateWithFilter(); - } - } - - private void updateWithFilter() { - items.update(this.allBoards.get(), filter); - } - - public static class Items extends Observable { - public List items = new ArrayList<>(); - private int itemIdCounter = 1; - - public Items() { - } - - public void update(List allBoards, String filter) { - items.clear(); - - items.add(new Item(0, Item.Type.SEARCH)); - - for (BoardRepository.SiteBoards siteAndBoards : allBoards) { - Site site = siteAndBoards.site; - List boards = siteAndBoards.boards; - - items.add(new Item(itemIdCounter++, site)); - - if (filter == null || filter.length() == 0) { - for (Board board : boards) { - if (board.saved) { - items.add(new Item(itemIdCounter++, board)); - } - } - } else { - List res = BoardHelper.quickSearch(boards, filter); - for (Board b : res) { - items.add(new Item(itemIdCounter++, b)); - } - } - } - - setChanged(); - notifyObservers(); - } - - public int getCount() { - return items.size(); - } - - public int findBoardPosition(Board board) { - int position = 0; - for (Item item : items) { - - if (item.board != null && item.board.siteCodeEquals(board)) { - return position; - } - - position++; - } - - return 0; - } - - public Item getAtPosition(int position) { - return items.get(position); - } - } - - public static class Item { - public enum Type { - BOARD(0), - SITE(1), - SEARCH(2); - - public int typeId; - - Type(int typeId) { - this.typeId = typeId; - } - } - - public final Type type; - public Board board; - public Site site; - public int id; - - public Item(int id, Type type) { - this.id = id; - this.type = type; - } - - public Item(int id, Board board) { - this.id = id; - type = Type.BOARD; - this.board = board; - } - - public Item(int id, Site site) { - this.id = id; - type = Type.SITE; - this.site = site; - } - } - - public interface Callback { - void scrollToPosition(int position); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/BrowsePresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/BrowsePresenter.java deleted file mode 100644 index ef2801957f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/BrowsePresenter.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.presenter; - -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.manager.BoardManager; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.repository.BoardRepository; -import org.floens.chan.core.site.Site; - -import java.util.Observable; -import java.util.Observer; - -import javax.inject.Inject; - -public class BrowsePresenter implements Observer { - private final DatabaseManager databaseManager; - private final BoardManager boardManager; - private Callback callback; - - private boolean hadBoards = false; - private Board currentBoard; - - private BoardRepository.SitesBoards savedBoardsObservable; - - @Inject - public BrowsePresenter(DatabaseManager databaseManager, BoardManager boardManager) { - this.databaseManager = databaseManager; - this.boardManager = boardManager; - - savedBoardsObservable = boardManager.getSavedBoardsObservable(); - - hadBoards = hasBoards(); - } - - public void create(Callback callback) { - this.callback = callback; - - savedBoardsObservable.addObserver(this); - } - - public void destroy() { - savedBoardsObservable.deleteObserver(this); - } - - public Board currentBoard() { - return currentBoard; - } - - public void setBoard(Board board) { - loadBoard(board); - } - - public void onBoardsFloatingMenuBoardClicked(Board board) { - loadBoard(board); - } - - public void loadWithDefaultBoard() { - Board first = firstBoard(); - if (first != null) { - loadBoard(first); - } - } - - public void onBoardsFloatingMenuSiteClicked(Site site) { - callback.loadSiteSetup(site); - } - - @Override - public void update(Observable o, Object arg) { - if (o == savedBoardsObservable) { - if (!hadBoards && hasBoards()) { - hadBoards = true; - loadWithDefaultBoard(); - } - } - } - - private boolean hasBoards() { - return firstBoard() != null; - } - - private Board firstBoard() { - for (BoardRepository.SiteBoards item : savedBoardsObservable.get()) { - if (!item.boards.isEmpty()) { - return item.boards.get(0); - } - } - return null; - } - - private Loadable getLoadableForBoard(Board board) { - return databaseManager.getDatabaseLoadableManager().get(Loadable.forCatalog(board)); - } - - private void loadBoard(Board board) { - currentBoard = board; - callback.loadBoard(getLoadableForBoard(board)); - callback.showArchiveOption(board.site.boardFeature(Site.BoardFeature.ARCHIVE, board)); - } - - public interface Callback { - void loadBoard(Loadable loadable); - - void loadSiteSetup(Site site); - - void showArchiveOption(boolean show); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/ImageViewerPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/ImageViewerPresenter.java deleted file mode 100644 index 3fd938ce3b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/ImageViewerPresenter.java +++ /dev/null @@ -1,423 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.presenter; - -import android.net.ConnectivityManager; -import android.support.v4.view.ViewPager; - -import org.floens.chan.core.cache.FileCache; -import org.floens.chan.core.cache.FileCacheDownloader; -import org.floens.chan.core.cache.FileCacheListener; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.view.MultiImageView; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.utils.AndroidUtils.isConnected; - -public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager.OnPageChangeListener { - private static final String TAG = "ImageViewerPresenter"; - - private final Callback callback; - - @Inject - FileCache fileCache; - - private boolean entering = true; - private boolean exiting = false; - private List images; - private List progress; - private int selectedPosition; - private Loadable loadable; - - private Set preloadingImages = new HashSet<>(); - - // Disables swiping until the view pager is visible - private boolean viewPagerVisible = false; - private boolean changeViewsOnInTransitionEnd = false; - - private boolean muted; - - public ImageViewerPresenter(Callback callback) { - this.callback = callback; - inject(this); - - muted = ChanSettings.videoDefaultMuted.get(); - } - - public void showImages(List images, int position, Loadable loadable) { - this.images = images; - selectedPosition = Math.max(0, Math.min(images.size() - 1, position)); - this.loadable = loadable; - - progress = new ArrayList<>(images.size()); - for (int i = 0; i < images.size(); i++) { - progress.add(i, -1f); - } - - // Do this before the view is measured, to avoid it to always loading the first two pages - callback.setPagerItems(images, selectedPosition); - callback.setImageMode(images.get(selectedPosition), MultiImageView.Mode.LOWRES); - } - - public void onViewMeasured() { - // Pager is measured, but still invisible - callback.startPreviewInTransition(images.get(selectedPosition)); - PostImage postImage = images.get(selectedPosition); - callback.setTitle(postImage, selectedPosition, images.size(), postImage.spoiler); - } - - public void onInTransitionEnd() { - entering = false; - // Depends on what onModeLoaded did - if (changeViewsOnInTransitionEnd) { - callback.setPreviewVisibility(false); - callback.setPagerVisiblity(true); - } - } - - public void onExit() { - if (entering || exiting) return; - exiting = true; - - PostImage postImage = images.get(selectedPosition); - if (postImage.type == PostImage.Type.MOVIE) { - // VideoView doesn't work with invisible visibility - callback.setImageMode(postImage, MultiImageView.Mode.LOWRES); - } - - callback.setPagerVisiblity(false); - callback.setPreviewVisibility(true); - callback.startPreviewOutTransition(postImage); - callback.showProgress(false); - - cancelPreloadingImages(); - } - - public void onVolumeClicked() { - muted = !muted; - callback.showVolumeMenuItem(true, muted); - callback.setVolume(getCurrentPostImage(), muted); - } - - public List getAllPostImages() { - return images; - } - - public PostImage getCurrentPostImage() { - return images.get(selectedPosition); - } - - public Loadable getLoadable() { - return loadable; - } - - @Override - public void onPageSelected(int position) { - if (!viewPagerVisible) { - return; - } - - selectedPosition = position; - - onPageSwipedTo(position); - } - - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - } - - @Override - public void onPageScrollStateChanged(int state) { - } - - @Override - public void onModeLoaded(MultiImageView multiImageView, MultiImageView.Mode mode) { - if (exiting) return; - - if (mode == MultiImageView.Mode.LOWRES) { - // lowres is requested at the beginning of the transition, - // the lowres is loaded before the in transition or after - if (!viewPagerVisible) { - viewPagerVisible = true; - if (!entering) { - // Entering transition was already ended, switch now - callback.setPreviewVisibility(false); - callback.setPagerVisiblity(true); - } else { - // Wait for enter animation to finish before changing views - changeViewsOnInTransitionEnd = true; - } - // Transition ended or not, request loading the other side views to lowres - for (PostImage other : getOther(selectedPosition, false)) { - callback.setImageMode(other, MultiImageView.Mode.LOWRES); - } - onLowResInCenter(); - } else { - if (multiImageView.getPostImage() == images.get(selectedPosition)) { - onLowResInCenter(); - } - } - } else { - if (multiImageView.getPostImage() == images.get(selectedPosition)) { - setTitle(images.get(selectedPosition), selectedPosition); - } - } - } - - private void onPageSwipedTo(int position) { - // Reset volume icon. - // If it has audio, we'll know after it is loaded. - callback.showVolumeMenuItem(false, true); - - PostImage postImage = images.get(selectedPosition); - setTitle(postImage, position); - callback.scrollToImage(postImage); - - for (PostImage other : getOther(position, false)) { - callback.setImageMode(other, MultiImageView.Mode.LOWRES); - } - - // Already in LOWRES mode - if (callback.getImageMode(postImage) == MultiImageView.Mode.LOWRES) { - onLowResInCenter(); - } - // Else let onModeChange handle it - - callback.showProgress(progress.get(selectedPosition) >= 0f); - callback.onLoadProgress(progress.get(selectedPosition)); - } - - // Called from either a page swipe caused a lowres image to the center or an - // onModeLoaded when a unloaded image was swiped to the center earlier - private void onLowResInCenter() { - PostImage postImage = images.get(selectedPosition); - - if (imageAutoLoad(postImage) && !postImage.spoiler) { - if (postImage.type == PostImage.Type.STATIC) { - callback.setImageMode(postImage, MultiImageView.Mode.BIGIMAGE); - } else if (postImage.type == PostImage.Type.GIF) { - callback.setImageMode(postImage, MultiImageView.Mode.GIF); - } else if (postImage.type == PostImage.Type.MOVIE && videoAutoLoad(postImage)) { - callback.setImageMode(postImage, MultiImageView.Mode.MOVIE); - } - } - - preloadNext(); - } - - // This won't actually change any modes, but it will preload the image so that it's - // available immediately when the user swipes right. - private void preloadNext() { - if (selectedPosition + 1 < images.size()) { - PostImage next = images.get(selectedPosition + 1); - - boolean load = false; - if (next.type == PostImage.Type.STATIC || next.type == PostImage.Type.GIF) { - load = imageAutoLoad(next); - } else if (next.type == PostImage.Type.MOVIE) { - load = videoAutoLoad(next); - } - - if (load) { - final String fileUrl = next.imageUrl.toString(); - - // If downloading, remove from preloadingImages if it finished. - // Array to allow access from within the callback (the callback should really - // pass the filecachedownloader itself). - final FileCacheDownloader[] preloadDownload = - new FileCacheDownloader[1]; - preloadDownload[0] = fileCache.downloadFile(fileUrl, - new FileCacheListener() { - @Override - public void onEnd() { - if (preloadDownload[0] != null) { - preloadingImages.remove(preloadDownload[0]); - } - } - } - ); - - if (preloadDownload[0] != null) { - preloadingImages.add(preloadDownload[0]); - } - } - } - } - - private void cancelPreloadingImages() { - for (FileCacheDownloader preloadingImage : preloadingImages) { - preloadingImage.cancel(); - } - preloadingImages.clear(); - } - - @Override - public void onTap(MultiImageView multiImageView) { - // Don't mistake a swipe when the pager is disabled as a tap - if (viewPagerVisible) { - PostImage postImage = images.get(selectedPosition); - if (imageAutoLoad(postImage) && !postImage.spoiler) { - if (postImage.type == PostImage.Type.MOVIE) { - callback.setImageMode(postImage, MultiImageView.Mode.MOVIE); - } else { - onExit(); - } - } else { - MultiImageView.Mode currentMode = callback.getImageMode(postImage); - if (postImage.type == PostImage.Type.STATIC && currentMode != MultiImageView.Mode.BIGIMAGE) { - callback.setImageMode(postImage, MultiImageView.Mode.BIGIMAGE); - } else if (postImage.type == PostImage.Type.GIF && currentMode != MultiImageView.Mode.GIF) { - callback.setImageMode(postImage, MultiImageView.Mode.GIF); - } else if (postImage.type == PostImage.Type.MOVIE && currentMode != MultiImageView.Mode.MOVIE) { - callback.setImageMode(postImage, MultiImageView.Mode.MOVIE); - } else { - onExit(); - } - } - } - } - - @Override - public void showProgress(MultiImageView multiImageView, boolean show) { - for (int i = 0; i < images.size(); i++) { - PostImage postImage = images.get(i); - if (postImage == multiImageView.getPostImage()) { - progress.set(i, show ? 0f : -1f); - break; - } - } - - if (multiImageView.getPostImage() == images.get(selectedPosition)) { - callback.showProgress(progress.get(selectedPosition) >= 0f); - if (show) { - callback.onLoadProgress(0f); - } - } - } - - @Override - public void onProgress(MultiImageView multiImageView, long current, long total) { - for (int i = 0; i < images.size(); i++) { - PostImage postImage = images.get(i); - if (postImage == multiImageView.getPostImage()) { - progress.set(i, current / (float) total); - break; - } - } - - if (multiImageView.getPostImage() == images.get(selectedPosition)) { - callback.onLoadProgress(progress.get(selectedPosition)); - } - } - - @Override - public void onVideoError(MultiImageView multiImageView) { - callback.onVideoError(multiImageView); - } - - @Override - public void onVideoLoaded(MultiImageView multiImageView, boolean hasAudio) { - PostImage currentPostImage = getCurrentPostImage(); - if (multiImageView.getPostImage() == currentPostImage) { - if (hasAudio) { - callback.showVolumeMenuItem(true, muted); - callback.setVolume(currentPostImage, muted); - } - } - } - - private boolean imageAutoLoad(PostImage postImage) { - // Auto load the image when it is cached - return fileCache.exists(postImage.imageUrl.toString()) || shouldLoadForNetworkType(ChanSettings.imageAutoLoadNetwork.get()); - } - - private boolean videoAutoLoad(PostImage postImage) { - return imageAutoLoad(postImage) && shouldLoadForNetworkType(ChanSettings.videoAutoLoadNetwork.get()); - } - - private boolean shouldLoadForNetworkType(ChanSettings.MediaAutoLoadMode networkType) { - if (networkType == ChanSettings.MediaAutoLoadMode.NONE) { - return false; - } else if (networkType == ChanSettings.MediaAutoLoadMode.WIFI) { - return isConnected(ConnectivityManager.TYPE_WIFI); - } else if (networkType == ChanSettings.MediaAutoLoadMode.ALL) { - return true; - } - - // Not connected or unrecognized - return false; - } - - private void setTitle(PostImage postImage, int position) { - callback.setTitle(postImage, position, images.size(), - postImage.spoiler && callback.getImageMode(postImage) == MultiImageView.Mode.LOWRES); - } - - private List getOther(int position, boolean all) { - List other = new ArrayList<>(3); - if (position - 1 >= 0) { - other.add(images.get(position - 1)); - } - if (all) { - other.add(images.get(position)); - } - if (position + 1 < images.size()) { - other.add(images.get(position + 1)); - } - return other; - } - - public interface Callback { - void startPreviewInTransition(PostImage postImage); - - void startPreviewOutTransition(PostImage postImage); - - void setPreviewVisibility(boolean visible); - - void setPagerVisiblity(boolean visible); - - void setPagerItems(List images, int initialIndex); - - void setImageMode(PostImage postImage, MultiImageView.Mode mode); - - void setVolume(PostImage postImage, boolean muted); - - void setTitle(PostImage postImage, int index, int count, boolean spoiler); - - void scrollToImage(PostImage postImage); - - MultiImageView.Mode getImageMode(PostImage postImage); - - void showProgress(boolean show); - - void onLoadProgress(float progress); - - void onVideoError(MultiImageView multiImageView); - - void showVolumeMenuItem(boolean show, boolean muted); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java deleted file mode 100644 index 0f6532ac90..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java +++ /dev/null @@ -1,548 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.presenter; - -import android.text.TextUtils; - -import org.floens.chan.R; -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.manager.ReplyManager; -import org.floens.chan.core.manager.WatchManager; -import org.floens.chan.core.model.ChanThread; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.model.orm.SavedReply; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.SiteActions; -import org.floens.chan.core.site.SiteAuthentication; -import org.floens.chan.core.site.http.HttpCall; -import org.floens.chan.core.site.http.Reply; -import org.floens.chan.core.site.http.ReplyResponse; -import org.floens.chan.ui.captcha.AuthenticationLayoutCallback; -import org.floens.chan.ui.captcha.AuthenticationLayoutInterface; -import org.floens.chan.ui.captcha.v2.CaptchaNoJsLayoutV2; -import org.floens.chan.ui.helper.ImagePickDelegate; -import org.floens.chan.utils.Logger; - -import java.io.File; -import java.nio.charset.Charset; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.inject.Inject; - -import static org.floens.chan.utils.AndroidUtils.getAppContext; -import static org.floens.chan.utils.AndroidUtils.getReadableFileSize; -import static org.floens.chan.utils.AndroidUtils.getRes; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class ReplyPresenter implements AuthenticationLayoutCallback, ImagePickDelegate.ImagePickCallback, SiteActions.PostListener { - public enum Page { - INPUT, - AUTHENTICATION, - LOADING - } - - private static final String TAG = "ReplyPresenter"; - private static final Pattern QUOTE_PATTERN = Pattern.compile(">>\\d+"); - private static final Charset UTF_8 = Charset.forName("UTF-8"); - - private ReplyPresenterCallback callback; - - private ReplyManager replyManager; - private WatchManager watchManager; - private DatabaseManager databaseManager; - - private boolean bound = false; - private Loadable loadable; - private Board board; - private Reply draft; - - private Page page = Page.INPUT; - private boolean moreOpen; - private boolean previewOpen; - private boolean pickingFile; - private int selectedQuote = -1; - - @Inject - public ReplyPresenter(ReplyManager replyManager, - WatchManager watchManager, - DatabaseManager databaseManager) { - this.replyManager = replyManager; - this.watchManager = watchManager; - this.databaseManager = databaseManager; - } - - public void create(ReplyPresenterCallback callback) { - this.callback = callback; - } - - public void bindLoadable(Loadable loadable) { - if (this.loadable != null) { - unbindLoadable(); - } - bound = true; - this.loadable = loadable; - - this.board = loadable.board; - - draft = replyManager.getReply(loadable); - - if (TextUtils.isEmpty(draft.name)) { - draft.name = ChanSettings.postDefaultName.get(); - } - - callback.loadDraftIntoViews(draft); - callback.updateCommentCount(0, board.maxCommentChars, false); - callback.setCommentHint(getString(loadable.isThreadMode() ? R.string.reply_comment_thread : R.string.reply_comment_board)); - callback.showCommentCounter(board.maxCommentChars > 0); - - if (draft.file != null) { - showPreview(draft.fileName, draft.file); - } - - switchPage(Page.INPUT, false); - } - - public void unbindLoadable() { - bound = false; - draft.file = null; - draft.fileName = ""; - callback.loadViewsIntoDraft(draft); - replyManager.putReply(loadable, draft); - - closeAll(); - } - - public void onOpen(boolean open) { - if (open) { - callback.focusComment(); - } - } - - public boolean onBack() { - if (page == Page.LOADING) { - return true; - } else if (page == Page.AUTHENTICATION) { - switchPage(Page.INPUT, true); - return true; - } else if (moreOpen) { - onMoreClicked(); - return true; - } - return false; - } - - public void onMoreClicked() { - moreOpen = !moreOpen; - callback.setExpanded(moreOpen); - callback.openNameOptions(moreOpen); - if (!loadable.isThreadMode()) { - callback.openSubject(moreOpen); - } - callback.openCommentQuoteButton(moreOpen); - if (board.spoilers) { - callback.openCommentSpoilerButton(moreOpen); - } - if (previewOpen) { - callback.openFileName(moreOpen); - if (board.spoilers) { - callback.openSpoiler(moreOpen, false); - } - } - } - - public boolean isExpanded() { - return moreOpen; - } - - public void onAttachClicked() { - if (!pickingFile) { - if (previewOpen) { - callback.openPreview(false, null); - draft.file = null; - draft.fileName = ""; - if (moreOpen) { - callback.openFileName(false); - if (board.spoilers) { - callback.openSpoiler(false, false); - } - } - previewOpen = false; - } else { - callback.getImagePickDelegate().pick(this); - pickingFile = true; - } - } - } - - public void onSubmitClicked() { - callback.loadViewsIntoDraft(draft); - draft.loadable = loadable; - - draft.spoilerImage = draft.spoilerImage && board.spoilers; - - draft.captchaResponse = null; - if (loadable.site.actions().postRequiresAuthentication()) { - switchPage(Page.AUTHENTICATION, true); - } else { - makeSubmitCall(); - } - } - - @Override - public void onPostComplete(HttpCall httpCall, ReplyResponse replyResponse) { - if (replyResponse.posted) { - if (ChanSettings.postPinThread.get()) { - if (loadable.isThreadMode()) { - ChanThread thread = callback.getThread(); - if (thread != null) { - watchManager.createPin(loadable, thread.op); - } - } else { - Loadable postedLoadable = databaseManager.getDatabaseLoadableManager() - .get(Loadable.forThread(loadable.site, loadable.board, - replyResponse.postNo)); - - watchManager.createPin(postedLoadable); - } - } - - SavedReply savedReply = SavedReply.fromSiteBoardNoPassword( - loadable.site, loadable.board, replyResponse.postNo, replyResponse.password); - databaseManager.runTaskAsync(databaseManager.getDatabaseSavedReplyManager() - .saveReply(savedReply)); - - switchPage(Page.INPUT, false); - closeAll(); - highlightQuotes(); - String name = draft.name; - draft = new Reply(); - draft.name = name; - replyManager.putReply(loadable, draft); - callback.loadDraftIntoViews(draft); - callback.onPosted(); - - if (bound && !loadable.isThreadMode()) { - callback.showThread(databaseManager.getDatabaseLoadableManager().get( - Loadable.forThread(loadable.site, loadable.board, replyResponse.postNo))); - } - } else if (replyResponse.requireAuthentication) { - switchPage(Page.AUTHENTICATION, true); - } else { - String errorMessage = getString(R.string.reply_error); - if (replyResponse.errorMessage != null) { - errorMessage = getAppContext().getString( - R.string.reply_error_message, replyResponse.errorMessage); - } - - Logger.e(TAG, "onPostComplete error", errorMessage); - switchPage(Page.INPUT, true); - callback.openMessage(true, false, errorMessage, true); - } - } - - @Override - public void onPostError(HttpCall httpCall, Exception exception) { - Logger.e(TAG, "onPostError", exception); - - switchPage(Page.INPUT, true); - - String errorMessage = getString(R.string.reply_error); - if (exception != null) { - String message = exception.getMessage(); - if (message != null) { - errorMessage = getAppContext().getString(R.string.reply_error_message, message); - } - } - - callback.openMessage(true, false, errorMessage, true); - } - - @Override - public void onAuthenticationComplete(AuthenticationLayoutInterface authenticationLayout, String challenge, String response) { - draft.captchaChallenge = challenge; - draft.captchaResponse = response; - - // we don't need this to be called for new captcha window. - // Otherwise "Request captcha request is already in progress" message will be shown - if (!(authenticationLayout instanceof CaptchaNoJsLayoutV2)) { - // should this be called here? - authenticationLayout.reset(); - } - - makeSubmitCall(); - } - - @Override - public void onFallbackToV1CaptchaView() { - callback.onFallbackToV1CaptchaView(); - } - - public void onCommentTextChanged(CharSequence text) { - int length = text.toString().getBytes(UTF_8).length; - callback.updateCommentCount(length, board.maxCommentChars, length > board.maxCommentChars); - } - - public void onSelectionChanged() { - callback.loadViewsIntoDraft(draft); - highlightQuotes(); - } - - public void commentQuoteClicked() { - commentInsert(">"); - } - - public void commentSpoilerClicked() { - commentInsert("[spoiler]", "[/spoiler]"); - } - - public void quote(Post post, boolean withText) { - handleQuote(post, withText ? post.comment.toString() : null); - } - - public void quote(Post post, CharSequence text) { - handleQuote(post, text.toString()); - } - - private void handleQuote(Post post, String textQuote) { - callback.loadViewsIntoDraft(draft); - - String extraNewline = ""; - if (draft.selection - 1 >= 0 && draft.selection - 1 < draft.comment.length() && - draft.comment.charAt(draft.selection - 1) != '\n') { - extraNewline = "\n"; - } - - String postQuote = ""; - if (post != null) { - if (!draft.comment.contains(">>" + post.no)) { - postQuote = ">>" + post.no + "\n"; - } - } - - StringBuilder textQuoteResult = new StringBuilder(); - if (textQuote != null) { - String[] lines = textQuote.split("\n+"); - // matches for >>123, >>123 (OP), >>123 (You), >>>/fit/123 - final Pattern quotePattern = Pattern.compile("^>>(>/[a-z0-9]+/)?\\d+.*$"); - for (String line : lines) { - // do not include post no from quoted post - if (!quotePattern.matcher(line).matches()) { - textQuoteResult.append(">").append(line).append("\n"); - } - } - } - - commentInsert(extraNewline + postQuote + textQuoteResult.toString()); - - highlightQuotes(); - } - - private void commentInsert(String insertBefore) { - commentInsert(insertBefore, ""); - } - - private void commentInsert(String insertBefore, String insertAfter) { - draft.comment = new StringBuilder(draft.comment) - .insert(draft.selection, insertBefore + insertAfter).toString(); - draft.selection += insertBefore.length(); - callback.loadDraftIntoViews(draft); - } - - @Override - public void onFilePickLoading() { - callback.onFilePickLoading(); - } - - @Override - public void onFilePicked(String name, File file) { - pickingFile = false; - draft.file = file; - draft.fileName = name; - showPreview(name, file); - } - - @Override - public void onFilePickError(boolean cancelled) { - pickingFile = false; - if (!cancelled) { - callback.onFilePickError(); - } - } - - private void closeAll() { - moreOpen = false; - previewOpen = false; - selectedQuote = -1; - callback.openMessage(false, true, "", false); - callback.setExpanded(false); - callback.openSubject(false); - callback.openCommentQuoteButton(false); - callback.openCommentSpoilerButton(false); - callback.openNameOptions(false); - callback.openFileName(false); - callback.openSpoiler(false, false); - callback.openPreview(false, null); - callback.openPreviewMessage(false, null); - callback.destroyCurrentAuthentication(); - } - - private void makeSubmitCall() { - loadable.getSite().actions().post(draft, this); - switchPage(Page.LOADING, true); - } - - public void switchPage(Page page, boolean animate) { - switchPage(page, animate, ChanSettings.useNewCaptchaWindow.get()); - } - - public void switchPage(Page page, boolean animate, boolean useV2NoJsCaptcha) { - if (!useV2NoJsCaptcha || this.page != page) { - this.page = page; - switch (page) { - case LOADING: - callback.setPage(Page.LOADING, true); - break; - case INPUT: - callback.setPage(Page.INPUT, animate); - break; - case AUTHENTICATION: - SiteAuthentication authentication = loadable.site.actions().postAuthenticate(); - - // cleanup resources tied to the new captcha layout/presenter - callback.destroyCurrentAuthentication(); - callback.initializeAuthentication(loadable.site, authentication, this, useV2NoJsCaptcha); - callback.setPage(Page.AUTHENTICATION, true); - - break; - } - } - } - - private void highlightQuotes() { - Matcher matcher = QUOTE_PATTERN.matcher(draft.comment); - - // Find all occurrences of >>\d+ with start and end between selection - int no = -1; - while (matcher.find()) { - if (matcher.start() <= draft.selection && matcher.end() >= draft.selection - 1) { - String quote = matcher.group().substring(2); - try { - no = Integer.parseInt(quote); - break; - } catch (NumberFormatException ignored) { - } - } - } - - // Allow no = -1 removing the highlight - if (no != selectedQuote) { - selectedQuote = no; - callback.highlightPostNo(no); - } - } - - private void showPreview(String name, File file) { - callback.openPreview(true, file); - if (moreOpen) { - callback.openFileName(true); - if (board.spoilers) { - callback.openSpoiler(true, false); - } - } - callback.setFileName(name); - previewOpen = true; - - boolean probablyWebm = file.getName().endsWith(".webm"); - int maxSize = probablyWebm ? board.maxWebmSize : board.maxFileSize; - if (file.length() > maxSize) { - String fileSize = getReadableFileSize(file.length(), false); - String maxSizeString = getReadableFileSize(maxSize, false); - String text = getRes().getString(probablyWebm ? R.string.reply_webm_too_big : R.string.reply_file_too_big, fileSize, maxSizeString); - callback.openPreviewMessage(true, text); - } else { - callback.openPreviewMessage(false, null); - } - } - - public interface ReplyPresenterCallback { - void loadViewsIntoDraft(Reply draft); - - void loadDraftIntoViews(Reply draft); - - void setPage(Page page, boolean animate); - - void initializeAuthentication(Site site, - SiteAuthentication authentication, - AuthenticationLayoutCallback callback, - boolean useV2NoJsCaptcha); - - void resetAuthentication(); - - void openMessage(boolean open, boolean animate, String message, boolean autoHide); - - void onPosted(); - - void setCommentHint(String hint); - - void showCommentCounter(boolean show); - - void setExpanded(boolean expanded); - - void openNameOptions(boolean open); - - void openSubject(boolean open); - - void openCommentQuoteButton(boolean open); - - void openCommentSpoilerButton(boolean open); - - void openFileName(boolean open); - - void setFileName(String fileName); - - void updateCommentCount(int count, int maxCount, boolean over); - - void openPreview(boolean show, File previewFile); - - void openPreviewMessage(boolean show, String message); - - void openSpoiler(boolean show, boolean checked); - - void onFilePickLoading(); - - void onFilePickError(); - - void highlightPostNo(int no); - - void showThread(Loadable loadable); - - ImagePickDelegate getImagePickDelegate(); - - ChanThread getThread(); - - void focusComment(); - - void onFallbackToV1CaptchaView(); - - void destroyCurrentAuthentication(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/SettingsPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/SettingsPresenter.java deleted file mode 100644 index cf266d3ec2..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/SettingsPresenter.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.presenter; - -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.settings.ChanSettings; - -import javax.inject.Inject; - -public class SettingsPresenter { - private Callback callback; - - private DatabaseManager databaseManager; - - @Inject - public SettingsPresenter(DatabaseManager databaseManager) { - this.databaseManager = databaseManager; - } - - public void create(Callback callback) { - this.callback = callback; - } - - public void destroy() { - - } - - public void show() { - long siteCount = databaseManager.runTask( - databaseManager.getDatabaseSiteManager().getCount()); - long filterCount = databaseManager.runTask( - databaseManager.getDatabaseFilterManager().getCount()); - - callback.setSiteCount((int) siteCount); - callback.setFiltersCount((int) filterCount); - callback.setWatchEnabled(ChanSettings.watchEnabled.get()); - } - - public interface Callback { - void setSiteCount(int count); - - void setFiltersCount(int count); - - void setWatchEnabled(boolean enabled); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/SiteSetupPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/SiteSetupPresenter.java deleted file mode 100644 index e05ac5fbc0..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/SiteSetupPresenter.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.floens.chan.core.presenter; - -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.SiteSetting; - -import java.util.List; - -import javax.inject.Inject; - -public class SiteSetupPresenter { - private Callback callback; - private Site site; - private DatabaseManager databaseManager; - private boolean hasLogin; - - @Inject - public SiteSetupPresenter(DatabaseManager databaseManager) { - this.databaseManager = databaseManager; - } - - public void create(Callback callback, Site site) { - this.callback = callback; - this.site = site; - - hasLogin = site.feature(Site.Feature.LOGIN); - - if (hasLogin) { - callback.showLogin(); - } - - List settings = site.settings(); - if (!settings.isEmpty()) { - callback.showSettings(settings); - } - } - - public void show() { - setBoardCount(callback, site); - if (hasLogin) { - callback.setIsLoggedIn(site.actions().isLoggedIn()); - } - } - - private void setBoardCount(Callback callback, Site site) { - callback.setBoardCount( - databaseManager.runTask( - databaseManager.getDatabaseBoardManager().getSiteSavedBoards(site) - ).size() - ); - } - - public interface Callback { - void setBoardCount(int boardCount); - - void showLogin(); - - void setIsLoggedIn(boolean isLoggedIn); - - void showSettings(List settings); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/SitesSetupPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/SitesSetupPresenter.java deleted file mode 100644 index a3005c605f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/SitesSetupPresenter.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.presenter; - - -import org.floens.chan.core.manager.BoardManager; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.repository.SiteRepository; -import org.floens.chan.core.site.SiteService; - -import java.util.ArrayList; -import java.util.List; -import java.util.Observable; -import java.util.Observer; - -import javax.inject.Inject; - -public class SitesSetupPresenter implements Observer { - private final SiteService siteService; - private final SiteRepository siteRepository; - private final BoardManager boardManager; - - private Callback callback; - private AddCallback addCallback; - - private SiteRepository.Sites sites; - private List sitesShown = new ArrayList<>(); - - @Inject - public SitesSetupPresenter(SiteService siteService, SiteRepository siteRepository, - BoardManager boardManager) { - this.siteService = siteService; - this.siteRepository = siteRepository; - this.boardManager = boardManager; - } - - public void create(Callback callback) { - this.callback = callback; - - sites = siteRepository.all(); - sites.addObserver(this); - - sitesShown.addAll(sites.getAllInOrder()); - - updateSitesInUi(); - - if (sites.getAll().isEmpty()) { - callback.showHint(); - } - } - - public void destroy() { - sites.deleteObserver(this); - } - - @Override - public void update(Observable o, Object arg) { - if (o == sites) { - sitesShown.clear(); - sitesShown.addAll(sites.getAllInOrder()); - updateSitesInUi(); - } - } - - public void show() { - updateSitesInUi(); - } - - public void move(int from, int to) { - Site item = sitesShown.remove(from); - sitesShown.add(to, item); - saveOrder(); - updateSitesInUi(); - } - - public void bindAddDialog(AddCallback addCallback) { - this.addCallback = addCallback; - } - - public void unbindAddDialog() { - this.addCallback = null; - } - - public void onShowDialogClicked() { - callback.showAddDialog(); - } - - public void onAddClicked(String url) { - siteService.addSite(url, new SiteService.SiteAddCallback() { - @Override - public void onSiteAdded(Site site) { - siteAdded(site); - if (addCallback != null) { - addCallback.dismissDialog(); - } - } - - @Override - public void onSiteAddFailed(String message) { - if (addCallback != null) { - addCallback.showAddError(message); - } - } - }); - } - - private void siteAdded(Site site) { - sitesShown.add(site); - saveOrder(); - - updateSitesInUi(); - } - - public void onSiteCellSettingsClicked(Site site) { - callback.openSiteConfiguration(site); - } - - private void saveOrder() { - siteService.updateOrdering(sitesShown); - } - - private void updateSitesInUi() { - List r = new ArrayList<>(); - for (Site site : sitesShown) { - r.add(new SiteBoardCount(site, boardManager.getSiteSavedBoards(site).size())); - } - callback.setSites(r); - } - - public class SiteBoardCount { - public Site site; - public int boardCount; - - public SiteBoardCount(Site site, int boardCount) { - this.site = site; - this.boardCount = boardCount; - } - } - - public interface Callback { - void setSites(List sites); - - void showHint(); - - void showAddDialog(); - - void openSiteConfiguration(Site site); - } - - public interface AddCallback { - void showAddError(String error); - - void dismissDialog(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java deleted file mode 100644 index 53b0183889..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java +++ /dev/null @@ -1,814 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.presenter; - -import android.text.TextUtils; - -import org.floens.chan.Chan; -import org.floens.chan.R; -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.exception.ChanLoaderException; -import org.floens.chan.core.manager.WatchManager; -import org.floens.chan.core.model.ChanThread; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.PostLinkable; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.History; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.model.orm.Pin; -import org.floens.chan.core.model.orm.SavedReply; -import org.floens.chan.core.pool.ChanLoaderFactory; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.SiteActions; -import org.floens.chan.core.site.http.DeleteRequest; -import org.floens.chan.core.site.http.DeleteResponse; -import org.floens.chan.core.site.http.HttpCall; -import org.floens.chan.core.site.loader.ChanThreadLoader; -import org.floens.chan.ui.adapter.PostAdapter; -import org.floens.chan.ui.adapter.PostsFilter; -import org.floens.chan.ui.cell.PostCellInterface; -import org.floens.chan.ui.cell.ThreadStatusCell; -import org.floens.chan.ui.helper.PostHelper; -import org.floens.chan.ui.layout.ThreadListLayout; -import org.floens.chan.ui.view.FloatingMenuItem; -import org.floens.chan.ui.view.ThumbnailView; -import org.floens.chan.utils.AndroidUtils; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.inject.Inject; - -import static org.floens.chan.utils.AndroidUtils.getString; - -public class ThreadPresenter implements ChanThreadLoader.ChanLoaderCallback, PostAdapter.PostAdapterCallback, PostCellInterface.PostCellCallback, ThreadStatusCell.Callback, ThreadListLayout.ThreadListLayoutPresenterCallback { - private static final int POST_OPTION_QUOTE = 0; - private static final int POST_OPTION_QUOTE_TEXT = 1; - private static final int POST_OPTION_INFO = 2; - private static final int POST_OPTION_LINKS = 3; - private static final int POST_OPTION_COPY_TEXT = 4; - private static final int POST_OPTION_REPORT = 5; - private static final int POST_OPTION_HIGHLIGHT_ID = 6; - private static final int POST_OPTION_DELETE = 7; - private static final int POST_OPTION_SAVE = 8; - private static final int POST_OPTION_PIN = 9; - private static final int POST_OPTION_SHARE = 10; - private static final int POST_OPTION_HIGHLIGHT_TRIPCODE = 11; - private static final int POST_OPTION_HIDE = 12; - private static final int POST_OPTION_OPEN_BROWSER = 13; - private static final int POST_OPTION_FILTER_TRIPCODE = 14; - private static final int POST_OPTION_EXTRA = 15; - - private ThreadPresenterCallback threadPresenterCallback; - private WatchManager watchManager; - private DatabaseManager databaseManager; - private ChanLoaderFactory chanLoaderFactory; - - private Loadable loadable; - private ChanThreadLoader chanLoader; - private boolean searchOpen = false; - private String searchQuery; - private PostsFilter.Order order = PostsFilter.Order.BUMP; - private boolean historyAdded = false; - - @Inject - public ThreadPresenter(WatchManager watchManager, - DatabaseManager databaseManager, - ChanLoaderFactory chanLoaderFactory) { - this.watchManager = watchManager; - this.databaseManager = databaseManager; - this.chanLoaderFactory = chanLoaderFactory; - } - - public void create(ThreadPresenterCallback threadPresenterCallback) { - this.threadPresenterCallback = threadPresenterCallback; - } - - public void showNoContent() { - threadPresenterCallback.showEmpty(); - } - - public void bindLoadable(Loadable loadable) { - if (!loadable.equals(this.loadable)) { - if (chanLoader != null) { - unbindLoadable(); - } - - Pin pin = watchManager.findPinByLoadable(loadable); - // TODO this isn't true anymore, because all loadables come from one location. - if (pin != null) { - // Use the loadable from the pin. - // This way we can store the list position in the pin loadable, - // and not in a separate loadable instance. - loadable = pin.loadable; - } - this.loadable = loadable; - - chanLoader = chanLoaderFactory.obtain(loadable, this); - - threadPresenterCallback.showLoading(); - } - } - - public void unbindLoadable() { - if (chanLoader != null) { - chanLoader.clearTimer(); - chanLoaderFactory.release(chanLoader, this); - chanLoader = null; - loadable = null; - historyAdded = false; - - threadPresenterCallback.showNewPostsNotification(false, -1); - threadPresenterCallback.showLoading(); - } - } - - public boolean isBound() { - return chanLoader != null; - } - - public void requestInitialData() { - if (chanLoader.getThread() == null) { - requestData(); - } else { - chanLoader.quickLoad(); - } - } - - public void requestData() { - threadPresenterCallback.showLoading(); - chanLoader.requestData(); - } - - public void onForegroundChanged(boolean foreground) { - if (chanLoader != null) { - if (foreground && isWatching()) { - chanLoader.requestMoreDataAndResetTimer(); - if (chanLoader.getThread() != null) { - // Show loading indicator in the status cell - showPosts(); - } - } else { - chanLoader.clearTimer(); - } - } - } - - public boolean pin() { - Pin pin = watchManager.findPinByLoadable(loadable); - if (pin == null) { - if (chanLoader.getThread() != null) { - Post op = chanLoader.getThread().op; - watchManager.createPin(loadable, op); - } - } else { - watchManager.deletePin(pin); - } - return isPinned(); - } - - public boolean isPinned() { - return watchManager.findPinByLoadable(loadable) != null; - } - - public void onSearchVisibilityChanged(boolean visible) { - searchOpen = visible; - threadPresenterCallback.showSearch(visible); - if (!visible) { - searchQuery = null; - } - - if (chanLoader.getThread() != null) { - showPosts(); - } - } - - public void onSearchEntered(String entered) { - if (chanLoader.getThread() != null) { - searchQuery = entered; - showPosts(); - if (TextUtils.isEmpty(entered)) { - threadPresenterCallback.setSearchStatus(null, true, false); - } else { - threadPresenterCallback.setSearchStatus(entered, false, false); - } - } - } - - public void setOrder(PostsFilter.Order order) { - if (this.order != order) { - this.order = order; - if (chanLoader != null) { - ChanThread thread = chanLoader.getThread(); - if (thread != null) { - scrollTo(0, false); - showPosts(); - } - } - } - } - - public void refreshUI() { - if (chanLoader.getThread() != null) { - showPosts(); - } - } - - public void showAlbum() { - List posts = threadPresenterCallback.getDisplayingPosts(); - int[] pos = threadPresenterCallback.getCurrentPosition(); - int displayPosition = pos[0]; - - List images = new ArrayList<>(); - int index = 0; - for (int i = 0; i < posts.size(); i++) { - Post item = posts.get(i); - if (!item.images.isEmpty()) { - images.addAll(item.images); - } - if (i == displayPosition) { - index = images.size(); - } - } - - threadPresenterCallback.showAlbum(images, index); - } - - @Override - public Loadable getLoadable() { - return loadable; - } - - /* - * ChanThreadLoader callbacks - */ - @Override - public void onChanLoaderData(ChanThread result) { - if (isWatching()) { - chanLoader.setTimer(); - } - - showPosts(); - - if (loadable.isThreadMode()) { - int lastLoaded = loadable.lastLoaded; - List posts = result.posts; - int more = 0; - if (lastLoaded > 0) { - for (int i = 0; i < posts.size(); i++) { - Post post = posts.get(i); - if (post.no == lastLoaded) { - more = posts.size() - i - 1; - break; - } - } - } - loadable.setLastLoaded(posts.get(posts.size() - 1).no); - - if (more > 0) { - threadPresenterCallback.showNewPostsNotification(true, more); - } - } - - if (loadable.markedNo >= 0) { - Post markedPost = findPostById(loadable.markedNo); - if (markedPost != null) { - highlightPost(markedPost); - scrollToPost(markedPost, false); - } - loadable.markedNo = -1; - } - - addHistory(); - } - - @Override - public void onChanLoaderError(ChanLoaderException error) { - threadPresenterCallback.showError(error); - } - - /* - * PostAdapter callbacks - */ - @Override - public void onListScrolledToBottom() { - if (loadable.isThreadMode()) { - List posts = chanLoader.getThread().posts; - loadable.setLastViewed(posts.get(posts.size() - 1).no); - } - - Pin pin = watchManager.findPinByLoadable(loadable); - if (pin != null) { - watchManager.onBottomPostViewed(pin); - } - - threadPresenterCallback.showNewPostsNotification(false, -1); - - // Update the last seen indicator - showPosts(); - } - - public void onNewPostsViewClicked() { - Post post = findPostById(loadable.lastViewed); - if (post != null) { - scrollToPost(post, true); - } else { - scrollTo(-1, true); - } - } - - public void scrollTo(int displayPosition, boolean smooth) { - threadPresenterCallback.scrollTo(displayPosition, smooth); - } - - public void scrollToImage(PostImage postImage, boolean smooth) { - if (!searchOpen) { - int position = -1; - List posts = threadPresenterCallback.getDisplayingPosts(); - - out: - for (int i = 0; i < posts.size(); i++) { - Post post = posts.get(i); - if (!post.images.isEmpty()) { - for (int j = 0; j < post.images.size(); j++) { - if (post.images.get(j) == postImage) { - position = i; - break out; - } - } - } - } - if (position >= 0) { - scrollTo(position, smooth); - } - } - } - - public void scrollToPost(Post needle, boolean smooth) { - int position = -1; - List posts = threadPresenterCallback.getDisplayingPosts(); - for (int i = 0; i < posts.size(); i++) { - Post post = posts.get(i); - if (post.no == needle.no) { - position = i; - break; - } - } - if (position >= 0) { - scrollTo(position, smooth); - } - } - - public void highlightPost(Post post) { - threadPresenterCallback.highlightPost(post); - } - - public void selectPost(int post) { - threadPresenterCallback.selectPost(post); - } - - public void selectPostImage(PostImage postImage) { - List posts = threadPresenterCallback.getDisplayingPosts(); - for (int i = 0; i < posts.size(); i++) { - Post post = posts.get(i); - - if (!post.images.isEmpty()) { - for (int j = 0; j < post.images.size(); j++) { - if (post.images.get(j) == postImage) { - scrollToPost(post, false); - highlightPost(post); - return; - } - } - } - } - } - - /* - * PostView callbacks - */ - @Override - public void onPostClicked(Post post) { - if (loadable.isCatalogMode()) { - Loadable threadLoadable = databaseManager.getDatabaseLoadableManager().get(Loadable.forThread(loadable.site, post.board, post.no)); - threadLoadable.title = PostHelper.getTitle(post, loadable); - threadPresenterCallback.showThread(threadLoadable); - } else { - if (searchOpen) { - searchQuery = null; - showPosts(); - threadPresenterCallback.setSearchStatus(null, false, true); - highlightPost(post); - scrollToPost(post, false); - } else { - threadPresenterCallback.postClicked(post); - } - } - } - - @Override - public void onThumbnailClicked(Post post, PostImage postImage, ThumbnailView thumbnail) { - List images = new ArrayList<>(); - int index = -1; - List posts = threadPresenterCallback.getDisplayingPosts(); - for (int i = 0; i < posts.size(); i++) { - Post item = posts.get(i); - - if (!item.images.isEmpty()) { - for (int j = 0; j < item.images.size(); j++) { - PostImage image = item.images.get(j); - images.add(image); - if (image.equalUrl(postImage)) { - index = images.size() - 1; - } - } - } - } - - threadPresenterCallback.showImages(images, index, chanLoader.getLoadable(), thumbnail); - } - - @Override - public Object onPopulatePostOptions(Post post, List menu, - List extraMenu) { - if (!loadable.isThreadMode()) { - menu.add(new FloatingMenuItem(POST_OPTION_PIN, R.string.action_pin)); - } else { - menu.add(new FloatingMenuItem(POST_OPTION_QUOTE, R.string.post_quote)); - menu.add(new FloatingMenuItem(POST_OPTION_QUOTE_TEXT, R.string.post_quote_text)); - } - - if (!loadable.isThreadMode()) { - menu.add(new FloatingMenuItem(POST_OPTION_HIDE, R.string.post_hide)); - } - - if (loadable.getSite().feature(Site.Feature.POST_REPORT)) { - menu.add(new FloatingMenuItem(POST_OPTION_REPORT, R.string.post_report)); - } - - if (loadable.isThreadMode()) { - if (!TextUtils.isEmpty(post.id)) { - menu.add(new FloatingMenuItem(POST_OPTION_HIGHLIGHT_ID, R.string.post_highlight_id)); - } - - if (!TextUtils.isEmpty(post.tripcode)) { - menu.add(new FloatingMenuItem(POST_OPTION_HIGHLIGHT_TRIPCODE, R.string.post_highlight_tripcode)); - menu.add(new FloatingMenuItem(POST_OPTION_FILTER_TRIPCODE, R.string.post_filter_tripcode)); - } - } - - if (loadable.site.feature(Site.Feature.POST_DELETE) && - databaseManager.getDatabaseSavedReplyManager().isSaved(post.board, post.no)) { - menu.add(new FloatingMenuItem(POST_OPTION_DELETE, R.string.post_delete)); - } - - menu.add(new FloatingMenuItem(POST_OPTION_EXTRA, R.string.post_more)); - - extraMenu.add(new FloatingMenuItem(POST_OPTION_INFO, R.string.post_info)); - extraMenu.add(new FloatingMenuItem(POST_OPTION_LINKS, R.string.post_show_links)); - extraMenu.add(new FloatingMenuItem(POST_OPTION_OPEN_BROWSER, R.string.action_open_browser)); - extraMenu.add(new FloatingMenuItem(POST_OPTION_SHARE, R.string.post_share)); - extraMenu.add(new FloatingMenuItem(POST_OPTION_COPY_TEXT, R.string.post_copy_text)); - - if (ChanSettings.developer.get()) { - extraMenu.add(new FloatingMenuItem(POST_OPTION_SAVE, "Save")); - } - - return POST_OPTION_EXTRA; - } - - public void onPostOptionClicked(Post post, Object id) { - switch ((Integer) id) { - case POST_OPTION_QUOTE: - threadPresenterCallback.hidePostsPopup(); - threadPresenterCallback.quote(post, false); - break; - case POST_OPTION_QUOTE_TEXT: - threadPresenterCallback.hidePostsPopup(); - threadPresenterCallback.quote(post, true); - break; - case POST_OPTION_INFO: - showPostInfo(post); - break; - case POST_OPTION_LINKS: - if (post.linkables.size() > 0) { - threadPresenterCallback.showPostLinkables(post); - } - break; - case POST_OPTION_COPY_TEXT: - threadPresenterCallback.clipboardPost(post); - break; - case POST_OPTION_REPORT: - threadPresenterCallback.openReportView(post); - break; - case POST_OPTION_HIGHLIGHT_ID: - threadPresenterCallback.highlightPostId(post.id); - break; - case POST_OPTION_HIGHLIGHT_TRIPCODE: - threadPresenterCallback.highlightPostTripcode(post.tripcode); - break; - case POST_OPTION_FILTER_TRIPCODE: - threadPresenterCallback.filterPostTripcode(post.tripcode); - break; - case POST_OPTION_DELETE: - requestDeletePost(post); - break; - case POST_OPTION_SAVE: - SavedReply savedReply = SavedReply.fromSiteBoardNoPassword( - post.board.site, post.board, post.no, ""); - databaseManager.runTaskAsync(databaseManager.getDatabaseSavedReplyManager().saveReply(savedReply)); - break; - case POST_OPTION_PIN: - Loadable pinLoadable = databaseManager.getDatabaseLoadableManager().get(Loadable.forThread(loadable.site, post.board, post.no)); - watchManager.createPin(pinLoadable, post); - break; - case POST_OPTION_OPEN_BROWSER: { - String url = loadable.site.resolvable().desktopUrl(loadable, post.isOP ? null : post); - AndroidUtils.openLink(url); - break; - } - case POST_OPTION_SHARE: { - String url = loadable.site.resolvable().desktopUrl(loadable, post.isOP ? null : post); - AndroidUtils.shareLink(url); - break; - } - case POST_OPTION_HIDE: - threadPresenterCallback.hideThread(post); - } - } - - @Override - public void onPostLinkableClicked(Post post, PostLinkable linkable) { - if (linkable.type == PostLinkable.Type.QUOTE) { - Post linked = findPostById((int) linkable.value); - if (linked != null) { - threadPresenterCallback.showPostsPopup(post, Collections.singletonList(linked)); - } - } else if (linkable.type == PostLinkable.Type.LINK) { - threadPresenterCallback.openLink((String) linkable.value); - } else if (linkable.type == PostLinkable.Type.THREAD) { - PostLinkable.ThreadLink link = (PostLinkable.ThreadLink) linkable.value; - - Board board = loadable.site.board(link.board); - if (board != null) { - Loadable thread = databaseManager.getDatabaseLoadableManager().get(Loadable.forThread(board.site, board, link.threadId)); - thread.markedNo = link.postId; - - threadPresenterCallback.showThread(thread); - } - } - } - - @Override - public void onPostNoClicked(Post post) { - threadPresenterCallback.quote(post, false); - } - - @Override - public void onPostSelectionQuoted(Post post, CharSequence quoted) { - threadPresenterCallback.quote(post, quoted); - } - - @Override - public void onShowPostReplies(Post post) { - List posts = new ArrayList<>(); - synchronized (post.repliesFrom) { - for (int no : post.repliesFrom) { - Post replyPost = findPostById(no); - if (replyPost != null) { - posts.add(replyPost); - } - } - } - if (posts.size() > 0) { - threadPresenterCallback.showPostsPopup(post, posts); - } - } - - /* - * ThreadStatusCell callbacks - */ - @Override - public long getTimeUntilLoadMore() { - return chanLoader.getTimeUntilLoadMore(); - } - - @Override - public boolean isWatching() { - return loadable.isThreadMode() && ChanSettings.autoRefreshThread.get() && - Chan.getInstance().getApplicationInForeground() && chanLoader.getThread() != null && - !chanLoader.getThread().closed && !chanLoader.getThread().archived; - } - - @Override - public ChanThread getChanThread() { - return chanLoader == null ? null : chanLoader.getThread(); - } - - @Override - public void onListStatusClicked() { - chanLoader.requestMoreDataAndResetTimer(); - } - - @Override - public void showThread(Loadable loadable) { - threadPresenterCallback.showThread(loadable); - } - - @Override - public void requestNewPostLoad() { - if (loadable != null && loadable.isThreadMode()) { - chanLoader.requestMoreDataAndResetTimer(); - } - } - - public void deletePostConfirmed(Post post, boolean onlyImageDelete) { - threadPresenterCallback.showDeleting(); - - SavedReply reply = databaseManager.runTask( - databaseManager.getDatabaseSavedReplyManager().findSavedReply(post.board, post.no) - ); - if (reply != null) { - Site site = loadable.getSite(); - site.actions().delete(new DeleteRequest(post, reply, onlyImageDelete), new SiteActions.DeleteListener() { - @Override - public void onDeleteComplete(HttpCall httpPost, DeleteResponse deleteResponse) { - String message; - if (deleteResponse.deleted) { - message = getString(R.string.delete_success); - } else if (!TextUtils.isEmpty(deleteResponse.errorMessage)) { - message = deleteResponse.errorMessage; - } else { - message = getString(R.string.delete_error); - } - threadPresenterCallback.hideDeleting(message); - } - - @Override - public void onDeleteError(HttpCall httpCall) { - threadPresenterCallback.hideDeleting(getString(R.string.delete_error)); - } - }); - } - } - - private void requestDeletePost(Post post) { - SavedReply reply = databaseManager.runTask( - databaseManager.getDatabaseSavedReplyManager().findSavedReply(post.board, post.no) - ); - if (reply != null) { - threadPresenterCallback.confirmPostDelete(post); - } - } - - private void showPostInfo(Post post) { - StringBuilder text = new StringBuilder(); - - for (PostImage image : post.images) { - text.append("Filename: ") - .append(image.filename).append(".").append(image.extension) - .append(" \nDimensions: ") - .append(image.imageWidth).append("x").append(image.imageHeight) - .append("\nSize: ") - .append(AndroidUtils.getReadableFileSize(image.size, false)); - - if (image.spoiler) { - text.append("\nSpoilered"); - } - - text.append("\n"); - } - - // TODO(multi-site) get this from the timestamp -// text += "Date: " + post.date; - - if (!TextUtils.isEmpty(post.id)) { - text.append("\nId: ").append(post.id); - } - - if (!TextUtils.isEmpty(post.tripcode)) { - text.append("\nTripcode: ").append(post.tripcode); - } - - /*if (!TextUtils.isEmpty(post.countryName)) { - text += "\nCountry: " + post.country + ", " + post.countryName; - }*/ - - if (!TextUtils.isEmpty(post.capcode)) { - text.append("\nCapcode: ").append(post.capcode); - } - - threadPresenterCallback.showPostInfo(text.toString()); - } - - private Post findPostById(int id) { - ChanThread thread = chanLoader.getThread(); - if (thread != null) { - for (Post post : thread.posts) { - if (post.no == id) { - return post; - } - } - } - return null; - } - - private void showPosts() { - threadPresenterCallback.showPosts(chanLoader.getThread(), new PostsFilter(order, searchQuery)); - } - - private void addHistory() { - if (!historyAdded && ChanSettings.historyEnabled.get() && loadable.isThreadMode()) { - historyAdded = true; - History history = new History(); - history.loadable = loadable; - PostImage image = chanLoader.getThread().op.image(); - history.thumbnailUrl = image == null ? "" : image.getThumbnailUrl().toString(); - databaseManager.runTaskAsync(databaseManager.getDatabaseHistoryManager().addHistory(history)); - } - } - - public interface ThreadPresenterCallback { - void showPosts(ChanThread thread, PostsFilter filter); - - void postClicked(Post post); - - void showError(ChanLoaderException error); - - void showLoading(); - - void showEmpty(); - - void showPostInfo(String info); - - void showPostLinkables(Post post); - - void clipboardPost(Post post); - - void showThread(Loadable threadLoadable); - - void openLink(String link); - - void openReportView(Post post); - - void showPostsPopup(Post forPost, List posts); - - void hidePostsPopup(); - - List getDisplayingPosts(); - - int[] getCurrentPosition(); - - void showImages(List images, int index, Loadable loadable, ThumbnailView thumbnail); - - void showAlbum(List images, int index); - - void scrollTo(int displayPosition, boolean smooth); - - void highlightPost(Post post); - - void highlightPostId(String id); - - void highlightPostTripcode(String tripcode); - - void filterPostTripcode(String tripcode); - - void selectPost(int post); - - void showSearch(boolean show); - - void setSearchStatus(String query, boolean setEmptyText, boolean hideKeyboard); - - void quote(Post post, boolean withText); - - void quote(Post post, CharSequence text); - - void confirmPostDelete(Post post); - - void showDeleting(); - - void hideDeleting(String message); - - void hideThread(Post post); - - void showNewPostsNotification(boolean show, int more); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/receiver/WatchUpdateReceiver.java b/Clover/app/src/main/java/org/floens/chan/core/receiver/WatchUpdateReceiver.java deleted file mode 100644 index 28c6c6c542..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/receiver/WatchUpdateReceiver.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.receiver; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import org.floens.chan.core.manager.WatchManager; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; - -public class WatchUpdateReceiver extends BroadcastReceiver { - private static final String TAG = "WatchUpdateReceiver"; - - @Inject - WatchManager watchManager; - - public WatchUpdateReceiver() { - inject(this); - } - - @Override - public void onReceive(Context context, Intent intent) { - watchManager.onBroadcastReceived(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/repository/BoardRepository.java b/Clover/app/src/main/java/org/floens/chan/core/repository/BoardRepository.java deleted file mode 100644 index 58a47a332f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/repository/BoardRepository.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.repository; - -import android.util.Pair; - -import org.floens.chan.core.database.DatabaseBoardManager; -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.site.Site; -import org.floens.chan.utils.Logger; -import org.floens.chan.utils.Time; - -import java.util.ArrayList; -import java.util.List; -import java.util.Observable; -import java.util.Observer; - -import javax.inject.Inject; -import javax.inject.Singleton; - -@Singleton -public class BoardRepository implements Observer { - private static final String TAG = "BoardRepository"; - - private final DatabaseManager databaseManager; - private final DatabaseBoardManager databaseBoardManager; - - private final SiteRepository siteRepository; - private final SiteRepository.Sites allSites; - - private SitesBoards allBoards = new SitesBoards(); - private SitesBoards savedBoards = new SitesBoards(); - - @Inject - public BoardRepository(DatabaseManager databaseManager, SiteRepository siteRepository) { - this.databaseManager = databaseManager; - databaseBoardManager = databaseManager.getDatabaseBoardManager(); - - this.siteRepository = siteRepository; - - allSites = this.siteRepository.all(); - } - - public void initialize() { - updateObservablesSync(); - - allSites.addObserver(this); - } - - @Override - public void update(Observable o, Object arg) { - if (o == allSites) { - updateObservablesAsync(); - } - } - - public void updateAvailableBoardsForSite(Site site, List availableBoards) { - boolean changed = databaseManager.runTask(databaseBoardManager.createAll(site, availableBoards)); - Logger.d(TAG, "updateAvailableBoardsForSite changed = " + changed); - if (changed) { - updateObservablesAsync(); - } - } - - public Board getFromCode(Site site, String code) { - for (SiteBoards siteBoards : allBoards.get()) { - if (siteBoards.site.id() == site.id()) { - for (Board board : siteBoards.boards) { - if (board.code.equals(code)) { - return board; - } - - } - return null; - } - } - - return null; - } - - public SitesBoards getAll() { - return allBoards; - } - - public SitesBoards getSaved() { - return savedBoards; - } - - public List getSiteBoards(Site site) { - for (SiteBoards item : allBoards.siteBoards) { - if (item.site.id() == site.id()) { - return item.boards; - } - } - return new ArrayList<>(); - } - - public List getSiteSavedBoards(Site site) { - for (SiteBoards item : savedBoards.siteBoards) { - if (item.site.id() == site.id()) { - return item.boards; - } - } - return new ArrayList<>(); - } - - public void updateBoardOrders(List boards) { - databaseManager.runTaskAsync(databaseBoardManager.updateOrders(boards), - (e) -> updateObservablesAsync()); - } - - public void setSaved(Board board, boolean saved) { - board.saved = saved; - databaseManager.runTaskAsync(databaseBoardManager.updateIncludingUserFields(board), - (e) -> updateObservablesAsync()); - } - - public void setAllSaved(List boards, boolean saved) { - for (Board board : boards) { - board.saved = saved; - } - databaseManager.runTaskAsync(databaseBoardManager.updateIncludingUserFields(boards), - (e) -> updateObservablesAsync()); - } - - private void updateObservablesSync() { - long start = Time.startTiming(); - updateWith(databaseManager.runTask( - databaseBoardManager.getBoardsForAllSitesOrdered(allSites.getAll()))); - Time.endTiming("BoardRepository.updateObservablesSync", start); - } - - private void updateObservablesAsync() { - databaseManager.runTaskAsync( - databaseBoardManager.getBoardsForAllSitesOrdered(allSites.getAll()), - this::updateWith); - } - - private void updateWith(List>> databaseData) { - List all = new ArrayList<>(); - List saved = new ArrayList<>(); - for (Pair> item : databaseData) { - all.add(new SiteBoards(item.first, item.second)); - - List savedBoards = new ArrayList<>(); - for (Board board : item.second) { - if (board.saved) savedBoards.add(board); - } - saved.add(new SiteBoards(item.first, savedBoards)); - } - - allBoards.set(all); - savedBoards.set(saved); - - allBoards.notifyObservers(); - savedBoards.notifyObservers(); - } - - public class SitesBoards extends Observable { - private List siteBoards = new ArrayList<>(); - - public void set(List siteBoards) { - this.siteBoards = siteBoards; - setChanged(); - } - - public List get() { - return siteBoards; - } - } - - public class SiteBoards { - public final Site site; - public final List boards; - - public SiteBoards(Site site, List boards) { - this.site = site; - this.boards = boards; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/repository/SiteRepository.java b/Clover/app/src/main/java/org/floens/chan/core/repository/SiteRepository.java deleted file mode 100644 index 075eacdb16..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/repository/SiteRepository.java +++ /dev/null @@ -1,258 +0,0 @@ -package org.floens.chan.core.repository; - -import android.util.Pair; -import android.util.SparseArray; - -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.model.json.site.SiteConfig; -import org.floens.chan.core.model.orm.SiteModel; -import org.floens.chan.core.settings.json.JsonSettings; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.SiteRegistry; -import org.floens.chan.core.site.sites.chan4.Chan4; -import org.floens.chan.utils.Logger; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Observable; - -import javax.inject.Inject; -import javax.inject.Singleton; - -@Singleton -public class SiteRepository { - private static final String TAG = "SiteRepository"; - - private DatabaseManager databaseManager; - - private Sites sitesObservable = new Sites(); - - // Shortcut - private static SiteRepository instance; - - public static Site forId(int id) { - return instance.sitesObservable.forId(id); - } - - @Inject - public SiteRepository(DatabaseManager databaseManager) { - instance = this; - this.databaseManager = databaseManager; - } - - public Sites all() { - return sitesObservable; - } - - public SiteModel byId(int id) { - return databaseManager.runTask(databaseManager.getDatabaseSiteManager() - .byId(id)); - } - - public void setId(SiteModel siteModel, int id) { - databaseManager.runTask(databaseManager.getDatabaseSiteManager() - .updateId(siteModel, id)); - } - - public void updateSiteUserSettingsAsync(SiteModel siteModel, JsonSettings jsonSettings) { - siteModel.storeUserSettings(jsonSettings); - databaseManager.runTaskAsync(databaseManager.getDatabaseSiteManager() - .update(siteModel)); - } - - public Map getOrdering() { - return databaseManager.runTask(databaseManager.getDatabaseSiteManager().getOrdering()); - } - - public void updateSiteOrderingAsync(List sites) { - List ids = new ArrayList<>(sites.size()); - for (Site site : sites) { - ids.add(site.id()); - } - - databaseManager.runTaskAsync( - databaseManager.getDatabaseSiteManager().updateOrdering(ids), - (r) -> { - sitesObservable.wasReordered(); - sitesObservable.notifyObservers(); - }); - } - - public void initialize() { - List sites = new ArrayList<>(); - - List models = databaseManager.runTask( - databaseManager.getDatabaseSiteManager().getAll()); - - for (SiteModel siteModel : models) { - SiteConfigSettingsHolder holder; - try { - holder = instantiateSiteFromModel(siteModel); - } catch (IllegalArgumentException e) { - Logger.e(TAG, "instantiateSiteFromModel", e); - break; - } - - Site site = holder.site; - SiteConfig config = holder.config; - JsonSettings settings = holder.settings; - - site.initialize(siteModel.id, config, settings); - - sites.add(site); - } - - sitesObservable.addAll(sites); - - for (Site site : sites) { - site.postInitialize(); - } - - sitesObservable.notifyObservers(); - } - - // Called before #initialize to add the old 4chan site when the database was upgraded from - // an older version. It only adds the model to the database with id 0. - public void addLegacySite() { - Site site = new Chan4(); - - SiteConfig config = new SiteConfig(); - config.classId = SiteRegistry.SITE_CLASSES.indexOfValue(site.getClass()); - config.external = false; - - SiteModel model = createFromClass(config, new JsonSettings()); - setId(model, 0); - } - - public Site createFromClass(Class siteClass) { - Site site = instantiateSiteClass(siteClass); - - SiteConfig config = new SiteConfig(); - JsonSettings settings = new JsonSettings(); - - config.classId = SiteRegistry.SITE_CLASSES.indexOfValue(site.getClass()); - config.external = false; - - SiteModel model = createFromClass(config, settings); - - site.initialize(model.id, config, settings); - - sitesObservable.add(site); - - site.postInitialize(); - - sitesObservable.notifyObservers(); - - return site; - } - - private SiteModel createFromClass(SiteConfig config, JsonSettings userSettings) { - SiteModel siteModel = new SiteModel(); - siteModel.storeConfig(config); - siteModel.storeUserSettings(userSettings); - databaseManager.runTask(databaseManager.getDatabaseSiteManager().add(siteModel)); - - return siteModel; - } - - private SiteConfigSettingsHolder instantiateSiteFromModel(SiteModel siteModel) { - Pair configFields = siteModel.loadConfigFields(); - SiteConfig config = configFields.first; - JsonSettings settings = configFields.second; - - return new SiteConfigSettingsHolder( - instantiateSiteClass(config.classId), - config, - settings); - } - - private Site instantiateSiteClass(int classId) { - Class clazz = SiteRegistry.SITE_CLASSES.get(classId); - if (clazz == null) { - throw new IllegalArgumentException("Unknown class id"); - } - return instantiateSiteClass(clazz); - } - - private Site instantiateSiteClass(Class clazz) { - Site site; - try { - site = clazz.newInstance(); - } catch (InstantiationException e) { - throw new IllegalArgumentException(); - } catch (IllegalAccessException e) { - throw new IllegalArgumentException(); - } - return site; - } - - public class Sites extends Observable { - private List sites = Collections.unmodifiableList(new ArrayList<>()); - private SparseArray sitesById = new SparseArray<>(); - - public Site forId(int id) { - Site s = sitesById.get(id); - if (s == null) { - throw new IllegalArgumentException("No site with id (" + id + ")"); - } - return s; - } - - public List getAll() { - return new ArrayList<>(sites); - } - - public List getAllInOrder() { - Map ordering = getOrdering(); - - List ordered = new ArrayList<>(sites); - Collections.sort(ordered, - (lhs, rhs) -> ordering.get(lhs.id()) - ordering.get(rhs.id())); - - return ordered; - } - - private void addAll(List all) { - List copy = new ArrayList<>(sites); - copy.addAll(all); - resetSites(copy); - setChanged(); - } - - private void add(Site site) { - List copy = new ArrayList<>(sites); - copy.add(site); - resetSites(copy); - setChanged(); - } - - // We don't keep the order ourselves here, that's the task of listeners. Do notify the - // listeners. - private void wasReordered() { - setChanged(); - } - - private void resetSites(List newSites) { - sites = Collections.unmodifiableList(newSites); - SparseArray byId = new SparseArray<>(newSites.size()); - for (Site newSite : newSites) { - byId.put(newSite.id(), newSite); - } - sitesById = byId; - } - } - - private class SiteConfigSettingsHolder { - Site site; - SiteConfig config; - JsonSettings settings; - - public SiteConfigSettingsHolder(Site site, SiteConfig config, JsonSettings settings) { - this.site = site; - this.config = config; - this.settings = settings; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/saver/FileWatcher.java b/Clover/app/src/main/java/org/floens/chan/core/saver/FileWatcher.java deleted file mode 100644 index 9fa4cd6a2f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/saver/FileWatcher.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.saver; - -import android.os.Environment; -import android.os.FileObserver; -import android.util.Log; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -public class FileWatcher { - private static final String TAG = "FileWatcher"; - - private static final Comparator FILE_COMPARATOR = new Comparator() { - @Override - public int compare(FileItem a, FileItem b) { - return a.file.getName().compareToIgnoreCase(b.file.getName()); - } - }; - - private final FileWatcherCallback callback; - boolean initialized = false; - private File startingPath; - - private File currentPath; - - private AFileObserver fileObserver; - - public FileWatcher(FileWatcherCallback callback, File startingPath) { - this.callback = callback; - this.startingPath = startingPath; - } - - public void initialize() { - initialized = true; - - if (!StorageHelper.canNavigate(startingPath)) { - startingPath = Environment.getExternalStorageDirectory(); - } - - navigateTo(startingPath); - } - - public File getCurrentPath() { - return currentPath; - } - - public void navigateUp() { - File parentFile = currentPath.getParentFile(); - if (parentFile != null && StorageHelper.canNavigate(parentFile)) { - navigateTo(parentFile); - } - } - - public void navigateTo(File to) { - if (!StorageHelper.canNavigate(to)) { - throw new IllegalArgumentException("Cannot navigate to " + to.getAbsolutePath()); - } - - if (fileObserver != null) { - fileObserver.stopWatching(); - fileObserver = null; - } - - // TODO: fileobserver is broken -// int mask = FileObserver.CREATE | FileObserver.DELETE; -// fileObserver = new AFileObserver(to.getAbsolutePath(), mask); -// fileObserver = new AFileObserver("/sdcard/"); -// fileObserver.startWatching(); - - currentPath = to; - - File[] files = currentPath.listFiles(); - - List folderList = new ArrayList<>(); - List fileList = new ArrayList<>(); - for (File file : files) { - if (StorageHelper.canNavigate(file)) { - folderList.add(new FileItem(file)); - } else if (file.isFile()) { - fileList.add(new FileItem(file)); - } - } - Collections.sort(folderList, FILE_COMPARATOR); - Collections.sort(fileList, FILE_COMPARATOR); - List items = new ArrayList<>(folderList.size() + fileList.size()); - items.addAll(folderList); - items.addAll(fileList); - - boolean canNavigateUp = StorageHelper.canNavigate(currentPath.getParentFile()); - - callback.onFiles(new FileItems(currentPath, items, canNavigateUp)); - } - - private class AFileObserver extends FileObserver { - public AFileObserver(String path) { - super(path); - } - - public AFileObserver(String path, int mask) { - super(path, mask); - } - - @Override - public void onEvent(int event, String path) { - Log.d(TAG, "onEvent() called with: " + "event = [" + event + "], path = [" + path + "]"); - } - } - - public interface FileWatcherCallback { - void onFiles(FileItems fileItems); - } - - public static class FileItem { - public File file; - - public FileItem(File file) { - this.file = file; - } - - public boolean isFile() { - return file.isFile(); - } - - public boolean isFolder() { - return file.isDirectory(); - } - - public boolean canNavigate() { - return StorageHelper.canNavigate(file); - } - - public boolean canOpen() { - return StorageHelper.canOpen(file); - } - } - - public static class FileItems { - public final File path; - public final List fileItems; - - public final boolean canNavigateUp; - - public FileItems(File path, List fileItems, boolean canNavigateUp) { - this.path = path; - this.fileItems = fileItems; - this.canNavigateUp = canNavigateUp; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaveTask.java b/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaveTask.java deleted file mode 100644 index 74d4815aae..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaveTask.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.saver; - -import android.content.Intent; -import android.graphics.Bitmap; -import android.media.MediaScannerConnection; -import android.net.Uri; - -import org.floens.chan.core.cache.FileCacheListener; -import org.floens.chan.core.cache.FileCache; -import org.floens.chan.core.cache.FileCacheDownloader; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.IOUtils; -import org.floens.chan.utils.ImageDecoder; -import org.floens.chan.utils.Logger; - -import java.io.File; -import java.io.IOException; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getAppContext; - -public class ImageSaveTask extends FileCacheListener implements Runnable { - private static final String TAG = "ImageSaveTask"; - - @Inject - FileCache fileCache; - - private PostImage postImage; - private ImageSaveTaskCallback callback; - private File destination; - private boolean share; - private boolean makeBitmap; - private Bitmap bitmap; - private boolean showToast; - private String subFolder; - - private boolean success = false; - - public ImageSaveTask(PostImage postImage) { - inject(this); - this.postImage = postImage; - } - - public void setSubFolder(String boardName) { - this.subFolder = boardName; - } - - public String getSubFolder() { - return subFolder; - } - - public void setCallback(ImageSaveTaskCallback callback) { - this.callback = callback; - } - - public PostImage getPostImage() { - return postImage; - } - - public void setDestination(File destination) { - this.destination = destination; - } - - public File getDestination() { - return destination; - } - - public void setShare(boolean share) { - this.share = share; - } - - public void setMakeBitmap(boolean makeBitmap) { - this.makeBitmap = makeBitmap; - } - - public boolean isMakeBitmap() { - return makeBitmap; - } - - public Bitmap getBitmap() { - return bitmap; - } - - public void setShowToast(boolean showToast) { - this.showToast = showToast; - } - - public boolean isShowToast() { - return showToast; - } - - @Override - public void run() { - try { - if (destination.exists()) { - onDestination(); - // Manually call postFinished() - postFinished(success); - } else { - FileCacheDownloader fileCacheDownloader = - fileCache.downloadFile(postImage.imageUrl.toString(), this); - - // If the fileCacheDownloader is null then the destination already existed and onSuccess() has been called. - // Wait otherwise for the download to finish to avoid that the next task is immediately executed. - if (fileCacheDownloader != null) { - // If the file is now downloading - fileCacheDownloader.getFuture().get(); - } - } - } catch (InterruptedException e) { - onInterrupted(); - } catch (Exception e) { - Logger.e(TAG, "Uncaught exception", e); - } - } - - @Override - public void onSuccess(File file) { - if (copyToDestination(file)) { - onDestination(); - } else { - deleteDestination(); - } - } - - @Override - public void onEnd() { - postFinished(success); - } - - private void onInterrupted() { - deleteDestination(); - } - - private void deleteDestination() { - if (destination.exists()) { - if (!destination.delete()) { - Logger.e(TAG, "Could not delete destination after an interrupt"); - } - } - } - - private void onDestination() { - success = true; - scanDestination(); - if (makeBitmap) { - bitmap = ImageDecoder.decodeFile(destination, dp(512), dp(256)); - } - } - - private boolean copyToDestination(File source) { - boolean result = false; - - try { - File parent = destination.getParentFile(); - if (!parent.mkdirs() && !parent.isDirectory()) { - throw new IOException("Could not create parent directory"); - } - - if (destination.isDirectory()) { - throw new IOException("Destination file is already a directory"); - } - - IOUtils.copyFile(source, destination); - - result = true; - } catch (IOException e) { - Logger.e(TAG, "Error writing to file", e); - } - - return result; - } - - private void scanDestination() { - MediaScannerConnection.scanFile(getAppContext(), new String[]{destination.getAbsolutePath()}, null, new MediaScannerConnection.OnScanCompletedListener() { - @Override - public void onScanCompleted(String path, final Uri uri) { - // Runs on a binder thread - AndroidUtils.runOnUiThread(new Runnable() { - @Override - public void run() { - afterScan(uri); - } - }); - } - }); - } - - private void afterScan(final Uri uri) { - Logger.d(TAG, "Media scan succeeded: " + uri); - - if (share) { - Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("image/*"); - intent.putExtra(Intent.EXTRA_STREAM, uri); - AndroidUtils.openIntent(intent); - } - } - - private void postFinished(final boolean success) { - AndroidUtils.runOnUiThread(() -> - callback.imageSaveTaskFinished(ImageSaveTask.this, success)); - } - - public interface ImageSaveTaskCallback { - void imageSaveTaskFinished(ImageSaveTask task, boolean success); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaver.java b/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaver.java deleted file mode 100644 index ef99fb31b5..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaver.java +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.saver; - -import android.Manifest; -import android.app.NotificationManager; -import android.content.Context; -import android.content.Intent; -import android.support.v4.app.NotificationCompat; -import android.widget.Toast; - -import org.floens.chan.R; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.activity.StartActivity; -import org.floens.chan.ui.helper.RuntimePermissionsHelper; -import org.floens.chan.ui.service.SavingNotification; - -import java.io.File; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.regex.Pattern; - -import de.greenrobot.event.EventBus; - -import static org.floens.chan.utils.AndroidUtils.getAppContext; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class ImageSaver implements ImageSaveTask.ImageSaveTaskCallback { - private static final String TAG = "ImageSaver"; - private static final int MAX_RENAME_TRIES = 500; - private static final int NOTIFICATION_ID = 3; - private static final int MAX_NAME_LENGTH = 50; - private static final Pattern REPEATED_UNDERSCORES_PATTERN = Pattern.compile("_+"); - private static final Pattern SAFE_CHARACTERS_PATTERN = Pattern.compile("[^a-zA-Z0-9._]"); - private static final ImageSaver instance = new ImageSaver(); - private NotificationManager notificationManager; - private ExecutorService executor = Executors.newSingleThreadExecutor(); - private int doneTasks = 0; - private int totalTasks = 0; - private Toast toast; - - public static ImageSaver getInstance() { - return instance; - } - - private ImageSaver() { - EventBus.getDefault().register(this); - notificationManager = (NotificationManager) getAppContext().getSystemService(Context.NOTIFICATION_SERVICE); - } - - public void startDownloadTask(Context context, final ImageSaveTask task) { - PostImage postImage = task.getPostImage(); - String name = ChanSettings.saveOriginalFilename.get() ? postImage.originalName : postImage.filename; - String fileName = filterName(name + "." + postImage.extension); - task.setDestination(findUnusedFileName(new File(getSaveLocation(task), fileName), false)); - -// task.setMakeBitmap(true); - task.setShowToast(true); - - if (!hasPermission(context)) { - // This does not request the permission when another request is pending. - // This is ok and will drop the task. - requestPermission(context, new RuntimePermissionsHelper.Callback() { - @Override - public void onRuntimePermissionResult(boolean granted) { - if (granted) { - startTask(task); - updateNotification(); - } else { - showToast(null, false); - } - } - }); - } else { - startTask(task); - updateNotification(); - } - } - - public boolean startBundledTask(Context context, final String subFolder, final List tasks) { - if (!hasPermission(context)) { - // This does not request the permission when another request is pending. - // This is ok and will drop the tasks. - requestPermission(context, new RuntimePermissionsHelper.Callback() { - @Override - public void onRuntimePermissionResult(boolean granted) { - if (granted) { - startBundledTaskInternal(subFolder, tasks); - } else { - showToast(null, false); - } - } - }); - return false; - } else { - startBundledTaskInternal(subFolder, tasks); - return true; - } - } - - public String getSubFolder(String name) { - String filtered = filterName(name); - filtered = filtered.substring(0, Math.min(filtered.length(), MAX_NAME_LENGTH)); - return filtered; - } - - public File getSaveLocation(ImageSaveTask task) { - String base = ChanSettings.saveLocation.get(); - String subFolder = task.getSubFolder(); - if (subFolder != null) { - return new File(base + File.separator + subFolder); - } else { - return new File(base); - } - } - - @Override - public void imageSaveTaskFinished(ImageSaveTask task, boolean success) { - doneTasks++; - if (doneTasks == totalTasks) { - totalTasks = 0; - doneTasks = 0; - } - updateNotification(); - - if (task.isMakeBitmap()) { - showImageSaved(task); - } - if (task.isShowToast()) { - showToast(task, success); - } - } - - public void onEvent(SavingNotification.SavingCancelRequestMessage message) { - cancelAll(); - } - - private void startTask(ImageSaveTask task) { - task.setCallback(this); - - totalTasks++; - executor.execute(task); - } - - private void startBundledTaskInternal(String subFolder, List tasks) { - for (ImageSaveTask task : tasks) { - PostImage postImage = task.getPostImage(); - String fileName = filterName(postImage.originalName + "." + postImage.extension); - task.setDestination(new File(getSaveLocation(task) + File.separator + subFolder + File.separator + fileName)); - - startTask(task); - } - updateNotification(); - } - - private void cancelAll() { - executor.shutdownNow(); - executor = Executors.newSingleThreadExecutor(); - - totalTasks = 0; - doneTasks = 0; - updateNotification(); - } - - private void updateNotification() { - Intent service = new Intent(getAppContext(), SavingNotification.class); - if (totalTasks == 0) { - getAppContext().stopService(service); - } else { - service.putExtra(SavingNotification.DONE_TASKS_KEY, doneTasks); - service.putExtra(SavingNotification.TOTAL_TASKS_KEY, totalTasks); - getAppContext().startService(service); - } - } - - private void showImageSaved(ImageSaveTask task) { - NotificationCompat.Builder builder = new NotificationCompat.Builder(getAppContext()); - builder.setSmallIcon(R.drawable.ic_stat_notify); - builder.setContentTitle(getString(R.string.image_save_saved)); - String savedAs = getAppContext().getString(R.string.image_save_as, task.getDestination().getName()); - builder.setContentText(savedAs); - builder.setPriority(NotificationCompat.PRIORITY_HIGH); - builder.setStyle(new NotificationCompat.BigPictureStyle() - .bigPicture(task.getBitmap()) - .setSummaryText(savedAs)); - - notificationManager.notify(NOTIFICATION_ID, builder.build()); - } - - private void showToast(ImageSaveTask task, boolean success) { - if (toast != null) { - toast.cancel(); - } - - String text = success ? - getAppContext().getString(R.string.image_save_as, task.getDestination().getName()) : - getString(R.string.image_save_failed); - toast = Toast.makeText(getAppContext(), text, Toast.LENGTH_LONG); - toast.show(); - } - - private String filterName(String name) { - name = name.replace(' ', '_'); - name = SAFE_CHARACTERS_PATTERN.matcher(name).replaceAll(""); - name = REPEATED_UNDERSCORES_PATTERN.matcher(name).replaceAll("_"); - if (name.length() == 0) { - name = "_"; - } - return name; - } - - private File findUnusedFileName(File start, boolean directory) { - String base; - String extension; - - if (directory) { - base = start.getAbsolutePath(); - extension = null; - } else { - String[] splitted = start.getAbsolutePath().split("\\.(?=[^\\.]+$)"); - if (splitted.length == 2) { - base = splitted[0]; - extension = "." + splitted[1]; - } else { - base = splitted[0]; - extension = "."; - } - } - - File test; - if (directory) { - test = new File(base); - } else { - test = new File(base + extension); - } - - int index = 0; - int tries = 0; - while (test.exists() && tries++ < MAX_RENAME_TRIES) { - if (directory) { - test = new File(base + "_" + index); - } else { - test = new File(base + "_" + index + extension); - } - index++; - } - - return test; - } - - private boolean hasPermission(Context context) { - return ((StartActivity) context).getRuntimePermissionsHelper().hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); - } - - private void requestPermission(Context context, RuntimePermissionsHelper.Callback callback) { - ((StartActivity) context).getRuntimePermissionsHelper().requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, callback); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/saver/StorageHelper.java b/Clover/app/src/main/java/org/floens/chan/core/saver/StorageHelper.java deleted file mode 100644 index 7df953519e..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/saver/StorageHelper.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.saver; - -import java.io.File; - -public class StorageHelper { - private static final String TAG = "StorageHelper"; - - public static boolean canNavigate(File file) { - return file != null && !isDirectoryBlacklisted(file) && file.exists() - && file.isDirectory() && file.canRead(); - } - - public static boolean isDirectoryBlacklisted(File file) { - String absolutePath = file.getAbsolutePath(); - switch (absolutePath) { - case "/storage": - return true; - case "/storage/emulated": - return true; - case "/storage/emulated/0/0": - return true; - case "/storage/emulated/legacy": - return true; - } - return false; - } - - public static boolean canOpen(File file) { - return file != null && file.exists() && file.isFile() && file.canRead(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/BooleanSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/BooleanSetting.java deleted file mode 100644 index 784dbcece9..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/BooleanSetting.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings; - -public class BooleanSetting extends Setting { - private boolean hasCached = false; - private boolean cached; - - public BooleanSetting(SettingProvider settingProvider, String key, Boolean def) { - super(settingProvider, key, def); - } - - @Override - public Boolean get() { - if (hasCached) { - return cached; - } else { - cached = settingProvider.getBoolean(key, def); - hasCached = true; - return cached; - } - } - - @Override - public void set(Boolean value) { - if (!value.equals(get())) { - settingProvider.putBoolean(key, value); - cached = value; - onValueChanged(); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java deleted file mode 100644 index cf2793c8df..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java +++ /dev/null @@ -1,343 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings; - -import android.os.Environment; -import android.text.TextUtils; - -import org.floens.chan.BuildConfig; -import org.floens.chan.R; -import org.floens.chan.core.manager.WatchManager; -import org.floens.chan.core.update.UpdateManager; -import org.floens.chan.ui.adapter.PostsFilter; -import org.floens.chan.utils.AndroidUtils; - -import java.io.File; -import java.net.InetSocketAddress; -import java.net.Proxy; - -import de.greenrobot.event.EventBus; - -public class ChanSettings { - public enum MediaAutoLoadMode implements OptionSettingItem { - // ALways auto load, either wifi or mobile - ALL("all"), - // Only auto load if on wifi - WIFI("wifi"), - // Never auto load - NONE("none"); - - String name; - - MediaAutoLoadMode(String name) { - this.name = name; - } - - @Override - public String getKey() { - return name; - } - } - - public enum PostViewMode implements OptionSettingItem { - LIST("list"), - CARD("grid"); - - String name; - - PostViewMode(String name) { - this.name = name; - } - - @Override - public String getKey() { - return name; - } - } - - public enum LayoutMode implements OptionSettingItem { - AUTO("auto"), - PHONE("phone"), - SLIDE("slide"), - SPLIT("split"); - - String name; - - LayoutMode(String name) { - this.name = name; - } - - @Override - public String getKey() { - return name; - } - } - - private static Proxy proxy; - - public static final BooleanSetting forceEnglishLocale; - private static final StringSetting theme; - public static final OptionsSetting layoutMode; - public static final StringSetting fontSize; - public static final BooleanSetting fontCondensed; - public static final BooleanSetting openLinkConfirmation; - public static final BooleanSetting openLinkBrowser; - public static final BooleanSetting autoRefreshThread; - // public static final BooleanSetting imageAutoLoad; - public static final OptionsSetting imageAutoLoadNetwork; - public static final OptionsSetting videoAutoLoadNetwork; - public static final BooleanSetting videoOpenExternal; - public static final BooleanSetting videoUseExoplayer; - public static final BooleanSetting textOnly; - public static final BooleanSetting videoErrorIgnore; - public static final OptionsSetting boardViewMode; - public static final IntegerSetting boardGridSpanCount; - public static final StringSetting boardOrder; - - public static final StringSetting postDefaultName; - public static final BooleanSetting postPinThread; - - public static final BooleanSetting developer; - - public static final StringSetting saveLocation; - public static final BooleanSetting saveOriginalFilename; - public static final BooleanSetting shareUrl; - public static final BooleanSetting enableReplyFab; - public static final BooleanSetting anonymize; - public static final BooleanSetting anonymizeIds; - public static final BooleanSetting showAnonymousName; - public static final BooleanSetting revealImageSpoilers; - public static final BooleanSetting revealTextSpoilers; - public static final BooleanSetting repliesButtonsBottom; - public static final BooleanSetting confirmExit; - public static final BooleanSetting tapNoReply; - public static final BooleanSetting volumeKeysScrolling; - public static final BooleanSetting postFullDate; - public static final BooleanSetting postFileInfo; - public static final BooleanSetting postFilename; - public static final BooleanSetting neverHideToolbar; - public static final BooleanSetting controllerSwipeable; - public static final BooleanSetting saveBoardFolder; - public static final BooleanSetting videoDefaultMuted; - public static final BooleanSetting videoAutoLoop; - - public static final BooleanSetting watchEnabled; - public static final BooleanSetting watchCountdown; - public static final BooleanSetting watchBackground; - public static final IntegerSetting watchBackgroundInterval; - public static final StringSetting watchNotifyMode; - public static final StringSetting watchSound; - public static final BooleanSetting watchPeek; - public static final StringSetting watchLed; - - public static final BooleanSetting historyEnabled; - - public static final IntegerSetting previousVersion; - - public static final BooleanSetting proxyEnabled; - public static final StringSetting proxyAddress; - public static final IntegerSetting proxyPort; - - public static final CounterSetting historyOpenCounter; - public static final CounterSetting threadOpenCounter; - - public static final LongSetting updateCheckTime; - public static final LongSetting updateCheckInterval; - - public static final BooleanSetting crashReporting; - public static final BooleanSetting useNewCaptchaWindow; - public static final BooleanSetting useRealGoogleCookies; - public static final StringSetting googleCookie; - public static final LongSetting lastGoogleCookieUpdateTime; - - static { - SettingProvider p = new SharedPreferencesSettingProvider(AndroidUtils.getPreferences()); - - forceEnglishLocale = new BooleanSetting(p, "preference_force_english_locale", false); - - theme = new StringSetting(p, "preference_theme", "yotsuba"); - - layoutMode = new OptionsSetting<>(p, "preference_layout_mode", LayoutMode.class, LayoutMode.AUTO); - - boolean tablet = AndroidUtils.getRes().getBoolean(R.bool.is_tablet); - - fontSize = new StringSetting(p, "preference_font", tablet ? "16" : "14"); - fontCondensed = new BooleanSetting(p, "preference_font_condensed", false); - openLinkConfirmation = new BooleanSetting(p, "preference_open_link_confirmation", false); - openLinkBrowser = new BooleanSetting(p, "preference_open_link_browser", false); - autoRefreshThread = new BooleanSetting(p, "preference_auto_refresh_thread", true); -// imageAutoLoad = new BooleanSetting(p, "preference_image_auto_load", true); - imageAutoLoadNetwork = new OptionsSetting<>(p, "preference_image_auto_load_network", MediaAutoLoadMode.class, MediaAutoLoadMode.WIFI); - videoAutoLoadNetwork = new OptionsSetting<>(p, "preference_video_auto_load_network", MediaAutoLoadMode.class, MediaAutoLoadMode.WIFI); - videoOpenExternal = new BooleanSetting(p, "preference_video_external", false); - videoUseExoplayer = new BooleanSetting(p, "preference_video_exoplayer", true); - textOnly = new BooleanSetting(p, "preference_text_only", false); - videoErrorIgnore = new BooleanSetting(p, "preference_video_error_ignore", false); - boardViewMode = new OptionsSetting<>(p, "preference_board_view_mode", PostViewMode.class, PostViewMode.LIST); - boardGridSpanCount = new IntegerSetting(p, "preference_board_grid_span_count", 0); - boardOrder = new StringSetting(p, "preference_board_order", PostsFilter.Order.BUMP.name); - - postDefaultName = new StringSetting(p, "preference_default_name", ""); - postPinThread = new BooleanSetting(p, "preference_pin_on_post", false); - - developer = new BooleanSetting(p, "preference_developer", false); - - saveLocation = new StringSetting(p, "preference_image_save_location", Environment.getExternalStorageDirectory() + File.separator + "Clover"); - saveLocation.addCallback((setting, value) -> - EventBus.getDefault().post(new SettingChanged<>(saveLocation))); - saveOriginalFilename = new BooleanSetting(p, "preference_image_save_original", false); - shareUrl = new BooleanSetting(p, "preference_image_share_url", false); - enableReplyFab = new BooleanSetting(p, "preference_enable_reply_fab", true); - anonymize = new BooleanSetting(p, "preference_anonymize", false); - anonymizeIds = new BooleanSetting(p, "preference_anonymize_ids", false); - showAnonymousName = new BooleanSetting(p, "preference_show_anonymous_name", false); - revealImageSpoilers = new BooleanSetting(p, "preference_reveal_image_spoilers", false); - revealTextSpoilers = new BooleanSetting(p, "preference_reveal_text_spoilers", false); - repliesButtonsBottom = new BooleanSetting(p, "preference_buttons_bottom", false); - confirmExit = new BooleanSetting(p, "preference_confirm_exit", false); - tapNoReply = new BooleanSetting(p, "preference_tap_no_reply", false); - volumeKeysScrolling = new BooleanSetting(p, "preference_volume_key_scrolling", false); - postFullDate = new BooleanSetting(p, "preference_post_full_date", false); - postFileInfo = new BooleanSetting(p, "preference_post_file_info", true); - postFilename = new BooleanSetting(p, "preference_post_filename", true); - neverHideToolbar = new BooleanSetting(p, "preference_never_hide_toolbar", false); - controllerSwipeable = new BooleanSetting(p, "preference_controller_swipeable", true); - saveBoardFolder = new BooleanSetting(p, "preference_save_subboard", false); - videoDefaultMuted = new BooleanSetting(p, "preference_video_default_muted", true); - videoAutoLoop = new BooleanSetting(p, "preference_video_loop", true); - - watchEnabled = new BooleanSetting(p, "preference_watch_enabled", false); - watchEnabled.addCallback((setting, value) -> - EventBus.getDefault().post(new SettingChanged<>(watchEnabled))); - watchCountdown = new BooleanSetting(p, "preference_watch_countdown", false); - watchBackground = new BooleanSetting(p, "preference_watch_background_enabled", false); - watchBackground.addCallback((setting, value) -> - EventBus.getDefault().post(new SettingChanged<>(watchBackground))); - watchBackgroundInterval = new IntegerSetting(p, "preference_watch_background_interval", WatchManager.DEFAULT_BACKGROUND_INTERVAL); - watchNotifyMode = new StringSetting(p, "preference_watch_notify_mode", "all"); - watchSound = new StringSetting(p, "preference_watch_sound", "quotes"); - watchPeek = new BooleanSetting(p, "preference_watch_peek", true); - watchLed = new StringSetting(p, "preference_watch_led", "ffffffff"); - - historyEnabled = new BooleanSetting(p, "preference_history_enabled", true); - - previousVersion = new IntegerSetting(p, "preference_previous_version", 0); - - proxyEnabled = new BooleanSetting(p, "preference_proxy_enabled", false); - proxyAddress = new StringSetting(p, "preference_proxy_address", ""); - proxyPort = new IntegerSetting(p, "preference_proxy_port", 80); - - proxyEnabled.addCallback((setting, value) -> loadProxy()); - proxyAddress.addCallback((setting, value) -> loadProxy()); - proxyPort.addCallback((setting, value) -> loadProxy()); - loadProxy(); - - historyOpenCounter = new CounterSetting(p, "counter_history_open"); - threadOpenCounter = new CounterSetting(p, "counter_thread_open"); - - updateCheckTime = new LongSetting(p, "update_check_time", 0L); - updateCheckInterval = new LongSetting(p, "update_check_interval", UpdateManager.DEFAULT_UPDATE_CHECK_INTERVAL_MS); - - crashReporting = new BooleanSetting(p, "preference_crash_reporting", true); - useNewCaptchaWindow = new BooleanSetting(p, "use_new_captcha_window", true); - useRealGoogleCookies = new BooleanSetting(p, "use_real_google_cookies", false); - googleCookie = new StringSetting(p, "google_cookie", ""); - lastGoogleCookieUpdateTime = new LongSetting(p, "last_google_cookie_update_time", 0L); - - // Old (but possibly still in some users phone) - // preference_board_view_mode default "list" - // preference_board_editor_filler default false - // preference_pass_enabled default false - // preference_autoplay false - // preference_watch_background_timeout "60" the old timeout background setting in minutes - // preference_network_https true - // counter_settings_open - // counter_reply_open - } - - public static boolean isCrashReportingAvailable() { - return !BuildConfig.CRASH_REPORT_ENDPOINT.isEmpty(); - } - - public static boolean isCrashReportingEnabled() { - return isCrashReportingAvailable() && crashReporting.get(); - } - - public static ThemeColor getThemeAndColor() { - String themeRaw = ChanSettings.theme.get(); - - String theme = themeRaw; - String color = null; - String accentColor = null; - - String[] splitted = themeRaw.split(","); - if (splitted.length >= 2) { - theme = splitted[0]; - color = splitted[1]; - if (splitted.length == 3) { - accentColor = splitted[2]; - } - } - - return new ThemeColor(theme, color, accentColor); - } - - public static void setThemeAndColor(ThemeColor themeColor) { - if (TextUtils.isEmpty(themeColor.color) || TextUtils.isEmpty(themeColor.accentColor)) { - throw new IllegalArgumentException(); - } - ChanSettings.theme.set(themeColor.theme + "," + themeColor.color + "," + themeColor.accentColor); - } - - /** - * Returns a {@link Proxy} if a proxy is enabled, null otherwise. - * - * @return a proxy or null - */ - public static Proxy getProxy() { - return proxy; - } - - private static void loadProxy() { - if (proxyEnabled.get()) { - proxy = new Proxy(Proxy.Type.HTTP, InetSocketAddress.createUnresolved(proxyAddress.get(), proxyPort.get())); - } else { - proxy = null; - } - } - - public static class ThemeColor { - public String theme; - public String color; - public String accentColor; - - public ThemeColor(String theme, String color, String accentColor) { - this.theme = theme; - this.color = color; - this.accentColor = accentColor; - } - } - - public static class SettingChanged { - public final Setting setting; - - public SettingChanged(Setting setting) { - this.setting = setting; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/CounterSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/CounterSetting.java deleted file mode 100644 index 90dcdbb489..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/CounterSetting.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings; - -public class CounterSetting extends IntegerSetting { - public CounterSetting(SettingProvider settingProvider, String key) { - super(settingProvider, key, 0); - } - - public int increase() { - set(get() + 1); - return get(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/IntegerSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/IntegerSetting.java deleted file mode 100644 index 3350b16a04..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/IntegerSetting.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings; - -public class IntegerSetting extends Setting { - private boolean hasCached = false; - private Integer cached; - - public IntegerSetting(SettingProvider settingProvider, String key, Integer def) { - super(settingProvider, key, def); - } - - @Override - public Integer get() { - if (hasCached) { - return cached; - } else { - cached = settingProvider.getInt(key, def); - hasCached = true; - return cached; - } - } - - @Override - public void set(Integer value) { - if (!value.equals(get())) { - settingProvider.putInt(key, value); - cached = value; - onValueChanged(); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/LongSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/LongSetting.java deleted file mode 100644 index b3af528485..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/LongSetting.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings; - -public class LongSetting extends Setting { - private boolean hasCached = false; - private Long cached; - - public LongSetting(SettingProvider settingProvider, String key, Long def) { - super(settingProvider, key, def); - } - - @Override - public Long get() { - if (hasCached) { - return cached; - } else { - cached = settingProvider.getLong(key, def); - hasCached = true; - return cached; - } - } - - @Override - public void set(Long value) { - if (!value.equals(get())) { - settingProvider.putLong(key, value); - cached = value; - onValueChanged(); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/OptionSettingItem.java b/Clover/app/src/main/java/org/floens/chan/core/settings/OptionSettingItem.java deleted file mode 100644 index 1dd5667e0f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/OptionSettingItem.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings; - -public interface OptionSettingItem { - String getKey(); -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/OptionsSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/OptionsSetting.java deleted file mode 100644 index 7a2e711331..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/OptionsSetting.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings; - -public class OptionsSetting extends Setting { - private boolean hasCached = false; - - private Class clazz; - - private T cached; - private T[] items; - - public OptionsSetting(SettingProvider settingProvider, String key, Class clazz, T def) { - super(settingProvider, key, def); - - this.clazz = clazz; - this.items = clazz.getEnumConstants(); - } - - public T[] getItems() { - return items; - } - - @Override - public T get() { - if (hasCached) { - return cached; - } else { - String itemName = settingProvider.getString(key, def.getKey()); - T selectedItem = null; - for (T item : items) { - if (item.getKey().equals(itemName)) { - selectedItem = item; - } - } - if (selectedItem == null) { - selectedItem = def; - } - - cached = selectedItem; - hasCached = true; - return cached; - } - } - - @Override - public void set(T value) { - if (!value.equals(get())) { - settingProvider.putString(key, value.getKey()); - cached = value; - onValueChanged(); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/Setting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/Setting.java deleted file mode 100644 index 4d56f3db68..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/Setting.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings; - -import java.util.ArrayList; -import java.util.List; - -public abstract class Setting { - protected final SettingProvider settingProvider; - protected final String key; - protected final T def; - private List> callbacks = new ArrayList<>(); - - public Setting(SettingProvider settingProvider, String key, T def) { - this.settingProvider = settingProvider; - this.key = key; - this.def = def; - } - - public abstract T get(); - - public abstract void set(T value); - - public T getDefault() { - return def; - } - - public String getKey() { - return key; - } - - public void addCallback(SettingCallback callback) { - this.callbacks.add(callback); - } - - public void removeCallback(SettingCallback callback) { - this.callbacks.remove(callback); - } - - protected final void onValueChanged() { - for (int i = 0; i < callbacks.size(); i++) { - callbacks.get(i).onValueChange(this, get()); - } - } - - public interface SettingCallback { - void onValueChange(Setting setting, T value); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/SettingProvider.java b/Clover/app/src/main/java/org/floens/chan/core/settings/SettingProvider.java deleted file mode 100644 index 2e25e51285..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/SettingProvider.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings; - -public interface SettingProvider { - int getInt(String key, int def); - - void putInt(String key, int value); - - long getLong(String key, long def); - - void putLong(String key, long value); - - boolean getBoolean(String key, boolean def); - - void putBoolean(String key, boolean value); - - String getString(String key, String def); - - void putString(String key, String value); -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/SharedPreferencesSettingProvider.java b/Clover/app/src/main/java/org/floens/chan/core/settings/SharedPreferencesSettingProvider.java deleted file mode 100644 index efc653f6cc..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/SharedPreferencesSettingProvider.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings; - -import android.content.SharedPreferences; - -public class SharedPreferencesSettingProvider implements SettingProvider { - private SharedPreferences prefs; - - public SharedPreferencesSettingProvider(SharedPreferences prefs) { - this.prefs = prefs; - } - - @Override - public int getInt(String key, int def) { - return prefs.getInt(key, def); - } - - @Override - public void putInt(String key, int value) { - prefs.edit().putInt(key, value).apply(); - } - - @Override - public long getLong(String key, long def) { - return prefs.getLong(key, def); - } - - @Override - public void putLong(String key, long value) { - prefs.edit().putLong(key, value).apply(); - } - - @Override - public boolean getBoolean(String key, boolean def) { - return prefs.getBoolean(key, def); - } - - @Override - public void putBoolean(String key, boolean value) { - prefs.edit().putBoolean(key, value).apply(); - } - - @Override - public String getString(String key, String def) { - return prefs.getString(key, def); - } - - @Override - public void putString(String key, String value) { - prefs.edit().putString(key, value).apply(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/StringSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/StringSetting.java deleted file mode 100644 index 5600ab0c8c..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/StringSetting.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings; - -public class StringSetting extends Setting { - private boolean hasCached = false; - private String cached; - - public StringSetting(SettingProvider settingProvider, String key, String def) { - super(settingProvider, key, def); - } - - @Override - public String get() { - if (hasCached) { - return cached; - } else { - cached = settingProvider.getString(key, def); - hasCached = true; - return cached; - } - } - - @Override - public void set(String value) { - if (!value.equals(get())) { - settingProvider.putString(key, value); - cached = value; - onValueChanged(); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/json/BooleanJsonSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/json/BooleanJsonSetting.java deleted file mode 100644 index 7a6912e673..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/json/BooleanJsonSetting.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings.json; - -import com.google.gson.annotations.SerializedName; - -public class BooleanJsonSetting extends JsonSetting { - @SerializedName("value") - public boolean value; -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/json/IntegerJsonSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/json/IntegerJsonSetting.java deleted file mode 100644 index 16995dd0c1..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/json/IntegerJsonSetting.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings.json; - -import com.google.gson.annotations.SerializedName; - -public class IntegerJsonSetting extends JsonSetting { - @SerializedName("value") - public int value; -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/json/JsonSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/json/JsonSetting.java deleted file mode 100644 index 6f86559cd5..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/json/JsonSetting.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings.json; - -import com.google.gson.annotations.SerializedName; - -public class JsonSetting { - @SerializedName("key") - public String key; -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/json/JsonSettings.java b/Clover/app/src/main/java/org/floens/chan/core/settings/json/JsonSettings.java deleted file mode 100644 index e45233862b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/json/JsonSettings.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings.json; - - -import com.google.gson.annotations.SerializedName; - -import java.util.ArrayList; -import java.util.List; - -public class JsonSettings { - @SerializedName("settings") - List settings = new ArrayList<>(); -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/json/JsonSettingsProvider.java b/Clover/app/src/main/java/org/floens/chan/core/settings/json/JsonSettingsProvider.java deleted file mode 100644 index 465190d9d3..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/json/JsonSettingsProvider.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings.json; - -import org.floens.chan.core.settings.SettingProvider; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -public class JsonSettingsProvider implements SettingProvider { - public final JsonSettings jsonSettings; - private Callback callback; - - private Map byKey = new HashMap<>(); - - public JsonSettingsProvider(JsonSettings jsonSettings, Callback callback) { - this.jsonSettings = jsonSettings; - this.callback = callback; - - load(); - } - - @Override - public int getInt(String key, int def) { - JsonSetting setting = byKey.get(key); - if (setting != null) { - return ((IntegerJsonSetting) setting).value; - } else { - return def; - } - } - - @Override - public void putInt(String key, int value) { - JsonSetting jsonSetting = byKey.get(key); - if (jsonSetting == null) { - IntegerJsonSetting v = new IntegerJsonSetting(); - v.value = value; - byKey.put(key, v); - } else { - ((IntegerJsonSetting) jsonSetting).value = value; - } - save(); - } - - @Override - public long getLong(String key, long def) { - JsonSetting setting = byKey.get(key); - if (setting != null) { - return ((LongJsonSetting) setting).value; - } else { - return def; - } - } - - @Override - public void putLong(String key, long value) { - JsonSetting jsonSetting = byKey.get(key); - if (jsonSetting == null) { - LongJsonSetting v = new LongJsonSetting(); - v.value = value; - byKey.put(key, v); - } else { - ((LongJsonSetting) jsonSetting).value = value; - } - save(); - } - - @Override - public boolean getBoolean(String key, boolean def) { - JsonSetting setting = byKey.get(key); - if (setting != null) { - return ((BooleanJsonSetting) setting).value; - } else { - return def; - } - } - - @Override - public void putBoolean(String key, boolean value) { - JsonSetting jsonSetting = byKey.get(key); - if (jsonSetting == null) { - BooleanJsonSetting v = new BooleanJsonSetting(); - v.value = value; - byKey.put(key, v); - } else { - ((BooleanJsonSetting) jsonSetting).value = value; - } - save(); - } - - @Override - public String getString(String key, String def) { - JsonSetting setting = byKey.get(key); - if (setting != null) { - return ((StringJsonSetting) setting).value; - } else { - return def; - } - } - - @Override - public void putString(String key, String value) { - JsonSetting jsonSetting = byKey.get(key); - if (jsonSetting == null) { - StringJsonSetting v = new StringJsonSetting(); - v.value = value; - byKey.put(key, v); - } else { - ((StringJsonSetting) jsonSetting).value = value; - } - save(); - } - - private void load() { - byKey.clear(); - for (JsonSetting setting : jsonSettings.settings) { - byKey.put(setting.key, setting); - } - } - - private void save() { - List settings = new ArrayList<>(); - for (Map.Entry e : byKey.entrySet()) { - settings.add(e.getValue()); - } - jsonSettings.settings = settings; - callback.save(); - } - - public interface Callback { - void save(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/json/LongJsonSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/json/LongJsonSetting.java deleted file mode 100644 index 92aea7499b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/json/LongJsonSetting.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings.json; - -import com.google.gson.annotations.SerializedName; - -public class LongJsonSetting extends JsonSetting { - @SerializedName("value") - public long value; -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/json/RuntimeTypeAdapterFactory.java b/Clover/app/src/main/java/org/floens/chan/core/settings/json/RuntimeTypeAdapterFactory.java deleted file mode 100644 index dc8c4a2bde..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/json/RuntimeTypeAdapterFactory.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (C) 2011 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. - */ - -package org.floens.chan.core.settings.json; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.TypeAdapter; -import com.google.gson.TypeAdapterFactory; -import com.google.gson.internal.Streams; -import com.google.gson.reflect.TypeToken; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonWriter; - -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * Adapts values whose runtime type may differ from their declaration type. This - * is necessary when a field's type is not the same type that GSON should create - * when deserializing that field. For example, consider these types: - *

   {@code
- *   abstract class Shape {
- *     int x;
- *     int y;
- *   }
- *   class Circle extends Shape {
- *     int radius;
- *   }
- *   class Rectangle extends Shape {
- *     int width;
- *     int height;
- *   }
- *   class Diamond extends Shape {
- *     int width;
- *     int height;
- *   }
- *   class Drawing {
- *     Shape bottomShape;
- *     Shape topShape;
- *   }
- * }
- *

Without additional type information, the serialized JSON is ambiguous. Is - * the bottom shape in this drawing a rectangle or a diamond?

   {@code
- *   {
- *     "bottomShape": {
- *       "width": 10,
- *       "height": 5,
- *       "x": 0,
- *       "y": 0
- *     },
- *     "topShape": {
- *       "radius": 2,
- *       "x": 4,
- *       "y": 1
- *     }
- *   }}
- * This class addresses this problem by adding type information to the - * serialized JSON and honoring that type information when the JSON is - * deserialized:
   {@code
- *   {
- *     "bottomShape": {
- *       "type": "Diamond",
- *       "width": 10,
- *       "height": 5,
- *       "x": 0,
- *       "y": 0
- *     },
- *     "topShape": {
- *       "type": "Circle",
- *       "radius": 2,
- *       "x": 4,
- *       "y": 1
- *     }
- *   }}
- * Both the type field name ({@code "type"}) and the type labels ({@code - * "Rectangle"}) are configurable. - * - *

Registering Types

- * Create a {@code RuntimeTypeAdapterFactory} by passing the base type and type field - * name to the {@link #of} factory method. If you don't supply an explicit type - * field name, {@code "type"} will be used.
   {@code
- *   RuntimeTypeAdapterFactory shapeAdapterFactory
- *       = RuntimeTypeAdapterFactory.of(Shape.class, "type");
- * }
- * Next register all of your subtypes. Every subtype must be explicitly - * registered. This protects your application from injection attacks. If you - * don't supply an explicit type label, the type's simple name will be used. - *
   {@code
- *   shapeAdapter.registerSubtype(Rectangle.class, "Rectangle");
- *   shapeAdapter.registerSubtype(Circle.class, "Circle");
- *   shapeAdapter.registerSubtype(Diamond.class, "Diamond");
- * }
- * Finally, register the type adapter factory in your application's GSON builder: - *
   {@code
- *   Gson gson = new GsonBuilder()
- *       .registerTypeAdapterFactory(shapeAdapterFactory)
- *       .create();
- * }
- * Like {@code GsonBuilder}, this API supports chaining:
   {@code
- *   RuntimeTypeAdapterFactory shapeAdapterFactory = RuntimeTypeAdapterFactory.of(Shape.class)
- *       .registerSubtype(Rectangle.class)
- *       .registerSubtype(Circle.class)
- *       .registerSubtype(Diamond.class);
- * }
- */ -public class RuntimeTypeAdapterFactory implements TypeAdapterFactory { - private final Class baseType; - private final String typeFieldName; - private final Map> labelToSubtype = new LinkedHashMap>(); - private final Map, String> subtypeToLabel = new LinkedHashMap, String>(); - - private RuntimeTypeAdapterFactory(Class baseType, String typeFieldName) { - if (typeFieldName == null || baseType == null) { - throw new NullPointerException(); - } - this.baseType = baseType; - this.typeFieldName = typeFieldName; - } - - /** - * Creates a new runtime type adapter using for {@code baseType} using {@code - * typeFieldName} as the type field name. Type field names are case sensitive. - */ - public static RuntimeTypeAdapterFactory of(Class baseType, String typeFieldName) { - return new RuntimeTypeAdapterFactory(baseType, typeFieldName); - } - - /** - * Creates a new runtime type adapter for {@code baseType} using {@code "type"} as - * the type field name. - */ - public static RuntimeTypeAdapterFactory of(Class baseType) { - return new RuntimeTypeAdapterFactory(baseType, "type"); - } - - /** - * Registers {@code type} identified by {@code label}. Labels are case - * sensitive. - * - * @throws IllegalArgumentException if either {@code type} or {@code label} - * have already been registered on this type adapter. - */ - public RuntimeTypeAdapterFactory registerSubtype(Class type, String label) { - if (type == null || label == null) { - throw new NullPointerException(); - } - if (subtypeToLabel.containsKey(type) || labelToSubtype.containsKey(label)) { - throw new IllegalArgumentException("types and labels must be unique"); - } - labelToSubtype.put(label, type); - subtypeToLabel.put(type, label); - return this; - } - - /** - * Registers {@code type} identified by its {@link Class#getSimpleName simple - * name}. Labels are case sensitive. - * - * @throws IllegalArgumentException if either {@code type} or its simple name - * have already been registered on this type adapter. - */ - public RuntimeTypeAdapterFactory registerSubtype(Class type) { - return registerSubtype(type, type.getSimpleName()); - } - - public TypeAdapter create(Gson gson, TypeToken type) { - if (type.getRawType() != baseType) { - return null; - } - - final Map> labelToDelegate - = new LinkedHashMap>(); - final Map, TypeAdapter> subtypeToDelegate - = new LinkedHashMap, TypeAdapter>(); - for (Map.Entry> entry : labelToSubtype.entrySet()) { - TypeAdapter delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue())); - labelToDelegate.put(entry.getKey(), delegate); - subtypeToDelegate.put(entry.getValue(), delegate); - } - - return new TypeAdapter() { - @Override public R read(JsonReader in) throws IOException { - JsonElement jsonElement = Streams.parse(in); - JsonElement labelJsonElement = jsonElement.getAsJsonObject().remove(typeFieldName); - if (labelJsonElement == null) { - throw new JsonParseException("cannot deserialize " + baseType - + " because it does not define a field named " + typeFieldName); - } - String label = labelJsonElement.getAsString(); - @SuppressWarnings("unchecked") // registration requires that subtype extends T - TypeAdapter delegate = (TypeAdapter) labelToDelegate.get(label); - if (delegate == null) { - throw new JsonParseException("cannot deserialize " + baseType + " subtype named " - + label + "; did you forget to register a subtype?"); - } - return delegate.fromJsonTree(jsonElement); - } - - @Override public void write(JsonWriter out, R value) throws IOException { - Class srcType = value.getClass(); - String label = subtypeToLabel.get(srcType); - @SuppressWarnings("unchecked") // registration requires that subtype extends T - TypeAdapter delegate = (TypeAdapter) subtypeToDelegate.get(srcType); - if (delegate == null) { - throw new JsonParseException("cannot serialize " + srcType.getName() - + "; did you forget to register a subtype?"); - } - JsonObject jsonObject = delegate.toJsonTree(value).getAsJsonObject(); - if (jsonObject.has(typeFieldName)) { - throw new JsonParseException("cannot serialize " + srcType.getName() - + " because it already defines a field named " + typeFieldName); - } - JsonObject clone = new JsonObject(); - clone.add(typeFieldName, new JsonPrimitive(label)); - for (Map.Entry e : jsonObject.entrySet()) { - clone.add(e.getKey(), e.getValue()); - } - Streams.write(clone, out); - } - }.nullSafe(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/json/StringJsonSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/json/StringJsonSetting.java deleted file mode 100644 index bf3b91e5c9..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/json/StringJsonSetting.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.settings.json; - -import com.google.gson.annotations.SerializedName; - -public class StringJsonSetting extends JsonSetting { - @SerializedName("value") - public String value; -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/Boards.java b/Clover/app/src/main/java/org/floens/chan/core/site/Boards.java deleted file mode 100644 index db0f1b0212..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/Boards.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.floens.chan.core.site; - -import org.floens.chan.core.model.orm.Board; - -import java.util.List; - -public class Boards { - public final List boards; - - public Boards(List boards) { - this.boards = boards; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/ImageSearch.java b/Clover/app/src/main/java/org/floens/chan/core/site/ImageSearch.java deleted file mode 100644 index cd586f896b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/ImageSearch.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - -import java.util.ArrayList; -import java.util.List; - -public abstract class ImageSearch { - public static final List engines = new ArrayList<>(); - - public abstract int getId(); - - public abstract String getName(); - - public abstract String getUrl(String imageUrl); - - static { - engines.add(new ImageSearch() { - public int getId() { - return 0; - } - - public String getName() { - return "Google"; - } - - public String getUrl(String imageUrl) { - return "https://www.google.com/searchbyimage?image_url=" + imageUrl; - } - }); - - engines.add(new ImageSearch() { - public int getId() { - return 1; - } - - public String getName() { - return "iqdb"; - } - - public String getUrl(String imageUrl) { - return "http://iqdb.org/?url=" + imageUrl; - } - }); - - engines.add(new ImageSearch() { - public int getId() { - return 2; - } - - public String getName() { - return "SauceNao"; - } - - public String getUrl(String imageUrl) { - return "https://saucenao.com/search.php?url=" + imageUrl; - } - }); - - engines.add(new ImageSearch() { - public int getId() { - return 3; - } - - public String getName() { - return "TinEye"; - } - - public String getUrl(String imageUrl) { - return "http://tineye.com/search/?url=" + imageUrl; - } - }); - - engines.add(new ImageSearch() { - public int getId() { - return 4; - } - - public String getName() { - return "WAIT"; - } - - public String getUrl(String imageUrl) { - return "https://trace.moe/?url=" + imageUrl; - } - }); - - engines.add(new ImageSearch() { - public int getId() { - return 5; - } - - public String getName() { - return "Yandex"; - } - - public String getUrl(String imageUrl) { - return "https://www.yandex.com/images/search?rpt=imageview&img_url=" + imageUrl; - } - }); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/Site.java b/Clover/app/src/main/java/org/floens/chan/core/site/Site.java deleted file mode 100644 index a85acd1d49..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/Site.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.json.site.SiteConfig; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.settings.json.JsonSettings; -import org.floens.chan.core.site.http.DeleteRequest; -import org.floens.chan.core.site.http.LoginRequest; -import org.floens.chan.core.site.http.Reply; -import org.floens.chan.core.site.parser.ChanReader; - -import java.util.List; - -public interface Site { - enum Feature { - /** - * This site supports posting. (Or rather, we've implemented support for it.) - * - * @see SiteActions#post(Reply, SiteActions.PostListener) - * @see SiteEndpoints#reply(Loadable) - */ - POSTING, - - /** - * This site supports deleting posts. - * - * @see SiteActions#delete(DeleteRequest, SiteActions.DeleteListener) - * @see SiteEndpoints#delete(Post) - */ - POST_DELETE, - - /** - * This site supports reporting posts. - * - * @see SiteEndpoints#report(Post) - */ - POST_REPORT, - - /** - * This site supports some sort of authentication (like 4pass). - * - * @see SiteActions#login(LoginRequest, SiteActions.LoginListener) - * @see SiteEndpoints#login() - */ - LOGIN - } - - /** - * Features available to check when {@link Feature#POSTING} is {@code true}. - */ - enum BoardFeature { - /** - * This board supports posting with images. - */ - // TODO(multisite) use this - POSTING_IMAGE, - - /** - * This board supports posting with a checkbox to mark the posted image as a spoiler. - */ - // TODO(multisite) use this - POSTING_SPOILER, - - /** - * This board support loading the archive, a list of threads that are locked after expiring. - */ - ARCHIVE, - } - - /** - * How the boards are organized for this site. - */ - enum BoardsType { - /** - * The site's boards are static, there is no extra info for a board in the api. - */ - STATIC(true), - - /** - * The site's boards are dynamic, a boards.json like endpoint is available to get the available boards. - */ - DYNAMIC(true), - - /** - * The site's boards are dynamic and infinite, existence of boards should be checked per board. - */ - INFINITE(false); - - /** - * Can the boards be listed, in other words, can - * {@link SiteActions#boards(SiteActions.BoardsListener)} be used, and is - * {@link #board(String)} available. - */ - public boolean canList; - - BoardsType(boolean canList) { - this.canList = canList; - } - } - - /** - * Initialize the site with the given id, config, and userSettings. - *

Note: do not use any managers at this point, because they rely on the sites being initialized. - * Instead, use {@link #postInitialize()} - * - * @param id the site id - * @param config the site config - * @param userSettings the site user settings - */ - void initialize(int id, SiteConfig config, JsonSettings userSettings); - - void postInitialize(); - - /** - * Global positive (>0) integer that uniquely identifies this site.
- * Use the id received from {@link #initialize(int, SiteConfig, JsonSettings)}. - * - * @return a positive (>0) integer that uniquely identifies this site. - */ - int id(); - - String name(); - - SiteIcon icon(); - - BoardsType boardsType(); - - SiteUrlHandler resolvable(); - - boolean feature(Feature feature); - - boolean boardFeature(BoardFeature boardFeature, Board board); - - List settings(); - - SiteEndpoints endpoints(); - - SiteRequestModifier requestModifier(); - - ChanReader chanReader(); - - SiteActions actions(); - - /** - * Return the board for this site with the given {@code code}. - *

This does not need to create the board if it doesn't exist. This is important for - * sites that have the board type INFINITE. Returning from the database is - * enough.

- * - * @param code the board code - * @return a board with the board code, or {@code null}. - */ - Board board(String code); - - /** - * Create a new board with the specified {@code code} and {@code name}. - *

This is only applicable to sites with a board type INFINITE.

- * - * @param name the name of the board. - * @param code the code to create the board with. - * @return the created board. - */ - Board createBoard(String name, String code); -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteActions.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteActions.java deleted file mode 100644 index a740ed0530..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteActions.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - -import org.floens.chan.core.model.Archive; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.site.http.DeleteRequest; -import org.floens.chan.core.site.http.DeleteResponse; -import org.floens.chan.core.site.http.HttpCall; -import org.floens.chan.core.site.http.LoginRequest; -import org.floens.chan.core.site.http.LoginResponse; -import org.floens.chan.core.site.http.Reply; -import org.floens.chan.core.site.http.ReplyResponse; - -public interface SiteActions { - void boards(BoardsListener boardsListener); - - interface BoardsListener { - void onBoardsReceived(Boards boards); - } - - void post(Reply reply, PostListener postListener); - - interface PostListener { - - void onPostComplete(HttpCall httpCall, ReplyResponse replyResponse); - - void onPostError(HttpCall httpCall, Exception exception); - } - - boolean postRequiresAuthentication(); - - /** - * If {@link ReplyResponse#requireAuthentication} was {@code true}, or if - * {@link #postRequiresAuthentication()} is {@code true}, get the authentication - * required to post. - *

- *

Some sites know beforehand if you need to authenticate, some sites only report it - * after posting. That's why there are two methods.

- * - * @return an {@link SiteAuthentication} model that describes the way to authenticate. - */ - SiteAuthentication postAuthenticate(); - - void delete(DeleteRequest deleteRequest, DeleteListener deleteListener); - - interface DeleteListener { - void onDeleteComplete(HttpCall httpCall, DeleteResponse deleteResponse); - - void onDeleteError(HttpCall httpCall); - } - - void archive(Board board, ArchiveListener archiveListener); - - interface ArchiveListener { - void onArchive(Archive archive); - - void onArchiveError(); - } - - /* TODO(multi-site) this login mechanism is probably not generic enough right now, - * especially if we're thinking about what a login really is - * We'll expand this later when we have a better idea of what other sites require. - */ - void login(LoginRequest loginRequest, LoginListener loginListener); - - void logout(); - - boolean isLoggedIn(); - - LoginRequest getLoginDetails(); - - interface LoginListener { - void onLoginComplete(HttpCall httpCall, LoginResponse loginResponse); - - void onLoginError(HttpCall httpCall); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteAuthentication.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteAuthentication.java deleted file mode 100644 index 8fde4f9ed8..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteAuthentication.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - -public class SiteAuthentication { - public enum Type { - NONE, - CAPTCHA1, - CAPTCHA2, - CAPTCHA2_NOJS, - GENERIC_WEBVIEW - } - - public static SiteAuthentication fromNone() { - return new SiteAuthentication(Type.NONE); - } - - public static SiteAuthentication fromCaptcha1(String siteKey, String baseUrl) { - SiteAuthentication a = new SiteAuthentication(Type.CAPTCHA1); - a.siteKey = siteKey; - a.baseUrl = baseUrl; - return a; - } - - public static SiteAuthentication fromCaptcha2(String siteKey, String baseUrl) { - SiteAuthentication a = new SiteAuthentication(Type.CAPTCHA2); - a.siteKey = siteKey; - a.baseUrl = baseUrl; - return a; - } - - public static SiteAuthentication fromCaptcha2nojs(String siteKey, String baseUrl) { - SiteAuthentication a = new SiteAuthentication(Type.CAPTCHA2_NOJS); - a.siteKey = siteKey; - a.baseUrl = baseUrl; - return a; - } - - public static SiteAuthentication fromUrl(String url, String retryText, String successText) { - SiteAuthentication a = new SiteAuthentication(Type.GENERIC_WEBVIEW); - a.url = url; - a.retryText = retryText; - a.successText = successText; - return a; - } - - public final Type type; - - // captcha1 & captcha2 - public String siteKey; - public String baseUrl; - - // generic webview - public String url; - public String retryText; - public String successText; - - private SiteAuthentication(Type type) { - this.type = type; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteBase.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteBase.java deleted file mode 100644 index 454627a04f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteBase.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - - -import com.android.volley.RequestQueue; - -import org.codejargon.feather.Feather; -import org.floens.chan.core.database.LoadableProvider; -import org.floens.chan.core.manager.BoardManager; -import org.floens.chan.core.model.json.site.SiteConfig; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.settings.SettingProvider; -import org.floens.chan.core.settings.json.JsonSettings; -import org.floens.chan.core.settings.json.JsonSettingsProvider; -import org.floens.chan.core.site.http.HttpCallManager; -import org.floens.chan.utils.Time; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import static org.floens.chan.Chan.injector; - -public abstract class SiteBase implements Site { - protected int id; - protected SiteConfig config; - - protected HttpCallManager httpCallManager; - protected RequestQueue requestQueue; - protected BoardManager boardManager; - protected LoadableProvider loadableProvider; - - private JsonSettings userSettings; - protected SettingProvider settingsProvider; - - private boolean initialized = false; - - @Override - public void initialize(int id, SiteConfig config, JsonSettings userSettings) { - this.id = id; - this.config = config; - this.userSettings = userSettings; - - if (initialized) { - throw new IllegalStateException(); - } - initialized = true; - } - - @Override - public void postInitialize() { - long start = Time.startTiming(); - - Feather injector = injector(); - httpCallManager = injector.instance(HttpCallManager.class); - requestQueue = injector.instance(RequestQueue.class); - boardManager = injector.instance(BoardManager.class); - loadableProvider = injector.instance(LoadableProvider.class); - SiteService siteService = injector.instance(SiteService.class); - - settingsProvider = new JsonSettingsProvider(userSettings, () -> { - siteService.updateUserSettings(this, userSettings); - }); - - initializeSettings(); - - if (boardsType().canList) { - actions().boards(boards -> boardManager.updateAvailableBoardsForSite(this, boards.boards)); - } - - Time.endTiming("initialized " + name(), start); - } - - @Override - public int id() { - return id; - } - - @Override - public Board board(String code) { - return boardManager.getBoard(this, code); - } - - @Override - public List settings() { - return new ArrayList<>(); - } - - public void initializeSettings() { - } - - @Override - public Board createBoard(String name, String code) { - Board existing = board(code); - if (existing != null) { - return existing; - } - - Board board = Board.fromSiteNameCode(this, name, code); - boardManager.updateAvailableBoardsForSite(this, Collections.singletonList(board)); - return board; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteEndpoints.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteEndpoints.java deleted file mode 100644 index a210cc4cdd..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteEndpoints.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - -import android.support.v4.util.ArrayMap; - -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Loadable; - -import java.util.Map; - -import okhttp3.HttpUrl; - -/** - * Endpoints for {@link Site}. - */ -public interface SiteEndpoints { - HttpUrl catalog(Board board); - - HttpUrl thread(Board board, Loadable loadable); - - HttpUrl imageUrl(Post.Builder post, Map arg); - - HttpUrl thumbnailUrl(Post.Builder post, boolean spoiler, Map arg); - - HttpUrl icon(Post.Builder post, String icon, Map arg); - - HttpUrl boards(); - - HttpUrl archive(Board board); - - HttpUrl reply(Loadable thread); - - HttpUrl delete(Post post); - - HttpUrl report(Post post); - - HttpUrl login(); - - static Map makeArgument(String key, String value) { - Map map = new ArrayMap<>(1); - map.put(key, value); - return map; - } - - static Map makeArgument(String key1, String value1, - String key2, String value2) { - Map map = new ArrayMap<>(2); - map.put(key1, value1); - map.put(key2, value2); - return map; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteIcon.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteIcon.java deleted file mode 100644 index 6494d449ec..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteIcon.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - - -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; - -import com.android.volley.VolleyError; -import com.android.volley.toolbox.ImageLoader; - -import org.floens.chan.utils.Logger; - -import java.io.IOException; - -import okhttp3.HttpUrl; - -import static org.floens.chan.Chan.injector; -import static org.floens.chan.utils.AndroidUtils.getAppContext; -import static org.floens.chan.utils.AndroidUtils.getRes; - -public class SiteIcon { - private static final String TAG = "SiteIcon"; - private static final int FAVICON_SIZE = 64; - - private String assetPath; - private HttpUrl url; - - public static SiteIcon fromAssets(String path) { - SiteIcon siteIcon = new SiteIcon(); - siteIcon.assetPath = path; - return siteIcon; - } - - public static SiteIcon fromFavicon(HttpUrl url) { - SiteIcon siteIcon = new SiteIcon(); - siteIcon.url = url; - return siteIcon; - } - - private SiteIcon() { - } - - public void get(SiteIconResult result) { - if (assetPath != null) { - Bitmap bitmap; - try { - BitmapFactory.Options opts = new BitmapFactory.Options(); - opts.inScaled = false; - bitmap = BitmapFactory.decodeStream(getAppContext().getAssets().open(assetPath), null, opts); - } catch (IOException e) { - throw new RuntimeException(e); - } - - BitmapDrawable drawable = new BitmapDrawable(getRes(), bitmap); - drawable = (BitmapDrawable) drawable.mutate(); - drawable.getPaint().setFilterBitmap(false); - result.onSiteIcon(this, drawable); - } else if (url != null) { - injector().instance(ImageLoader.class).get(url.toString(), new ImageLoader.ImageListener() { - @Override - public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) { - if (response.getBitmap() != null) { - Drawable drawable = new BitmapDrawable(response.getBitmap()); - result.onSiteIcon(SiteIcon.this, drawable); - } - } - - @Override - public void onErrorResponse(VolleyError error) { - Logger.e(TAG, "Error loading favicon", error); - } - }, FAVICON_SIZE, FAVICON_SIZE); - } - } - - public interface SiteIconResult { - void onSiteIcon(SiteIcon siteIcon, Drawable icon); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteRegistry.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteRegistry.java deleted file mode 100644 index dc793adb9b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteRegistry.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - -import android.util.SparseArray; - -import org.floens.chan.core.site.sites.chan4.Chan4; -import org.floens.chan.core.site.sites.lainchan.Lainchan; -import org.floens.chan.core.site.sites.chan8.Chan8; -import org.floens.chan.core.site.sites.arisuchan.Arisuchan; -import org.floens.chan.core.site.sites.sushichan.Sushichan; -import org.floens.chan.core.site.sites.dvach.Dvach; - -import java.util.ArrayList; -import java.util.List; - -/** - * Registry of all sites and url handler we have. - */ -public class SiteRegistry { - public static final List URL_HANDLERS = new ArrayList<>(); - public static final SparseArray> SITE_CLASSES = new SparseArray<>(); - - static { - URL_HANDLERS.add(Chan4.URL_HANDLER); - URL_HANDLERS.add(Chan8.URL_HANDLER); - URL_HANDLERS.add(Lainchan.URL_HANDLER); - URL_HANDLERS.add(Arisuchan.URL_HANDLER); - URL_HANDLERS.add(Sushichan.URL_HANDLER); - URL_HANDLERS.add(Dvach.URL_HANDLER); - } - - static { - // This id-siteclass mapping is used to look up the correct site class at deserialization. - // This differs from the Site.id() id, that id is used for site instance linking, this is just to - // find the correct class to use. - SITE_CLASSES.put(0, Chan4.class); - - SITE_CLASSES.put(1, Chan8.class); - SITE_CLASSES.put(2, Lainchan.class); - SITE_CLASSES.put(3, Arisuchan.class); - SITE_CLASSES.put(4, Sushichan.class); - SITE_CLASSES.put(5, Dvach.class); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteRequestModifier.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteRequestModifier.java deleted file mode 100644 index e7351c8923..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteRequestModifier.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - - -import android.webkit.WebView; - -import org.floens.chan.core.site.http.HttpCall; - -import okhttp3.Request; - -public interface SiteRequestModifier { - void modifyHttpCall(HttpCall httpCall, Request.Builder requestBuilder); - - void modifyWebView(WebView webView); -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteResolver.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteResolver.java deleted file mode 100644 index 4d18081537..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteResolver.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - - -import android.support.annotation.Nullable; - -import org.floens.chan.core.database.LoadableProvider; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.repository.SiteRepository; - -import java.util.List; - -import javax.inject.Inject; - -import okhttp3.HttpUrl; - -public class SiteResolver { - private final SiteRepository siteRepository; - private final LoadableProvider loadableProvider; - - @Inject - public SiteResolver(SiteRepository siteRepository, LoadableProvider loadableProvider) { - this.siteRepository = siteRepository; - this.loadableProvider = loadableProvider; - } - - public Site findSiteForUrl(String url) { - HttpUrl httpUrl = sanitizeUrl(url); - - SiteRepository.Sites sites = siteRepository.all(); - - if (httpUrl == null) { - for (Site site : sites.getAll()) { - SiteUrlHandler siteUrlHandler = site.resolvable(); - - if (siteUrlHandler.matchesName(url)) { - return site; - } - } - - return null; - } - - if (!httpUrl.scheme().equals("https")) { - httpUrl = httpUrl.newBuilder().scheme("https").build(); - } - - for (Site site : sites.getAll()) { - SiteUrlHandler siteUrlHandler = site.resolvable(); - if (siteUrlHandler.respondsTo(httpUrl)) { - return site; - } - } - - return null; - } - - public SiteResolverResult resolveSiteForUrl(String url) { - List siteUrlHandlers = SiteRegistry.URL_HANDLERS; - - HttpUrl httpUrl = sanitizeUrl(url); - - if (httpUrl == null) { - for (SiteUrlHandler siteUrlHandler : siteUrlHandlers) { - if (siteUrlHandler.matchesName(url)) { - return new SiteResolverResult(SiteResolverResult.Match.BUILTIN, - siteUrlHandler.getSiteClass(), null); - } - } - - return new SiteResolverResult(SiteResolverResult.Match.NONE, - null, null); - } - - if (!httpUrl.scheme().equals("https")) { - httpUrl = httpUrl.newBuilder().scheme("https").build(); - } - - for (SiteUrlHandler siteUrlHandler : siteUrlHandlers) { - if (siteUrlHandler.respondsTo(httpUrl)) { - return new SiteResolverResult(SiteResolverResult.Match.BUILTIN, - siteUrlHandler.getSiteClass(), null); - } - } - - return new SiteResolverResult(SiteResolverResult.Match.EXTERNAL, null, httpUrl); - } - - public LoadableResult resolveLoadableForUrl(String url) { - final HttpUrl httpUrl = sanitizeUrl(url); - - if (httpUrl == null) { - return null; - } - - for (Site site : siteRepository.all().getAll()) { - if (site.resolvable().respondsTo(httpUrl)) { - Loadable resolvedLoadable = site.resolvable().resolveLoadable(site, httpUrl); - if (resolvedLoadable != null) { - Loadable resolved = loadableProvider.get(resolvedLoadable); - - if (resolved != null) { - return new LoadableResult(resolved); - } - } - } - } - - return null; - } - - @Nullable - private HttpUrl sanitizeUrl(String url) { - HttpUrl httpUrl = HttpUrl.parse(url); - - if (httpUrl == null) { - httpUrl = HttpUrl.parse("https://" + url); - } - - if (httpUrl != null) { - if (httpUrl.host().indexOf('.') < 0) { - httpUrl = null; - } - } - return httpUrl; - } - - public static class SiteResolverResult { - enum Match { - NONE, - BUILTIN, - EXTERNAL - } - - Match match; - Class builtinResult; - HttpUrl externalResult; - - public SiteResolverResult(Match match, Class builtinResult, HttpUrl externalResult) { - this.match = match; - this.builtinResult = builtinResult; - this.externalResult = externalResult; - } - } - - public static class LoadableResult { - public final Loadable loadable; - - public LoadableResult(Loadable loadable) { - this.loadable = loadable; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteService.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteService.java deleted file mode 100644 index d29c3bd155..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteService.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - - -import org.floens.chan.core.model.orm.SiteModel; -import org.floens.chan.core.repository.SiteRepository; -import org.floens.chan.core.settings.json.JsonSettings; - -import java.util.List; - -import javax.inject.Inject; -import javax.inject.Singleton; - -@Singleton -public class SiteService { - private static boolean addSiteForLegacy = false; - - /** - * Called from the DatabaseHelper when upgrading to the tables with a site id. - */ - public static void addSiteForLegacy() { - addSiteForLegacy = true; - } - - private SiteRepository siteRepository; - private SiteResolver resolver; - - private boolean initialized = false; - - @Inject - public SiteService(SiteRepository siteRepository, SiteResolver resolver) { - this.siteRepository = siteRepository; - this.resolver = resolver; - } - - public boolean areSitesSetup() { - return !siteRepository.all().getAll().isEmpty(); - } - - public void addSite(String url, SiteAddCallback callback) { - Site existing = resolver.findSiteForUrl(url); - if (existing != null) { - callback.onSiteAddFailed("site already added"); - return; - } - - SiteResolver.SiteResolverResult resolve = resolver.resolveSiteForUrl(url); - - Class siteClass; - if (resolve.match == SiteResolver.SiteResolverResult.Match.BUILTIN) { - siteClass = resolve.builtinResult; - } else if (resolve.match == SiteResolver.SiteResolverResult.Match.EXTERNAL) { - callback.onSiteAddFailed("external sites not hardcoded is not implemented yet"); - return; - } else { - callback.onSiteAddFailed("not a url"); - return; - } - - Site site = siteRepository.createFromClass(siteClass); - - callback.onSiteAdded(site); - } - - public void updateUserSettings(Site site, JsonSettings jsonSettings) { - SiteModel siteModel = siteRepository.byId(site.id()); - if (siteModel == null) throw new NullPointerException("siteModel == null"); - siteRepository.updateSiteUserSettingsAsync(siteModel, jsonSettings); - } - - public void updateOrdering(List sitesInNewOrder) { - siteRepository.updateSiteOrderingAsync(sitesInNewOrder); - } - - public void initialize() { - if (initialized) { - throw new IllegalStateException("Already initialized"); - } - initialized = true; - - if (addSiteForLegacy) { - addSiteForLegacy = false; - siteRepository.addLegacySite(); - } - - siteRepository.initialize(); - } - - public interface SiteAddCallback { - void onSiteAdded(Site site); - - void onSiteAddFailed(String message); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteSetting.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteSetting.java deleted file mode 100644 index 17b94c21d4..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteSetting.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - -import org.floens.chan.core.settings.OptionsSetting; -import org.floens.chan.core.settings.Setting; - -import java.util.List; - -/** - * Hacky stuff to give the site settings a good UI. - */ -public class SiteSetting { - public enum Type { - OPTIONS - } - - public final String name; - public final Type type; - public final Setting setting; - - public List optionNames; - - private SiteSetting(String name, Type type, Setting setting) { - this.name = name; - this.type = type; - this.setting = setting; - } - - public static SiteSetting forOption(OptionsSetting options, String name, - List optionNames) { - SiteSetting setting = new SiteSetting(name, Type.OPTIONS, options); - setting.optionNames = optionNames; - return setting; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteUrlHandler.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteUrlHandler.java deleted file mode 100644 index 543e3923c1..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteUrlHandler.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site; - - -import android.support.annotation.Nullable; - -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.orm.Loadable; - -import okhttp3.HttpUrl; - -public interface SiteUrlHandler { - Class getSiteClass(); - - boolean matchesName(String value); - - boolean respondsTo(HttpUrl url); - - String desktopUrl(Loadable loadable, @Nullable Post post); - - Loadable resolveLoadable(Site site, HttpUrl url); -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/CommonReplyHttpCall.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/CommonReplyHttpCall.java deleted file mode 100644 index 7747145f0f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/CommonReplyHttpCall.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site.common; - -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.http.HttpCall; -import org.floens.chan.core.site.http.Reply; -import org.floens.chan.core.site.http.ReplyResponse; -import org.jsoup.Jsoup; - -import java.io.IOException; -import java.util.Random; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import okhttp3.HttpUrl; -import okhttp3.MultipartBody; -import okhttp3.Request; -import okhttp3.Response; - -public abstract class CommonReplyHttpCall extends HttpCall { - private static final String TAG = "CommonReplyHttpCall"; - private static final Random RANDOM = new Random(); - private static final Pattern THREAD_NO_PATTERN = Pattern.compile(""); - private static final Pattern ERROR_MESSAGE = Pattern.compile("\"errmsg\"[^>]*>(.*?)<\\/span"); - private static final String PROBABLY_BANNED_TEXT = "banned"; - - public final Reply reply; - public final ReplyResponse replyResponse = new ReplyResponse(); - - public CommonReplyHttpCall(Site site, Reply reply) { - super(site); - this.reply = reply; - } - - @Override - public void setup(Request.Builder requestBuilder) { - replyResponse.password = Long.toHexString(RANDOM.nextLong()); - - MultipartBody.Builder formBuilder = new MultipartBody.Builder(); - formBuilder.setType(MultipartBody.FORM); - - addParameters(formBuilder); - - HttpUrl replyUrl = site.endpoints().reply(this.reply.loadable); - requestBuilder.url(replyUrl); - requestBuilder.addHeader("Referer", replyUrl.toString()); - requestBuilder.post(formBuilder.build()); - } - - @Override - public void process(Response response, String result) throws IOException { - Matcher errorMessageMatcher = ERROR_MESSAGE.matcher(result); - if (errorMessageMatcher.find()) { - replyResponse.errorMessage = Jsoup.parse(errorMessageMatcher.group(1)).body().text(); - replyResponse.probablyBanned = replyResponse.errorMessage.contains(PROBABLY_BANNED_TEXT); - } else { - Matcher threadNoMatcher = THREAD_NO_PATTERN.matcher(result); - if (threadNoMatcher.find()) { - try { - replyResponse.threadNo = Integer.parseInt(threadNoMatcher.group(1)); - replyResponse.postNo = Integer.parseInt(threadNoMatcher.group(2)); - } catch (NumberFormatException ignored) { - } - - if (replyResponse.threadNo >= 0 && replyResponse.postNo >= 0) { - replyResponse.posted = true; - } - } - } - } - - public abstract void addParameters(MultipartBody.Builder builder); -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/CommonSite.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/CommonSite.java deleted file mode 100644 index c3357473ae..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/CommonSite.java +++ /dev/null @@ -1,575 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site.common; - -import android.os.Handler; -import android.os.Looper; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.webkit.WebView; - -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.json.site.SiteConfig; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.settings.json.JsonSettings; -import org.floens.chan.core.site.Boards; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.SiteActions; -import org.floens.chan.core.site.SiteAuthentication; -import org.floens.chan.core.site.SiteBase; -import org.floens.chan.core.site.SiteEndpoints; -import org.floens.chan.core.site.SiteIcon; -import org.floens.chan.core.site.SiteRequestModifier; -import org.floens.chan.core.site.SiteUrlHandler; -import org.floens.chan.core.site.http.DeleteRequest; -import org.floens.chan.core.site.http.DeleteResponse; -import org.floens.chan.core.site.http.HttpCall; -import org.floens.chan.core.site.http.LoginRequest; -import org.floens.chan.core.site.http.Reply; -import org.floens.chan.core.site.http.ReplyResponse; -import org.floens.chan.core.site.parser.ChanReader; -import org.floens.chan.core.site.parser.CommentParser; -import org.floens.chan.core.site.parser.PostParser; - -import java.io.IOException; -import java.security.SecureRandom; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import okhttp3.HttpUrl; -import okhttp3.Request; -import okhttp3.Response; - -import static android.text.TextUtils.isEmpty; - -public abstract class CommonSite extends SiteBase { - private final Random secureRandom = new SecureRandom(); - - private String name; - private SiteIcon icon; - private BoardsType boardsType; - private CommonConfig config; - private CommonSiteUrlHandler resolvable; - private CommonEndpoints endpoints; - private CommonActions actions; - private CommonApi api; - private CommonRequestModifier requestModifier; - - private PostParser postParser; - - private List staticBoards = new ArrayList<>(); - - @Override - public void initialize(int id, SiteConfig config, JsonSettings userSettings) { - super.initialize(id, config, userSettings); - setup(); - - if (name == null) { - throw new NullPointerException("setName not called"); - } - - if (icon == null) { - throw new NullPointerException("setIcon not called"); - } - - if (boardsType == null) { - throw new NullPointerException("setBoardsType not called"); - } - - if (this.config == null) { - throw new NullPointerException("setConfig not called"); - } - - if (resolvable == null) { - throw new NullPointerException("setResolvable not called"); - } - - if (endpoints == null) { - throw new NullPointerException("setEndpoints not called"); - } - - if (actions == null) { - throw new NullPointerException("setActions not called"); - } - - if (api == null) { - throw new NullPointerException("setApi not called"); - } - - if (postParser == null) { - throw new NullPointerException("setParser not called"); - } - - if (requestModifier == null) { - // No-op implementation. - requestModifier = new CommonRequestModifier() { - }; - } - } - - public abstract void setup(); - - public void setName(String name) { - this.name = name; - } - - public void setIcon(SiteIcon icon) { - this.icon = icon; - } - - public void setBoardsType(BoardsType boardsType) { - this.boardsType = boardsType; - } - - public void setBoards(Board... boards) { - boardsType = BoardsType.STATIC; - staticBoards.addAll(Arrays.asList(boards)); - } - - public void setConfig(CommonConfig config) { - this.config = config; - } - - public void setResolvable(CommonSiteUrlHandler resolvable) { - this.resolvable = resolvable; - } - - public void setEndpoints(CommonEndpoints endpoints) { - this.endpoints = endpoints; - } - - public void setActions(CommonActions actions) { - this.actions = actions; - } - - public void setApi(CommonApi api) { - this.api = api; - } - - public void setParser(CommentParser commentParser) { - postParser = new DefaultPostParser(commentParser); - } - - public void setRequestModifier(CommonRequestModifier requestModifier) { - this.requestModifier = requestModifier; - } - - /* - * Site implementation: - */ - - @Override - public String name() { - return name; - } - - @Override - public SiteIcon icon() { - return icon; - } - - @Override - public BoardsType boardsType() { - return boardsType; - } - - @Override - public SiteUrlHandler resolvable() { - return resolvable; - } - - @Override - public boolean feature(Feature feature) { - return config.feature(feature); - } - - @Override - public boolean boardFeature(BoardFeature boardFeature, Board board) { - return config.boardFeature(boardFeature, board); - } - - @Override - public SiteEndpoints endpoints() { - return endpoints; - } - - @Override - public SiteActions actions() { - return actions; - } - - @Override - public SiteRequestModifier requestModifier() { - return requestModifier; - } - - @Override - public ChanReader chanReader() { - return api; - } - - public abstract class CommonConfig { - public boolean feature(Feature feature) { - return false; - } - - public boolean boardFeature(BoardFeature boardFeature, Board board) { - return false; - } - } - - public static abstract class CommonSiteUrlHandler implements SiteUrlHandler { - public abstract HttpUrl getUrl(); - - public abstract String[] getNames(); - - @Override - public boolean matchesName(String value) { - for (String s : getNames()) { - if (value.equals(s)) { - return true; - } - } - - return false; - } - - @Override - public boolean respondsTo(HttpUrl url) { - return getUrl().host().equals(url.host()); - } - - @Override - public String desktopUrl(Loadable loadable, @Nullable Post post) { - if (loadable.isCatalogMode()) { - return getUrl().newBuilder().addPathSegment(loadable.boardCode).toString(); - } else if (loadable.isThreadMode()) { - return getUrl().newBuilder() - .addPathSegment(loadable.boardCode).addPathSegment("res") - .addPathSegment(String.valueOf(loadable.no)) - .toString(); - } else { - return getUrl().toString(); - } - } - - @Override - public Loadable resolveLoadable(Site site, HttpUrl url) { - Matcher board = boardPattern().matcher(url.encodedPath()); - Matcher thread = threadPattern().matcher(url.encodedPath()); - - try { - if (thread.find()) { - Board b = site.board(thread.group(1)); - if (b == null) { - return null; - } - Loadable l = Loadable.forThread(site, b, Integer.parseInt(thread.group(3))); - - if (isEmpty(url.fragment())) { - l.markedNo = Integer.parseInt(url.fragment()); - } - - return l; - } else if (board.find()) { - Board b = site.board(board.group(1)); - if (b == null) { - return null; - } - - return Loadable.forCatalog(b); - } - } catch (NumberFormatException ignored) { - } - - return null; - } - - public Pattern boardPattern() { - return Pattern.compile("/(\\w+)"); - } - - public Pattern threadPattern() { - return Pattern.compile("/(\\w+)/\\w+/(\\d+).*"); - } - } - - public static abstract class CommonEndpoints implements SiteEndpoints { - protected CommonSite site; - - public CommonEndpoints(CommonSite site) { - this.site = site; - } - - @NonNull - public SimpleHttpUrl from(String url) { - return new SimpleHttpUrl(url); - } - - @Override - public HttpUrl catalog(Board board) { - return null; - } - - @Override - public HttpUrl thread(Board board, Loadable loadable) { - return null; - } - - @Override - public HttpUrl imageUrl(Post.Builder post, Map arg) { - return null; - } - - @Override - public HttpUrl thumbnailUrl(Post.Builder post, boolean spoiler, Map arg) { - return null; - } - - @Override - public HttpUrl icon(Post.Builder post, String icon, Map arg) { - return null; - } - - @Override - public HttpUrl boards() { - return null; - } - - @Override - public HttpUrl archive(Board board) { - return null; - } - - @Override - public HttpUrl reply(Loadable thread) { - return null; - } - - @Override - public HttpUrl delete(Post post) { - return null; - } - - @Override - public HttpUrl report(Post post) { - return null; - } - - @Override - public HttpUrl login() { - return null; - } - } - - public static class SimpleHttpUrl { - @NonNull - public HttpUrl.Builder url; - - public SimpleHttpUrl(String from) { - HttpUrl res = HttpUrl.parse(from); - if (res == null) { - throw new NullPointerException(); - } - url = res.newBuilder(); - } - - public SimpleHttpUrl(@NonNull HttpUrl.Builder from) { - url = from; - } - - public SimpleHttpUrl builder() { - return new SimpleHttpUrl(url.build().newBuilder()); - } - - public SimpleHttpUrl s(String segment) { - url.addPathSegment(segment); - return this; - } - - public HttpUrl url() { - return url.build(); - } - } - - public static abstract class CommonActions implements SiteActions { - protected CommonSite site; - - public CommonActions(CommonSite site) { - this.site = site; - } - - @Override - public void post(Reply reply, PostListener postListener) { - ReplyResponse replyResponse = new ReplyResponse(); - - reply.password = Long.toHexString(site.secureRandom.nextLong()); - replyResponse.password = reply.password; - - MultipartHttpCall call = new MultipartHttpCall(site) { - @Override - public void process(Response response, String result) throws IOException { - handlePost(replyResponse, response, result); - } - }; - - call.url(site.endpoints().reply(reply.loadable)); - - if (requirePrepare()) { - Handler handler = new Handler(Looper.getMainLooper()); - new Thread(() -> { - prepare(call, reply, replyResponse); - handler.post(() -> { - setupPost(reply, call); - makePostCall(call, replyResponse, postListener); - }); - }).start(); - } else { - setupPost(reply, call); - makePostCall(call, replyResponse, postListener); - } - } - - public void setupPost(Reply reply, MultipartHttpCall call) { - } - - public void handlePost(ReplyResponse response, Response httpResponse, String responseBody) { - } - - @Override - public boolean postRequiresAuthentication() { - return false; - } - - @Override - public SiteAuthentication postAuthenticate() { - return SiteAuthentication.fromNone(); - } - - private void makePostCall(HttpCall call, ReplyResponse replyResponse, PostListener postListener) { - site.httpCallManager.makeHttpCall(call, new HttpCall.HttpCallback() { - @Override - public void onHttpSuccess(HttpCall httpCall) { - postListener.onPostComplete(httpCall, replyResponse); - } - - @Override - public void onHttpFail(HttpCall httpCall, Exception e) { - postListener.onPostError(httpCall, e); - } - }); - } - - public boolean requirePrepare() { - return false; - } - - public void prepare(MultipartHttpCall call, Reply reply, ReplyResponse replyResponse) { - } - - @Override - public void delete(DeleteRequest deleteRequest, DeleteListener deleteListener) { - DeleteResponse deleteResponse = new DeleteResponse(); - - MultipartHttpCall call = new MultipartHttpCall(site) { - @Override - public void process(Response response, String result) throws IOException { - handleDelete(deleteResponse, response, result); - } - }; - - call.url(site.endpoints().delete(deleteRequest.post)); - setupDelete(deleteRequest, call); - site.httpCallManager.makeHttpCall(call, new HttpCall.HttpCallback() { - @Override - public void onHttpSuccess(HttpCall httpCall) { - deleteListener.onDeleteComplete(httpCall, deleteResponse); - } - - @Override - public void onHttpFail(HttpCall httpCall, Exception e) { - deleteListener.onDeleteError(httpCall); - } - }); - } - - public void setupDelete(DeleteRequest deleteRequest, MultipartHttpCall call) { - } - - public void handleDelete(DeleteResponse response, Response httpResponse, String responseBody) { - } - - @Override - public void boards(BoardsListener boardsListener) { - if (!site.staticBoards.isEmpty()) { - boardsListener.onBoardsReceived(new Boards(site.staticBoards)); - } - } - - @Override - public void archive(Board board, ArchiveListener archiveListener) { - } - - @Override - public void login(LoginRequest loginRequest, LoginListener loginListener) { - } - - @Override - public void logout() { - } - - @Override - public boolean isLoggedIn() { - return false; - } - - @Override - public LoginRequest getLoginDetails() { - return null; - } - } - - public static abstract class CommonApi implements ChanReader { - protected CommonSite site; - - public CommonApi(CommonSite site) { - this.site = site; - } - - @Override - public PostParser getParser() { - return site.postParser; - } - } - - public abstract class CommonRequestModifier implements SiteRequestModifier { - @Override - public void modifyHttpCall(HttpCall httpCall, Request.Builder requestBuilder) { - } - - @Override - public void modifyWebView(WebView webView) { - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/DefaultPostParser.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/DefaultPostParser.java deleted file mode 100644 index 78f2070f34..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/DefaultPostParser.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site.common; - - -import android.support.annotation.AnyThread; -import android.text.SpannableString; -import android.text.TextUtils; -import android.text.style.BackgroundColorSpan; - -import org.floens.chan.core.model.Post; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.core.site.parser.CommentParser; -import org.floens.chan.core.site.parser.CommentParserHelper; -import org.floens.chan.core.site.parser.PostParser; -import org.floens.chan.ui.span.AbsoluteSizeSpanHashed; -import org.floens.chan.ui.span.ForegroundColorSpanHashed; -import org.floens.chan.ui.theme.Theme; -import org.floens.chan.ui.theme.ThemeHelper; -import org.floens.chan.utils.Logger; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.nodes.Node; -import org.jsoup.nodes.TextNode; -import org.jsoup.parser.Parser; - -import java.util.ArrayList; -import java.util.List; - -import static org.floens.chan.utils.AndroidUtils.sp; - -@AnyThread -public class DefaultPostParser implements PostParser { - private static final String TAG = "DefaultPostParser"; - - private CommentParser commentParser; - - public DefaultPostParser(CommentParser commentParser) { - this.commentParser = commentParser; - } - - @Override - public Post parse(Theme theme, Post.Builder builder, Callback callback) { - if (theme == null) { - theme = ThemeHelper.getInstance().getTheme(); - } - - if (!TextUtils.isEmpty(builder.name)) { - builder.name = Parser.unescapeEntities(builder.name, false); - } - - if (!TextUtils.isEmpty(builder.subject)) { - builder.subject = Parser.unescapeEntities(builder.subject, false); - } - - parseSpans(theme, builder); - - if (builder.comment != null) { - builder.comment = parseComment(theme, builder, builder.comment, callback); - } else { - builder.comment = ""; - } - - return builder.build(); - } - - /** - * Parse the comment, subject, tripcodes, names etc. as spannables.
- * This is done on a background thread for performance, even when it is UI code.
- * The results will be placed on the Post.*Span members. - * - * @param theme Theme to use for parsing - * @param builder Post builder to get data from - */ - private void parseSpans(Theme theme, Post.Builder builder) { - boolean anonymize = ChanSettings.anonymize.get(); - boolean anonymizeIds = ChanSettings.anonymizeIds.get(); - - final String defaultName = "Anonymous"; - if (anonymize) { - builder.name(defaultName); - builder.tripcode(""); - } - - if (anonymizeIds) { - builder.posterId(""); - } - - SpannableString subjectSpan = null; - SpannableString nameSpan = null; - SpannableString tripcodeSpan = null; - SpannableString idSpan = null; - SpannableString capcodeSpan = null; - - int detailsSizePx = sp(Integer.parseInt(ChanSettings.fontSize.get()) - 4); - - if (!TextUtils.isEmpty(builder.subject)) { - subjectSpan = new SpannableString(builder.subject); - // Do not set another color when the post is in stub mode, it sets text_color_secondary - if (!builder.filterStub) { - subjectSpan.setSpan(new ForegroundColorSpanHashed(theme.subjectColor), 0, subjectSpan.length(), 0); - } - } - - if (!TextUtils.isEmpty(builder.name) && (!builder.name.equals(defaultName) || ChanSettings.showAnonymousName.get())) { - nameSpan = new SpannableString(builder.name); - nameSpan.setSpan(new ForegroundColorSpanHashed(theme.nameColor), 0, nameSpan.length(), 0); - } - - if (!TextUtils.isEmpty(builder.tripcode)) { - tripcodeSpan = new SpannableString(builder.tripcode); - tripcodeSpan.setSpan(new ForegroundColorSpanHashed(theme.nameColor), 0, tripcodeSpan.length(), 0); - tripcodeSpan.setSpan(new AbsoluteSizeSpanHashed(detailsSizePx), 0, tripcodeSpan.length(), 0); - } - - if (!TextUtils.isEmpty(builder.posterId)) { - idSpan = new SpannableString(" ID: " + builder.posterId + " "); - - // Stolen from the 4chan extension - int hash = builder.posterId.hashCode(); - - int r = (hash >> 24) & 0xff; - int g = (hash >> 16) & 0xff; - int b = (hash >> 8) & 0xff; - - //noinspection NumericOverflow - int idColor = (0xff << 24) + (r << 16) + (g << 8) + b; - boolean lightColor = (r * 0.299f) + (g * 0.587f) + (b * 0.114f) > 125f; - int idBgColor = lightColor ? theme.idBackgroundLight : theme.idBackgroundDark; - - idSpan.setSpan(new ForegroundColorSpanHashed(idColor), 0, idSpan.length(), 0); - idSpan.setSpan(new BackgroundColorSpan(idBgColor), 0, idSpan.length(), 0); - idSpan.setSpan(new AbsoluteSizeSpanHashed(detailsSizePx), 0, idSpan.length(), 0); - } - - if (!TextUtils.isEmpty(builder.moderatorCapcode)) { - capcodeSpan = new SpannableString("Capcode: " + builder.moderatorCapcode); - capcodeSpan.setSpan(new ForegroundColorSpanHashed(theme.capcodeColor), 0, capcodeSpan.length(), 0); - capcodeSpan.setSpan(new AbsoluteSizeSpanHashed(detailsSizePx), 0, capcodeSpan.length(), 0); - } - - CharSequence nameTripcodeIdCapcodeSpan = new SpannableString(""); - if (nameSpan != null) { - nameTripcodeIdCapcodeSpan = TextUtils.concat(nameTripcodeIdCapcodeSpan, nameSpan, " "); - } - - if (tripcodeSpan != null) { - nameTripcodeIdCapcodeSpan = TextUtils.concat(nameTripcodeIdCapcodeSpan, tripcodeSpan, " "); - } - - if (idSpan != null) { - nameTripcodeIdCapcodeSpan = TextUtils.concat(nameTripcodeIdCapcodeSpan, idSpan, " "); - } - - if (capcodeSpan != null) { - nameTripcodeIdCapcodeSpan = TextUtils.concat(nameTripcodeIdCapcodeSpan, capcodeSpan, " "); - } - - builder.spans(subjectSpan, nameTripcodeIdCapcodeSpan); - } - - private CharSequence parseComment(Theme theme, Post.Builder post, CharSequence commentRaw, Callback callback) { - CharSequence total = new SpannableString(""); - - try { - String comment = commentRaw.toString().replace("", ""); - - Document document = Jsoup.parseBodyFragment(comment); - - List nodes = document.body().childNodes(); - List texts = new ArrayList<>(nodes.size()); - - for (Node node : nodes) { - CharSequence nodeParsed = parseNode(theme, post, callback, node); - if (nodeParsed != null) { - texts.add(nodeParsed); - } - } - - total = TextUtils.concat(texts.toArray(new CharSequence[texts.size()])); - } catch (Exception e) { - Logger.e(TAG, "Error parsing comment html", e); - } - - return total; - } - - private CharSequence parseNode(Theme theme, Post.Builder post, Callback callback, Node node) { - if (node instanceof TextNode) { - String text = ((TextNode) node).text(); - SpannableString spannable = new SpannableString(text); - - CommentParserHelper.detectLinks(theme, post, text, spannable); - - return spannable; - } else if (node instanceof Element) { - String nodeName = node.nodeName(); - - // Recursively call parseNode with the nodes of the paragraph. - List innerNodes = node.childNodes(); - List texts = new ArrayList<>(innerNodes.size() + 1); - - for (Node innerNode : innerNodes) { - CharSequence nodeParsed = parseNode(theme, post, callback, innerNode); - if (nodeParsed != null) { - texts.add(nodeParsed); - } - } - -// if (node.nextSibling() != null) { -// texts.add("\n"); -// } - - CharSequence allInnerText = TextUtils.concat( - texts.toArray(new CharSequence[texts.size()])); - - CharSequence result = commentParser.handleTag( - callback, - theme, - post, - nodeName, - allInnerText, - (Element) node); - if (result != null) { - return result; - } else { - return allInnerText; - } - } else { - return ""; // ? - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/FutabaChanReader.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/FutabaChanReader.java deleted file mode 100644 index 298516123c..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/FutabaChanReader.java +++ /dev/null @@ -1,353 +0,0 @@ -package org.floens.chan.core.site.common; - - -import android.util.JsonReader; - -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostHttpIcon; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.site.SiteEndpoints; -import org.floens.chan.core.site.parser.ChanReader; -import org.floens.chan.core.site.parser.ChanReaderProcessingQueue; -import org.floens.chan.core.site.parser.CommentParser; -import org.floens.chan.core.site.parser.PostParser; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import okhttp3.HttpUrl; - -import static org.floens.chan.core.site.SiteEndpoints.makeArgument; - -public class FutabaChanReader implements ChanReader { - private final PostParser postParser; - - public FutabaChanReader() { - CommentParser commentParser = new CommentParser(); - commentParser.addDefaultRules(); - this.postParser = new DefaultPostParser(commentParser); - } - - public FutabaChanReader(PostParser postParser) { - this.postParser = postParser; - } - - @Override - public PostParser getParser() { - return postParser; - } - - @Override - public void loadThread(JsonReader reader, ChanReaderProcessingQueue queue) throws Exception { - reader.beginObject(); - // Page object - while (reader.hasNext()) { - String key = reader.nextName(); - if (key.equals("posts")) { - reader.beginArray(); - // Thread array - while (reader.hasNext()) { - // Thread object - readPostObject(reader, queue); - } - reader.endArray(); - } else { - reader.skipValue(); - } - } - reader.endObject(); - } - - @Override - public void loadCatalog(JsonReader reader, ChanReaderProcessingQueue queue) throws Exception { - reader.beginArray(); // Array of pages - - while (reader.hasNext()) { - reader.beginObject(); // Page object - - while (reader.hasNext()) { - if (reader.nextName().equals("threads")) { - reader.beginArray(); // Threads array - - while (reader.hasNext()) { - readPostObject(reader, queue); - } - - reader.endArray(); - } else { - reader.skipValue(); - } - } - - reader.endObject(); - } - - reader.endArray(); - } - - @Override - public void readPostObject(JsonReader reader, ChanReaderProcessingQueue queue) throws Exception { - Post.Builder builder = new Post.Builder(); - builder.board(queue.getLoadable().board); - - SiteEndpoints endpoints = queue.getLoadable().getSite().endpoints(); - - // File - String fileId = null; - String fileExt = null; - int fileWidth = 0; - int fileHeight = 0; - long fileSize = 0; - boolean fileSpoiler = false; - String fileName = null; - - List files = new ArrayList<>(); - - // Country flag - String countryCode = null; - String trollCountryCode = null; - String countryName = null; - - // 4chan pass leaf - int since4pass = 0; - - reader.beginObject(); - while (reader.hasNext()) { - String key = reader.nextName(); - - switch (key) { - case "no": - builder.id(reader.nextInt()); - break; - /*case "now": - post.date = reader.nextString(); - break;*/ - case "sub": - builder.subject(reader.nextString()); - break; - case "name": - builder.name(reader.nextString()); - break; - case "com": - builder.comment(reader.nextString()); - break; - case "tim": - fileId = reader.nextString(); - break; - case "time": - builder.setUnixTimestampSeconds(reader.nextLong()); - break; - case "ext": - fileExt = reader.nextString().replace(".", ""); - break; - case "w": - fileWidth = reader.nextInt(); - break; - case "h": - fileHeight = reader.nextInt(); - break; - case "fsize": - fileSize = reader.nextLong(); - break; - case "filename": - fileName = reader.nextString(); - break; - case "trip": - builder.tripcode(reader.nextString()); - break; - case "country": - countryCode = reader.nextString(); - break; - case "troll_country": - trollCountryCode = reader.nextString(); - break; - case "country_name": - countryName = reader.nextString(); - break; - case "spoiler": - fileSpoiler = reader.nextInt() == 1; - break; - case "resto": - int opId = reader.nextInt(); - builder.op(opId == 0); - builder.opId(opId); - break; - case "sticky": - builder.sticky(reader.nextInt() == 1); - break; - case "closed": - builder.closed(reader.nextInt() == 1); - break; - case "archived": - builder.archived(reader.nextInt() == 1); - break; - case "replies": - builder.replies(reader.nextInt()); - break; - case "images": - builder.images(reader.nextInt()); - break; - case "unique_ips": - builder.uniqueIps(reader.nextInt()); - break; - case "last_modified": - builder.lastModified(reader.nextLong()); - break; - case "id": - builder.posterId(reader.nextString()); - break; - case "capcode": - builder.moderatorCapcode(reader.nextString()); - break; - case "since4pass": - since4pass = reader.nextInt(); - break; - case "extra_files": - reader.beginArray(); - - while (reader.hasNext()) { - PostImage postImage = readPostImage(reader, builder, endpoints); - if (postImage != null) { - files.add(postImage); - } - } - - reader.endArray(); - break; - default: - // Unknown/ignored key - reader.skipValue(); - break; - } - } - reader.endObject(); - - // The file from between the other values. - if (fileId != null && fileName != null && fileExt != null) { - Map args = makeArgument("tim", fileId, - "ext", fileExt); - PostImage image = new PostImage.Builder() - .originalName(String.valueOf(fileId)) - .thumbnailUrl(endpoints.thumbnailUrl(builder, false, args)) - .spoilerThumbnailUrl(endpoints.thumbnailUrl(builder, true, args)) - .imageUrl(endpoints.imageUrl(builder, args)) - .filename(org.jsoup.parser.Parser.unescapeEntities(fileName, false)) - .extension(fileExt) - .imageWidth(fileWidth) - .imageHeight(fileHeight) - .spoiler(fileSpoiler) - .size(fileSize) - .build(); - // Insert it at the beginning. - files.add(0, image); - } - - builder.images(files); - - if (builder.op) { - // Update OP fields later on the main thread - Post.Builder op = new Post.Builder(); - op.closed(builder.closed); - op.archived(builder.archived); - op.sticky(builder.sticky); - op.replies(builder.replies); - op.images(builder.imagesCount); - op.uniqueIps(builder.uniqueIps); - op.lastModified(builder.lastModified); - queue.setOp(op); - } - - Post cached = queue.getCachedPost(builder.id); - if (cached != null) { - // Id is known, use the cached post object. - queue.addForReuse(cached); - return; - } - - if (countryCode != null && countryName != null) { - Map arg = new HashMap<>(1); - HttpUrl countryUrl = endpoints.icon(builder, "country", - makeArgument("country_code", countryCode)); - builder.addHttpIcon(new PostHttpIcon(countryUrl, countryName)); - } - - if (trollCountryCode != null && countryName != null) { - HttpUrl countryUrl = endpoints.icon(builder, "troll_country", - makeArgument("troll_country_code", trollCountryCode)); - builder.addHttpIcon(new PostHttpIcon(countryUrl, countryName)); - } - - if (since4pass != 0) { - HttpUrl iconUrl = endpoints.icon(builder, "since4pass", null); - builder.addHttpIcon(new PostHttpIcon(iconUrl, String.valueOf(since4pass))); - } - - queue.addForParse(builder); - } - - private PostImage readPostImage(JsonReader reader, Post.Builder builder, - SiteEndpoints endpoints) throws IOException { - reader.beginObject(); - - String fileId = null; - long fileSize = 0; - - String fileExt = null; - int fileWidth = 0; - int fileHeight = 0; - boolean fileSpoiler = false; - String fileName = null; - - while (reader.hasNext()) { - switch (reader.nextName()) { - case "tim": - fileId = reader.nextString(); - break; - case "fsize": - fileSize = reader.nextLong(); - break; - case "w": - fileWidth = reader.nextInt(); - break; - case "h": - fileHeight = reader.nextInt(); - break; - case "spoiler": - fileSpoiler = reader.nextInt() == 1; - break; - case "ext": - fileExt = reader.nextString().replace(".", ""); - break; - case "filename": - fileName = reader.nextString(); - break; - default: - reader.skipValue(); - break; - } - } - - reader.endObject(); - - if (fileId != null && fileName != null && fileExt != null) { - Map args = makeArgument("tim", fileId, - "ext", fileExt); - return new PostImage.Builder() - .originalName(String.valueOf(fileId)) - .thumbnailUrl(endpoints.thumbnailUrl(builder, false, args)) - .spoilerThumbnailUrl(endpoints.thumbnailUrl(builder, true, args)) - .imageUrl(endpoints.imageUrl(builder, args)) - .filename(org.jsoup.parser.Parser.unescapeEntities(fileName, false)) - .extension(fileExt) - .imageWidth(fileWidth) - .imageHeight(fileHeight) - .spoiler(fileSpoiler) - .size(fileSize) - .build(); - } - return null; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/MultipartHttpCall.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/MultipartHttpCall.java deleted file mode 100644 index fc28832b0c..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/MultipartHttpCall.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site.common; - -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.http.HttpCall; - -import java.io.File; - -import okhttp3.HttpUrl; -import okhttp3.MediaType; -import okhttp3.MultipartBody; -import okhttp3.Request; -import okhttp3.RequestBody; - -public abstract class MultipartHttpCall extends HttpCall { - private final MultipartBody.Builder formBuilder; - - private HttpUrl url; - - public MultipartHttpCall(Site site) { - super(site); - - formBuilder = new MultipartBody.Builder(); - formBuilder.setType(MultipartBody.FORM); - } - - public MultipartHttpCall url(HttpUrl url) { - this.url = url; - return this; - } - - public MultipartHttpCall parameter(String name, String value) { - formBuilder.addFormDataPart(name, value); - return this; - } - - public MultipartHttpCall fileParameter(String name, String filename, File file) { - formBuilder.addFormDataPart(name, filename, RequestBody.create( - MediaType.parse("application/octet-stream"), file - )); - return this; - } - - @Override - public void setup(Request.Builder requestBuilder) { - requestBuilder.url(url); - String r = url.scheme() + "://" + url.host(); - if (url.port() != 80 && url.port() != 443) { - r += ":" + url.port(); - } - requestBuilder.addHeader("Referer", r); - requestBuilder.post(formBuilder.build()); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanActions.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanActions.java deleted file mode 100644 index 0630a13862..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanActions.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site.common.vichan; - -import org.floens.chan.core.site.SiteAuthentication; -import org.floens.chan.core.site.common.CommonSite; -import org.floens.chan.core.site.common.MultipartHttpCall; -import org.floens.chan.core.site.http.DeleteRequest; -import org.floens.chan.core.site.http.DeleteResponse; -import org.floens.chan.core.site.http.Reply; -import org.floens.chan.core.site.http.ReplyResponse; -import org.jsoup.Jsoup; - -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import okhttp3.HttpUrl; -import okhttp3.Response; - -import static android.text.TextUtils.isEmpty; - -public class VichanActions extends CommonSite.CommonActions { - public VichanActions(CommonSite commonSite) { - super(commonSite); - } - - @Override - public void setupPost(Reply reply, MultipartHttpCall call) { - call.parameter("board", reply.loadable.board.code); - - if (reply.loadable.isThreadMode()) { - call.parameter("thread", String.valueOf(reply.loadable.no)); - } - - // Added with VichanAntispam. - // call.parameter("post", "Post"); - - call.parameter("password", reply.password); - call.parameter("name", reply.name); - call.parameter("email", reply.options); - - if (!isEmpty(reply.subject)) { - call.parameter("subject", reply.subject); - } - - call.parameter("body", reply.comment); - - if (reply.file != null) { - call.fileParameter("file", reply.fileName, reply.file); - } - - if (reply.spoilerImage) { - call.parameter("spoiler", "on"); - } - } - - @Override - public boolean requirePrepare() { - return true; - } - - @Override - public void prepare(MultipartHttpCall call, Reply reply, ReplyResponse replyResponse) { - VichanAntispam antispam = new VichanAntispam( - HttpUrl.parse(site.resolvable().desktopUrl(reply.loadable, null))); - antispam.addDefaultIgnoreFields(); - for (Map.Entry e : antispam.get().entrySet()) { - call.parameter(e.getKey(), e.getValue()); - } - } - - @Override - public void handlePost(ReplyResponse replyResponse, Response response, String result) { - Matcher auth = Pattern.compile("\"captcha\": ?true").matcher(result); - Matcher err = errorPattern().matcher(result); - if (auth.find()) { - replyResponse.requireAuthentication = true; - replyResponse.errorMessage = result; - } else if (err.find()) { - replyResponse.errorMessage = Jsoup.parse(err.group(1)).body().text(); - } else { - HttpUrl url = response.request().url(); - Matcher m = Pattern.compile("/\\w+/\\w+/(\\d+).html").matcher(url.encodedPath()); - try { - if (m.find()) { - replyResponse.threadNo = Integer.parseInt(m.group(1)); - String fragment = url.encodedFragment(); - if (fragment != null) { - replyResponse.postNo = Integer.parseInt(fragment); - } else { - replyResponse.postNo = replyResponse.threadNo; - } - replyResponse.posted = true; - } - } catch (NumberFormatException ignored) { - replyResponse.errorMessage = "Error posting: could not find posted thread."; - } - } - } - - @Override - public void setupDelete(DeleteRequest deleteRequest, MultipartHttpCall call) { - call.parameter("board", deleteRequest.post.board.code); - call.parameter("delete", "Delete"); - call.parameter("delete_" + deleteRequest.post.no, "on"); - call.parameter("password", deleteRequest.savedReply.password); - - if (deleteRequest.imageOnly) { - call.parameter("file", "on"); - } - } - - @Override - public void handleDelete(DeleteResponse response, Response httpResponse, String responseBody) { - Matcher err = errorPattern().matcher(responseBody); - if (err.find()) { - response.errorMessage = Jsoup.parse(err.group(1)).body().text(); - } else { - response.deleted = true; - } - } - - public Pattern errorPattern() { - return Pattern.compile("]*>Error.*]*>(.*?)"); - } - - @Override - public SiteAuthentication postAuthenticate() { - return SiteAuthentication.fromNone(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanAntispam.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanAntispam.java deleted file mode 100644 index ad1aaa166a..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanAntispam.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.core.site.common.vichan; - -import org.floens.chan.utils.Logger; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.select.Elements; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import okhttp3.HttpUrl; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - -/** - * Vichan applies garbage looking fields to the post form, to combat bots. - * Load up the normal html, parse the form, and get these fields for our post. - *

- * {@link #get()} blocks, run it off the main thread. - */ -public class VichanAntispam { - private static final String TAG = "Antispam"; - private HttpUrl url; - - private OkHttpClient okHttpClient = new OkHttpClient(); - - private List fieldsToIgnore = new ArrayList<>(); - - public VichanAntispam(HttpUrl url) { - this.url = url; - } - - public void addDefaultIgnoreFields() { - fieldsToIgnore.addAll(Arrays.asList("board", "thread", "name", "email", - "subject", "body", "password", "file", "spoiler", "json_response", - "file_url1", "file_url2", "file_url3")); - } - - public void ignoreField(String name) { - fieldsToIgnore.add(name); - } - - public Map get() { - Map res = new HashMap<>(); - - Request request = new Request.Builder() - .url(url) - .build(); - try { - Response response = okHttpClient.newCall(request).execute(); - ResponseBody body = response.body(); - if (body != null) { - Document document = Jsoup.parse(body.string()); - Elements form = document.body().getElementsByTag("form"); - for (Element element : form) { - if (element.attr("name").equals("post")) { - // Add all and "); - private static final String CHALLENGE_IMAGE_FILE_NAME = "challenge_image_file"; - private static final int SUCCESS_STATUS_CODE = 200; - - private OkHttpClient okHttpClient; - private Context context; - - public CaptchaNoJsHtmlParser(Context context, OkHttpClient okHttpClient) { - this.context = context; - this.okHttpClient = okHttpClient; - } - - @NonNull - public CaptchaInfo parseHtml(String responseHtml, String siteKey) - throws CaptchaNoJsV2ParsingError, IOException { - if (BackgroundUtils.isMainThread()) { - throw new RuntimeException("Must not be executed on the main thread!"); - } - - CaptchaInfo captchaInfo = new CaptchaInfo(); - - // parse challenge checkboxes' ids - parseCheckboxes(responseHtml, captchaInfo); - - // parse captcha random key - parseCParameter(responseHtml, captchaInfo); - - // parse title - parseChallengeTitle(responseHtml, captchaInfo); - - // parse image url, download image and split it into list of separate images - parseAndDownloadChallengeImage(responseHtml, captchaInfo, siteKey); - - return captchaInfo; - } - - @NonNull - String parseVerificationToken(String responseHtml) throws CaptchaNoJsV2ParsingError { - if (BackgroundUtils.isMainThread()) { - throw new RuntimeException("Must not be executed on the main thread!"); - } - - Matcher matcher = verificationTokenPattern.matcher(responseHtml); - if (!matcher.find()) { - throw new CaptchaNoJsV2ParsingError("Could not parse verification token"); - } - - String token; - - try { - token = matcher.group(1); - } catch (Throwable error) { - Logger.e(TAG, "Could not parse verification token", error); - throw error; - } - - if (token == null || token.isEmpty()) { - throw new CaptchaNoJsV2ParsingError("Verification token is null or empty"); - } - - return token; - } - - public void parseChallengeTitle( - String responseHtml, - CaptchaInfo captchaInfo - ) throws CaptchaNoJsV2ParsingError { - Matcher matcher = challengeTitlePattern.matcher(responseHtml); - if (!matcher.find()) { - throw new CaptchaNoJsV2ParsingError("Could not parse challenge title " + responseHtml); - } - - CaptchaInfo.CaptchaTitle captchaTitle; - - try { - String title = matcher.group(2); - Matcher titleMatcher = challengeTitleBoldPartPattern.matcher(title); - - if (titleMatcher.find()) { - // find the part of the title that should be bold - int start = title.indexOf(""); - - String firstPart = title.substring(0, start); - String boldPart = titleMatcher.group(1); - String resultTitle = firstPart + boldPart; - - captchaTitle = new CaptchaInfo.CaptchaTitle( - resultTitle, - firstPart.length(), - firstPart.length() + boldPart.length()); - } else { - // could not find it - captchaTitle = new CaptchaInfo.CaptchaTitle(title, -1, -1); - } - } catch (Throwable error) { - Logger.e(TAG, "Error while trying to parse challenge title", error); - throw error; - } - - if (captchaTitle == null) { - throw new CaptchaNoJsV2ParsingError("challengeTitle is null"); - } - - if (captchaTitle.isEmpty()) { - throw new CaptchaNoJsV2ParsingError("challengeTitle is empty"); - } - - captchaInfo.setCaptchaTitle(captchaTitle); - } - - private void parseAndDownloadChallengeImage( - String responseHtml, - CaptchaInfo captchaInfo, - String siteKey - ) throws CaptchaNoJsV2ParsingError, IOException { - Matcher matcher = challengeImageUrlPattern.matcher(responseHtml); - if (!matcher.find()) { - throw new CaptchaNoJsV2ParsingError("Could not parse challenge image url"); - } - - String challengeImageUrl; - - try { - challengeImageUrl = matcher.group(1); - } catch (Throwable error) { - Logger.e(TAG, "Error while trying to parse challenge image url", error); - throw error; - } - - if (challengeImageUrl == null) { - throw new CaptchaNoJsV2ParsingError("challengeImageUrl is null"); - } - - if (challengeImageUrl.isEmpty()) { - throw new CaptchaNoJsV2ParsingError("challengeImageUrl is empty"); - } - - String fullUrl = googleBaseUrl + challengeImageUrl + "&k=" + siteKey; - File challengeImageFile = downloadAndStoreImage(fullUrl); - - Pair columnsAndRows = calculateColumnsAndRows( - captchaInfo.captchaType - ); - - Integer columns = columnsAndRows.first; - Integer rows = columnsAndRows.second; - - if (columns == null) { - throw new CaptchaNoJsV2ParsingError("Could not calculate columns count"); - } - - if (rows == null) { - throw new CaptchaNoJsV2ParsingError("Could not calculate rows count"); - } - - List challengeImages = decodeImagesFromFile(challengeImageFile, columns, rows); - captchaInfo.setChallengeImages(challengeImages); - } - - @NonNull - private Pair calculateColumnsAndRows( - CaptchaInfo.CaptchaType captchaType - ) throws CaptchaNoJsV2ParsingError { - switch (captchaType) { - case Canonical: { - // 3x3 captcha with square images - return new Pair<>(3, 3); - } - - case NoCanonical: { - // 2x4 captcha with rectangle images (store fronts) - return new Pair<>(2, 4); - } - - default: { - throw new CaptchaNoJsV2ParsingError("Unknown captcha type"); - } - } - } - - public void parseCParameter( - String responseHtml, - CaptchaInfo captchaInfo - ) throws CaptchaNoJsV2ParsingError { - Matcher matcher = cParameterPattern.matcher(responseHtml); - if (!matcher.find()) { - throw new CaptchaNoJsV2ParsingError("Could not parse c parameter"); - } - - String cParameter; - - try { - cParameter = matcher.group(1); - } catch (Throwable error) { - Logger.e(TAG, "Error while trying to parse c parameter", error); - throw error; - } - - if (cParameter == null) { - throw new CaptchaNoJsV2ParsingError("cParameter is null"); - } - - if (cParameter.isEmpty()) { - throw new CaptchaNoJsV2ParsingError("cParameter is empty"); - } - - captchaInfo.setcParameter(cParameter); - } - - public void parseCheckboxes( - String responseHtml, - CaptchaInfo captchaInfo - ) throws CaptchaNoJsV2ParsingError { - Matcher matcher = checkboxesPattern.matcher(responseHtml); - Set checkboxesSet = new HashSet<>(matcher.groupCount()); - int index = 0; - - while (matcher.find()) { - try { - Integer checkboxId = Integer.parseInt(matcher.group(1)); - checkboxesSet.add(checkboxId); - } catch (Throwable error) { - Logger.e(TAG, "Error while trying to parse checkbox with id (" + index + ")", error); - throw error; - } - - ++index; - } - - if (checkboxesSet.isEmpty()) { - throw new CaptchaNoJsV2ParsingError("Could not parse any checkboxes!"); - } - - CaptchaInfo.CaptchaType captchaType; - - try { - captchaType = CaptchaInfo.CaptchaType.fromCheckboxesCount(checkboxesSet.size()); - } catch (Throwable error) { - Logger.e(TAG, "Error while trying to parse captcha type", error); - throw error; - } - - if (captchaType == CaptchaInfo.CaptchaType.Unknown) { - throw new CaptchaNoJsV2ParsingError("Unknown captcha type"); - } - - captchaInfo.setCaptchaType(captchaType); - captchaInfo.setCheckboxes(new ArrayList<>(checkboxesSet)); - } - - @NonNull - private File downloadAndStoreImage(String fullUrl) throws IOException, CaptchaNoJsV2ParsingError { - Request request = new Request.Builder() - .url(fullUrl) - .build(); - - try (Response response = okHttpClient.newCall(request).execute()) { - if (response.code() != SUCCESS_STATUS_CODE) { - throw new CaptchaNoJsV2ParsingError( - "Could not download challenge image, status code = " + response.code()); - } - - if (response.body() == null) { - throw new CaptchaNoJsV2ParsingError("Captcha challenge image body is null"); - } - - try (InputStream is = response.body().byteStream()) { - File imageFile = getChallengeImageFile(); - - try (OutputStream os = new FileOutputStream(imageFile)) { - IOUtils.copy(is, os); - } - - return imageFile; - } - } - } - - private File getChallengeImageFile() throws CaptchaNoJsV2ParsingError, IOException { - File imageFile = new File(context.getCacheDir(), CHALLENGE_IMAGE_FILE_NAME); - - if (imageFile.exists()) { - if (!imageFile.delete()) { - throw new CaptchaNoJsV2ParsingError( - "Could not delete old challenge image file \"" + imageFile.getAbsolutePath() + "\""); - } - } - - if (!imageFile.createNewFile()) { - throw new CaptchaNoJsV2ParsingError( - "Could not create challenge image file \"" + imageFile.getAbsolutePath() + "\""); - } - - if (!imageFile.canWrite()) { - throw new CaptchaNoJsV2ParsingError( - "Cannot write to the challenge image file \"" + imageFile.getAbsolutePath() + "\""); - } - - return imageFile; - } - - private List decodeImagesFromFile(File challengeImageFile, int columns, int rows) { - Bitmap originalBitmap = BitmapFactory.decodeFile(challengeImageFile.getAbsolutePath()); - List resultImages = new ArrayList<>(columns * rows); - - try { - int imageWidth = originalBitmap.getWidth() / columns; - int imageHeight = originalBitmap.getHeight() / rows; - - for (int column = 0; column < columns; ++column) { - for (int row = 0; row < rows; ++row) { - Bitmap imagePiece = Bitmap.createBitmap( - originalBitmap, - column * imageWidth, - row * imageHeight, - imageWidth, - imageHeight); - - resultImages.add(imagePiece); - } - } - - return resultImages; - } catch (Throwable error) { - for (Bitmap bitmap : resultImages) { - if (!bitmap.isRecycled()) { - bitmap.recycle(); - } - } - - resultImages.clear(); - throw error; - } finally { - if (originalBitmap != null) { - originalBitmap.recycle(); - } - } - } - - public static class CaptchaNoJsV2ParsingError extends Exception { - public CaptchaNoJsV2ParsingError(String message) { - super(message); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsLayoutV2.java b/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsLayoutV2.java deleted file mode 100644 index 68e2af69d6..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsLayoutV2.java +++ /dev/null @@ -1,327 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.captcha.v2; - -import android.content.Context; -import android.content.res.Configuration; -import android.graphics.Typeface; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.constraint.ConstraintLayout; -import android.support.v7.widget.AppCompatButton; -import android.support.v7.widget.AppCompatTextView; -import android.text.Spannable; -import android.text.SpannableString; -import android.text.style.StyleSpan; -import android.util.AttributeSet; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.GridView; -import android.widget.ScrollView; -import android.widget.Toast; - -import org.floens.chan.R; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.SiteAuthentication; -import org.floens.chan.ui.captcha.AuthenticationLayoutCallback; -import org.floens.chan.ui.captcha.AuthenticationLayoutInterface; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.Logger; - -import java.util.List; - -public class CaptchaNoJsLayoutV2 extends FrameLayout - implements AuthenticationLayoutInterface, - CaptchaNoJsPresenterV2.AuthenticationCallbacks, View.OnClickListener { - private static final String TAG = "CaptchaNoJsLayoutV2"; - - private AppCompatTextView captchaChallengeTitle; - private GridView captchaImagesGrid; - private AppCompatButton captchaVerifyButton; - private AppCompatButton useOldCaptchaButton; - private AppCompatButton reloadCaptchaButton; - private AppCompatButton refreshCookiesButton; - private ConstraintLayout buttonsHolder; - private ScrollView background; - - private CaptchaNoJsV2Adapter adapter; - private CaptchaNoJsPresenterV2 presenter; - private Context context; - private AuthenticationLayoutCallback callback; - - public CaptchaNoJsLayoutV2(@NonNull Context context) { - super(context); - init(context); - } - - public CaptchaNoJsLayoutV2(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - init(context); - } - - public CaptchaNoJsLayoutV2(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context); - } - - private void init(Context context) { - this.context = context; - this.presenter = new CaptchaNoJsPresenterV2(this, context); - this.adapter = new CaptchaNoJsV2Adapter(context); - - View view = inflate(context, R.layout.layout_captcha_nojs_v2, this); - - captchaChallengeTitle = view.findViewById(R.id.captcha_layout_v2_title); - captchaImagesGrid = view.findViewById(R.id.captcha_layout_v2_images_grid); - captchaVerifyButton = view.findViewById(R.id.captcha_layout_v2_verify_button); - useOldCaptchaButton = view.findViewById(R.id.captcha_layout_v2_use_old_captcha_button); - reloadCaptchaButton = view.findViewById(R.id.captcha_layout_v2_reload_button); - refreshCookiesButton = view.findViewById(R.id.captcha_layout_v2_refresh_cookies); - buttonsHolder = view.findViewById(R.id.captcha_layout_v2_buttons_holder); - background = view.findViewById(R.id.captcha_layout_v2_background); - - background.setBackgroundColor(AndroidUtils.getAttrColor(getContext(), R.attr.backcolor)); - buttonsHolder.setBackgroundColor(AndroidUtils.getAttrColor(getContext(), R.attr.backcolor_secondary)); - captchaChallengeTitle.setBackgroundColor(AndroidUtils.getAttrColor(getContext(), R.attr.backcolor_secondary)); - captchaChallengeTitle.setTextColor(AndroidUtils.getAttrColor(getContext(), R.attr.text_color_primary)); - captchaVerifyButton.setTextColor(AndroidUtils.getAttrColor(getContext(), R.attr.text_color_primary)); - useOldCaptchaButton.setTextColor(AndroidUtils.getAttrColor(getContext(), R.attr.text_color_primary)); - reloadCaptchaButton.setTextColor(AndroidUtils.getAttrColor(getContext(), R.attr.text_color_primary)); - refreshCookiesButton.setTextColor(AndroidUtils.getAttrColor(getContext(), R.attr.text_color_primary)); - - captchaVerifyButton.setOnClickListener(this); - useOldCaptchaButton.setOnClickListener(this); - reloadCaptchaButton.setOnClickListener(this); - - if (ChanSettings.useRealGoogleCookies.get()) { - refreshCookiesButton.setVisibility(View.VISIBLE); - refreshCookiesButton.setOnClickListener(this); - } - - captchaVerifyButton.setEnabled(false); - } - - @Override - protected void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - - reset(); - } - - @Override - public void initialize(Site site, AuthenticationLayoutCallback callback) { - this.callback = callback; - - SiteAuthentication authentication = site.actions().postAuthenticate(); - if (authentication.type != SiteAuthentication.Type.CAPTCHA2_NOJS) { - callback.onFallbackToV1CaptchaView(); - return; - } - - presenter.init(authentication.siteKey, authentication.baseUrl); - } - - @Override - public void reset() { - hardReset(); - } - - @Override - public void hardReset() { - CaptchaNoJsPresenterV2.RequestCaptchaInfoError captchaInfoError = presenter.requestCaptchaInfo(); - - switch (captchaInfoError) { - case Ok: - break; - case HoldYourHorses: - showToast(getContext().getString( - R.string.captcha_layout_v2_you_are_requesting_captcha_too_fast)); - break; - case AlreadyInProgress: - showToast(getContext().getString( - R.string.captcha_layout_v2_captcha_request_is_already_in_progress)); - break; - case AlreadyShutdown: - // do nothing - break; - } - } - - @Override - public void onCaptchaInfoParsed(CaptchaInfo captchaInfo) { - // called on a background thread - - AndroidUtils.runOnUiThread(() -> { - captchaVerifyButton.setEnabled(true); - renderCaptchaWindow(captchaInfo); - }); - } - - @Override - public void onVerificationDone(String verificationToken) { - // called on a background thread - - AndroidUtils.runOnUiThread(() -> { - captchaVerifyButton.setEnabled(true); - callback.onAuthenticationComplete(this, null, verificationToken); - }); - } - - @Override - public void onGoogleCookiesRefreshed() { - // called on a background thread - - AndroidUtils.runOnUiThread(() -> { - showToast("Google cookies successfully refreshed"); - - // refresh the captcha as well - reset(); - }); - } - - // Called when we could not get google cookies - @Override - public void onGetGoogleCookieError(boolean shouldFallback, Throwable error) { - // called on a background thread - - handleError(shouldFallback, error); - } - - // Called when we got response from re-captcha but could not parse some part of it - @Override - public void onCaptchaInfoParseError(Throwable error) { - // called on a background thread - - handleError(true, error); - } - - private void handleError(boolean shouldFallback, Throwable error) { - AndroidUtils.runOnUiThread(() -> { - Logger.e(TAG, "CaptchaV2 error", error); - - String message = error.getMessage(); - showToast(message); - - captchaVerifyButton.setEnabled(true); - - if (shouldFallback) { - callback.onFallbackToV1CaptchaView(); - } - }); - } - - private void showToast(String message) { - AndroidUtils.runOnUiThread(() -> { - Toast.makeText(context, message, Toast.LENGTH_LONG).show(); - }); - } - - @Override - public void onClick(View v) { - if (v == captchaVerifyButton) { - sendVerificationResponse(); - } else if (v == useOldCaptchaButton) { - callback.onFallbackToV1CaptchaView(); - } else if (v == reloadCaptchaButton) { - reset(); - } else if (v == refreshCookiesButton) { - presenter.refreshCookies(); - } - } - - private void renderCaptchaWindow(CaptchaInfo captchaInfo) { - try { - setCaptchaTitle(captchaInfo); - - captchaImagesGrid.setAdapter(null); - captchaImagesGrid.setAdapter(adapter); - - int columnsCount = 0; - int imageSize = captchaImagesGrid.getWidth(); - - switch (captchaInfo.getCaptchaType()) { - case Canonical: - columnsCount = 3; - imageSize /= columnsCount; - break; - case NoCanonical: - columnsCount = 2; - imageSize /= columnsCount; - break; - default: - throw new IllegalStateException("Unknown captcha type"); - } - - captchaImagesGrid.setNumColumns(columnsCount); - - adapter.setImageSize(imageSize); - adapter.setImages(captchaInfo.challengeImages); - - captchaVerifyButton.setEnabled(true); - } catch (Throwable error) { - if (callback != null) { - callback.onFallbackToV1CaptchaView(); - } - } - } - - private void setCaptchaTitle(CaptchaInfo captchaInfo) { - if (captchaInfo.getCaptchaTitle().hasBold()) { - SpannableString spannableString = new SpannableString(captchaInfo.getCaptchaTitle().getTitle()); - spannableString.setSpan( - new StyleSpan(Typeface.BOLD), - captchaInfo.getCaptchaTitle().getBoldStart(), - captchaInfo.getCaptchaTitle().getBoldEnd(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - - captchaChallengeTitle.setText(spannableString); - } else { - captchaChallengeTitle.setText(captchaInfo.getCaptchaTitle().getTitle()); - } - } - - private void sendVerificationResponse() { - List selectedIds = adapter.getCheckedImageIds(); - - try { - CaptchaNoJsPresenterV2.VerifyError verifyError = presenter.verify(selectedIds); - switch (verifyError) { - case Ok: - captchaVerifyButton.setEnabled(false); - break; - case NoImagesSelected: - showToast(getContext().getString(R.string.captcha_layout_v2_you_have_to_select_at_least_one_image)); - break; - case AlreadyInProgress: - showToast(getContext().getString(R.string.captcha_layout_v2_verification_already_in_progress)); - break; - case AlreadyShutdown: - // do nothing - break; - } - } catch (Throwable error) { - onCaptchaInfoParseError(error); - } - } - - public void onDestroy() { - adapter.onDestroy(); - presenter.onDestroy(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsPresenterV2.java b/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsPresenterV2.java deleted file mode 100644 index 256ca2c1b5..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsPresenterV2.java +++ /dev/null @@ -1,511 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.captcha.v2; - -import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.utils.BackgroundUtils; -import org.floens.chan.utils.Logger; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; - -import okhttp3.Headers; -import okhttp3.MediaType; -import okhttp3.MultipartBody; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; -import okhttp3.ResponseBody; - -public class CaptchaNoJsPresenterV2 { - private static final String TAG = "CaptchaNoJsPresenterV2"; - private static final String userAgentHeader = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"; - private static final String acceptHeader = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"; - private static final String acceptEncodingHeader = "deflate, br"; - private static final String acceptLanguageHeader = "en-US"; - private static final String recaptchaUrlBase = "https://www.google.com/recaptcha/api/fallback?k="; - private static final String googleBaseUrl = "https://www.google.com/"; - private static final String encoding = "UTF-8"; - private static final String mediaType = "application/x-www-form-urlencoded"; - private static final String recaptchaChallengeString = "reCAPTCHA challenge"; - private static final String verificationTokenString = "fbc-verification-token"; - private static final String setCookieHeaderName = "set-cookie"; - private static final int SUCCESS_STATUS_CODE = 200; - private static final long CAPTCHA_REQUEST_THROTTLE_MS = 3000L; - private static final long THREE_MONTHS = TimeUnit.DAYS.toMillis(90); - - // this cookie is taken from dashchan - private static final String defaultGoogleCookies = "NID=87=gkOAkg09AKnvJosKq82kgnDnHj8Om2pLskKhdna02msog8HkdHDlasDf"; - - // TODO: inject this in the future when https://github.com/Floens/Clover/pull/678 is merged - private final OkHttpClient okHttpClient = new OkHttpClient(); - - private final ExecutorService executor = Executors.newSingleThreadExecutor(); - private final CaptchaNoJsHtmlParser parser; - - @Nullable - private AuthenticationCallbacks callbacks; - @Nullable - private CaptchaInfo prevCaptchaInfo = null; - @NonNull - // either the default cookie or a real cookie - private volatile String googleCookie; - - private AtomicBoolean verificationInProgress = new AtomicBoolean(false); - private AtomicBoolean captchaRequestInProgress = new AtomicBoolean(false); - private AtomicBoolean refreshCookiesRequestInProgress = new AtomicBoolean(false); - private String siteKey; - private String baseUrl; - private long lastTimeCaptchaRequest = 0L; - - public CaptchaNoJsPresenterV2(@Nullable AuthenticationCallbacks callbacks, Context context) { - this.callbacks = callbacks; - this.parser = new CaptchaNoJsHtmlParser(context, okHttpClient); - - this.googleCookie = ChanSettings.googleCookie.get(); - } - - public void init(String siteKey, String baseUrl) { - this.siteKey = siteKey; - this.baseUrl = baseUrl; - } - - /** - * Send challenge solution back to the recaptcha - */ - public VerifyError verify( - List selectedIds - ) throws CaptchaNoJsV2Error { - if (!verificationInProgress.compareAndSet(false, true)) { - Logger.d(TAG, "Verify captcha request is already in progress"); - return VerifyError.AlreadyInProgress; - } - - if (executor.isShutdown()) { - verificationInProgress.set(false); - Logger.d(TAG, "Cannot verify, executor has been shut down"); - return VerifyError.AlreadyShutdown; - } - - try { - if (selectedIds.isEmpty()) { - verificationInProgress.set(false); - return VerifyError.NoImagesSelected; - } - - if (prevCaptchaInfo == null) { - throw new CaptchaNoJsV2Error("prevCaptchaInfo is null"); - } - - if (prevCaptchaInfo.getcParameter() == null) { - throw new CaptchaNoJsV2Error("C parameter is null"); - } - - if (googleCookie.isEmpty()) { - throw new IllegalStateException("Google cookies are not supposed to be empty here"); - } - - executor.submit(() -> { - try { - String recaptchaUrl = recaptchaUrlBase + siteKey; - RequestBody body = createResponseBody(prevCaptchaInfo, selectedIds); - - Logger.d(TAG, "Verify called. Current cookie = " + googleCookie); - - Request request = new Request.Builder() - .url(recaptchaUrl) - .post(body) - .header("Referer", recaptchaUrl) - .header("User-Agent", userAgentHeader) - .header("Accept", acceptHeader) - .header("Accept-Encoding", acceptEncodingHeader) - .header("Accept-Language", acceptLanguageHeader) - .header("Cookie", googleCookie) - .build(); - - try (Response response = okHttpClient.newCall(request).execute()) { - prevCaptchaInfo = handleGetRecaptchaResponse(response); - } finally { - verificationInProgress.set(false); - } - } catch (Throwable error) { - if (callbacks != null) { - try { - prevCaptchaInfo = null; - callbacks.onCaptchaInfoParseError(error); - } finally { - verificationInProgress.set(false); - } - } - } - }); - - return VerifyError.Ok; - } catch (Throwable error) { - verificationInProgress.set(false); - throw error; - } - } - - /** - * Manually refreshes the google cookie - * */ - public void refreshCookies() { - if (!refreshCookiesRequestInProgress.compareAndSet(false, true)) { - Logger.d(TAG, "Google cookie request is already in progress"); - return; - } - - if (executor.isShutdown()) { - refreshCookiesRequestInProgress.set(false); - Logger.d(TAG, "Cannot request google cookie, executor has been shut down"); - return; - } - - executor.submit(() -> { - try { - googleCookie = getGoogleCookies(true); - - if (callbacks != null) { - callbacks.onGoogleCookiesRefreshed(); - } - } catch (IOException e) { - if (callbacks != null) { - callbacks.onGetGoogleCookieError(false, e); - } - } finally { - refreshCookiesRequestInProgress.set(false); - } - }); - } - - /** - * Requests captcha data, parses it and then passes it to the render function - */ - public RequestCaptchaInfoError requestCaptchaInfo() { - if (!captchaRequestInProgress.compareAndSet(false, true)) { - Logger.d(TAG, "Request captcha request is already in progress"); - return RequestCaptchaInfoError.AlreadyInProgress; - } - - try { - // recaptcha may become very angry at you if your are fetching it too fast - if (System.currentTimeMillis() - lastTimeCaptchaRequest < CAPTCHA_REQUEST_THROTTLE_MS) { - captchaRequestInProgress.set(false); - Logger.d(TAG, "Requesting captcha info too fast"); - return RequestCaptchaInfoError.HoldYourHorses; - } - - if (executor.isShutdown()) { - captchaRequestInProgress.set(false); - Logger.d(TAG, "Cannot request captcha info, executor has been shut down"); - return RequestCaptchaInfoError.AlreadyShutdown; - } - - lastTimeCaptchaRequest = System.currentTimeMillis(); - - executor.submit(() -> { - try { - try { - googleCookie = getGoogleCookies(false); - } catch (Throwable error) { - if (callbacks != null) { - callbacks.onGetGoogleCookieError(true, error); - } - - throw error; - } - - try { - prevCaptchaInfo = getCaptchaInfo(); - } catch (Throwable error) { - if (callbacks != null) { - callbacks.onCaptchaInfoParseError(error); - } - - throw error; - } - } catch (Throwable error) { - Logger.e(TAG, "Error while executing captcha requests", error); - - prevCaptchaInfo = null; - googleCookie = defaultGoogleCookies; - } finally { - captchaRequestInProgress.set(false); - } - }); - - return RequestCaptchaInfoError.Ok; - } catch (Throwable error) { - captchaRequestInProgress.set(false); - - if (callbacks != null) { - callbacks.onCaptchaInfoParseError(error); - } - - // return ok here too because we already handled this exception in the callback - return RequestCaptchaInfoError.Ok; - } - } - - @NonNull - private String getGoogleCookies(boolean forced) throws IOException { - if (BackgroundUtils.isMainThread()) { - throw new RuntimeException("Must not be executed on the main thread"); - } - - if (!ChanSettings.useRealGoogleCookies.get()) { - Logger.d(TAG, "Google cookies request is disabled in the settings, using the default ones"); - return defaultGoogleCookies; - } - - boolean isItTimeToUpdateCookies = - ((System.currentTimeMillis() - ChanSettings.lastGoogleCookieUpdateTime.get()) > THREE_MONTHS); - - if (!forced && (!googleCookie.isEmpty() && !isItTimeToUpdateCookies)) { - Logger.d(TAG, "We already have google cookies"); - return googleCookie; - } - - Logger.d(TAG, "Time to update cookies: forced = " + forced + ", isCookieEmpty = " + - googleCookie.isEmpty() + ", last cookie expired = " + isItTimeToUpdateCookies); - - Request request = new Request.Builder() - .url(googleBaseUrl) - .header("User-Agent", userAgentHeader) - .header("Accept", acceptHeader) - .header("Accept-Encoding", acceptEncodingHeader) - .header("Accept-Language", acceptLanguageHeader) - .build(); - - try (Response response = okHttpClient.newCall(request).execute()) { - String newCookie = handleGetGoogleCookiesResponse(response); - if (!newCookie.equalsIgnoreCase(defaultGoogleCookies)) { - ChanSettings.googleCookie.set(newCookie); - ChanSettings.lastGoogleCookieUpdateTime.set(System.currentTimeMillis()); - - Logger.d(TAG, "Successfully refreshed google cookies, new cookie = " + newCookie); - } else { - Logger.d(TAG, "Could not successfully handle google cookie response, " + - "using the default google cookies until the next request"); - } - - return newCookie; - } - } - - @Nullable - private CaptchaInfo getCaptchaInfo() throws IOException { - if (BackgroundUtils.isMainThread()) { - throw new RuntimeException("Must not be executed on the main thread"); - } - - if (googleCookie.isEmpty()) { - throw new IllegalStateException("Google cookies are not supposed to be null here"); - } - - String recaptchaUrl = recaptchaUrlBase + siteKey; - - Request request = new Request.Builder() - .url(recaptchaUrl) - .header("Referer", baseUrl) - .header("User-Agent", userAgentHeader) - .header("Accept", acceptHeader) - .header("Accept-Encoding", acceptEncodingHeader) - .header("Accept-Language", acceptLanguageHeader) - .header("Cookie", googleCookie) - .build(); - - try (Response response = okHttpClient.newCall(request).execute()) { - return handleGetRecaptchaResponse(response); - } - } - - private RequestBody createResponseBody( - CaptchaInfo prevCaptchaInfo, - List selectedIds - ) throws UnsupportedEncodingException { - StringBuilder sb = new StringBuilder(); - - sb.append(URLEncoder.encode("c", encoding)); - sb.append("="); - sb.append(URLEncoder.encode(prevCaptchaInfo.getcParameter(), encoding)); - sb.append("&"); - - for (Integer selectedImageId : selectedIds) { - sb.append(URLEncoder.encode("response", encoding)); - sb.append("="); - sb.append(URLEncoder.encode(String.valueOf(selectedImageId), encoding)); - sb.append("&"); - } - - String resultBody; - - if (selectedIds.size() > 0) { - resultBody = sb.deleteCharAt(sb.length() - 1).toString(); - } else { - resultBody = sb.toString(); - } - - return MultipartBody.create( - MediaType.parse(mediaType), - resultBody); - } - - @NonNull - private String handleGetGoogleCookiesResponse(Response response) { - if (response.code() != SUCCESS_STATUS_CODE) { - Logger.w(TAG, "Get google cookies request returned bad status code = " + response.code()); - return defaultGoogleCookies; - } - - Headers headers = response.headers(); - - for (String headerName : headers.names()) { - if (headerName.equalsIgnoreCase(setCookieHeaderName)) { - String setCookieHeader = headers.get(headerName); - if (setCookieHeader != null) { - String[] split = setCookieHeader.split(";"); - for (String splitPart : split) { - if (splitPart.startsWith("NID")) { - return splitPart; - } - } - } - } - } - - Logger.d(TAG, "Could not find the NID cookie in the headers"); - return defaultGoogleCookies; - } - - @Nullable - private CaptchaInfo handleGetRecaptchaResponse(Response response) { - try { - if (response.code() != SUCCESS_STATUS_CODE) { - if (callbacks != null) { - callbacks.onCaptchaInfoParseError( - new IOException("Bad status code for captcha request = " + response.code())); - } - - return null; - } - - ResponseBody body = response.body(); - if (body == null) { - if (callbacks != null) { - callbacks.onCaptchaInfoParseError( - new IOException("Captcha response body is empty (null)")); - } - - return null; - } - - String bodyString = body.string(); - if (!bodyString.contains(recaptchaChallengeString)) { - throw new IllegalStateException("Response body does not contain \"reCAPTCHA challenge\" string"); - } - - if (bodyString.contains(verificationTokenString)) { - // got the token - String verificationToken = parser.parseVerificationToken(bodyString); - Logger.d(TAG, "Got the verification token"); - - if (callbacks != null) { - callbacks.onVerificationDone(verificationToken); - } - - return null; - } else { - // got the challenge - CaptchaInfo captchaInfo = parser.parseHtml(bodyString, siteKey); - Logger.d(TAG, "Got new challenge"); - - if (callbacks != null) { - callbacks.onCaptchaInfoParsed(captchaInfo); - } else { - // Return null when callbacks are null to reset prevCaptchaInfo so that we won't - // get stuck without captchaInfo and disabled buttons forever - return null; - } - - return captchaInfo; - } - } catch (Throwable e) { - Logger.e(TAG, "Error while trying to parse captcha html data", e); - - if (callbacks != null) { - callbacks.onCaptchaInfoParseError(e); - } - - return null; - } - } - - public void onDestroy() { - this.callbacks = null; - this.prevCaptchaInfo = null; - this.verificationInProgress.set(false); - this.captchaRequestInProgress.set(false); - - executor.shutdown(); - } - - public enum VerifyError { - Ok, - NoImagesSelected, - AlreadyInProgress, - AlreadyShutdown - } - - public enum RequestCaptchaInfoError { - Ok, - AlreadyInProgress, - HoldYourHorses, - AlreadyShutdown - } - - public interface AuthenticationCallbacks { - void onGetGoogleCookieError(boolean shouldFallback, Throwable error); - - void onGoogleCookiesRefreshed(); - - void onCaptchaInfoParsed(CaptchaInfo captchaInfo); - - void onCaptchaInfoParseError(Throwable error); - - void onVerificationDone(String verificationToken); - } - - public static class CaptchaNoJsV2Error extends Exception { - public CaptchaNoJsV2Error(String message) { - super(message); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsV2Adapter.java b/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsV2Adapter.java deleted file mode 100644 index 96efb51589..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsV2Adapter.java +++ /dev/null @@ -1,139 +0,0 @@ -package org.floens.chan.ui.captcha.v2; - -import android.content.Context; -import android.graphics.Bitmap; -import android.support.constraint.ConstraintLayout; -import android.support.v7.widget.AppCompatImageView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; - -import org.floens.chan.R; -import org.floens.chan.utils.AndroidUtils; - -import java.util.ArrayList; -import java.util.List; - -public class CaptchaNoJsV2Adapter extends BaseAdapter { - private static final int ANIMATION_DURATION = 50; - - private LayoutInflater inflater; - private int imageSize = 0; - - private List imageList = new ArrayList<>(); - - public CaptchaNoJsV2Adapter(Context context) { - this.inflater = LayoutInflater.from(context); - } - - public void setImages(List imageList) { - cleanUpImages(); - - for (Bitmap bitmap : imageList) { - this.imageList.add(new ImageChallengeInfo(bitmap, false)); - } - - notifyDataSetChanged(); - } - - @Override - public int getCount() { - return imageList.size(); - } - - @Override - public Object getItem(int position) { - return position; - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - if (convertView == null) { - convertView = inflater.inflate(R.layout.layout_captcha_challenge_image, parent, false); - - AppCompatImageView imageView = convertView.findViewById(R.id.captcha_challenge_image); - ConstraintLayout blueCheckmarkHolder = convertView.findViewById(R.id.captcha_challenge_blue_checkmark_holder); - - ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(imageSize, imageSize); - imageView.setLayoutParams(layoutParams); - - imageView.setOnClickListener((view) -> { - imageList.get(position).toggleChecked(); - boolean isChecked = imageList.get(position).isChecked; - - AndroidUtils.animateViewScale(imageView, isChecked, ANIMATION_DURATION); - blueCheckmarkHolder.setVisibility(isChecked ? View.VISIBLE : View.GONE); - }); - - if (position >= 0 && position <= imageList.size()) { - imageView.setImageBitmap(imageList.get(position).getBitmap()); - } - } - - return convertView; - } - - public List getCheckedImageIds() { - List selectedList = new ArrayList<>(); - - for (int i = 0; i < imageList.size(); i++) { - ImageChallengeInfo info = imageList.get(i); - - if (info.isChecked()) { - selectedList.add(i); - } - } - - return selectedList; - } - - public void setImageSize(int imageSize) { - this.imageSize = imageSize; - } - - public void onDestroy() { - cleanUpImages(); - } - - private void cleanUpImages() { - for (ImageChallengeInfo imageChallengeInfo : imageList) { - imageChallengeInfo.recycle(); - } - - imageList.clear(); - } - - public static class ImageChallengeInfo { - private Bitmap bitmap; - private boolean isChecked; - - public ImageChallengeInfo(Bitmap bitmap, boolean isChecked) { - this.bitmap = bitmap; - this.isChecked = isChecked; - } - - public Bitmap getBitmap() { - return bitmap; - } - - public boolean isChecked() { - return isChecked; - } - - public void toggleChecked() { - this.isChecked = !this.isChecked; - } - - public void recycle() { - if (bitmap != null && !bitmap.isRecycled()) { - bitmap.recycle(); - } - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/AlbumViewCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/AlbumViewCell.java deleted file mode 100644 index af61511c8c..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/AlbumViewCell.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.cell; - -import android.content.Context; -import android.util.AttributeSet; -import android.widget.FrameLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.ui.view.PostImageThumbnailView; -import org.floens.chan.ui.view.ThumbnailView; -import org.floens.chan.utils.AndroidUtils; - -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getDimen; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class AlbumViewCell extends FrameLayout { - private PostImage postImage; - private PostImageThumbnailView thumbnailView; - private TextView text; - - public AlbumViewCell(Context context) { - this(context, null); - } - - public AlbumViewCell(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public AlbumViewCell(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - thumbnailView = findViewById(R.id.thumbnail_view); - text = findViewById(R.id.text); - } - - public void setPostImage(PostImage postImage) { - this.postImage = postImage; - // Keep this the same as the normal thumbnails to improve performance - int thumbnailSize = getDimen(getContext(), R.dimen.cell_post_thumbnail_size); - thumbnailView.setPostImage(postImage, thumbnailSize, thumbnailSize); - - String filename = postImage.spoiler ? getString(R.string.image_spoiler_filename) : postImage.filename + "." + postImage.extension; - String details = postImage.extension.toUpperCase() + " " + postImage.imageWidth + "x" + postImage.imageHeight + - " " + AndroidUtils.getReadableFileSize(postImage.size, false); - text.setText(details); - } - - public PostImage getPostImage() { - return postImage; - } - - public ThumbnailView getThumbnailView() { - return thumbnailView; - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int heightMode = MeasureSpec.getMode(heightMeasureSpec); - if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY && (heightMode == MeasureSpec.UNSPECIFIED || heightMode == MeasureSpec.AT_MOST)) { - int width = MeasureSpec.getSize(widthMeasureSpec); - - int height = width + dp(32); - - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); - } else { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/CardPostCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/CardPostCell.java deleted file mode 100644 index 451118be41..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/CardPostCell.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.cell; - -import android.annotation.TargetApi; -import android.content.Context; -import android.os.Build; -import android.support.v7.widget.CardView; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.layout.FixedRatioLinearLayout; -import org.floens.chan.ui.text.FastTextView; -import org.floens.chan.ui.theme.Theme; -import org.floens.chan.ui.theme.ThemeHelper; -import org.floens.chan.ui.view.FloatingMenu; -import org.floens.chan.ui.view.FloatingMenuItem; -import org.floens.chan.ui.view.PostImageThumbnailView; -import org.floens.chan.ui.view.ThumbnailView; - -import java.util.ArrayList; -import java.util.List; - -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.setRoundItemBackground; - -public class CardPostCell extends CardView implements PostCellInterface, View.OnClickListener { - private static final int COMMENT_MAX_LENGTH = 200; - - private boolean bound; - private Theme theme; - private Post post; - private PostCellInterface.PostCellCallback callback; - private boolean compact = false; - - private FixedRatioLinearLayout content; - private PostImageThumbnailView thumbnailView; - private TextView title; - private FastTextView comment; - private TextView replies; - private ImageView options; - private View filterMatchColor; - - public CardPostCell(Context context) { - super(context); - } - - public CardPostCell(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public CardPostCell(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - content = findViewById(R.id.card_content); - content.setRatio(9f / 18f); - thumbnailView = findViewById(R.id.thumbnail); - thumbnailView.setRatio(16f / 13f); - thumbnailView.setOnClickListener(this); - title = findViewById(R.id.title); - comment = findViewById(R.id.comment); - replies = findViewById(R.id.replies); - options = findViewById(R.id.options); - setRoundItemBackground(options); - filterMatchColor = findViewById(R.id.filter_match_color); - - setOnClickListener(this); - - setCompact(compact); - - options.setOnClickListener(v -> { - List items = new ArrayList<>(); - List extraItems = new ArrayList<>(); - Object extraOption = callback.onPopulatePostOptions(post, items, extraItems); - showOptions(v, items, extraItems, extraOption); - }); - } - - private void showOptions(View anchor, List items, - List extraItems, - Object extraOption) { - FloatingMenu menu = new FloatingMenu(getContext(), anchor, items); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - if (item.getId() == extraOption) { - showOptions(anchor, extraItems, null, null); - } - - callback.onPostOptionClicked(post, item.getId()); - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - }); - menu.show(); - } - - @Override - public void onClick(View v) { - if (v == thumbnailView) { - callback.onThumbnailClicked(post, post.image(), thumbnailView); - } else if (v == this) { - callback.onPostClicked(post); - } - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - - if (post != null && bound) { - unbindPost(post); - } - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - - if (post != null && !bound) { - bindPost(theme, post); - } - } - - public void setPost(Theme theme, final Post post, PostCellInterface.PostCellCallback callback, - boolean selectable, boolean highlighted, boolean selected, int markedNo, - boolean showDivider, ChanSettings.PostViewMode postViewMode, - boolean compact) { - if (this.post == post) { - return; - } - - if (theme == null) { - theme = ThemeHelper.theme(); - } - - if (this.post != null && bound) { - unbindPost(this.post); - this.post = null; - } - - this.theme = theme; - this.post = post; - this.callback = callback; - - bindPost(theme, post); - - if (this.compact != compact) { - this.compact = compact; - setCompact(compact); - } - } - - public Post getPost() { - return post; - } - - public ThumbnailView getThumbnailView(PostImage postImage) { - return thumbnailView; - } - - @Override - @TargetApi(Build.VERSION_CODES.JELLY_BEAN) - public boolean hasOverlappingRendering() { - return false; - } - - private void bindPost(Theme theme, Post post) { - bound = true; - - if (post.image() != null && !ChanSettings.textOnly.get()) { - thumbnailView.setVisibility(View.VISIBLE); - thumbnailView.setPostImage(post.image(), thumbnailView.getWidth(), thumbnailView.getHeight()); - } else { - thumbnailView.setVisibility(View.GONE); - thumbnailView.setPostImage(null, 0, 0); - } - - if (post.filterHighlightedColor != 0) { - filterMatchColor.setVisibility(View.VISIBLE); - filterMatchColor.setBackgroundColor(post.filterHighlightedColor); - } else { - filterMatchColor.setVisibility(View.GONE); - } - - if (!TextUtils.isEmpty(post.subjectSpan)) { - title.setVisibility(View.VISIBLE); - title.setText(post.subjectSpan); - } else { - title.setVisibility(View.GONE); - title.setText(null); - } - - CharSequence commentText; - if (post.comment.length() > COMMENT_MAX_LENGTH) { - commentText = post.comment.subSequence(0, COMMENT_MAX_LENGTH); - } else { - commentText = post.comment; - } - - comment.setText(commentText); - comment.setTextColor(theme.textPrimary); - - replies.setText(getResources().getString(R.string.card_stats, post.getReplies(), post.getImagesCount())); - } - - private void unbindPost(Post post) { - bound = false; - } - - private void setCompact(boolean compact) { - int textReduction = compact ? -2 : 0; - int textSizeSp = Integer.parseInt(ChanSettings.fontSize.get()) + textReduction; - title.setTextSize(textSizeSp); - comment.setTextSize(textSizeSp); - replies.setTextSize(textSizeSp); - - int p = compact ? dp(3) : dp(8); - - // Same as the layout. - title.setPadding(p, p, p, 0); - comment.setPadding(p, p, p, 0); - replies.setPadding(p, p / 2, p, p); - - int optionsPadding = compact ? 0 : dp(5); - options.setPadding(0, optionsPadding, optionsPadding, 0); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java deleted file mode 100644 index 148f935a14..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java +++ /dev/null @@ -1,918 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.cell; - -import android.annotation.TargetApi; -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Rect; -import android.graphics.RectF; -import android.graphics.Typeface; -import android.os.Build; -import android.support.annotation.NonNull; -import android.text.Layout; -import android.text.Spannable; -import android.text.SpannableString; -import android.text.Spanned; -import android.text.TextPaint; -import android.text.TextUtils; -import android.text.format.DateUtils; -import android.text.method.LinkMovementMethod; -import android.text.style.BackgroundColorSpan; -import android.text.style.ClickableSpan; -import android.text.style.UnderlineSpan; -import android.util.AttributeSet; -import android.view.ActionMode; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.android.volley.VolleyError; -import com.android.volley.toolbox.ImageLoader; - -import org.floens.chan.R; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostHttpIcon; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.PostLinkable; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.helper.PostHelper; -import org.floens.chan.ui.span.AbsoluteSizeSpanHashed; -import org.floens.chan.ui.span.ForegroundColorSpanHashed; -import org.floens.chan.ui.text.FastTextView; -import org.floens.chan.ui.text.FastTextViewMovementMethod; -import org.floens.chan.ui.theme.Theme; -import org.floens.chan.ui.theme.ThemeHelper; -import org.floens.chan.ui.view.FloatingMenu; -import org.floens.chan.ui.view.FloatingMenuItem; -import org.floens.chan.ui.view.PostImageThumbnailView; -import org.floens.chan.ui.view.ThumbnailView; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.Time; - -import java.text.BreakIterator; -import java.util.ArrayList; -import java.util.List; - -import okhttp3.HttpUrl; - -import static android.text.TextUtils.isEmpty; -import static org.floens.chan.Chan.injector; -import static org.floens.chan.utils.AndroidUtils.ROBOTO_CONDENSED_REGULAR; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getString; -import static org.floens.chan.utils.AndroidUtils.setRoundItemBackground; -import static org.floens.chan.utils.AndroidUtils.sp; - -public class PostCell extends LinearLayout implements PostCellInterface { - private static final String TAG = "PostCell"; - private static final int COMMENT_MAX_LENGTH_BOARD = 350; - - private List thumbnailViews = new ArrayList<>(1); - - private RelativeLayout relativeLayoutContainer; - private FastTextView title; - private PostIcons icons; - private TextView comment; - private FastTextView replies; - private View repliesAdditionalArea; - private ImageView options; - private View divider; - private View filterMatchColor; - - private int detailsSizePx; - private int iconSizePx; - private int paddingPx; - private boolean threadMode; - private boolean ignoreNextOnClick; - - private boolean bound = false; - private Theme theme; - private Post post; - private PostCellCallback callback; - private boolean selectable; - private boolean highlighted; - private boolean selected; - private int markedNo; - private boolean showDivider; - - private OnClickListener selfClicked = new OnClickListener() { - @Override - public void onClick(View v) { - if (ignoreNextOnClick) { - ignoreNextOnClick = false; - } else { - callback.onPostClicked(post); - } - } - }; - private PostViewMovementMethod commentMovementMethod = new PostViewMovementMethod(); - private PostViewFastMovementMethod titleMovementMethod = new PostViewFastMovementMethod(); - - public PostCell(Context context) { - super(context); - } - - public PostCell(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public PostCell(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - relativeLayoutContainer = findViewById(R.id.relative_layout_container); - title = findViewById(R.id.title); - icons = findViewById(R.id.icons); - comment = findViewById(R.id.comment); - replies = findViewById(R.id.replies); - repliesAdditionalArea = findViewById(R.id.replies_additional_area); - options = findViewById(R.id.options); - divider = findViewById(R.id.divider); - filterMatchColor = findViewById(R.id.filter_match_color); - - int textSizeSp = Integer.parseInt(ChanSettings.fontSize.get()); - paddingPx = dp(textSizeSp - 6); - detailsSizePx = sp(textSizeSp - 4); - title.setTextSize(textSizeSp); - title.setPadding(paddingPx, paddingPx, dp(52), 0); - - iconSizePx = sp(textSizeSp - 3); - icons.setHeight(sp(textSizeSp)); - icons.setSpacing(dp(4)); - icons.setPadding(paddingPx, dp(4), paddingPx, 0); - - comment.setTextSize(textSizeSp); - comment.setPadding(paddingPx, paddingPx, paddingPx, 0); - - if (ChanSettings.fontCondensed.get()) { - comment.setTypeface(ROBOTO_CONDENSED_REGULAR); - } - - replies.setTextSize(textSizeSp); - replies.setPadding(paddingPx, 0, paddingPx, paddingPx); - - setRoundItemBackground(replies); - setRoundItemBackground(options); - - RelativeLayout.LayoutParams dividerParams = (RelativeLayout.LayoutParams) divider.getLayoutParams(); - dividerParams.leftMargin = paddingPx; - dividerParams.rightMargin = paddingPx; - divider.setLayoutParams(dividerParams); - - OnClickListener repliesClickListener = v -> { - if (replies.getVisibility() != VISIBLE || !threadMode) { - return; - } - int repliesFromSize; - synchronized (post.repliesFrom) { - repliesFromSize = post.repliesFrom.size(); - } - - if (repliesFromSize > 0) { - callback.onShowPostReplies(post); - } - }; - replies.setOnClickListener(repliesClickListener); - repliesAdditionalArea.setOnClickListener(repliesClickListener); - - options.setOnClickListener(v -> { - List items = new ArrayList<>(); - List extraItems = new ArrayList<>(); - Object extraOption = callback.onPopulatePostOptions(post, items, extraItems); - showOptions(v, items, extraItems, extraOption); - }); - - setOnClickListener(selfClicked); - } - - private void showOptions(View anchor, List items, - List extraItems, - Object extraOption) { - if (ThemeHelper.getInstance().getTheme().isLightTheme) { - options.setImageResource(R.drawable.ic_overflow_black); - } - - FloatingMenu menu = new FloatingMenu(getContext(), anchor, items); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - if (item.getId() == extraOption) { - showOptions(anchor, extraItems, null, null); - } - - callback.onPostOptionClicked(post, item.getId()); - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - options.setImageResource(R.drawable.ic_overflow); - } - }); - menu.show(); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - - if (post != null && bound) { - unbindPost(post); - } - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - - if (post != null && !bound) { - bindPost(theme, post); - } - } - - public void setPost(Theme theme, - final Post post, - PostCellInterface.PostCellCallback callback, - boolean selectable, - boolean highlighted, - boolean selected, - int markedNo, - boolean showDivider, - ChanSettings.PostViewMode postViewMode, - boolean compact) { - if (this.post == post && - this.selectable == selectable && - this.highlighted == highlighted && - this.selected == selected && - this.markedNo == markedNo && - this.showDivider == showDivider) { - return; - } - - if (theme == null) { - theme = ThemeHelper.theme(); - } - - if (this.post != null && bound) { - unbindPost(this.post); - this.post = null; - } - - this.theme = theme; - this.post = post; - this.callback = callback; - this.selectable = selectable; - this.highlighted = highlighted; - this.selected = selected; - this.markedNo = markedNo; - this.showDivider = showDivider; - - bindPost(theme, post); - } - - public Post getPost() { - return post; - } - - public ThumbnailView getThumbnailView(PostImage postImage) { - for (int i = 0; i < post.images.size(); i++) { - if (post.images.get(i).equalUrl(postImage)) { - return thumbnailViews.get(i); - } - } - - return null; - } - - @Override - @TargetApi(Build.VERSION_CODES.JELLY_BEAN) - public boolean hasOverlappingRendering() { - return false; - } - - private void bindPost(Theme theme, Post post) { - bound = true; - - threadMode = callback.getLoadable().isThreadMode(); - - setPostLinkableListener(post, true); - - replies.setClickable(threadMode); - repliesAdditionalArea.setClickable(threadMode); - - if (!threadMode) { - replies.setBackgroundResource(0); - } - - if (highlighted) { - setBackgroundColor(theme.highlightedColor); - } else if (post.isSavedReply) { - setBackgroundColor(theme.savedReplyColor); - } else if (selected) { - setBackgroundColor(theme.selectedColor); - } else if (threadMode) { - setBackgroundResource(0); - } else { - setBackgroundResource(R.drawable.item_background); - } - - if (post.filterHighlightedColor != 0) { - filterMatchColor.setVisibility(View.VISIBLE); - filterMatchColor.setBackgroundColor(post.filterHighlightedColor); - } else { - filterMatchColor.setVisibility(View.GONE); - } - - buildThumbnails(); - - List titleParts = new ArrayList<>(5); - - if (post.subjectSpan != null) { - titleParts.add(post.subjectSpan); - titleParts.add("\n"); - } - - titleParts.add(post.nameTripcodeIdCapcodeSpan); - - CharSequence time; - if (ChanSettings.postFullDate.get()) { - time = PostHelper.getLocalDate(post); - } else { - // Disabled for performance reasons - // Force the relative date to use the english locale, and restore the previous one. - /*Configuration c = Resources.getSystem().getConfiguration(); - Locale previousLocale = c.locale; - c.locale = Locale.ENGLISH; - Resources.getSystem().updateConfiguration(c, null); - time = DateUtils.getRelativeTimeSpanString(post.time * 1000L, Time.get(), DateUtils.SECOND_IN_MILLIS, 0); - c.locale = previousLocale; - Resources.getSystem().updateConfiguration(c, null);*/ - time = DateUtils.getRelativeTimeSpanString(post.time * 1000L, Time.get(), DateUtils.SECOND_IN_MILLIS, 0); - } - - String noText = "No." + post.no; - SpannableString date = new SpannableString(noText + " " + time); - date.setSpan(new ForegroundColorSpanHashed(theme.detailsColor), 0, date.length(), 0); - date.setSpan(new AbsoluteSizeSpanHashed(detailsSizePx), 0, date.length(), 0); - - boolean noClickable = ChanSettings.tapNoReply.get(); - if (noClickable) { - date.setSpan(new NoClickableSpan(), 0, noText.length(), 0); - } - - titleParts.add(date); - - if (!post.images.isEmpty()) { - for (int i = 0; i < post.images.size(); i++) { - PostImage image = post.images.get(i); - - boolean postFileName = ChanSettings.postFilename.get(); - if (postFileName) { - String filename = image.spoiler ? getString(R.string.image_spoiler_filename) : image.filename + "." + image.extension; - SpannableString fileInfo = new SpannableString("\n" + filename); - fileInfo.setSpan(new ForegroundColorSpanHashed(theme.detailsColor), 0, fileInfo.length(), 0); - fileInfo.setSpan(new AbsoluteSizeSpanHashed(detailsSizePx), 0, fileInfo.length(), 0); - fileInfo.setSpan(new UnderlineSpan(), 0, fileInfo.length(), 0); - titleParts.add(fileInfo); - } - - if (ChanSettings.postFileInfo.get()) { - SpannableString fileInfo = new SpannableString((postFileName ? " " : "\n") + image.extension.toUpperCase() + " " + - AndroidUtils.getReadableFileSize(image.size, false) + " " + - image.imageWidth + "x" + image.imageHeight); - fileInfo.setSpan(new ForegroundColorSpanHashed(theme.detailsColor), 0, fileInfo.length(), 0); - fileInfo.setSpan(new AbsoluteSizeSpanHashed(detailsSizePx), 0, fileInfo.length(), 0); - titleParts.add(fileInfo); - } - } - } - - title.setText(TextUtils.concat(titleParts.toArray(new CharSequence[titleParts.size()]))); - - icons.edit(); - icons.set(PostIcons.STICKY, post.isSticky()); - icons.set(PostIcons.CLOSED, post.isClosed()); - icons.set(PostIcons.DELETED, post.deleted.get()); - icons.set(PostIcons.ARCHIVED, post.isArchived()); - icons.set(PostIcons.HTTP_ICONS, post.httpIcons != null); - - if (post.httpIcons != null) { - icons.setHttpIcons(post.httpIcons, theme, iconSizePx); - } - - icons.apply(); - - CharSequence commentText; - if (!threadMode && post.comment.length() > COMMENT_MAX_LENGTH_BOARD) { - commentText = truncatePostComment(post, COMMENT_MAX_LENGTH_BOARD); - } else { - commentText = post.comment; - } - - comment.setVisibility(isEmpty(commentText) && post.images == null ? GONE : VISIBLE); - - if (threadMode) { - if (selectable) { - // Setting the text to selectable creates an editor, sets up a bunch of click - // handlers and sets a movementmethod. - // Required for the isTextSelectable check. - // We override the test and movementmethod settings. - comment.setTextIsSelectable(true); - - comment.setText(commentText, TextView.BufferType.SPANNABLE); - - comment.setCustomSelectionActionModeCallback(new ActionMode.Callback() { - private MenuItem quoteMenuItem; - - @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - quoteMenuItem = menu.add(Menu.NONE, R.id.post_selection_action_quote, - 0, R.string.post_quote); - return true; - } - - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return true; - } - - @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - if (item == quoteMenuItem) { - CharSequence selection = comment.getText().subSequence( - comment.getSelectionStart(), comment.getSelectionEnd()); - callback.onPostSelectionQuoted(post, selection); - mode.finish(); - return true; - } - - return false; - } - - @Override - public void onDestroyActionMode(ActionMode mode) { - } - }); - } else { - comment.setText(commentText); - } - - // Sets focusable to auto, clickable and longclickable to true. - comment.setMovementMethod(commentMovementMethod); - - // And this sets clickable to appropriate values again. - comment.setOnClickListener(selfClicked); - - if (noClickable) { - title.setMovementMethod(titleMovementMethod); - } - } else { -// comment.setTextIsSelectable(false); - - comment.setText(commentText); - - comment.setOnClickListener(null); - - comment.setClickable(false); - - // Sets focusable to auto, clickable and longclickable to false. - comment.setMovementMethod(null); - - title.setMovementMethod(null); - } - - int repliesFromSize; - synchronized (post.repliesFrom) { - repliesFromSize = post.repliesFrom.size(); - } - - if ((!threadMode && post.getReplies() > 0) || (repliesFromSize > 0)) { - replies.setVisibility(View.VISIBLE); - - int replyCount = threadMode ? repliesFromSize : post.getReplies(); - String text = getResources().getQuantityString(R.plurals.reply, replyCount, replyCount); - - if (!threadMode && post.getImagesCount() > 0) { - text += ", " + getResources().getQuantityString(R.plurals.image, post.getImagesCount(), post.getImagesCount()); - } - - replies.setText(text); - comment.setPadding(comment.getPaddingLeft(), comment.getPaddingTop(), comment.getPaddingRight(), 0); - replies.setPadding(replies.getPaddingLeft(), paddingPx, replies.getPaddingRight(), replies.getPaddingBottom()); - } else { - replies.setVisibility(View.GONE); - comment.setPadding(comment.getPaddingLeft(), comment.getPaddingTop(), comment.getPaddingRight(), paddingPx); - replies.setPadding(replies.getPaddingLeft(), 0, replies.getPaddingRight(), replies.getPaddingBottom()); - } - - divider.setVisibility(showDivider ? VISIBLE : GONE); - } - - private void buildThumbnails() { - for (PostImageThumbnailView thumbnailView : thumbnailViews) { - relativeLayoutContainer.removeView(thumbnailView); - } - thumbnailViews.clear(); - - // Places the thumbnails below each other. - // The placement is done using the RelativeLayout BELOW rule, with generated view ids. - if (!post.images.isEmpty() && !ChanSettings.textOnly.get()) { - int lastId = 0; - int generatedId = 1; - boolean first = true; - for (PostImage image : post.images) { - PostImageThumbnailView v = new PostImageThumbnailView(getContext()); - - // Set the correct id. - // The first thumbnail uses thumbnail_view so that the layout can offset to that. - final int idToSet = first ? R.id.thumbnail_view : generatedId++; - v.setId(idToSet); - final int size = getResources() - .getDimensionPixelSize(R.dimen.cell_post_thumbnail_size); - - RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(size, size); - p.alignWithParent = true; - - if (!first) { - p.addRule(RelativeLayout.BELOW, lastId); - } - - v.setPostImage(image, size, size); - v.setClickable(true); - v.setOnClickListener(v2 -> callback.onThumbnailClicked(post, image, v)); - v.setRounding(dp(2)); - - relativeLayoutContainer.addView(v, p); - thumbnailViews.add(v); - - lastId = idToSet; - first = false; - } - } - } - - private void unbindPost(Post post) { - bound = false; - - icons.cancelRequests(); - - setPostLinkableListener(post, false); - } - - private void setPostLinkableListener(Post post, boolean bind) { - if (post.comment instanceof Spanned) { - Spanned commentSpanned = (Spanned) post.comment; - PostLinkable[] linkables = commentSpanned.getSpans(0, commentSpanned.length(), PostLinkable.class); - for (PostLinkable linkable : linkables) { - linkable.setMarkedNo(bind ? markedNo : -1); - } - - if (!bind) { - if (commentSpanned instanceof Spannable) { - Spannable commentSpannable = (Spannable) commentSpanned; - commentSpannable.removeSpan(BACKGROUND_SPAN); - } - } - } - } - - private CharSequence truncatePostComment(Post post, int maxCommentLength) { - BreakIterator bi = BreakIterator.getWordInstance(); - bi.setText(post.comment.toString()); - int precedingBoundary = bi.following(maxCommentLength); - // Fallback to old method in case the comment does not have any spaces/individual words - CharSequence commentText = precedingBoundary > 0 ? post.comment.subSequence(0, precedingBoundary) : post.comment.subSequence(0, maxCommentLength); - return TextUtils.concat(commentText, "\u2026"); // append ellipsis - } - - private static BackgroundColorSpan BACKGROUND_SPAN = new BackgroundColorSpan(0x6633B5E5); - - /** - * A MovementMethod that searches for PostLinkables.
- * See {@link PostLinkable} for more information. - */ - private class PostViewMovementMethod extends LinkMovementMethod { - @Override - public boolean onTouchEvent(@NonNull TextView widget, @NonNull Spannable buffer, @NonNull MotionEvent event) { - int action = event.getActionMasked(); - - if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_DOWN) { - int x = (int) event.getX(); - int y = (int) event.getY(); - - x -= widget.getTotalPaddingLeft(); - y -= widget.getTotalPaddingTop(); - - x += widget.getScrollX(); - y += widget.getScrollY(); - - Layout layout = widget.getLayout(); - int line = layout.getLineForVertical(y); - int off = layout.getOffsetForHorizontal(line, x); - - ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class); - - if (link.length != 0) { - ClickableSpan clickableSpan = link[0]; - if (action == MotionEvent.ACTION_UP) { - ignoreNextOnClick = true; - clickableSpan.onClick(widget); - if (clickableSpan instanceof PostLinkable) { - callback.onPostLinkableClicked(post, (PostLinkable) clickableSpan); - } - buffer.removeSpan(BACKGROUND_SPAN); - } else if (action == MotionEvent.ACTION_DOWN && clickableSpan instanceof PostLinkable) { - buffer.setSpan(BACKGROUND_SPAN, buffer.getSpanStart(clickableSpan), buffer.getSpanEnd(clickableSpan), 0); - } else if (action == MotionEvent.ACTION_CANCEL) { - buffer.removeSpan(BACKGROUND_SPAN); - } - - return true; - } else { - buffer.removeSpan(BACKGROUND_SPAN); - } - } - - return true; - } - } - - /** - * A MovementMethod that searches for PostLinkables.
- * This version is for the {@link FastTextView}.
- * See {@link PostLinkable} for more information. - */ - private class PostViewFastMovementMethod implements FastTextViewMovementMethod { - @Override - public boolean onTouchEvent(@NonNull FastTextView widget, @NonNull Spanned buffer, @NonNull MotionEvent event) { - int action = event.getActionMasked(); - - if (action == MotionEvent.ACTION_UP) { - int x = (int) event.getX(); - int y = (int) event.getY(); - - x -= widget.getPaddingLeft(); - y -= widget.getPaddingTop(); - - x += widget.getScrollX(); - y += widget.getScrollY(); - - Layout layout = widget.getLayout(); - int line = layout.getLineForVertical(y); - int off = layout.getOffsetForHorizontal(line, x); - - ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class); - - if (link.length != 0) { - link[0].onClick(widget); - return true; - } - } - - return false; - } - } - - private class NoClickableSpan extends ClickableSpan { - @Override - public void onClick(View widget) { - callback.onPostNoClicked(post); - } - - @Override - public void updateDrawState(TextPaint ds) { - ds.setUnderlineText(false); - } - } - - private static Bitmap stickyIcon; - private static Bitmap closedIcon; - private static Bitmap trashIcon; - private static Bitmap archivedIcon; - - static { - Resources res = AndroidUtils.getRes(); - stickyIcon = BitmapFactory.decodeResource(res, R.drawable.sticky_icon); - closedIcon = BitmapFactory.decodeResource(res, R.drawable.closed_icon); - trashIcon = BitmapFactory.decodeResource(res, R.drawable.trash_icon); - archivedIcon = BitmapFactory.decodeResource(res, R.drawable.archived_icon); - } - - public static class PostIcons extends View { - private static final int STICKY = 0x1; - private static final int CLOSED = 0x2; - private static final int DELETED = 0x4; - private static final int ARCHIVED = 0x8; - private static final int HTTP_ICONS = 0x10; - - private int height; - private int spacing; - private int icons; - private int previousIcons; - private RectF drawRect = new RectF(); - - private Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private Rect textRect = new Rect(); - - private int httpIconTextColor; - private int httpIconTextSize; - - private List httpIcons; - - public PostIcons(Context context) { - this(context, null); - } - - public PostIcons(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public PostIcons(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - - textPaint.setTypeface(Typeface.create((String) null, Typeface.ITALIC)); - setVisibility(View.GONE); - } - - public void setHeight(int height) { - this.height = height; - } - - public void setSpacing(int spacing) { - this.spacing = spacing; - } - - public void edit() { - previousIcons = icons; - httpIcons = null; - } - - public void apply() { - if (previousIcons != icons) { - // Require a layout only if the height changed - if (previousIcons == 0 || icons == 0) { - setVisibility(icons == 0 ? View.GONE : View.VISIBLE); - requestLayout(); - } - - invalidate(); - } - } - - public void setHttpIcons(List icons, Theme theme, int size) { - httpIconTextColor = theme.detailsColor; - httpIconTextSize = size; - httpIcons = new ArrayList<>(icons.size()); - for (int i = 0; i < icons.size(); i++) { - PostHttpIcon icon = icons.get(i); - PostIconsHttpIcon j = new PostIconsHttpIcon(this, icon.name, icon.url); - httpIcons.add(j); - j.request(); - } - } - - public void cancelRequests() { - if (httpIcons != null) { - for (int i = 0; i < httpIcons.size(); i++) { - PostIconsHttpIcon httpIcon = httpIcons.get(i); - httpIcon.cancel(); - } - } - } - - public void set(int icon, boolean enable) { - if (enable) { - icons |= icon; - } else { - icons &= ~icon; - } - } - - public boolean get(int icon) { - return (icons & icon) == icon; - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int measureHeight = icons == 0 ? 0 : (height + getPaddingTop() + getPaddingBottom()); - - setMeasuredDimension(widthMeasureSpec, MeasureSpec.makeMeasureSpec(measureHeight, MeasureSpec.EXACTLY)); - } - - @Override - protected void onDraw(Canvas canvas) { - if (icons != 0) { - canvas.save(); - canvas.translate(getPaddingLeft(), getPaddingTop()); - - int offset = 0; - - if (get(STICKY)) { - offset += drawBitmap(canvas, stickyIcon, offset); - } - - if (get(CLOSED)) { - offset += drawBitmap(canvas, closedIcon, offset); - } - - if (get(DELETED)) { - offset += drawBitmap(canvas, trashIcon, offset); - } - - if (get(ARCHIVED)) { - offset += drawBitmap(canvas, archivedIcon, offset); - } - - if (get(HTTP_ICONS)) { - for (int i = 0; i < httpIcons.size(); i++) { - PostIconsHttpIcon httpIcon = httpIcons.get(i); - if (httpIcon.bitmap != null) { - offset += drawBitmap(canvas, httpIcon.bitmap, offset); - - textPaint.setColor(httpIconTextColor); - textPaint.setTextSize(httpIconTextSize); - textPaint.getTextBounds(httpIcon.name, 0, httpIcon.name.length(), textRect); - float y = height / 2f - textRect.exactCenterY(); - canvas.drawText(httpIcon.name, offset, y, textPaint); - offset += textRect.width() + spacing; - } - } - } - - canvas.restore(); - } - } - - private int drawBitmap(Canvas canvas, Bitmap bitmap, int offset) { - int width = (int) (((float) height / bitmap.getHeight()) * bitmap.getWidth()); - drawRect.set(offset, 0f, offset + width, height); - canvas.drawBitmap(bitmap, null, drawRect, null); - return width + spacing; - } - } - - private static class PostIconsHttpIcon implements ImageLoader.ImageListener { - private final PostIcons postIcons; - private final String name; - private final HttpUrl url; - private ImageLoader.ImageContainer request; - private Bitmap bitmap; - - private PostIconsHttpIcon(PostIcons postIcons, String name, HttpUrl url) { - this.postIcons = postIcons; - this.name = name; - this.url = url; - } - - private void request() { - request = injector().instance(ImageLoader.class).get(url.toString(), this); - } - - private void cancel() { - if (request != null) { - request.cancelRequest(); - request = null; - } - } - - @Override - public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) { - if (response.getBitmap() != null) { - bitmap = response.getBitmap(); - postIcons.invalidate(); - } - } - - @Override - public void onErrorResponse(VolleyError error) { - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCellInterface.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCellInterface.java deleted file mode 100644 index e1ad8b0963..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCellInterface.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.cell; - -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostLinkable; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.theme.Theme; -import org.floens.chan.ui.view.FloatingMenuItem; -import org.floens.chan.ui.view.ThumbnailView; - -import java.util.List; - -public interface PostCellInterface { - void setPost(Theme theme, - Post post, - PostCellCallback callback, - boolean selectable, - boolean highlighted, - boolean selected, - int markedNo, - boolean showDivider, - ChanSettings.PostViewMode postViewMode, - boolean compact); - - Post getPost(); - - ThumbnailView getThumbnailView(PostImage postImage); - - interface PostCellCallback { - Loadable getLoadable(); - - void onPostClicked(Post post); - - void onThumbnailClicked(Post post, PostImage image, ThumbnailView thumbnail); - - void onShowPostReplies(Post post); - - Object onPopulatePostOptions(Post post, List menu, - List extraMenu); - - void onPostOptionClicked(Post post, Object id); - - void onPostLinkableClicked(Post post, PostLinkable linkable); - - void onPostNoClicked(Post post); - - void onPostSelectionQuoted(Post post, CharSequence quoted); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostStubCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostStubCell.java deleted file mode 100644 index 06e35990d4..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostStubCell.java +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.cell; - -import android.annotation.TargetApi; -import android.content.Context; -import android.os.Build; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.view.View; -import android.widget.ImageView; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.theme.Theme; -import org.floens.chan.ui.theme.ThemeHelper; -import org.floens.chan.ui.view.FloatingMenu; -import org.floens.chan.ui.view.FloatingMenuItem; -import org.floens.chan.ui.view.ThumbnailView; - -import java.util.ArrayList; -import java.util.List; - -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.setRoundItemBackground; - -public class PostStubCell extends RelativeLayout implements PostCellInterface, View.OnClickListener { - private static final int TITLE_MAX_LENGTH = 100; - - private boolean bound; - private Theme theme; - private Post post; - private ChanSettings.PostViewMode postViewMode; - private boolean showDivider; - private PostCellInterface.PostCellCallback callback; - - private TextView title; - private ImageView options; - private View divider; - - public PostStubCell(Context context) { - super(context); - } - - public PostStubCell(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public PostStubCell(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - title = findViewById(R.id.title); - options = findViewById(R.id.options); - setRoundItemBackground(options); - divider = findViewById(R.id.divider); - - int textSizeSp = Integer.parseInt(ChanSettings.fontSize.get()); - title.setTextSize(textSizeSp); - - int paddingPx = dp(textSizeSp - 6); - title.setPadding(paddingPx, 0, 0, 0); - - RelativeLayout.LayoutParams dividerParams = (RelativeLayout.LayoutParams) divider.getLayoutParams(); - dividerParams.leftMargin = paddingPx; - dividerParams.rightMargin = paddingPx; - divider.setLayoutParams(dividerParams); - - setOnClickListener(this); - - options.setOnClickListener(v -> { - List items = new ArrayList<>(); - List extraItems = new ArrayList<>(); - Object extraOption = callback.onPopulatePostOptions(post, items, extraItems); - showOptions(v, items, extraItems, extraOption); - }); - } - - private void showOptions(View anchor, List items, - List extraItems, - Object extraOption) { - FloatingMenu menu = new FloatingMenu(getContext(), anchor, items); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - if (item.getId() == extraOption) { - showOptions(anchor, extraItems, null, null); - } - - callback.onPostOptionClicked(post, item.getId()); - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - }); - menu.show(); - } - - @Override - public void onClick(View v) { - if (v == this) { - callback.onPostClicked(post); - } - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - - if (post != null && bound) { - unbindPost(post); - } - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - - if (post != null && !bound) { - bindPost(theme, post); - } - } - - public void setPost(Theme theme, final Post post, PostCellInterface.PostCellCallback callback, - boolean selectable, boolean highlighted, boolean selected, int markedNo, - boolean showDivider, ChanSettings.PostViewMode postViewMode, - boolean compact) { - if (this.post == post) { - return; - } - - if (theme == null) { - theme = ThemeHelper.theme(); - } - - if (this.post != null && bound) { - unbindPost(this.post); - this.post = null; - } - - this.theme = theme; - this.post = post; - this.callback = callback; - this.postViewMode = postViewMode; - this.showDivider = showDivider; - - bindPost(theme, post); - } - - public Post getPost() { - return post; - } - - public ThumbnailView getThumbnailView(PostImage postImage) { - return null; - } - - @Override - @TargetApi(Build.VERSION_CODES.JELLY_BEAN) - public boolean hasOverlappingRendering() { - return false; - } - - private void bindPost(Theme theme, Post post) { - bound = true; - - if (!TextUtils.isEmpty(post.subjectSpan)) { - title.setText(post.subjectSpan); - } else { - CharSequence titleText; - if (post.comment.length() > TITLE_MAX_LENGTH) { - titleText = post.comment.subSequence(0, TITLE_MAX_LENGTH); - } else { - titleText = post.comment; - } - title.setText(titleText); - } - - divider.setVisibility(postViewMode == ChanSettings.PostViewMode.CARD ? GONE : - (showDivider ? VISIBLE : GONE)); - } - - private void unbindPost(Post post) { - bound = false; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/ThreadStatusCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/ThreadStatusCell.java deleted file mode 100644 index c681865bb5..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/ThreadStatusCell.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.cell; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Typeface; -import android.os.Handler; -import android.text.SpannableString; -import android.text.TextUtils; -import android.text.style.StyleSpan; -import android.util.AttributeSet; -import android.view.View; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.core.model.ChanThread; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.orm.Board; - -import static org.floens.chan.utils.AndroidUtils.ROBOTO_MEDIUM; - -public class ThreadStatusCell extends LinearLayout implements View.OnClickListener { - private static final int UPDATE_INTERVAL = 1000; - private static final int MESSAGE_INVALIDATE = 1; - - private Callback callback; - - private boolean running = false; - - private TextView text; - private String error; - private Handler handler = new Handler(msg -> { - if (msg.what == MESSAGE_INVALIDATE) { - if (running && update()) { - schedule(); - } - - return true; - } else { - return false; - } - }); - - public ThreadStatusCell(Context context, AttributeSet attrs) { - super(context, attrs); - - setBackgroundResource(R.drawable.item_background); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - text = findViewById(R.id.text); - text.setTypeface(ROBOTO_MEDIUM); - - setOnClickListener(this); - } - - public void setCallback(Callback callback) { - this.callback = callback; - } - - public void setError(String error) { - this.error = error; - if (error == null) { - schedule(); - } - } - - @SuppressLint("SetTextI18n") - public boolean update() { - if (error != null) { - text.setText(error + "\n" + getContext() - .getString(R.string.thread_refresh_bar_inactive)); - return false; - } else { - ChanThread chanThread = callback.getChanThread(); - if (chanThread == null) { - // Recyclerview not clearing immediately or view didn't receive - // onDetachedFromWindow. - return false; - } - - boolean update = false; - - String statusText = ""; - - if (chanThread.archived) { - statusText += getContext().getString(R.string.thread_archived); - } else if (chanThread.closed) { - statusText += getContext().getString(R.string.thread_closed); - } - - if (!chanThread.archived && !chanThread.closed) { - long time = callback.getTimeUntilLoadMore() / 1000L; - if (!callback.isWatching()) { - statusText += getContext().getString(R.string.thread_refresh_bar_inactive); - } else if (time <= 0) { - statusText += getContext().getString(R.string.thread_refresh_now); - } else { - statusText += getContext().getString(R.string.thread_refresh_countdown, time); - } - update = true; - } - - CharSequence finalText = statusText; - - Post op = chanThread.op; - Board board = op.board; - if (board != null) { - boolean hasReplies = op.getReplies() >= 0; - boolean hasImages = op.getImagesCount() >= 0; - if (hasReplies && hasImages) { - boolean hasBumpLimit = board.bumpLimit > 0; - boolean hasImageLimit = board.imageLimit > 0; - - SpannableString replies = new SpannableString(op.getReplies() + "R"); - if (hasBumpLimit && op.getReplies() >= board.bumpLimit) { - replies.setSpan(new StyleSpan(Typeface.ITALIC), 0, replies.length(), 0); - } - - SpannableString images = new SpannableString(op.getImagesCount() + "I"); - if (hasImageLimit && op.getImagesCount() >= board.imageLimit) { - images.setSpan(new StyleSpan(Typeface.ITALIC), 0, images.length(), 0); - } - - finalText = TextUtils.concat(statusText, "\n", replies, " / ", images); - - if (op.getUniqueIps() >= 0) { - String ips = op.getUniqueIps() + "P"; - finalText = TextUtils.concat(finalText, " / " + ips); - } - } - } - - text.setText(finalText); - - return update; - } - } - - private void schedule() { - running = true; - if (!handler.hasMessages(MESSAGE_INVALIDATE)) { - handler.sendMessageDelayed(handler.obtainMessage(MESSAGE_INVALIDATE), UPDATE_INTERVAL); - } - } - - private void unschedule() { - running = false; - handler.removeMessages(MESSAGE_INVALIDATE); - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - schedule(); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - unschedule(); - } - - @Override - public void onWindowFocusChanged(boolean hasWindowFocus) { - super.onWindowFocusChanged(hasWindowFocus); - if (hasWindowFocus) { - if (update()) { - schedule(); - } - } else { - unschedule(); - } - } - - @Override - public void onClick(View v) { - error = null; - callback.onListStatusClicked(); - update(); - } - - public interface Callback { - long getTimeUntilLoadMore(); - - boolean isWatching(); - - ChanThread getChanThread(); - - void onListStatusClicked(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/AlbumDownloadController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/AlbumDownloadController.java deleted file mode 100644 index 9b558029d3..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/AlbumDownloadController.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.drawable.Drawable; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.graphics.drawable.DrawableCompat; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.animation.DecelerateInterpolator; -import android.widget.ImageView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.saver.ImageSaveTask; -import org.floens.chan.core.saver.ImageSaver; -import org.floens.chan.ui.theme.ThemeHelper; -import org.floens.chan.ui.toolbar.ToolbarMenuItem; -import org.floens.chan.ui.view.GridRecyclerView; -import org.floens.chan.ui.view.PostImageThumbnailView; -import org.floens.chan.utils.RecyclerUtils; - -import java.util.ArrayList; -import java.util.List; - -import static org.floens.chan.ui.theme.ThemeHelper.theme; -import static org.floens.chan.utils.AndroidUtils.dp; - -public class AlbumDownloadController extends Controller implements View.OnClickListener { - private GridRecyclerView recyclerView; - private GridLayoutManager gridLayoutManager; - private FloatingActionButton download; - - private List items = new ArrayList<>(); - private Loadable loadable; - - private boolean allChecked = true; - private AlbumAdapter adapter; - private ImageSaver imageSaver; - - public AlbumDownloadController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - imageSaver = ImageSaver.getInstance(); - - view = inflateRes(R.layout.controller_album_download); - - updateTitle(); - - navigation.buildMenu() - .withItem(R.drawable.ic_select_all_white_24dp, this::onCheckAllClicked) - .build(); - - download = view.findViewById(R.id.download); - download.setOnClickListener(this); - theme().applyFabColor(download); - recyclerView = view.findViewById(R.id.recycler_view); - recyclerView.setHasFixedSize(true); - gridLayoutManager = new GridLayoutManager(context, 3); - recyclerView.setLayoutManager(gridLayoutManager); - recyclerView.setSpanWidth(dp(90)); - - adapter = new AlbumAdapter(); - recyclerView.setAdapter(adapter); - } - - @Override - public void onClick(View v) { - if (v == download) { - int checkCount = getCheckCount(); - if (checkCount == 0) { - new AlertDialog.Builder(context) - .setMessage(R.string.album_download_none_checked) - .setPositiveButton(R.string.ok, null) - .show(); - } else { - final String folderForAlbum = imageSaver.getSubFolder(loadable.title); - - String message = context.getString(R.string.album_download_confirm, - context.getResources().getQuantityString(R.plurals.image, checkCount, checkCount), - folderForAlbum); - - new AlertDialog.Builder(context) - .setMessage(message) - .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - List tasks = new ArrayList<>(items.size()); - for (AlbumDownloadItem item : items) { - if (item.checked) { - tasks.add(new ImageSaveTask(item.postImage)); - } - } - - if (imageSaver.startBundledTask(context, folderForAlbum, tasks)) { - navigationController.popController(); - } - } - }) - .show(); - } - } - } - - private void onCheckAllClicked(ToolbarMenuItem menuItem) { - RecyclerUtils.clearRecyclerCache(recyclerView); - - for (int i = 0, itemsSize = items.size(); i < itemsSize; i++) { - AlbumDownloadItem item = items.get(i); - if (item.checked == allChecked) { - item.checked = !allChecked; - AlbumDownloadCell cell = (AlbumDownloadCell) recyclerView.findViewHolderForAdapterPosition(i); - if (cell != null) { - setItemChecked(cell, item.checked, true); - } - } - } - updateAllChecked(); - updateTitle(); - } - - public void setPostImages(Loadable loadable, List postImages) { - this.loadable = loadable; - for (int i = 0, postImagesSize = postImages.size(); i < postImagesSize; i++) { - PostImage postImage = postImages.get(i); - items.add(new AlbumDownloadItem(postImage, true, i)); - } - } - - private void updateTitle() { - navigation.title = context.getString(R.string.album_download_screen, getCheckCount(), items.size()); - ((ToolbarNavigationController) navigationController).toolbar.updateTitle(navigation); - } - - private void updateAllChecked() { - allChecked = getCheckCount() == items.size(); - } - - private int getCheckCount() { - int checkCount = 0; - for (AlbumDownloadItem item : items) { - if (item.checked) { - checkCount++; - } - } - return checkCount; - } - - private static class AlbumDownloadItem { - public PostImage postImage; - public boolean checked; - public int id; - - public AlbumDownloadItem(PostImage postImage, boolean checked, int id) { - this.postImage = postImage; - this.checked = checked; - this.id = id; - } - } - - private class AlbumAdapter extends RecyclerView.Adapter { - public AlbumAdapter() { - setHasStableIds(true); - } - - @Override - public AlbumDownloadCell onCreateViewHolder(ViewGroup parent, int viewType) { - return new AlbumDownloadCell(LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_album_download, parent, false)); - } - - @Override - public void onBindViewHolder(AlbumDownloadCell holder, int position) { - AlbumDownloadItem item = items.get(position); - - holder.thumbnailView.setPostImage(item.postImage, dp(100), dp(100)); - setItemChecked(holder, item.checked, false); - } - - @Override - public int getItemCount() { - return items.size(); - } - - @Override - public long getItemId(int position) { - return items.get(position).id; - } - } - - private class AlbumDownloadCell extends RecyclerView.ViewHolder implements View.OnClickListener { - private ImageView checkbox; - private PostImageThumbnailView thumbnailView; - - public AlbumDownloadCell(View itemView) { - super(itemView); - itemView.getLayoutParams().height = recyclerView.getRealSpanWidth(); - checkbox = itemView.findViewById(R.id.checkbox); - thumbnailView = itemView.findViewById(R.id.thumbnail_view); - itemView.setOnClickListener(this); - } - - @Override - public void onClick(View v) { - int adapterPosition = getAdapterPosition(); - AlbumDownloadItem item = items.get(adapterPosition); - item.checked = !item.checked; - updateAllChecked(); - updateTitle(); - setItemChecked(this, item.checked, true); - } - } - - @SuppressWarnings("deprecation") - private void setItemChecked(AlbumDownloadCell cell, boolean checked, boolean animated) { - float scale = checked ? 0.75f : 1f; - if (animated) { - cell.thumbnailView.animate().scaleX(scale).scaleY(scale) - .setInterpolator(new DecelerateInterpolator(3f)).setDuration(500).start(); - } else { - cell.thumbnailView.setScaleX(scale); - cell.thumbnailView.setScaleY(scale); - } - - Drawable drawable = context.getResources().getDrawable(checked ? R.drawable.ic_check_circle_white_24dp : - R.drawable.ic_radio_button_unchecked_white_24dp); - - if (checked) { - Drawable wrapped = DrawableCompat.wrap(drawable); - DrawableCompat.setTint(wrapped, ThemeHelper.PrimaryColor.BLUE.color); - cell.checkbox.setImageDrawable(wrapped); - } else { - cell.checkbox.setImageDrawable(drawable); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/AlbumViewController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/AlbumViewController.java deleted file mode 100644 index ea44515434..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/AlbumViewController.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.ui.cell.AlbumViewCell; -import org.floens.chan.ui.toolbar.ToolbarMenuSubItem; -import org.floens.chan.ui.view.GridRecyclerView; -import org.floens.chan.ui.view.PostImageThumbnailView; -import org.floens.chan.ui.view.ThumbnailView; - -import java.util.List; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public class AlbumViewController extends Controller implements - ImageViewerController.ImageViewerCallback, - ImageViewerController.GoPostCallback { - private GridRecyclerView recyclerView; - private GridLayoutManager gridLayoutManager; - - private List postImages; - private int targetIndex = -1; - - private AlbumAdapter albumAdapter; - private Loadable loadable; - - public AlbumViewController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - // Navigation - navigation.buildMenu().withOverflow() - .withSubItem(R.string.action_download_album, this::downloadAlbumClicked) - .build().build(); - - // View setup - view = inflateRes(R.layout.controller_album_view); - recyclerView = view.findViewById(R.id.recycler_view); - recyclerView.setHasFixedSize(true); - gridLayoutManager = new GridLayoutManager(context, 3); - recyclerView.setLayoutManager(gridLayoutManager); - recyclerView.setHasFixedSize(true); - recyclerView.setSpanWidth(dp(120)); - recyclerView.setItemAnimator(null); - albumAdapter = new AlbumAdapter(); - recyclerView.setAdapter(albumAdapter); - recyclerView.scrollToPosition(targetIndex); - } - - public void setImages(Loadable loadable, List postImages, int index, String title) { - this.loadable = loadable; - this.postImages = postImages; - navigation.title = title; - navigation.subtitle = context.getResources().getQuantityString(R.plurals.image, postImages.size(), postImages.size()); - targetIndex = index; - } - - private void downloadAlbumClicked(ToolbarMenuSubItem item) { - AlbumDownloadController albumDownloadController = new AlbumDownloadController(context); - albumDownloadController.setPostImages(loadable, postImages); - navigationController.pushController(albumDownloadController); - } - - @Override - public ThumbnailView getPreviewImageTransitionView(ImageViewerController imageViewerController, PostImage postImage) { - ThumbnailView thumbnail = null; - for (int i = 0; i < recyclerView.getChildCount(); i++) { - View view = recyclerView.getChildAt(i); - if (view instanceof AlbumViewCell) { - AlbumViewCell cell = (AlbumViewCell) view; - if (postImage == cell.getPostImage()) { - thumbnail = cell.getThumbnailView(); - break; - } - } - } - return thumbnail; - } - - @Override - public void onPreviewCreate(ImageViewerController imageViewerController) { - } - - @Override - public void onPreviewDestroy(ImageViewerController imageViewerController) { - } - - @Override - public void scrollToImage(PostImage postImage) { - int index = postImages.indexOf(postImage); - recyclerView.smoothScrollToPosition(index); - } - - @Override - public ImageViewerController.ImageViewerCallback goToPost(PostImage postImage) { - ThreadController threadController = null; - - if (previousSiblingController instanceof ThreadController) { - threadController = (ThreadController) previousSiblingController; - } else if (previousSiblingController instanceof DoubleNavigationController) { - DoubleNavigationController doubleNav = (DoubleNavigationController) previousSiblingController; - if (doubleNav.getRightController() instanceof ThreadController) { - threadController = (ThreadController) doubleNav.getRightController(); - } - } - - if (threadController != null) { - threadController.selectPostImage(postImage); - navigationController.popController(false); - return threadController; - } else { - return null; - } - } - - private void openImage(AlbumItemCellHolder albumItemCellHolder, PostImage postImage) { - // Just ignore the showImages request when the image is not loaded - if (albumItemCellHolder.thumbnailView.getBitmap() != null) { - final ImageViewerNavigationController imageViewerNavigationController = new ImageViewerNavigationController(context); - int index = postImages.indexOf(postImage); - presentController(imageViewerNavigationController, false); - imageViewerNavigationController.showImages(postImages, index, loadable, this, this); - } - } - - private class AlbumAdapter extends RecyclerView.Adapter { - public AlbumAdapter() { - setHasStableIds(true); - } - - @Override - public AlbumItemCellHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new AlbumItemCellHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_album_view, parent, false)); - } - - @Override - public void onBindViewHolder(AlbumItemCellHolder holder, int position) { - PostImage postImage = postImages.get(position); - holder.cell.setPostImage(postImage); - } - - @Override - public int getItemCount() { - return postImages.size(); - } - - @Override - public long getItemId(int position) { - return position; - } - } - - private class AlbumItemCellHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - private AlbumViewCell cell; - private PostImageThumbnailView thumbnailView; - - public AlbumItemCellHolder(View itemView) { - super(itemView); - cell = (AlbumViewCell) itemView; - thumbnailView = itemView.findViewById(R.id.thumbnail_view); - thumbnailView.setOnClickListener(this); - } - - @Override - public void onClick(View v) { - int adapterPosition = getAdapterPosition(); - PostImage postImage = postImages.get(adapterPosition); - openImage(this, postImage); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/AppearanceSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/AppearanceSettingsController.java deleted file mode 100644 index 296c67f4c7..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/AppearanceSettingsController.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; - -import org.floens.chan.R; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.settings.BooleanSettingView; -import org.floens.chan.ui.settings.LinkSettingView; -import org.floens.chan.ui.settings.ListSettingView; -import org.floens.chan.ui.settings.SettingsController; -import org.floens.chan.ui.settings.SettingsGroup; - -import java.util.ArrayList; -import java.util.List; - -import static org.floens.chan.ui.theme.ThemeHelper.theme; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class AppearanceSettingsController extends SettingsController { - public AppearanceSettingsController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - navigation.setTitle(R.string.settings_screen_appearance); - - setupLayout(); - - populatePreferences(); - - buildPreferences(); - } - - private void populatePreferences() { - // Appearance group - { - SettingsGroup appearance = new SettingsGroup(R.string.settings_group_appearance); - - appearance.add(new LinkSettingView(this, - getString(R.string.setting_theme), theme().displayName, - v -> navigationController.pushController( - new ThemeSettingsController(context)))); - - groups.add(appearance); - } - - // Layout group - { - SettingsGroup layout = new SettingsGroup(R.string.settings_group_layout); - - setupLayoutModeSetting(layout); - - setupGridColumnsSetting(layout); - - requiresRestart.add(layout.add(new BooleanSettingView(this, - ChanSettings.neverHideToolbar, - R.string.setting_never_hide_toolbar, 0))); - - requiresRestart.add(layout.add(new BooleanSettingView(this, - ChanSettings.enableReplyFab, - R.string.setting_enable_reply_fab, - R.string.setting_enable_reply_fab_description))); - - groups.add(layout); - } - - // Post group - { - SettingsGroup post = new SettingsGroup(R.string.settings_group_post); - - setupFontSizeSetting(post); - - requiresUiRefresh.add(post.add(new BooleanSettingView(this, - ChanSettings.fontCondensed, - R.string.setting_font_condensed, - R.string.setting_font_condensed_description))); - - requiresUiRefresh.add(post.add(new BooleanSettingView(this, - ChanSettings.postFullDate, - R.string.setting_post_full_date, 0))); - - requiresUiRefresh.add(post.add(new BooleanSettingView(this, - ChanSettings.postFileInfo, - R.string.setting_post_file_info, 0))); - - requiresUiRefresh.add(post.add(new BooleanSettingView(this, - ChanSettings.postFilename, - R.string.setting_post_filename, 0))); - - groups.add(post); - } - } - - private void setupLayoutModeSetting(SettingsGroup layout) { - List layoutModes = new ArrayList<>(); - for (ChanSettings.LayoutMode mode : ChanSettings.LayoutMode.values()) { - int name = 0; - switch (mode) { - case AUTO: - name = R.string.setting_layout_mode_auto; - break; - case PHONE: - name = R.string.setting_layout_mode_phone; - break; - case SLIDE: - name = R.string.setting_layout_mode_slide; - break; - case SPLIT: - name = R.string.setting_layout_mode_split; - break; - } - layoutModes.add(new ListSettingView.Item<>(getString(name), mode)); - } - - requiresRestart.add(layout.add(new ListSettingView<>(this, - ChanSettings.layoutMode, - R.string.setting_layout_mode, layoutModes))); - } - - private void setupGridColumnsSetting(SettingsGroup layout) { - List gridColumns = new ArrayList<>(); - gridColumns.add(new ListSettingView.Item<>( - getString(R.string.setting_board_grid_span_count_default), 0)); - for (int columns = 2; columns <= 5; columns++) { - gridColumns.add(new ListSettingView.Item<>( - context.getString(R.string.setting_board_grid_span_count_item, columns), - columns)); - } - requiresUiRefresh.add(layout.add(new ListSettingView<>(this, - ChanSettings.boardGridSpanCount, - R.string.setting_board_grid_span_count, gridColumns))); - } - - private void setupFontSizeSetting(SettingsGroup post) { - List fontSizes = new ArrayList<>(); - for (int size = 10; size <= 19; size++) { - String name = size + (String.valueOf(size) - .equals(ChanSettings.fontSize.getDefault()) ? - " " + getString(R.string.setting_font_size_default) : - ""); - fontSizes.add(new ListSettingView.Item<>(name, String.valueOf(size))); - } - - requiresUiRefresh.add(post.add(new ListSettingView<>(this, - ChanSettings.fontSize, - R.string.setting_font_size, - fontSizes.toArray(new ListSettingView.Item[fontSizes.size()])))); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ArchiveController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ArchiveController.java deleted file mode 100644 index 9c97c786a2..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ArchiveController.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.model.Archive; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.presenter.ArchivePresenter; -import org.floens.chan.ui.helper.BoardHelper; -import org.floens.chan.ui.toolbar.ToolbarMenuItem; -import org.floens.chan.ui.view.CrossfadeView; -import org.floens.chan.ui.view.DividerItemDecoration; -import org.floens.chan.ui.view.FastScrollerHelper; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; - -public class ArchiveController extends Controller implements ArchivePresenter.Callback, - ToolbarNavigationController.ToolbarSearchCallback, - SwipeRefreshLayout.OnRefreshListener { - private static final int SEARCH_ID = 1; - - private CrossfadeView crossfadeView; - private SwipeRefreshLayout swipeRefreshLayout; - private RecyclerView archiveRecyclerview; - private View progress; - private View errorView; - - @Inject - private ArchivePresenter presenter; - - private ArchiveAdapter adapter; - - private Board board; - - public ArchiveController(Context context) { - super(context); - } - - public void setBoard(Board board) { - this.board = board; - } - - @Override - public void onCreate() { - super.onCreate(); - inject(this); - - // Inflate - view = inflateRes(R.layout.controller_archive); - - // Navigation - navigation.title = context.getString(R.string.archive_title, BoardHelper.getName(board)); - navigation.buildMenu() - .withItem(R.drawable.ic_search_white_24dp, this::searchClicked) - .build(); - - // View binding - crossfadeView = view.findViewById(R.id.crossfade); - swipeRefreshLayout = view.findViewById(R.id.swipe_refresh); - archiveRecyclerview = view.findViewById(R.id.recycler_view); - progress = view.findViewById(R.id.progress); - errorView = view.findViewById(R.id.error_text); - - // Adapters - adapter = new ArchiveAdapter(); - - // View setup - archiveRecyclerview.setLayoutManager(new LinearLayoutManager(context)); - archiveRecyclerview.setAdapter(adapter); - archiveRecyclerview.addItemDecoration( - new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); - FastScrollerHelper.create(archiveRecyclerview); -// archiveRecyclerview.setVerticalScrollBarEnabled(false); - crossfadeView.toggle(false, false); - swipeRefreshLayout.setOnRefreshListener(this); - - // Presenter - presenter.create(this, board); - } - - private void searchClicked(ToolbarMenuItem item) { - ((ToolbarNavigationController) navigationController).showSearch(); - } - - @Override - public void onSearchEntered(String entered) { - presenter.onSearchEntered(entered); - } - - @Override - public void onSearchVisibilityChanged(boolean visible) { - presenter.onSearchVisibility(visible); - } - - @Override - public void onRefresh() { - presenter.onRefresh(); - } - - @Override - public void setArchiveItems(List items) { - adapter.setArchiveItems(items); - } - - @Override - public void hideRefreshing() { - swipeRefreshLayout.setRefreshing(false); - } - - @Override - public void showList() { - crossfadeView.toggle(true, true); - } - - @Override - public void showError(boolean show) { - progress.setVisibility(show ? View.GONE : View.VISIBLE); - errorView.setVisibility(show ? View.VISIBLE : View.GONE); - } - - @Override - public void openThread(Loadable loadable) { - ViewThreadController threadController = new ViewThreadController(context); - threadController.setLoadable(loadable); - navigationController.pushController(threadController); - } - - private void onItemClicked(Archive.ArchiveItem item) { - presenter.onItemClicked(item); - } - - private class ArchiveAdapter extends RecyclerView.Adapter { - private List archiveItems = new ArrayList<>(); - - @Override - public int getItemCount() { - return archiveItems.size(); - } - - @Override - public ArchiveCell onCreateViewHolder(ViewGroup parent, int viewType) { - return new ArchiveCell(LayoutInflater.from(context) - .inflate(R.layout.cell_archive, parent, false)); - } - - @Override - public void onBindViewHolder(ArchiveCell holder, int position) { - Archive.ArchiveItem archiveItem = archiveItems.get(position); - - holder.item = archiveItem; - holder.text.setText(archiveItem.description); - } - - public void setArchiveItems(List archiveItems) { - this.archiveItems = archiveItems; - notifyDataSetChanged(); - } - } - - private class ArchiveCell extends RecyclerView.ViewHolder { - private TextView text; - private Archive.ArchiveItem item; - - public ArchiveCell(View itemView) { - super(itemView); - - itemView.setOnClickListener(v -> onItemClicked(item)); - - text = itemView.findViewById(R.id.text); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/BehaviourSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/BehaviourSettingsController.java deleted file mode 100644 index e2f83be1c4..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/BehaviourSettingsController.java +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.view.View; -import android.widget.Toast; - -import org.floens.chan.R; -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.helper.RefreshUIMessage; -import org.floens.chan.ui.settings.BooleanSettingView; -import org.floens.chan.ui.settings.IntegerSettingView; -import org.floens.chan.ui.settings.LinkSettingView; -import org.floens.chan.ui.settings.SettingView; -import org.floens.chan.ui.settings.SettingsController; -import org.floens.chan.ui.settings.SettingsGroup; -import org.floens.chan.ui.settings.StringSettingView; - -import de.greenrobot.event.EventBus; - -import static org.floens.chan.Chan.injector; - -public class BehaviourSettingsController extends SettingsController { - private SettingView forceEnglishSetting; - private SettingView useNewCaptchaWindow; - - public BehaviourSettingsController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - navigation.setTitle(R.string.settings_screen_behavior); - - setupLayout(); - rebuildPreferences(); - } - - @Override - public void onPreferenceChange(SettingView item) { - super.onPreferenceChange(item); - if (item == forceEnglishSetting) { - Toast.makeText(context, R.string.setting_force_english_locale_toggle_notice, - Toast.LENGTH_LONG).show(); - } else if (item == useNewCaptchaWindow) { - // when user disables the new captcha window also disable the usage of the google cookies - if (!ChanSettings.useNewCaptchaWindow.get()) { - ChanSettings.useRealGoogleCookies.set(false); - - // Reset the old google cookie - ChanSettings.googleCookie.set(""); - - // and cookie update time as well - ChanSettings.lastGoogleCookieUpdateTime.set(0L); - } - - rebuildPreferences(); - } - } - - private void rebuildPreferences() { - populatePreferences(); - buildPreferences(); - } - - private void populatePreferences() { - requiresUiRefresh.clear(); - groups.clear(); - requiresRestart.clear(); - - - // General group - { - SettingsGroup general = new SettingsGroup(R.string.settings_group_general); - - forceEnglishSetting = general.add(new BooleanSettingView(this, - ChanSettings.forceEnglishLocale, - R.string.setting_force_english_locale, - R.string.setting_force_english_locale_toggle_notice)); - - general.add(new BooleanSettingView(this, - ChanSettings.autoRefreshThread, - R.string.setting_auto_refresh_thread, 0)); - - general.add(new BooleanSettingView(this, ChanSettings.confirmExit, - R.string.setting_confirm_exit, 0)); - - requiresRestart.add(general.add(new BooleanSettingView(this, - ChanSettings.controllerSwipeable, - R.string.setting_controller_swipeable, 0))); - - setupClearThreadHidesSetting(general); - - groups.add(general); - } - - // Reply group - { - SettingsGroup reply = new SettingsGroup(R.string.settings_group_reply); - - reply.add(new BooleanSettingView(this, ChanSettings.postPinThread, - R.string.setting_post_pin, 0)); - - reply.add(new StringSettingView(this, ChanSettings.postDefaultName, - R.string.setting_post_default_name, R.string.setting_post_default_name)); - - groups.add(reply); - } - - // Post group - { - SettingsGroup post = new SettingsGroup(R.string.settings_group_post); - - requiresUiRefresh.add(post.add(new BooleanSettingView(this, - ChanSettings.textOnly, - R.string.setting_text_only, R.string.setting_text_only_description))); - - requiresUiRefresh.add(post.add(new BooleanSettingView(this, - ChanSettings.revealTextSpoilers, - R.string.settings_reveal_text_spoilers, - R.string.settings_reveal_text_spoilers_description))); - - requiresUiRefresh.add(post.add(new BooleanSettingView(this, - ChanSettings.anonymize, - R.string.setting_anonymize, 0))); - - requiresUiRefresh.add(post.add(new BooleanSettingView(this, - ChanSettings.anonymizeIds, - R.string.setting_anonymize_ids, 0))); - - requiresUiRefresh.add(post.add(new BooleanSettingView(this, - ChanSettings.showAnonymousName, - R.string.setting_show_anonymous_name, 0))); - - post.add(new BooleanSettingView(this, - ChanSettings.repliesButtonsBottom, - R.string.setting_buttons_bottom, 0)); - - post.add(new BooleanSettingView(this, - ChanSettings.volumeKeysScrolling, - R.string.setting_volume_key_scrolling, 0)); - - post.add(new BooleanSettingView(this, - ChanSettings.tapNoReply, - R.string.setting_tap_no_rely, 0)); - - post.add(new BooleanSettingView(this, - ChanSettings.openLinkConfirmation, - R.string.setting_open_link_confirmation, 0)); - post.add(new BooleanSettingView(this, - ChanSettings.openLinkBrowser, - R.string.setting_open_link_browser, 0)); - - groups.add(post); - } - - // Captcha group - { - SettingsGroup captcha = new SettingsGroup(R.string.settings_captcha_group); - - useNewCaptchaWindow = captcha.add(new BooleanSettingView(this, - ChanSettings.useNewCaptchaWindow, - R.string.settings_use_new_captcha_window, - 0)); - - if (ChanSettings.useNewCaptchaWindow.get()) { - captcha.add(new BooleanSettingView(this, - ChanSettings.useRealGoogleCookies, - R.string.settings_use_real_google_cookies, - R.string.settings_use_real_google_cookies_description)); - } - - groups.add(captcha); - } - - // Proxy group - { - SettingsGroup proxy = new SettingsGroup(R.string.settings_group_proxy); - - proxy.add(new BooleanSettingView(this, ChanSettings.proxyEnabled, - R.string.setting_proxy_enabled, 0)); - - proxy.add(new StringSettingView(this, ChanSettings.proxyAddress, - R.string.setting_proxy_address, R.string.setting_proxy_address)); - - proxy.add(new IntegerSettingView(this, ChanSettings.proxyPort, - R.string.setting_proxy_port, R.string.setting_proxy_port)); - - groups.add(proxy); - } - } - - private void setupClearThreadHidesSetting(SettingsGroup post) { - post.add(new LinkSettingView(this, R.string.setting_clear_thread_hides, 0, new View.OnClickListener() { - @Override - public void onClick(View v) { - // TODO: don't do this here. - DatabaseManager databaseManager = injector().instance(DatabaseManager.class); - databaseManager.runTask( - databaseManager.getDatabaseHideManager().clearAllThreadHides()); - Toast.makeText(context, R.string.setting_cleared_thread_hides, Toast.LENGTH_LONG) - .show(); - EventBus.getDefault().post(new RefreshUIMessage("clearhides")); - } - })); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/BoardSetupController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/BoardSetupController.java deleted file mode 100644 index 64c0859331..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/BoardSetupController.java +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.Snackbar; -import android.support.v4.graphics.drawable.DrawableCompat; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.helper.ItemTouchHelper; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowManager; -import android.widget.ImageView; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.presenter.BoardSetupPresenter; -import org.floens.chan.core.site.Site; -import org.floens.chan.ui.helper.BoardHelper; -import org.floens.chan.ui.layout.BoardAddLayout; -import org.floens.chan.ui.view.CrossfadeView; -import org.floens.chan.ui.view.DividerItemDecoration; - -import java.util.List; - -import javax.inject.Inject; - -import static android.text.TextUtils.isEmpty; -import static org.floens.chan.Chan.inject; -import static org.floens.chan.ui.theme.ThemeHelper.theme; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.fixSnackbarText; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; - -public class BoardSetupController extends Controller implements View.OnClickListener, BoardSetupPresenter.Callback { - private static final int DONE_ID = 1; - - @Inject - BoardSetupPresenter presenter; - - private CrossfadeView crossfadeView; - private RecyclerView savedBoardsRecycler; - private FloatingActionButton add; - - private SavedBoardsAdapter savedAdapter; - private ItemTouchHelper itemTouchHelper; - - private Site site; - - private ItemTouchHelper.SimpleCallback touchHelperCallback = new ItemTouchHelper.SimpleCallback( - ItemTouchHelper.UP | ItemTouchHelper.DOWN, - ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT - ) { - @Override - public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { - int from = viewHolder.getAdapterPosition(); - int to = target.getAdapterPosition(); - - if (from == RecyclerView.NO_POSITION || to == RecyclerView.NO_POSITION) { - return false; - } - - presenter.move(from, to); - - return true; - } - - @Override - public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { - int position = viewHolder.getAdapterPosition(); - - presenter.remove(position); - } - }; - - public BoardSetupController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - inject(this); - - // Inflate - view = inflateRes(R.layout.controller_board_setup); - - // Navigation - navigation.title = context.getString(R.string.setup_board_title, site.name()); - navigation.swipeable = false; - - // View binding - crossfadeView = view.findViewById(R.id.crossfade); - savedBoardsRecycler = view.findViewById(R.id.boards_recycler); - add = view.findViewById(R.id.add); - - // Adapters - savedAdapter = new SavedBoardsAdapter(); - - // View setup - savedBoardsRecycler.setLayoutManager(new LinearLayoutManager(context)); - savedBoardsRecycler.setAdapter(savedAdapter); - savedBoardsRecycler.addItemDecoration( - new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); - itemTouchHelper = new ItemTouchHelper(touchHelperCallback); - itemTouchHelper.attachToRecyclerView(savedBoardsRecycler); - add.setOnClickListener(this); - theme().applyFabColor(add); - crossfadeView.toggle(false, false); - - // Presenter - presenter.create(this, site); - } - - @Override - public void onDestroy() { - super.onDestroy(); - presenter.destroy(); - } - - public void setSite(Site site) { - this.site = site; - } - - @Override - public void onClick(View v) { - if (v == add) { - presenter.addClicked(); - } - } - - @Override - public void showAddDialog() { - @SuppressLint("InflateParams") final BoardAddLayout boardAddLayout = - (BoardAddLayout) LayoutInflater.from(context) - .inflate(R.layout.layout_board_add, null); - - boardAddLayout.setPresenter(presenter); - - AlertDialog dialog = new AlertDialog.Builder(context) - .setView(boardAddLayout) -// .setTitle(R.string.setup_board_add) - .setPositiveButton(R.string.add, (dialog1, which) -> boardAddLayout.onPositiveClicked()) - .setNegativeButton(R.string.cancel, null) - .create(); - - boardAddLayout.setDialog(dialog); - - Window window = dialog.getWindow(); - assert window != null; - window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); - dialog.show(); - } - - @Override - public void setSavedBoards(List savedBoards) { - savedAdapter.setSavedBoards(savedBoards); - crossfadeView.toggle(!savedBoards.isEmpty(), true); - } - - @Override - public void showRemovedSnackbar(final Board board) { - Snackbar snackbar = Snackbar.make(view, - context.getString(R.string.setup_board_removed, BoardHelper.getName(board)), - Snackbar.LENGTH_LONG); - fixSnackbarText(context, snackbar); - - snackbar.setAction(R.string.undo, v -> presenter.undoRemoveBoard(board)); - snackbar.show(); - } - - @Override - public void boardsWereAdded(int count) { - savedBoardsRecycler.smoothScrollToPosition(savedAdapter.getItemCount()); - - String boardText = context.getResources().getQuantityString(R.plurals.board, count, count); - String text = context.getString(R.string.setup_board_added, boardText); - - Snackbar snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG); - fixSnackbarText(context, snackbar); - snackbar.show(); - } - - private class SavedBoardsAdapter extends RecyclerView.Adapter { - private List savedBoards; - - public SavedBoardsAdapter() { - setHasStableIds(true); - } - - private void setSavedBoards(List savedBoards) { - this.savedBoards = savedBoards; - notifyDataSetChanged(); - } - - @Override - public long getItemId(int position) { - return savedBoards.get(position).id; - } - - @Override - public SavedBoardCell onCreateViewHolder(ViewGroup parent, int viewType) { - return new SavedBoardCell( - LayoutInflater.from(context) - .inflate(R.layout.cell_board, parent, false)); - } - - @Override - public void onBindViewHolder(SavedBoardCell holder, int position) { - Board savedBoard = savedBoards.get(position); - holder.text.setText(BoardHelper.getName(savedBoard)); - String description = BoardHelper.getDescription(savedBoard); - boolean enableDescription = !isEmpty(description); - if (enableDescription) { - holder.description.setVisibility(View.VISIBLE); - holder.description.setText(description); - } else { - holder.description.setVisibility(View.GONE); - } - - // Fill the height for the title if there is no description, otherwise make room - // for it. - ViewGroup.LayoutParams p = holder.text.getLayoutParams(); - int newHeight = enableDescription ? dp(28) : dp(56); - if (newHeight != p.height) { - p.height = newHeight; - holder.text.setLayoutParams(p); - } - holder.text.setGravity(Gravity.CENTER_VERTICAL); - holder.text.setPadding(dp(8), dp(8), dp(8), enableDescription ? 0 : dp(8)); - } - - @Override - public int getItemCount() { - return savedBoards.size(); - } - } - - private class SavedBoardCell extends RecyclerView.ViewHolder { - private TextView text; - private TextView description; - private ImageView reorder; - - public SavedBoardCell(View itemView) { - super(itemView); - - text = itemView.findViewById(R.id.text); - description = itemView.findViewById(R.id.description); - reorder = itemView.findViewById(R.id.reorder); - - Drawable drawable = DrawableCompat.wrap(context.getResources().getDrawable(R.drawable.ic_reorder_black_24dp)).mutate(); - DrawableCompat.setTint(drawable, getAttrColor(context, R.attr.text_color_hint)); - reorder.setImageDrawable(drawable); - - View.OnTouchListener l = new View.OnTouchListener() { - @SuppressLint("ClickableViewAccessibility") - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { - itemTouchHelper.startDrag(SavedBoardCell.this); - } - return false; - } - }; - reorder.setOnTouchListener(l); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java deleted file mode 100644 index d1ef97c424..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java +++ /dev/null @@ -1,420 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.app.Activity; -import android.content.Context; -import android.view.View; -import android.view.animation.AccelerateInterpolator; -import android.view.animation.DecelerateInterpolator; - -import org.floens.chan.R; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.model.orm.Pin; -import org.floens.chan.core.presenter.BrowsePresenter; -import org.floens.chan.core.presenter.ThreadPresenter; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.core.site.Site; -import org.floens.chan.ui.adapter.PostsFilter; -import org.floens.chan.ui.helper.BoardHelper; -import org.floens.chan.ui.helper.HintPopup; -import org.floens.chan.ui.layout.BrowseBoardsFloatingMenu; -import org.floens.chan.ui.layout.ThreadLayout; -import org.floens.chan.ui.toolbar.NavigationItem; -import org.floens.chan.ui.toolbar.ToolbarMenu; -import org.floens.chan.ui.toolbar.ToolbarMenuItem; -import org.floens.chan.ui.toolbar.ToolbarMenuSubItem; -import org.floens.chan.ui.view.FloatingMenu; -import org.floens.chan.ui.view.FloatingMenuItem; -import org.floens.chan.utils.AndroidUtils; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class BrowseController extends ThreadController implements - ThreadLayout.ThreadLayoutCallback, - BrowsePresenter.Callback, - BrowseBoardsFloatingMenu.ClickCallback { - private static final int VIEW_MODE_ID = 1; - private static final int ARCHIVE_ID = 2; - - @Inject - BrowsePresenter presenter; - - private ChanSettings.PostViewMode postViewMode; - private PostsFilter.Order order; - - public BrowseController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - inject(this); - - // Initialization - postViewMode = ChanSettings.boardViewMode.get(); - order = PostsFilter.Order.find(ChanSettings.boardOrder.get()); - threadLayout.setPostViewMode(postViewMode); - threadLayout.getPresenter().setOrder(order); - - // Navigation - initNavigation(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - presenter.destroy(); - } - - @Override - public void showSitesNotSetup() { - super.showSitesNotSetup(); - - HintPopup hint = HintPopup.show(context, getToolbar(), R.string.thread_empty_setup_hint); - hint.alignLeft(); - hint.wiggle(); - } - - public void setBoard(Board board) { - presenter.setBoard(board); - } - - public void loadWithDefaultBoard() { - presenter.loadWithDefaultBoard(); - } - - private void initNavigation() { - // Navigation item - navigation.hasDrawer = true; - - setupMiddleNavigation(); - - // Toolbar menu - navigation.hasBack = false; - - NavigationItem.MenuOverflowBuilder overflowBuilder = navigation.buildMenu() - .withItem(R.drawable.ic_search_white_24dp, this::searchClicked) - .withItem(R.drawable.ic_refresh_white_24dp, this::reloadClicked) - .withOverflow(); - - if (!ChanSettings.enableReplyFab.get()) { - overflowBuilder.withSubItem(R.string.action_reply, this::replyClicked); - } - - overflowBuilder.withSubItem(VIEW_MODE_ID, - postViewMode == ChanSettings.PostViewMode.LIST ? - R.string.action_switch_catalog : R.string.action_switch_board, - this::viewModeClicked); - - overflowBuilder - .withSubItem(ARCHIVE_ID, R.string.thread_view_archive, this::archiveClicked) - .withSubItem(R.string.action_sort, this::orderClicked) - .withSubItem(R.string.action_open_browser, this::openBrowserClicked) - .withSubItem(R.string.action_share, this::shareClicked) - .build() - .build(); - - // Presenter - presenter.create(this); - } - - private void searchClicked(ToolbarMenuItem item) { - ThreadPresenter presenter = threadLayout.getPresenter(); - if (presenter.isBound()) { - View refreshView = item.getView(); - refreshView.setScaleX(1f); - refreshView.setScaleY(1f); - refreshView.animate() - .scaleX(10f) - .scaleY(10f) - .setDuration(500) - .setInterpolator(new AccelerateInterpolator(2f)) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - refreshView.setScaleX(1f); - refreshView.setScaleY(1f); - } - }); - - ((ToolbarNavigationController) navigationController).showSearch(); - } - } - - private void reloadClicked(ToolbarMenuItem item) { - ThreadPresenter presenter = threadLayout.getPresenter(); - if (presenter.isBound()) { - presenter.requestData(); - - // Give the rotation menu item view a spin. - View refreshView = item.getView(); - refreshView.setRotation(0f); - refreshView.animate() - .rotation(360f) - .setDuration(500) - .setInterpolator(new DecelerateInterpolator(2f)); - } - } - - private void replyClicked(ToolbarMenuSubItem item) { - threadLayout.openReply(true); - } - - private void viewModeClicked(ToolbarMenuSubItem item) { - handleViewMode(item); - } - - private void archiveClicked(ToolbarMenuSubItem item) { - openArchive(); - } - - private void orderClicked(ToolbarMenuSubItem item) { - handleSorting(threadLayout.getPresenter()); - } - - private void openBrowserClicked(ToolbarMenuSubItem item) { - handleShareAndOpenInBrowser(threadLayout.getPresenter(), false); - } - - private void shareClicked(ToolbarMenuSubItem item) { - handleShareAndOpenInBrowser(threadLayout.getPresenter(), true); - } - - private void setupMiddleNavigation() { - navigation.setMiddleMenu(anchor -> { - BrowseBoardsFloatingMenu boardsFloatingMenu = new BrowseBoardsFloatingMenu(context); - boardsFloatingMenu.show(view, anchor, BrowseController.this, - presenter.currentBoard()); - }); - } - - @Override - public void onBoardClicked(Board item) { - presenter.onBoardsFloatingMenuBoardClicked(item); - } - - @Override - public void onSiteClicked(Site site) { - presenter.onBoardsFloatingMenuSiteClicked(site); - } - - private void openArchive() { - Board board = presenter.currentBoard(); - if (board == null) { - return; - } - - ArchiveController archiveController = new ArchiveController(context); - archiveController.setBoard(board); - - if (doubleNavigationController != null) { - doubleNavigationController.pushController(archiveController); - } else { - navigationController.pushController(archiveController); - } - } - - private void handleShareAndOpenInBrowser(ThreadPresenter presenter, boolean share) { - if (presenter.isBound()) { - Loadable loadable = presenter.getLoadable(); - String link = loadable.site.resolvable().desktopUrl(loadable, null); - - if (share) { - AndroidUtils.shareLink(link); - } else { - AndroidUtils.openLinkInBrowser((Activity) context, link); - } - } - } - - private void handleViewMode(ToolbarMenuSubItem item) { - if (postViewMode == ChanSettings.PostViewMode.LIST) { - postViewMode = ChanSettings.PostViewMode.CARD; - } else { - postViewMode = ChanSettings.PostViewMode.LIST; - } - - ChanSettings.boardViewMode.set(postViewMode); - - int viewModeText = postViewMode == ChanSettings.PostViewMode.LIST ? - R.string.action_switch_catalog : R.string.action_switch_board; - item.text = context.getString(viewModeText); - - threadLayout.setPostViewMode(postViewMode); - } - - private void handleSorting(final ThreadPresenter presenter) { - List items = new ArrayList<>(); - for (PostsFilter.Order order : PostsFilter.Order.values()) { - int nameId = 0; - switch (order) { - case BUMP: - nameId = R.string.order_bump; - break; - case REPLY: - nameId = R.string.order_reply; - break; - case IMAGE: - nameId = R.string.order_image; - break; - case NEWEST: - nameId = R.string.order_newest; - break; - case OLDEST: - nameId = R.string.order_oldest; - break; - case MODIFIED: - nameId = R.string.order_modified; - break; - } - - String name = getString(nameId); - if (order == this.order) { - name = "\u2713 " + name; // Checkmark - } - - items.add(new FloatingMenuItem(order, name)); - } - - ToolbarMenuItem overflow = navigation.findItem(ToolbarMenu.OVERFLOW_ID); - FloatingMenu menu = new FloatingMenu(context, overflow.getView(), items); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - PostsFilter.Order order = (PostsFilter.Order) item.getId(); - ChanSettings.boardOrder.set(order.name); - BrowseController.this.order = order; - presenter.setOrder(order); - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - }); - menu.show(); - } - - @Override - public void loadBoard(Loadable loadable) { - String name = BoardHelper.getName(loadable.board); - loadable.title = name; - navigation.title = name; - - ThreadPresenter presenter = threadLayout.getPresenter(); - presenter.unbindLoadable(); - presenter.bindLoadable(loadable); - presenter.requestData(); - - ((ToolbarNavigationController) navigationController).toolbar.updateTitle(navigation); - } - - @Override - public void loadSiteSetup(Site site) { - SiteSetupController siteSetupController = new SiteSetupController(context); - siteSetupController.setSite(site); - - if (doubleNavigationController != null) { - doubleNavigationController.pushController(siteSetupController); - } else { - navigationController.pushController(siteSetupController); - } - } - - @Override - public void showArchiveOption(boolean show) { - ToolbarMenuSubItem archive = navigation.findSubItem(ARCHIVE_ID); - archive.enabled = show; - } - - @Override - public void openPin(Pin pin) { - showThread(pin.loadable); - } - - @Override - public void showThread(Loadable threadLoadable) { - showThread(threadLoadable, true); - } - - // Creates or updates the target ThreadViewController - // This controller can be in various places depending on the layout - // We dynamically search for it - public void showThread(Loadable threadLoadable, boolean animated) { - // The target ThreadViewController is in a split nav - // (BrowseController -> ToolbarNavigationController -> SplitNavigationController) - SplitNavigationController splitNav = null; - - // The target ThreadViewController is in a slide nav - // (BrowseController -> SlideController -> ToolbarNavigationController) - ThreadSlideController slideNav = null; - - if (doubleNavigationController instanceof SplitNavigationController) { - splitNav = (SplitNavigationController) doubleNavigationController; - } - - if (doubleNavigationController instanceof ThreadSlideController) { - slideNav = (ThreadSlideController) doubleNavigationController; - } - - if (splitNav != null) { - // Create a threadview inside a toolbarnav in the right part of the split layout - if (splitNav.getRightController() instanceof StyledToolbarNavigationController) { - StyledToolbarNavigationController navigationController = (StyledToolbarNavigationController) splitNav.getRightController(); - - if (navigationController.getTop() instanceof ViewThreadController) { - ((ViewThreadController) navigationController.getTop()).loadThread(threadLoadable); - } - } else { - StyledToolbarNavigationController navigationController = new StyledToolbarNavigationController(context); - splitNav.setRightController(navigationController); - ViewThreadController viewThreadController = new ViewThreadController(context); - viewThreadController.setLoadable(threadLoadable); - navigationController.pushController(viewThreadController, false); - } - splitNav.switchToController(false); - } else if (slideNav != null) { - // Create a threadview in the right part of the slide nav *without* a toolbar - if (slideNav.getRightController() instanceof ViewThreadController) { - ((ViewThreadController) slideNav.getRightController()).loadThread(threadLoadable); - } else { - ViewThreadController viewThreadController = new ViewThreadController(context); - viewThreadController.setLoadable(threadLoadable); - slideNav.setRightController(viewThreadController); - } - slideNav.switchToController(false); - } else { - // the target ThreadNav must be pushed to the parent nav controller - // (BrowseController -> ToolbarNavigationController) - ViewThreadController viewThreadController = new ViewThreadController(context); - viewThreadController.setLoadable(threadLoadable); - navigationController.pushController(viewThreadController, animated); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/DeveloperSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/DeveloperSettingsController.java deleted file mode 100644 index fcbc7fa524..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/DeveloperSettingsController.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.view.View; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.ScrollView; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.database.DatabaseManager; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; - -public class DeveloperSettingsController extends Controller { - private TextView summaryText; - - @Inject - DatabaseManager databaseManager; - - public DeveloperSettingsController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - inject(this); - - navigation.setTitle(R.string.settings_developer); - - LinearLayout wrapper = new LinearLayout(context); - wrapper.setOrientation(LinearLayout.VERTICAL); - - Button logsButton = new Button(context); - logsButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - navigationController.pushController(new LogsController(context)); - } - }); - logsButton.setText(R.string.settings_open_logs); - - wrapper.addView(logsButton); - - Button crashButton = new Button(context); - - crashButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - throw new RuntimeException("Debug crash"); - } - }); - crashButton.setText("Crash the app"); - - wrapper.addView(crashButton); - - summaryText = new TextView(context); - summaryText.setPadding(0, dp(25), 0, 0); - wrapper.addView(summaryText); - - setDbSummary(); - - Button resetDbButton = new Button(context); - resetDbButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - databaseManager.reset(); - System.exit(0); - } - }); - resetDbButton.setText("Delete database"); - wrapper.addView(resetDbButton); - - ScrollView scrollView = new ScrollView(context); - scrollView.addView(wrapper); - view = scrollView; - view.setBackgroundColor(getAttrColor(context, R.attr.backcolor)); - } - - private void setDbSummary() { - String dbSummary = ""; - dbSummary += "Database summary:\n"; - dbSummary += databaseManager.getSummary(); - summaryText.setText(dbSummary); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerController.java deleted file mode 100644 index c07581941b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerController.java +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.content.DialogInterface; -import android.support.design.widget.Snackbar; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.helper.ItemTouchHelper; -import android.text.TextUtils; -import android.view.Gravity; -import android.view.View; -import android.widget.EditText; -import android.widget.FrameLayout; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.controller.NavigationController; -import org.floens.chan.core.manager.WatchManager; -import org.floens.chan.core.model.orm.Pin; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.adapter.DrawerAdapter; -import org.floens.chan.utils.AndroidUtils; - -import java.util.List; - -import javax.inject.Inject; - -import de.greenrobot.event.EventBus; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.ui.theme.ThemeHelper.theme; -import static org.floens.chan.utils.AndroidUtils.ROBOTO_MEDIUM; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.fixSnackbarText; - -public class DrawerController extends Controller implements DrawerAdapter.Callback, View.OnClickListener { - protected FrameLayout container; - protected DrawerLayout drawerLayout; - protected LinearLayout drawer; - protected RecyclerView recyclerView; - protected LinearLayout settings; - protected DrawerAdapter drawerAdapter; - - @Inject - WatchManager watchManager; - - public DrawerController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - inject(this); - - EventBus.getDefault().register(this); - - view = inflateRes(R.layout.controller_navigation_drawer); - container = view.findViewById(R.id.container); - drawerLayout = view.findViewById(R.id.drawer_layout); - drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, Gravity.LEFT); - drawer = view.findViewById(R.id.drawer); - recyclerView = view.findViewById(R.id.drawer_recycler_view); - recyclerView.setHasFixedSize(true); - recyclerView.setLayoutManager(new LinearLayoutManager(context)); - settings = view.findViewById(R.id.settings); - settings.setOnClickListener(this); - theme().settingsDrawable.apply(settings.findViewById(R.id.image)); - ((TextView) settings.findViewById(R.id.text)).setTypeface(ROBOTO_MEDIUM); - - drawerAdapter = new DrawerAdapter(this); - recyclerView.setAdapter(drawerAdapter); - - drawerAdapter.onPinsChanged(watchManager.getAllPins()); - - ItemTouchHelper itemTouchHelper = new ItemTouchHelper(drawerAdapter.getItemTouchHelperCallback()); - itemTouchHelper.attachToRecyclerView(recyclerView); - - updateBadge(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - EventBus.getDefault().unregister(this); - } - - public void setChildController(Controller childController) { - addChildController(childController); - childController.attachToParentView(container); - childController.onShow(); - } - - @Override - public void onClick(View v) { - if (v == settings) { - openController(new MainSettingsController(context)); - } - } - - public void onMenuClicked() { - if (getMainToolbarNavigationController().getTop().navigation.hasDrawer) { - drawerLayout.openDrawer(drawer); - } - } - - @Override - public boolean onBack() { - if (drawerLayout.isDrawerOpen(drawer)) { - drawerLayout.closeDrawer(drawer); - return true; - } else { - return super.onBack(); - } - } - - @Override - public void onPinClicked(Pin pin) { - // Post it to avoid animation jumping because the first frame is heavy. - // TODO: probably twice because of some force redraw, fix that. - drawerLayout.post(() -> drawerLayout.post(() -> drawerLayout.closeDrawer(drawer))); - - ThreadController threadController = getTopThreadController(); - if (threadController != null) { - threadController.openPin(pin); - } - } - - @Override - public void onWatchCountClicked(Pin pin) { - watchManager.toggleWatch(pin); - } - - @Override - public void onHeaderClicked(DrawerAdapter.HeaderHolder holder, DrawerAdapter.HeaderAction headerAction) { - if (headerAction == DrawerAdapter.HeaderAction.CLEAR || headerAction == DrawerAdapter.HeaderAction.CLEAR_ALL) { - boolean all = headerAction == DrawerAdapter.HeaderAction.CLEAR_ALL || !ChanSettings.watchEnabled.get(); - final List pins = watchManager.clearPins(all); - if (!pins.isEmpty()) { - String text = context.getResources().getQuantityString(R.plurals.bookmark, pins.size(), pins.size()); - //noinspection WrongConstant - Snackbar snackbar = Snackbar.make(drawerLayout, context.getString(R.string.drawer_pins_cleared, text), 4000); - fixSnackbarText(context, snackbar); - snackbar.setAction(R.string.undo, new View.OnClickListener() { - @Override - public void onClick(View v) { - watchManager.addAll(pins); - } - }); - snackbar.show(); - } else { - int text = watchManager.getAllPins().isEmpty() ? R.string.drawer_pins_non_cleared : R.string.drawer_pins_non_cleared_try_all; - Snackbar snackbar = Snackbar.make(drawerLayout, text, Snackbar.LENGTH_LONG); - fixSnackbarText(context, snackbar); - snackbar.show(); - } - } - } - - @Override - public void onPinRemoved(Pin pin) { - final Pin undoPin = pin.copy(); - watchManager.deletePin(pin); - Snackbar snackbar = Snackbar.make(drawerLayout, context.getString(R.string.drawer_pin_removed, pin.loadable.title), Snackbar.LENGTH_LONG); - fixSnackbarText(context, snackbar); - snackbar.setAction(R.string.undo, new View.OnClickListener() { - @Override - public void onClick(View v) { - watchManager.createPin(undoPin); - } - }); - snackbar.show(); - } - - @Override - public void onPinLongClicked(final Pin pin) { - LinearLayout wrap = new LinearLayout(context); - wrap.setPadding(dp(16), dp(16), dp(16), 0); - final EditText text = new EditText(context); - text.setSingleLine(); - text.setText(pin.loadable.title); - wrap.addView(text, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); - - AlertDialog dialog = new AlertDialog.Builder(context) - .setPositiveButton(R.string.action_rename, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String value = text.getText().toString(); - - if (!TextUtils.isEmpty(value)) { - pin.loadable.title = value; - watchManager.updatePin(pin); - } - } - }) - .setNegativeButton(R.string.cancel, null) - .setTitle(R.string.action_rename_pin) - .setView(wrap) - .create(); - - AndroidUtils.requestKeyboardFocus(dialog, text); - - dialog.show(); - } - - @Override - public void openSites() { - openController(new SitesSetupController(context)); - } - - @Override - public void openHistory() { - openController(new HistoryController(context)); - } - - public void setPinHighlighted(Pin pin) { - drawerAdapter.setPinHighlighted(pin); - drawerAdapter.updateHighlighted(recyclerView); - } - - public void onEvent(WatchManager.PinAddedMessage message) { - drawerAdapter.onPinAdded(message.pin); - drawerLayout.openDrawer(drawer); - updateBadge(); - } - - public void onEvent(WatchManager.PinRemovedMessage message) { - drawerAdapter.onPinRemoved(message.pin); - updateBadge(); - } - - public void onEvent(WatchManager.PinChangedMessage message) { - drawerAdapter.onPinChanged(recyclerView, message.pin); - updateBadge(); - } - - public void setDrawerEnabled(boolean enabled) { - drawerLayout.setDrawerLockMode(enabled ? DrawerLayout.LOCK_MODE_UNLOCKED : DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.LEFT); - if (!enabled) { - drawerLayout.closeDrawer(drawer); - } - } - - private void updateBadge() { - List list = watchManager.getWatchingPins(); - int count = 0; - boolean color = false; - if (list.size() > 0) { - for (Pin p : list) { - count += p.getNewPostCount(); - if (p.getNewQuoteCount() > 0) { - color = true; - } - } - } - - if (getTop() != null) { - getMainToolbarNavigationController().toolbar.getArrowMenuDrawable().setBadge(count, color); - } - } - - private void openController(Controller controller) { - Controller top = getTop(); - if (top instanceof NavigationController) { - ((NavigationController) top).pushController(controller); - } else if (top instanceof DoubleNavigationController) { - ((DoubleNavigationController) top).pushController(controller); - } - - drawerLayout.closeDrawer(Gravity.LEFT); - } - - private ThreadController getTopThreadController() { - ToolbarNavigationController nav = getMainToolbarNavigationController(); - if (nav.getTop() instanceof ThreadController) { - return (ThreadController) nav.getTop(); - } else if (nav.getTop() instanceof ThreadSlideController) { - ThreadSlideController slideNav = (ThreadSlideController) nav.getTop(); - if (slideNav.leftController instanceof ThreadController) { - return (ThreadController) slideNav.leftController; - } - } - - return null; - } - - private ToolbarNavigationController getMainToolbarNavigationController() { - ToolbarNavigationController navigationController = null; - - Controller top = getTop(); - if (top instanceof StyledToolbarNavigationController) { - navigationController = (StyledToolbarNavigationController) top; - } else if (top instanceof SplitNavigationController) { - SplitNavigationController splitNav = (SplitNavigationController) top; - if (splitNav.getLeftController() instanceof StyledToolbarNavigationController) { - navigationController = (StyledToolbarNavigationController) splitNav.getLeftController(); - } - } else if (top instanceof ThreadSlideController) { - ThreadSlideController slideNav = (ThreadSlideController) top; - navigationController = (StyledToolbarNavigationController) slideNav.leftController; - } - - if (navigationController == null) { - throw new IllegalStateException("The child controller of a DrawerController must either be StyledToolbarNavigationController" + - "or an DoubleNavigationController that has a ToolbarNavigationController."); - } - - return navigationController; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java deleted file mode 100644 index 226ee46ef1..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.content.DialogInterface; -import android.support.design.widget.FloatingActionButton; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.manager.FilterEngine; -import org.floens.chan.core.manager.FilterType; -import org.floens.chan.core.model.orm.Filter; -import org.floens.chan.ui.helper.RefreshUIMessage; -import org.floens.chan.ui.layout.FilterLayout; -import org.floens.chan.ui.toolbar.ToolbarMenuItem; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -import javax.inject.Inject; - -import de.greenrobot.event.EventBus; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.ui.theme.ThemeHelper.theme; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class FiltersController extends Controller implements - ToolbarNavigationController.ToolbarSearchCallback, - View.OnClickListener { - @Inject - DatabaseManager databaseManager; - - @Inject - FilterEngine filterEngine; - - private RecyclerView recyclerView; - private FloatingActionButton add; - private FilterAdapter adapter; - - public FiltersController(Context context) { - super(context); - } - - public static String filterTypeName(FilterType type) { - switch (type) { - case TRIPCODE: - return getString(R.string.filter_tripcode); - case NAME: - return getString(R.string.filter_name); - case COMMENT: - return getString(R.string.filter_comment); - case ID: - return getString(R.string.filter_id); - case SUBJECT: - return getString(R.string.filter_subject); - case FILENAME: - return getString(R.string.filter_filename); - } - return null; - } - - public static String actionName(FilterEngine.FilterAction action) { - switch (action) { - case HIDE: - return getString(R.string.filter_hide); - case COLOR: - return getString(R.string.filter_color); - case REMOVE: - return getString(R.string.filter_remove); - } - return null; - } - - @Override - public void onCreate() { - super.onCreate(); - inject(this); - - navigation.setTitle(R.string.filters_screen); - - navigation.buildMenu() - .withItem(R.drawable.ic_search_white_24dp, this::searchClicked) - .build(); - - view = inflateRes(R.layout.controller_filters); - - recyclerView = view.findViewById(R.id.recycler_view); - recyclerView.setHasFixedSize(true); - recyclerView.setLayoutManager(new LinearLayoutManager(context)); - - add = view.findViewById(R.id.add); - add.setOnClickListener(this); - theme().applyFabColor(add); - - adapter = new FilterAdapter(); - recyclerView.setAdapter(adapter); - adapter.load(); - } - - @Override - public void onClick(View v) { - if (v == add) { - showFilterDialog(new Filter()); - } - } - - private void searchClicked(ToolbarMenuItem item) { - ((ToolbarNavigationController) navigationController).showSearch(); - } - - public void showFilterDialog(final Filter filter) { - final FilterLayout filterLayout = (FilterLayout) LayoutInflater.from(context).inflate(R.layout.layout_filter, null); - - final AlertDialog alertDialog = new AlertDialog.Builder(context) - .setView(filterLayout) - .setPositiveButton(R.string.save, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - filterEngine.createOrUpdateFilter(filterLayout.getFilter()); - EventBus.getDefault().post(new RefreshUIMessage("filters")); - adapter.load(); - } - }) - .show(); - - filterLayout.setCallback(new FilterLayout.FilterLayoutCallback() { - @Override - public void setSaveButtonEnabled(boolean enabled) { - alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(enabled); - } - }); - - filterLayout.setFilter(filter); - } - - private void deleteFilter(Filter filter) { - filterEngine.deleteFilter(filter); - EventBus.getDefault().post(new RefreshUIMessage("filters")); - adapter.load(); - //TODO: undo - } - - @Override - public void onSearchVisibilityChanged(boolean visible) { - if (!visible) { - adapter.search(null); - } - } - - @Override - public void onSearchEntered(String entered) { - adapter.search(entered); - } - - private class FilterAdapter extends RecyclerView.Adapter { - private List sourceList = new ArrayList<>(); - private List displayList = new ArrayList<>(); - private String searchQuery; - - public FilterAdapter() { - setHasStableIds(true); - } - - @Override - public FilterCell onCreateViewHolder(ViewGroup parent, int viewType) { - return new FilterCell(LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_filter, parent, false)); - } - - @Override - public void onBindViewHolder(FilterCell holder, int position) { - Filter filter = displayList.get(position); - holder.text.setText(filter.pattern); - holder.text.setTextColor(getAttrColor(context, filter.enabled ? R.attr.text_color_primary : R.attr.text_color_hint)); - holder.subtext.setTextColor(getAttrColor(context, filter.enabled ? R.attr.text_color_secondary : R.attr.text_color_hint)); - int types = FilterType.forFlags(filter.type).size(); - String subText = context.getResources().getQuantityString(R.plurals.type, types, types); - - subText += " \u2013 "; - if (filter.allBoards) { - subText += context.getString(R.string.filter_summary_all_boards); - } else { - int size = filterEngine.getFilterBoardCount(filter); - subText += context.getResources().getQuantityString(R.plurals.board, size, size); - } - - subText += " \u2013 " + FiltersController.actionName(FilterEngine.FilterAction.forId(filter.action)); - - holder.subtext.setText(subText); - } - - @Override - public int getItemCount() { - return displayList.size(); - } - - @Override - public long getItemId(int position) { - return displayList.get(position).id; - } - - public void search(String query) { - this.searchQuery = query; - filter(); - } - - private void load() { - sourceList.clear(); - sourceList.addAll(databaseManager.runTask(databaseManager.getDatabaseFilterManager().getFilters())); - - filter(); - } - - private void filter() { - displayList.clear(); - if (!TextUtils.isEmpty(searchQuery)) { - String query = searchQuery.toLowerCase(Locale.ENGLISH); - for (Filter filter : sourceList) { - if (filter.pattern.toLowerCase().contains(query)) { - displayList.add(filter); - } - } - } else { - displayList.addAll(sourceList); - } - - notifyDataSetChanged(); - } - } - - private class FilterCell extends RecyclerView.ViewHolder implements View.OnClickListener { - private TextView text; - private TextView subtext; - private ImageView delete; - - public FilterCell(View itemView) { - super(itemView); - - text = itemView.findViewById(R.id.text); - subtext = itemView.findViewById(R.id.subtext); - delete = itemView.findViewById(R.id.delete); - - theme().clearDrawable.apply(delete); - - delete.setOnClickListener(this); - - itemView.setOnClickListener(this); - } - - @Override - public void onClick(View v) { - int position = getAdapterPosition(); - if (position >= 0 && position < adapter.getItemCount()) { - Filter filter = adapter.displayList.get(position); - if (v == itemView) { - showFilterDialog(filter); - } else if (v == delete) { - deleteFilter(filter); - } - } - - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/HistoryController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/HistoryController.java deleted file mode 100644 index d0a6d4f3e5..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/HistoryController.java +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.SwitchCompat; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CompoundButton; -import android.widget.ImageView; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.database.DatabaseHistoryManager; -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.database.DatabaseSavedReplyManager; -import org.floens.chan.core.manager.BoardManager; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.History; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.helper.HintPopup; -import org.floens.chan.ui.toolbar.ToolbarMenuItem; -import org.floens.chan.ui.toolbar.ToolbarMenuSubItem; -import org.floens.chan.ui.view.CrossfadeView; -import org.floens.chan.ui.view.ThumbnailView; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.ui.theme.ThemeHelper.theme; -import static org.floens.chan.utils.AndroidUtils.dp; - -public class HistoryController extends Controller implements - CompoundButton.OnCheckedChangeListener, - ToolbarNavigationController.ToolbarSearchCallback { - private static final int SEARCH_ID = 1; - - @Inject - DatabaseManager databaseManager; - - @Inject - BoardManager boardManager; - - private DatabaseHistoryManager databaseHistoryManager; - private DatabaseSavedReplyManager databaseSavedReplyManager; - - private CrossfadeView crossfade; - private RecyclerView recyclerView; - private HistoryAdapter adapter; - - public HistoryController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - inject(this); - - databaseHistoryManager = databaseManager.getDatabaseHistoryManager(); - databaseSavedReplyManager = databaseManager.getDatabaseSavedReplyManager(); - - // Navigation - navigation.setTitle(R.string.history_screen); - - navigation.buildMenu() - .withItem(R.drawable.ic_search_white_24dp, this::searchClicked) - .withOverflow() - .withSubItem(R.string.history_clear, this::clearHistoryClicked) - .withSubItem(R.string.saved_reply_clear, this::clearSavedReplyClicked) - .build().build(); - - SwitchCompat historyEnabledSwitch = new SwitchCompat(context); - historyEnabledSwitch.setChecked(ChanSettings.historyEnabled.get()); - historyEnabledSwitch.setOnCheckedChangeListener(this); - navigation.setRightView(historyEnabledSwitch); - - view = inflateRes(R.layout.controller_history); - crossfade = view.findViewById(R.id.crossfade); - recyclerView = view.findViewById(R.id.recycler_view); - recyclerView.setHasFixedSize(true); - recyclerView.setLayoutManager(new LinearLayoutManager(context)); - - adapter = new HistoryAdapter(); - recyclerView.setAdapter(adapter); - adapter.load(); - - if (ChanSettings.historyOpenCounter.increase() == 1) { - HintPopup.show(context, historyEnabledSwitch, R.string.history_toggle_hint); - } - } - - private void searchClicked(ToolbarMenuItem item) { - ((ToolbarNavigationController) navigationController).showSearch(); - } - - private void clearHistoryClicked(ToolbarMenuSubItem item) { - new AlertDialog.Builder(context) - .setTitle(R.string.history_clear_confirm) - .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.history_clear_confirm_button, (dialog, which) -> { - databaseManager.runTaskAsync(databaseHistoryManager.clearHistory()); - adapter.load(); - }) - .show(); - } - - private void clearSavedReplyClicked(ToolbarMenuSubItem item) { - new AlertDialog.Builder(context) - .setTitle(R.string.saved_reply_clear_confirm) - .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.saved_reply_clear_confirm_button, (dialog, which) -> - databaseManager.runTaskAsync(databaseSavedReplyManager.clearSavedReplies())) - .show(); - } - - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - ChanSettings.historyEnabled.set(isChecked); - } - - private void openThread(History history) { - ViewThreadController viewThreadController = new ViewThreadController(context); - viewThreadController.setLoadable(history.loadable); - navigationController.pushController(viewThreadController); - } - - private void deleteHistory(History history) { - databaseManager.runTask(databaseHistoryManager.removeHistory(history)); - adapter.load(); - } - - @Override - public void onSearchVisibilityChanged(boolean visible) { - if (!visible) { - adapter.search(null); - } - } - - @Override - public void onSearchEntered(String entered) { - adapter.search(entered); - } - - private class HistoryAdapter extends RecyclerView.Adapter implements DatabaseManager.TaskResult> { - private List sourceList = new ArrayList<>(); - private List displayList = new ArrayList<>(); - private String searchQuery; - - private boolean resultPending = false; - - public HistoryAdapter() { - setHasStableIds(true); - } - - @Override - public HistoryCell onCreateViewHolder(ViewGroup parent, int viewType) { - return new HistoryCell(LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_history, parent, false)); - } - - @Override - public void onBindViewHolder(HistoryCell holder, int position) { - History history = displayList.get(position); - holder.thumbnail.setUrl(history.thumbnailUrl, dp(48), dp(48)); - - holder.text.setText(history.loadable.title); - Board board = history.loadable.board; - holder.subtext.setText(board == null ? null : ("/" + board.code + "/ \u2013 " + board.name)); - } - - @Override - public int getItemCount() { - return displayList.size(); - } - - @Override - public long getItemId(int position) { - return displayList.get(position).id; - } - - public void search(String query) { - this.searchQuery = query; - filter(); - } - - private void load() { - if (!resultPending) { - resultPending = true; - databaseManager.runTaskAsync(databaseHistoryManager.getHistory(), this); - } - } - - @Override - public void onComplete(List result) { - resultPending = false; - sourceList.clear(); - sourceList.addAll(result); - crossfade.toggle(!sourceList.isEmpty(), true); - filter(); - } - - private void filter() { - displayList.clear(); - if (!TextUtils.isEmpty(searchQuery)) { - String query = searchQuery.toLowerCase(Locale.ENGLISH); - for (History history : sourceList) { - if (history.loadable.title.toLowerCase(Locale.ENGLISH).contains(query)) { - displayList.add(history); - } - } - } else { - displayList.addAll(sourceList); - } - - notifyDataSetChanged(); - } - } - - private class HistoryCell extends RecyclerView.ViewHolder implements View.OnClickListener { - private ThumbnailView thumbnail; - private TextView text; - private TextView subtext; - private ImageView delete; - - public HistoryCell(View itemView) { - super(itemView); - - thumbnail = itemView.findViewById(R.id.thumbnail); - thumbnail.setCircular(true); - text = itemView.findViewById(R.id.text); - subtext = itemView.findViewById(R.id.subtext); - delete = itemView.findViewById(R.id.delete); - - theme().clearDrawable.apply(delete); - - delete.setOnClickListener(this); - - itemView.setOnClickListener(this); - } - - @Override - public void onClick(View v) { - int position = getAdapterPosition(); - if (position >= 0 && position < adapter.getItemCount()) { - History history = adapter.displayList.get(position); - if (v == itemView) { - openThread(history); - } else if (v == delete) { - deleteHistory(history); - } - } - - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java deleted file mode 100644 index a4f3a7e15b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java +++ /dev/null @@ -1,579 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; -import android.animation.ValueAnimator; -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.graphics.Point; -import android.graphics.PointF; -import android.os.Build; -import android.support.v7.app.AlertDialog; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.Window; -import android.view.WindowManager; -import android.view.animation.DecelerateInterpolator; -import android.widget.CheckBox; -import android.widget.Toast; - -import com.android.volley.VolleyError; -import com.android.volley.toolbox.ImageLoader; -import com.davemorrissey.labs.subscaleview.ImageViewState; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.presenter.ImageViewerPresenter; -import org.floens.chan.core.saver.ImageSaveTask; -import org.floens.chan.core.saver.ImageSaver; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.core.site.ImageSearch; -import org.floens.chan.ui.adapter.ImageViewerAdapter; -import org.floens.chan.ui.toolbar.NavigationItem; -import org.floens.chan.ui.toolbar.Toolbar; -import org.floens.chan.ui.toolbar.ToolbarMenu; -import org.floens.chan.ui.toolbar.ToolbarMenuItem; -import org.floens.chan.ui.toolbar.ToolbarMenuSubItem; -import org.floens.chan.ui.view.CustomScaleImageView; -import org.floens.chan.ui.view.FloatingMenu; -import org.floens.chan.ui.view.FloatingMenuItem; -import org.floens.chan.ui.view.LoadingBar; -import org.floens.chan.ui.view.MultiImageView; -import org.floens.chan.ui.view.OptionalSwipeViewPager; -import org.floens.chan.ui.view.ThumbnailView; -import org.floens.chan.ui.view.TransitionImageView; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.Logger; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import okhttp3.HttpUrl; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class ImageViewerController extends Controller implements ImageViewerPresenter.Callback { - private static final String TAG = "ImageViewerController"; - private static final int TRANSITION_DURATION = 300; - private static final float TRANSITION_FINAL_ALPHA = 0.85f; - - private static final int VOLUME_ID = 1; - - @Inject - ImageLoader imageLoader; - - private int statusBarColorPrevious; - private AnimatorSet startAnimation; - private AnimatorSet endAnimation; - - private ImageViewerCallback imageViewerCallback; - private GoPostCallback goPostCallback; - private ImageViewerPresenter presenter; - - private final Toolbar toolbar; - private TransitionImageView previewImage; - private OptionalSwipeViewPager pager; - private LoadingBar loadingBar; - - public ImageViewerController(Context context, Toolbar toolbar) { - super(context); - inject(this); - - this.toolbar = toolbar; - - presenter = new ImageViewerPresenter(this); - } - - @Override - public void onCreate() { - super.onCreate(); - - // Navigation - navigation.subtitle = "0"; - - NavigationItem.MenuBuilder menuBuilder = navigation.buildMenu(); - if (goPostCallback != null) { - menuBuilder.withItem(R.drawable.ic_subdirectory_arrow_left_white_24dp, this::goPostClicked); - } - - menuBuilder.withItem(VOLUME_ID, R.drawable.ic_volume_off_white_24dp, this::volumeClicked); - menuBuilder.withItem(R.drawable.ic_file_download_white_24dp, this::saveClicked); - - NavigationItem.MenuOverflowBuilder overflowBuilder = menuBuilder.withOverflow(); - overflowBuilder.withSubItem(R.string.action_open_browser, this::openBrowserClicked); - overflowBuilder.withSubItem(R.string.action_share, this::shareClicked); - overflowBuilder.withSubItem(R.string.action_search_image, this::searchClicked); - overflowBuilder.withSubItem(R.string.action_download_album, this::downloadAlbumClicked); - - overflowBuilder.build().build(); - - // View setup - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - - view = inflateRes(R.layout.controller_image_viewer); - previewImage = view.findViewById(R.id.preview_image); - pager = view.findViewById(R.id.pager); - pager.addOnPageChangeListener(presenter); - loadingBar = view.findViewById(R.id.loading_bar); - - showVolumeMenuItem(false, true); - - // Sanity check - if (parentController.view.getWindowToken() == null) { - throw new IllegalArgumentException("parentController.view not attached"); - } - - AndroidUtils.waitForLayout(parentController.view.getViewTreeObserver(), view, view -> { - presenter.onViewMeasured(); - return true; - }); - } - - private void goPostClicked(ToolbarMenuItem item) { - PostImage postImage = presenter.getCurrentPostImage(); - ImageViewerCallback imageViewerCallback = goPostCallback.goToPost(postImage); - if (imageViewerCallback != null) { - // hax: we need to wait for the recyclerview to do a layout before we know - // where the new thumbnails are to get the bounds from to animate to - this.imageViewerCallback = imageViewerCallback; - AndroidUtils.waitForLayout(view, view -> { - presenter.onExit(); - return false; - }); - } else { - presenter.onExit(); - } - } - - private void volumeClicked(ToolbarMenuItem item) { - presenter.onVolumeClicked(); - } - - private void saveClicked(ToolbarMenuItem item) { - saveShare(false, presenter.getCurrentPostImage()); - } - - private void openBrowserClicked(ToolbarMenuSubItem item) { - PostImage postImage = presenter.getCurrentPostImage(); - if (ChanSettings.openLinkBrowser.get()) { - AndroidUtils.openLink(postImage.imageUrl.toString()); - } else { - AndroidUtils.openLinkInBrowser((Activity) context, postImage.imageUrl.toString()); - } - } - - private void shareClicked(ToolbarMenuSubItem item) { - PostImage postImage = presenter.getCurrentPostImage(); - saveShare(true, postImage); - } - - private void searchClicked(ToolbarMenuSubItem item) { - showImageSearchOptions(); - } - - private void downloadAlbumClicked(ToolbarMenuSubItem item) { - List all = presenter.getAllPostImages(); - AlbumDownloadController albumDownloadController = new AlbumDownloadController(context); - albumDownloadController.setPostImages(presenter.getLoadable(), all); - navigationController.pushController(albumDownloadController); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } - - private void saveShare(boolean share, PostImage postImage) { - if (share && ChanSettings.shareUrl.get()) { - AndroidUtils.shareLink(postImage.imageUrl.toString()); - } else { - ImageSaveTask task = new ImageSaveTask(postImage); - task.setShare(share); - if (ChanSettings.saveBoardFolder.get()) { - task.setSubFolder(presenter.getLoadable().site.name() + - File.separator + - presenter.getLoadable().boardCode); - } - ImageSaver.getInstance().startDownloadTask(context, task); - } - } - - @Override - public boolean onBack() { - presenter.onExit(); - return true; - } - - public void setImageViewerCallback(ImageViewerCallback imageViewerCallback) { - this.imageViewerCallback = imageViewerCallback; - } - - public void setGoPostCallback(GoPostCallback goPostCallback) { - this.goPostCallback = goPostCallback; - } - - public ImageViewerPresenter getPresenter() { - return presenter; - } - - public void setPreviewVisibility(boolean visible) { - previewImage.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); - } - - public void setPagerVisiblity(boolean visible) { - pager.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); - pager.setSwipingEnabled(visible); - } - - public void setPagerItems(List images, int initialIndex) { - ImageViewerAdapter adapter = new ImageViewerAdapter(context, images, presenter); - pager.setAdapter(adapter); - pager.setCurrentItem(initialIndex); - } - - public void setImageMode(PostImage postImage, MultiImageView.Mode mode) { - ((ImageViewerAdapter) pager.getAdapter()).setMode(postImage, mode); - } - - @Override - public void setVolume(PostImage postImage, boolean muted) { - ((ImageViewerAdapter) pager.getAdapter()).setVolume(postImage, muted); - } - - public MultiImageView.Mode getImageMode(PostImage postImage) { - return ((ImageViewerAdapter) pager.getAdapter()).getMode(postImage); - } - - public void setTitle(PostImage postImage, int index, int count, boolean spoiler) { - if (spoiler) { - navigation.title = getString(R.string.image_spoiler_filename); - } else { - navigation.title = postImage.filename + "." + postImage.extension; - } - navigation.subtitle = (index + 1) + "/" + count; - ((ToolbarNavigationController) navigationController).toolbar.updateTitle(navigation); - } - - public void scrollToImage(PostImage postImage) { - imageViewerCallback.scrollToImage(postImage); - } - - public void showProgress(boolean show) { - loadingBar.setVisibility(show ? View.VISIBLE : View.GONE); - } - - public void onLoadProgress(float progress) { - loadingBar.setProgress(progress); - } - - public void onVideoError(MultiImageView multiImageView) { - if (ChanSettings.videoErrorIgnore.get()) { - Toast.makeText(context, R.string.image_open_failed, Toast.LENGTH_SHORT).show(); - } else { - @SuppressLint("InflateParams") - View notice = LayoutInflater.from(context).inflate(R.layout.dialog_video_error, null); - final CheckBox dontShowAgain = notice.findViewById(R.id.checkbox); - - new AlertDialog.Builder(context) - .setTitle(R.string.video_playback_warning_title) - .setView(notice) - .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (dontShowAgain.isChecked()) { - ChanSettings.videoErrorIgnore.set(true); - } - } - }) - .setCancelable(false) - .show(); - } - } - - @Override - public void showVolumeMenuItem(boolean show, boolean muted) { - ToolbarMenuItem volumeMenuItem = navigation.findItem(VOLUME_ID); - volumeMenuItem.setVisible(show); - volumeMenuItem.setImage( - muted ? R.drawable.ic_volume_off_white_24dp : R.drawable.ic_volume_up_white_24dp); - } - - private void showImageSearchOptions() { - // TODO: move to presenter - List items = new ArrayList<>(); - for (ImageSearch imageSearch : ImageSearch.engines) { - items.add(new FloatingMenuItem(imageSearch.getId(), imageSearch.getName())); - } - ToolbarMenuItem overflowMenuItem = navigation.findItem(ToolbarMenu.OVERFLOW_ID); - FloatingMenu menu = new FloatingMenu(context, overflowMenuItem.getView(), items); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - for (ImageSearch imageSearch : ImageSearch.engines) { - if (((Integer) item.getId()) == imageSearch.getId()) { - final HttpUrl searchImageUrl = getSearchImageUrl(presenter.getCurrentPostImage()); - AndroidUtils.openLinkInBrowser((Activity) context, imageSearch.getUrl(searchImageUrl.toString())); - break; - } - } - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - }); - menu.show(); - } - - public void startPreviewInTransition(PostImage postImage) { - ThumbnailView startImageView = getTransitionImageView(postImage); - - if (!setTransitionViewData(startImageView)) { - Logger.test("Oops"); - return; // TODO - } - - if (Build.VERSION.SDK_INT >= 21) { - statusBarColorPrevious = getWindow().getStatusBarColor(); - } - - setBackgroundAlpha(0f); - - startAnimation = new AnimatorSet(); - - ValueAnimator progress = ValueAnimator.ofFloat(0f, 1f); - progress.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator animation) { - setBackgroundAlpha(Math.min(1f, (float) animation.getAnimatedValue())); - previewImage.setProgress((float) animation.getAnimatedValue()); - } - }); - - startAnimation.play(progress); - startAnimation.setDuration(TRANSITION_DURATION); - startAnimation.setInterpolator(new DecelerateInterpolator(3f)); - startAnimation.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animation) { - imageViewerCallback.onPreviewCreate(ImageViewerController.this); - } - - @Override - public void onAnimationEnd(Animator animation) { - startAnimation = null; - presenter.onInTransitionEnd(); - } - }); - - imageLoader.get(postImage.getThumbnailUrl().toString(), new ImageLoader.ImageListener() { - @Override - public void onErrorResponse(VolleyError error) { - Log.e(TAG, "onErrorResponse for preview in transition in ImageViewerController, cannot show correct transition bitmap"); - startAnimation.start(); - } - - @Override - public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) { - if (response.getBitmap() != null) { - previewImage.setBitmap(response.getBitmap()); - startAnimation.start(); - } - } - }, previewImage.getWidth(), previewImage.getHeight()); - } - - public void startPreviewOutTransition(final PostImage postImage) { - if (startAnimation != null || endAnimation != null) { - return; - } - - imageLoader.get(postImage.getThumbnailUrl().toString(), new ImageLoader.ImageListener() { - @Override - public void onErrorResponse(VolleyError error) { - Log.e(TAG, "onErrorResponse for preview out transition in ImageViewerController, cannot show correct transition bitmap"); - doPreviewOutAnimation(postImage, null); - } - - @Override - public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) { - if (response.getBitmap() != null) { - doPreviewOutAnimation(postImage, response.getBitmap()); - } - } - }, previewImage.getWidth(), previewImage.getHeight()); - } - - private void doPreviewOutAnimation(PostImage postImage, Bitmap bitmap) { - // Find translation and scale if the current displayed image was a bigimage - MultiImageView multiImageView = ((ImageViewerAdapter) pager.getAdapter()).find(postImage); - CustomScaleImageView customScaleImageView = multiImageView.findScaleImageView(); - if (customScaleImageView != null) { - ImageViewState state = customScaleImageView.getState(); - if (state != null) { - PointF p = customScaleImageView.viewToSourceCoord(0f, 0f); - PointF bitmapSize = new PointF(customScaleImageView.getSWidth(), customScaleImageView.getSHeight()); - previewImage.setState(state.getScale(), p, bitmapSize); - } - } - - ThumbnailView startImage = getTransitionImageView(postImage); - - endAnimation = new AnimatorSet(); - if (!setTransitionViewData(startImage) || bitmap == null) { - if (bitmap != null) { - previewImage.setBitmap(bitmap); - } - ValueAnimator backgroundAlpha = ValueAnimator.ofFloat(1f, 0f); - backgroundAlpha.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator animation) { - setBackgroundAlpha((float) animation.getAnimatedValue()); - } - }); - - endAnimation - .play(ObjectAnimator.ofFloat(previewImage, View.Y, previewImage.getTop(), previewImage.getTop() + dp(20))) - .with(ObjectAnimator.ofFloat(previewImage, View.ALPHA, 1f, 0f)) - .with(backgroundAlpha); - - } else { - ValueAnimator progress = ValueAnimator.ofFloat(1f, 0f); - progress.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator animation) { - setBackgroundAlpha((float) animation.getAnimatedValue()); - previewImage.setProgress((float) animation.getAnimatedValue()); - } - }); - - endAnimation.play(progress); - } - endAnimation.setDuration(TRANSITION_DURATION); - endAnimation.setInterpolator(new DecelerateInterpolator(3f)); - endAnimation.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - previewOutAnimationEnded(); - } - }); - endAnimation.start(); - } - - private void previewOutAnimationEnded() { - setBackgroundAlpha(0f); - - imageViewerCallback.onPreviewDestroy(this); - navigationController.stopPresenting(false); - } - - private boolean setTransitionViewData(ThumbnailView startView) { - if (startView == null || startView.getWindowToken() == null) { - return false; - } - - Bitmap bitmap = startView.getBitmap(); - if (bitmap == null) { - return false; - } - - int[] loc = new int[2]; - startView.getLocationInWindow(loc); - Point windowLocation = new Point(loc[0], loc[1]); - Point size = new Point(startView.getWidth(), startView.getHeight()); - previewImage.setSourceImageView(windowLocation, size, bitmap); - return true; - } - - private void setBackgroundAlpha(float alpha) { - navigationController.view.setBackgroundColor(Color.argb((int) (alpha * TRANSITION_FINAL_ALPHA * 255f), 0, 0, 0)); - - if (Build.VERSION.SDK_INT >= 21) { - if (alpha == 0f) { - setStatusBarColor(statusBarColorPrevious); - } else { - int r = (int) ((1f - alpha) * Color.red(statusBarColorPrevious)); - int g = (int) ((1f - alpha) * Color.green(statusBarColorPrevious)); - int b = (int) ((1f - alpha) * Color.blue(statusBarColorPrevious)); - setStatusBarColor(Color.argb(255, r, g, b)); - } - } - - setToolbarBackgroundAlpha(alpha); - } - - private void setStatusBarColor(int color) { - if (Build.VERSION.SDK_INT >= 21) { - getWindow().setStatusBarColor(color); - } - } - - private void setToolbarBackgroundAlpha(float alpha) { - toolbar.setAlpha(alpha); - loadingBar.setAlpha(alpha); - } - - private ThumbnailView getTransitionImageView(PostImage postImage) { - return imageViewerCallback.getPreviewImageTransitionView(this, postImage); - } - - private Window getWindow() { - return ((Activity) context).getWindow(); - } - - public interface ImageViewerCallback { - ThumbnailView getPreviewImageTransitionView(ImageViewerController imageViewerController, PostImage postImage); - - void onPreviewCreate(ImageViewerController imageViewerController); - - void onPreviewDestroy(ImageViewerController imageViewerController); - - void scrollToImage(PostImage postImage); - } - - public interface GoPostCallback { - ImageViewerCallback goToPost(PostImage postImage); - } - - /** - * Send thumbnail image of movie posts because none of the image search providers support movies (such as webm) directly - * - * @param postImage the post image - * @return url of an image to be searched - */ - private HttpUrl getSearchImageUrl(final PostImage postImage) { - return postImage.type == PostImage.Type.MOVIE ? postImage.thumbnailUrl : postImage.imageUrl; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerNavigationController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerNavigationController.java deleted file mode 100644 index 2a2cd50b98..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerNavigationController.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; - -import org.floens.chan.R; -import org.floens.chan.controller.ui.NavigationControllerContainerLayout; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.ui.toolbar.Toolbar; - -import java.util.List; - -public class ImageViewerNavigationController extends ToolbarNavigationController { - private ImageViewerController imageViewerController; - - public ImageViewerNavigationController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - view = inflateRes(R.layout.controller_navigation_image_viewer); - container = (NavigationControllerContainerLayout) view.findViewById(R.id.container); - NavigationControllerContainerLayout nav = (NavigationControllerContainerLayout) container; - nav.setNavigationController(this); - nav.setSwipeEnabled(false); - toolbar = view.findViewById(R.id.toolbar); - toolbar.setCallback(this); - } - - public void showImages(final List images, final int index, final Loadable loadable, - ImageViewerController.ImageViewerCallback imageViewerCallback) { - showImages(images, index, loadable, imageViewerCallback, null); - } - - public void showImages(final List images, final int index, final Loadable loadable, - ImageViewerController.ImageViewerCallback imageViewerCallback, - ImageViewerController.GoPostCallback goPostCallback) { - imageViewerController = new ImageViewerController(context, toolbar); - imageViewerController.setGoPostCallback(goPostCallback); - pushController(imageViewerController, false); - imageViewerController.setImageViewerCallback(imageViewerCallback); - imageViewerController.getPresenter().showImages(images, index, loadable); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/LicensesController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/LicensesController.java deleted file mode 100644 index 4e7f4462bb..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/LicensesController.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.webkit.WebView; - -import org.floens.chan.controller.Controller; - -public class LicensesController extends Controller { - private String title; - private String url; - - public LicensesController(Context context, String title, String url) { - super(context); - this.title = title; - this.url = url; - } - - @Override - public void onCreate() { - super.onCreate(); - - navigation.title = title; - - WebView webView = new WebView(context); - webView.loadUrl(url); - webView.setBackgroundColor(0xffffffff); - view = webView; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/LoginController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/LoginController.java deleted file mode 100644 index 7257d28bb2..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/LoginController.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.text.Html; -import android.text.method.LinkMovementMethod; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.SiteActions; -import org.floens.chan.core.site.http.HttpCall; -import org.floens.chan.core.site.http.LoginRequest; -import org.floens.chan.core.site.http.LoginResponse; -import org.floens.chan.ui.view.CrossfadeView; -import org.floens.chan.utils.AndroidUtils; - -import static org.floens.chan.utils.AndroidUtils.getString; - -public class LoginController extends Controller implements View.OnClickListener, SiteActions.LoginListener { - private LinearLayout container; - private CrossfadeView crossfadeView; - private TextView errors; - private Button button; - private TextView bottomDescription; - private EditText inputToken; - private EditText inputPin; - private TextView authenticated; - - private Site site; - - public LoginController(Context context) { - super(context); - } - - public void setSite(Site site) { - this.site = site; - } - - @Override - public void onCreate() { - super.onCreate(); - - navigation.setTitle(R.string.settings_screen_pass); - - view = inflateRes(R.layout.controller_pass); - container = view.findViewById(R.id.container); - crossfadeView = view.findViewById(R.id.crossfade); - errors = view.findViewById(R.id.errors); - button = view.findViewById(R.id.button); - bottomDescription = view.findViewById(R.id.bottom_description); - inputToken = view.findViewById(R.id.input_token); - inputPin = view.findViewById(R.id.input_pin); - authenticated = view.findViewById(R.id.authenticated); - - errors.setVisibility(View.GONE); - - final boolean loggedIn = loggedIn(); - button.setText(loggedIn ? R.string.setting_pass_logout : R.string.setting_pass_login); - button.setOnClickListener(this); - - bottomDescription.setText(Html.fromHtml(getString(R.string.setting_pass_bottom_description))); - bottomDescription.setMovementMethod(LinkMovementMethod.getInstance()); - - LoginRequest loginDetails = site.actions().getLoginDetails(); - inputToken.setText(loginDetails.user); - inputPin.setText(loginDetails.pass); - - // Sanity check - if (parentController.view.getWindowToken() == null) { - throw new IllegalArgumentException("parentController.view not attached"); - } - - // TODO: remove - AndroidUtils.waitForLayout(parentController.view.getViewTreeObserver(), view, new AndroidUtils.OnMeasuredCallback() { - @Override - public boolean onMeasured(View view) { - crossfadeView.getLayoutParams().height = crossfadeView.getHeight(); - crossfadeView.requestLayout(); - crossfadeView.toggle(!loggedIn, false); - return false; - } - }); - } - - @Override - public void onClick(View v) { - if (v == button) { - if (loggedIn()) { - deauth(); - crossfadeView.toggle(true, true); - button.setText(R.string.setting_pass_login); - hideError(); - } else { - auth(); - } - } - } - - @Override - public void onLoginComplete(HttpCall httpCall, LoginResponse loginResponse) { - if (loginResponse.success) { - authSuccess(loginResponse); - } else { - authFail(loginResponse); - } - - authAfter(); - } - - @Override - public void onLoginError(HttpCall httpCall) { - authFail(null); - authAfter(); - } - - private void authSuccess(LoginResponse response) { - crossfadeView.toggle(false, true); - button.setText(R.string.setting_pass_logout); - authenticated.setText(response.message); - } - - private void authFail(LoginResponse response) { - String message = getString(R.string.setting_pass_error); - if (response != null && response.message != null) { - message = response.message; - } - - showError(message); - button.setText(R.string.setting_pass_login); - } - - private void authAfter() { - button.setEnabled(true); - inputToken.setEnabled(true); - inputPin.setEnabled(true); - } - - private void auth() { - AndroidUtils.hideKeyboard(view); - inputToken.setEnabled(false); - inputPin.setEnabled(false); - button.setEnabled(false); - button.setText(R.string.setting_pass_logging_in); - hideError(); - - String user = inputToken.getText().toString(); - String pass = inputPin.getText().toString(); - site.actions().login(new LoginRequest(user, pass), this); - } - - private void deauth() { - site.actions().logout(); - } - - private void showError(String error) { - errors.setText(error); - errors.setVisibility(View.VISIBLE); - } - - private void hideError() { - errors.setText(null); - errors.setVisibility(View.GONE); - } - - private boolean loggedIn() { - return site.actions().isLoggedIn(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/LogsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/LogsController.java deleted file mode 100644 index d24623030d..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/LogsController.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.ClipData; -import android.content.ClipboardManager; -import android.content.Context; -import android.view.ViewGroup; -import android.widget.ScrollView; -import android.widget.TextView; -import android.widget.Toast; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.ui.toolbar.ToolbarMenuSubItem; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.IOUtils; -import org.floens.chan.utils.Logger; - -import java.io.IOException; -import java.io.InputStream; - -import static org.floens.chan.utils.AndroidUtils.getAttrColor; - -public class LogsController extends Controller { - private static final String TAG = "LogsController"; - - private TextView logTextView; - - private String logText; - - public LogsController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - navigation.setTitle(org.floens.chan.R.string.settings_logs_screen); - - navigation.buildMenu().withOverflow() - .withSubItem(R.string.settings_logs_copy, this::copyLogsClicked) - .build().build(); - - ScrollView container = new ScrollView(context); - container.setBackgroundColor(getAttrColor(context, org.floens.chan.R.attr.backcolor)); - logTextView = new TextView(context); - container.addView(logTextView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); - - view = container; - - loadLogs(); - } - - private void copyLogsClicked(ToolbarMenuSubItem item) { - ClipboardManager clipboard = (ClipboardManager) AndroidUtils.getAppContext().getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("Logs", logText); - clipboard.setPrimaryClip(clip); - Toast.makeText(context, R.string.settings_logs_copied_to_clipboard, Toast.LENGTH_SHORT).show(); - } - - private void loadLogs() { - Process process; - try { - process = new ProcessBuilder() - .command("logcat", "-d", "-v", "tag") - .start(); - } catch (IOException e) { - Logger.e(TAG, "Error starting logcat", e); - return; - } - - InputStream outputStream = process.getInputStream(); - logText = IOUtils.readString(outputStream); - logTextView.setText(logText); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java deleted file mode 100644 index c0d4ddd2ad..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.text.TextUtils; -import android.view.View; -import android.widget.Toast; - -import org.floens.chan.R; -import org.floens.chan.core.presenter.SettingsPresenter; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.activity.StartActivity; -import org.floens.chan.ui.settings.BooleanSettingView; -import org.floens.chan.ui.settings.LinkSettingView; -import org.floens.chan.ui.settings.SettingView; -import org.floens.chan.ui.settings.SettingsController; -import org.floens.chan.ui.settings.SettingsGroup; -import org.floens.chan.utils.AndroidUtils; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class MainSettingsController extends SettingsController implements SettingsPresenter.Callback { - @Inject - private SettingsPresenter presenter; - - private LinkSettingView watchLink; - private int clickCount; - private SettingView developerView; - private LinkSettingView sitesSetting; - private LinkSettingView filtersSetting; - private SettingView crashReportSetting; - - public MainSettingsController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - inject(this); - - navigation.setTitle(R.string.settings_screen); - - setupLayout(); - - populatePreferences(); - - buildPreferences(); - - if (!ChanSettings.developer.get()) { - developerView.view.setVisibility(View.GONE); - } - - presenter.create(this); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - presenter.destroy(); - } - - @Override - public void onShow() { - super.onShow(); - - presenter.show(); - } - - @Override - public void setFiltersCount(int count) { - String filters = context.getResources().getQuantityString(R.plurals.filter, count, count); - filtersSetting.setDescription(filters); - } - - @Override - public void setSiteCount(int count) { - String sites = context.getResources().getQuantityString(R.plurals.site, count, count); - sitesSetting.setDescription(sites); - } - - @Override - public void setWatchEnabled(boolean enabled) { - watchLink.setDescription(enabled ? - R.string.setting_watch_summary_enabled : R.string.setting_watch_summary_disabled); - } - - @Override - public void onPreferenceChange(SettingView item) { - super.onPreferenceChange(item); - if (item == crashReportSetting) { - Toast.makeText(context, R.string.settings_crash_reporting_toggle_notice, - Toast.LENGTH_LONG).show(); - } - } - - private void populatePreferences() { - // General group - { - SettingsGroup general = new SettingsGroup(R.string.settings_group_settings); - - watchLink = (LinkSettingView) general.add(new LinkSettingView(this, - R.string.settings_watch, 0, - v -> navigationController.pushController( - new WatchSettingsController(context)))); - - sitesSetting = (LinkSettingView) general.add(new LinkSettingView(this, - R.string.settings_sites, 0, - v -> navigationController.pushController( - new SitesSetupController(context)))); - - general.add(new LinkSettingView(this, - R.string.settings_appearance, R.string.settings_appearance_description, - v -> navigationController.pushController( - new AppearanceSettingsController(context)))); - - general.add(new LinkSettingView(this, - R.string.settings_behavior, R.string.settings_behavior_description, - v -> navigationController.pushController( - new BehaviourSettingsController(context)))); - - general.add(new LinkSettingView(this, - R.string.settings_media, R.string.settings_media_description, - v -> navigationController.pushController( - new MediaSettingsController(context)))); - - filtersSetting = (LinkSettingView) general.add(new LinkSettingView(this, - R.string.settings_filters, 0, - v -> navigationController.pushController(new FiltersController(context)))); - - groups.add(general); - } - - setupAboutGroup(); - } - - private void setupAboutGroup() { - SettingsGroup about = new SettingsGroup(R.string.settings_group_about); - - final String version = setupVersionSetting(about); - - setupUpdateSetting(about); - - setupCrashReportingSetting(about); - - setupExtraAboutSettings(about, version); - - about.add(new LinkSettingView(this, - R.string.settings_about_license, R.string.settings_about_license_description, - v -> navigationController.pushController( - new LicensesController(context, - getString(R.string.settings_about_license), - "file:///android_asset/html/license.html")))); - - about.add(new LinkSettingView(this, - R.string.settings_about_licenses, R.string.settings_about_licenses_description, - v -> navigationController.pushController( - new LicensesController(context, - getString(R.string.settings_about_licenses), - "file:///android_asset/html/licenses.html")))); - - developerView = about.add(new LinkSettingView(this, - R.string.settings_developer, 0, - v -> navigationController.pushController( - new DeveloperSettingsController(context)))); - - groups.add(about); - } - - private void setupExtraAboutSettings(SettingsGroup about, String version) { - int extraAbouts = context.getResources() - .getIdentifier("extra_abouts", "array", context.getPackageName()); - - if (extraAbouts != 0) { - String[] abouts = context.getResources().getStringArray(extraAbouts); - if (abouts.length % 3 == 0) { - for (int i = 0, aboutsLength = abouts.length; i < aboutsLength; i += 3) { - String aboutName = abouts[i]; - String aboutDescription = abouts[i + 1]; - if (TextUtils.isEmpty(aboutDescription)) { - aboutDescription = null; - } - String aboutLink = abouts[i + 2]; - if (TextUtils.isEmpty(aboutLink)) { - aboutLink = null; - } - - final String finalAboutLink = aboutLink; - View.OnClickListener clickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - if (finalAboutLink != null) { - if (finalAboutLink.contains("__EMAIL__")) { - String[] email = finalAboutLink.split("__EMAIL__"); - Intent intent = new Intent(Intent.ACTION_SENDTO); - intent.setData(Uri.parse("mailto:")); - intent.putExtra(Intent.EXTRA_EMAIL, new String[]{email[0]}); - String subject = email[1]; - subject = subject.replace("__VERSION__", version); - intent.putExtra(Intent.EXTRA_SUBJECT, subject); - AndroidUtils.openIntent(intent); - } else { - AndroidUtils.openLink(finalAboutLink); - } - } - } - }; - - about.add(new LinkSettingView(this, - aboutName, aboutDescription, - clickListener)); - } - } - } - } - - private String setupVersionSetting(SettingsGroup about) { - String version = ""; - try { - version = context.getPackageManager() - .getPackageInfo(context.getPackageName(), 0).versionName; - } catch (PackageManager.NameNotFoundException ignored) { - } - - String userVersion = version + " " + getString(R.string.app_flavor_name); - about.add(new LinkSettingView(this, - getString(R.string.app_name), userVersion, - v -> { - if ((++clickCount) % 5 == 0) { - boolean developer = !ChanSettings.developer.get(); - - ChanSettings.developer.set(developer); - - Toast.makeText(context, (developer ? "Enabled" : "Disabled") + - " developer options", Toast.LENGTH_LONG).show(); - - developerView.view.setVisibility(developer ? View.VISIBLE : View.GONE); - } - })); - - return version; - } - - private void setupUpdateSetting(SettingsGroup about) { - if (((StartActivity) context).getVersionHandler().isUpdatingAvailable()) { - about.add(new LinkSettingView(this, - R.string.settings_update_check, 0, - v -> ((StartActivity) context).getVersionHandler().manualUpdateCheck())); - } - } - - private void setupCrashReportingSetting(SettingsGroup about) { - if (ChanSettings.isCrashReportingAvailable()) { - crashReportSetting = about.add(new BooleanSettingView(this, - ChanSettings.crashReporting, - R.string.settings_crash_reporting, - R.string.settings_crash_reporting_description)); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/MediaSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/MediaSettingsController.java deleted file mode 100644 index ea561c4d8f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/MediaSettingsController.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; - -import org.floens.chan.R; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.settings.BooleanSettingView; -import org.floens.chan.ui.settings.LinkSettingView; -import org.floens.chan.ui.settings.ListSettingView; -import org.floens.chan.ui.settings.SettingView; -import org.floens.chan.ui.settings.SettingsController; -import org.floens.chan.ui.settings.SettingsGroup; - -import java.util.ArrayList; -import java.util.List; - -import de.greenrobot.event.EventBus; - -import static org.floens.chan.utils.AndroidUtils.getString; - -public class MediaSettingsController extends SettingsController { - // Special setting views - private LinkSettingView saveLocation; - private ListSettingView imageAutoLoadView; - private ListSettingView videoAutoLoadView; - - public MediaSettingsController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - EventBus.getDefault().register(this); - - navigation.setTitle(R.string.settings_screen_media); - - setupLayout(); - - populatePreferences(); - - buildPreferences(); - - onPreferenceChange(imageAutoLoadView); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - EventBus.getDefault().unregister(this); - } - - @Override - public void onPreferenceChange(SettingView item) { - super.onPreferenceChange(item); - - if (item == imageAutoLoadView) { - updateVideoLoadModes(); - } - } - - public void onEvent(ChanSettings.SettingChanged setting) { - if (setting.setting == ChanSettings.saveLocation) { - updateSaveLocationSetting(); - } - } - - private void populatePreferences() { - // Media group - { - SettingsGroup media = new SettingsGroup(R.string.settings_group_media); - - setupSaveLocationSetting(media); - - media.add(new BooleanSettingView(this, - ChanSettings.saveBoardFolder, - R.string.setting_save_board_folder, - R.string.setting_save_board_folder_description)); - - media.add(new BooleanSettingView(this, - ChanSettings.saveOriginalFilename, - R.string.setting_save_original_filename, - R.string.setting_save_original_filename_description)); - - media.add(new BooleanSettingView(this, ChanSettings.videoDefaultMuted, - R.string.setting_video_default_muted, - R.string.setting_video_default_muted_description)); - - media.add(new BooleanSettingView(this, ChanSettings.videoOpenExternal, - R.string.setting_video_open_external, - R.string.setting_video_open_external_description)); - - media.add(new BooleanSettingView(this, ChanSettings.videoUseExoplayer, - R.string.setting_video_exoplayer, - R.string.setting_video_exoplayer_description)); - - media.add(new BooleanSettingView(this, - ChanSettings.shareUrl, - R.string.setting_share_url, R.string.setting_share_url_description)); - - media.add(new BooleanSettingView(this, - ChanSettings.revealImageSpoilers, - R.string.settings_reveal_image_spoilers, - R.string.settings_reveal_image_spoilers_description)); - - groups.add(media); - } - - // Loading group - { - SettingsGroup loading = new SettingsGroup(R.string.settings_group_media_loading); - - setupMediaLoadTypesSetting(loading); - - loading.add(new BooleanSettingView(this, - ChanSettings.videoAutoLoop, - R.string.setting_video_auto_loop, - R.string.setting_video_auto_loop_description)); - - groups.add(loading); - } - } - - private void setupMediaLoadTypesSetting(SettingsGroup loading) { - List imageAutoLoadTypes = new ArrayList<>(); - List videoAutoLoadTypes = new ArrayList<>(); - for (ChanSettings.MediaAutoLoadMode mode : ChanSettings.MediaAutoLoadMode.values()) { - int name = 0; - switch (mode) { - case ALL: - name = R.string.setting_image_auto_load_all; - break; - case WIFI: - name = R.string.setting_image_auto_load_wifi; - break; - case NONE: - name = R.string.setting_image_auto_load_none; - break; - } - - imageAutoLoadTypes.add(new ListSettingView.Item<>(getString(name), mode)); - videoAutoLoadTypes.add(new ListSettingView.Item<>(getString(name), mode)); - } - - imageAutoLoadView = new ListSettingView<>(this, - ChanSettings.imageAutoLoadNetwork, R.string.setting_image_auto_load, - imageAutoLoadTypes); - loading.add(imageAutoLoadView); - - videoAutoLoadView = new ListSettingView<>(this, - ChanSettings.videoAutoLoadNetwork, R.string.setting_video_auto_load, - videoAutoLoadTypes); - loading.add(videoAutoLoadView); - - updateVideoLoadModes(); - } - - private void updateVideoLoadModes() { - ChanSettings.MediaAutoLoadMode currentImageLoadMode = ChanSettings.imageAutoLoadNetwork.get(); - ChanSettings.MediaAutoLoadMode[] modes = ChanSettings.MediaAutoLoadMode.values(); - boolean enabled = false; - boolean resetVideoMode = false; - for (int i = 0; i < modes.length; i++) { - if (modes[i].getKey().equals(currentImageLoadMode.getKey())) { - enabled = true; - if (resetVideoMode) { - ChanSettings.videoAutoLoadNetwork.set(modes[i]); - videoAutoLoadView.updateSelection(); - onPreferenceChange(videoAutoLoadView); - } - } - videoAutoLoadView.items.get(i).enabled = enabled; - if (!enabled && ChanSettings.videoAutoLoadNetwork.get().getKey() - .equals(modes[i].getKey())) { - resetVideoMode = true; - } - } - } - - private void setupSaveLocationSetting(SettingsGroup media) { - saveLocation = (LinkSettingView) media.add(new LinkSettingView(this, - R.string.save_location_screen, 0, - v -> navigationController.pushController(new SaveLocationController(context)))); - updateSaveLocationSetting(); - } - - private void updateSaveLocationSetting() { - saveLocation.setDescription(ChanSettings.saveLocation.get()); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/PopupController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/PopupController.java deleted file mode 100644 index d19f9b34a0..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/PopupController.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.view.View; -import android.widget.FrameLayout; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.controller.NavigationController; - -public class PopupController extends Controller implements View.OnClickListener { - private FrameLayout topView; - private FrameLayout container; - - public PopupController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - view = inflateRes(R.layout.layout_controller_popup); - topView = view.findViewById(R.id.top_view); - topView.setOnClickListener(this); - container = view.findViewById(R.id.container); - } - - public void setChildController(NavigationController childController) { - addChildController(childController); - childController.attachToParentView(container); - childController.onShow(); - } - - @Override - public void onClick(View v) { - dismiss(); - } - - public void dismiss() { - if (presentedByController instanceof DoubleNavigationController) { - ((SplitNavigationController) presentedByController).popAll(); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java deleted file mode 100644 index bc7fbb6c21..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.animation.ValueAnimator; -import android.app.Activity; -import android.content.Context; -import android.graphics.Color; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.view.animation.LinearInterpolator; -import android.widget.AbsListView; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.presenter.ThreadPresenter; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.cell.PostCellInterface; -import org.floens.chan.ui.helper.PostPopupHelper; -import org.floens.chan.ui.view.LoadView; -import org.floens.chan.ui.view.ThumbnailView; - -import java.util.List; - -import static org.floens.chan.ui.theme.ThemeHelper.theme; - -public class PostRepliesController extends Controller { - private static final int TRANSITION_DURATION = 200; - - private PostPopupHelper postPopupHelper; - private ThreadPresenter presenter; - - private int statusBarColorPrevious; - private boolean first = true; - - private LoadView loadView; - private ListView listView; - private PostPopupHelper.RepliesData displayingData; - - public PostRepliesController(Context context, PostPopupHelper postPopupHelper, ThreadPresenter presenter) { - super(context); - this.postPopupHelper = postPopupHelper; - this.presenter = presenter; - } - - @Override - public void onCreate() { - super.onCreate(); - - view = inflateRes(R.layout.layout_post_replies_container); - - // Clicking outside the popup view - view.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - postPopupHelper.pop(); - } - }); - - loadView = view.findViewById(R.id.loadview); - - if (Build.VERSION.SDK_INT >= 21) { - statusBarColorPrevious = getWindow().getStatusBarColor(); - if (statusBarColorPrevious != 0) { - animateStatusBar(true, statusBarColorPrevious); - } - } - } - - @Override - public void stopPresenting() { - super.stopPresenting(); - if (Build.VERSION.SDK_INT >= 21) { - if (statusBarColorPrevious != 0) { - animateStatusBar(false, statusBarColorPrevious); - } - } - } - - public ThumbnailView getThumbnail(PostImage postImage) { - if (listView == null) { - return null; - } else { - ThumbnailView thumbnail = null; - for (int i = 0; i < listView.getChildCount(); i++) { - View view = listView.getChildAt(i); - if (view instanceof PostCellInterface) { - PostCellInterface postView = (PostCellInterface) view; - Post post = postView.getPost(); - - if (!post.images.isEmpty()) { - for (int j = 0; j < post.images.size(); j++) { - if (post.images.get(j).equalUrl(postImage)) { - thumbnail = postView.getThumbnailView(postImage); - } - } - } - } - } - return thumbnail; - } - } - - public void setPostRepliesData(PostPopupHelper.RepliesData data) { - displayData(data); - } - - public List getPostRepliesData() { - return displayingData.posts; - } - - public void scrollTo(int displayPosition, boolean smooth) { - listView.smoothScrollToPosition(displayPosition); - } - - private void displayData(final PostPopupHelper.RepliesData data) { - displayingData = data; - - View dataView; - if (ChanSettings.repliesButtonsBottom.get()) { - dataView = inflateRes(R.layout.layout_post_replies_bottombuttons); - } else { - dataView = inflateRes(R.layout.layout_post_replies); - } - - listView = dataView.findViewById(R.id.post_list); - listView.setDivider(null); - listView.setDividerHeight(0); - - View repliesBack = dataView.findViewById(R.id.replies_back); - repliesBack.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - postPopupHelper.pop(); - } - }); - - View repliesClose = dataView.findViewById(R.id.replies_close); - repliesClose.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - postPopupHelper.popAll(); - } - }); - - Drawable backDrawable = theme().backDrawable.makeDrawable(context); - Drawable doneDrawable = theme().doneDrawable.makeDrawable(context); - - TextView repliesBackText = dataView.findViewById(R.id.replies_back_icon); - TextView repliesCloseText = dataView.findViewById(R.id.replies_close_icon); - repliesBackText.setCompoundDrawablesWithIntrinsicBounds(backDrawable, null, null, null); - repliesCloseText.setCompoundDrawablesWithIntrinsicBounds(doneDrawable, null, null, null); - if (theme().isLightTheme) { - repliesBackText.setTextColor(0x8a000000); - repliesCloseText.setTextColor(0x8a000000); - } else { - repliesBackText.setTextColor(0xffffffff); - repliesCloseText.setTextColor(0xffffffff); - dataView.findViewById(R.id.container).setBackgroundResource(R.drawable.dialog_full_dark); - } - - ArrayAdapter adapter = new ArrayAdapter(context, 0) { - @Override - public View getView(int position, View convertView, ViewGroup parent) { - PostCellInterface postCell; - if (convertView instanceof PostCellInterface) { - postCell = (PostCellInterface) convertView; - } else { - postCell = (PostCellInterface) LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_post, parent, false); - } - - final Post p = getItem(position); - boolean showDivider = position < getCount() - 1; - postCell.setPost(null, - p, - presenter, - false, - false, - false, - data.forPost.no, - showDivider, - ChanSettings.PostViewMode.LIST, - false); - - return (View) postCell; - } - }; - - adapter.addAll(data.posts); - listView.setAdapter(adapter); - - listView.setSelectionFromTop(data.listViewIndex, data.listViewTop); - listView.setOnScrollListener(new AbsListView.OnScrollListener() { - @Override - public void onScrollStateChanged(AbsListView view, int scrollState) { - } - - @Override - public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { - data.listViewIndex = view.getFirstVisiblePosition(); - View v = view.getChildAt(0); - data.listViewTop = (v == null) ? 0 : v.getTop(); - } - }); - - loadView.setFadeDuration(first ? 0 : 150); - first = false; - loadView.setView(dataView); - } - - @Override - public boolean onBack() { - postPopupHelper.pop(); - return true; - } - - private void animateStatusBar(boolean in, final int originalColor) { - ValueAnimator statusBar = ValueAnimator.ofFloat(in ? 0f : 0.5f, in ? 0.5f : 0f); - statusBar.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator animation) { - if (Build.VERSION.SDK_INT >= 21) { // Make lint happy - float progress = (float) animation.getAnimatedValue(); - if (progress == 0f) { - getWindow().setStatusBarColor(originalColor); - } else { - int r = (int) ((1f - progress) * Color.red(originalColor)); - int g = (int) ((1f - progress) * Color.green(originalColor)); - int b = (int) ((1f - progress) * Color.blue(originalColor)); - getWindow().setStatusBarColor(Color.argb(255, r, g, b)); - } - } - } - }); - statusBar.setDuration(TRANSITION_DURATION).setInterpolator(new LinearInterpolator()); - statusBar.start(); - } - - private Window getWindow() { - return ((Activity) context).getWindow(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ReportController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ReportController.java deleted file mode 100644 index 9195e4fde3..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ReportController.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.webkit.WebSettings; -import android.webkit.WebView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.SiteRequestModifier; -import org.floens.chan.ui.helper.PostHelper; - -import okhttp3.HttpUrl; - -public class ReportController extends Controller { - private Post post; - private SiteRequestModifier siteRequestModifier; - - public ReportController(Context context, Post post) { - super(context); - this.post = post; - } - - @SuppressLint("SetJavaScriptEnabled") - @Override - public void onCreate() { - super.onCreate(); - navigation.title = context.getString(R.string.report_screen, PostHelper.getTitle(post, null)); - - Site site = post.board.getSite(); - HttpUrl url = site.endpoints().report(post); - - WebView webView = new WebView(context); - - siteRequestModifier = site.requestModifier(); - if (siteRequestModifier != null) { - siteRequestModifier.modifyWebView(webView); - } - - WebSettings settings = webView.getSettings(); - settings.setJavaScriptEnabled(true); - settings.setDomStorageEnabled(true); - webView.loadUrl(url.toString()); - view = webView; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/SaveLocationController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/SaveLocationController.java deleted file mode 100644 index 70e48c4ee3..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/SaveLocationController.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.Manifest; -import android.content.Context; -import android.support.design.widget.FloatingActionButton; -import android.view.View; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.saver.FileWatcher; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.activity.StartActivity; -import org.floens.chan.ui.adapter.FilesAdapter; -import org.floens.chan.ui.helper.RuntimePermissionsHelper; -import org.floens.chan.ui.layout.FilesLayout; - -import java.io.File; - -import static org.floens.chan.R.string.save_location_storage_permission_required; -import static org.floens.chan.R.string.save_location_storage_permission_required_title; - -public class SaveLocationController extends Controller implements FileWatcher.FileWatcherCallback, FilesAdapter.Callback, FilesLayout.Callback, View.OnClickListener { - private static final String TAG = "SaveLocationController"; - - private FilesLayout filesLayout; - private FloatingActionButton setButton; - - private RuntimePermissionsHelper runtimePermissionsHelper; - private boolean gotPermission = false; - - private FileWatcher fileWatcher; - private FileWatcher.FileItems fileItems; - - public SaveLocationController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - navigation.setTitle(R.string.save_location_screen); - - view = inflateRes(R.layout.controller_save_location); - filesLayout = view.findViewById(R.id.files_layout); - filesLayout.setCallback(this); - setButton = view.findViewById(R.id.set_button); - setButton.setOnClickListener(this); - - File saveLocation = new File(ChanSettings.saveLocation.get()); - fileWatcher = new FileWatcher(this, saveLocation); - - runtimePermissionsHelper = ((StartActivity) context).getRuntimePermissionsHelper(); - gotPermission = hasPermission(); - if (gotPermission) { - initialize(); - } else { - requestPermission(); - } - } - - @Override - public void onClick(View v) { - if (v == setButton) { - File currentPath = fileWatcher.getCurrentPath(); - ChanSettings.saveLocation.set(currentPath.getAbsolutePath()); - navigationController.popController(); - } - } - - @Override - public void onFiles(FileWatcher.FileItems fileItems) { - this.fileItems = fileItems; - filesLayout.setFiles(fileItems); - } - - @Override - public void onBackClicked() { - fileWatcher.navigateUp(); - } - - @Override - public void onFileItemClicked(FileWatcher.FileItem fileItem) { - if (fileItem.canNavigate()) { - fileWatcher.navigateTo(fileItem.file); - } - // Else ignore, we only do folder selection here - } - - private boolean hasPermission() { - return runtimePermissionsHelper.hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); - } - - private void requestPermission() { - runtimePermissionsHelper.requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, new RuntimePermissionsHelper.Callback() { - @Override - public void onRuntimePermissionResult(boolean granted) { - gotPermission = granted; - if (gotPermission) { - initialize(); - } else { - runtimePermissionsHelper.showPermissionRequiredDialog( - context, - context.getString(save_location_storage_permission_required_title), - context.getString(save_location_storage_permission_required), - new RuntimePermissionsHelper.PermissionRequiredDialogCallback() { - @Override - public void retryPermissionRequest() { - requestPermission(); - } - } - ); - } - } - }); - } - - private void initialize() { - filesLayout.initialize(); - fileWatcher.initialize(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/SiteSetupController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/SiteSetupController.java deleted file mode 100644 index ec68625381..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/SiteSetupController.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.support.annotation.NonNull; - -import org.floens.chan.R; -import org.floens.chan.core.presenter.SiteSetupPresenter; -import org.floens.chan.core.settings.OptionsSetting; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.SiteSetting; -import org.floens.chan.ui.settings.LinkSettingView; -import org.floens.chan.ui.settings.ListSettingView; -import org.floens.chan.ui.settings.SettingsController; -import org.floens.chan.ui.settings.SettingsGroup; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; - -public class SiteSetupController extends SettingsController implements SiteSetupPresenter.Callback { - @Inject - SiteSetupPresenter presenter; - - private Site site; - private LinkSettingView boardsLink; - private LinkSettingView loginLink; - - public SiteSetupController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - inject(this); - - // Navigation - navigation.setTitle(R.string.settings_screen); - navigation.title = context.getString(R.string.setup_site_title, site.name()); - - // View binding - view = inflateRes(R.layout.settings_layout); - content = view.findViewById(R.id.scrollview_content); - - // Preferences - populatePreferences(); - - // Presenter - presenter.create(this, site); - - buildPreferences(); - } - - public void setSite(Site site) { - this.site = site; - } - - @Override - public void onShow() { - super.onShow(); - presenter.show(); - } - - @Override - public void setBoardCount(int boardCount) { - String boardsString = context.getResources().getQuantityString( - R.plurals.board, boardCount, boardCount); - String descriptionText = context.getString( - R.string.setup_site_boards_description, boardsString); - boardsLink.setDescription(descriptionText); - } - - @Override - public void setIsLoggedIn(boolean isLoggedIn) { - String text = context.getString(isLoggedIn ? - R.string.setup_site_login_description_enabled : - R.string.setup_site_login_description_disabled); - loginLink.setDescription(text); - } - - @Override - public void showSettings(List settings) { - SettingsGroup group = new SettingsGroup("Additional settings"); - - for (SiteSetting setting : settings) { - if (setting.type == SiteSetting.Type.OPTIONS) { - - // Turn the SiteSetting for a list of options into a proper setting with a - // name and a list of options, both given in the SiteSetting. - OptionsSetting optionsSetting = (OptionsSetting) setting.setting; - - List> items = new ArrayList<>(); - Enum[] settingItems = optionsSetting.getItems(); - for (int i = 0; i < settingItems.length; i++) { - String name = setting.optionNames.get(i); - Enum anEnum = settingItems[i]; - items.add(new ListSettingView.Item<>(name, anEnum)); - } - - ListSettingView v = getListSettingView(setting, optionsSetting, items); - - group.add(v); - } - } - - groups.add(group); - } - - @SuppressWarnings("unchecked") - @NonNull - private ListSettingView getListSettingView( - SiteSetting setting, - OptionsSetting optionsSetting, - List> items) { - // we know it's an enum - return (ListSettingView) new ListSettingView(this, - optionsSetting, setting.name, items); - } - - @Override - public void showLogin() { - SettingsGroup login = new SettingsGroup(R.string.setup_site_group_login); - - loginLink = new LinkSettingView( - this, - context.getString(R.string.setup_site_login), - "", - v -> { - LoginController loginController = new LoginController(context); - loginController.setSite(site); - navigationController.pushController(loginController); - } - ); - - login.add(loginLink); - - groups.add(login); - } - - private void populatePreferences() { - SettingsGroup general = new SettingsGroup(R.string.setup_site_group_general); - - boardsLink = new LinkSettingView( - this, - context.getString(R.string.setup_site_boards), - "", - v -> { - BoardSetupController boardSetupController = new BoardSetupController(context); - boardSetupController.setSite(site); - navigationController.pushController(boardSetupController); - }); - general.add(boardsLink); - - groups.add(general); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/SitesSetupController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/SitesSetupController.java deleted file mode 100644 index 9f7ac4b398..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/SitesSetupController.java +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.graphics.drawable.DrawableCompat; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.helper.ItemTouchHelper; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.core.presenter.SitesSetupPresenter; -import org.floens.chan.core.presenter.SitesSetupPresenter.SiteBoardCount; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.SiteIcon; -import org.floens.chan.ui.helper.HintPopup; -import org.floens.chan.ui.layout.SiteAddLayout; -import org.floens.chan.ui.view.CrossfadeView; -import org.floens.chan.ui.view.DividerItemDecoration; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.ui.theme.ThemeHelper.theme; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; -import static org.floens.chan.utils.AndroidUtils.setRoundItemBackground; - -public class SitesSetupController extends StyledToolbarNavigationController implements - SitesSetupPresenter.Callback, - View.OnClickListener { - - @Inject - SitesSetupPresenter presenter; - - private CrossfadeView crossfadeView; - private RecyclerView sitesRecyclerview; - private FloatingActionButton addButton; - - private HintPopup addBoardsHint; - - private SitesAdapter sitesAdapter; - private ItemTouchHelper itemTouchHelper; - private List sites = new ArrayList<>(); - - private ItemTouchHelper.SimpleCallback touchHelperCallback = new ItemTouchHelper.SimpleCallback( - ItemTouchHelper.UP | ItemTouchHelper.DOWN, - 0 - ) { - @Override - public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { - int from = viewHolder.getAdapterPosition(); - int to = target.getAdapterPosition(); - - presenter.move(from, to); - - return true; - } - - @Override - public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { - } - }; - - public SitesSetupController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - inject(this); - - // Inflate - view = inflateRes(R.layout.controller_sites_setup); - - // Navigation - navigation.setTitle(R.string.setup_sites_title); - - // View binding - crossfadeView = view.findViewById(R.id.crossfade); - sitesRecyclerview = view.findViewById(R.id.sites_recycler); - addButton = view.findViewById(R.id.add); - - // Adapters - sitesAdapter = new SitesAdapter(); - - // View setup - sitesRecyclerview.setLayoutManager(new LinearLayoutManager(context)); - sitesRecyclerview.setAdapter(sitesAdapter); - sitesRecyclerview.addItemDecoration( - new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); - itemTouchHelper = new ItemTouchHelper(touchHelperCallback); - itemTouchHelper.attachToRecyclerView(sitesRecyclerview); - addButton.setOnClickListener(this); - theme().applyFabColor(addButton); - crossfadeView.toggle(false, false); - - // Presenter - presenter.create(this); - } - - @Override - public void onShow() { - super.onShow(); - - presenter.show(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - presenter.destroy(); - } - - @Override - public void onClick(View v) { - if (v == addButton) { - presenter.onShowDialogClicked(); - } - } - - @Override - public void showHint() { - String s = context.getString(R.string.setup_sites_add_hint); - HintPopup popup = new HintPopup(context, addButton, s, 0, 0, true); - popup.wiggle(); - popup.show(); - } - - @Override - public void showAddDialog() { - @SuppressLint("InflateParams") final SiteAddLayout dialogView = - (SiteAddLayout) LayoutInflater.from(context) - .inflate(R.layout.layout_site_add, null); - - dialogView.setPresenter(presenter); - - final AlertDialog dialog = new AlertDialog.Builder(context) - .setView(dialogView) - .setTitle(R.string.setup_sites_add_title) - .setPositiveButton(R.string.add, null) - .setNegativeButton(R.string.cancel, null) - .create(); - - dialogView.setDialog(dialog); - - dialog.show(); - - Button positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE); - positiveButton.setOnClickListener((v) -> { - dialogView.onPositiveClicked(); - }); - } - - @Override - public void openSiteConfiguration(Site site) { - SiteSetupController c = new SiteSetupController(context); - c.setSite(site); - navigationController.pushController(c); - } - - @Override - public void setSites(List sites) { - this.sites.clear(); - this.sites.addAll(sites); - sitesAdapter.notifyDataSetChanged(); - - crossfadeView.toggle(!sites.isEmpty(), true); - } - - private void onSiteCellSettingsClicked(Site site) { - presenter.onSiteCellSettingsClicked(site); - } - - private class SitesAdapter extends RecyclerView.Adapter { - public SitesAdapter() { - setHasStableIds(true); - } - - @Override - public long getItemId(int position) { - return sites.get(position).site.id(); - } - - @NonNull - @Override - public SiteCell onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new SiteCell(LayoutInflater.from(context).inflate(R.layout.cell_site, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull SiteCell holder, int position) { - SiteBoardCount site = sites.get(position); - holder.setSite(site.site); - holder.setSiteIcon(site.site); - holder.text.setText(site.site.name()); - - int boards = site.boardCount; - String boardsString = context.getResources().getQuantityString(R.plurals.board, boards, boards); - String descriptionText = context.getString(R.string.setup_sites_site_description, boardsString); - holder.description.setText(descriptionText); - - if (boards == 0) { - if (addBoardsHint != null) { - addBoardsHint.dismiss(); - } - addBoardsHint = HintPopup.show(context, holder.settings, R.string.setup_sites_add_boards_hint); - addBoardsHint.wiggle(); - } - } - - @Override - public int getItemCount() { - return sites.size(); - } - } - - private class SiteCell extends RecyclerView.ViewHolder implements View.OnClickListener { - private ImageView image; - private TextView text; - private TextView description; - private SiteIcon siteIcon; - private ImageView settings; - private ImageView reorder; - - private Site site; - - @SuppressLint("ClickableViewAccessibility") - public SiteCell(View itemView) { - super(itemView); - - // Bind views - image = itemView.findViewById(R.id.image); - text = itemView.findViewById(R.id.text); - description = itemView.findViewById(R.id.description); - settings = itemView.findViewById(R.id.settings); - reorder = itemView.findViewById(R.id.reorder); - - // Setup views - itemView.setOnClickListener(this); - setRoundItemBackground(settings); - theme().settingsDrawable.apply(settings); - - Drawable drawable = DrawableCompat.wrap( - context.getResources().getDrawable(R.drawable.ic_reorder_black_24dp)).mutate(); - DrawableCompat.setTint(drawable, getAttrColor(context, R.attr.text_color_hint)); - reorder.setImageDrawable(drawable); - - reorder.setOnTouchListener((v, event) -> { - if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { - itemTouchHelper.startDrag(this); - } - return false; - }); - } - - private void setSite(Site site) { - this.site = site; - } - - private void setSiteIcon(Site site) { - siteIcon = site.icon(); - siteIcon.get((siteIcon, icon) -> { - if (SiteCell.this.siteIcon == siteIcon) { - image.setImageDrawable(icon); - } - }); - } - - @Override - public void onClick(View v) { - if (v == itemView) { - onSiteCellSettingsClicked(site); - } - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/StyledToolbarNavigationController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/StyledToolbarNavigationController.java deleted file mode 100644 index 21b5df6967..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/StyledToolbarNavigationController.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.controller.ControllerTransition; -import org.floens.chan.controller.ui.NavigationControllerContainerLayout; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.theme.ThemeHelper; -import org.floens.chan.ui.toolbar.Toolbar; - -public class StyledToolbarNavigationController extends ToolbarNavigationController { - public StyledToolbarNavigationController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - view = inflateRes(R.layout.controller_navigation_toolbar); - container = (NavigationControllerContainerLayout) view.findViewById(R.id.container); - NavigationControllerContainerLayout nav = (NavigationControllerContainerLayout) container; - nav.setNavigationController(this); - nav.setSwipeEnabled(ChanSettings.controllerSwipeable.get()); - toolbar = view.findViewById(R.id.toolbar); - toolbar.setBackgroundColor(ThemeHelper.getInstance().getTheme().primaryColor.color); - toolbar.setCallback(this); - } - - @Override - public boolean popController(ControllerTransition controllerTransition) { - return !toolbar.isTransitioning() && super.popController(controllerTransition); - - } - - @Override - public boolean pushController(Controller to, ControllerTransition controllerTransition) { - return !toolbar.isTransitioning() && super.pushController(to, controllerTransition); - } - - @Override - public void transition(Controller from, Controller to, boolean pushing, ControllerTransition controllerTransition) { - super.transition(from, to, pushing, controllerTransition); - - if (to != null) { - DrawerController drawerController = getDrawerController(); - if (drawerController != null) { - drawerController.setDrawerEnabled(to.navigation.hasDrawer); - } - } - } - - @Override - public void endSwipeTransition(Controller from, Controller to, boolean finish) { - super.endSwipeTransition(from, to, finish); - - if (finish) { - DrawerController drawerController = getDrawerController(); - if (drawerController != null) { - drawerController.setDrawerEnabled(to.navigation.hasDrawer); - } - } - } - - @Override - public boolean onBack() { - if (super.onBack()) { - return true; - } else if (parentController instanceof PopupController && childControllers.size() == 1) { - ((PopupController) parentController).dismiss(); - return true; - } else if (doubleNavigationController != null && childControllers.size() == 1) { - if (doubleNavigationController.getRightController() == this) { - doubleNavigationController.setRightController(null); - return true; - } else { - return false; - } - } else { - return false; - } - } - - @Override - public void onMenuClicked() { - DrawerController drawerController = getDrawerController(); - if (drawerController != null) { - drawerController.onMenuClicked(); - } - } - - private DrawerController getDrawerController() { - if (parentController instanceof DrawerController) { - return (DrawerController) parentController; - } else if (doubleNavigationController != null) { - Controller doubleNav = (Controller) doubleNavigationController; - if (doubleNav.parentController instanceof DrawerController) { - return (DrawerController) doubleNav.parentController; - } - } - return null; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java deleted file mode 100644 index 3f2fdf6e3c..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java +++ /dev/null @@ -1,419 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.Color; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.view.ViewPager; -import android.support.v7.view.ContextThemeWrapper; -import android.text.SpannableString; -import android.text.TextUtils; -import android.text.method.LinkMovementMethod; -import android.text.style.ClickableSpan; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.PostLinkable; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.core.site.parser.CommentParser; -import org.floens.chan.core.site.common.DefaultPostParser; -import org.floens.chan.core.site.parser.PostParser; -import org.floens.chan.ui.activity.StartActivity; -import org.floens.chan.ui.cell.PostCell; -import org.floens.chan.ui.theme.Theme; -import org.floens.chan.ui.theme.ThemeHelper; -import org.floens.chan.ui.toolbar.NavigationItem; -import org.floens.chan.ui.toolbar.Toolbar; -import org.floens.chan.ui.view.FloatingMenu; -import org.floens.chan.ui.view.FloatingMenuItem; -import org.floens.chan.ui.view.ThumbnailView; -import org.floens.chan.ui.view.ViewPagerAdapter; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.Time; - -import java.util.ArrayList; -import java.util.List; - -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class ThemeSettingsController extends Controller implements View.OnClickListener { - private Board dummyBoard; - - { - dummyBoard = new Board(); - dummyBoard.name = "name"; - dummyBoard.code = "code"; - } - - private Loadable dummyLoadable; - - { - dummyLoadable = Loadable.emptyLoadable(); - dummyLoadable.mode = Loadable.Mode.THREAD; - } - - private PostCell.PostCellCallback dummyPostCallback = new PostCell.PostCellCallback() { - @Override - public Loadable getLoadable() { - return dummyLoadable; - } - - @Override - public void onPostClicked(Post post) { - } - - @Override - public void onThumbnailClicked(Post post, PostImage postImage, ThumbnailView thumbnail) { - } - - @Override - public void onShowPostReplies(Post post) { - } - - @Override - public Object onPopulatePostOptions(Post post, List menu, List extraMenu) { - menu.add(new FloatingMenuItem(1, "Option")); - return 0; - } - - @Override - public void onPostOptionClicked(Post post, Object id) { - } - - @Override - public void onPostLinkableClicked(Post post, PostLinkable linkable) { - } - - @Override - public void onPostNoClicked(Post post) { - } - - @Override - public void onPostSelectionQuoted(Post post, CharSequence quoted) { - } - }; - - private PostParser.Callback parserCallback = new PostParser.Callback() { - @Override - public boolean isSaved(int postNo) { - return false; - } - - @Override - public boolean isInternal(int postNo) { - return false; - } - }; - - private ViewPager pager; - private FloatingActionButton done; - private TextView textView; - - private Adapter adapter; - private ThemeHelper themeHelper; - - private List themes; - private List selectedPrimaryColors = new ArrayList<>(); - private ThemeHelper.PrimaryColor selectedAccentColor; - - public ThemeSettingsController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - navigation.setTitle(R.string.settings_screen_theme); - navigation.swipeable = false; - view = inflateRes(R.layout.controller_theme); - - themeHelper = ThemeHelper.getInstance(); - themes = themeHelper.getThemes(); - - pager = view.findViewById(R.id.pager); - done = view.findViewById(R.id.add); - done.setOnClickListener(this); - - textView = view.findViewById(R.id.text); - - SpannableString changeAccentColor = new SpannableString(getString(R.string.setting_theme_accent)); - changeAccentColor.setSpan(new ClickableSpan() { - @Override - public void onClick(View widget) { - showAccentColorPicker(); - } - }, 0, changeAccentColor.length(), 0); - - textView.setText(TextUtils.concat(getString(R.string.setting_theme_explanation), changeAccentColor)); - textView.setMovementMethod(LinkMovementMethod.getInstance()); - - adapter = new Adapter(); - pager.setAdapter(adapter); - - ChanSettings.ThemeColor currentSettingsTheme = ChanSettings.getThemeAndColor(); - for (int i = 0; i < themeHelper.getThemes().size(); i++) { - Theme theme = themeHelper.getThemes().get(i); - ThemeHelper.PrimaryColor primaryColor = theme.primaryColor; - - if (theme.name.equals(currentSettingsTheme.theme)) { - // Current theme - pager.setCurrentItem(i, false); - } - selectedPrimaryColors.add(primaryColor); - } - selectedAccentColor = themeHelper.getTheme().accentColor; - done.setBackgroundTintList(ColorStateList.valueOf(selectedAccentColor.color)); - } - - @Override - public void onClick(View v) { - if (v == done) { - saveTheme(); - } - } - - private void saveTheme() { - int currentItem = pager.getCurrentItem(); - Theme selectedTheme = themeHelper.getThemes().get(currentItem); - ThemeHelper.PrimaryColor selectedColor = selectedPrimaryColors.get(currentItem); - themeHelper.changeTheme(selectedTheme, selectedColor, selectedAccentColor); - ((StartActivity) context).restart(); - } - - private void showAccentColorPicker() { - List items = new ArrayList<>(); - FloatingMenuItem selected = null; - for (ThemeHelper.PrimaryColor color : themeHelper.getColors()) { - FloatingMenuItem floatingMenuItem = new FloatingMenuItem(new ColorsAdapterItem(color, color.color), color.displayName); - items.add(floatingMenuItem); - if (color == selectedAccentColor) { - selected = floatingMenuItem; - } - } - - FloatingMenu menu = getColorsMenu(items, selected, textView); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - ColorsAdapterItem colorItem = (ColorsAdapterItem) item.getId(); - selectedAccentColor = colorItem.color; - done.setBackgroundTintList(ColorStateList.valueOf(selectedAccentColor.color)); - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - - } - }); - menu.setPopupWidth(dp(200)); - menu.setPopupHeight(dp(300)); - menu.show(); - } - - private FloatingMenu getColorsMenu(List items, FloatingMenuItem selected, View anchor) { - FloatingMenu menu = new FloatingMenu(context); - - menu.setItems(items); - menu.setAdapter(new ColorsAdapter(items)); - menu.setSelectedItem(selected); - menu.setAnchor(anchor, Gravity.CENTER, 0, dp(5)); - menu.setPopupWidth(anchor.getWidth()); - return menu; - } - - private class Adapter extends ViewPagerAdapter { - public Adapter() { - } - - @Override - public CharSequence getPageTitle(int position) { - return super.getPageTitle(position); - } - - @Override - public View getView(final int position, ViewGroup parent) { - final Theme theme = themes.get(position); - - Context themeContext = new ContextThemeWrapper(context, theme.resValue); - - Post.Builder builder = new Post.Builder() - .board(dummyBoard) - .id(123456789) - .opId(1) - .setUnixTimestampSeconds((Time.get() - (30 * 60 * 1000)) / 1000) - .subject("Lorem ipsum") - .comment(">>123456789
" + - "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
" + - "
" + - ">>123456789
" + - "http://example.com/" + - "
" + - "Phasellus consequat semper sodales. Donec dolor lectus, aliquet nec mollis vel, rutrum vel enim."); - Post post = new DefaultPostParser(new CommentParser()).parse(theme, builder, parserCallback); - - LinearLayout linearLayout = new LinearLayout(themeContext); - linearLayout.setOrientation(LinearLayout.VERTICAL); - linearLayout.setBackgroundColor(getAttrColor(themeContext, R.attr.backcolor)); - - final Toolbar toolbar = new Toolbar(themeContext); - final View.OnClickListener colorClick = new View.OnClickListener() { - @Override - public void onClick(View v) { - List items = new ArrayList<>(); - FloatingMenuItem selected = null; - for (ThemeHelper.PrimaryColor color : themeHelper.getColors()) { - FloatingMenuItem floatingMenuItem = new FloatingMenuItem(new ColorsAdapterItem(color, color.color500), color.displayName); - items.add(floatingMenuItem); - if (color == selectedPrimaryColors.get(position)) { - selected = floatingMenuItem; - } - } - - FloatingMenu menu = getColorsMenu(items, selected, toolbar); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - ColorsAdapterItem colorItem = (ColorsAdapterItem) item.getId(); - selectedPrimaryColors.set(position, colorItem.color); - toolbar.setBackgroundColor(colorItem.color.color); - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - }); - menu.show(); - } - }; - toolbar.setCallback(new Toolbar.ToolbarCallback() { - @Override - public void onMenuOrBackClicked(boolean isArrow) { - colorClick.onClick(toolbar); - } - - @Override - public void onSearchVisibilityChanged(NavigationItem item, boolean visible) { - } - - @Override - public String getSearchHint(NavigationItem item) { - return null; - } - - @Override - public void onSearchEntered(NavigationItem item, String entered) { - } - }); - toolbar.setBackgroundColor(theme.primaryColor.color); - final NavigationItem item = new NavigationItem(); - item.title = theme.displayName; - item.hasBack = false; - toolbar.setNavigationItem(false, true, item); - toolbar.setOnClickListener(colorClick); - - linearLayout.addView(toolbar, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, - themeContext.getResources().getDimensionPixelSize(R.dimen.toolbar_height))); - - PostCell postCell = (PostCell) LayoutInflater.from(themeContext).inflate(R.layout.cell_post, null); - postCell.setPost(theme, - post, - dummyPostCallback, - false, - false, - false, - -1, - true, - ChanSettings.PostViewMode.LIST, - false); - linearLayout.addView(postCell, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); - - return linearLayout; - } - - @Override - public int getCount() { - return themes.size(); - } - } - - private class ColorsAdapter extends BaseAdapter { - private List items; - - public ColorsAdapter(List items) { - this.items = items; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - @SuppressLint("ViewHolder") - TextView textView = (TextView) LayoutInflater.from(context).inflate(R.layout.toolbar_menu_item, parent, false); - textView.setText(getItem(position)); - textView.setTypeface(AndroidUtils.ROBOTO_MEDIUM); - - ColorsAdapterItem color = (ColorsAdapterItem) items.get(position).getId(); - - textView.setBackgroundColor(color.bg); - boolean lightColor = (Color.red(color.bg) * 0.299f) + (Color.green(color.bg) * 0.587f) + (Color.blue(color.bg) * 0.114f) > 125f; - textView.setTextColor(lightColor ? 0xff000000 : 0xffffffff); - - return textView; - } - - @Override - public int getCount() { - return items.size(); - } - - @Override - public String getItem(int position) { - return items.get(position).getText(); - } - - @Override - public long getItemId(int position) { - return position; - } - } - - private static class ColorsAdapterItem { - public ThemeHelper.PrimaryColor color; - public int bg; - - public ColorsAdapterItem(ThemeHelper.PrimaryColor color, int bg) { - this.color = color; - this.bg = bg; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadController.java deleted file mode 100644 index d4709675ef..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadController.java +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.nfc.NdefMessage; -import android.nfc.NdefRecord; -import android.nfc.NfcAdapter; -import android.nfc.NfcEvent; -import android.support.v4.widget.SwipeRefreshLayout; -import android.view.KeyEvent; -import android.view.LayoutInflater; - -import org.floens.chan.Chan; -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.manager.FilterType; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.orm.Filter; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.model.orm.Pin; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.helper.RefreshUIMessage; -import org.floens.chan.ui.layout.ThreadLayout; -import org.floens.chan.ui.toolbar.Toolbar; -import org.floens.chan.ui.view.ThumbnailView; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.Logger; - -import java.util.List; - -import de.greenrobot.event.EventBus; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public abstract class ThreadController extends Controller implements - ThreadLayout.ThreadLayoutCallback, - ImageViewerController.ImageViewerCallback, - SwipeRefreshLayout.OnRefreshListener, - ToolbarNavigationController.ToolbarSearchCallback, - NfcAdapter.CreateNdefMessageCallback, - ThreadSlideController.SlideChangeListener { - private static final String TAG = "ThreadController"; - - protected ThreadLayout threadLayout; - private SwipeRefreshLayout swipeRefreshLayout; - - public ThreadController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - EventBus.getDefault().register(this); - - navigation.handlesToolbarInset = true; - - threadLayout = (ThreadLayout) LayoutInflater.from(context).inflate(R.layout.layout_thread, null); - threadLayout.create(this); - - swipeRefreshLayout = new SwipeRefreshLayout(context) { - @Override - public boolean canChildScrollUp() { - return threadLayout.canChildScrollUp(); - } - }; - swipeRefreshLayout.addView(threadLayout); - - swipeRefreshLayout.setOnRefreshListener(this); - - if (navigation.handlesToolbarInset) { - int toolbarHeight = getToolbar().getToolbarHeight(); - swipeRefreshLayout.setProgressViewOffset(false, toolbarHeight - dp(40), toolbarHeight + dp(64 - 40)); - } - - view = swipeRefreshLayout; - } - - @Override - public void onDestroy() { - super.onDestroy(); - - threadLayout.destroy(); - - EventBus.getDefault().unregister(this); - } - - public void showSitesNotSetup() { - threadLayout.getPresenter().showNoContent(); - } - - public abstract void openPin(Pin pin); - - /* - * Used to save instance state - */ - public Loadable getLoadable() { - return threadLayout.getPresenter().getLoadable(); - } - - public void selectPost(int post) { - threadLayout.getPresenter().selectPost(post); - } - - @Override - public boolean onBack() { - return threadLayout.onBack(); - } - - @Override - public boolean dispatchKeyEvent(KeyEvent event) { - return threadLayout.sendKeyEvent(event) || super.dispatchKeyEvent(event); - } - - public void onEvent(Chan.ForegroundChangedMessage message) { - threadLayout.getPresenter().onForegroundChanged(message.inForeground); - } - - public void onEvent(RefreshUIMessage message) { - threadLayout.getPresenter().requestData(); - } - - @Override - public void onRefresh() { - threadLayout.refreshFromSwipe(); - } - - @Override - public NdefMessage createNdefMessage(NfcEvent event) { - Loadable loadable = getLoadable(); - String url = null; - NdefMessage message = null; - - if (loadable != null) { - url = loadable.site.resolvable().desktopUrl(loadable, null); - } - - if (url != null) { - try { - Logger.d(TAG, "Pushing url " + url + " to android beam"); - NdefRecord record = NdefRecord.createUri(url); - message = new NdefMessage(new NdefRecord[]{record}); - } catch (IllegalArgumentException e) { - Logger.e(TAG, "NdefMessage create error", e); - } - } - - return message; - } - - public void presentRepliesController(Controller controller) { - presentController(controller); - } - - @Override - public void openReportController(final Post post) { - navigationController.pushController(new ReportController(context, post)); - } - - public void selectPostImage(PostImage postImage) { - threadLayout.getPresenter().selectPostImage(postImage); - } - - @Override - public void showImages(List images, int index, Loadable loadable, final ThumbnailView thumbnail) { - // Just ignore the showImages request when the image is not loaded - if (thumbnail.getBitmap() != null) { - final ImageViewerNavigationController imageViewerNavigationController = new ImageViewerNavigationController(context); - presentController(imageViewerNavigationController, false); - imageViewerNavigationController.showImages(images, index, loadable, this); - } - } - - @Override - public ThumbnailView getPreviewImageTransitionView(ImageViewerController imageViewerController, PostImage postImage) { - return threadLayout.getThumbnail(postImage); - } - - public void onPreviewCreate(ImageViewerController imageViewerController) { -// presentingImageView.setVisibility(View.INVISIBLE); - } - - @Override - public void onPreviewDestroy(ImageViewerController imageViewerController) { -// presentingImageView.setVisibility(View.VISIBLE); -// presentingImageView = null; - } - - @Override - public void scrollToImage(PostImage postImage) { - threadLayout.getPresenter().scrollToImage(postImage, true); - } - - @Override - public void showAlbum(List images, int index) { - if (threadLayout.getPresenter().getChanThread() != null) { - AlbumViewController albumViewController = new AlbumViewController(context); - albumViewController.setImages(getLoadable(), images, index, navigation.title); - - if (doubleNavigationController != null) { - doubleNavigationController.pushController(albumViewController); - } else { - navigationController.pushController(albumViewController); - } - } - } - - @Override - public void onShowPosts() { - } - - @Override - public void hideSwipeRefreshLayout() { - swipeRefreshLayout.setRefreshing(false); - } - - @Override - public Toolbar getToolbar() { - if (navigationController instanceof ToolbarNavigationController) { - return navigationController.getToolbar(); - } else { - return null; - } - } - - @Override - public boolean shouldToolbarCollapse() { - return !AndroidUtils.isTablet(context) && !ChanSettings.neverHideToolbar.get(); - } - - @Override - public void onSearchVisibilityChanged(boolean visible) { - threadLayout.getPresenter().onSearchVisibilityChanged(visible); - } - - @Override - public void onSearchEntered(String entered) { - threadLayout.getPresenter().onSearchEntered(entered); - } - - @Override - public void openFilterForTripcode(String tripcode) { - FiltersController filtersController = new FiltersController(context); - if (doubleNavigationController != null) { - doubleNavigationController.pushController(filtersController); - } else { - navigationController.pushController(filtersController); - } - // TODO cleanup - Filter filter = new Filter(); - filter.type = FilterType.TRIPCODE.flag; - filter.pattern = tripcode; - filtersController.showFilterDialog(filter); - } - - @Override - public void onSlideChanged() { - threadLayout.gainedFocus(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadSlideController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadSlideController.java deleted file mode 100644 index cd85ca20d9..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadSlideController.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.support.v4.widget.SlidingPaneLayout; -import android.view.View; -import android.view.ViewGroup; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.controller.ControllerTransition; -import org.floens.chan.ui.layout.ThreadSlidingPaneLayout; -import org.floens.chan.ui.toolbar.NavigationItem; -import org.floens.chan.ui.toolbar.Toolbar; -import org.floens.chan.utils.Logger; - -import java.lang.reflect.Field; - -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; - -public class ThreadSlideController extends Controller implements DoubleNavigationController, SlidingPaneLayout.PanelSlideListener, ToolbarNavigationController.ToolbarSearchCallback { - private static final String TAG = "ThreadSlideController"; - - public Controller leftController; - public Controller rightController; - - private boolean leftOpen = true; - private ViewGroup emptyView; - private ThreadSlidingPaneLayout slidingPaneLayout; - - public ThreadSlideController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - doubleNavigationController = this; - - navigation.swipeable = false; - navigation.handlesToolbarInset = true; - navigation.hasDrawer = true; - - view = inflateRes(R.layout.controller_thread_slide); - - slidingPaneLayout = view.findViewById(R.id.sliding_pane_layout); - slidingPaneLayout.setThreadSlideController(this); - slidingPaneLayout.setPanelSlideListener(this); - slidingPaneLayout.setParallaxDistance(dp(100)); - slidingPaneLayout.setShadowResourceLeft(R.drawable.panel_shadow); - int fadeColor = (getAttrColor(context, R.attr.backcolor) & 0xffffff) + 0xCC000000; - slidingPaneLayout.setSliderFadeColor(fadeColor); - slidingPaneLayout.openPane(); - - setLeftController(null); - setRightController(null); - } - - public void onSlidingPaneLayoutStateRestored() { - // SlidingPaneLayout does some annoying things for state restoring and incorrectly - // tells us if the restored state was open or closed - // We need to use reflection to get the private field that stores this correct state - boolean restoredOpen = false; - try { - Field field = SlidingPaneLayout.class.getDeclaredField("mPreservedOpenState"); - field.setAccessible(true); - restoredOpen = field.getBoolean(slidingPaneLayout); - } catch (Exception e) { - Logger.e(TAG, "Error getting restored open state with reflection", e); - } - if (restoredOpen != leftOpen) { - leftOpen = restoredOpen; - slideStateChanged(leftOpen); - } - } - - @Override - public void onPanelSlide(View panel, float slideOffset) { - } - - @Override - public void onPanelOpened(View panel) { - if (this.leftOpen != leftOpen()) { - this.leftOpen = leftOpen(); - slideStateChanged(leftOpen()); - } - } - - @Override - public void onPanelClosed(View panel) { - if (this.leftOpen != leftOpen()) { - this.leftOpen = leftOpen(); - slideStateChanged(leftOpen()); - } - } - - @Override - public void switchToController(boolean leftController) { - if (leftController != leftOpen()) { - if (leftController) { - slidingPaneLayout.openPane(); - } else { - slidingPaneLayout.closePane(); - } - Toolbar toolbar = ((ToolbarNavigationController) navigationController).toolbar; - toolbar.processScrollCollapse(Toolbar.TOOLBAR_COLLAPSE_SHOW, true); - - if (slidingPaneLayout.getWidth() == 0) { - // It won't tell us it switched when it's not laid out yet. - leftOpen = leftController; - slideStateChanged(leftController); - } - } - } - - @Override - public void setEmptyView(ViewGroup emptyView) { - this.emptyView = emptyView; - } - - public void setLeftController(Controller leftController) { - if (this.leftController != null) { - this.leftController.onHide(); - removeChildController(this.leftController); - } - - this.leftController = leftController; - - if (leftController != null) { - addChildController(leftController); - leftController.attachToParentView(slidingPaneLayout.leftPane); - leftController.onShow(); - if (leftOpen()) { - setParentNavigationItem(true); - } - } - } - - public void setRightController(Controller rightController) { - if (this.rightController != null) { - this.rightController.onHide(); - removeChildController(this.rightController); - } else { - this.slidingPaneLayout.rightPane.removeAllViews(); - } - - this.rightController = rightController; - - if (rightController != null) { - addChildController(rightController); - rightController.attachToParentView(slidingPaneLayout.rightPane); - rightController.onShow(); - if (!leftOpen()) { - setParentNavigationItem(false); - } - } else { - slidingPaneLayout.rightPane.addView(emptyView); - } - } - - @Override - public Controller getLeftController() { - return leftController; - } - - @Override - public Controller getRightController() { - return rightController; - } - - @Override - public boolean pushController(Controller to) { - return navigationController.pushController(to); - } - - @Override - public boolean pushController(Controller to, boolean animated) { - return navigationController.pushController(to, animated); - } - - @Override - public boolean pushController(Controller to, ControllerTransition controllerTransition) { - return navigationController.pushController(to, controllerTransition); - } - - @Override - public boolean popController() { - return navigationController.popController(); - } - - @Override - public boolean popController(boolean animated) { - return navigationController.popController(animated); - } - - @Override - public boolean popController(ControllerTransition controllerTransition) { - return navigationController.popController(controllerTransition); - } - - @Override - public boolean onBack() { - if (!leftOpen()) { - if (rightController != null && rightController.onBack()) { - return true; - } else { - switchToController(true); - return true; - } - } else { - if (leftController != null && leftController.onBack()) { - return true; - } - } - - return super.onBack(); - } - - @Override - public void onSearchVisibilityChanged(boolean visible) { - if (leftOpen() && leftController != null && leftController instanceof ToolbarNavigationController.ToolbarSearchCallback) { - ((ToolbarNavigationController.ToolbarSearchCallback) leftController).onSearchVisibilityChanged(visible); - } - if (!leftOpen() && rightController != null && rightController instanceof ToolbarNavigationController.ToolbarSearchCallback) { - ((ToolbarNavigationController.ToolbarSearchCallback) rightController).onSearchVisibilityChanged(visible); - } - } - - @Override - public void onSearchEntered(String entered) { - if (leftOpen() && leftController != null && leftController instanceof ToolbarNavigationController.ToolbarSearchCallback) { - ((ToolbarNavigationController.ToolbarSearchCallback) leftController).onSearchEntered(entered); - } - if (!leftOpen() && rightController != null && rightController instanceof ToolbarNavigationController.ToolbarSearchCallback) { - ((ToolbarNavigationController.ToolbarSearchCallback) rightController).onSearchEntered(entered); - } - } - - private boolean leftOpen() { - return slidingPaneLayout.isOpen(); - } - - private void slideStateChanged(boolean leftOpen) { - setParentNavigationItem(leftOpen); - - notifySlideChanged(leftOpen ? leftController : rightController); - } - - private void notifySlideChanged(Controller controller) { - if (controller == null) { - return; - } - - if (controller instanceof SlideChangeListener) { - ((SlideChangeListener) controller).onSlideChanged(); - } - - for (Controller childController : controller.childControllers) { - notifySlideChanged(childController); - } - } - - private void setParentNavigationItem(boolean left) { - Toolbar toolbar = ((ToolbarNavigationController) navigationController).toolbar; - - NavigationItem item = null; - if (left) { - if (leftController != null) { - item = leftController.navigation; - } - } else { - if (rightController != null) { - item = rightController.navigation; - } - } - - if (item != null) { - navigation = item; - navigation.swipeable = false; - navigation.handlesToolbarInset = true; - navigation.hasDrawer = true; - toolbar.setNavigationItem(false, true, navigation); - } - } - - public interface SlideChangeListener { - void onSlideChanged(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ToolbarNavigationController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ToolbarNavigationController.java deleted file mode 100644 index dcca6676f4..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ToolbarNavigationController.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.widget.FrameLayout; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.controller.ControllerTransition; -import org.floens.chan.controller.NavigationController; -import org.floens.chan.ui.toolbar.NavigationItem; -import org.floens.chan.ui.toolbar.Toolbar; - -public abstract class ToolbarNavigationController extends NavigationController implements Toolbar.ToolbarCallback { - protected Toolbar toolbar; - protected boolean requireSpaceForToolbar = true; - - public ToolbarNavigationController(Context context) { - super(context); - } - - @Override - public Toolbar getToolbar() { - return toolbar; - } - - public void showSearch() { - toolbar.openSearch(); - } - - @Override - public void transition(Controller from, Controller to, boolean pushing, ControllerTransition controllerTransition) { - super.transition(from, to, pushing, controllerTransition); - - if (to != null) { - toolbar.setNavigationItem(controllerTransition != null, pushing, to.navigation); - updateToolbarCollapse(to, controllerTransition != null); - } - } - - @Override - public boolean beginSwipeTransition(Controller from, Controller to) { - if (!super.beginSwipeTransition(from, to)) { - return false; - } - - toolbar.processScrollCollapse(Toolbar.TOOLBAR_COLLAPSE_SHOW, true); - toolbar.beginTransition(to.navigation); - toolbar.transitionProgress(0f); - - return true; - } - - @Override - public void swipeTransitionProgress(float progress) { - super.swipeTransitionProgress(progress); - - toolbar.transitionProgress(progress); - } - - @Override - public void endSwipeTransition(Controller from, Controller to, boolean finish) { - super.endSwipeTransition(from, to, finish); - - toolbar.finishTransition(finish); - updateToolbarCollapse(finish ? to : from, controllerTransition != null); - } - - @Override - public void onMenuOrBackClicked(boolean isArrow) { - if (isArrow) { - onBack(); - } else { - onMenuClicked(); - } - } - - public void onMenuClicked() { - } - - @Override - public boolean onBack() { - return toolbar.closeSearch() || super.onBack(); - } - - @Override - public String getSearchHint(NavigationItem item) { - return context.getString(R.string.search_hint); - } - - @Override - public void onSearchVisibilityChanged(NavigationItem item, boolean visible) { - for (Controller controller : childControllers) { - if (controller.navigation == item) { - ((ToolbarSearchCallback) controller).onSearchVisibilityChanged(visible); - break; - } - } - } - - @Override - public void onSearchEntered(NavigationItem item, String entered) { - for (Controller controller : childControllers) { - if (controller.navigation == item) { - ((ToolbarSearchCallback) controller).onSearchEntered(entered); - break; - } - } - } - - protected void updateToolbarCollapse(Controller controller, boolean animate) { - if (requireSpaceForToolbar && !controller.navigation.handlesToolbarInset) { - FrameLayout.LayoutParams toViewParams = (FrameLayout.LayoutParams) controller.view.getLayoutParams(); - toViewParams.topMargin = toolbar.getToolbarHeight(); - controller.view.setLayoutParams(toViewParams); - } - - toolbar.processScrollCollapse(Toolbar.TOOLBAR_COLLAPSE_SHOW, animate); - } - - public interface ToolbarSearchCallback { - void onSearchVisibilityChanged(boolean visible); - - void onSearchEntered(String entered); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java deleted file mode 100644 index 2bbfe83873..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.app.Activity; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.drawable.Drawable; -import android.support.v7.app.AlertDialog; -import android.view.View; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.controller.NavigationController; -import org.floens.chan.core.manager.WatchManager; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.model.orm.Pin; -import org.floens.chan.core.presenter.ThreadPresenter; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.helper.HintPopup; -import org.floens.chan.ui.layout.ThreadLayout; -import org.floens.chan.ui.toolbar.NavigationItem; -import org.floens.chan.ui.toolbar.ToolbarMenu; -import org.floens.chan.ui.toolbar.ToolbarMenuItem; -import org.floens.chan.ui.toolbar.ToolbarMenuSubItem; -import org.floens.chan.utils.AndroidUtils; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; - -public class ViewThreadController extends ThreadController implements ThreadLayout.ThreadLayoutCallback { - private static final int PIN_ID = 1; - - @Inject - WatchManager watchManager; - - private boolean pinItemPinned = false; - private Loadable loadable; - - public ViewThreadController(Context context) { - super(context); - } - - public void setLoadable(Loadable loadable) { - this.loadable = loadable; - } - - @Override - public void onCreate() { - super.onCreate(); - inject(this); - - threadLayout.setPostViewMode(ChanSettings.PostViewMode.LIST); - - view.setBackgroundColor(getAttrColor(context, R.attr.backcolor)); - - navigation.hasDrawer = true; - - NavigationItem.MenuOverflowBuilder menuOverflowBuilder = navigation.buildMenu() - .withItem(R.drawable.ic_image_white_24dp, this::albumClicked) - .withItem(PIN_ID, R.drawable.ic_bookmark_outline_white_24dp, this::pinClicked) - .withOverflow(); - - if (!ChanSettings.enableReplyFab.get()) { - menuOverflowBuilder.withSubItem(R.string.action_reply, this::replyClicked); - } - - menuOverflowBuilder - .withSubItem(R.string.action_search, this::searchClicked) - .withSubItem(R.string.action_reload, this::reloadClicked) - .withSubItem(R.string.action_open_browser, this::openBrowserClicked) - .withSubItem(R.string.action_share, this::shareClicked) - .withSubItem(R.string.action_scroll_to_top, this::upClicked) - .withSubItem(R.string.action_scroll_to_bottom, this::downClicked) - .build() - .build(); - - loadThread(loadable); - } - - private void albumClicked(ToolbarMenuItem item) { - threadLayout.getPresenter().showAlbum(); - } - - private void pinClicked(ToolbarMenuItem item) { - threadLayout.getPresenter().pin(); - setPinIconState(true); - updateDrawerHighlighting(loadable); - } - - private void searchClicked(ToolbarMenuSubItem item) { - ((ToolbarNavigationController) navigationController).showSearch(); - } - - private void replyClicked(ToolbarMenuSubItem item) { - threadLayout.openReply(true); - } - - private void reloadClicked(ToolbarMenuSubItem item) { - threadLayout.getPresenter().requestData(); - } - - private void openBrowserClicked(ToolbarMenuSubItem item) { - Loadable loadable = threadLayout.getPresenter().getLoadable(); - String link = loadable.site.resolvable().desktopUrl(loadable, null); - AndroidUtils.openLinkInBrowser((Activity) context, link); - } - - private void shareClicked(ToolbarMenuSubItem item) { - Loadable loadable = threadLayout.getPresenter().getLoadable(); - String link = loadable.site.resolvable().desktopUrl(loadable, null); - AndroidUtils.shareLink(link); - } - - private void upClicked(ToolbarMenuSubItem item) { - threadLayout.getPresenter().scrollTo(0, false); - } - - private void downClicked(ToolbarMenuSubItem item) { - threadLayout.getPresenter().scrollTo(-1, false); - } - - @Override - public void onShow() { - super.onShow(); - - ThreadPresenter presenter = threadLayout.getPresenter(); - if (presenter != null) { - setPinIconState(false); - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - updateDrawerHighlighting(null); - updateLeftPaneHighlighting(null); - } - - @Override - public void openPin(Pin pin) { - loadThread(pin.loadable); - } - - public void onEvent(WatchManager.PinAddedMessage message) { - setPinIconState(true); - } - - public void onEvent(WatchManager.PinRemovedMessage message) { - setPinIconState(true); - } - - public void onEvent(WatchManager.PinChangedMessage message) { - setPinIconState(false); - // Update title - if (message.pin.loadable == loadable) { - onShowPosts(); - } - } - - @Override - public void showThread(final Loadable threadLoadable) { - new AlertDialog.Builder(context) - .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(final DialogInterface dialog, final int which) { - loadThread(threadLoadable); - } - }) - .setTitle(R.string.open_thread_confirmation) - .setMessage("/" + threadLoadable.boardCode + "/" + threadLoadable.no) - .show(); - } - - public void loadThread(Loadable loadable) { - ThreadPresenter presenter = threadLayout.getPresenter(); - if (!loadable.equals(presenter.getLoadable())) { - presenter.bindLoadable(loadable); - this.loadable = presenter.getLoadable(); - navigation.title = loadable.title; - ((ToolbarNavigationController) navigationController).toolbar.updateTitle(navigation); - setPinIconState(false); - updateDrawerHighlighting(loadable); - updateLeftPaneHighlighting(loadable); - presenter.requestInitialData(); - - showHints(); - } - } - - private void showHints() { - int counter = ChanSettings.threadOpenCounter.increase(); - if (counter == 2) { - view.postDelayed(() -> { - View view = navigation.findItem(ToolbarMenu.OVERFLOW_ID).getView(); - if (view != null) { - HintPopup.show(context, view, context.getString(R.string.thread_up_down_hint), -dp(1), 0); - } - }, 600); - } else if (counter == 3) { - view.postDelayed(() -> { - View view = navigation.findItem(PIN_ID).getView(); - if (view != null) { - HintPopup.show(context, view, context.getString(R.string.thread_pin_hint), -dp(1), 0); - } - }, 600); - } - } - - @Override - public void onShowPosts() { - super.onShowPosts(); - - navigation.title = loadable.title; - ((ToolbarNavigationController) navigationController).toolbar.updateTitle(navigation); - } - - private void updateDrawerHighlighting(Loadable loadable) { - Pin pin = loadable == null ? null : watchManager.findPinByLoadable(loadable); - - if (navigationController.parentController instanceof DrawerController) { - ((DrawerController) navigationController.parentController).setPinHighlighted(pin); - } else if (doubleNavigationController != null) { - Controller doubleNav = (Controller) doubleNavigationController; - if (doubleNav.parentController instanceof DrawerController) { - ((DrawerController) doubleNav.parentController).setPinHighlighted(pin); - } - } - } - - private void updateLeftPaneHighlighting(Loadable loadable) { - if (doubleNavigationController != null) { - ThreadController threadController = null; - Controller leftController = doubleNavigationController.getLeftController(); - if (leftController instanceof ThreadController) { - threadController = (ThreadController) leftController; - } else if (leftController instanceof NavigationController) { - NavigationController leftNavigationController = (NavigationController) leftController; - for (Controller controller : leftNavigationController.childControllers) { - if (controller instanceof ThreadController) { - threadController = (ThreadController) controller; - break; - } - } - } - if (threadController != null) { - threadController.selectPost(loadable != null ? loadable.no : -1); - } - } - } - - private void setPinIconState(boolean animated) { - ThreadPresenter presenter = threadLayout.getPresenter(); - if (presenter != null) { - setPinIconStateDrawable(presenter.isPinned(), animated); - } - } - - private void setPinIconStateDrawable(boolean pinned, boolean animated) { - if (pinned == pinItemPinned) { - return; - } - pinItemPinned = pinned; - - Drawable outline = context.getResources().getDrawable( - R.drawable.ic_bookmark_outline_white_24dp); - Drawable white = context.getResources().getDrawable( - R.drawable.ic_bookmark_white_24dp); - - Drawable drawable = pinned ? white : outline; - - navigation.findItem(PIN_ID).setImage(drawable, animated); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java deleted file mode 100644 index 3177fe512c..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.controller; - -import android.content.Context; -import android.support.v7.widget.SwitchCompat; -import android.widget.CompoundButton; - -import org.floens.chan.R; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.settings.BooleanSettingView; -import org.floens.chan.ui.settings.ListSettingView; -import org.floens.chan.ui.settings.SettingView; -import org.floens.chan.ui.settings.SettingsController; -import org.floens.chan.ui.settings.SettingsGroup; -import org.floens.chan.ui.view.CrossfadeView; - -public class WatchSettingsController extends SettingsController implements CompoundButton.OnCheckedChangeListener { - private CrossfadeView crossfadeView; - - private SettingView enableBackground; - - private SettingView backgroundTimeout; - private SettingView notifyMode; - private SettingView soundMode; - private SettingView peekMode; - private SettingView ledMode; - - public WatchSettingsController(Context context) { - super(context); - } - - @Override - public void onCreate() { - super.onCreate(); - - boolean enabled = ChanSettings.watchEnabled.get(); - - navigation.setTitle(R.string.settings_screen_watch); - - view = inflateRes(R.layout.controller_watch); - content = view.findViewById(R.id.scrollview_content); - crossfadeView = view.findViewById(R.id.crossfade); - - crossfadeView.toggle(enabled, false); - - SwitchCompat globalSwitch = new SwitchCompat(context); - globalSwitch.setChecked(enabled); - globalSwitch.setOnCheckedChangeListener(this); - navigation.setRightView(globalSwitch); - - populatePreferences(); - - buildPreferences(); - - if (!ChanSettings.watchBackground.get()) { - setSettingViewVisibility(backgroundTimeout, false, false); - setSettingViewVisibility(notifyMode, false, false); - setSettingViewVisibility(soundMode, false, false); - setSettingViewVisibility(peekMode, false, false); - setSettingViewVisibility(ledMode, false, false); - } - } - - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - ChanSettings.watchEnabled.set(isChecked); - crossfadeView.toggle(isChecked, true); - } - - @Override - public void onPreferenceChange(SettingView item) { - super.onPreferenceChange(item); - - if (item == enableBackground) { - boolean enabled = ChanSettings.watchBackground.get(); - setSettingViewVisibility(backgroundTimeout, enabled, true); - setSettingViewVisibility(notifyMode, enabled, true); - setSettingViewVisibility(soundMode, enabled, true); - setSettingViewVisibility(peekMode, enabled, true); - setSettingViewVisibility(ledMode, enabled, true); - } - } - - private void populatePreferences() { - SettingsGroup settings = new SettingsGroup(R.string.settings_group_watch); - -// settings.add(new BooleanSettingView(this, ChanSettings.watchCountdown, string(R.string.setting_watch_countdown), string(R.string.setting_watch_countdown_description))); - enableBackground = settings.add(new BooleanSettingView(this, ChanSettings.watchBackground, R.string.setting_watch_enable_background, R.string.setting_watch_enable_background_description)); - - int[] timeouts = new int[]{ - 10 * 60 * 1000, - 15 * 60 * 1000, - 30 * 60 * 1000, - 45 * 60 * 1000, - 60 * 60 * 1000, - 2 * 60 * 60 * 1000 - }; - ListSettingView.Item[] timeoutsItems = new ListSettingView.Item[timeouts.length]; - for (int i = 0; i < timeouts.length; i++) { - int value = timeouts[i] / 1000 / 60; - String name = context.getResources().getQuantityString(R.plurals.minutes, value, value); - timeoutsItems[i] = new ListSettingView.Item<>(name, timeouts[i]); - } - backgroundTimeout = settings.add(new ListSettingView(this, ChanSettings.watchBackgroundInterval, R.string.setting_watch_background_timeout, timeoutsItems) { - @Override - public String getBottomDescription() { - return getString(R.string.setting_watch_background_timeout_description) + "\n\n" + items.get(selected).name; - } - }); - - notifyMode = settings.add(new ListSettingView<>(this, ChanSettings.watchNotifyMode, R.string.setting_watch_notify_mode, - context.getResources().getStringArray(R.array.setting_watch_notify_modes), new String[]{"all", "quotes"})); - - soundMode = settings.add(new ListSettingView<>(this, ChanSettings.watchSound, R.string.setting_watch_sound, - context.getResources().getStringArray(R.array.setting_watch_sounds), new String[]{"all", "quotes"})); - - peekMode = settings.add(new BooleanSettingView(this, ChanSettings.watchPeek, R.string.setting_watch_peek, R.string.setting_watch_peek_description)); - - ledMode = settings.add(new ListSettingView<>(this, ChanSettings.watchLed, R.string.setting_watch_led, - context.getResources().getStringArray(R.array.setting_watch_leds), - new String[]{"-1", "ffffffff", "ffff0000", "ffffff00", "ff00ff00", "ff00ffff", "ff0000ff", "ffff00ff"})); - - groups.add(settings); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/dialog/ColorPickerView.java b/Clover/app/src/main/java/org/floens/chan/ui/dialog/ColorPickerView.java deleted file mode 100644 index 5af9a5866d..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/dialog/ColorPickerView.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.dialog; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.RectF; -import android.graphics.Shader; -import android.graphics.SweepGradient; -import android.support.annotation.NonNull; -import android.view.MotionEvent; -import android.view.View; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public class ColorPickerView extends View { - private static final int[] COLORS = new int[]{ - 0xFFFF0000, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFF00FF00, - 0xFFFFFF00, 0xFFFF0000 - }; - - private Paint paint; - private Paint centerPaint; - private int centerRadius; - - public ColorPickerView(Context context) { - super(context); - - centerRadius = dp(32); - - Shader s = new SweepGradient(0, 0, COLORS, null); - - paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setShader(s); - paint.setStyle(Paint.Style.STROKE); - paint.setStrokeWidth(dp(32)); - - centerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - centerPaint.setStrokeWidth(dp(5)); - } - - public void setColor(int color) { - centerPaint.setColor(color); - } - - public int getColor() { - return centerPaint.getColor(); - } - - @Override - public boolean onTouchEvent(@NonNull MotionEvent event) { - float x = event.getX() - getWidth() / 2f; - float y = event.getY() - getHeight() / 2f; - - switch (event.getAction()) { - case MotionEvent.ACTION_MOVE: - float angle = (float) Math.atan2(y, x); - // need to turn angle [-PI ... PI] into unit [0....1] - float unit = (float) (angle / (2.0 * Math.PI)); - if (unit < 0.0) { - unit += 1.0; - } - centerPaint.setColor(interpColor(COLORS, unit)); - invalidate(); - break; - } - return true; - } - - @Override - protected void onDraw(Canvas canvas) { - float r = Math.min(getWidth() / 2f, getHeight() / 2f) - paint.getStrokeWidth() * 0.5f; - canvas.translate(getWidth() / 2f, getHeight() / 2f); - canvas.drawOval(new RectF(-r, -r, r, r), paint); - canvas.drawCircle(0, 0, centerRadius, centerPaint); - } - - private int interpColor(int colors[], float unit) { - if (unit <= 0) { - return colors[0]; - } - if (unit >= 1) { - return colors[colors.length - 1]; - } - - float p = unit * (colors.length - 1); - int i = (int) p; - p -= i; - - // now p is just the fractional part [0...1) and i is the index - int c0 = colors[i]; - int c1 = colors[i + 1]; - int a = ave(Color.alpha(c0), Color.alpha(c1), p); - int r = ave(Color.red(c0), Color.red(c1), p); - int g = ave(Color.green(c0), Color.green(c1), p); - int b = ave(Color.blue(c0), Color.blue(c1), p); - - return Color.argb(a, r, g, b); - } - - private int ave(int s, int d, float p) { - return s + Math.round(p * (d - s)); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/drawable/DropdownArrowDrawable.java b/Clover/app/src/main/java/org/floens/chan/ui/drawable/DropdownArrowDrawable.java deleted file mode 100644 index 44acdfab30..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/drawable/DropdownArrowDrawable.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.drawable; - -import android.graphics.Canvas; -import android.graphics.ColorFilter; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.PixelFormat; -import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; - -public class DropdownArrowDrawable extends Drawable { - private Paint paint = new Paint(); - private Path path = new Path(); - private int width; - private int height; - private float rotation; - private int color; - private int pressedColor; - - public DropdownArrowDrawable(int width, int height, boolean down, int color, int pressedColor) { - this.width = width; - this.height = height; - rotation = down ? 0f : 1f; - this.color = color; - this.pressedColor = pressedColor; - - paint.setStyle(Paint.Style.FILL); - paint.setColor(color); - } - - @Override - public void draw(@NonNull Canvas canvas) { - path.rewind(); - path.moveTo(0, height / 4); - path.lineTo(width, height / 4); - path.lineTo(width / 2, (int) (height * 3f / 4f)); - path.lineTo(0, height / 4); - path.close(); - - canvas.save(); - canvas.rotate(rotation * 180f, width / 2f, height / 2f); - canvas.drawPath(path, paint); - canvas.restore(); - } - - public void setRotation(float rotation) { - this.rotation = rotation; - invalidateSelf(); - } - - @Override - public int getIntrinsicWidth() { - return width; - } - - @Override - public int getIntrinsicHeight() { - return height; - } - - @Override - protected boolean onStateChange(int[] states) { - boolean pressed = false; - for (int state : states) { - if (state == android.R.attr.state_pressed) { - pressed = true; - } - } - int color = pressed ? pressedColor : this.color; - if (color != paint.getColor()) { - int prevAlpha = paint.getAlpha(); - paint.setColor(color); - paint.setAlpha(prevAlpha); - invalidateSelf(); - return true; - } else { - return false; - } - } - - @Override - public boolean isStateful() { - return true; - } - - @Override - public void setAlpha(int alpha) { - paint.setAlpha(alpha); - invalidateSelf(); - } - - @Override - public void setColorFilter(ColorFilter cf) { - paint.setColorFilter(cf); - } - - @Override - public int getOpacity() { - return PixelFormat.TRANSLUCENT; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/BoardHelper.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/BoardHelper.java deleted file mode 100644 index a87080b71b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/BoardHelper.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.helper; - -import android.util.Pair; - -import org.floens.chan.core.model.orm.Board; -import org.jsoup.parser.Parser; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; - -import me.xdrop.fuzzywuzzy.FuzzySearch; - -public class BoardHelper { - private static final String TAG = "BoardHelper"; - - public static String getName(Board board) { - return "/" + board.code + "/ \u2013 " + board.name; - } - - public static String getDescription(Board board) { - return board.description == null ? null : Parser.unescapeEntities(board.description, false); - } - - public static List quickSearch(List from, String query) { - from = new ArrayList<>(from); - query = query.toLowerCase(); - - List res = new ArrayList<>(); - - for (Iterator iterator = from.iterator(); iterator.hasNext(); ) { - Board board = iterator.next(); - if (board.code.toLowerCase().equals(query)) { - iterator.remove(); - res.add(board); - } - } - - for (Iterator iterator = from.iterator(); iterator.hasNext(); ) { - Board board = iterator.next(); - if (board.name.toLowerCase().contains(query)) { - iterator.remove(); - res.add(board); - } - } - - return res; - } - - public static List search(List from, final String query) { - List> ratios = new ArrayList<>(); - for (Board board : from) { - int ratio = getTokenSortRatio(board, query); - - if (ratio > 2) { - ratios.add(new Pair<>(board, ratio)); - } - } - - Collections.sort(ratios, new Comparator>() { - @Override - public int compare(Pair o1, Pair o2) { - return o2.second - o1.second; - } - }); - - List result = new ArrayList<>(ratios.size()); - for (Pair ratio : ratios) { - result.add(ratio.first); - } - return result; - } - - private static int getTokenSortRatio(Board board, String query) { - int code = FuzzySearch.ratio(board.code, query); - int name = FuzzySearch.ratio(board.name, query); - int description = FuzzySearch.weightedRatio(String.valueOf(getDescription(board)), query); - - return code * 4 + - name * 5 + - Math.max(0, description - 30) * 8; - } - - public static String boardUniqueId(Board board) { - String code = board.code.replace(":", "").replace(",", ""); - return board.site.id() + ":" + code; - } - - public static boolean matchesUniqueId(Board board, String uniqueId) { - if (!uniqueId.contains(":")) { - return board.site.id() == 0 && board.code.equals(uniqueId); - } else { - String[] splitted = uniqueId.split(":"); - if (splitted.length != 2) { - return false; - } - - try { - return Integer.parseInt(splitted[0]) == board.site.id() && splitted[1].equals(board.code); - } catch (NumberFormatException ignored) { - return false; - } - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/HintPopup.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/HintPopup.java deleted file mode 100644 index cc50b55eaa..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/HintPopup.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.helper; - -import android.animation.TimeInterpolator; -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.utils.AndroidUtils; - -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class HintPopup { - public static HintPopup show(Context context, View anchor, int text) { - return show(context, anchor, getString(text)); - } - - public static HintPopup show(final Context context, final View anchor, final String text) { - return show(context, anchor, text, 0, 0); - } - - public static HintPopup show(final Context context, final View anchor, final String text, final int offsetX, final int offsetY) { - HintPopup hintPopup = new HintPopup(context, anchor, text, offsetX, offsetY, false); - hintPopup.show(); - return hintPopup; - } - - private TextView textView; - private PopupWindow popupWindow; - private ViewGroup popupView; - private final View anchor; - private String text; - private final int offsetX; - private final int offsetY; - private final boolean top; - private boolean dismissed; - private boolean rightAligned = true; - private boolean wiggle = false; - - public HintPopup(Context context, final View anchor, final String text, - final int offsetX, final int offsetY, final boolean top) { - this.anchor = anchor; - this.text = text; - this.offsetX = offsetX; - this.offsetY = offsetY; - this.top = top; - - createView(context); - } - - @SuppressLint("InflateParams") - private void createView(Context context) { - popupView = (ViewGroup) LayoutInflater.from(context) - .inflate(top ? R.layout.popup_hint_top : R.layout.popup_hint, null); - - textView = popupView.findViewById(R.id.text); - textView.setText(text); - - popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - popupWindow.setOutsideTouchable(true); - popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - popupView.setOnClickListener(v -> { -// popupWindow.dismiss(); - }); - } - - public void show() { - AndroidUtils.runOnUiThread(() -> { - if (!dismissed) { - popupView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); - // TODO: cleanup - int xoff; - if (rightAligned) { - xoff = -popupView.getMeasuredWidth() + anchor.getWidth() + offsetX - dp(2); - } else { - xoff = -popupView.getMeasuredWidth() + offsetX - dp(2); - } - int yoff = -dp(25) + offsetY + (top ? -anchor.getHeight() - dp(30) : 0); - popupWindow.showAsDropDown(anchor, xoff, yoff); - - if (wiggle) { - TimeInterpolator wiggleInterpolator = input -> - (float) Math.sin(60 * input * 2.0 * Math.PI); - - popupView.animate() - .translationY(dp(2)) - .setInterpolator(wiggleInterpolator) - .setDuration(60000) - .start(); - } - - if (!rightAligned) { - View arrow = popupView.findViewById(R.id.arrow); - LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) arrow.getLayoutParams(); - lp.gravity = Gravity.LEFT; - arrow.setLayoutParams(lp); - } - } - }, 400); - - // popupView.postDelayed(popupWindow::dismiss, 5000); - } - - public void alignLeft() { - rightAligned = false; - } - - public void wiggle() { - wiggle = true; - } - - public void dismiss() { - popupWindow.dismiss(); - dismissed = true; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/ImagePickDelegate.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/ImagePickDelegate.java deleted file mode 100644 index 7bc88ac1a4..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/ImagePickDelegate.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.helper; - -import android.app.Activity; -import android.content.Intent; -import android.database.Cursor; -import android.net.Uri; -import android.os.ParcelFileDescriptor; -import android.provider.OpenableColumns; - -import org.floens.chan.core.manager.ReplyManager; -import org.floens.chan.utils.IOUtils; -import org.floens.chan.utils.Logger; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.utils.AndroidUtils.runOnUiThread; - -public class ImagePickDelegate implements Runnable { - private static final String TAG = "ImagePickActivity"; - - private static final int IMAGE_PICK_RESULT = 2; - private static final long MAX_FILE_SIZE = 15 * 1024 * 1024; - private static final String DEFAULT_FILE_NAME = "file"; - - @Inject - ReplyManager replyManager; - - private Activity activity; - - private ImagePickCallback callback; - private Uri uri; - private String fileName; - private boolean success = false; - private File cacheFile; - - public ImagePickDelegate(Activity activity) { - this.activity = activity; - inject(this); - } - - public boolean pick(ImagePickCallback callback) { - if (this.callback != null) { - return false; - } else { - this.callback = callback; - - Intent intent = new Intent(Intent.ACTION_GET_CONTENT); - intent.addCategory(Intent.CATEGORY_OPENABLE); - intent.setType("*/*"); - - if (intent.resolveActivity(activity.getPackageManager()) != null) { - activity.startActivityForResult(intent, IMAGE_PICK_RESULT); - return true; - } else { - Logger.e(TAG, "No activity found to get file with"); - callback.onFilePickError(false); - reset(); - return false; - } - } - } - - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (callback == null) { - return; - } - - boolean ok = false; - boolean cancelled = false; - if (requestCode == IMAGE_PICK_RESULT) { - if (resultCode == Activity.RESULT_OK && data != null) { - uri = data.getData(); - - Cursor returnCursor = activity.getContentResolver().query(uri, null, null, null, null); - if (returnCursor != null) { - int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); - returnCursor.moveToFirst(); - if (nameIndex > -1) { - fileName = returnCursor.getString(nameIndex); - } - - returnCursor.close(); - } - - if (fileName == null) { - // As per the comment on OpenableColumns.DISPLAY_NAME: - // If this is not provided then the name should default to the last segment of the file's URI. - fileName = uri.getLastPathSegment(); - } - - if (fileName == null) { - fileName = DEFAULT_FILE_NAME; - } - - callback.onFilePickLoading(); - - new Thread(this).start(); - ok = true; - } else if (resultCode == Activity.RESULT_CANCELED) { - cancelled = true; - } - } - - if (!ok) { - callback.onFilePickError(cancelled); - reset(); - } - } - - @Override - public void run() { - cacheFile = replyManager.getPickFile(); - - ParcelFileDescriptor fileDescriptor = null; - InputStream is = null; - OutputStream os = null; - try { - fileDescriptor = activity.getContentResolver().openFileDescriptor(uri, "r"); - is = new FileInputStream(fileDescriptor.getFileDescriptor()); - os = new FileOutputStream(cacheFile); - boolean fullyCopied = IOUtils.copy(is, os, MAX_FILE_SIZE); - if (fullyCopied) { - success = true; - } - } catch (IOException | SecurityException e) { - Logger.e(TAG, "Error copying file from the file descriptor", e); - } finally { - // FileDescriptor isn't closeable on API 15 - if (fileDescriptor != null) { - try { - fileDescriptor.close(); - } catch (IOException ignored) { - } - } - IOUtils.closeQuietly(is); - IOUtils.closeQuietly(os); - } - - if (!success) { - if (!cacheFile.delete()) { - Logger.e(TAG, "Could not delete picked_file after copy fail"); - } - } - - runOnUiThread(new Runnable() { - @Override - public void run() { - if (success) { - callback.onFilePicked(fileName, cacheFile); - } else { - callback.onFilePickError(false); - } - reset(); - } - }); - } - - private void reset() { - callback = null; - cacheFile = null; - success = false; - fileName = null; - uri = null; - } - - public interface ImagePickCallback { - void onFilePickLoading(); - - void onFilePicked(String fileName, File file); - - void onFilePickError(boolean cancelled); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/PinHelper.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/PinHelper.java deleted file mode 100644 index 9593093e3b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/PinHelper.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.helper; - -public class PinHelper { - public static String getShortUnreadCount(int value) { - String count; - if (value < 1000) { - count = String.valueOf(value); - } else { - int k = value / 1000; - if (k < 10) { - count = k + "k+"; - } else if (k < 100) { - count = k + "k"; - } else { - count = ":D"; - } - } - return count; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/PostHelper.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/PostHelper.java deleted file mode 100644 index ea048fea1d..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/PostHelper.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.helper; - -import android.content.res.Resources; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.support.annotation.Nullable; -import android.text.SpannableString; -import android.text.TextUtils; -import android.text.style.ImageSpan; - -import org.floens.chan.R; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.utils.AndroidUtils; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; - -public class PostHelper { - public static BitmapDrawable stickyIcon; - public static BitmapDrawable closedIcon; - public static BitmapDrawable trashIcon; - public static BitmapDrawable archivedIcon; - - static { - Resources res = AndroidUtils.getRes(); - stickyIcon = new BitmapDrawable(res, BitmapFactory.decodeResource(res, R.drawable.sticky_icon)); - closedIcon = new BitmapDrawable(res, BitmapFactory.decodeResource(res, R.drawable.closed_icon)); - trashIcon = new BitmapDrawable(res, BitmapFactory.decodeResource(res, R.drawable.trash_icon)); - archivedIcon = new BitmapDrawable(res, BitmapFactory.decodeResource(res, R.drawable.archived_icon)); - } - - public static CharSequence addIcon(BitmapDrawable bitmapDrawable, int height) { - return addIcon(null, bitmapDrawable, height); - } - - public static CharSequence addIcon(CharSequence total, BitmapDrawable bitmapDrawable, int height) { - SpannableString string = new SpannableString(" "); - ImageSpan imageSpan = new ImageSpan(bitmapDrawable); - - int width = (int) (height / (bitmapDrawable.getIntrinsicHeight() / (float) bitmapDrawable.getIntrinsicWidth())); - - imageSpan.getDrawable().setBounds(0, 0, width, height); - string.setSpan(imageSpan, 0, 1, 0); - if (total == null) { - return string; - } else { - return TextUtils.concat(total, string); - } - } - - public static String getTitle(@Nullable Post post, @Nullable Loadable loadable) { - if (post != null) { - if (!TextUtils.isEmpty(post.subject)) { - return post.subject; - } else if (!TextUtils.isEmpty(post.comment)) { - return "/" + post.boardId + "/ \u2013 " + post.comment.subSequence(0, Math.min(post.comment.length(), 200)).toString(); - } else { - return "/" + post.boardId + "/" + post.no; - } - } else if (loadable != null) { - if (loadable.mode == Loadable.Mode.CATALOG) { - return "/" + loadable.boardCode + "/"; - } else { - return "/" + loadable.boardCode + "/" + loadable.no; - } - } else { - return ""; - } - } - - private static SimpleDateFormat dateFormat = new SimpleDateFormat("LL/dd/yy(EEE)HH:mm:ss", Locale.US); - private static Date tmpDate = new Date(); - - public static String getLocalDate(Post post) { - tmpDate.setTime(post.time * 1000L); - return dateFormat.format(tmpDate); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/PostPopupHelper.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/PostPopupHelper.java deleted file mode 100644 index 6882f524ab..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/PostPopupHelper.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.helper; - -import android.content.Context; - -import org.floens.chan.controller.Controller; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.presenter.ThreadPresenter; -import org.floens.chan.ui.controller.PostRepliesController; -import org.floens.chan.ui.view.ThumbnailView; - -import java.util.ArrayList; -import java.util.List; - -public class PostPopupHelper { - private Context context; - private ThreadPresenter presenter; - private final PostPopupHelperCallback callback; - - private final List dataQueue = new ArrayList<>(); - private PostRepliesController presentingController; - - public PostPopupHelper(Context context, ThreadPresenter presenter, PostPopupHelperCallback callback) { - this.context = context; - this.presenter = presenter; - this.callback = callback; - } - - public void showPosts(Post forPost, List posts) { - RepliesData data = new RepliesData(forPost, posts); - - dataQueue.add(data); - - if (dataQueue.size() == 1) { - present(); - } - presentingController.setPostRepliesData(data); - } - - public void pop() { - if (dataQueue.size() > 0) { - dataQueue.remove(dataQueue.size() - 1); - } - - if (dataQueue.size() > 0) { - presentingController.setPostRepliesData(dataQueue.get(dataQueue.size() - 1)); - } else { - dismiss(); - } - } - - public void popAll() { - dataQueue.clear(); - dismiss(); - } - - public boolean isOpen() { - return presentingController != null && presentingController.alive; - } - - public List getDisplayingPosts() { - return presentingController.getPostRepliesData(); - } - - public void scrollTo(int displayPosition, boolean smooth) { - presentingController.scrollTo(displayPosition, smooth); - } - - public ThumbnailView getThumbnail(PostImage postImage) { - return presentingController.getThumbnail(postImage); - } - - public void postClicked(Post p) { - popAll(); - presenter.highlightPost(p); - presenter.scrollToPost(p, true); - } - - private void dismiss() { - if (presentingController != null) { - presentingController.stopPresenting(); - presentingController = null; - } - } - - private void present() { - if (presentingController == null) { - presentingController = new PostRepliesController(context, this, presenter); - callback.presentRepliesController(presentingController); - } - } - - public static class RepliesData { - public List posts; - public Post forPost; - public int listViewIndex; - public int listViewTop; - - public RepliesData(Post forPost, List posts) { - this.forPost = forPost; - this.posts = posts; - } - } - - public interface PostPopupHelperCallback { - void presentRepliesController(Controller controller); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/RefreshUIMessage.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/RefreshUIMessage.java deleted file mode 100644 index 809e827c3f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/RefreshUIMessage.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.helper; - -public class RefreshUIMessage { - public String reason; - - public RefreshUIMessage(String reason) { - this.reason = reason; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/RuntimePermissionsHelper.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/RuntimePermissionsHelper.java deleted file mode 100644 index c665c2501b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/RuntimePermissionsHelper.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.helper; - -import android.app.Activity; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.provider.Settings; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AlertDialog; - -import org.floens.chan.R; -import org.floens.chan.utils.AndroidUtils; - -import static org.floens.chan.utils.AndroidUtils.getAppContext; - -public class RuntimePermissionsHelper { - private static final int RUNTIME_PERMISSION_RESULT_ID = 3; - - private ActivityCompat.OnRequestPermissionsResultCallback callbackActvity; - - private CallbackHolder pendingCallback; - - public RuntimePermissionsHelper(ActivityCompat.OnRequestPermissionsResultCallback callbackActvity) { - this.callbackActvity = callbackActvity; - } - - public boolean hasPermission(String permission) { - return ContextCompat.checkSelfPermission(getAppContext(), permission) == PackageManager.PERMISSION_GRANTED; - } - - public boolean requestPermission(String permission, Callback callback) { - if (pendingCallback == null) { - pendingCallback = new CallbackHolder(); - pendingCallback.callback = callback; - pendingCallback.permission = permission; - - ActivityCompat.requestPermissions((Activity) callbackActvity, new String[]{permission}, RUNTIME_PERMISSION_RESULT_ID); - - return true; - } else { - return false; - } - } - - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - if (requestCode == RUNTIME_PERMISSION_RESULT_ID && pendingCallback != null) { - boolean granted = false; - - for (int i = 0; i < permissions.length; i++) { - String permission = permissions[i]; - if (permission.equals(pendingCallback.permission) && grantResults[i] == PackageManager.PERMISSION_GRANTED) { - granted = true; - break; - } - } - - pendingCallback.callback.onRuntimePermissionResult(granted); - pendingCallback = null; - } - } - - public void showPermissionRequiredDialog(final Context context, String title, String message, final PermissionRequiredDialogCallback callback) { - new AlertDialog.Builder(context) - .setTitle(title) - .setMessage(message) - .setCancelable(false) - .setNeutralButton(R.string.permission_app_settings, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - callback.retryPermissionRequest(); - Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, - Uri.parse("package:" + context.getPackageName())); - AndroidUtils.openIntent(intent); - } - }) - .setPositiveButton(R.string.permission_grant, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - callback.retryPermissionRequest(); - } - }) - .show(); - } - - public interface PermissionRequiredDialogCallback { - void retryPermissionRequest(); - } - - private class CallbackHolder { - private Callback callback; - private String permission; - } - - public interface Callback { - void onRuntimePermissionResult(boolean granted); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/VersionHandler.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/VersionHandler.java deleted file mode 100644 index 6cf7027fee..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/VersionHandler.java +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.helper; - -import android.Manifest; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.support.v7.app.AlertDialog; -import android.text.Html; -import android.text.Spanned; -import android.widget.Button; - -import org.floens.chan.BuildConfig; -import org.floens.chan.R; -import org.floens.chan.core.net.UpdateApiRequest; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.core.update.UpdateManager; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.Logger; - -import java.io.File; - -public class VersionHandler implements UpdateManager.UpdateCallback { - private static final String TAG = "VersionHandler"; - - /* - * Manifest version code, manifest version name, this version mapping: - * - * 28 = v1.1.2 - * 32 = v1.1.3 - * 36 = v1.2.0 - * 39 = v1.2.1 - * 40 = v1.2.2 - * 41 = v1.2.3 - * 42 = v1.2.4 - * 43 = v1.2.5 - * 44 = v1.2.6 - * 46 = v1.2.7 - * 47 = v1.2.8 - * 48 = v1.2.9 - * 49 = v1.2.10 - * 50 = v1.2.11 - * 51 = v2.0.0 = 1 - * 52 = v2.1.0 = 2 - * 53 = v2.1.1 = 2 - * 54 = v2.1.2 = 2 - * 55 = v2.1.3 = 2 - * 56 = v2.2.0 = 3 - * Since v2.3.0, this has been aligned with the versionCode as defined in build.gradle - * It is of the format XXYYZZ, where XX is major, YY is minor, ZZ is patch. - * 20300 = v2.3.0 = 20300 - */ - private static final int CURRENT_VERSION = BuildConfig.VERSION_CODE; - - /** - * Context to show dialogs to. - */ - private Context context; - private RuntimePermissionsHelper runtimePermissionsHelper; - - private UpdateManager updateManager; - - private ProgressDialog updateDownloadDialog; - - public VersionHandler(Context context, RuntimePermissionsHelper runtimePermissionsHelper) { - this.context = context; - this.runtimePermissionsHelper = runtimePermissionsHelper; - - updateManager = new UpdateManager(this); - } - - /** - * Runs every time onCreate is called on the StartActivity. - */ - public void run() { - int previous = ChanSettings.previousVersion.get(); - if (previous < CURRENT_VERSION) { - handleUpdate(previous); - - if (previous != 0) { - showMessage(CURRENT_VERSION); - } - - ChanSettings.previousVersion.set(CURRENT_VERSION); - - // Don't process the updater because a dialog is now already showing. - return; - } - - if (updateManager.isUpdatingAvailable()) { - updateManager.runUpdateApi(false); - } - } - - private void handleUpdate(int previous) { - if (previous < 1) { - cleanupOutdatedIonFolder(context); - } - - // Add more previous version checks here - } - - public boolean isUpdatingAvailable() { - return updateManager.isUpdatingAvailable(); - } - - public void manualUpdateCheck() { - updateManager.runUpdateApi(true); - } - - @Override - public void onManualCheckNone() { - new AlertDialog.Builder(context) - .setTitle(R.string.update_none) - .setPositiveButton(R.string.ok, null) - .show(); - } - - @Override - public void onManualCheckFailed() { - new AlertDialog.Builder(context) - .setTitle(R.string.update_check_failed) - .setPositiveButton(R.string.ok, null) - .show(); - } - - @Override - public void showUpdateAvailableDialog(final UpdateApiRequest.UpdateApiMessage message) { - Spanned text = Html.fromHtml(message.messageHtml); - - final AlertDialog dialog = new AlertDialog.Builder(context) - .setMessage(text) - .setNegativeButton(R.string.update_later, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - updatePostponed(message); - } - }) - .setPositiveButton(R.string.update_install, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - updateInstallRequested(message); - } - }) - .create(); - dialog.show(); - dialog.setCanceledOnTouchOutside(false); - } - - private void updatePostponed(UpdateApiRequest.UpdateApiMessage message) { - } - - private void updateInstallRequested(final UpdateApiRequest.UpdateApiMessage message) { - runtimePermissionsHelper.requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, new RuntimePermissionsHelper.Callback() { - @Override - public void onRuntimePermissionResult(boolean granted) { - if (granted) { - createDownloadProgressDialog(); - updateManager.doUpdate(new UpdateManager.Update(message.apkUrl)); - } else { - runtimePermissionsHelper.showPermissionRequiredDialog(context, - context.getString(R.string.update_storage_permission_required_title), - context.getString(R.string.update_storage_permission_required), - new RuntimePermissionsHelper.PermissionRequiredDialogCallback() { - @Override - public void retryPermissionRequest() { - updateInstallRequested(message); - } - }); - } - } - }); - } - - private void createDownloadProgressDialog() { - updateDownloadDialog = new ProgressDialog(context); - updateDownloadDialog.setCancelable(false); - updateDownloadDialog.setTitle(R.string.update_install_downloading); - updateDownloadDialog.setMax(10000); - updateDownloadDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - updateDownloadDialog.setProgressNumberFormat(""); - updateDownloadDialog.show(); - } - - @Override - public void onUpdateDownloadProgress(long downloaded, long total) { - updateDownloadDialog.setProgress((int) (updateDownloadDialog.getMax() * (downloaded / (double) total))); - } - - @Override - public void onUpdateDownloadSuccess() { - updateDownloadDialog.dismiss(); - updateDownloadDialog = null; - } - - @Override - public void onUpdateDownloadFailed() { - updateDownloadDialog.dismiss(); - updateDownloadDialog = null; - new AlertDialog.Builder(context) - .setTitle(R.string.update_install_download_failed) - .setPositiveButton(R.string.ok, null) - .show(); - } - - @Override - public void onUpdateDownloadMoveFailed() { - new AlertDialog.Builder(context) - .setTitle(R.string.update_install_download_move_failed) - .setPositiveButton(R.string.ok, null) - .show(); - } - - @Override - public void onUpdateOpenInstallScreen(Intent intent) { - AndroidUtils.openIntent(intent); - } - - @Override - public void openUpdateRetryDialog(final UpdateManager.Install install) { - new AlertDialog.Builder(context) - .setTitle(R.string.update_retry_title) - .setMessage(R.string.update_retry) - .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.update_retry_button, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - updateManager.retry(install); - } - }) - .show(); - } - - private void showMessage(int version) { - int resource = context.getResources().getIdentifier("changelog_" + version, "string", context.getPackageName()); - if (resource != 0) { - CharSequence message = Html.fromHtml(context.getString(resource)); - - final AlertDialog dialog = new AlertDialog.Builder(context) - .setMessage(message) - .setPositiveButton(R.string.ok, null) - .create(); - dialog.show(); - dialog.setCanceledOnTouchOutside(false); - - final Button button = dialog.getButton(DialogInterface.BUTTON_POSITIVE); - button.setEnabled(false); - AndroidUtils.runOnUiThread(new Runnable() { - @Override - public void run() { - dialog.setCanceledOnTouchOutside(true); - button.setEnabled(true); - } - }, 1500); - } - } - - private void cleanupOutdatedIonFolder(Context context) { - Logger.i(TAG, "Cleaning up old ion folder"); - File ionCacheFolder = new File(context.getCacheDir() + "/ion"); - if (ionCacheFolder.exists() && ionCacheFolder.isDirectory()) { - Logger.i(TAG, "Clearing old ion folder"); - for (File file : ionCacheFolder.listFiles()) { - if (!file.delete()) { - Logger.i(TAG, "Could not delete old ion file " + file.getName()); - } - } - if (!ionCacheFolder.delete()) { - Logger.i(TAG, "Could not delete old ion folder"); - } else { - Logger.i(TAG, "Deleted old ion folder"); - } - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/BoardAddLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/BoardAddLayout.java deleted file mode 100644 index fc03ca771a..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/BoardAddLayout.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.content.Context; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.core.presenter.BoardSetupPresenter; - -import static org.floens.chan.utils.AndroidUtils.getAttrColor; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class BoardAddLayout extends LinearLayout implements SearchLayout.SearchLayoutCallback, BoardSetupPresenter.AddCallback, View.OnClickListener { - private BoardSetupPresenter presenter; - - private SuggestionsAdapter suggestionsAdapter; - - private SearchLayout search; - private Button checkAllButton; - private RecyclerView suggestionsRecycler; - - private AlertDialog dialog; - - public BoardAddLayout(Context context) { - this(context, null); - } - - public BoardAddLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public BoardAddLayout(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - // View binding - search = findViewById(R.id.search); - suggestionsRecycler = findViewById(R.id.suggestions); - checkAllButton = findViewById(R.id.select_all); - - // Adapters - suggestionsAdapter = new SuggestionsAdapter(); - - // View setup - search.setCallback(this); - search.setHint(getString(R.string.search_hint)); - search.setTextColor(getAttrColor(getContext(), R.attr.text_color_primary)); - search.setHintColor(getAttrColor(getContext(), R.attr.text_color_hint)); - search.setClearButtonImage(R.drawable.ic_clear_black_24dp); - checkAllButton.setOnClickListener(this); - suggestionsRecycler.setLayoutManager(new LinearLayoutManager(getContext())); - suggestionsRecycler.setAdapter(suggestionsAdapter); - - suggestionsRecycler.requestFocus(); - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - presenter.bindAddDialog(this); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - presenter.unbindAddDialog(); - } - - @Override - public void onClick(View v) { - if (v == checkAllButton) { - presenter.onSelectAllClicked(); - } - } - - @Override - public void onSearchEntered(String entered) { - presenter.searchEntered(entered); - } - - @Override - public void suggestionsWereChanged() { - suggestionsAdapter.notifyDataSetChanged(); - } - - public void setPresenter(BoardSetupPresenter presenter) { - this.presenter = presenter; - } - - public void setDialog(AlertDialog dialog) { - this.dialog = dialog; - } - - private void onSuggestionClicked(BoardSetupPresenter.BoardSuggestion suggestion) { - presenter.onSuggestionClicked(suggestion); - } - - public void onPositiveClicked() { - presenter.onAddDialogPositiveClicked(); - } - - private class SuggestionsAdapter extends RecyclerView.Adapter { - public SuggestionsAdapter() { - setHasStableIds(true); - } - - @Override - public long getItemId(int position) { - return presenter.getSuggestions().get(position).getId(); - } - - @Override - public int getItemCount() { - return presenter.getSuggestions().size(); - } - - @Override - public SuggestionCell onCreateViewHolder(ViewGroup parent, int viewType) { - return new SuggestionCell( - LayoutInflater.from(parent.getContext()) - .inflate(R.layout.cell_board_suggestion, parent, false)); - } - - @Override - public void onBindViewHolder(SuggestionCell holder, int position) { - BoardSetupPresenter.BoardSuggestion boardSuggestion = presenter.getSuggestions().get(position); - holder.setSuggestion(boardSuggestion); - holder.text.setText(boardSuggestion.getName()); - holder.description.setText(boardSuggestion.getDescription()); - } - } - - private class SuggestionCell extends RecyclerView.ViewHolder implements OnClickListener, CompoundButton.OnCheckedChangeListener { - private TextView text; - private TextView description; - private CheckBox check; - - private BoardSetupPresenter.BoardSuggestion suggestion; - - private boolean ignoreCheckChange = false; - - public SuggestionCell(View itemView) { - super(itemView); - - text = itemView.findViewById(R.id.text); - description = itemView.findViewById(R.id.description); - check = itemView.findViewById(R.id.check); - check.setOnCheckedChangeListener(this); - - itemView.setOnClickListener(this); - } - - public void setSuggestion(BoardSetupPresenter.BoardSuggestion suggestion) { - this.suggestion = suggestion; - ignoreCheckChange = true; - check.setChecked(suggestion.isChecked()); - ignoreCheckChange = false; - } - - @Override - public void onClick(View v) { - if (v == itemView) { - toggle(); - } - } - - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (!ignoreCheckChange && buttonView == check) { - toggle(); - } - } - - private void toggle() { - onSuggestionClicked(suggestion); - ignoreCheckChange = true; - check.setChecked(suggestion.isChecked()); - ignoreCheckChange = false; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/BrowseBoardsFloatingMenu.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/BrowseBoardsFloatingMenu.java deleted file mode 100644 index 759551ca13..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/BrowseBoardsFloatingMenu.java +++ /dev/null @@ -1,472 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Point; -import android.os.Build; -import android.support.annotation.NonNull; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.RecyclerView.ViewHolder; -import android.text.Editable; -import android.text.TextWatcher; -import android.util.AttributeSet; -import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewTreeObserver; -import android.view.animation.DecelerateInterpolator; -import android.widget.EditText; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.presenter.BoardsMenuPresenter; -import org.floens.chan.core.presenter.BoardsMenuPresenter.Item; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.SiteIcon; -import org.floens.chan.ui.helper.BoardHelper; -import org.floens.chan.utils.AndroidUtils; - -import java.util.Observable; -import java.util.Observer; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.removeFromParentView; - -/** - * A ViewGroup that attaches above the entire window, containing a list of boards the user can - * select. The list is aligned to a view, given to - * {@link #show(ViewGroup, View, ClickCallback, Board)}. - * This view completely covers the window to catch any input that goes outside the inner list view. - * It also features a search field at the top. The data shown is controlled by - * {@link BoardsMenuPresenter}. - */ -public class BrowseBoardsFloatingMenu extends FrameLayout implements BoardsMenuPresenter.Callback, - Observer { - private static final int MINIMAL_WIDTH_DP = 4 * 56; - private static final int ELEVATION_DP = 4; - private static final int OFFSET_X_DP = 5; - private static final int OFFSET_Y_DP = 5; - private static final int MARGIN_DP = 5; - private static final int ANIMATE_IN_TRANSLATION_Y_DP = 25; - - private View anchor; - private RecyclerView recyclerView; - - private Point position = new Point(0, 0); - private boolean dismissed = false; - - @Inject - private BoardsMenuPresenter presenter; - private BoardsMenuPresenter.Items items; - - private BrowseBoardsAdapter adapter; - - private ClickCallback clickCallback; - private ViewTreeObserver.OnGlobalLayoutListener layoutListener; - - public BrowseBoardsFloatingMenu(Context context) { - this(context, null); - } - - public BrowseBoardsFloatingMenu(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public BrowseBoardsFloatingMenu(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - inject(this); - - layoutListener = this::repositionToAnchor; - - setFocusableInTouchMode(true); - setFocusable(true); - } - - public void show(ViewGroup baseView, View anchor, ClickCallback clickCallback, - Board selectedBoard) { - this.anchor = anchor; - this.clickCallback = clickCallback; - - ViewGroup rootView = baseView.getRootView().findViewById(android.R.id.content); - - setupChildViews(); - - adapter = new BrowseBoardsAdapter(); - - recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - recyclerView.setAdapter(adapter); - recyclerView.setItemAnimator(null); - - rootView.addView(this, new ViewGroup.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT - )); - - requestFocus(); - - watchAnchor(); - - animateIn(); - - presenter.create(this, selectedBoard); - items = presenter.items(); - items.addObserver(this); - } - - @Override - public void update(Observable o, Object arg) { - if (o == presenter.items()) { - adapter.notifyDataSetChanged(); - } - } - - @Override - public void scrollToPosition(int position) { - recyclerView.scrollToPosition(position); - } - - private void itemClicked(Site site, Board board) { - if (!isInteractive()) return; - - if (board != null) { - clickCallback.onBoardClicked(board); - } else { - clickCallback.onSiteClicked(site); - } - dismiss(); - } - - private void inputChanged(String input) { - presenter.filterChanged(input); - } - - private void dismiss() { - if (dismissed) return; - dismissed = true; - - items.deleteObserver(this); - presenter.destroy(); - - AndroidUtils.hideKeyboard(this); - - // ??? - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - anchor.getViewTreeObserver().removeOnGlobalLayoutListener(layoutListener); - } - - animateOut(() -> removeFromParentView(this)); - } - - private void setupChildViews() { - // View creation - recyclerView = new RecyclerView(getContext()); - - // View setup - recyclerView.setBackgroundColor(AndroidUtils.getAttrColor(getContext(), R.attr.backcolor)); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - recyclerView.setElevation(dp(ELEVATION_DP)); - } - - // View attaching - int recyclerWidth = Math.max( - anchor.getWidth(), - dp(MINIMAL_WIDTH_DP)); - - LayoutParams params = new LayoutParams( - recyclerWidth, - ViewGroup.LayoutParams.WRAP_CONTENT - ); - params.leftMargin = dp(MARGIN_DP); - params.topMargin = dp(MARGIN_DP); - params.rightMargin = dp(MARGIN_DP); - params.bottomMargin = dp(MARGIN_DP); - addView(recyclerView, params); - } - - private void watchAnchor() { - repositionToAnchor(); - anchor.getViewTreeObserver().addOnGlobalLayoutListener(layoutListener); - } - - private void repositionToAnchor() { - int[] anchorPos = new int[2]; - int[] recyclerViewPos = new int[2]; - anchor.getLocationInWindow(anchorPos); - recyclerView.getLocationInWindow(recyclerViewPos); - anchorPos[0] += dp(OFFSET_X_DP); - anchorPos[1] += dp(OFFSET_Y_DP); - recyclerViewPos[0] += -recyclerView.getTranslationX() - getTranslationX(); - recyclerViewPos[1] += -recyclerView.getTranslationY() - getTranslationY(); - - int x = anchorPos[0] - recyclerViewPos[0]; - int y = anchorPos[1] - recyclerViewPos[1]; - - if (!position.equals(x, y)) { - position.set(x, y); - - recyclerView.setTranslationX(x); - recyclerView.setTranslationY(y); - } - } - - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - if (isInteractive() && keyCode == KeyEvent.KEYCODE_BACK) { - event.startTracking(); - return true; - } - return super.onKeyDown(keyCode, event); - } - - @Override - public boolean onKeyUp(int keyCode, KeyEvent event) { - if (isInteractive() && keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && - !event.isCanceled()) { - dismiss(); - return true; - } - return super.onKeyUp(keyCode, event); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public boolean onTouchEvent(MotionEvent event) { - if (!isInteractive()) return super.onTouchEvent(event); - - dismiss(); - return true; - } - - private boolean isInteractive() { - return !dismissed; - } - - private void animateIn() { - setAlpha(0f); - setTranslationY(-dp(ANIMATE_IN_TRANSLATION_Y_DP)); - post(() -> { - animate() - .alpha(1f) - .translationY(0f) - .setInterpolator(new DecelerateInterpolator(2f)) - .setDuration(250).start(); - }); - } - - private void animateOut(Runnable done) { - animate().alpha(0f) - .setInterpolator(new DecelerateInterpolator(2f)).setDuration(250) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - done.run(); - } - }) - .start(); - } - - private class BrowseBoardsAdapter extends RecyclerView.Adapter { - public BrowseBoardsAdapter() { - setHasStableIds(true); - } - - @Override - public int getItemCount() { - return items.getCount(); - } - - @Override - public long getItemId(int position) { - Item item = items.getAtPosition(position); - return item.id; - } - - @Override - public int getItemViewType(int position) { - Item item = items.getAtPosition(position); - return item.type.typeId; - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - final LayoutInflater inflater = LayoutInflater.from(parent.getContext()); - if (viewType == Item.Type.SEARCH.typeId) { - return new InputViewHolder(inflater.inflate( - R.layout.cell_browse_input, parent, false)); - } else if (viewType == Item.Type.SITE.typeId) { - return new SiteViewHolder(inflater.inflate( - R.layout.cell_browse_site, parent, false)); - } else if (viewType == Item.Type.BOARD.typeId) { - return new BoardViewHolder(inflater.inflate( - R.layout.cell_browse_board, parent, false)); - } else { - throw new IllegalArgumentException(); - } - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - Item item = items.getAtPosition(position); - if (holder instanceof InputViewHolder) { - InputViewHolder inputViewHolder = ((InputViewHolder) holder); - } else if (holder instanceof SiteViewHolder) { - SiteViewHolder siteViewHolder = ((SiteViewHolder) holder); - siteViewHolder.bind(item.site); - } else if (holder instanceof BoardViewHolder) { - BoardViewHolder boardViewHolder = ((BoardViewHolder) holder); - boardViewHolder.bind(item.board); - } else { - throw new IllegalArgumentException(); - } - } - } - - private class InputViewHolder extends ViewHolder implements TextWatcher, - OnFocusChangeListener, OnClickListener, OnKeyListener { - private EditText input; - - public InputViewHolder(View itemView) { - super(itemView); - - input = itemView.findViewById(R.id.input); - input.addTextChangedListener(this); - input.setOnFocusChangeListener(this); - input.setOnClickListener(this); - input.setOnKeyListener(this); - } - - @Override - public void afterTextChanged(Editable s) { - inputChanged(input.getText().toString()); - } - - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - } - - @Override - public void onFocusChange(View v, boolean hasFocus) { - if (!hasFocus) { - AndroidUtils.hideKeyboard(v); - } - } - - @Override - public void onClick(View v) { - ((LinearLayoutManager) recyclerView.getLayoutManager()) - .scrollToPositionWithOffset(0, 0); - } - - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK) { - dismiss(); - } - return true; - } - } - - private class SiteViewHolder extends ViewHolder { - View divider; - ImageView image; - TextView text; - - Site site; - SiteIcon icon; - - public SiteViewHolder(View itemView) { - super(itemView); - - itemView.setOnClickListener((v) -> itemClicked(site, null)); - - // View binding - divider = itemView.findViewById(R.id.divider); - image = itemView.findViewById(R.id.image); - text = itemView.findViewById(R.id.text); - - // View setup - text.setTypeface(AndroidUtils.ROBOTO_MEDIUM); - } - - public void bind(Site site) { - this.site = site; - - divider.setVisibility(getAdapterPosition() == 0 ? View.GONE : View.VISIBLE); - - icon = site.icon(); - - image.setTag(icon); - image.setImageDrawable(null); - icon.get((siteIcon, drawable) -> { - if (image.getTag() == siteIcon) { - image.setImageDrawable(drawable); - } - }); - - text.setText(site.name()); - } - } - - private class BoardViewHolder extends ViewHolder { - TextView text; - - Board board; - - public BoardViewHolder(View itemView) { - super(itemView); - - itemView.setOnClickListener((v) -> itemClicked(null, board)); - - // View binding - text = (TextView) itemView; - - // View setup - text.setTypeface(AndroidUtils.ROBOTO_MEDIUM); - } - - public void bind(Board board) { - this.board = board; - text.setText(BoardHelper.getName(board)); - } - } - - public interface ClickCallback { - void onBoardClicked(Board item); - - void onSiteClicked(Site site); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/DrawerWidthAdjustingLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/DrawerWidthAdjustingLayout.java deleted file mode 100644 index 5c7747c257..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/DrawerWidthAdjustingLayout.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.content.Context; -import android.support.v4.widget.DrawerLayout; -import android.util.AttributeSet; -import android.view.View; - -import org.floens.chan.R; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public class DrawerWidthAdjustingLayout extends DrawerLayout { - public DrawerWidthAdjustingLayout(Context context) { - super(context); - } - - public DrawerWidthAdjustingLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public DrawerWidthAdjustingLayout(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { -// int widthMode = MeasureSpec.getMode(widthMeasureSpec); -// int heightMode = MeasureSpec.getMode(heightMeasureSpec); - int widthSize = MeasureSpec.getSize(widthMeasureSpec); -// int heightSize = MeasureSpec.getSize(heightMeasureSpec); - - View drawer = findViewById(R.id.drawer); - - int width = Math.min(widthSize - dp(56), dp(56) * 6); - if (drawer.getLayoutParams().width != width) { - drawer.getLayoutParams().width = width; - } - - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/FilesLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/FilesLayout.java deleted file mode 100644 index 33c89d9bee..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/FilesLayout.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.support.v4.graphics.drawable.DrawableCompat; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.core.saver.FileWatcher; -import org.floens.chan.ui.adapter.FilesAdapter; -import org.floens.chan.utils.RecyclerUtils; - -import java.util.HashMap; -import java.util.Map; - -import static org.floens.chan.utils.AndroidUtils.getAttrColor; - -public class FilesLayout extends LinearLayout implements FilesAdapter.Callback, View.OnClickListener { - private ViewGroup backLayout; - private ImageView backImage; - private TextView backText; - private RecyclerView recyclerView; - - private LinearLayoutManager layoutManager; - private FilesAdapter filesAdapter; - - private Map history = new HashMap<>(); - private FileItemHistory currentHistory; - private FileWatcher.FileItems currentFileItems; - - private Callback callback; - - public FilesLayout(Context context) { - this(context, null); - } - - public FilesLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public FilesLayout(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - backLayout = findViewById(R.id.back_layout); - backImage = backLayout.findViewById(R.id.back_image); - backImage.setImageDrawable(DrawableCompat.wrap(backImage.getDrawable())); - backText = backLayout.findViewById(R.id.back_text); - recyclerView = findViewById(R.id.recycler); - - backLayout.setOnClickListener(this); - } - - public void initialize() { - layoutManager = new LinearLayoutManager(getContext()); - recyclerView.setLayoutManager(layoutManager); - - filesAdapter = new FilesAdapter(this); - recyclerView.setAdapter(filesAdapter); - } - - public void setCallback(Callback callback) { - this.callback = callback; - } - - public void setFiles(FileWatcher.FileItems fileItems) { - // Save the associated list position - if (currentFileItems != null) { - int[] indexTop = RecyclerUtils.getIndexAndTop(recyclerView); - currentHistory.index = indexTop[0]; - currentHistory.top = indexTop[1]; - history.put(currentFileItems.path.getAbsolutePath(), currentHistory); - } - - filesAdapter.setFiles(fileItems); - currentFileItems = fileItems; - - // Restore any previous list position - currentHistory = history.get(fileItems.path.getAbsolutePath()); - if (currentHistory != null) { - layoutManager.scrollToPositionWithOffset(currentHistory.index, currentHistory.top); - filesAdapter.setHighlightedItem(currentHistory.clickedItem); - } else { - currentHistory = new FileItemHistory(); - filesAdapter.setHighlightedItem(null); - } - - boolean enabled = fileItems.canNavigateUp; - backLayout.setEnabled(enabled); - Drawable wrapped = DrawableCompat.wrap(backImage.getDrawable()); - backImage.setImageDrawable(wrapped); - int color = getAttrColor(getContext(), enabled ? R.attr.text_color_primary : R.attr.text_color_hint); - DrawableCompat.setTint(wrapped, color); - backText.setEnabled(enabled); - backText.setTextColor(color); - } - - public RecyclerView getRecyclerView() { - return recyclerView; - } - - public ViewGroup getBackLayout() { - return backLayout; - } - - @Override - public void onFileItemClicked(FileWatcher.FileItem fileItem) { - currentHistory.clickedItem = fileItem; - callback.onFileItemClicked(fileItem); - } - - @Override - public void onClick(View view) { - if (view == backLayout) { - currentHistory.clickedItem = null; - callback.onBackClicked(); - } - } - - private class FileItemHistory { - int index, top; - FileWatcher.FileItem clickedItem; - } - - public interface Callback { - void onBackClicked(); - - void onFileItemClicked(FileWatcher.FileItem fileItem); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/FilterLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/FilterLayout.java deleted file mode 100644 index 57844ab4a4..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/FilterLayout.java +++ /dev/null @@ -1,395 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Typeface; -import android.support.v7.app.AlertDialog; -import android.text.Editable; -import android.text.Html; -import android.text.SpannableStringBuilder; -import android.text.TextUtils; -import android.text.TextWatcher; -import android.text.style.BackgroundColorSpan; -import android.text.style.StyleSpan; -import android.text.style.TypefaceSpan; -import android.util.AttributeSet; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.CheckBox; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.core.manager.BoardManager; -import org.floens.chan.core.manager.FilterEngine; -import org.floens.chan.core.manager.FilterType; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.model.orm.Filter; -import org.floens.chan.core.repository.BoardRepository; -import org.floens.chan.ui.controller.FiltersController; -import org.floens.chan.ui.dialog.ColorPickerView; -import org.floens.chan.ui.drawable.DropdownArrowDrawable; -import org.floens.chan.ui.helper.BoardHelper; -import org.floens.chan.ui.view.FloatingMenu; -import org.floens.chan.ui.view.FloatingMenuItem; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.ui.theme.ThemeHelper.theme; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class FilterLayout extends LinearLayout implements View.OnClickListener { - private TextView typeText; - private TextView boardsSelector; - private boolean patternContainerErrorShowing = false; - private TextView pattern; - private TextView patternPreview; - private TextView patternPreviewStatus; - private CheckBox enabled; - private ImageView help; - private TextView actionText; - private LinearLayout colorContainer; - private View colorPreview; - - @Inject - BoardManager boardManager; - - @Inject - FilterEngine filterEngine; - - private FilterLayoutCallback callback; - private Filter filter; - - public FilterLayout(Context context) { - super(context); - } - - public FilterLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public FilterLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - inject(this); - - typeText = findViewById(R.id.type); - boardsSelector = findViewById(R.id.boards); - actionText = findViewById(R.id.action); - pattern = findViewById(R.id.pattern); - pattern.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - filter.pattern = s.toString(); - updateFilterValidity(); - updatePatternPreview(); - } - - @Override - public void afterTextChanged(Editable s) { - } - }); - patternPreview = findViewById(R.id.pattern_preview); - patternPreview.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - updatePatternPreview(); - } - - @Override - public void afterTextChanged(Editable s) { - } - }); - patternPreviewStatus = findViewById(R.id.pattern_preview_status); - enabled = findViewById(R.id.enabled); - help = findViewById(R.id.help); - theme().helpDrawable.apply(help); - help.setOnClickListener(this); - colorContainer = findViewById(R.id.color_container); - colorContainer.setOnClickListener(this); - colorPreview = findViewById(R.id.color_preview); - - typeText.setOnClickListener(this); - typeText.setCompoundDrawablesWithIntrinsicBounds(null, null, new DropdownArrowDrawable(dp(12), dp(12), true, - getAttrColor(getContext(), R.attr.dropdown_dark_color), getAttrColor(getContext(), R.attr.dropdown_dark_pressed_color)), null); - - boardsSelector.setOnClickListener(this); - boardsSelector.setCompoundDrawablesWithIntrinsicBounds(null, null, new DropdownArrowDrawable(dp(12), dp(12), true, - getAttrColor(getContext(), R.attr.dropdown_dark_color), getAttrColor(getContext(), R.attr.dropdown_dark_pressed_color)), null); - - actionText.setOnClickListener(this); - actionText.setCompoundDrawablesWithIntrinsicBounds(null, null, new DropdownArrowDrawable(dp(12), dp(12), true, - getAttrColor(getContext(), R.attr.dropdown_dark_color), getAttrColor(getContext(), R.attr.dropdown_dark_pressed_color)), null); - } - - public void setFilter(Filter filter) { - this.filter = filter; - - pattern.setText(filter.pattern); - - updateFilterValidity(); - updateCheckboxes(); - updateFilterType(); - updateFilterAction(); - updateBoardsSummary(); - updatePatternPreview(); - } - - public void setCallback(FilterLayoutCallback callback) { - this.callback = callback; - } - - public Filter getFilter() { - filter.enabled = enabled.isChecked(); - - return filter; - } - - @Override - public void onClick(View v) { - if (v == typeText) { - @SuppressWarnings("unchecked") final SelectLayout selectLayout = - (SelectLayout) LayoutInflater.from(getContext()) - .inflate(R.layout.layout_select, null); - - List> items = new ArrayList<>(); - for (FilterType filterType : FilterType.values()) { - String name = FiltersController.filterTypeName(filterType); - String description = getString(filterType.isRegex ? R.string.filter_type_regex_matching : R.string.filter_type_string_matching); - boolean checked = filter.hasFilter(filterType); - - items.add(new SelectLayout.SelectItem<>( - filterType, filterType.flag, name, description, name, checked - )); - } - - selectLayout.setItems(items); - - new AlertDialog.Builder(getContext()) - .setView(selectLayout) - .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - List> items = selectLayout.getItems(); - int flags = 0; - for (SelectLayout.SelectItem item : items) { - if (item.checked) { - flags |= item.item.flag; - } - } - - filter.type = flags; - updateFilterType(); - updatePatternPreview(); - } - }) - .show(); - } else if (v == boardsSelector) { - @SuppressLint("InflateParams") @SuppressWarnings("unchecked") final SelectLayout selectLayout = - (SelectLayout) LayoutInflater.from(getContext()) - .inflate(R.layout.layout_select, null); - - List> items = new ArrayList<>(); - - List allSavedBoards = new ArrayList<>(); - for (BoardRepository.SiteBoards item : boardManager.getSavedBoardsObservable().get()) { - allSavedBoards.addAll(item.boards); - } - - for (Board board : allSavedBoards) { - String name = BoardHelper.getName(board); - boolean checked = filterEngine.matchesBoard(filter, board); - - items.add(new SelectLayout.SelectItem<>( - board, board.id, name, "", name, checked - )); - } - - selectLayout.setItems(items); - - new AlertDialog.Builder(getContext()) - .setView(selectLayout) - .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - List> items = selectLayout.getItems(); - boolean all = selectLayout.areAllChecked(); - List boardList = new ArrayList<>(items.size()); - if (!all) { - for (SelectLayout.SelectItem item : items) { - if (item.checked) { - boardList.add(item.item); - } - } - if (boardList.isEmpty()) { - all = true; - } - } - - filterEngine.saveBoardsToFilter(boardList, all, filter); - - updateBoardsSummary(); - } - }) - .show(); - } else if (v == actionText) { - List menuItems = new ArrayList<>(6); - - for (FilterEngine.FilterAction action : FilterEngine.FilterAction.values()) { - menuItems.add(new FloatingMenuItem(action, FiltersController.actionName(action))); - } - - FloatingMenu menu = new FloatingMenu(v.getContext()); - menu.setAnchor(v, Gravity.LEFT, -dp(5), -dp(5)); - menu.setPopupWidth(dp(150)); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - FilterEngine.FilterAction action = (FilterEngine.FilterAction) item.getId(); - filter.action = action.id; - updateFilterAction(); - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - }); - menu.setItems(menuItems); - menu.show(); - } else if (v == help) { - SpannableStringBuilder message = (SpannableStringBuilder) Html.fromHtml(getString(R.string.filter_help)); - TypefaceSpan[] typefaceSpans = message.getSpans(0, message.length(), TypefaceSpan.class); - for (TypefaceSpan span : typefaceSpans) { - if (span.getFamily().equals("monospace")) { - int start = message.getSpanStart(span); - int end = message.getSpanEnd(span); - message.setSpan(new BackgroundColorSpan(0x22000000), start, end, 0); - } - } - - StyleSpan[] styleSpans = message.getSpans(0, message.length(), StyleSpan.class); - for (StyleSpan span : styleSpans) { - if (span.getStyle() == Typeface.ITALIC) { - int start = message.getSpanStart(span); - int end = message.getSpanEnd(span); - message.setSpan(new BackgroundColorSpan(0x22000000), start, end, 0); - } - } - - new AlertDialog.Builder(getContext()) - .setTitle(R.string.filter_help_title) - .setMessage(message) - .setPositiveButton(R.string.ok, null) - .show(); - } else if (v == colorContainer) { - final ColorPickerView colorPickerView = new ColorPickerView(getContext()); - colorPickerView.setColor(filter.color); - - AlertDialog dialog = new AlertDialog.Builder(getContext()) - .setTitle(R.string.filter_color_pick) - .setView(colorPickerView) - .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - filter.color = colorPickerView.getColor(); - updateFilterAction(); - } - }) - .show(); - dialog.getWindow().setLayout(dp(300), dp(300)); - } - } - - private void updateFilterValidity() { - boolean valid = !TextUtils.isEmpty(filter.pattern) && filterEngine.compile(filter.pattern) != null; - - if (valid != patternContainerErrorShowing) { - patternContainerErrorShowing = valid; - pattern.setError(valid ? null : getString(R.string.filter_invalid_pattern)); - } - - if (callback != null) { - callback.setSaveButtonEnabled(valid); - } - } - - private void updateBoardsSummary() { - String text = getString(R.string.filter_boards) + " ("; - if (filter.allBoards) { - text += getString(R.string.filter_all); - } else { - text += filterEngine.getFilterBoardCount(filter); - } - text += ")"; - boardsSelector.setText(text); - } - - private void updateCheckboxes() { - enabled.setChecked(filter.enabled); - } - - private void updateFilterAction() { - FilterEngine.FilterAction action = FilterEngine.FilterAction.forId(filter.action); - actionText.setText(FiltersController.actionName(action)); - colorContainer.setVisibility(action == FilterEngine.FilterAction.COLOR ? VISIBLE : GONE); - if (filter.color == 0) { - filter.color = 0xffff0000; - } - colorPreview.setBackgroundColor(filter.color); - } - - private void updateFilterType() { - int types = FilterType.forFlags(filter.type).size(); - String text = getString(R.string.filter_types) + " (" + types + ")"; - typeText.setText(text); - } - - private void updatePatternPreview() { - String text = patternPreview.getText().toString(); - boolean matches = text.length() > 0 && filterEngine.matches(filter, true, text, true); - patternPreviewStatus.setText(matches ? R.string.filter_matches : R.string.filter_no_matches); - } - - public interface FilterLayoutCallback { - void setSaveButtonEnabled(boolean enabled); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/FixedRatioLinearLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/FixedRatioLinearLayout.java deleted file mode 100644 index 630cb7a9db..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/FixedRatioLinearLayout.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.content.Context; -import android.util.AttributeSet; -import android.widget.LinearLayout; - -public class FixedRatioLinearLayout extends LinearLayout { - private float ratio; - - public FixedRatioLinearLayout(Context context) { - super(context); - } - - public FixedRatioLinearLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public FixedRatioLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public void setRatio(float ratio) { - this.ratio = ratio; - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int heightMode = MeasureSpec.getMode(heightMeasureSpec); - if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY && (heightMode == MeasureSpec.UNSPECIFIED || heightMode == MeasureSpec.AT_MOST)) { - int width = MeasureSpec.getSize(widthMeasureSpec); - - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec((int) (width / ratio), MeasureSpec.EXACTLY)); - } else { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/PostRepliesContainer.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/PostRepliesContainer.java deleted file mode 100644 index 723546517b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/PostRepliesContainer.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.content.Context; -import android.util.AttributeSet; -import android.widget.LinearLayout; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public class PostRepliesContainer extends LinearLayout { - public PostRepliesContainer(Context context) { - super(context); - } - - public PostRepliesContainer(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public PostRepliesContainer(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int maxWidth = dp(600); - - if (MeasureSpec.getSize(widthMeasureSpec) > maxWidth) { - widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.getMode(widthMeasureSpec)); - } - - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ReplyLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ReplyLayout.java deleted file mode 100644 index 73c53ebf32..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ReplyLayout.java +++ /dev/null @@ -1,594 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.animation.ValueAnimator; -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.text.Editable; -import android.text.TextWatcher; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; -import android.view.animation.DecelerateInterpolator; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.EditText; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import org.floens.chan.R; -import org.floens.chan.core.model.ChanThread; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.presenter.ReplyPresenter; -import org.floens.chan.core.site.SiteAuthentication; -import org.floens.chan.core.site.Site; -import org.floens.chan.core.site.http.Reply; -import org.floens.chan.ui.activity.StartActivity; -import org.floens.chan.ui.captcha.AuthenticationLayoutCallback; -import org.floens.chan.ui.captcha.AuthenticationLayoutInterface; -import org.floens.chan.ui.captcha.CaptchaLayout; -import org.floens.chan.ui.captcha.GenericWebViewAuthenticationLayout; -import org.floens.chan.ui.captcha.LegacyCaptchaLayout; -import org.floens.chan.ui.captcha.v1.CaptchaNojsLayoutV1; -import org.floens.chan.ui.captcha.v2.CaptchaNoJsLayoutV2; -import org.floens.chan.ui.drawable.DropdownArrowDrawable; -import org.floens.chan.ui.helper.ImagePickDelegate; -import org.floens.chan.ui.view.LoadView; -import org.floens.chan.ui.view.SelectionListeningEditText; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.ImageDecoder; - -import java.io.File; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.ui.theme.ThemeHelper.theme; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; -import static org.floens.chan.utils.AndroidUtils.getString; -import static org.floens.chan.utils.AndroidUtils.setRoundItemBackground; - -public class ReplyLayout extends LoadView implements View.OnClickListener, ReplyPresenter.ReplyPresenterCallback, TextWatcher, ImageDecoder.ImageDecoderCallback, SelectionListeningEditText.SelectionChangedListener { - @Inject - ReplyPresenter presenter; - - private ReplyLayoutCallback callback; - private boolean newCaptcha; - - private AuthenticationLayoutInterface authenticationLayout; - private boolean openingName; - - private boolean blockSelectionChange = false; - - // Reply views: - private View replyInputLayout; - private TextView message; - private EditText name; - private EditText subject; - private EditText options; - private EditText fileName; - private LinearLayout nameOptions; - private ViewGroup commentButtons; - private Button commentQuoteButton; - private Button commentSpoilerButton; - private SelectionListeningEditText comment; - private TextView commentCounter; - private CheckBox spoiler; - private ImageView preview; - private TextView previewMessage; - private ImageView attach; - private ImageView more; - private ImageView submit; - private DropdownArrowDrawable moreDropdown; - - // Captcha views: - private FrameLayout captchaContainer; - private ImageView captchaHardReset; - - private Runnable closeMessageRunnable = new Runnable() { - @Override - public void run() { - message.setVisibility(View.GONE); - } - }; - - public ReplyLayout(Context context) { - this(context, null); - } - - public ReplyLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public ReplyLayout(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - inject(this); - - final LayoutInflater inflater = LayoutInflater.from(getContext()); - - // Inflate reply input - replyInputLayout = inflater.inflate(R.layout.layout_reply_input, this, false); - message = replyInputLayout.findViewById(R.id.message); - name = replyInputLayout.findViewById(R.id.name); - subject = replyInputLayout.findViewById(R.id.subject); - options = replyInputLayout.findViewById(R.id.options); - fileName = replyInputLayout.findViewById(R.id.file_name); - nameOptions = replyInputLayout.findViewById(R.id.name_options); - commentButtons = replyInputLayout.findViewById(R.id.comment_buttons); - commentQuoteButton = replyInputLayout.findViewById(R.id.comment_quote); - commentSpoilerButton = replyInputLayout.findViewById(R.id.comment_spoiler); - comment = replyInputLayout.findViewById(R.id.comment); - commentCounter = replyInputLayout.findViewById(R.id.comment_counter); - spoiler = replyInputLayout.findViewById(R.id.spoiler); - preview = replyInputLayout.findViewById(R.id.preview); - previewMessage = replyInputLayout.findViewById(R.id.preview_message); - attach = replyInputLayout.findViewById(R.id.attach); - more = replyInputLayout.findViewById(R.id.more); - submit = replyInputLayout.findViewById(R.id.submit); - - // Setup reply layout views - commentQuoteButton.setOnClickListener(this); - commentSpoilerButton.setOnClickListener(this); - - comment.addTextChangedListener(this); - comment.setSelectionChangedListener(this); - - preview.setOnClickListener(this); - - moreDropdown = new DropdownArrowDrawable(dp(16), dp(16), true, - getAttrColor(getContext(), R.attr.dropdown_dark_color), - getAttrColor(getContext(), R.attr.dropdown_dark_pressed_color)); - more.setImageDrawable(moreDropdown); - setRoundItemBackground(more); - more.setOnClickListener(this); - - theme().imageDrawable.apply(attach); - setRoundItemBackground(attach); - attach.setOnClickListener(this); - - theme().sendDrawable.apply(submit); - setRoundItemBackground(submit); - submit.setOnClickListener(this); - - // Inflate captcha layout - captchaContainer = (FrameLayout) inflater.inflate(R.layout.layout_reply_captcha, this, false); - captchaHardReset = captchaContainer.findViewById(R.id.reset); - - // Setup captcha layout views - captchaContainer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); - - theme().refreshDrawable.apply(captchaHardReset); - setRoundItemBackground(captchaHardReset); - captchaHardReset.setOnClickListener(this); - - setView(replyInputLayout); - - // Presenter - presenter.create(this); - } - - public void setCallback(ReplyLayoutCallback callback) { - this.callback = callback; - } - - public ReplyPresenter getPresenter() { - return presenter; - } - - public void onOpen(boolean open) { - presenter.onOpen(open); - } - - public void bindLoadable(Loadable loadable) { - presenter.bindLoadable(loadable); - } - - public void cleanup() { - presenter.unbindLoadable(); - removeCallbacks(closeMessageRunnable); - } - - public boolean onBack() { - return presenter.onBack(); - } - - private void setWrap(boolean wrap) { - setLayoutParams(new LayoutParams( - LayoutParams.MATCH_PARENT, - wrap ? LayoutParams.WRAP_CONTENT : LayoutParams.MATCH_PARENT - )); - } - - @Override - public void onClick(View v) { - if (v == more) { - presenter.onMoreClicked(); - } else if (v == attach) { - presenter.onAttachClicked(); - } else if (v == submit) { - presenter.onSubmitClicked(); - }/* else if (v == preview) { - // TODO - }*/ else if (v == captchaHardReset) { - if (authenticationLayout != null) { - authenticationLayout.hardReset(); - } - } else if (v == commentQuoteButton) { - presenter.commentQuoteClicked(); - } else if (v == commentSpoilerButton) { - presenter.commentSpoilerClicked(); - } - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public boolean onTouchEvent(MotionEvent event) { - return true; - } - - @Override - public void initializeAuthentication(Site site, - SiteAuthentication authentication, - AuthenticationLayoutCallback callback, - boolean useV2NoJsCaptcha) { - if (authenticationLayout == null) { - switch (authentication.type) { - case CAPTCHA1: { - final LayoutInflater inflater = LayoutInflater.from(getContext()); - authenticationLayout = (LegacyCaptchaLayout) inflater.inflate( - R.layout.layout_captcha_legacy, captchaContainer, false); - break; - } - case CAPTCHA2: { - authenticationLayout = new CaptchaLayout(getContext()); - break; - } - case CAPTCHA2_NOJS: - if (useV2NoJsCaptcha) { - // new captcha window without webview - authenticationLayout = new CaptchaNoJsLayoutV2(getContext()); - } else { - // default webview-based captcha view - authenticationLayout = new CaptchaNojsLayoutV1(getContext()); - } - - ImageView resetButton = captchaContainer.findViewById(R.id.reset); - if (resetButton != null) { - if (useV2NoJsCaptcha) { - // we don't need the default reset button because we have our own - resetButton.setVisibility(View.GONE); - } else { - // restore the button's visibility when using old v1 captcha view - resetButton.setVisibility(View.VISIBLE); - } - } - - break; - case GENERIC_WEBVIEW: { - GenericWebViewAuthenticationLayout view = new GenericWebViewAuthenticationLayout(getContext()); - - FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( - LayoutParams.MATCH_PARENT, - LayoutParams.MATCH_PARENT - ); -// params.setMargins(dp(8), dp(8), dp(8), dp(200)); - view.setLayoutParams(params); - - authenticationLayout = view; - break; - } - case NONE: - default: { - throw new IllegalArgumentException(); - } - } - - captchaContainer.addView((View) authenticationLayout, 0); - } - - if (!(authenticationLayout instanceof LegacyCaptchaLayout)) { - AndroidUtils.hideKeyboard(this); - } - - authenticationLayout.initialize(site, callback); - authenticationLayout.reset(); - } - - @Override - public void setPage(ReplyPresenter.Page page, boolean animate) { - switch (page) { - case LOADING: - setWrap(true); - View progressBar = setView(null); - progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, dp(100))); - break; - case INPUT: - setView(replyInputLayout); - setWrap(!presenter.isExpanded()); - break; - case AUTHENTICATION: - setWrap(false); - - setView(captchaContainer); - - captchaContainer.requestFocus(View.FOCUS_DOWN); - - break; - } - - if (page != ReplyPresenter.Page.AUTHENTICATION && authenticationLayout != null) { - AndroidUtils.removeFromParentView((View) authenticationLayout); - authenticationLayout = null; - } - } - - @Override - public void resetAuthentication() { - authenticationLayout.reset(); - } - - @Override - public void destroyCurrentAuthentication() { - if (authenticationLayout == null) { - return; - } - - if (!(authenticationLayout instanceof CaptchaNoJsLayoutV2)) { - return; - } - - // cleanup resources when switching from the new to the old captcha view - ((CaptchaNoJsLayoutV2) authenticationLayout).onDestroy(); - captchaContainer.removeView((CaptchaNoJsLayoutV2) authenticationLayout); - authenticationLayout = null; - } - - @Override - public void loadDraftIntoViews(Reply draft) { - name.setText(draft.name); - subject.setText(draft.subject); - options.setText(draft.options); - blockSelectionChange = true; - comment.setText(draft.comment); - comment.setSelection(draft.selection); - blockSelectionChange = false; - fileName.setText(draft.fileName); - spoiler.setChecked(draft.spoilerImage); - } - - @Override - public void loadViewsIntoDraft(Reply draft) { - draft.name = name.getText().toString(); - draft.subject = subject.getText().toString(); - draft.options = options.getText().toString(); - draft.comment = comment.getText().toString(); - draft.selection = comment.getSelectionStart(); - draft.fileName = fileName.getText().toString(); - draft.spoilerImage = spoiler.isChecked(); - } - - @Override - public void openMessage(boolean open, boolean animate, String text, boolean autoHide) { - removeCallbacks(closeMessageRunnable); - message.setText(text); - message.setVisibility(open ? View.VISIBLE : View.GONE); - - if (autoHide) { - postDelayed(closeMessageRunnable, 5000); - } - } - - @Override - public void onPosted() { - Toast.makeText(getContext(), R.string.reply_success, Toast.LENGTH_SHORT).show(); - callback.openReply(false); - callback.requestNewPostLoad(); - } - - @Override - public void setCommentHint(String hint) { - comment.setHint(hint); - } - - @Override - public void showCommentCounter(boolean show) { - commentCounter.setVisibility(show ? View.VISIBLE : View.GONE); - } - - @Override - public void setExpanded(boolean expanded) { - setWrap(!expanded); - - comment.setMaxLines(expanded ? 500 : 6); - - preview.setLayoutParams(new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, - expanded ? dp(150) : dp(100) - )); - - ValueAnimator animator = ValueAnimator.ofFloat(expanded ? 0f : 1f, expanded ? 1f : 0f); - animator.setInterpolator(new DecelerateInterpolator(2f)); - animator.setDuration(400); - animator.addUpdateListener(animation -> - moreDropdown.setRotation((float) animation.getAnimatedValue())); - animator.start(); - } - - @Override - public void openNameOptions(boolean open) { - openingName = open; - nameOptions.setVisibility(open ? View.VISIBLE : View.GONE); - } - - @Override - public void openSubject(boolean open) { - subject.setVisibility(open ? View.VISIBLE : View.GONE); - } - - @Override - public void openCommentQuoteButton(boolean open) { - commentQuoteButton.setVisibility(open ? View.VISIBLE : View.GONE); - } - - @Override - public void openCommentSpoilerButton(boolean open) { - commentSpoilerButton.setVisibility(open ? View.VISIBLE : View.GONE); - } - - @Override - public void openFileName(boolean open) { - fileName.setVisibility(open ? View.VISIBLE : View.GONE); - } - - @Override - public void setFileName(String name) { - fileName.setText(name); - } - - @SuppressLint("SetTextI18n") - @Override - public void updateCommentCount(int count, int maxCount, boolean over) { - commentCounter.setText(count + "/" + maxCount); - //noinspection ResourceAsColor - commentCounter.setTextColor(over ? 0xffff0000 : getAttrColor(getContext(), R.attr.text_color_secondary)); - } - - public void focusComment() { - comment.post(() -> AndroidUtils.requestViewAndKeyboardFocus(comment)); - } - - @Override - public void onFallbackToV1CaptchaView() { - // fallback to v1 captcha window - presenter.switchPage(ReplyPresenter.Page.AUTHENTICATION, true, false); - } - - @Override - public void openPreview(boolean show, File previewFile) { - if (show) { - theme().clearDrawable.apply(attach); - } else { - theme().imageDrawable.apply(attach); - } - - if (show) { - ImageDecoder.decodeFileOnBackgroundThread(previewFile, dp(400), dp(300), this); - } else { - spoiler.setVisibility(View.GONE); - preview.setVisibility(View.GONE); - previewMessage.setVisibility(View.GONE); - } - } - - @Override - public void openPreviewMessage(boolean show, String message) { - previewMessage.setVisibility(show ? VISIBLE : GONE); - previewMessage.setText(message); - } - - @Override - public void openSpoiler(boolean show, boolean checked) { - spoiler.setVisibility(show ? View.VISIBLE : View.GONE); - spoiler.setChecked(checked); - } - - @Override - public void onImageBitmap(File file, Bitmap bitmap) { - if (bitmap != null) { - preview.setImageBitmap(bitmap); - preview.setVisibility(View.VISIBLE); - } else { - openPreviewMessage(true, getString(R.string.reply_no_preview)); - } - } - - @Override - public void onFilePickLoading() { - // TODO - } - - @Override - public void onFilePickError() { - Toast.makeText(getContext(), R.string.reply_file_open_failed, Toast.LENGTH_LONG).show(); - } - - @Override - public void highlightPostNo(int no) { - callback.highlightPostNo(no); - } - - @Override - public void onSelectionChanged(int selStart, int selEnd) { - if (!blockSelectionChange) { - presenter.onSelectionChanged(); - } - } - - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - } - - @Override - public void afterTextChanged(Editable s) { - presenter.onCommentTextChanged(comment.getText()); - } - - @Override - public void showThread(Loadable loadable) { - callback.showThread(loadable); - } - - @Override - public ImagePickDelegate getImagePickDelegate() { - return ((StartActivity) getContext()).getImagePickDelegate(); - } - - @Override - public ChanThread getThread() { - return callback.getThread(); - } - - public interface ReplyLayoutCallback { - void highlightPostNo(int no); - - void openReply(boolean open); - - void showThread(Loadable loadable); - - void requestNewPostLoad(); - - ChanThread getThread(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/SearchLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/SearchLayout.java deleted file mode 100644 index c5e63a5acb..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/SearchLayout.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.content.Context; -import android.text.Editable; -import android.text.TextWatcher; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.KeyEvent; -import android.view.View; -import android.view.inputmethod.EditorInfo; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.utils.AndroidUtils; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public class SearchLayout extends LinearLayout { - private EditText searchView; - private ImageView clearButton; - - public SearchLayout(Context context) { - super(context); - } - - public SearchLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public SearchLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public void setCallback(final SearchLayoutCallback callback) { - searchView = new EditText(getContext()); - searchView.setImeOptions(EditorInfo.IME_FLAG_NO_FULLSCREEN | EditorInfo.IME_ACTION_DONE); - searchView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); - searchView.setHintTextColor(0x88ffffff); - searchView.setTextColor(0xffffffff); - searchView.setSingleLine(true); - searchView.setBackgroundResource(0); - searchView.setPadding(0, 0, 0, 0); - clearButton = new ImageView(getContext()); - searchView.addTextChangedListener(new TextWatcher() { - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - clearButton.setAlpha(s.length() == 0 ? 0.0f : 1.0f); - callback.onSearchEntered(s.toString()); - } - - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void afterTextChanged(Editable s) { - } - }); - searchView.setOnEditorActionListener(new TextView.OnEditorActionListener() { - @Override - public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { - if (actionId == EditorInfo.IME_ACTION_DONE) { - AndroidUtils.hideKeyboard(searchView); - callback.onSearchEntered(searchView.getText().toString()); - return true; - } - return false; - } - }); - LinearLayout.LayoutParams searchViewParams = new LinearLayout.LayoutParams(0, dp(36), 1); - searchViewParams.gravity = Gravity.CENTER_VERTICAL; - addView(searchView, searchViewParams); - - clearButton.setAlpha(0f); - clearButton.setImageResource(R.drawable.ic_clear_white_24dp); - clearButton.setScaleType(ImageView.ScaleType.CENTER); - clearButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - searchView.setText(""); - AndroidUtils.requestKeyboardFocus(searchView); - } - }); - addView(clearButton, dp(48), LayoutParams.MATCH_PARENT); - } - - public void setHintColor(int color) { - searchView.setHintTextColor(color); - } - - public void setTextColor(int color) { - searchView.setTextColor(color); - } - - public void setClearButtonImage(int image) { - clearButton.setImageResource(image); - } - - public void setText(String text) { - searchView.setText(text); - } - - public String getText() { - return searchView.getText().toString(); - } - - public void setHint(String hint) { - searchView.setHint(hint); - } - - public void openKeyboard() { - searchView.post(() -> AndroidUtils.requestViewAndKeyboardFocus(searchView)); - } - - public interface SearchLayoutCallback { - void onSearchEntered(String entered); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/SelectLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/SelectLayout.java deleted file mode 100644 index 043b8ec95d..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/SelectLayout.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.content.Context; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.floens.chan.R; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -import static org.floens.chan.utils.AndroidUtils.getAttrColor; -import static org.floens.chan.utils.AndroidUtils.getString; - -public class SelectLayout extends LinearLayout implements SearchLayout.SearchLayoutCallback, View.OnClickListener { - private SearchLayout searchLayout; - private RecyclerView recyclerView; - private Button checkAllButton; - - private List> items = new ArrayList<>(); - private SelectAdapter adapter; - private boolean allChecked = false; - - public SelectLayout(Context context) { - super(context); - } - - public SelectLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public SelectLayout(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - public void onSearchEntered(String entered) { - adapter.search(entered); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - searchLayout = findViewById(R.id.search_layout); - searchLayout.setCallback(this); - searchLayout.setHint(getString(R.string.search_hint)); - searchLayout.setTextColor(getAttrColor(getContext(), R.attr.text_color_primary)); - searchLayout.setHintColor(getAttrColor(getContext(), R.attr.text_color_hint)); - searchLayout.setClearButtonImage(R.drawable.ic_clear_black_24dp); - - checkAllButton = findViewById(R.id.select_all); - checkAllButton.setOnClickListener(this); - - recyclerView = findViewById(R.id.recycler_view); - recyclerView.setHasFixedSize(true); - recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - } - - public void setItems(List> items) { - this.items.clear(); - this.items.addAll(items); - - adapter = new SelectAdapter(); - recyclerView.setAdapter(adapter); - adapter.load(); - - updateAllSelected(); - } - - public List> getItems() { - return items; - } - - public List> getSelectedItems() { - List> result = new ArrayList<>(items.size()); - for (int i = 0; i < items.size(); i++) { - SelectItem item = items.get(i); - if (item.checked) { - result.add(item); - } - } - return result; - } - - @Override - public void onClick(View v) { - if (v == checkAllButton) { - for (SelectItem item : items) { - item.checked = !allChecked; - } - - updateAllSelected(); - recyclerView.getAdapter().notifyDataSetChanged(); - } - } - - public boolean areAllChecked() { - return allChecked; - } - - private void updateAllSelected() { - int checkedCount = 0; - for (SelectItem item : items) { - if (item.checked) { - checkedCount++; - } - } - - allChecked = checkedCount == items.size(); - checkAllButton.setText(allChecked ? R.string.board_select_none : R.string.board_select_all); - } - - private class SelectAdapter extends RecyclerView.Adapter { - private List sourceList = new ArrayList<>(); - private List displayList = new ArrayList<>(); - private String searchQuery; - - public SelectAdapter() { - setHasStableIds(true); - } - - @Override - public BoardSelectViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new BoardSelectViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_select, parent, false)); - } - - @Override - public void onBindViewHolder(BoardSelectViewHolder holder, int position) { - SelectItem item = displayList.get(position); - holder.checkBox.setChecked(item.checked); - holder.text.setText(item.name); - if (item.description != null) { - holder.description.setVisibility(View.VISIBLE); - holder.description.setText(item.description); - } else { - holder.description.setVisibility(View.GONE); - } - } - - @Override - public int getItemCount() { - return displayList.size(); - } - - @Override - public long getItemId(int position) { - return displayList.get(position).id; - } - - public void search(String query) { - this.searchQuery = query; - filter(); - } - - private void load() { - sourceList.clear(); - sourceList.addAll(items); - - filter(); - } - - private void filter() { - displayList.clear(); - if (!TextUtils.isEmpty(searchQuery)) { - String query = searchQuery.toLowerCase(Locale.ENGLISH); - for (int i = 0; i < sourceList.size(); i++) { - SelectItem item = sourceList.get(i); - if (item.searchTerm.toLowerCase(Locale.ENGLISH).contains(query)) { - displayList.add(item); - } - } - } else { - displayList.addAll(sourceList); - } - - notifyDataSetChanged(); - } - } - - private class BoardSelectViewHolder extends RecyclerView.ViewHolder implements CompoundButton.OnCheckedChangeListener, OnClickListener { - private CheckBox checkBox; - private TextView text; - private TextView description; - - public BoardSelectViewHolder(View itemView) { - super(itemView); - checkBox = itemView.findViewById(R.id.checkbox); - text = itemView.findViewById(R.id.text); - description = itemView.findViewById(R.id.description); - - checkBox.setOnCheckedChangeListener(this); - - itemView.setOnClickListener(this); - } - - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (buttonView == checkBox) { - SelectItem board = adapter.displayList.get(getAdapterPosition()); - board.checked = isChecked; - updateAllSelected(); - } - } - - @Override - public void onClick(View v) { - checkBox.toggle(); - } - } - - public static class SelectItem { - public final T item; - public final long id; - public final String name; - public final String description; - public final String searchTerm; - public boolean checked; - - public SelectItem(T item, long id, String name, String description, String searchTerm, boolean checked) { - this.item = item; - this.id = id; - this.name = name; - this.description = description; - this.searchTerm = searchTerm; - this.checked = checked; - } - } -} - diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/SiteAddLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/SiteAddLayout.java deleted file mode 100644 index 08fe00207e..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/SiteAddLayout.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.floens.chan.ui.layout; - -import android.app.Dialog; -import android.content.Context; -import android.support.design.widget.TextInputLayout; -import android.util.AttributeSet; -import android.widget.EditText; -import android.widget.LinearLayout; - -import org.floens.chan.R; -import org.floens.chan.core.presenter.SitesSetupPresenter; - -public class SiteAddLayout extends LinearLayout implements SitesSetupPresenter.AddCallback { - private EditText url; - private TextInputLayout urlContainer; - - private Dialog dialog; - private SitesSetupPresenter presenter; - - public SiteAddLayout(Context context) { - this(context, null); - } - - public SiteAddLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public SiteAddLayout(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - urlContainer = findViewById(R.id.url_container); - url = findViewById(R.id.url); - url.setHint(R.string.setup_sites_url_hint); - } - - public void setDialog(Dialog dialog) { - this.dialog = dialog; - } - - public void setPresenter(SitesSetupPresenter presenter) { - this.presenter = presenter; - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - presenter.bindAddDialog(this); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - presenter.unbindAddDialog(); - } - - public void onPositiveClicked() { - presenter.onAddClicked(url.getText().toString()); - } - - @Override - public void showAddError(String error) { - urlContainer.setError(error); - } - - @Override - public void dismissDialog() { - dialog.dismiss(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/SplitNavigationControllerLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/SplitNavigationControllerLayout.java deleted file mode 100644 index a1c01e440c..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/SplitNavigationControllerLayout.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public class SplitNavigationControllerLayout extends LinearLayout { - private final int dividerWidth; - private final int minimumLeftWidth; - private final double ratio; - - private ViewGroup leftView; - private ViewGroup rightView; - private View divider; - - public SplitNavigationControllerLayout(Context context) { - this(context, null); - } - - public SplitNavigationControllerLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public SplitNavigationControllerLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - - setOrientation(LinearLayout.HORIZONTAL); - - dividerWidth = dp(1); - minimumLeftWidth = dp(300); - ratio = 0.35; - } - - public void setLeftView(ViewGroup leftView) { - this.leftView = leftView; - } - - public void setRightView(ViewGroup rightView) { - this.rightView = rightView; - } - - public void setDivider(View divider) { - this.divider = divider; - } - - public void build() { - addView(leftView, new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT)); - addView(divider, new LinearLayout.LayoutParams(dividerWidth, LinearLayout.LayoutParams.MATCH_PARENT)); - addView(rightView, new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT)); - } - - @Override - protected void measureChildren(int widthMeasureSpec, int heightMeasureSpec) { - super.measureChildren(widthMeasureSpec, heightMeasureSpec); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int widthMode = MeasureSpec.getMode(widthMeasureSpec); - int widthSize = MeasureSpec.getSize(widthMeasureSpec); - - if (widthMode == MeasureSpec.UNSPECIFIED) { - throw new IllegalArgumentException(); - } - - int minWidth = Math.min(minimumLeftWidth, widthSize / 2); - int leftWidth = Math.max(minWidth, (int) (widthSize * ratio)); - int rightWidth = widthSize - dividerWidth - leftWidth; - leftView.getLayoutParams().width = leftWidth; - rightView.getLayoutParams().width = rightWidth; - - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java deleted file mode 100644 index 018226aa1b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java +++ /dev/null @@ -1,614 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.content.Context; -import android.content.DialogInterface; -import android.support.design.widget.CoordinatorLayout; -import android.support.design.widget.Snackbar; -import android.support.v7.app.AlertDialog; -import android.util.AttributeSet; -import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.View; -import android.view.animation.DecelerateInterpolator; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.exception.ChanLoaderException; -import org.floens.chan.core.model.ChanThread; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.PostLinkable; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.model.orm.ThreadHide; -import org.floens.chan.core.presenter.ThreadPresenter; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.adapter.PostsFilter; -import org.floens.chan.ui.helper.PostPopupHelper; -import org.floens.chan.ui.toolbar.Toolbar; -import org.floens.chan.ui.view.HidingFloatingActionButton; -import org.floens.chan.ui.view.LoadView; -import org.floens.chan.ui.view.ThumbnailView; -import org.floens.chan.utils.AndroidUtils; - -import java.util.List; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; -import static org.floens.chan.ui.theme.ThemeHelper.theme; -import static org.floens.chan.utils.AndroidUtils.fixSnackbarText; -import static org.floens.chan.utils.AndroidUtils.getString; - -/** - * Wrapper around ThreadListLayout, so that it cleanly manages between a loading state - * and the recycler view. - */ -public class ThreadLayout extends CoordinatorLayout implements - ThreadPresenter.ThreadPresenterCallback, - PostPopupHelper.PostPopupHelperCallback, - View.OnClickListener, - ThreadListLayout.ThreadListLayoutCallback { - private enum Visible { - EMPTY, - LOADING, - THREAD, - ERROR - } - - @Inject - DatabaseManager databaseManager; - - @Inject - ThreadPresenter presenter; - - private ThreadLayoutCallback callback; - - private LoadView loadView; - private HidingFloatingActionButton replyButton; - private ThreadListLayout threadListLayout; - private LinearLayout errorLayout; - - private TextView errorText; - private Button errorRetryButton; - private PostPopupHelper postPopupHelper; - private Visible visible; - private ProgressDialog deletingDialog; - private boolean refreshedFromSwipe; - private boolean replyButtonEnabled; - private boolean showingReplyButton = false; - private Snackbar newPostsNotification; - - public ThreadLayout(Context context) { - this(context, null); - } - - public ThreadLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public ThreadLayout(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - inject(this); - } - - public void create(ThreadLayoutCallback callback) { - this.callback = callback; - - // View binding - loadView = findViewById(R.id.loadview); - replyButton = findViewById(R.id.reply_button); - - LayoutInflater layoutInflater = LayoutInflater.from(getContext()); - - // Inflate ThreadListLayout - threadListLayout = (ThreadListLayout) layoutInflater - .inflate(R.layout.layout_thread_list, this, false); - - // Inflate error layout - errorLayout = (LinearLayout) layoutInflater - .inflate(R.layout.layout_thread_error, this, false); - errorText = errorLayout.findViewById(R.id.text); - errorRetryButton = errorLayout.findViewById(R.id.button); - - // Inflate empty layout - - - // View setup - threadListLayout.setCallbacks(presenter, presenter, presenter, presenter, this); - postPopupHelper = new PostPopupHelper(getContext(), presenter, this); - errorText.setTypeface(AndroidUtils.ROBOTO_MEDIUM); - errorRetryButton.setOnClickListener(this); - - // Setup - replyButtonEnabled = ChanSettings.enableReplyFab.get(); - if (!replyButtonEnabled) { - AndroidUtils.removeFromParentView(replyButton); - } else { - replyButton.setOnClickListener(this); - replyButton.setToolbar(callback.getToolbar()); - theme().applyFabColor(replyButton); - } - - presenter.create(this); - } - - public void destroy() { - presenter.unbindLoadable(); - } - - @Override - public void onClick(View v) { - if (v == errorRetryButton) { - presenter.requestData(); - } else if (v == replyButton) { - threadListLayout.openReply(true); - } - } - - public boolean canChildScrollUp() { - if (visible == Visible.THREAD) { - return threadListLayout.canChildScrollUp(); - } else { - return true; - } - } - - public boolean onBack() { - return threadListLayout.onBack(); - } - - public boolean sendKeyEvent(KeyEvent event) { - return threadListLayout.sendKeyEvent(event); - } - - public ThreadPresenter getPresenter() { - return presenter; - } - - public void refreshFromSwipe() { - refreshedFromSwipe = true; - presenter.requestData(); - } - - public void gainedFocus() { - if (visible == Visible.THREAD) { - threadListLayout.gainedFocus(); - } - } - - public void setPostViewMode(ChanSettings.PostViewMode postViewMode) { - threadListLayout.setPostViewMode(postViewMode); - } - - @Override - public void replyLayoutOpen(boolean open) { - showReplyButton(!open); - } - - @Override - public Toolbar getToolbar() { - return callback.getToolbar(); - } - - @Override - public boolean shouldToolbarCollapse() { - return callback.shouldToolbarCollapse(); - } - - @Override - public void showPosts(ChanThread thread, PostsFilter filter) { - threadListLayout.showPosts(thread, filter, visible != Visible.THREAD); - switchVisible(Visible.THREAD); - callback.onShowPosts(); - } - - @Override - public void postClicked(Post post) { - if (postPopupHelper.isOpen()) { - postPopupHelper.postClicked(post); - } - } - - @Override - public void showError(ChanLoaderException error) { - String errorMessage = getString(error.getErrorMessage()); - - if (visible == Visible.THREAD) { - threadListLayout.showError(errorMessage); - } else { - switchVisible(Visible.ERROR); - errorText.setText(errorMessage); - } - } - - @Override - public void showLoading() { - switchVisible(Visible.LOADING); - } - - @Override - public void showEmpty() { - switchVisible(Visible.EMPTY); - } - - public void showPostInfo(String info) { - new AlertDialog.Builder(getContext()) - .setTitle(R.string.post_info_title) - .setMessage(info) - .setPositiveButton(R.string.ok, null) - .show(); - } - - public void showPostLinkables(final Post post) { - final List linkables = post.linkables; - String[] keys = new String[linkables.size()]; - for (int i = 0; i < linkables.size(); i++) { - keys[i] = linkables.get(i).key.toString(); - } - - new AlertDialog.Builder(getContext()) - .setItems(keys, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - presenter.onPostLinkableClicked(post, linkables.get(which)); - } - }) - .show(); - } - - public void clipboardPost(Post post) { - ClipboardManager clipboard = (ClipboardManager) AndroidUtils.getAppContext().getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("Post text", post.comment.toString()); - clipboard.setPrimaryClip(clip); - Toast.makeText(getContext(), R.string.post_text_copied, Toast.LENGTH_SHORT).show(); - } - - @Override - public void openLink(final String link) { - if (ChanSettings.openLinkConfirmation.get()) { - new AlertDialog.Builder(getContext()) - .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - openLinkConfirmed(link); - } - }) - .setTitle(R.string.open_link_confirmation) - .setMessage(link) - .show(); - } else { - openLinkConfirmed(link); - } - } - - public void openLinkConfirmed(final String link) { - if (ChanSettings.openLinkBrowser.get()) { - AndroidUtils.openLink(link); - } else { - AndroidUtils.openLinkInBrowser((Activity) getContext(), link); - } - } - - @Override - public void openReportView(Post post) { - callback.openReportController(post); - } - - @Override - public void showThread(Loadable threadLoadable) { - callback.showThread(threadLoadable); - } - - public void showPostsPopup(Post forPost, List posts) { - postPopupHelper.showPosts(forPost, posts); - } - - @Override - public void hidePostsPopup() { - postPopupHelper.popAll(); - } - - @Override - public List getDisplayingPosts() { - if (postPopupHelper.isOpen()) { - return postPopupHelper.getDisplayingPosts(); - } else { - return threadListLayout.getDisplayingPosts(); - } - } - - @Override - public int[] getCurrentPosition() { - return threadListLayout.getIndexAndTop(); - } - - @Override - public void showImages(List images, int index, Loadable loadable, ThumbnailView thumbnail) { - callback.showImages(images, index, loadable, thumbnail); - } - - @Override - public void showAlbum(List images, int index) { - callback.showAlbum(images, index); - } - - @Override - public void scrollTo(int displayPosition, boolean smooth) { - if (postPopupHelper.isOpen()) { - postPopupHelper.scrollTo(displayPosition, smooth); - } else if (visible == Visible.THREAD) { - threadListLayout.scrollTo(displayPosition, smooth); - } - } - - @Override - public void highlightPost(Post post) { - threadListLayout.highlightPost(post); - } - - @Override - public void highlightPostId(String id) { - threadListLayout.highlightPostId(id); - } - - @Override - public void highlightPostTripcode(String tripcode) { - threadListLayout.highlightPostTripcode(tripcode); - } - - @Override - public void filterPostTripcode(String tripcode) { - callback.openFilterForTripcode(tripcode); - } - - @Override - public void selectPost(int post) { - threadListLayout.selectPost(post); - } - - @Override - public void showSearch(boolean show) { - threadListLayout.openSearch(show); - } - - public void setSearchStatus(String query, boolean setEmptyText, boolean hideKeyboard) { - threadListLayout.setSearchStatus(query, setEmptyText, hideKeyboard); - } - - @Override - public void quote(Post post, boolean withText) { - threadListLayout.openReply(true); - threadListLayout.getReplyPresenter().quote(post, withText); - } - - @Override - public void quote(Post post, CharSequence text) { - threadListLayout.openReply(true); - threadListLayout.getReplyPresenter().quote(post, text); - } - - @Override - public void confirmPostDelete(final Post post) { - @SuppressLint("InflateParams") final View view = LayoutInflater.from(getContext()) - .inflate(R.layout.dialog_post_delete, null); - new AlertDialog.Builder(getContext()) - .setTitle(R.string.delete_confirm) - .setView(view) - .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.delete, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - CheckBox checkBox = view.findViewById(R.id.image_only); - presenter.deletePostConfirmed(post, checkBox.isChecked()); - } - }) - .show(); - } - - @Override - public void showDeleting() { - if (deletingDialog == null) { - deletingDialog = ProgressDialog.show(getContext(), null, getString(R.string.delete_wait)); - } - } - - @Override - public void hideDeleting(String message) { - if (deletingDialog != null) { - deletingDialog.dismiss(); - deletingDialog = null; - - new AlertDialog.Builder(getContext()) - .setMessage(message) - .setPositiveButton(R.string.ok, null) - .show(); - } - } - - @Override - public void hideThread(Post post) { - final ThreadHide threadHide = ThreadHide.fromPost(post); - databaseManager.runTask( - databaseManager.getDatabaseHideManager().addThreadHide(threadHide)); - - presenter.refreshUI(); - - Snackbar snackbar = Snackbar.make(this, R.string.post_hidden, Snackbar.LENGTH_LONG); - snackbar.setAction(R.string.undo, new OnClickListener() { - @Override - public void onClick(View v) { - databaseManager.runTask( - databaseManager.getDatabaseHideManager().removeThreadHide(threadHide)); - presenter.refreshUI(); - } - }).show(); - fixSnackbarText(getContext(), snackbar); - } - - @Override - public void showNewPostsNotification(boolean show, int more) { - if (show) { - if (!threadListLayout.scrolledToBottom()) { - String text = getContext().getResources() - .getQuantityString(R.plurals.thread_new_posts, more, more); - - newPostsNotification = Snackbar.make(this, text, Snackbar.LENGTH_LONG); - newPostsNotification.setAction(R.string.thread_new_posts_goto, new OnClickListener() { - @Override - public void onClick(View v) { - newPostsNotification = null; - presenter.onNewPostsViewClicked(); - } - }).show(); - fixSnackbarText(getContext(), newPostsNotification); - } - } else { - if (newPostsNotification != null) { - newPostsNotification.dismiss(); - newPostsNotification = null; - } - } - } - - public ThumbnailView getThumbnail(PostImage postImage) { - if (postPopupHelper.isOpen()) { - return postPopupHelper.getThumbnail(postImage); - } else { - return threadListLayout.getThumbnail(postImage); - } - } - - public boolean postRepliesOpen() { - return postPopupHelper.isOpen(); - } - - public void openReply(boolean open) { - threadListLayout.openReply(open); - } - - private void showReplyButton(final boolean show) { - if (show != showingReplyButton && replyButtonEnabled) { - showingReplyButton = show; - - replyButton.animate() - .setInterpolator(new DecelerateInterpolator(2f)) - .setStartDelay(show ? 100 : 0) - .setDuration(200) - .alpha(show ? 1f : 0f) - .scaleX(show ? 1f : 0f) - .scaleY(show ? 1f : 0f) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationCancel(Animator animation) { - replyButton.setAlpha(show ? 1f : 0f); - replyButton.setScaleX(show ? 1f : 0f); - replyButton.setScaleY(show ? 1f : 0f); - } - }) - .start(); - } - } - - private void switchVisible(Visible visible) { - if (this.visible != visible) { - if (this.visible != null) { - switch (this.visible) { - case THREAD: - threadListLayout.cleanup(); - postPopupHelper.popAll(); - showSearch(false); - showReplyButton(false); - newPostsNotification = null; - break; - } - } - - this.visible = visible; - switch (visible) { - case EMPTY: - loadView.setView(inflateEmptyView()); - break; - case LOADING: - View view = loadView.setView(null); - // TODO: cleanup - if (refreshedFromSwipe) { - refreshedFromSwipe = false; - view.setVisibility(View.GONE); - } - break; - case THREAD: - callback.hideSwipeRefreshLayout(); - loadView.setView(threadListLayout); - showReplyButton(true); - break; - case ERROR: - callback.hideSwipeRefreshLayout(); - loadView.setView(errorLayout); - break; - } - } - } - - @SuppressLint("InflateParams") - private View inflateEmptyView() { - return LayoutInflater.from(getContext()).inflate(R.layout.layout_empty_setup, null); - } - - @Override - public void presentRepliesController(Controller controller) { - callback.presentRepliesController(controller); - } - - public interface ThreadLayoutCallback { - void showThread(Loadable threadLoadable); - - void showImages(List images, int index, Loadable loadable, ThumbnailView thumbnail); - - void showAlbum(List images, int index); - - void onShowPosts(); - - void presentRepliesController(Controller controller); - - void openReportController(Post post); - - void hideSwipeRefreshLayout(); - - Toolbar getToolbar(); - - boolean shouldToolbarCollapse(); - - void openFilterForTripcode(String tripcode); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java deleted file mode 100644 index 15863af41d..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java +++ /dev/null @@ -1,711 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Rect; -import android.os.Handler; -import android.os.Looper; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.util.AttributeSet; -import android.view.KeyEvent; -import android.view.View; -import android.view.ViewPropertyAnimator; -import android.view.animation.DecelerateInterpolator; -import android.widget.FrameLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.core.model.ChanThread; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.presenter.ReplyPresenter; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.core.site.sites.chan4.Chan4; -import org.floens.chan.ui.adapter.PostAdapter; -import org.floens.chan.ui.adapter.PostsFilter; -import org.floens.chan.ui.cell.PostCell; -import org.floens.chan.ui.cell.PostCellInterface; -import org.floens.chan.ui.cell.ThreadStatusCell; -import org.floens.chan.ui.toolbar.Toolbar; -import org.floens.chan.ui.view.FastScroller; -import org.floens.chan.ui.view.FastScrollerHelper; -import org.floens.chan.ui.view.ThumbnailView; -import org.floens.chan.utils.AndroidUtils; - -import java.util.Calendar; -import java.util.List; - -import static org.floens.chan.utils.AndroidUtils.ROBOTO_MEDIUM; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; -import static org.floens.chan.utils.AndroidUtils.getDimen; - -/** - * A layout that wraps around a {@link RecyclerView} and a {@link ReplyLayout} to manage showing and replying to posts. - */ -public class ThreadListLayout extends FrameLayout implements ReplyLayout.ReplyLayoutCallback { - public static final int MAX_SMOOTH_SCROLL_DISTANCE = 20; - - private ReplyLayout reply; - private TextView searchStatus; - private RecyclerView recyclerView; - private RecyclerView.LayoutManager layoutManager; - private FastScroller fastScroller; - private PostAdapter postAdapter; - private ChanThread showingThread; - private ThreadListLayoutPresenterCallback callback; - private ThreadListLayoutCallback threadListLayoutCallback; - private boolean replyOpen; - private ChanSettings.PostViewMode postViewMode; - private int spanCount = 2; - private int background; - private boolean searchOpen; - private int lastPostCount; - - private Handler mainHandler = new Handler(Looper.getMainLooper()); - - private RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() { - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - onRecyclerViewScrolled(); - } - }; - - public ThreadListLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - // View binding - reply = findViewById(R.id.reply); - searchStatus = findViewById(R.id.search_status); - recyclerView = findViewById(R.id.recycler_view); - - // View setup - reply.setCallback(this); - searchStatus.setTypeface(ROBOTO_MEDIUM); - } - - public void setCallbacks(PostAdapter.PostAdapterCallback postAdapterCallback, - PostCell.PostCellCallback postCellCallback, - ThreadStatusCell.Callback statusCellCallback, - ThreadListLayoutPresenterCallback callback, - ThreadListLayoutCallback threadListLayoutCallback) { - this.callback = callback; - this.threadListLayoutCallback = threadListLayoutCallback; - - postAdapter = new PostAdapter(recyclerView, postAdapterCallback, postCellCallback, statusCellCallback); - recyclerView.setAdapter(postAdapter); - recyclerView.addOnScrollListener(scrollListener); - - setFastScroll(false); - - attachToolbarScroll(true); - - reply.setPadding(0, toolbarHeight(), 0, 0); - searchStatus.setPadding(searchStatus.getPaddingLeft(), searchStatus.getPaddingTop() + toolbarHeight(), - searchStatus.getPaddingRight(), searchStatus.getPaddingBottom()); - } - - private void onRecyclerViewScrolled() { - // onScrolled can be called after cleanup() - if (showingThread != null) { - int[] indexTop = getIndexAndTop(); - - showingThread.loadable.setListViewIndex(indexTop[0]); - showingThread.loadable.setListViewTop(indexTop[1]); - - int last = getCompleteBottomAdapterPosition(); - if (last == postAdapter.getItemCount() - 1 && last > lastPostCount) { - lastPostCount = last; - - // As requested by the RecyclerView, make sure that the adapter isn't changed - // while in a layout pass. Postpone to the next frame. - mainHandler.post(() -> ThreadListLayout.this.callback.onListScrolledToBottom()); - } - } - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - - int cardWidth = getResources().getDimensionPixelSize(R.dimen.grid_card_width); - int gridCountSetting = ChanSettings.boardGridSpanCount.get(); - boolean compactMode; - if (gridCountSetting > 0) { - spanCount = gridCountSetting; - compactMode = (getMeasuredWidth() / spanCount) < dp(120); - } else { - spanCount = Math.max(1, Math.round(getMeasuredWidth() / cardWidth)); - compactMode = false; - } - - if (postViewMode == ChanSettings.PostViewMode.CARD) { - postAdapter.setCompact(compactMode); - - ((GridLayoutManager) layoutManager).setSpanCount(spanCount); - } - } - - public void setPostViewMode(ChanSettings.PostViewMode postViewMode) { - if (this.postViewMode != postViewMode) { - this.postViewMode = postViewMode; - - layoutManager = null; - - switch (postViewMode) { - case LIST: - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()) { - @Override - public boolean requestChildRectangleOnScreen( - RecyclerView parent, View child, Rect rect, boolean immediate, - boolean focusedChildVisible) { - return false; - } - }; - setRecyclerViewPadding(); - recyclerView.setLayoutManager(linearLayoutManager); - layoutManager = linearLayoutManager; - - if (background != R.attr.backcolor) { - background = R.attr.backcolor; - setBackgroundColor(getAttrColor(getContext(), R.attr.backcolor)); - } - - break; - case CARD: - GridLayoutManager gridLayoutManager = new GridLayoutManager( - null, spanCount, GridLayoutManager.VERTICAL, false) { - @Override - public boolean requestChildRectangleOnScreen( - RecyclerView parent, View child, Rect rect, boolean immediate, - boolean focusedChildVisible) { - return false; - } - }; - setRecyclerViewPadding(); - recyclerView.setLayoutManager(gridLayoutManager); - layoutManager = gridLayoutManager; - - if (background != R.attr.backcolor_secondary) { - background = R.attr.backcolor_secondary; - setBackgroundColor(getAttrColor(getContext(), R.attr.backcolor_secondary)); - } - - break; - } - - recyclerView.getRecycledViewPool().clear(); - - postAdapter.setPostViewMode(postViewMode); - } - } - - public void showPosts(ChanThread thread, PostsFilter filter, boolean initial) { - showingThread = thread; - if (initial) { - reply.bindLoadable(showingThread.loadable); - - recyclerView.setLayoutManager(null); - recyclerView.setLayoutManager(layoutManager); - recyclerView.getRecycledViewPool().clear(); - - int index = thread.loadable.listViewIndex; - int top = thread.loadable.listViewTop; - - switch (postViewMode) { - case LIST: - ((LinearLayoutManager) layoutManager).scrollToPositionWithOffset(index, top); - break; - case CARD: - ((GridLayoutManager) layoutManager).scrollToPositionWithOffset(index, top); - break; - } - - party(); - } - - setFastScroll(true); - - postAdapter.setThread(thread, filter); - } - - public boolean onBack() { - if (reply.onBack()) { - return true; - } else if (replyOpen) { - openReply(false); - return true; - } else { - return false; - } - } - - public boolean sendKeyEvent(KeyEvent event) { - if (ChanSettings.volumeKeysScrolling.get()) { - switch (event.getKeyCode()) { - case KeyEvent.KEYCODE_VOLUME_UP: - case KeyEvent.KEYCODE_VOLUME_DOWN: - if (event.getAction() == KeyEvent.ACTION_DOWN) { - boolean down = event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN; - int scroll = (int) (getHeight() * 0.75); - recyclerView.smoothScrollBy(0, down ? scroll : -scroll); - } - return true; - } - } - return false; - } - - public void gainedFocus() { - showToolbarIfNeeded(); - } - - public void openReply(boolean open) { - if (showingThread != null && replyOpen != open) { - this.replyOpen = open; - - reply.measure( - MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED) - ); - int height = reply.getMeasuredHeight(); - - final ViewPropertyAnimator viewPropertyAnimator = reply.animate(); - viewPropertyAnimator.setListener(null); - viewPropertyAnimator.setInterpolator(new DecelerateInterpolator(2f)); - viewPropertyAnimator.setDuration(600); - - if (open) { - reply.setVisibility(View.VISIBLE); - reply.setTranslationY(-height); - viewPropertyAnimator.translationY(0f); - } else { - reply.setTranslationY(0f); - viewPropertyAnimator.translationY(-height); - viewPropertyAnimator.setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - viewPropertyAnimator.setListener(null); - reply.setVisibility(View.GONE); - } - }); - } - - reply.onOpen(open); - setRecyclerViewPadding(); - if (!open) { - AndroidUtils.hideKeyboard(reply); - } - threadListLayoutCallback.replyLayoutOpen(open); - - attachToolbarScroll(!(open || searchOpen)); - } - } - - public ReplyPresenter getReplyPresenter() { - return reply.getPresenter(); - } - - public void showError(String error) { - postAdapter.showError(error); - } - - public void openSearch(boolean open) { - if (showingThread != null && searchOpen != open) { - searchOpen = open; - - searchStatus.measure( - MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED) - ); - int height = searchStatus.getMeasuredHeight(); - - final ViewPropertyAnimator viewPropertyAnimator = searchStatus.animate(); - viewPropertyAnimator.setListener(null); - viewPropertyAnimator.setInterpolator(new DecelerateInterpolator(2f)); - viewPropertyAnimator.setDuration(600); - - if (open) { - searchStatus.setVisibility(View.VISIBLE); - searchStatus.setTranslationY(-height); - viewPropertyAnimator.translationY(0f); - } else { - searchStatus.setTranslationY(0f); - viewPropertyAnimator.translationY(-height); - viewPropertyAnimator.setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - viewPropertyAnimator.setListener(null); - searchStatus.setVisibility(View.GONE); - } - }); - } - - setRecyclerViewPadding(); - if (open) { - searchStatus.setText(R.string.search_empty); - } - - attachToolbarScroll(!(open || replyOpen)); - } - } - - public void setSearchStatus(String query, boolean setEmptyText, boolean hideKeyboard) { - if (hideKeyboard) { - AndroidUtils.hideKeyboard(this); - } - - if (setEmptyText) { - searchStatus.setText(R.string.search_empty); - } - - if (query != null) { - int size = postAdapter.getDisplayList().size(); - searchStatus.setText(getContext().getString(R.string.search_results, - getContext().getResources().getQuantityString(R.plurals.posts, size, size), - query)); - } - } - - public boolean canChildScrollUp() { - if (replyOpen || searchOpen) { - return true; - } - - switch (postViewMode) { - case LIST: - if (getTopAdapterPosition() == 0) { - View top = layoutManager.findViewByPosition(0); - return top.getTop() != toolbarHeight(); - } - break; - case CARD: - if (getTopAdapterPosition() == 0) { - View top = layoutManager.findViewByPosition(0); - return top.getTop() != getDimen(getContext(), R.dimen.grid_card_margin) + dp(1) + toolbarHeight(); - } - break; - } - return true; - } - - public boolean scrolledToBottom() { - return getCompleteBottomAdapterPosition() == postAdapter.getItemCount() - 1; - } - - public void cleanup() { - postAdapter.cleanup(); - reply.cleanup(); - openReply(false); - openSearch(false); - showingThread = null; - lastPostCount = 0; - noParty(); - } - - public List getDisplayingPosts() { - return postAdapter.getDisplayList(); - } - - public ThumbnailView getThumbnail(PostImage postImage) { - RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); - - for (int i = 0; i < layoutManager.getChildCount(); i++) { - View view = layoutManager.getChildAt(i); - if (view instanceof PostCellInterface) { - PostCellInterface postView = (PostCellInterface) view; - Post post = postView.getPost(); - - if (!post.images.isEmpty()) { - for (PostImage image : post.images) { - if (image.equalUrl(postImage)) { - return postView.getThumbnailView(postImage); - } - } - } - } - } - return null; - } - - public void scrollTo(int displayPosition, boolean smooth) { - if (displayPosition < 0) { - int bottom = postAdapter.getItemCount() - 1; - int difference = Math.abs(bottom - getTopAdapterPosition()); - if (difference > MAX_SMOOTH_SCROLL_DISTANCE) { - smooth = false; - } - - if (smooth) { - recyclerView.smoothScrollToPosition(bottom); - } else { - recyclerView.scrollToPosition(bottom); - // No animation means no animation, wait for the layout to finish and skip all animations - final RecyclerView.ItemAnimator itemAnimator = recyclerView.getItemAnimator(); - AndroidUtils.waitForLayout(recyclerView, new AndroidUtils.OnMeasuredCallback() { - @Override - public boolean onMeasured(View view) { - itemAnimator.endAnimations(); - return true; - } - }); - } - } else { - int scrollPosition = postAdapter.getScrollPosition(displayPosition); - - int difference = Math.abs(scrollPosition - getTopAdapterPosition()); - if (difference > MAX_SMOOTH_SCROLL_DISTANCE) { - smooth = false; - } - - if (smooth) { - recyclerView.smoothScrollToPosition(scrollPosition); - } else { - recyclerView.scrollToPosition(scrollPosition); - // No animation means no animation, wait for the layout to finish and skip all animations - final RecyclerView.ItemAnimator itemAnimator = recyclerView.getItemAnimator(); - AndroidUtils.waitForLayout(recyclerView, new AndroidUtils.OnMeasuredCallback() { - @Override - public boolean onMeasured(View view) { - itemAnimator.endAnimations(); - return true; - } - }); - } - } - } - - public void highlightPost(Post post) { - postAdapter.highlightPost(post); - } - - public void highlightPostId(String id) { - postAdapter.highlightPostId(id); - } - - public void highlightPostTripcode(String tripcode) { - postAdapter.highlightPostTripcode(tripcode); - } - - public void selectPost(int post) { - postAdapter.selectPost(post); - } - - @Override - public void highlightPostNo(int no) { - postAdapter.highlightPostNo(no); - } - - @Override - public void showThread(Loadable loadable) { - callback.showThread(loadable); - } - - @Override - public void requestNewPostLoad() { - callback.requestNewPostLoad(); - } - - @Override - public ChanThread getThread() { - return showingThread; - } - - public int[] getIndexAndTop() { - int index = 0; - int top = 0; - if (recyclerView.getLayoutManager().getChildCount() > 0) { - View topChild = recyclerView.getLayoutManager().getChildAt(0); - - index = ((RecyclerView.LayoutParams) topChild.getLayoutParams()).getViewLayoutPosition(); - - RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) topChild.getLayoutParams(); - top = layoutManager.getDecoratedTop(topChild) - params.topMargin - recyclerView.getPaddingTop(); - } - - return new int[]{index, top}; - } - - private void attachToolbarScroll(boolean attach) { - if (threadListLayoutCallback.shouldToolbarCollapse()) { - Toolbar toolbar = threadListLayoutCallback.getToolbar(); - if (attach) { - toolbar.attachRecyclerViewScrollStateListener(recyclerView); - } else { - toolbar.detachRecyclerViewScrollStateListener(recyclerView); - toolbar.collapseShow(true); - } - } - } - - private void showToolbarIfNeeded() { - if (threadListLayoutCallback.shouldToolbarCollapse()) { - // Of coming back to focus from a dual controller, like the threadlistcontroller, - // check if we should show the toolbar again (after the other controller made it hide). - // It should show if the search or reply is open, or if the thread was scrolled at the - // top showing an empty space. - - Toolbar toolbar = threadListLayoutCallback.getToolbar(); - if (searchOpen || replyOpen) { - // force toolbar to show - toolbar.collapseShow(true); - } else { - // check if it should show if it was scrolled at the top - toolbar.checkToolbarCollapseState(recyclerView); - } - } - } - - private void setFastScroll(boolean enabled) { - if (!enabled) { - if (fastScroller != null) { - recyclerView.removeItemDecoration(fastScroller); - fastScroller = null; - } - } else { - if (fastScroller == null) { - fastScroller = FastScrollerHelper.create(recyclerView); - } - } - - recyclerView.setVerticalScrollBarEnabled(!enabled); - } - - private void setRecyclerViewPadding() { - int defaultPadding = 0; - if (postViewMode == ChanSettings.PostViewMode.CARD) { - defaultPadding = dp(1); - } - - int left = defaultPadding; - int top = defaultPadding; - int right = defaultPadding; - int bottom = defaultPadding; - - if (replyOpen) { - reply.measure( - MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED) - ); - top += reply.getMeasuredHeight(); - } else if (searchOpen) { - searchStatus.measure( - MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED) - ); - top += searchStatus.getMeasuredHeight(); - } else { - top += toolbarHeight(); - } - - recyclerView.setPadding(left, top, right, bottom); - } - - private int toolbarHeight() { - Toolbar toolbar = threadListLayoutCallback.getToolbar(); - return toolbar.getToolbarHeight(); - } - - private int getTopAdapterPosition() { - switch (postViewMode) { - case LIST: - return ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); - case CARD: - return ((GridLayoutManager) layoutManager).findFirstVisibleItemPosition(); - } - return -1; - } - - private int getCompleteBottomAdapterPosition() { - switch (postViewMode) { - case LIST: - return ((LinearLayoutManager) layoutManager).findLastCompletelyVisibleItemPosition(); - case CARD: - return ((GridLayoutManager) layoutManager).findLastCompletelyVisibleItemPosition(); - } - return -1; - } - - private Bitmap hat; - - private final RecyclerView.ItemDecoration PARTY = new RecyclerView.ItemDecoration() { - @Override - public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { - if (hat == null) { - hat = BitmapFactory.decodeResource(getResources(), R.drawable.partyhat); - } - - for (int i = 0, j = parent.getChildCount(); i < j; i++) { - View child = parent.getChildAt(i); - if (child instanceof PostCellInterface) { - PostCellInterface postView = (PostCellInterface) child; - Post post = postView.getPost(); - if (post.isOP && !post.images.isEmpty()) { - RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); - int top = child.getTop() + params.topMargin; - int left = child.getLeft() + params.leftMargin; - c.drawBitmap(hat, left - parent.getPaddingLeft() - dp(25), top - dp(80) - parent.getPaddingTop() + toolbarHeight(), null); - } - } - } - } - }; - - private void party() { - if (showingThread.loadable.site instanceof Chan4) { - Calendar calendar = Calendar.getInstance(); - if (calendar.get(Calendar.MONTH) == Calendar.OCTOBER && calendar.get(Calendar.DAY_OF_MONTH) == 1) { - recyclerView.addItemDecoration(PARTY); - } - } - } - - private void noParty() { - recyclerView.removeItemDecoration(PARTY); - } - - public interface ThreadListLayoutPresenterCallback { - void showThread(Loadable loadable); - - void requestNewPostLoad(); - - void onListScrolledToBottom(); - } - - public interface ThreadListLayoutCallback { - void replyLayoutOpen(boolean open); - - Toolbar getToolbar(); - - boolean shouldToolbarCollapse(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadSlidingPaneLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadSlidingPaneLayout.java deleted file mode 100644 index e487823dff..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadSlidingPaneLayout.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.layout; - -import android.content.Context; -import android.os.Parcelable; -import android.support.v4.widget.SlidingPaneLayout; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewGroup; - -import org.floens.chan.R; -import org.floens.chan.ui.controller.ThreadSlideController; -import org.floens.chan.utils.AndroidUtils; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public class ThreadSlidingPaneLayout extends SlidingPaneLayout { - public ViewGroup leftPane; - public ViewGroup rightPane; - - private ThreadSlideController threadSlideController; - - public ThreadSlidingPaneLayout(Context context) { - this(context, null); - } - - public ThreadSlidingPaneLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public ThreadSlidingPaneLayout(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - leftPane = findViewById(R.id.left_pane); - rightPane = findViewById(R.id.right_pane); - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - - // Forces a relayout after it has already been layed out, because SlidingPaneLayout sucks and otherwise - // gives the children too much room until they request a relayout. - AndroidUtils.waitForLayout(this, new AndroidUtils.OnMeasuredCallback() { - @Override - public boolean onMeasured(View view) { - requestLayout(); - return false; - } - }); - } - - public void setThreadSlideController(ThreadSlideController threadSlideController) { - this.threadSlideController = threadSlideController; - } - - @Override - protected void onRestoreInstanceState(Parcelable state) { - super.onRestoreInstanceState(state); - if (threadSlideController != null) { - threadSlideController.onSlidingPaneLayoutStateRestored(); - } - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int widthMode = MeasureSpec.getMode(widthMeasureSpec); - int heightMode = MeasureSpec.getMode(heightMeasureSpec); - int width = MeasureSpec.getSize(widthMeasureSpec); - int height = MeasureSpec.getSize(heightMeasureSpec); - - ViewGroup.LayoutParams leftParams = leftPane.getLayoutParams(); - ViewGroup.LayoutParams rightParams = rightPane.getLayoutParams(); - - if (width < dp(500)) { - leftParams.width = width - dp(30); - rightParams.width = width; - } else { - leftParams.width = width - dp(60); - rightParams.width = width; - } - - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/service/SavingNotification.java b/Clover/app/src/main/java/org/floens/chan/ui/service/SavingNotification.java deleted file mode 100644 index 02704901f0..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/service/SavingNotification.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.service; - -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.app.Service; -import android.content.Intent; -import android.os.Bundle; -import android.os.IBinder; -import android.support.annotation.Nullable; -import android.support.v4.app.NotificationCompat; - -import org.floens.chan.R; - -import de.greenrobot.event.EventBus; - -import static org.floens.chan.utils.AndroidUtils.getAppContext; - -public class SavingNotification extends Service { - public static final String DONE_TASKS_KEY = "done_tasks"; - public static final String TOTAL_TASKS_KEY = "total_tasks"; - private static final String CANCEL_KEY = "cancel"; - - private static final int NOTIFICATION_ID = 2; - - private NotificationManager notificationManager; - - private boolean inForeground = false; - private int doneTasks; - private int totalTasks; - - @Nullable - @Override - public IBinder onBind(Intent intent) { - return null; - } - - @Override - public void onCreate() { - super.onCreate(); - notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - } - - @Override - public void onDestroy() { - super.onDestroy(); - notificationManager.cancel(NOTIFICATION_ID); - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - if (intent != null && intent.getExtras() != null) { - Bundle extras = intent.getExtras(); - - if (extras.getBoolean(CANCEL_KEY)) { - EventBus.getDefault().post(new SavingCancelRequestMessage()); - } else { - doneTasks = extras.getInt(DONE_TASKS_KEY); - totalTasks = extras.getInt(TOTAL_TASKS_KEY); - - if (!inForeground) { - startForeground(NOTIFICATION_ID, getNotification()); - inForeground = true; - } else { - notificationManager.notify(NOTIFICATION_ID, getNotification()); - } - } - } - - return START_STICKY; - } - - private Notification getNotification() { - NotificationCompat.Builder builder = new NotificationCompat.Builder(getAppContext()); - builder.setSmallIcon(R.drawable.ic_stat_notify); - builder.setContentTitle(getString(R.string.image_save_notification_downloading)); - builder.setContentText(getString(R.string.image_save_notification_cancel)); - builder.setProgress(totalTasks, doneTasks, false); - builder.setContentInfo(doneTasks + "/" + totalTasks); - - Intent intent = new Intent(this, SavingNotification.class); - intent.putExtra(CANCEL_KEY, true); - PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - builder.setContentIntent(pendingIntent); - - return builder.build(); - } - - public static class SavingCancelRequestMessage { - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/service/WatchNotifier.java b/Clover/app/src/main/java/org/floens/chan/ui/service/WatchNotifier.java deleted file mode 100644 index dbc3eb7c21..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/service/WatchNotifier.java +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.service; - -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.IBinder; -import android.support.v4.app.NotificationCompat; -import android.text.TextUtils; - -import org.floens.chan.Chan; -import org.floens.chan.R; -import org.floens.chan.core.manager.WatchManager; -import org.floens.chan.core.model.Post; -import org.floens.chan.core.model.orm.Pin; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.ui.activity.BoardActivity; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.regex.Pattern; - -import javax.inject.Inject; - -import static org.floens.chan.Chan.inject; - -public class WatchNotifier extends Service { - private static final String TAG = "WatchNotifier"; - private static final int NOTIFICATION_ID = 1; - private static final PostAgeComparator POST_AGE_COMPARATOR = new PostAgeComparator(); - private static final int SUBJECT_LENGTH = 6; - private static final String IMAGE_TEXT = "(img) "; - private static final Pattern SHORTEN_NO_PATTERN = Pattern.compile(">>\\d+(?=\\d{3})(\\d{3})"); - - private NotificationManager nm; - - @Inject - WatchManager watchManager; - - @Override - public IBinder onBind(final Intent intent) { - return null; - } - - @Override - public void onCreate() { - super.onCreate(); - inject(this); - - nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - - startForeground(NOTIFICATION_ID, createNotification()); - } - - @Override - public void onDestroy() { - super.onDestroy(); - nm.cancel(NOTIFICATION_ID); - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - if (intent != null && intent.getExtras() != null && intent.getExtras().getBoolean("pause_pins", false)) { - pausePins(); - } else { - updateNotification(); - } - - return START_STICKY; - } - - public void updateNotification() { - nm.notify(NOTIFICATION_ID, createNotification()); - } - - public void pausePins() { - watchManager.pauseAll(); - } - - private Notification createNotification() { - boolean notifyQuotesOnly = ChanSettings.watchNotifyMode.get().equals("quotes"); - boolean soundQuotesOnly = ChanSettings.watchSound.get().equals("quotes"); - - List unviewedPosts = new ArrayList<>(); - List listQuoting = new ArrayList<>(); - List pins = new ArrayList<>(); - List subjectPins = new ArrayList<>(); - - boolean light = false; - boolean sound = false; - boolean peek = false; - - for (Pin pin : watchManager.getWatchingPins()) { - WatchManager.PinWatcher watcher = watchManager.getPinWatcher(pin); - if (watcher == null || pin.isError) { - continue; - } - - pins.add(pin); - - if (notifyQuotesOnly) { - unviewedPosts.addAll(watcher.getUnviewedQuotes()); - listQuoting.addAll(watcher.getUnviewedQuotes()); - if (watcher.getWereNewQuotes()) { - light = true; - sound = true; - peek = true; - } - if (pin.getNewQuoteCount() > 0) { - subjectPins.add(pin); - } - } else { - unviewedPosts.addAll(watcher.getUnviewedPosts()); - listQuoting.addAll(watcher.getUnviewedQuotes()); - if (watcher.getWereNewPosts()) { - light = true; - if (!soundQuotesOnly) { - sound = true; - peek = true; - } - } - if (watcher.getWereNewQuotes()) { - sound = true; - peek = true; - } - if (pin.getNewPostCount() > 0) { - subjectPins.add(pin); - } - } - } - - if (Chan.getInstance().getApplicationInForeground()) { - light = false; - sound = false; - } - - if (!ChanSettings.watchPeek.get()) { - peek = false; - } - - return notifyAboutPosts(pins, subjectPins, unviewedPosts, listQuoting, notifyQuotesOnly, light, sound, peek); - } - - private Notification notifyAboutPosts(List pins, List subjectPins, List unviewedPosts, List listQuoting, - boolean notifyQuotesOnly, boolean light, boolean sound, boolean peek) { - String title = getResources().getQuantityString(R.plurals.watch_title, pins.size(), pins.size()); - - if (unviewedPosts.isEmpty()) { - // Idle notification - String message = getString(R.string.watch_idle); - return get(title, message, null, false, false, false, false, null); - } else { - // New posts notification - String message; - List postsForExpandedLines; - if (notifyQuotesOnly) { - message = getResources().getQuantityString(R.plurals.watch_new_quotes, listQuoting.size(), listQuoting.size()); - postsForExpandedLines = listQuoting; - } else { - postsForExpandedLines = unviewedPosts; - if (listQuoting.size() > 0) { - message = getResources().getQuantityString(R.plurals.watch_new_quoting, unviewedPosts.size(), unviewedPosts.size(), listQuoting.size()); - } else { - message = getResources().getQuantityString(R.plurals.watch_new, unviewedPosts.size(), unviewedPosts.size()); - } - } - - Collections.sort(postsForExpandedLines, POST_AGE_COMPARATOR); - List expandedLines = new ArrayList<>(); - for (Post postForExpandedLine : postsForExpandedLines) { - CharSequence prefix; - if (postForExpandedLine.getTitle().length() <= SUBJECT_LENGTH) { - prefix = postForExpandedLine.getTitle(); - } else { - prefix = postForExpandedLine.getTitle().subSequence(0, SUBJECT_LENGTH); - } - - String comment = postForExpandedLine.image() != null ? IMAGE_TEXT : ""; - if (postForExpandedLine.comment.length() > 0) { - comment += postForExpandedLine.comment; - } - - // Replace >>132456798 with >789 to shorten the notification - comment = SHORTEN_NO_PATTERN.matcher(comment).replaceAll(">$1"); - - expandedLines.add(prefix + ": " + comment); - } - - Pin targetPin = null; - if (subjectPins.size() == 1) { - targetPin = subjectPins.get(0); - } - - String smallText = TextUtils.join(", ", expandedLines); - return get(message, smallText, expandedLines, light, sound, peek, true, targetPin); - } - } - - /** - * Create a notification with the supplied parameters. - * The style of the big notification is InboxStyle, a list of text. - * - * @param title The title of the notification - * @param smallText The content of the small notification - * @param expandedLines A list of lines for the big notification, or null if not shown - * @param sound Should the notification make a sound - * @param peek Peek the notification into the screen - * @param alertIcon Show the alert version of the icon - * @param target The target pin, or null to open the pinned pane on tap - */ - private Notification get(String title, String smallText, List expandedLines, - boolean light, boolean sound, boolean peek, boolean alertIcon, Pin target) { - Intent intent = new Intent(this, BoardActivity.class); - intent.setAction(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | - Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); - - intent.putExtra("pin_id", target == null ? -1 : target.id); - - PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - - NotificationCompat.Builder builder = new NotificationCompat.Builder(this); - if (sound || peek) { - builder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE); - } - - if (light) { - long watchLed = Long.parseLong(ChanSettings.watchLed.get(), 16); - if (watchLed >= 0) { - builder.setLights((int) watchLed, 1000, 1000); - } - } - - builder.setContentIntent(pendingIntent); - - builder.setContentTitle(title); - if (smallText != null) { - builder.setContentText(smallText); - } - - if (alertIcon || peek) { - builder.setSmallIcon(R.drawable.ic_stat_notify_alert); - builder.setPriority(NotificationCompat.PRIORITY_HIGH); - } else { - builder.setSmallIcon(R.drawable.ic_stat_notify); - builder.setPriority(NotificationCompat.PRIORITY_MIN); - } - - Intent pauseWatching = new Intent(this, WatchNotifier.class); - pauseWatching.putExtra("pause_pins", true); - - PendingIntent pauseWatchingPending = PendingIntent.getService(this, 0, pauseWatching, - PendingIntent.FLAG_UPDATE_CURRENT); - - builder.addAction(R.drawable.ic_action_pause, getString(R.string.watch_pause_pins), - pauseWatchingPending); - - if (expandedLines != null) { - NotificationCompat.InboxStyle style = new NotificationCompat.InboxStyle(); - for (CharSequence line : expandedLines.subList(Math.max(0, expandedLines.size() - 10), expandedLines.size())) { - style.addLine(line); - } - style.setBigContentTitle(title); - builder.setStyle(style); - } - - return builder.build(); - } - - private static class PostAgeComparator implements Comparator { - @Override - public int compare(Post lhs, Post rhs) { - if (lhs.time < rhs.time) { - return 1; - } else if (lhs.time > rhs.time) { - return -1; - } else { - return 0; - } - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/settings/BooleanSettingView.java b/Clover/app/src/main/java/org/floens/chan/ui/settings/BooleanSettingView.java deleted file mode 100644 index 0931e0e66f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/settings/BooleanSettingView.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.settings; - -import android.support.v7.widget.SwitchCompat; -import android.view.View; -import android.widget.CompoundButton; - -import org.floens.chan.R; -import org.floens.chan.core.settings.Setting; - -public class BooleanSettingView extends SettingView implements View.OnClickListener, CompoundButton.OnCheckedChangeListener { - private SwitchCompat switcher; - private Setting setting; - private String description; - private boolean building = true; - - public BooleanSettingView(SettingsController settingsController, Setting setting, int name, int description) { - this(settingsController, setting, getString(name), getString(description)); - } - - public BooleanSettingView(SettingsController settingsController, Setting setting, String name, String description) { - super(settingsController, name); - this.setting = setting; - this.description = description; - } - - @Override - public void setView(View view) { - super.setView(view); - - view.setOnClickListener(this); - - switcher = view.findViewById(R.id.switcher); - switcher.setOnCheckedChangeListener(this); - - switcher.setChecked(setting.get()); - - building = false; - } - - @Override - public String getBottomDescription() { - return description; - } - - @Override - public void setEnabled(boolean enabled) { - view.setEnabled(enabled); - view.findViewById(R.id.top).setEnabled(enabled); - View bottom = view.findViewById(R.id.bottom); - if (bottom != null) { - bottom.setEnabled(enabled); - } - switcher.setEnabled(enabled); - } - - @Override - public void onClick(View v) { - switcher.toggle(); - } - - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (!building) { - setting.set(isChecked); - settingsController.onPreferenceChange(this); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/settings/IntegerSettingView.java b/Clover/app/src/main/java/org/floens/chan/ui/settings/IntegerSettingView.java deleted file mode 100644 index 9ac67adaff..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/settings/IntegerSettingView.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.settings; - -import android.content.DialogInterface; -import android.support.v7.app.AlertDialog; -import android.text.InputType; -import android.view.View; -import android.view.WindowManager; -import android.view.inputmethod.EditorInfo; -import android.widget.EditText; -import android.widget.LinearLayout; - -import org.floens.chan.R; -import org.floens.chan.core.settings.Setting; - -import static org.floens.chan.utils.AndroidUtils.dp; - -/** - * Created by Zetsubou on 02.07.2015 - */ -public class IntegerSettingView extends SettingView implements View.OnClickListener { - private final Setting setting; - private final String dialogTitle; - - public IntegerSettingView(SettingsController settingsController, Setting setting, int name, int dialogTitle) { - this(settingsController, setting, getString(name), getString(dialogTitle)); - } - - public IntegerSettingView(SettingsController settingsController, Setting setting, String name, String dialogTitle) { - super(settingsController, name); - this.setting = setting; - this.dialogTitle = dialogTitle; - } - - @Override - public void setView(View view) { - super.setView(view); - view.setOnClickListener(this); - } - - @Override - public String getBottomDescription() { - return setting.get() != null ? setting.get().toString() : null; - } - - @Override - public void onClick(View v) { - LinearLayout container = new LinearLayout(v.getContext()); - container.setPadding(dp(24), dp(8), dp(24), 0); - - final EditText editText = new EditText(v.getContext()); - editText.setImeOptions(EditorInfo.IME_FLAG_NO_FULLSCREEN); - editText.setText(setting.get().toString()); - editText.setInputType(InputType.TYPE_CLASS_NUMBER); - editText.setSingleLine(true); - editText.setSelection(editText.getText().length()); - - container.addView(editText, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); - - AlertDialog dialog = new AlertDialog.Builder(v.getContext()) - .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface d, int which) { - try { - setting.set(Integer.parseInt(editText.getText().toString())); - } catch (Exception e) { - setting.set(setting.getDefault()); - } - - settingsController.onPreferenceChange(IntegerSettingView.this); - } - }) - .setNegativeButton(R.string.cancel, null) - .setTitle(dialogTitle) - .setView(container) - .create(); - dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); - dialog.show(); - } -} \ No newline at end of file diff --git a/Clover/app/src/main/java/org/floens/chan/ui/settings/LinkSettingView.java b/Clover/app/src/main/java/org/floens/chan/ui/settings/LinkSettingView.java deleted file mode 100644 index 7f6af86927..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/settings/LinkSettingView.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.settings; - -import android.view.View; - -import org.floens.chan.R; - -public class LinkSettingView extends SettingView { - private final View.OnClickListener clickListener; - private String description; - private boolean built = false; - - public LinkSettingView(SettingsController settingsController, int name, int description, View.OnClickListener clickListener) { - this(settingsController, getString(name), getString(description), clickListener); - } - - public LinkSettingView(SettingsController settingsController, String name, String description, View.OnClickListener clickListener) { - super(settingsController, name); - this.description = description; - this.clickListener = clickListener; - } - - @Override - public void setView(View view) { - super.setView(view); - view.setOnClickListener(clickListener); - built = true; - } - - @Override - public String getBottomDescription() { - return description; - } - - @Override - public void setEnabled(boolean enabled) { - view.setEnabled(enabled); - view.findViewById(R.id.top).setEnabled(enabled); - View bottom = view.findViewById(R.id.bottom); - if (bottom != null) { - bottom.setEnabled(enabled); - } - } - - public void setDescription(int description) { - setDescription(getString(description)); - } - - public void setDescription(String description) { - this.description = description; - if (built) { - settingsController.onPreferenceChange(this); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/settings/ListSettingView.java b/Clover/app/src/main/java/org/floens/chan/ui/settings/ListSettingView.java deleted file mode 100644 index f0cc07106f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/settings/ListSettingView.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.settings; - -import android.view.Gravity; -import android.view.View; - -import org.floens.chan.R; -import org.floens.chan.core.settings.Setting; -import org.floens.chan.ui.view.FloatingMenu; -import org.floens.chan.ui.view.FloatingMenuItem; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public class ListSettingView extends SettingView implements FloatingMenu.FloatingMenuCallback, View.OnClickListener { - public final List items; - - public int selected; - - private Setting setting; - - public ListSettingView(SettingsController settingsController, Setting setting, int name, String[] itemNames, String[] keys) { - this(settingsController, setting, getString(name), itemNames, keys); - } - - public ListSettingView(SettingsController settingsController, Setting setting, String name, String[] itemNames, String[] keys) { - super(settingsController, name); - - this.setting = setting; - - items = new ArrayList<>(itemNames.length); - for (int i = 0; i < itemNames.length; i++) { - items.add(i, new Item<>(itemNames[i], keys[i])); - } - - updateSelection(); - } - - public ListSettingView(SettingsController settingsController, Setting setting, int name, Item[] items) { - this(settingsController, setting, getString(name), items); - } - - public ListSettingView(SettingsController settingsController, Setting setting, int name, List items) { - this(settingsController, setting, getString(name), items); - } - - public ListSettingView(SettingsController settingsController, Setting setting, String name, Item[] items) { - this(settingsController, setting, name, Arrays.asList(items)); - } - - public ListSettingView(SettingsController settingsController, Setting setting, String name, List items) { - super(settingsController, name); - this.setting = setting; - this.items = items; - - updateSelection(); - } - - public String getBottomDescription() { - return items.get(selected).name; - } - - public Setting getSetting() { - return setting; - } - - @Override - public void setView(View view) { - super.setView(view); - view.setOnClickListener(this); - } - - @Override - public void setEnabled(boolean enabled) { - view.setEnabled(enabled); - view.findViewById(R.id.top).setEnabled(enabled); - View bottom = view.findViewById(R.id.bottom); - if (bottom != null) { - bottom.setEnabled(enabled); - } - } - - @Override - public void onClick(View v) { - List menuItems = new ArrayList<>(items.size()); - for (Item item : items) { - menuItems.add(new FloatingMenuItem(item.key, item.name, item.enabled)); - } - - FloatingMenu menu = new FloatingMenu(v.getContext()); - menu.setAnchor(v, Gravity.LEFT, dp(5), dp(5)); - menu.setPopupWidth(FloatingMenu.POPUP_WIDTH_ANCHOR); - menu.setCallback(this); - menu.setItems(menuItems); - menu.show(); - } - - @SuppressWarnings("unchecked") - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - T selectedKey = (T) item.getId(); - setting.set(selectedKey); - updateSelection(); - settingsController.onPreferenceChange(this); - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - - public void updateSelection() { - T selectedKey = setting.get(); - for (int i = 0; i < items.size(); i++) { - if (items.get(i).key.equals(selectedKey)) { - selected = i; - break; - } - } - } - - public static class Item { - public final String name; - public final T key; - public boolean enabled; - - public Item(String name, T key) { - this.name = name; - this.key = key; - enabled = true; - } - - public Item(String name, T key, boolean enabled) { - this.name = name; - this.key = key; - this.enabled = enabled; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/settings/SettingView.java b/Clover/app/src/main/java/org/floens/chan/ui/settings/SettingView.java deleted file mode 100644 index 7a9a38c216..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/settings/SettingView.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.settings; - -import android.view.View; - -import org.floens.chan.utils.AndroidUtils; - -public abstract class SettingView { - public SettingsController settingsController; - public final String name; - public View view; - public View divider; - - public SettingView(SettingsController settingsController, String name) { - this.settingsController = settingsController; - this.name = name; - } - - public void setView(View view) { - this.view = view; - } - - public void setEnabled(boolean enabled) { - } - - public String getTopDescription() { - return name; - } - - public String getBottomDescription() { - return null; - } - - public static String getString(int id) { - return id == 0 ? null : AndroidUtils.getString(id); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/settings/SettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/settings/SettingsController.java deleted file mode 100644 index 0c80b5bac7..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/settings/SettingsController.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.settings; - -import android.content.Context; -import android.content.res.Configuration; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.controller.Controller; -import org.floens.chan.ui.activity.StartActivity; -import org.floens.chan.ui.helper.RefreshUIMessage; -import org.floens.chan.utils.AndroidUtils; - -import java.util.ArrayList; -import java.util.List; - -import de.greenrobot.event.EventBus; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public class SettingsController extends Controller implements AndroidUtils.OnMeasuredCallback { - protected LinearLayout content; - protected List groups = new ArrayList<>(); - - protected List requiresUiRefresh = new ArrayList<>(); - - // Very user unfriendly. - @Deprecated - protected List requiresRestart = new ArrayList<>(); - - private boolean needRestart = false; - - public SettingsController(Context context) { - super(context); - } - - @Override - public void onShow() { - super.onShow(); - - AndroidUtils.waitForLayout(view, this); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - if (needRestart) { - ((StartActivity) context).restart(); - } - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - AndroidUtils.waitForLayout(view, this); - } - - @Override - public boolean onMeasured(View view) { - setMargins(); - return false; - } - - public void onPreferenceChange(SettingView item) { - if ((item instanceof ListSettingView) - || (item instanceof StringSettingView) - || (item instanceof IntegerSettingView) - || (item instanceof LinkSettingView)) { - setDescriptionText(item.view, item.getTopDescription(), item.getBottomDescription()); - } - - if (requiresUiRefresh.contains(item)) { - EventBus.getDefault().post(new RefreshUIMessage("unknown")); - } else if (requiresRestart.contains(item)) { - needRestart = true; - } - } - - private void setMargins() { - boolean tablet = AndroidUtils.isTablet(context); - - int margin = 0; - if (tablet) { - margin = (int) (view.getWidth() * 0.1); - } - - int itemMargin = 0; - if (tablet) { - itemMargin = dp(16); - } - - List groups = AndroidUtils.findViewsById(content, R.id.group); - for (View group : groups) { - LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) group.getLayoutParams(); - params.leftMargin = margin; - params.rightMargin = margin; - group.setLayoutParams(params); - } - - List items = AndroidUtils.findViewsById(content, R.id.preference_item); - for (View item : items) { - item.setPadding(itemMargin, item.getPaddingTop(), itemMargin, item.getPaddingBottom()); - } - } - - protected void setSettingViewVisibility(SettingView settingView, boolean visible, boolean animated) { - settingView.view.setVisibility(visible ? View.VISIBLE : View.GONE); - - if (settingView.divider != null) { - settingView.divider.setVisibility(visible ? View.VISIBLE : View.GONE); - } - } - - protected void setupLayout() { - view = inflateRes(R.layout.settings_layout); - content = view.findViewById(R.id.scrollview_content); - } - - protected void buildPreferences() { - LayoutInflater inf = LayoutInflater.from(context); - boolean firstGroup = true; - content.removeAllViews(); - - for (SettingsGroup group : groups) { - LinearLayout groupLayout = (LinearLayout) inf.inflate(R.layout.setting_group, content, false); - ((TextView) groupLayout.findViewById(R.id.header)).setText(group.name); - - if (firstGroup) { - firstGroup = false; - ((LinearLayout.LayoutParams) groupLayout.getLayoutParams()).topMargin = 0; - } - - content.addView(groupLayout); - - for (int i = 0; i < group.settingViews.size(); i++) { - SettingView settingView = group.settingViews.get(i); - - ViewGroup preferenceView = null; - String topValue = settingView.getTopDescription(); - String bottomValue = settingView.getBottomDescription(); - - if ((settingView instanceof ListSettingView) - || (settingView instanceof LinkSettingView) - || (settingView instanceof StringSettingView) - || (settingView instanceof IntegerSettingView)) { - preferenceView = (ViewGroup) inf.inflate(R.layout.setting_link, groupLayout, false); - } else if (settingView instanceof BooleanSettingView) { - preferenceView = (ViewGroup) inf.inflate(R.layout.setting_boolean, groupLayout, false); - } - - setDescriptionText(preferenceView, topValue, bottomValue); - - groupLayout.addView(preferenceView); - - settingView.setView(preferenceView); - - if (i < group.settingViews.size() - 1) { - settingView.divider = inf.inflate(R.layout.setting_divider, groupLayout, false); - groupLayout.addView(settingView.divider); - } - } - } - } - - private void setDescriptionText(View view, String topText, String bottomText) { - ((TextView) view.findViewById(R.id.top)).setText(topText); - - final TextView bottom = view.findViewById(R.id.bottom); - if (bottom != null) { - bottom.setText(bottomText); - bottom.setVisibility(bottomText == null ? View.GONE : View.VISIBLE); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/settings/SettingsGroup.java b/Clover/app/src/main/java/org/floens/chan/ui/settings/SettingsGroup.java deleted file mode 100644 index e710ecf0b6..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/settings/SettingsGroup.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.settings; - -import java.util.ArrayList; -import java.util.List; - -public class SettingsGroup { - public final String name; - public final List settingViews = new ArrayList<>(); - - public SettingsGroup(int name) { - this(SettingView.getString(name)); - } - - public SettingsGroup(String name) { - this.name = name; - } - - public SettingView add(SettingView settingView) { - settingViews.add(settingView); - return settingView; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/settings/StringSettingView.java b/Clover/app/src/main/java/org/floens/chan/ui/settings/StringSettingView.java deleted file mode 100644 index 77e014bb18..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/settings/StringSettingView.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.settings; - -import android.content.DialogInterface; -import android.support.v7.app.AlertDialog; -import android.view.View; -import android.view.WindowManager; -import android.view.inputmethod.EditorInfo; -import android.widget.EditText; -import android.widget.LinearLayout; - -import org.floens.chan.R; -import org.floens.chan.core.settings.Setting; - -import static org.floens.chan.utils.AndroidUtils.dp; - -public class StringSettingView extends SettingView implements View.OnClickListener { - private final Setting setting; - private final String dialogTitle; - - public StringSettingView(SettingsController settingsController, Setting setting, int name, int dialogTitle) { - this(settingsController, setting, getString(name), getString(dialogTitle)); - } - - public StringSettingView(SettingsController settingsController, Setting setting, String name, String dialogTitle) { - super(settingsController, name); - this.setting = setting; - this.dialogTitle = dialogTitle; - } - - @Override - public void setView(View view) { - super.setView(view); - view.setOnClickListener(this); - } - - @Override - public String getBottomDescription() { - return setting.get().length() > 0 ? setting.get() : null; - } - - @Override - public void onClick(View v) { - LinearLayout container = new LinearLayout(v.getContext()); - container.setPadding(dp(24), dp(8), dp(24), 0); - - final EditText editText = new EditText(v.getContext()); - editText.setImeOptions(EditorInfo.IME_FLAG_NO_FULLSCREEN); - editText.setText(setting.get()); - editText.setSingleLine(true); - editText.setSelection(editText.getText().length()); - - container.addView(editText, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); - - AlertDialog dialog = new AlertDialog.Builder(v.getContext()) - .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface d, int which) { - setting.set(editText.getText().toString()); - settingsController.onPreferenceChange(StringSettingView.this); - } - }) - .setNegativeButton(R.string.cancel, null) - .setTitle(dialogTitle) - .setView(container) - .create(); - dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); - dialog.show(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/span/AbsoluteSizeSpanHashed.java b/Clover/app/src/main/java/org/floens/chan/ui/span/AbsoluteSizeSpanHashed.java deleted file mode 100644 index ae1f7b27b3..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/span/AbsoluteSizeSpanHashed.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.span; - -import android.os.Parcel; -import android.text.style.AbsoluteSizeSpan; - -/** - * A version of AbsoluteSizeSpan that has proper equals and hashCode implementations. Used to fix the hashcode result from SpannableStringBuilder. - */ -public class AbsoluteSizeSpanHashed extends AbsoluteSizeSpan { - public AbsoluteSizeSpanHashed(int size) { - super(size); - } - - public AbsoluteSizeSpanHashed(int size, boolean dip) { - super(size, dip); - } - - public AbsoluteSizeSpanHashed(Parcel src) { - super(src); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - AbsoluteSizeSpanHashed that = (AbsoluteSizeSpanHashed) o; - - if (getSize() != that.getSize()) return false; - return getDip() == that.getDip(); - } - - @Override - public int hashCode() { - int result = getSize(); - result = 31 * result + (getDip() ? 1 : 0); - return result; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/text/FastTextView.java b/Clover/app/src/main/java/org/floens/chan/ui/text/FastTextView.java deleted file mode 100644 index 91e3eebdb7..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/text/FastTextView.java +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.text; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.text.Layout; -import android.text.Spanned; -import android.text.StaticLayout; -import android.text.TextPaint; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.util.LruCache; -import android.view.MotionEvent; -import android.view.View; - -import org.floens.chan.R; -import org.floens.chan.utils.Logger; - -import static org.floens.chan.utils.AndroidUtils.sp; - -/** - * A simple implementation of a TextView that caches the used StaticLayouts for performance.
- * This view was made for {@link org.floens.chan.ui.cell.PostCell} and {@link org.floens.chan.ui.cell.CardPostCell} and may have untested behaviour with other layouts. - */ -public class FastTextView extends View { - private static final String TAG = "FastTextView"; - private static LruCache textCache = new LruCache<>(250); - - private TextPaint paint; - private boolean singleLine; - - private CharSequence text; - - private boolean update = false; - private StaticLayout layout; - private int width; - private FastTextViewMovementMethod movementMethod; - - public FastTextView(Context context) { - this(context, null); - } - - public FastTextView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public FastTextView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - - paint = new TextPaint(Paint.ANTI_ALIAS_FLAG); - - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FastTextView); - setTextColor(a.getColor(R.styleable.FastTextView_textColor, 0xff000000)); - setTextSize(a.getDimensionPixelSize(R.styleable.FastTextView_textSize, 15)); - singleLine = a.getBoolean(R.styleable.FastTextView_singleLine, false); - a.recycle(); - } - - public void setText(CharSequence text) { - if (!TextUtils.equals(this.text, text)) { - this.text = text; - - update = true; - invalidate(); - requestLayout(); - } - } - - public void setTextSize(float size) { - int sizeSp = sp(size); - if (paint.getTextSize() != sizeSp) { - paint.setTextSize(sizeSp); - update = true; - invalidate(); - } - } - - public void setTextColor(int color) { - if (paint.getColor() != color) { - paint.setColor(color); - update = true; - invalidate(); - } - } - - public void setMovementMethod(FastTextViewMovementMethod movementMethod) { - if (this.movementMethod != movementMethod) { - this.movementMethod = movementMethod; - - if (movementMethod != null) { - setFocusable(true); - setClickable(true); - setLongClickable(true); - } else { - setFocusable(false); - setClickable(false); - setLongClickable(false); - } - - update = true; - invalidate(); - } - } - - public StaticLayout getLayout() { - return layout; - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - boolean handled = false; - - if (movementMethod != null && text instanceof Spanned && layout != null && isEnabled()) { - handled |= movementMethod.onTouchEvent(this, (Spanned) text, event); - } - - return handled || super.onTouchEvent(event); - } - - @Override - protected void onDraw(Canvas canvas) { - updateLayout(); - - if (layout != null) { - canvas.save(); - canvas.translate(getPaddingLeft(), getPaddingTop()); - layout.draw(canvas); - canvas.restore(); - } - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int widthMode = MeasureSpec.getMode(widthMeasureSpec); - int heightMode = MeasureSpec.getMode(heightMeasureSpec); - int widthSize = MeasureSpec.getSize(widthMeasureSpec); - int heightSize = MeasureSpec.getSize(heightMeasureSpec); - -// Logger.test("%X %s %s", System.identityHashCode(this), MeasureSpec.toString(widthMeasureSpec), MeasureSpec.toString(heightMeasureSpec)); - - if ((widthMode == MeasureSpec.AT_MOST || widthMode == MeasureSpec.UNSPECIFIED) && !singleLine) { - throw new IllegalArgumentException("FasTextView only supports wrapping widths on a single line"); - } - - int width = 0; - if (widthMode == MeasureSpec.EXACTLY) { - width = widthSize; - } else if ((widthMode == MeasureSpec.AT_MOST || widthMode == MeasureSpec.UNSPECIFIED) && !TextUtils.isEmpty(text)) { - width = Math.round(Layout.getDesiredWidth(text, paint) + getPaddingLeft() + getPaddingRight()); - if (widthMode == MeasureSpec.AT_MOST) { - width = Math.min(width, widthSize); - } - } - - if (width > 0) { - if (this.width != width) { - this.width = width; - update = true; - } - - updateLayout(); - - if (layout != null) { - int height; - if (heightMode == MeasureSpec.EXACTLY) { - height = heightSize; - } else { - height = layout.getHeight() + getPaddingTop() + getPaddingBottom(); - if (heightMode == MeasureSpec.AT_MOST) { - height = Math.min(height, heightSize); - } - } - - setMeasuredDimension(width, height); - } else { - int height; - if (heightMode == MeasureSpec.EXACTLY) { - height = heightSize; - } else { - height = 0; - } - - setMeasuredDimension(width, height); - } - } else { - // Width is 0, ignore - Logger.w(TAG, "Width = 0"); - setMeasuredDimension(0, 0); - } - } - - private void updateLayout() { - if (!TextUtils.isEmpty(text)) { - if (update) { - int layoutWidth = width - getPaddingLeft() - getPaddingRight(); - if (layoutWidth > 0) { -// long start = Time.startTiming(); - - // The StaticLayouts are cached with the static textCache LRU map - FastTextViewItem item = new FastTextViewItem(text, paint, layoutWidth); - - StaticLayout cached = textCache.get(item); - if (cached == null) { -// Logger.test("staticlayout cache miss: text = %s", text); - cached = getStaticLayout(layoutWidth); - textCache.put(item, cached); - }/* else { - Logger.test("staticlayout cache hit"); - }*/ - - layout = cached; -// Time.endTiming(Integer.toHexString(System.identityHashCode(this)) + " staticlayout for width = " + layoutWidth + "\t", start); - } else { - layout = null; - } - } - } else { - layout = null; - } - update = false; - } - - private StaticLayout getStaticLayout(int layoutWidth) { -// Logger.test("new staticlayout width=%d", layoutWidth); - return new StaticLayout(text, paint, layoutWidth, Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false); - } - - private static class FastTextViewItem { - private CharSequence text; - private int color; - private float textSize; - private int layoutWidth; - - public FastTextViewItem(CharSequence text, TextPaint textPaint, int layoutWidth) { - this.text = text; - color = textPaint.getColor(); - textSize = textPaint.getTextSize(); - this.layoutWidth = layoutWidth; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - FastTextViewItem that = (FastTextViewItem) o; - - if (color != that.color) return false; - if (Float.compare(that.textSize, textSize) != 0) return false; - if (layoutWidth != that.layoutWidth) return false; - return text.equals(that.text); - } - - @Override - public int hashCode() { - int result = text.hashCode(); - result = 31 * result + color; - result = 31 * result + (textSize != +0.0f ? Float.floatToIntBits(textSize) : 0); - result = 31 * result + layoutWidth; - return result; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/text/FastTextViewMovementMethod.java b/Clover/app/src/main/java/org/floens/chan/ui/text/FastTextViewMovementMethod.java deleted file mode 100644 index 8019612925..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/text/FastTextViewMovementMethod.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.text; - -import android.text.Spanned; -import android.view.MotionEvent; - -public interface FastTextViewMovementMethod { - boolean onTouchEvent(FastTextView widget, Spanned buffer, MotionEvent event); -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/theme/DarkTheme.java b/Clover/app/src/main/java/org/floens/chan/ui/theme/DarkTheme.java deleted file mode 100644 index da0832eb9b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/theme/DarkTheme.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.theme; - -import org.floens.chan.R; - -public class DarkTheme extends Theme { - public DarkTheme(String displayName, String name, int resValue, ThemeHelper.PrimaryColor primaryColor) { - super(displayName, name, resValue, primaryColor); - isLightTheme = false; - } - - public void resolveDrawables() { - super.resolveDrawables(); - settingsDrawable = new ThemeDrawable(R.drawable.ic_settings_white_24dp, 1f); - imageDrawable = new ThemeDrawable(R.drawable.ic_image_white_24dp, 1f); - sendDrawable = new ThemeDrawable(R.drawable.ic_send_white_24dp, 1f); - clearDrawable = new ThemeDrawable(R.drawable.ic_clear_white_24dp, 1f); - backDrawable = new ThemeDrawable(R.drawable.ic_arrow_back_white_24dp, 1f); - doneDrawable = new ThemeDrawable(R.drawable.ic_done_white_24dp, 1f); - historyDrawable = new ThemeDrawable(R.drawable.ic_history_white_24dp, 1f); - listAddDrawable = new ThemeDrawable(R.drawable.ic_playlist_add_white_24dp, 1f); - helpDrawable = new ThemeDrawable(R.drawable.ic_help_outline_white_24dp, 1f); - refreshDrawable = new ThemeDrawable(R.drawable.ic_refresh_white_24dp, 1f); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java b/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java deleted file mode 100644 index a25807cf14..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.theme; - -import android.content.Context; -import android.content.res.ColorStateList; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.graphics.drawable.Drawable; -import android.support.design.widget.FloatingActionButton; -import android.widget.ImageView; - -import org.floens.chan.R; -import org.floens.chan.core.site.parser.PostParser; -import org.floens.chan.utils.AndroidUtils; - -/** - * A Theme
- * Used for setting the toolbar color, and passed around {@link PostParser} to give the spans the correct color.
- * Technically should the parser not do UI, but it is important that the spans do not get created on an UI thread for performance. - */ -public class Theme { - public final String displayName; - public final String name; - public final int resValue; - public boolean isLightTheme = true; - public ThemeHelper.PrimaryColor primaryColor; - public ThemeHelper.PrimaryColor accentColor; - - public int textPrimary; - public int textSecondary; - public int textHint; - public int quoteColor; - public int highlightQuoteColor; - public int linkColor; - public int spoilerColor; - public int inlineQuoteColor; - public int subjectColor; - public int nameColor; - public int idBackgroundLight; - public int idBackgroundDark; - public int capcodeColor; - public int detailsColor; - public int highlightedColor; - public int savedReplyColor; - public int selectedColor; - public int textColorRevealSpoiler; - - public ThemeDrawable settingsDrawable; - public ThemeDrawable imageDrawable; - public ThemeDrawable sendDrawable; - public ThemeDrawable clearDrawable; - public ThemeDrawable backDrawable; - public ThemeDrawable doneDrawable; - public ThemeDrawable historyDrawable; - public ThemeDrawable listAddDrawable; - public ThemeDrawable helpDrawable; - public ThemeDrawable refreshDrawable; - - public Theme(String displayName, String name, int resValue, ThemeHelper.PrimaryColor primaryColor) { - this.displayName = displayName; - this.name = name; - this.resValue = resValue; - this.primaryColor = primaryColor; - accentColor = ThemeHelper.PrimaryColor.TEAL; - - resolveSpanColors(); - resolveDrawables(); - } - - public void resolveDrawables() { - settingsDrawable = new ThemeDrawable(R.drawable.ic_settings_black_24dp, 0.54f); - imageDrawable = new ThemeDrawable(R.drawable.ic_image_black_24dp, 0.54f); - sendDrawable = new ThemeDrawable(R.drawable.ic_send_black_24dp, 0.54f); - clearDrawable = new ThemeDrawable(R.drawable.ic_clear_black_24dp, 0.54f); - backDrawable = new ThemeDrawable(R.drawable.ic_arrow_back_black_24dp, 0.54f); - doneDrawable = new ThemeDrawable(R.drawable.ic_done_black_24dp, 0.54f); - historyDrawable = new ThemeDrawable(R.drawable.ic_history_black_24dp, 0.54f); - listAddDrawable = new ThemeDrawable(R.drawable.ic_playlist_add_black_24dp, 0.54f); - helpDrawable = new ThemeDrawable(R.drawable.ic_help_outline_black_24dp, 0.54f); - refreshDrawable = new ThemeDrawable(R.drawable.ic_refresh_black_24dp, 0.54f); - } - - public void applyFabColor(FloatingActionButton fab) { - fab.setBackgroundTintList(ColorStateList.valueOf(accentColor.color)); - } - - @SuppressWarnings("ResourceType") - private void resolveSpanColors() { - Resources.Theme theme = AndroidUtils.getAppContext().getResources().newTheme(); - theme.applyStyle(R.style.Chan_Theme, true); - theme.applyStyle(resValue, true); - - TypedArray ta = theme.obtainStyledAttributes(new int[]{ - R.attr.post_quote_color, - R.attr.post_highlight_quote_color, - R.attr.post_link_color, - R.attr.post_spoiler_color, - R.attr.post_inline_quote_color, - R.attr.post_subject_color, - R.attr.post_name_color, - R.attr.post_id_background_light, - R.attr.post_id_background_dark, - R.attr.post_capcode_color, - R.attr.post_details_color, - R.attr.post_highlighted_color, - R.attr.post_saved_reply_color, - R.attr.post_selected_color, - R.attr.text_color_primary, - R.attr.text_color_secondary, - R.attr.text_color_hint, - R.attr.text_color_reveal_spoiler - }); - - quoteColor = ta.getColor(0, 0); - highlightQuoteColor = ta.getColor(1, 0); - linkColor = ta.getColor(2, 0); - spoilerColor = ta.getColor(3, 0); - inlineQuoteColor = ta.getColor(4, 0); - subjectColor = ta.getColor(5, 0); - nameColor = ta.getColor(6, 0); - idBackgroundLight = ta.getColor(7, 0); - idBackgroundDark = ta.getColor(8, 0); - capcodeColor = ta.getColor(9, 0); - detailsColor = ta.getColor(10, 0); - highlightedColor = ta.getColor(11, 0); - savedReplyColor = ta.getColor(12, 0); - selectedColor = ta.getColor(13, 0); - textPrimary = ta.getColor(14, 0); - textSecondary = ta.getColor(15, 0); - textHint = ta.getColor(16, 0); - textColorRevealSpoiler = ta.getColor(17, 0); - - ta.recycle(); - } - - public static class ThemeDrawable { - public int drawable; - public float alpha; - public int intAlpha; - - public ThemeDrawable(int drawable, float alpha) { - this.drawable = drawable; - this.alpha = alpha; - intAlpha = Math.round(alpha * 0xff); - } - - public void apply(ImageView imageView) { - imageView.setImageResource(drawable); - // Use the int one! - //noinspection deprecation - imageView.setAlpha(intAlpha); - } - - public Drawable makeDrawable(Context context) { - //noinspection deprecation - Drawable d = context.getResources().getDrawable(drawable).mutate(); - d.setAlpha(intAlpha); - return d; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/theme/ThemeHelper.java b/Clover/app/src/main/java/org/floens/chan/ui/theme/ThemeHelper.java deleted file mode 100644 index e56fe256a7..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/theme/ThemeHelper.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.theme; - -import android.app.Activity; -import android.app.ActivityManager; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.os.Build; -import android.support.annotation.AnyThread; - -import org.floens.chan.R; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.utils.Logger; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class ThemeHelper { - private static final String TAG = "ThemeHelper"; - - public static ThemeHelper instance = new ThemeHelper(); - - public static ThemeHelper getInstance() { - return instance; - } - - public static Theme theme() { - return getInstance().getTheme(); - } - - private List themes = new ArrayList<>(); - - private Theme theme; - - public ThemeHelper() { - themes.add(new Theme("Light", "light", R.style.Chan_Theme, PrimaryColor.GREEN)); - themes.add(new DarkTheme("Dark", "dark", R.style.Chan_Theme_Dark, PrimaryColor.DARK)); - themes.add(new DarkTheme("Black", "black", R.style.Chan_Theme_Black, PrimaryColor.BLACK)); - themes.add(new DarkTheme("Tomorrow", "tomorrow", R.style.Chan_Theme_Tomorrow, PrimaryColor.DARK)); - themes.add(new Theme("Yotsuba", "yotsuba", R.style.Chan_Theme_Yotsuba, PrimaryColor.RED)); - themes.add(new Theme("Yotsuba B", "yotsuba_b", R.style.Chan_Theme_YotsubaB, PrimaryColor.RED)); - themes.add(new Theme("Photon", "photon", R.style.Chan_Theme_Photon, PrimaryColor.ORANGE)); - themes.add(new DarkTheme("Insomnia", "insomnia", R.style.Chan_Theme_Insomnia, PrimaryColor.DARK)); - themes.add(new DarkTheme("Gruvbox", "gruvbox", R.style.Chan_Theme_Gruvbox, PrimaryColor.DARK)); - themes.add(new DarkTheme("Neon", "neon", R.style.Chan_Theme_Neon, PrimaryColor.DARK)); - themes.add(new DarkTheme("Solarized Dark", "solarized_dark", R.style.Chan_Theme_SolarizedDark, PrimaryColor.ORANGE)); - - ChanSettings.ThemeColor settingTheme = ChanSettings.getThemeAndColor(); - for (Theme theme : themes) { - if (theme.name.equals(settingTheme.theme)) { - patchTheme(theme, settingTheme); - break; - } - } - - updateCurrentTheme(); - } - - public void changeTheme(Theme theme, PrimaryColor primaryColor, PrimaryColor accentColor) { - ChanSettings.ThemeColor setting = new ChanSettings.ThemeColor(theme.name, primaryColor.name, accentColor.name); - ChanSettings.setThemeAndColor(setting); - patchTheme(theme, setting); - updateCurrentTheme(); - } - - public void updateCurrentTheme() { - ChanSettings.ThemeColor settingTheme = ChanSettings.getThemeAndColor(); - for (Theme theme : themes) { - if (theme.name.equals(settingTheme.theme)) { - this.theme = theme; - return; - } - } - - Logger.e(TAG, "No theme found for setting " + settingTheme + ", using the first one"); - theme = themes.get(0); - } - - private void patchTheme(Theme theme, ChanSettings.ThemeColor setting) { - // Patch the theme primary and accent color when set in the settings - if (setting.color != null) { - theme.primaryColor = getColor(setting.color, PrimaryColor.BLACK); - } - if (setting.accentColor != null) { - theme.accentColor = getColor(setting.accentColor, PrimaryColor.TEAL); - } - } - - @AnyThread - public Theme getTheme() { - return theme; - } - - public List getThemes() { - return themes; - } - - public void setupContext(Activity context) { - updateCurrentTheme(); - context.setTheme(theme.resValue); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - context.getWindow().setStatusBarColor(theme.primaryColor.dark); - context.getWindow().setNavigationBarColor(0xff000000); - - Bitmap icon = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_task_description); - context.setTaskDescription(new ActivityManager.TaskDescription(null, icon, theme.primaryColor.color)); - } - } - - public PrimaryColor getColor(String name, PrimaryColor defaultColor) { - for (PrimaryColor primaryColor : PrimaryColor.values()) { - if (primaryColor.name.equals(name)) { - return primaryColor; - } - } - - Logger.e(TAG, "No color found for setting " + name); - return defaultColor; - } - - public List getColors() { - return Arrays.asList(PrimaryColor.values()); - } - - public enum PrimaryColor { - RED("Red", "red", 0xFFFFEBEE, 0xFFFFCDD2, 0xFFEF9A9A, 0xFFE57373, 0xFFEF5350, 0xFFF44336, 0xFFE53935, 0xFFD32F2F, 0xFFD32F2F, 0xFFB71C1C), - PINK("Pink", "pink", 0xFFFCE4EC, 0xFFF8BBD0, 0xFFF48FB1, 0xFFF06292, 0xFFEC407A, 0xFFE91E63, 0xFFD81B60, 0xFFC2185B, 0xFFC2185B, 0xFF880E4F), - PURPLE("Purple", "purple", 0xFFF3E5F5, 0xFFE1BEE7, 0xFFCE93D8, 0xFFBA68C8, 0xFFAB47BC, 0xFF9C27B0, 0xFF8E24AA, 0xFF7B1FA2, 0xFF7B1FA2, 0xFF4A148C), - DEEP_PURPLE("Deep Purple", "deep_purple", 0xFFEDE7F6, 0xFFD1C4E9, 0xFFB39DDB, 0xFF9575CD, 0xFF7E57C2, 0xFF673AB7, 0xFF5E35B1, 0xFF512DA8, 0xFF512DA8, 0xFF311B92), - INDIGO("Indigo", "indigo", 0xFFE8EAF6, 0xFFC5CAE9, 0xFF9FA8DA, 0xFF7986CB, 0xFF5C6BC0, 0xFF3F51B5, 0xFF3949AB, 0xFF303F9F, 0xFF303F9F, 0xFF1A237E), - BLUE("Blue", "blue", 0xFFE3F2FD, 0xFFBBDEFB, 0xFF90CAF9, 0xFF64B5F6, 0xFF42A5F5, 0xFF2196F3, 0xFF1E88E5, 0xFF1976D2, 0xFF1976D2, 0xFF0D47A1), - LIGHT_BLUE("Light Blue", "light_blue", 0xFFE1F5FE, 0xFFB3E5FC, 0xFF81D4FA, 0xFF4FC3F7, 0xFF29B6F6, 0xFF03A9F4, 0xFF039BE5, 0xFF0288D1, 0xFF0288D1, 0xFF01579B), - CYAN("Cyan", "cyan", 0xFFE0F7FA, 0xFFB2EBF2, 0xFF80DEEA, 0xFF4DD0E1, 0xFF26C6DA, 0xFF00BCD4, 0xFF00ACC1, 0xFF0097A7, 0xFF0097A7, 0xFF006064), - TEAL("Teal", "teal", 0xFFE0F2F1, 0xFFB2DFDB, 0xFF80CBC4, 0xFF4DB6AC, 0xFF26A69A, 0xFF009688, 0xFF00897B, 0xFF00796B, 0xFF00796B, 0xFF004D40), - GREEN("Green", "green", 0xFFE8F5E9, 0xFFC8E6C9, 0xFFA5D6A7, 0xFF81C784, 0xFF66BB6A, 0xFF4CAF50, 0xFF43A047, 0xFF388E3C, 0xFF388E3C, 0xFF1B5E20), - LIGHT_GREEN("Light Green", "light_green", 0xFFF1F8E9, 0xFFDCEDC8, 0xFFC5E1A5, 0xFFAED581, 0xFF9CCC65, 0xFF8BC34A, 0xFF7CB342, 0xFF689F38, 0xFF689F38, 0xFF33691E), - LIME("Lime", "lime", 0xFFF9FBE7, 0xFFF0F4C3, 0xFFE6EE9C, 0xFFDCE775, 0xFFD4E157, 0xFFCDDC39, 0xFFC0CA33, 0xFFAFB42B, 0xFFAFB42B, 0xFF827717), - YELLOW("Yellow", "yellow", 0xFFFFFDE7, 0xFFFFF9C4, 0xFFFFF59D, 0xFFFFF176, 0xFFFFEE58, 0xFFFFEB3B, 0xFFFDD835, 0xFFFBC02D, 0xFFFBC02D, 0xFFF57F17), - AMBER("Amber", "amber", 0xFFFFF8E1, 0xFFFFECB3, 0xFFFFE082, 0xFFFFD54F, 0xFFFFCA28, 0xFFFFC107, 0xFFFFB300, 0xFFFFA000, 0xFFFFA000, 0xFFFF6F00), - ORANGE("Orange", "orange", 0xFFFFF3E0, 0xFFFFE0B2, 0xFFFFCC80, 0xFFFFB74D, 0xFFFFA726, 0xFFFF9800, 0xFFFB8C00, 0xFFF57C00, 0xFFF57C00, 0xFFE65100), - DEEP_ORANGE("Deep Orange", "deep_orange", 0xFFFBE9E7, 0xFFFFCCBC, 0xFFFFAB91, 0xFFFF8A65, 0xFFFF7043, 0xFFFF5722, 0xFFF4511E, 0xFFE64A19, 0xFFE64A19, 0xFFBF360C), - BROWN("Brown", "brown", 0xFFEFEBE9, 0xFFD7CCC8, 0xFFBCAAA4, 0xFFA1887F, 0xFF8D6E63, 0xFF795548, 0xFF6D4C41, 0xFF5D4037, 0xFF5D4037, 0xFF3E2723), - GREY("Grey", "grey", 0xFFFAFAFA, 0xFFF5F5F5, 0xFFEEEEEE, 0xFFE0E0E0, 0xFFBDBDBD, 0xFF9E9E9E, 0xFF757575, 0xFF616161, 0xFF616161, 0xFF212121), - BLUE_GREY("Blue Grey", "blue_grey", 0xFFECEFF1, 0xFFCFD8DC, 0xFFB0BEC5, 0xFF90A4AE, 0xFF78909C, 0xFF607D8B, 0xFF546E7A, 0xFF455A64, 0xFF455A64, 0xFF263238), - - DARK("Dark", "dark", 0xff212121, 0xff212121, 0xff212121, 0xff212121, 0xff212121, 0xff212121, 0xff000000, 0xff000000, 0xff000000, 0xff000000), - BLACK("Black", "black", 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000); - - public final String displayName; - public final String name; - public final int color; - public final int dark; - public final int color50; - public final int color100; - public final int color200; - public final int color300; - public final int color400; - public final int color500; - public final int color600; - public final int color700; - public final int color800; - public final int color900; - - PrimaryColor(String displayName, String name, int color50, int color100, int color200, int color300, int color400, int color500, int color600, int color700, int color800, int color900) { - this.displayName = displayName; - this.name = name; - this.color = color500; - this.dark = color700; - this.color50 = color50; - this.color100 = color100; - this.color200 = color200; - this.color300 = color300; - this.color400 = color400; - this.color500 = color500; - this.color600 = color600; - this.color700 = color700; - this.color800 = color800; - this.color900 = color900; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/NavigationItem.java b/Clover/app/src/main/java/org/floens/chan/ui/toolbar/NavigationItem.java deleted file mode 100644 index 9db8743852..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/NavigationItem.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.toolbar; - -import android.view.View; - -import org.floens.chan.R; - -import static org.floens.chan.utils.AndroidUtils.getString; - -/** - * The navigation properties for a Controller. Controls common properties that parent controlers - * need to know, such as the title of the controller. - *

- * This is also used to set up the toolbar menu, see {@link #buildMenu()}. - */ -public class NavigationItem { - public String title = ""; - public String subtitle = ""; - - public boolean hasBack = true; - public boolean hasDrawer = false; - public boolean handlesToolbarInset = false; - public boolean swipeable = true; - - boolean search = false; - String searchText; - - protected ToolbarMenu menu; - protected ToolbarMiddleMenu middleMenu; - protected View rightView; - - public boolean hasArrow() { - return hasBack || search; - } - - public void setTitle(int resId) { - title = getString(resId); - } - - public MenuBuilder buildMenu() { - return new MenuBuilder(this); - } - - public void setMiddleMenu(ToolbarMiddleMenu middleMenu) { - this.middleMenu = middleMenu; - } - - public void setRightView(View view) { - rightView = view; - } - - public ToolbarMenuItem findItem(int id) { - if (menu != null) { - return menu.findItem(id); - } - return null; - } - - public ToolbarMenuSubItem findSubItem(int id) { - if (menu != null) { - return menu.findSubItem(id); - } - return null; - } - - public static class MenuBuilder { - private final NavigationItem navigationItem; - private final ToolbarMenu menu; - - public MenuBuilder(NavigationItem navigationItem) { - this.navigationItem = navigationItem; - menu = new ToolbarMenu(null); - } - - public MenuBuilder withItem(int drawable, ToolbarMenuItem.ClickCallback clicked) { - return withItem(-1, drawable, clicked); - } - - public MenuBuilder withItem(int id, int drawable, ToolbarMenuItem.ClickCallback clicked) { - return withItem(new ToolbarMenuItem(id, drawable, clicked)); - } - - public MenuBuilder withItem(ToolbarMenuItem menuItem) { - menu.addItem(menuItem); - return this; - } - - public MenuOverflowBuilder withOverflow() { - return new MenuOverflowBuilder( - this, - new ToolbarMenuItem( - ToolbarMenu.OVERFLOW_ID, - R.drawable.ic_more_vert_white_24dp, - ToolbarMenuItem::showSubmenu)); - } - - public ToolbarMenu build() { - navigationItem.menu = menu; - return menu; - } - } - - public static class MenuOverflowBuilder { - private final MenuBuilder menuBuilder; - private final ToolbarMenuItem menuItem; - - public MenuOverflowBuilder(MenuBuilder menuBuilder, ToolbarMenuItem menuItem) { - this.menuBuilder = menuBuilder; - this.menuItem = menuItem; - } - - public MenuOverflowBuilder withSubItem(int text, ToolbarMenuSubItem.ClickCallback clicked) { - return withSubItem(-1, getString(text), clicked); - } - - public MenuOverflowBuilder withSubItem(String text, ToolbarMenuSubItem.ClickCallback clicked) { - return withSubItem(-1, text, clicked); - } - - public MenuOverflowBuilder withSubItem(int id, int text, ToolbarMenuSubItem.ClickCallback clicked) { - return withSubItem(id, getString(text), clicked); - } - - public MenuOverflowBuilder withSubItem(int id, String text, ToolbarMenuSubItem.ClickCallback clicked) { - menuItem.addSubItem(new ToolbarMenuSubItem(id, text, clicked)); - - return this; - } - - public MenuBuilder build() { - return menuBuilder.withItem(menuItem); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/Toolbar.java b/Clover/app/src/main/java/org/floens/chan/ui/toolbar/Toolbar.java deleted file mode 100644 index e096d3d322..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/Toolbar.java +++ /dev/null @@ -1,362 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.toolbar; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.os.Build; -import android.support.v7.widget.RecyclerView; -import android.util.AttributeSet; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.view.animation.DecelerateInterpolator; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.LinearLayout; - -import org.floens.chan.R; -import org.floens.chan.ui.drawable.ArrowMenuDrawable; - -import java.util.ArrayList; -import java.util.List; - -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.hideKeyboard; -import static org.floens.chan.utils.AndroidUtils.setRoundItemBackground; - -public class Toolbar extends LinearLayout implements - View.OnClickListener, ToolbarPresenter.Callback, ToolbarContainer.Callback { - public static final int TOOLBAR_COLLAPSE_HIDE = 1000000; - public static final int TOOLBAR_COLLAPSE_SHOW = -1000000; - - private final RecyclerView.OnScrollListener recyclerViewOnScrollListener = new RecyclerView.OnScrollListener() { - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - processScrollCollapse(dy); - } - - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - if (recyclerView.getLayoutManager() != null && - newState == RecyclerView.SCROLL_STATE_IDLE) { - processRecyclerViewScroll(recyclerView); - } - } - }; - - private ToolbarPresenter presenter; - - private ImageView arrowMenuView; - private ArrowMenuDrawable arrowMenuDrawable; - - private ToolbarContainer navigationItemContainer; - - private ToolbarCallback callback; - private int lastScrollDeltaOffset; - private int scrollOffset; - private List collapseCallbacks = new ArrayList<>(); - - public Toolbar(Context context) { - this(context, null); - } - - public Toolbar(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public Toolbar(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - init(); - } - - @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - return isTransitioning() || super.dispatchTouchEvent(ev); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public boolean onTouchEvent(MotionEvent event) { - return true; - } - - public int getToolbarHeight() { - return getHeight() == 0 ? getLayoutParams().height : getHeight(); - } - - public void addCollapseCallback(ToolbarCollapseCallback callback) { - collapseCallbacks.add(callback); - } - - public void removeCollapseCallback(ToolbarCollapseCallback callback) { - collapseCallbacks.remove(callback); - } - - public void processScrollCollapse(int offset) { - processScrollCollapse(offset, false); - } - - public void processScrollCollapse(int offset, boolean animated) { - lastScrollDeltaOffset = offset; - setCollapse(offset, animated); - } - - public void collapseShow(boolean animated) { - setCollapse(Toolbar.TOOLBAR_COLLAPSE_SHOW, animated); - } - - public void collapseHide(boolean animated) { - setCollapse(Toolbar.TOOLBAR_COLLAPSE_HIDE, animated); - } - - public void setCollapse(int offset, boolean animated) { - scrollOffset += offset; - scrollOffset = Math.max(0, Math.min(getHeight(), scrollOffset)); - - if (animated) { - animate().translationY(-scrollOffset) - .setDuration(300) - .setInterpolator(new DecelerateInterpolator(2f)) - .start(); - - boolean collapse = scrollOffset > 0; - for (ToolbarCollapseCallback c : collapseCallbacks) { - c.onCollapseAnimation(collapse); - } - } else { - animate().cancel(); - setTranslationY(-scrollOffset); - - for (ToolbarCollapseCallback c : collapseCallbacks) { - c.onCollapseTranslation(scrollOffset / (float) getHeight()); - } - } - } - - public void attachRecyclerViewScrollStateListener(RecyclerView recyclerView) { - recyclerView.addOnScrollListener(recyclerViewOnScrollListener); - } - - public void detachRecyclerViewScrollStateListener(RecyclerView recyclerView) { - recyclerView.removeOnScrollListener(recyclerViewOnScrollListener); - } - - public void checkToolbarCollapseState(RecyclerView recyclerView) { - processRecyclerViewScroll(recyclerView); - } - - private void processRecyclerViewScroll(RecyclerView recyclerView) { - View positionZero = recyclerView.getLayoutManager().findViewByPosition(0); - boolean allowHide = positionZero == null || positionZero.getTop() < 0; - if (allowHide || lastScrollDeltaOffset <= 0) { - setCollapse(lastScrollDeltaOffset <= 0 ? TOOLBAR_COLLAPSE_SHOW : TOOLBAR_COLLAPSE_HIDE, true); - } else { - setCollapse(TOOLBAR_COLLAPSE_SHOW, true); - } - } - - public void openSearch() { - presenter.openSearch(); - } - - public boolean closeSearch() { - return presenter.closeSearch(); - } - - public boolean isTransitioning() { - return navigationItemContainer.isTransitioning(); - } - - public void setNavigationItem(final boolean animate, final boolean pushing, final NavigationItem item) { - ToolbarPresenter.AnimationStyle animationStyle; - if (!animate) { - animationStyle = ToolbarPresenter.AnimationStyle.NONE; - } else if (pushing) { - animationStyle = ToolbarPresenter.AnimationStyle.PUSH; - } else { - animationStyle = ToolbarPresenter.AnimationStyle.POP; - } - - presenter.set(item, animationStyle); - } - - public void setArrowMenuIconShown(boolean show) { - arrowMenuView.setVisibility(show ? View.VISIBLE : View.GONE); - } - - public void beginTransition(NavigationItem newItem) { - presenter.startTransition(newItem, ToolbarPresenter.TransitionAnimationStyle.POP); - } - - public void transitionProgress(float progress) { - presenter.setTransitionProgress(progress); - } - - public void finishTransition(boolean completed) { - presenter.stopTransition(completed); - } - - public void setCallback(ToolbarCallback callback) { - this.callback = callback; - } - - @Override - public void onClick(View v) { - if (v == arrowMenuView) { - callback.onMenuOrBackClicked(arrowMenuDrawable.getProgress() == 1f); - } - } - - public ArrowMenuDrawable getArrowMenuDrawable() { - return arrowMenuDrawable; - } - - public void updateTitle(NavigationItem navigationItem) { - presenter.update(navigationItem); - } - - private void init() { - setOrientation(HORIZONTAL); - - if (isInEditMode()) return; - - presenter = new ToolbarPresenter(); - presenter.create(this); - - initView(); - } - - private void initView() { - FrameLayout leftButtonContainer = new FrameLayout(getContext()); - addView(leftButtonContainer, LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); - - arrowMenuView = new ImageView(getContext()); - arrowMenuView.setOnClickListener(this); - arrowMenuView.setFocusable(true); - arrowMenuView.setScaleType(ImageView.ScaleType.CENTER); - arrowMenuDrawable = new ArrowMenuDrawable(); - arrowMenuView.setImageDrawable(arrowMenuDrawable); - - setRoundItemBackground(arrowMenuView); - - int toolbarSize = getResources().getDimensionPixelSize(R.dimen.toolbar_height); - FrameLayout.LayoutParams leftButtonContainerLp = new FrameLayout.LayoutParams( - toolbarSize, FrameLayout.LayoutParams.MATCH_PARENT, Gravity.CENTER_VERTICAL); - leftButtonContainer.addView(arrowMenuView, leftButtonContainerLp); - - navigationItemContainer = new ToolbarContainer(getContext()); - addView(navigationItemContainer, new LayoutParams(0, LayoutParams.MATCH_PARENT, 1f)); - - navigationItemContainer.setCallback(this); - navigationItemContainer.setArrowMenu(arrowMenuDrawable); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (getElevation() == 0f) { - setElevation(dp(4f)); - } - } - } - - @Override - public void showForNavigationItem( - NavigationItem item, ToolbarPresenter.AnimationStyle animation) { - navigationItemContainer.set(item, animation); - } - - @Override - public void containerStartTransition( - NavigationItem item, ToolbarPresenter.TransitionAnimationStyle animation) { - navigationItemContainer.startTransition(item, animation); - } - - @Override - public void containerStopTransition(boolean didComplete) { - navigationItemContainer.stopTransition(didComplete); - } - - @Override - public void containerSetTransitionProgress(float progress) { - navigationItemContainer.setTransitionProgress(progress); - } - - @Override - public void searchInput(String input) { - presenter.searchInput(input); - } - - @Override - public String searchHint(NavigationItem item) { - return callback.getSearchHint(item); - } - - @Override - public void onSearchVisibilityChanged(NavigationItem item, boolean visible) { - callback.onSearchVisibilityChanged(item, visible); - - if (!visible) { - hideKeyboard(navigationItemContainer); - } - } - - - @Override - public void onSearchInput(NavigationItem item, String input) { - callback.onSearchEntered(item, input); - } - - @Override - public void updateViewForItem(NavigationItem item, boolean current) { - navigationItemContainer.update(item, current); - } - - public interface ToolbarCallback { - void onMenuOrBackClicked(boolean isArrow); - - void onSearchVisibilityChanged(NavigationItem item, boolean visible); - - String getSearchHint(NavigationItem item); - - void onSearchEntered(NavigationItem item, String entered); - } - - public static class SimpleToolbarCallback implements ToolbarCallback { - @Override - public void onMenuOrBackClicked(boolean isArrow) { - } - - @Override - public void onSearchVisibilityChanged(NavigationItem item, boolean visible) { - } - - @Override - public String getSearchHint(NavigationItem item) { - return null; - } - - @Override - public void onSearchEntered(NavigationItem item, String entered) { - } - } - - public interface ToolbarCollapseCallback { - void onCollapseTranslation(float offset); - - void onCollapseAnimation(boolean collapse); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarContainer.java b/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarContainer.java deleted file mode 100644 index 3829f0c35a..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarContainer.java +++ /dev/null @@ -1,549 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.toolbar; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; -import android.animation.ValueAnimator; -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.text.Editable; -import android.text.TextWatcher; -import android.util.AttributeSet; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.animation.DecelerateInterpolator; -import android.view.animation.LinearInterpolator; -import android.widget.FrameLayout; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.ui.drawable.ArrowMenuDrawable; -import org.floens.chan.ui.drawable.DropdownArrowDrawable; -import org.floens.chan.ui.layout.SearchLayout; -import org.floens.chan.utils.AndroidUtils; - -import java.util.HashMap; -import java.util.Map; - -import static android.text.TextUtils.isEmpty; -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; -import static org.floens.chan.utils.AndroidUtils.removeFromParentView; - -/** - * The container for the views created by the toolbar for the navigation items. - *

- * It will strictly only transition between two views. If a new view is set - * and a transition is in progress, it is stopped before adding the new view. - *

- * For normal animations the previousView is the view that is animated away from, and the - * currentView is the view where is animated to. The previousView is removed and cleared if the - * animation finished. - *

- * Transitions are user-controlled animations that can be cancelled of finished. For that the - * currentView describes the view that was originally there, and the transitionView is the view - * what is possibly transitioned to. - *

- * This is also the class that is responsible for the orientation and animation of the arrow-menu - * drawable. - */ -public class ToolbarContainer extends FrameLayout { - private Callback callback; - - private ArrowMenuDrawable arrowMenu; - - @Nullable - private ItemView previousView; - - @Nullable - private ItemView currentView; - - @Nullable - private ItemView transitionView; - - @Nullable - private ToolbarPresenter.TransitionAnimationStyle transitionAnimationStyle; - - private Map animatorSet = new HashMap<>(); - - public ToolbarContainer(Context context) { - this(context, null); - } - - public ToolbarContainer(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public ToolbarContainer(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public void setCallback(Callback callback) { - this.callback = callback; - } - - public void setArrowMenu(ArrowMenuDrawable arrowMenu) { - this.arrowMenu = arrowMenu; - } - - public void set(NavigationItem item, ToolbarPresenter.AnimationStyle animation) { - if (transitionView != null) { - throw new IllegalStateException("Currently in transition mode"); - } - - endAnimations(); - - ItemView itemView = new ItemView(item); - - previousView = currentView; - currentView = itemView; - - addView(itemView.view, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); - - if (getChildCount() > 2) { - throw new IllegalArgumentException("More than 2 child views attached"); - } - - // Can't run the animation if there is no previous view - // Otherwise just show it without an animation. - if (animation != ToolbarPresenter.AnimationStyle.NONE && previousView != null) { - setAnimation(itemView, previousView, animation); - } else { - if (previousView != null) { - removeItem(previousView); - previousView = null; - } - } - - if (animation == ToolbarPresenter.AnimationStyle.NONE) { - setArrowProgress(1f, !currentView.item.hasArrow()); - } - - itemView.attach(); - } - - public void update(NavigationItem item, boolean current) { - // TODO - View view = viewForItem(item); - if (view != null) { - TextView titleView = view.findViewById(R.id.title); - if (titleView != null) { - titleView.setText(item.title); - } - - if (!isEmpty(item.subtitle)) { - TextView subtitleView = view.findViewById(R.id.subtitle); - if (subtitleView != null) { - subtitleView.setText(item.subtitle); - } - } - } - } - - public View viewForItem(NavigationItem item) { - ItemView itemView = itemViewForItem(item); - if (itemView == null) { - return null; - } - return itemView.view; - } - - private ItemView itemViewForItem(NavigationItem item) { - if (currentView != null && item == currentView.item) { - return currentView; - } else if (previousView != null && item == previousView.item) { - return previousView; - } else if (transitionView != null && item == transitionView.item) { - return transitionView; - } else { - return null; - } - } - - public boolean isTransitioning() { - return transitionView != null || previousView != null; - } - - public void startTransition( - NavigationItem item, ToolbarPresenter.TransitionAnimationStyle style) { - if (transitionView != null) { - throw new IllegalStateException("Already in transition mode"); - } - - endAnimations(); - - ItemView itemView = new ItemView(item); - - transitionView = itemView; - transitionAnimationStyle = style; - addView(itemView.view, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); - - if (getChildCount() > 2) { - throw new IllegalArgumentException("More than 2 child views attached"); - } - - itemView.attach(); - } - - public void stopTransition(boolean didComplete) { - if (transitionView == null) { - throw new IllegalStateException("Not in transition mode"); - } - - if (didComplete) { - removeItem(currentView); - currentView = transitionView; - transitionView = null; - } else { - removeItem(transitionView); - transitionView = null; - } - - if (getChildCount() != 1) { - throw new IllegalStateException("Not 1 view attached"); - } - } - - public void setTransitionProgress(float progress) { - if (transitionView == null) { - throw new IllegalStateException("Not in transition mode"); - } - - transitionProgressAnimation(progress, transitionAnimationStyle); - } - - private void endAnimations() { - if (previousView != null) { - endAnimation(previousView.view); - if (previousView != null) { - throw new IllegalStateException("Animation end did not remove view"); - } - } - - if (currentView != null) { - endAnimation(currentView.view); - } - } - - private void endAnimation(View view) { - Animator a = animatorSet.remove(view); - if (a != null) { - a.end(); - } - } - - private void setAnimation(ItemView view, ItemView previousView, - ToolbarPresenter.AnimationStyle animationStyle) { - if (animationStyle == ToolbarPresenter.AnimationStyle.PUSH || - animationStyle == ToolbarPresenter.AnimationStyle.POP) { - final boolean pushing = animationStyle == ToolbarPresenter.AnimationStyle.PUSH; - - // Previous animation - ValueAnimator previousAnimation = getShortAnimator(); - previousAnimation.addUpdateListener(a -> { - float value = (float) a.getAnimatedValue(); - setPreviousAnimationProgress(previousView.view, pushing, value); - }); - previousAnimation.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - animatorSet.remove(previousView.view); - removeItem(previousView); - ToolbarContainer.this.previousView = null; - } - }); - if (!pushing) previousAnimation.setStartDelay(100); - animatorSet.put(previousView.view, previousAnimation); - - post(previousAnimation::start); - - // Current animation + arrow - view.view.setAlpha(0f); - ValueAnimator animation = getShortAnimator(); - animation.addUpdateListener(a -> { - float value = (float) a.getAnimatedValue(); - setAnimationProgress(view.view, pushing, value); - - if (previousView.item.hasArrow() != currentView.item.hasArrow()) { - setArrowProgress(value, !currentView.item.hasArrow()); - } - }); - animation.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - animatorSet.remove(view.view); - } - }); - if (!pushing) animation.setStartDelay(100); - animatorSet.put(view.view, animation); - - post(animation::start); - } else if (animationStyle == ToolbarPresenter.AnimationStyle.FADE) { - // Previous animation - ValueAnimator previousAnimation = - ObjectAnimator.ofFloat(previousView.view, View.ALPHA, 1f, 0f); - previousAnimation.setDuration(300); - previousAnimation.setInterpolator(new LinearInterpolator()); - previousAnimation.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - animatorSet.remove(previousView.view); - removeItem(previousView); - ToolbarContainer.this.previousView = null; - } - }); - animatorSet.put(previousView.view, previousAnimation); - - post(previousAnimation::start); - - // Current animation + arrow - view.view.setAlpha(0f); - ValueAnimator animation = ObjectAnimator.ofFloat(view.view, View.ALPHA, 0f, 1f); - animation.setDuration(300); - animation.setInterpolator(new LinearInterpolator()); - animation.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - animatorSet.remove(view.view); - } - }); - // A different animator for the arrow because that one needs the deceleration - // interpolator. - ValueAnimator arrow = ValueAnimator.ofFloat(0f, 1f); - arrow.setDuration(300); - arrow.setInterpolator(new DecelerateInterpolator(2f)); - arrow.addUpdateListener(a -> { - float value = (float) a.getAnimatedValue(); - if (previousView.item.hasArrow() != currentView.item.hasArrow()) { - setArrowProgress(value, !currentView.item.hasArrow()); - } - }); - - AnimatorSet animationAndArrow = new AnimatorSet(); - animationAndArrow.playTogether(animation, arrow); - animationAndArrow.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - animatorSet.remove(view.view); - } - }); - - animatorSet.put(view.view, animationAndArrow); - - post(animationAndArrow::start); - } - } - - private void setPreviousAnimationProgress(View view, boolean pushing, float progress) { - final int offset = dp(16); - view.setTranslationY((pushing ? -offset : offset) * progress); - view.setAlpha(1f - progress); - } - - private void setAnimationProgress(View view, boolean pushing, float progress) { - final int offset = dp(16); - view.setTranslationY((pushing ? offset : -offset) * (1f - progress)); - view.setAlpha(progress); - } - - private void setArrowProgress(float progress, boolean reverse) { - if (reverse) { - progress = 1f - progress; - } - progress = Math.max(0f, Math.min(1f, progress)); - - arrowMenu.setProgress(progress); - } - - private void transitionProgressAnimation( - float progress, ToolbarPresenter.TransitionAnimationStyle style) { - progress = Math.max(0f, Math.min(1f, progress)); - - final int offset = dp(16); - - boolean pushing = style == ToolbarPresenter.TransitionAnimationStyle.PUSH; - - transitionView.view.setTranslationY((pushing ? offset : -offset) * (1f - progress)); - transitionView.view.setAlpha(progress); - - currentView.view.setTranslationY((pushing ? -offset : offset) * progress); - currentView.view.setAlpha(1f - progress); - - if (transitionView.item.hasArrow() != currentView.item.hasArrow()) { - setArrowProgress(progress, !transitionView.item.hasArrow()); - } - } - - private ValueAnimator getShortAnimator() { - final ValueAnimator animator = ObjectAnimator.ofFloat(0f, 1f); - animator.setDuration(300); - animator.setInterpolator(new DecelerateInterpolator(2f)); - return animator; - } - - private void removeItem(ItemView item) { - item.remove(); - removeView(item.view); - } - - private class ItemView { - final View view; - final NavigationItem item; - - @Nullable - private ToolbarMenuView menuView; - - public ItemView(NavigationItem item) { - this.view = createNavigationItemView(item); - this.item = item; - } - - public void attach() { - if (item.menu != null) { - menuView.attach(item.menu); - } - } - - public void remove() { - if (menuView != null) { - menuView.detach(); - } - } - - private LinearLayout createNavigationItemView(final NavigationItem item) { - if (item.search) { - return createSearchLayout(item); - } else { - return createNavigationLayout(item); - } - } - - @NonNull - private LinearLayout createNavigationLayout(NavigationItem item) { - @SuppressLint("InflateParams") - LinearLayout menu = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.toolbar_menu, null); - menu.setGravity(Gravity.CENTER_VERTICAL); - - FrameLayout titleContainer = menu.findViewById(R.id.title_container); - - // Title - final TextView titleView = menu.findViewById(R.id.title); - titleView.setTypeface(AndroidUtils.ROBOTO_MEDIUM); - titleView.setText(item.title); - titleView.setTextColor(0xffffffff); - - // Middle title with arrow and callback - if (item.middleMenu != null) { - int arrowColor = getAttrColor(getContext(), R.attr.dropdown_light_color); - int arrowPressedColor = getAttrColor( - getContext(), R.attr.dropdown_light_pressed_color); - final Drawable arrowDrawable = new DropdownArrowDrawable( - dp(12), dp(12), true, arrowColor, arrowPressedColor); - titleView.setCompoundDrawablesWithIntrinsicBounds( - null, null, arrowDrawable, null); - titleView.setOnClickListener(v -> item.middleMenu.show(titleView)); - - // Hide the dropdown arrow if there is no text. - titleView.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - } - - @Override - public void afterTextChanged(Editable s) { - arrowDrawable.setAlpha(isEmpty(s) ? 0 : 255); - } - }); - arrowDrawable.setAlpha(isEmpty(item.title) ? 0 : 255); - } - - // Possible subtitle. - TextView subtitleView = menu.findViewById(R.id.subtitle); - if (!isEmpty(item.subtitle)) { - ViewGroup.LayoutParams titleParams = titleView.getLayoutParams(); - titleParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; - titleView.setLayoutParams(titleParams); - subtitleView.setText(item.subtitle); - subtitleView.setTextColor(0xffffffff); - titleView.setPadding(titleView.getPaddingLeft(), dp(5f), - titleView.getPaddingRight(), titleView.getPaddingBottom()); - } else { - titleContainer.removeView(subtitleView); - } - - // Possible view shown at the right side. - if (item.rightView != null) { - removeFromParentView(item.rightView); - item.rightView.setPadding(0, 0, dp(16), 0); - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.WRAP_CONTENT, - LinearLayout.LayoutParams.MATCH_PARENT); - menu.addView(item.rightView, lp); - } - - // Possible menu with items. - if (item.menu != null) { - menuView = new ToolbarMenuView(getContext()); - - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.WRAP_CONTENT, - LinearLayout.LayoutParams.MATCH_PARENT); - menu.addView(this.menuView, lp); - } - - return menu; - } - - @NonNull - private LinearLayout createSearchLayout(NavigationItem item) { - SearchLayout searchLayout = new SearchLayout(getContext()); - - searchLayout.setCallback(input -> { - callback.searchInput(input); - }); - - if (item.searchText != null) { - searchLayout.setText(item.searchText); - } - - searchLayout.setHint(callback.searchHint(item)); - searchLayout.setPadding(dp(16), searchLayout.getPaddingTop(), searchLayout.getPaddingRight(), searchLayout.getPaddingBottom()); - - return searchLayout; - } - } - - public interface Callback { - void searchInput(String input); - - String searchHint(NavigationItem item); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuItem.java b/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuItem.java deleted file mode 100644 index 1159b12a9c..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuItem.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.toolbar; - -import android.graphics.drawable.Drawable; -import android.graphics.drawable.TransitionDrawable; -import android.view.View; -import android.widget.ImageView; - -import org.floens.chan.ui.view.FloatingMenu; -import org.floens.chan.ui.view.FloatingMenuItem; -import org.floens.chan.utils.Logger; - -import java.util.ArrayList; -import java.util.List; - -import static org.floens.chan.utils.AndroidUtils.getRes; -import static org.floens.chan.utils.AndroidUtils.removeFromParentView; - -/** - * An item for the Toolbar menu. These are ImageViews with an icon, that wehen pressed call - * some callback. Add them with the NavigationItem MenuBuilder. - */ -public class ToolbarMenuItem { - private static final String TAG = "ToolbarMenuItem"; - - public Object id; - public int order; - - public boolean overflowStyle = false; - - public boolean visible = true; - - public Drawable drawable; - - public final List subItems = new ArrayList<>(); - - private ClickCallback clicked; - - // Views, only non-null if attached to ToolbarMenuView. - private ImageView view; - - public ToolbarMenuItem(int id, int drawable, ClickCallback clicked) { - this.id = id; - this.drawable = getRes().getDrawable(drawable); - this.clicked = clicked; - } - - public void attach(ImageView view) { - if (this.view != null) { - throw new IllegalStateException("Already attached"); - } - - this.view = view; - } - - public void detach() { - if (this.view == null) { - throw new IllegalStateException("Not attached"); - } - - removeFromParentView(this.view); - this.view = null; - } - - public ImageView getView() { - return view; - } - - public void addSubItem(ToolbarMenuSubItem subItem) { - subItems.add(subItem); - } - - public void setVisible(boolean visible) { - this.visible = visible; - - if (view != null) { - view.setVisibility(visible ? View.VISIBLE : View.GONE); - } - } - - public void setImage(int drawable) { - setImage(getRes().getDrawable(drawable)); - } - - public void setImage(Drawable drawable) { - setImage(drawable, false); - } - - public void setImage(Drawable drawable, boolean animated) { - if (view == null) { - this.drawable = drawable; - return; - } - - if (!animated) { - view.setImageDrawable(drawable); - } else { - TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[]{ - this.drawable.mutate(), drawable.mutate() - }); - - view.setImageDrawable(transitionDrawable); - - transitionDrawable.setCrossFadeEnabled(true); - transitionDrawable.startTransition(100); - } - - this.drawable = drawable; - } - - public void setSubMenu(FloatingMenu subMenu) { - } - - public void showSubmenu() { - if (view == null) { - Logger.w(TAG, "Item not attached, can't show submenu"); - return; - } - - List floatingMenuItems = new ArrayList<>(); - List subItems = new ArrayList<>(this.subItems); - for (ToolbarMenuSubItem subItem : subItems) { - floatingMenuItems.add(new FloatingMenuItem(subItem.id, subItem.text, subItem.enabled)); - } - - FloatingMenu overflowMenu = new FloatingMenu(view.getContext(), view, floatingMenuItems); - overflowMenu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - ToolbarMenuSubItem subItem = subItems.get(floatingMenuItems.indexOf(item)); - subItem.performClick(); - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - }); - overflowMenu.show(); - } - - public Object getId() { - return id; - } - - public int getOrder() { - return order; - } - - public void performClick() { - if (clicked != null) { - clicked.clicked(this); - } - } - - public interface ClickCallback { - void clicked(ToolbarMenuItem item); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuSubItem.java b/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuSubItem.java deleted file mode 100644 index fe74c3994f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuSubItem.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.toolbar; - -import static org.floens.chan.utils.AndroidUtils.getString; - -/** - * An item for a submenu of a ToolbarMenuItem. Most common as subitem for the overflow button. - * Add with NavigationItem MenuBuilder. - */ -public class ToolbarMenuSubItem { - public int id; - public String text; - public boolean enabled = true; - public ClickCallback clicked; - - public ToolbarMenuSubItem(int id, int text, ClickCallback clicked) { - this(id, getString(text), clicked); - } - - public ToolbarMenuSubItem(int id, int text, boolean enabled) { - this(id, getString(text), enabled, null); - } - - public ToolbarMenuSubItem(int id, String text, ClickCallback clicked) { - this(id, text, true, clicked); - } - - public ToolbarMenuSubItem(String text, ClickCallback clicked) { - this(-1, text, true, clicked); - } - - public ToolbarMenuSubItem(int id, String text, boolean enabled, ClickCallback clicked) { - this.id = id; - this.text = text; - this.enabled = enabled; - this.clicked = clicked; - } - - public void performClick() { - if (clicked != null) { - clicked.clicked(this); - } - } - - public interface ClickCallback { - void clicked(ToolbarMenuSubItem subItem); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuView.java b/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuView.java deleted file mode 100644 index f99cadb317..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuView.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.toolbar; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.Gravity; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; - -import java.util.Collections; - -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.setRoundItemBackground; - -/** - * The container view for the list of ToolbarMenuItems, a list of ImageViews. - */ -public class ToolbarMenuView extends LinearLayout { - private ToolbarMenu menu; - - public ToolbarMenuView(Context context) { - this(context, null); - } - - public ToolbarMenuView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public ToolbarMenuView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - setOrientation(HORIZONTAL); - setGravity(Gravity.CENTER_VERTICAL); - } - - public void attach(ToolbarMenu menu) { - this.menu = menu; - - setupMenuViews(); - } - - public void detach() { - for (ToolbarMenuItem item : menu.items) { - item.detach(); - } - } - - private void setupMenuViews() { - removeAllViews(); - - Collections.sort(menu.items, (a, b) -> a.order - b.order); - - for (ToolbarMenuItem item : menu.items) { - ImageView imageView = new ImageView(getContext()); - - imageView.setOnClickListener((v) -> { - handleClick(item); - }); - imageView.setFocusable(true); - imageView.setScaleType(ImageView.ScaleType.CENTER); - - imageView.setVisibility(item.visible ? View.VISIBLE : View.GONE); - - if (item.overflowStyle) { - imageView.setLayoutParams(new LayoutParams(dp(44), dp(56))); - imageView.setPadding(dp(8), 0, dp(16), 0); - } else { - imageView.setLayoutParams(new LinearLayout.LayoutParams(dp(50), dp(56))); - } - - imageView.setImageDrawable(item.drawable); - setRoundItemBackground(imageView); - - addView(imageView); - - item.attach(imageView); - } - } - - private void handleClick(ToolbarMenuItem item) { - item.performClick(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarPresenter.java b/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarPresenter.java deleted file mode 100644 index 1c20496cdd..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarPresenter.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.toolbar; - -public class ToolbarPresenter { - public enum AnimationStyle { - NONE, - PUSH, - POP, - FADE - } - - public enum TransitionAnimationStyle { - PUSH, - POP - } - - private Callback callback; - - private NavigationItem item; - private NavigationItem search; - private NavigationItem transition; - - void create(Callback callback) { - this.callback = callback; - } - - void set(NavigationItem newItem, AnimationStyle animation) { - cancelTransitionIfNeeded(); - if (closeSearchIfNeeded()) { - animation = AnimationStyle.FADE; - } - - item = newItem; - - callback.showForNavigationItem(item, animation); - } - - void update(NavigationItem updatedItem) { - callback.updateViewForItem(updatedItem, updatedItem == item); - } - - void startTransition(NavigationItem newItem, TransitionAnimationStyle animation) { - cancelTransitionIfNeeded(); - if (closeSearchIfNeeded()) { - callback.showForNavigationItem(item, AnimationStyle.NONE); - } - - transition = newItem; - - callback.containerStartTransition(transition, animation); - } - - void stopTransition(boolean didComplete) { - if (transition == null) { - return; - } - - callback.containerStopTransition(didComplete); - - if (didComplete) { - item = transition; - callback.showForNavigationItem(item, AnimationStyle.NONE); - } - transition = null; - } - - void setTransitionProgress(float progress) { - if (transition == null) { - return; - } - - callback.containerSetTransitionProgress(progress); - } - - void openSearch() { - if (search != null) { - return; - } - - cancelTransitionIfNeeded(); - - search = new NavigationItem(); - search.search = true; - callback.showForNavigationItem(search, AnimationStyle.FADE); - - callback.onSearchVisibilityChanged(item, true); - } - - boolean closeSearch() { - if (search == null) { - return false; - } - - search = null; - set(item, AnimationStyle.FADE); - - callback.onSearchVisibilityChanged(item, false); - - return true; - } - - private void cancelTransitionIfNeeded() { - if (transition != null) { - callback.containerStopTransition(false); - transition = null; - } - } - - private boolean closeSearchIfNeeded() { - // Cancel search - if (search != null) { - search = null; - callback.onSearchVisibilityChanged(item, false); - return true; - } - return false; - } - - void searchInput(String input) { - if (search == null) { - return; - } - - search.searchText = input; - callback.onSearchInput(item, search.searchText); - } - - interface Callback { - void showForNavigationItem(NavigationItem item, AnimationStyle animation); - - void containerStartTransition(NavigationItem item, TransitionAnimationStyle animation); - - void containerStopTransition(boolean didComplete); - - void containerSetTransitionProgress(float progress); - - void onSearchVisibilityChanged(NavigationItem item, boolean visible); - - void onSearchInput(NavigationItem item, String input); - - void updateViewForItem(NavigationItem item, boolean current); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/CrossfadeView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/CrossfadeView.java deleted file mode 100644 index 72d03af560..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/CrossfadeView.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.content.Context; -import android.util.AttributeSet; -import android.view.View; -import android.widget.FrameLayout; - -public class CrossfadeView extends FrameLayout { - private int fadeDuration = 200; - - private View viewOne; - private View viewTwo; - private boolean inited = false; - private boolean viewOneSelected = true; - - public CrossfadeView(Context context) { - super(context); - } - - public CrossfadeView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public CrossfadeView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - viewOne = getChildAt(0); - viewTwo = getChildAt(1); - } - - public void toggle(boolean viewOneSelected, boolean animated) { - if (!inited || this.viewOneSelected != viewOneSelected) { - this.viewOneSelected = viewOneSelected; - doToggle(animated); - } - } - - public void toggle(boolean animated) { - viewOneSelected = !viewOneSelected; - doToggle(animated); - } - - private void doToggle(boolean animated) { - inited = true; - if (animated) { - if (viewOneSelected) { - viewOne.setVisibility(View.VISIBLE); - viewOne.animate().alpha(1f).setDuration(fadeDuration).setListener(null); - viewTwo.animate().alpha(0f).setDuration(fadeDuration).setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - viewOne.setVisibility(View.VISIBLE); - viewTwo.setVisibility(View.GONE); - } - }); - } else { - viewTwo.setVisibility(View.VISIBLE); - viewTwo.animate().alpha(1f).setDuration(fadeDuration).setListener(null); - viewOne.animate().alpha(0f).setDuration(fadeDuration).setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - viewOne.setVisibility(View.GONE); - viewTwo.setVisibility(View.VISIBLE); - } - }); - } - } else { - if (viewOneSelected) { - viewOne.setVisibility(View.VISIBLE); - viewOne.setAlpha(1f); - viewTwo.setVisibility(View.GONE); - viewTwo.setAlpha(0f); - } else { - viewOne.setVisibility(View.GONE); - viewOne.setAlpha(0f); - viewTwo.setVisibility(View.VISIBLE); - viewTwo.setAlpha(1f); - } - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/CustomScaleImageView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/CustomScaleImageView.java deleted file mode 100644 index e3f329e19c..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/CustomScaleImageView.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.content.Context; -import android.util.AttributeSet; - -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; - -import org.floens.chan.utils.Logger; - -public class CustomScaleImageView extends SubsamplingScaleImageView { - private static final String TAG = "CustomScaleImageView"; - - private Callback callback; - - public CustomScaleImageView(Context context, AttributeSet attr) { - super(context, attr); - init(); - } - - public CustomScaleImageView(Context context) { - super(context); - init(); - } - - public void setCallback(Callback callback) { - this.callback = callback; - } - - private void init() { - setOnImageEventListener(new OnImageEventListener() { - @Override - public void onReady() { - float scale = Math.min(getWidth() / (float) getSWidth(), getHeight() / (float) getSHeight()); - setMinScale(scale); - - if (getMaxScale() < scale * 2f) { - setMaxScale(scale * 2f); - } - setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CUSTOM); - - if (callback != null) { - callback.onReady(); - } - } - - @Override - public void onImageLoaded() { - } - - @Override - public void onPreviewLoadError(Exception e) { - } - - @Override - public void onPreviewReleased() { - } - - @Override - public void onImageLoadError(Exception e) { - Logger.w(TAG, "onImageLoadError", e); - if (callback != null) { - callback.onError(true); - } - } - - @Override - public void onTileLoadError(Exception e) { - Logger.w(TAG, "onTileLoadError", e); - if (callback != null) { - callback.onError(false); - } - } - }); - } - - public interface Callback { - void onReady(); - - void onError(boolean wasInitial); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/DividerItemDecoration.java b/Clover/app/src/main/java/org/floens/chan/ui/view/DividerItemDecoration.java deleted file mode 100644 index acce08a00a..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/DividerItemDecoration.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.floens.chan.ui.view; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.util.Log; -import android.view.View; -import android.widget.LinearLayout; - -/** - * DividerItemDecoration is a {@link RecyclerView.ItemDecoration} that can be used as a divider - * between items of a {@link LinearLayoutManager}. It supports both {@link #HORIZONTAL} and - * {@link #VERTICAL} orientations. - * - *

- *     mDividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
- *             mLayoutManager.getOrientation());
- *     recyclerView.addItemDecoration(mDividerItemDecoration);
- * 
- */ -public class DividerItemDecoration extends RecyclerView.ItemDecoration { - public static final int HORIZONTAL = LinearLayout.HORIZONTAL; - public static final int VERTICAL = LinearLayout.VERTICAL; - - private static final String TAG = "DividerItem"; - private static final int[] ATTRS = new int[]{ android.R.attr.listDivider }; - - private Drawable mDivider; - - /** - * Current orientation. Either {@link #HORIZONTAL} or {@link #VERTICAL}. - */ - private int mOrientation; - - private final Rect mBounds = new Rect(); - - /** - * Creates a divider {@link RecyclerView.ItemDecoration} that can be used with a - * {@link LinearLayoutManager}. - * - * @param context Current context, it will be used to access resources. - * @param orientation Divider orientation. Should be {@link #HORIZONTAL} or {@link #VERTICAL}. - */ - public DividerItemDecoration(Context context, int orientation) { - final TypedArray a = context.obtainStyledAttributes(ATTRS); - mDivider = a.getDrawable(0); - if (mDivider == null) { - Log.w(TAG, "@android:attr/listDivider was not set in the theme used for this " - + "DividerItemDecoration. Please set that attribute all call setDrawable()"); - } - a.recycle(); - setOrientation(orientation); - } - - /** - * Sets the orientation for this divider. This should be called if - * {@link RecyclerView.LayoutManager} changes orientation. - * - * @param orientation {@link #HORIZONTAL} or {@link #VERTICAL} - */ - public void setOrientation(int orientation) { - if (orientation != HORIZONTAL && orientation != VERTICAL) { - throw new IllegalArgumentException( - "Invalid orientation. It should be either HORIZONTAL or VERTICAL"); - } - mOrientation = orientation; - } - - /** - * Sets the {@link Drawable} for this divider. - * - * @param drawable Drawable that should be used as a divider. - */ - public void setDrawable(@NonNull Drawable drawable) { - if (drawable == null) { - throw new IllegalArgumentException("Drawable cannot be null."); - } - mDivider = drawable; - } - - @Override - public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { - if (parent.getLayoutManager() == null || mDivider == null) { - return; - } - if (mOrientation == VERTICAL) { - drawVertical(c, parent); - } else { - drawHorizontal(c, parent); - } - } - - private void drawVertical(Canvas canvas, RecyclerView parent) { - canvas.save(); - final int left; - final int right; - //noinspection AndroidLintNewApi - NewApi lint fails to handle overrides. - // Clover changed: still apply insets even when it's not set to clipPadding, plus don't - // clip the top and bottom. - left = parent.getPaddingLeft(); - right = parent.getWidth() - parent.getPaddingRight(); - canvas.clipRect(left, 0, right, parent.getHeight()); - - final int childCount = parent.getChildCount(); - for (int i = 0; i < childCount; i++) { - final View child = parent.getChildAt(i); - parent.getDecoratedBoundsWithMargins(child, mBounds); - final int bottom = mBounds.bottom + Math.round(child.getTranslationY()); - final int top = bottom - mDivider.getIntrinsicHeight(); - mDivider.setBounds(left, top, right, bottom); - mDivider.draw(canvas); - } - canvas.restore(); - } - - private void drawHorizontal(Canvas canvas, RecyclerView parent) { - canvas.save(); - final int top; - final int bottom; - //noinspection AndroidLintNewApi - NewApi lint fails to handle overrides. - if (parent.getClipToPadding()) { - top = parent.getPaddingTop(); - bottom = parent.getHeight() - parent.getPaddingBottom(); - canvas.clipRect(parent.getPaddingLeft(), top, - parent.getWidth() - parent.getPaddingRight(), bottom); - } else { - top = 0; - bottom = parent.getHeight(); - } - - final int childCount = parent.getChildCount(); - for (int i = 0; i < childCount; i++) { - final View child = parent.getChildAt(i); - parent.getLayoutManager().getDecoratedBoundsWithMargins(child, mBounds); - final int right = mBounds.right + Math.round(child.getTranslationX()); - final int left = right - mDivider.getIntrinsicWidth(); - mDivider.setBounds(left, top, right, bottom); - mDivider.draw(canvas); - } - canvas.restore(); - } - - @Override - public void getItemOffsets(Rect outRect, View view, RecyclerView parent, - RecyclerView.State state) { - if (mDivider == null) { - outRect.set(0, 0, 0, 0); - return; - } - if (mOrientation == VERTICAL) { - outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); - } else { - outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/FastScrollerHelper.java b/Clover/app/src/main/java/org/floens/chan/ui/view/FastScrollerHelper.java deleted file mode 100644 index ca25092798..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/FastScrollerHelper.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.floens.chan.ui.view; - -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.StateListDrawable; -import android.support.v7.widget.RecyclerView; - -import static org.floens.chan.ui.theme.ThemeHelper.theme; -import static org.floens.chan.utils.AndroidUtils.dp; - -/** - * Helper for attaching a FastScroller with the correct theme colors and default values that - * make it look like a normal scrollbar. - */ -public class FastScrollerHelper { - public static FastScroller create(RecyclerView recyclerView) { - StateListDrawable thumb = getThumb(); - StateListDrawable track = getTrack(); - - final int defaultThickness = dp(4); - final int targetWidth = dp(8); - final int minimumRange = dp(50); - final int margin = dp(0); - final int thumbMinLength = dp(23); - - return new FastScroller(recyclerView, - thumb, track, thumb, track, - defaultThickness, minimumRange, margin, thumbMinLength, targetWidth); - } - - private static StateListDrawable getThumb() { - StateListDrawable list = new StateListDrawable(); - list.addState(new int[]{android.R.attr.state_pressed}, - new ColorDrawable(theme().accentColor.color)); - list.addState(new int[]{}, new ColorDrawable(theme().textSecondary)); - return list; - } - - private static StateListDrawable getTrack() { - StateListDrawable list = new StateListDrawable(); - list.addState(new int[]{android.R.attr.state_pressed}, - new ColorDrawable(theme().textHint)); - list.addState(new int[]{}, new ColorDrawable(0)); - return list; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/FixedRatioThumbnailView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/FixedRatioThumbnailView.java deleted file mode 100644 index 6e4021908c..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/FixedRatioThumbnailView.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.content.Context; -import android.util.AttributeSet; - -public class FixedRatioThumbnailView extends ThumbnailView { - private float ratio; - - public FixedRatioThumbnailView(Context context) { - super(context); - } - - public FixedRatioThumbnailView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public FixedRatioThumbnailView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public void setRatio(float ratio) { - this.ratio = ratio; - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int heightMode = MeasureSpec.getMode(heightMeasureSpec); - if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY && (heightMode == MeasureSpec.UNSPECIFIED || heightMode == MeasureSpec.AT_MOST)) { - int width = MeasureSpec.getSize(widthMeasureSpec); - - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec((int) (width / ratio), MeasureSpec.EXACTLY)); - } else { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/FloatingMenu.java b/Clover/app/src/main/java/org/floens/chan/ui/view/FloatingMenu.java deleted file mode 100644 index 18e4181d0f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/FloatingMenu.java +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.content.Context; -import android.support.v7.widget.ListPopupWindow; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewTreeObserver; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.ListAdapter; -import android.widget.TextView; - -import org.floens.chan.R; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.Logger; - -import java.util.List; - -import static org.floens.chan.utils.AndroidUtils.dp; -import static org.floens.chan.utils.AndroidUtils.getAttrColor; - -public class FloatingMenu { - public static final int POPUP_WIDTH_AUTO = -1; - public static final int POPUP_WIDTH_ANCHOR = -2; - - private final Context context; - private View anchor; - private int anchorGravity = Gravity.LEFT; - private int anchorOffsetX; - private int anchorOffsetY; - private int popupWidth = POPUP_WIDTH_AUTO; - private int popupHeight = -1; - private boolean manageItems = true; - private List items; - private FloatingMenuItem selectedItem; - private int selectedPosition; - private ListAdapter adapter; - private AdapterView.OnItemClickListener itemClickListener; - private ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener; - - private ListPopupWindow popupWindow; - private FloatingMenuCallback callback; - - public FloatingMenu(Context context, View anchor, List items) { - this.context = context; - this.anchor = anchor; - anchorOffsetX = -dp(5); - anchorOffsetY = dp(5); - anchorGravity = Gravity.RIGHT; - this.items = items; - } - - public FloatingMenu(Context context) { - this.context = context; - } - - public void setAnchor(View anchor, int anchorGravity, int anchorOffsetX, int anchorOffsetY) { - this.anchor = anchor; - this.anchorGravity = anchorGravity; - this.anchorOffsetX = anchorOffsetX; - this.anchorOffsetY = anchorOffsetY; - } - - public void setPopupWidth(int width) { - this.popupWidth = width; - if (popupWindow != null) { - popupWindow.setContentWidth(popupWidth); - } - } - - public void setPopupHeight(int height) { - this.popupHeight = height; - if (popupWindow != null) { - popupWindow.setHeight(height); - } - } - - public void setItems(List items) { - if (!manageItems) throw new IllegalArgumentException(); - this.items = items; - } - - public void setSelectedItem(FloatingMenuItem item) { - if (!manageItems) throw new IllegalArgumentException(); - this.selectedItem = item; - } - - public void setSelectedPosition(int selectedPosition) { - if (manageItems) throw new IllegalArgumentException(); - this.selectedPosition = selectedPosition; - } - - public void setAdapter(ListAdapter adapter) { - this.adapter = adapter; - if (popupWindow != null) { - popupWindow.setAdapter(adapter); - } - } - - public void setCallback(FloatingMenuCallback callback) { - this.callback = callback; - } - - public void setManageItems(boolean manageItems) { - this.manageItems = manageItems; - } - - public void setOnItemClickListener(AdapterView.OnItemClickListener listener) { - this.itemClickListener = listener; - if (popupWindow != null) { - popupWindow.setOnItemClickListener(listener); - } - } - - public void show() { - popupWindow = new ListPopupWindow(context); - popupWindow.setAnchorView(anchor); - popupWindow.setModal(true); - popupWindow.setDropDownGravity(anchorGravity); - popupWindow.setVerticalOffset(-anchor.getHeight() + anchorOffsetY); - popupWindow.setHorizontalOffset(anchorOffsetX); - if (popupWidth == POPUP_WIDTH_ANCHOR) { - popupWindow.setContentWidth(Math.min(dp(8 * 56), Math.max(dp(4 * 56), anchor.getWidth()))); - } else if (popupWidth == POPUP_WIDTH_AUTO) { - popupWindow.setContentWidth(dp(3 * 56)); - } else { - popupWindow.setContentWidth(popupWidth); - } - - if (popupHeight > 0) { - popupWindow.setHeight(popupHeight); - } - - int selection = 0; - if (manageItems) { - for (int i = 0; i < items.size(); i++) { - if (items.get(i) == selectedItem) { - selection = i; - } - } - } else { - selection = this.selectedPosition; - } - - if (adapter != null) { - popupWindow.setAdapter(adapter); - } else { - popupWindow.setAdapter(new FloatingMenuArrayAdapter(context, R.layout.toolbar_menu_item, items)); - } - - if (manageItems) { - popupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (position >= 0 && position < items.size()) { - FloatingMenuItem item = items.get(position); - if (item.isEnabled()) { - callback.onFloatingMenuItemClicked(FloatingMenu.this, item); - popupWindow.dismiss(); - } - } else { - callback.onFloatingMenuItemClicked(FloatingMenu.this, null); - } - } - }); - } else { - popupWindow.setOnItemClickListener(itemClickListener); - } - - globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - if (popupWindow == null) { - Logger.w("FloatingMenu", "popupWindow null in layout listener"); - } else { - if (popupWindow.isShowing()) { - // Recalculate anchor position - popupWindow.show(); - } - } - } - }; - anchor.getViewTreeObserver().addOnGlobalLayoutListener(globalLayoutListener); - - popupWindow.setOnDismissListener(() -> { - if (anchor.getViewTreeObserver().isAlive()) { - anchor.getViewTreeObserver().removeGlobalOnLayoutListener(globalLayoutListener); - } - globalLayoutListener = null; - popupWindow = null; - callback.onFloatingMenuDismissed(FloatingMenu.this); - }); - - popupWindow.show(); - popupWindow.setSelection(selection); - } - - public boolean isShowing() { - return popupWindow != null && popupWindow.isShowing(); - } - - public void dismiss() { - if (popupWindow != null && popupWindow.isShowing()) { - popupWindow.dismiss(); - popupWindow = null; - } - } - - public interface FloatingMenuCallback { - void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item); - - void onFloatingMenuDismissed(FloatingMenu menu); - } - - public static class FloatingMenuCallbackAdapter implements FloatingMenuCallback { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - } - - private static class FloatingMenuArrayAdapter extends ArrayAdapter { - public FloatingMenuArrayAdapter(Context context, int resource, List objects) { - super(context, resource, objects); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - if (convertView == null) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.toolbar_menu_item, parent, false); - } - - FloatingMenuItem item = getItem(position); - - TextView textView = (TextView) convertView; - textView.setText(item.getText()); - textView.setEnabled(item.isEnabled()); - textView.setTextColor(getAttrColor(getContext(), item.isEnabled() ? R.attr.text_color_primary : R.attr.text_color_hint)); - textView.setTypeface(AndroidUtils.ROBOTO_MEDIUM); - - return textView; - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/FloatingMenuItem.java b/Clover/app/src/main/java/org/floens/chan/ui/view/FloatingMenuItem.java deleted file mode 100644 index 565705789a..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/FloatingMenuItem.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import static org.floens.chan.utils.AndroidUtils.getString; - -public class FloatingMenuItem { - private Object id; - private String text; - private boolean enabled = true; - - public FloatingMenuItem(Object id, int text) { - this(id, getString(text)); - } - - public FloatingMenuItem(Object id, int text, boolean enabled) { - this(id, getString(text), enabled); - } - - public FloatingMenuItem(Object id, String text) { - this(id, text, true); - } - - public FloatingMenuItem(Object id, String text, boolean enabled) { - this.id = id; - this.text = text; - this.enabled = enabled; - } - - public Object getId() { - return id; - } - - public void setId(Object id) { - this.id = id; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/GridRecyclerView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/GridRecyclerView.java deleted file mode 100644 index 421192ff57..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/GridRecyclerView.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.content.Context; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.util.AttributeSet; - -/** - * A RecyclerView with a GridLayoutManager that manages the span count by dividing the width of the - * view with the value set by {@link #setSpanWidth(int)}. - */ -public class GridRecyclerView extends RecyclerView { - private GridLayoutManager gridLayoutManager; - private int spanWidth; - private int realSpanWidth; - - public GridRecyclerView(Context context) { - super(context); - } - - public GridRecyclerView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public GridRecyclerView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public void setLayoutManager(GridLayoutManager gridLayoutManager) { - this.gridLayoutManager = gridLayoutManager; - super.setLayoutManager(gridLayoutManager); - } - - /** - * Set the width of each span in pixels. - * - * @param spanWidth width of each span in pixels. - */ - public void setSpanWidth(int spanWidth) { - this.spanWidth = spanWidth; - } - - public int getRealSpanWidth() { - return realSpanWidth; - } - - @Override - protected void onMeasure(int widthSpec, int heightSpec) { - super.onMeasure(widthSpec, heightSpec); - int spanCount = Math.max(1, getMeasuredWidth() / spanWidth); - gridLayoutManager.setSpanCount(spanCount); - int oldRealSpanWidth = realSpanWidth; - realSpanWidth = getMeasuredWidth() / spanCount; - if (realSpanWidth != oldRealSpanWidth) { - getAdapter().notifyDataSetChanged(); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/LoadView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/LoadView.java deleted file mode 100644 index d505a125c6..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/LoadView.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; -import android.content.Context; -import android.util.AttributeSet; -import android.view.Gravity; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.ProgressBar; - -import org.floens.chan.utils.AndroidUtils; - -import java.util.ArrayList; -import java.util.List; - -/** - * Container for a view with an ProgressBar. Toggles between the view and a - * ProgressBar. - */ -public class LoadView extends FrameLayout { - private int fadeDuration = 200; - private Listener listener; - - private AnimatorSet animatorSet = new AnimatorSet(); - - public LoadView(Context context) { - super(context); - } - - public LoadView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public LoadView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - /** - * Set the duration of the fades in ms - * - * @param fadeDuration the duration of the fade animation in ms - */ - public void setFadeDuration(int fadeDuration) { - this.fadeDuration = fadeDuration; - } - - /** - * Set a listener that gives a call when a view gets removed - * - * @param listener the listener - */ - public void setListener(Listener listener) { - this.listener = listener; - } - - /** - * Set the content of this container. It will fade the attached views out with the - * new one. Set view to null to show the progressbar. - * - * @param newView the view or null for a progressbar. - */ - public View setView(View newView) { - return setView(newView, true); - } - - /** - * Set the content of this container. It will fade the attached views out with the - * new one. Set view to null to show the progressbar. - * - * @param newView the view or null for a progressbar. - * @param animate should it be animated - */ - public View setView(View newView, boolean animate) { - if (newView == null) { - newView = getViewForNull(); - } - - if (animate) { - // Fast forward possible pending animations (keeping the views attached.) - animatorSet.cancel(); - animatorSet = new AnimatorSet(); - - // Fade all attached views out. - // If the animation is cancelled, the views are not removed. If the animation ends, - // the views are removed. - List animators = new ArrayList<>(); - for (int i = 0; i < getChildCount(); i++) { - final View child = getChildAt(i); - - // We don't add a listener to remove the view we also animate in. - if (child == newView) { - continue; - } - - ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(child, View.ALPHA, 0f); - objectAnimator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationCancel(Animator animation) { - // If cancelled, don't remove the view, but re-run the animation. - animation.removeListener(this); - } - - @Override - public void onAnimationEnd(Animator animation) { - removeAndCallListener(child); - } - }); - animators.add(objectAnimator); - } - - if (newView.getParent() != this) { - if (newView.getParent() != null) { - AndroidUtils.removeFromParentView(newView); - } - addView(newView); - } - - // Assume no running animations - if (newView.getAlpha() == 1f) { - newView.setAlpha(0f); - } - - // Fade our new view in - ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(newView, View.ALPHA, 1f); - animators.add(objectAnimator); - - animatorSet.setDuration(fadeDuration); - animatorSet.playTogether(animators); - - final AnimatorSet currentAnimatorSet = animatorSet; - - // Postponing the animation to the next frame delays the animation until the heavy - // view setup is done. If you start the animation immediately, it will jump because - // the first frame is nowhere near 16ms. We rather have a bit of a delay instead of - // a broken jumping animation. - post(() -> { - // The AnimatorSet is replaced with a new one, if it was changed between the - // previous frame and now. - if (animatorSet == currentAnimatorSet) { - animatorSet.start(); - } - }); - } else { - // Fast forward possible pending animations (end, so also remove them). - animatorSet.end(); - - for (int i = 0; i < getChildCount(); i++) { - View child = getChildAt(i); - removeAndCallListener(child); - } - - animatorSet = new AnimatorSet(); - - newView.setAlpha(1f); - addView(newView); - } - - return newView; - } - - protected View getViewForNull() { - // TODO: figure out why this is needed for the thread list layout view. - FrameLayout progressBarContainer = new FrameLayout(getContext()); - progressBarContainer.setLayoutParams( - new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); - - View progressBar = new ProgressBar(getContext()); - progressBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, - LayoutParams.WRAP_CONTENT, Gravity.CENTER)); - - progressBarContainer.addView(progressBar); - - return progressBarContainer; - } - - protected void removeAndCallListener(View child) { - removeView(child); - if (listener != null) { - listener.onLoadViewRemoved(child); - } - } - - public interface Listener { - void onLoadViewRemoved(View view); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/LoadingBar.java b/Clover/app/src/main/java/org/floens/chan/ui/view/LoadingBar.java deleted file mode 100644 index d24e0e0280..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/LoadingBar.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.util.AttributeSet; -import android.view.View; - -import org.floens.chan.R; -import org.floens.chan.utils.AndroidUtils; - -public class LoadingBar extends View { - private static final float MINIMUM_PROGRESS = 0.1f; - - private float progress; - private float targetProgress; - private Paint paint; - - public LoadingBar(Context context) { - super(context); - init(); - } - - public LoadingBar(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - public LoadingBar(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - public void setProgress(float targetProgress) { - float clampedProgress = Math.min(Math.max(targetProgress, 0f), 1f); - this.targetProgress = MINIMUM_PROGRESS + clampedProgress * (1f - MINIMUM_PROGRESS); - if (this.targetProgress < this.progress) { - this.progress = this.targetProgress; - } - invalidate(); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - progress += (targetProgress - progress) * 0.05f; - - if (progress > 0f) { - canvas.drawRect(0f, 0f, getWidth() * progress, getHeight(), paint); - } - - if ((getWidth() * Math.abs(targetProgress - progress)) > 1f) { - invalidate(); - } - } - - private void init() { - paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(AndroidUtils.getAttrColor(getContext(), R.attr.colorAccent)); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/MultiImageView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/MultiImageView.java deleted file mode 100644 index cddf0436b5..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/MultiImageView.java +++ /dev/null @@ -1,630 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.content.Context; -import android.content.ContextWrapper; -import android.content.Intent; -import android.media.AudioManager; -import android.media.MediaPlayer; -import android.os.Build; -import android.util.AttributeSet; -import android.view.Gravity; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.MediaController; -import android.widget.Toast; -import android.widget.VideoView; - -import com.android.volley.VolleyError; -import com.android.volley.toolbox.ImageLoader; -import com.android.volley.toolbox.ImageLoader.ImageContainer; -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.google.android.exoplayer2.ExoPlayer; -import com.google.android.exoplayer2.ExoPlayerFactory; -import com.google.android.exoplayer2.Player; -import com.google.android.exoplayer2.SimpleExoPlayer; -import com.google.android.exoplayer2.source.ExtractorMediaSource; -import com.google.android.exoplayer2.source.MediaSource; -import com.google.android.exoplayer2.ui.PlayerView; -import com.google.android.exoplayer2.upstream.DataSource; -import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; -import com.google.android.exoplayer2.util.Util; - -import org.floens.chan.R; -import org.floens.chan.core.cache.FileCache; -import org.floens.chan.core.cache.FileCacheDownloader; -import org.floens.chan.core.cache.FileCacheListener; -import org.floens.chan.core.cache.FileCacheProvider; -import org.floens.chan.core.di.UserAgentProvider; -import org.floens.chan.core.model.PostImage; -import org.floens.chan.core.settings.ChanSettings; -import org.floens.chan.utils.AndroidUtils; -import org.floens.chan.utils.Logger; - -import java.io.File; -import java.io.IOException; - -import javax.inject.Inject; - -import pl.droidsonroids.gif.GifDrawable; -import pl.droidsonroids.gif.GifImageView; - -import static org.floens.chan.Chan.inject; - -public class MultiImageView extends FrameLayout implements View.OnClickListener { - public enum Mode { - UNLOADED, LOWRES, BIGIMAGE, GIF, MOVIE - } - - private static final String TAG = "MultiImageView"; - - @Inject - FileCache fileCache; - - @Inject - ImageLoader imageLoader; - - @Inject - UserAgentProvider userAgent; - - private ImageView playView; - - private PostImage postImage; - private Callback callback; - private Mode mode = Mode.UNLOADED; - - private boolean hasContent = false; - private ImageContainer thumbnailRequest; - private FileCacheDownloader bigImageRequest; - private FileCacheDownloader gifRequest; - private FileCacheDownloader videoRequest; - - private VideoView videoView; - private PlayerView exoVideoView; - private boolean videoError = false; - private MediaPlayer mediaPlayer; - private SimpleExoPlayer exoPlayer; - - public MultiImageView(Context context) { - this(context, null); - } - - public MultiImageView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public MultiImageView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - inject(this); - - setOnClickListener(this); - - playView = new ImageView(getContext()); - playView.setVisibility(View.GONE); - playView.setImageResource(R.drawable.ic_play_circle_outline_white_48dp); - addView(playView, new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER)); - } - - public void bindPostImage(PostImage postImage, Callback callback) { - this.postImage = postImage; - this.callback = callback; - - playView.setVisibility(postImage.type == PostImage.Type.MOVIE ? View.VISIBLE : View.GONE); - } - - public PostImage getPostImage() { - return postImage; - } - - public void setMode(final Mode newMode) { - if (this.mode != newMode) { -// Logger.test("Changing mode from " + this.mode + " to " + newMode + " for " + postImage.thumbnailUrl); - this.mode = newMode; - - AndroidUtils.waitForMeasure(this, new AndroidUtils.OnMeasuredCallback() { - @Override - public boolean onMeasured(View view) { - switch (newMode) { - case LOWRES: - setThumbnail(postImage.getThumbnailUrl().toString()); - break; - case BIGIMAGE: - setBigImage(postImage.imageUrl.toString()); - break; - case GIF: - setGif(postImage.imageUrl.toString()); - break; - case MOVIE: - setVideo(postImage.imageUrl.toString()); - break; - } - return true; - } - }); - } - } - - public Mode getMode() { - return mode; - } - - public void setCallback(Callback callback) { - this.callback = callback; - } - - public CustomScaleImageView findScaleImageView() { - CustomScaleImageView bigImage = null; - for (int i = 0; i < getChildCount(); i++) { - if (getChildAt(i) instanceof CustomScaleImageView) { - bigImage = (CustomScaleImageView) getChildAt(i); - } - } - return bigImage; - } - - public void setVolume(boolean muted) { - final float volume = muted ? 0f : 1f; - if (exoPlayer != null) { - Player.AudioComponent audioComponent = exoPlayer.getAudioComponent(); - if (audioComponent != null) { - audioComponent.setVolume(volume); - } - } else if (mediaPlayer != null) { - mediaPlayer.setVolume(volume, volume); - } - } - - @Override - public void onClick(View v) { - callback.onTap(this); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - cancelLoad(); - } - - private void setThumbnail(String thumbnailUrl) { - if (getWidth() == 0 || getHeight() == 0) { - Logger.e(TAG, "getWidth() or getHeight() returned 0, not loading"); - return; - } - - if (thumbnailRequest != null) { - return; - } - - // Also use volley for the thumbnails - thumbnailRequest = imageLoader.get(thumbnailUrl, new ImageLoader.ImageListener() { - @Override - public void onErrorResponse(VolleyError error) { - thumbnailRequest = null; - onError(); - } - - @Override - public void onResponse(ImageContainer response, boolean isImmediate) { - thumbnailRequest = null; - if (response.getBitmap() != null && (!hasContent || mode == Mode.LOWRES)) { - ImageView thumbnail = new ImageView(getContext()); - thumbnail.setImageBitmap(response.getBitmap()); - - onModeLoaded(Mode.LOWRES, thumbnail); - } - } - }, getWidth(), getHeight()); - - if (thumbnailRequest.getBitmap() != null) { - // Request was immediate and thumbnailRequest was first set to null in onResponse, and then set to the container - // when the method returned - // Still set it to null here - thumbnailRequest = null; - } - } - - private void setBigImage(String imageUrl) { - if (getWidth() == 0 || getHeight() == 0) { - Logger.e(TAG, "getWidth() or getHeight() returned 0, not loading big image"); - return; - } - - if (bigImageRequest != null) { - return; - } - - callback.showProgress(this, true); - bigImageRequest = fileCache.downloadFile(imageUrl, new FileCacheListener() { - @Override - public void onProgress(long downloaded, long total) { - callback.onProgress(MultiImageView.this, downloaded, total); - } - - @Override - public void onSuccess(File file) { - setBigImageFile(file); - } - - @Override - public void onFail(boolean notFound) { - if (notFound) { - onNotFoundError(); - } else { - onError(); - } - } - - @Override - public void onCancel() { - } - - @Override - public void onEnd() { - bigImageRequest = null; - callback.showProgress(MultiImageView.this, false); - } - }); - } - - private void setBigImageFile(File file) { - setBitImageFileInternal(file, true, Mode.BIGIMAGE); - } - - private void setGif(String gifUrl) { - if (getWidth() == 0 || getHeight() == 0) { - Logger.e(TAG, "getWidth() or getHeight() returned 0, not loading"); - return; - } - - if (gifRequest != null) { - return; - } - - callback.showProgress(this, true); - gifRequest = fileCache.downloadFile(gifUrl, new FileCacheListener() { - @Override - public void onProgress(long downloaded, long total) { - callback.onProgress(MultiImageView.this, downloaded, total); - } - - @Override - public void onSuccess(File file) { - if (!hasContent || mode == Mode.GIF) { - setGifFile(file); - } - } - - @Override - public void onFail(boolean notFound) { - if (notFound) { - onNotFoundError(); - } else { - onError(); - } - } - - @Override - public void onCancel() { - } - - @Override - public void onEnd() { - gifRequest = null; - callback.showProgress(MultiImageView.this, false); - } - }); - } - - private void setGifFile(File file) { - GifDrawable drawable; - try { - drawable = new GifDrawable(file.getAbsolutePath()); - - // For single frame gifs, use the scaling image instead - // The region decoder doesn't work for gifs, so we unfortunately - // have to use the more memory intensive non tiling mode. - if (drawable.getNumberOfFrames() == 1) { - drawable.recycle(); - setBitImageFileInternal(file, false, Mode.GIF); - return; - } - } catch (IOException e) { - e.printStackTrace(); - onError(); - return; - } catch (OutOfMemoryError e) { - Runtime.getRuntime().gc(); - e.printStackTrace(); - onOutOfMemoryError(); - return; - } - - GifImageView view = new GifImageView(getContext()); - view.setImageDrawable(drawable); - onModeLoaded(Mode.GIF, view); - } - - private void setVideo(String videoUrl) { - if (videoRequest != null) { - return; - } - - callback.showProgress(this, true); - videoRequest = fileCache.downloadFile(videoUrl, new FileCacheListener() { - @Override - public void onProgress(long downloaded, long total) { - callback.onProgress(MultiImageView.this, downloaded, total); - } - - @Override - public void onSuccess(File file) { - if (!hasContent || mode == Mode.MOVIE) { - setVideoFile(file); - } - } - - @Override - public void onFail(boolean notFound) { - if (notFound) { - onNotFoundError(); - } else { - onError(); - } - } - - @Override - public void onCancel() { - } - - @Override - public void onEnd() { - videoRequest = null; - callback.showProgress(MultiImageView.this, false); - } - }); - } - - private void setVideoFile(final File file) { - if (ChanSettings.videoOpenExternal.get()) { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setDataAndType(FileCacheProvider.getUriForFile(file), "video/*"); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - - AndroidUtils.openIntent(intent); - - onModeLoaded(Mode.MOVIE, videoView); - } else if (ChanSettings.videoUseExoplayer.get()) { - exoVideoView = new PlayerView(getContext()); - exoPlayer = ExoPlayerFactory.newSimpleInstance(getContext()); - exoVideoView.setPlayer(exoPlayer); - DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(getContext(), - Util.getUserAgent(getContext(), userAgent.getUserAgent())); - MediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory) - .createMediaSource(android.net.Uri.fromFile(file)); - - exoPlayer.setRepeatMode(ChanSettings.videoAutoLoop.get() ? - Player.REPEAT_MODE_ALL : Player.REPEAT_MODE_OFF); - - exoPlayer.prepare(videoSource); - callback.onVideoLoaded(this, hasMediaPlayerAudioTracks(exoPlayer)); - addView(exoVideoView); - exoPlayer.setPlayWhenReady(true); - } else { - Context proxyContext = new NoMusicServiceCommandContext(getContext()); - - videoView = new VideoView(proxyContext); - videoView.setZOrderOnTop(true); - videoView.setMediaController(new MediaController(getContext())); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - videoView.setAudioFocusRequest(AudioManager.AUDIOFOCUS_NONE); - } - - addView(videoView, 0, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, Gravity.CENTER)); - - videoView.setOnPreparedListener(mp -> { - mediaPlayer = mp; - mp.setLooping(ChanSettings.videoAutoLoop.get()); - mp.setVolume(0f, 0f); - onModeLoaded(Mode.MOVIE, videoView); - callback.onVideoLoaded(this, hasMediaPlayerAudioTracks(mp)); - }); - - videoView.setOnErrorListener((mp, what, extra) -> { - onVideoError(); - - return true; - }); - - videoView.setVideoPath(file.getAbsolutePath()); - - try { - videoView.start(); - } catch (IllegalStateException e) { - Logger.e(TAG, "Video view start error", e); - onVideoError(); - } - } - } - - private boolean hasMediaPlayerAudioTracks(MediaPlayer mediaPlayer) { - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - for (MediaPlayer.TrackInfo trackInfo : mediaPlayer.getTrackInfo()) { - if (trackInfo.getTrackType() == MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_AUDIO) { - return true; - } - } - - return false; - } else { - // It'll just show the icon without doing anything. Remove when 4.0 is dropped. - return true; - } - } catch (RuntimeException e) { - // getTrackInfo() raises an IllegalStateException on some devices. - // Samsung even throws a RuntimeException. - // Return a default value. - return true; - } - } - - private boolean hasMediaPlayerAudioTracks(ExoPlayer mediaPlayer) { - return mediaPlayer.getAudioComponent() != null; - } - - private void onVideoError() { - if (!videoError) { - videoError = true; - callback.onVideoError(this); - } - } - - private void cleanupVideo(VideoView videoView) { - videoView.stopPlayback(); - mediaPlayer = null; - } - - private void cleanupVideo(PlayerView videoView) { - videoView.getPlayer().release(); - } - - private void setBitImageFileInternal(File file, boolean tiling, final Mode forMode) { - final CustomScaleImageView image = new CustomScaleImageView(getContext()); - image.setImage(ImageSource.uri(file.getAbsolutePath()).tiling(tiling)); - image.setOnClickListener(MultiImageView.this); - addView(image, 0, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); - image.setCallback(new CustomScaleImageView.Callback() { - @Override - public void onReady() { - if (!hasContent || mode == forMode) { - callback.showProgress(MultiImageView.this, false); - onModeLoaded(Mode.BIGIMAGE, image); - } - } - - @Override - public void onError(boolean wasInitial) { - onBigImageError(wasInitial); - } - }); - } - - private void onError() { - Toast.makeText(getContext(), R.string.image_preview_failed, Toast.LENGTH_SHORT).show(); - callback.showProgress(this, false); - } - - private void onNotFoundError() { - callback.showProgress(this, false); - Toast.makeText(getContext(), R.string.image_not_found, Toast.LENGTH_SHORT).show(); - } - - private void onOutOfMemoryError() { - Toast.makeText(getContext(), R.string.image_preview_failed_oom, Toast.LENGTH_SHORT).show(); - callback.showProgress(this, false); - } - - private void onBigImageError(boolean wasInitial) { - if (wasInitial) { - Toast.makeText(getContext(), R.string.image_failed_big_image, Toast.LENGTH_SHORT).show(); - callback.showProgress(this, false); - } - } - - private void cancelLoad() { - if (thumbnailRequest != null) { - thumbnailRequest.cancelRequest(); - thumbnailRequest = null; - } - if (bigImageRequest != null) { - bigImageRequest.cancel(); - bigImageRequest = null; - } - if (gifRequest != null) { - gifRequest.cancel(); - gifRequest = null; - } - if (videoRequest != null) { - videoRequest.cancel(); - videoRequest = null; - } - } - - private void onModeLoaded(Mode mode, View view) { - if (view != null) { - // Remove all other views - boolean alreadyAttached = false; - for (int i = getChildCount() - 1; i >= 0; i--) { - View child = getChildAt(i); - if (child != playView) { - if (child != view) { - if (child instanceof VideoView) { - cleanupVideo((VideoView) child); - } else if (child instanceof PlayerView) { - cleanupVideo((PlayerView) child); - } - - removeViewAt(i); - } else { - alreadyAttached = true; - } - } - } - - if (!alreadyAttached) { - addView(view, 0, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); - } - } - - hasContent = true; - callback.onModeLoaded(this, mode); - } - - public interface Callback { - void onTap(MultiImageView multiImageView); - - void showProgress(MultiImageView multiImageView, boolean progress); - - void onProgress(MultiImageView multiImageView, long current, long total); - - void onVideoError(MultiImageView multiImageView); - - void onVideoLoaded(MultiImageView multiImageView, boolean hasAudio); - - void onModeLoaded(MultiImageView multiImageView, Mode mode); - } - - public static class NoMusicServiceCommandContext extends ContextWrapper { - public NoMusicServiceCommandContext(Context base) { - super(base); - } - - @Override - public void sendBroadcast(Intent intent) { - // Only allow broadcasts when it's not a music service command - // Prevents pause intents from broadcasting - if (!"com.android.music.musicservicecommand".equals(intent.getAction())) { - super.sendBroadcast(intent); - } - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/OptionalSwipeViewPager.java b/Clover/app/src/main/java/org/floens/chan/ui/view/OptionalSwipeViewPager.java deleted file mode 100644 index f4b15305ee..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/OptionalSwipeViewPager.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.content.Context; -import android.support.v4.view.ViewPager; -import android.util.AttributeSet; -import android.view.MotionEvent; - -public class OptionalSwipeViewPager extends ViewPager { - private boolean swipingEnabled; - - public OptionalSwipeViewPager(Context context) { - super(context); - } - - public OptionalSwipeViewPager(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public boolean onTouchEvent(MotionEvent ev) { - return swipingEnabled && super.onTouchEvent(ev); - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - try { - return swipingEnabled && super.onInterceptTouchEvent(ev); - } catch (IllegalArgumentException ignored) { - // Ignore pointer index out of range exceptions - return false; - } - } - - public void setSwipingEnabled(boolean swipingEnabled) { - this.swipingEnabled = swipingEnabled; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/PostImageThumbnailView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/PostImageThumbnailView.java deleted file mode 100644 index 33a8fbea54..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/PostImageThumbnailView.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; - -import org.floens.chan.R; -import org.floens.chan.core.model.PostImage; - -public class PostImageThumbnailView extends ThumbnailView { - private PostImage postImage; - private Drawable playIcon; - private Rect bounds = new Rect(); - private float ratio = 0f; - - public PostImageThumbnailView(Context context) { - this(context, null); - } - - public PostImageThumbnailView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - @SuppressWarnings("deprecation") - public PostImageThumbnailView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - playIcon = getResources().getDrawable(R.drawable.ic_play_circle_outline_white_24dp); - } - - public void setPostImage(PostImage postImage, int width, int height) { - if (this.postImage != postImage) { - this.postImage = postImage; - - if (postImage != null) { - setUrl(postImage.getThumbnailUrl().toString(), width, height); - } else { - setUrl(null, width, height); - } - } - } - - public void setRatio(float ratio) { - this.ratio = ratio; - } - - @Override - public void draw(Canvas canvas) { - super.draw(canvas); - - if (postImage != null && postImage.type == PostImage.Type.MOVIE && !error) { - int x = (int) (getWidth() / 2.0 - playIcon.getIntrinsicWidth() / 2.0); - int y = (int) (getHeight() / 2.0 - playIcon.getIntrinsicHeight() / 2.0); - - bounds.set(x, y, x + playIcon.getIntrinsicWidth(), y + playIcon.getIntrinsicHeight()); - playIcon.setBounds(bounds); - playIcon.draw(canvas); - } - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (ratio == 0f) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } else { - int heightMode = MeasureSpec.getMode(heightMeasureSpec); - if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY && (heightMode == MeasureSpec.UNSPECIFIED || heightMode == MeasureSpec.AT_MOST)) { - int width = MeasureSpec.getSize(widthMeasureSpec); - - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec((int) (width / ratio), MeasureSpec.EXACTLY)); - } else { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/SelectionListeningEditText.java b/Clover/app/src/main/java/org/floens/chan/ui/view/SelectionListeningEditText.java deleted file mode 100644 index 7aa2897333..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/SelectionListeningEditText.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.content.Context; -import android.util.AttributeSet; -import android.widget.EditText; - -public class SelectionListeningEditText extends EditText { - private SelectionChangedListener listener; - - public SelectionListeningEditText(Context context) { - super(context); - } - - public SelectionListeningEditText(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public SelectionListeningEditText(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public void setSelectionChangedListener(SelectionChangedListener listener) { - this.listener = listener; - } - - @Override - protected void onSelectionChanged(int selStart, int selEnd) { - super.onSelectionChanged(selStart, selEnd); - - if (listener != null) { - listener.onSelectionChanged(selStart, selEnd); - } - } - - public interface SelectionChangedListener { - void onSelectionChanged(int selStart, int selEnd); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailView.java deleted file mode 100644 index 7bd18f368f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailView.java +++ /dev/null @@ -1,320 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.annotation.TargetApi; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapShader; -import android.graphics.Canvas; -import android.graphics.Matrix; -import android.graphics.Paint; -import android.graphics.Rect; -import android.graphics.RectF; -import android.graphics.Shader; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.view.View; - -import com.android.volley.AuthFailureError; -import com.android.volley.NetworkError; -import com.android.volley.ParseError; -import com.android.volley.TimeoutError; -import com.android.volley.VolleyError; -import com.android.volley.toolbox.ImageLoader; - -import org.floens.chan.R; - -import static org.floens.chan.Chan.injector; -import static org.floens.chan.utils.AndroidUtils.getString; -import static org.floens.chan.utils.AndroidUtils.sp; - -public class ThumbnailView extends View implements ImageLoader.ImageListener { - private ImageLoader.ImageContainer container; - private int fadeTime = 200; - - private boolean circular = false; - private int rounding = 0; - private boolean clickable = false; - - private boolean calculate; - private Bitmap bitmap; - private RectF bitmapRect = new RectF(); - private RectF drawRect = new RectF(); - private RectF outputRect = new RectF(); - - private Matrix matrix = new Matrix(); - BitmapShader bitmapShader; - private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); - - private boolean foregroundCalculate = false; - private Drawable foreground; - - protected boolean error = false; - private String errorText; - private Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private Rect tmpTextRect = new Rect(); - - public ThumbnailView(Context context) { - super(context); - init(); - } - - public ThumbnailView(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - public ThumbnailView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - private void init() { - textPaint.setColor(0xff000000); - textPaint.setTextSize(sp(14)); - } - - public void setUrl(String url, int width, int height) { - if (container != null && container.getRequestUrl().equals(url)) { - return; - } - - if (container != null) { - container.cancelRequest(); - container = null; - error = false; - setImageBitmap(null); - } - - if (!TextUtils.isEmpty(url)) { - container = injector().instance(ImageLoader.class).get(url, this, width, height); - } - } - - public void setCircular(boolean circular) { - this.circular = circular; - } - - public void setRounding(int rounding) { - this.rounding = rounding; - } - - @SuppressWarnings({"deprecation", "ConstantConditions"}) - @Override - public void setClickable(boolean clickable) { - super.setClickable(clickable); - - if (clickable != this.clickable) { - this.clickable = clickable; - - foregroundCalculate = clickable; - if (clickable) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - foreground = getContext().getDrawable(R.drawable.item_background); - } else { - foreground = getResources().getDrawable(R.drawable.item_background); - } - foreground.setCallback(this); - if (foreground.isStateful()) { - foreground.setState(getDrawableState()); - } - } else { - unscheduleDrawable(foreground); - foreground = null; - } - requestLayout(); - invalidate(); - } - } - - public void setFadeTime(int fadeTime) { - this.fadeTime = fadeTime; - } - - public Bitmap getBitmap() { - return bitmap; - } - - @Override - public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) { - if (response.getBitmap() != null) { - setImageBitmap(response.getBitmap()); - onImageSet(isImmediate); - } - } - - @Override - public void onErrorResponse(VolleyError e) { - error = true; - - if (e instanceof NetworkError || e instanceof TimeoutError || e instanceof ParseError || e instanceof AuthFailureError) { - errorText = getString(R.string.thumbnail_load_failed_network); - } else { - errorText = getString(R.string.thumbnail_load_failed_server); - } - - onImageSet(false); - invalidate(); - } - - @Override - protected boolean onSetAlpha(int alpha) { - if (error) { - textPaint.setAlpha(alpha); - } else { - paint.setAlpha(alpha); - } - invalidate(); - - return true; - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - calculate = true; - foregroundCalculate = true; - } - - @Override - protected void onDraw(Canvas canvas) { - if (getAlpha() == 0f) { - return; - } - - int width = getWidth() - getPaddingLeft() - getPaddingRight(); - int height = getHeight() - getPaddingTop() - getPaddingBottom(); - - if (error) { - canvas.save(); - - textPaint.getTextBounds(errorText, 0, errorText.length(), tmpTextRect); - float x = width / 2f - tmpTextRect.exactCenterX(); - float y = height / 2f - tmpTextRect.exactCenterY(); - canvas.drawText(errorText, x + getPaddingLeft(), y + getPaddingTop(), textPaint); - - canvas.restore(); - } else { - if (bitmap == null) { - return; - } - - if (calculate) { - calculate = false; - bitmapRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight()); - float scale = Math.max( - (float) width / (float) bitmap.getWidth(), - (float) height / (float) bitmap.getHeight()); - float scaledX = bitmap.getWidth() * scale; - float scaledY = bitmap.getHeight() * scale; - float offsetX = (scaledX - width) * 0.5f; - float offsetY = (scaledY - height) * 0.5f; - - drawRect.set(-offsetX, -offsetY, scaledX - offsetX, scaledY - offsetY); - drawRect.offset(getPaddingLeft(), getPaddingTop()); - - outputRect.set(getPaddingLeft(), getPaddingTop(), getWidth() - getPaddingRight(), getHeight() - getPaddingBottom()); - - matrix.setRectToRect(bitmapRect, drawRect, Matrix.ScaleToFit.FILL); - - bitmapShader.setLocalMatrix(matrix); - paint.setShader(bitmapShader); - } - - canvas.save(); - canvas.clipRect(outputRect); - - if (circular) { - canvas.drawRoundRect(outputRect, width / 2, height / 2, paint); - } else { - canvas.drawRoundRect(outputRect, rounding, rounding, paint); - } - - canvas.restore(); - canvas.save(); - - if (foreground != null) { - if (foregroundCalculate) { - foregroundCalculate = false; - foreground.setBounds(0, 0, getRight(), getBottom()); - } - - foreground.draw(canvas); - } - - canvas.restore(); - } - } - - @Override - protected boolean verifyDrawable(Drawable who) { - return super.verifyDrawable(who) || (who == foreground); - } - - @Override - public void jumpDrawablesToCurrentState() { - super.jumpDrawablesToCurrentState(); - - if (foreground != null) { - foreground.jumpToCurrentState(); - } - } - - @Override - protected void drawableStateChanged() { - super.drawableStateChanged(); - if (foreground != null && foreground.isStateful()) { - foreground.setState(getDrawableState()); - } - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - @Override - public void drawableHotspotChanged(float x, float y) { - super.drawableHotspotChanged(x, y); - - if (foreground != null) { - foreground.setHotspot(x, y); - } - } - - private void onImageSet(boolean isImmediate) { - clearAnimation(); - if (fadeTime > 0 && !isImmediate) { - setAlpha(0f); - animate().alpha(1f).setDuration(fadeTime); - } else { - setAlpha(1f); - } - } - - private void setImageBitmap(Bitmap bitmap) { - bitmapShader = null; - paint.setShader(null); - - this.bitmap = bitmap; - if (bitmap != null) { - calculate = true; - bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); - } - invalidate(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/TransitionImageView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/TransitionImageView.java deleted file mode 100644 index 090a7bf066..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/TransitionImageView.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Matrix; -import android.graphics.Paint; -import android.graphics.Point; -import android.graphics.PointF; -import android.graphics.RectF; -import android.util.AttributeSet; -import android.view.View; - -public class TransitionImageView extends View { - private static final String TAG = "TransitionImageView"; - - private Bitmap bitmap; - private Matrix matrix = new Matrix(); - private Paint paint = new Paint(); - private RectF bitmapRect = new RectF(); - private RectF destRect = new RectF(); - private RectF sourceImageRect = new RectF(); - private PointF sourceOverlap = new PointF(); - private RectF destClip = new RectF(); - private float progress; - private float stateScale; - private float stateBitmapScaleDiff; - private PointF stateBitmapSize; - private PointF statePos; - - public TransitionImageView(Context context) { - super(context); - init(); - } - - public TransitionImageView(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - public TransitionImageView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - public void setBitmap(Bitmap bitmap) { - this.bitmap = bitmap; - bitmapRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight()); - - // Center inside method - float selfWidth = getWidth(); - float selfHeight = getHeight(); - - float destScale = Math.min( - selfWidth / (float) bitmap.getWidth(), - selfHeight / (float) bitmap.getHeight()); - - RectF output = new RectF( - (selfWidth - bitmap.getWidth() * destScale) * 0.5f, - (selfHeight - bitmap.getHeight() * destScale) * 0.5f, 0, 0); - - output.right = bitmap.getWidth() * destScale + output.left; - output.bottom = bitmap.getHeight() * destScale + output.top; - - destRect.set(output); - - matrix.setRectToRect(bitmapRect, destRect, Matrix.ScaleToFit.FILL); - } - - public void setSourceImageView(Point windowLocation, Point viewSize, Bitmap bitmap) { - this.bitmap = bitmap; - bitmapRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight()); - - if (stateBitmapSize != null) { - stateBitmapScaleDiff = stateBitmapSize.x / bitmap.getWidth(); - } - - int[] myLoc = new int[2]; - getLocationInWindow(myLoc); - float globalOffsetX = windowLocation.x - myLoc[0]; - float globalOffsetY = windowLocation.y - myLoc[1]; - - // Get the coords in the image view with the center crop method - float scale = Math.max( - (float) viewSize.x / (float) bitmap.getWidth(), - (float) viewSize.y / (float) bitmap.getHeight()); - float scaledX = bitmap.getWidth() * scale; - float scaledY = bitmap.getHeight() * scale; - float offsetX = (scaledX - viewSize.x) * 0.5f; - float offsetY = (scaledY - viewSize.y) * 0.5f; - - sourceOverlap.set(offsetX, offsetY); - - sourceImageRect.set( - -offsetX + globalOffsetX, - -offsetY + globalOffsetY, - scaledX - offsetX + globalOffsetX, - scaledY - offsetY + globalOffsetY); - } - - public void setState(float stateScale, PointF statePos, PointF stateBitmapSize) { - this.stateScale = stateScale; - this.statePos = statePos; - this.stateBitmapSize = stateBitmapSize; - } - - public void setProgress(float progress) { - this.progress = progress; - - RectF output; - if (statePos != null) { - // Use scale and translate from ssiv - output = new RectF(-statePos.x * stateScale, -statePos.y * stateScale, 0, 0); - output.right = output.left + bitmap.getWidth() * stateBitmapScaleDiff * stateScale; - output.bottom = output.top + bitmap.getHeight() * stateBitmapScaleDiff * stateScale; - } else { - // Center inside method - float selfWidth = getWidth(); - float selfHeight = getHeight(); - - float destScale = Math.min( - selfWidth / (float) bitmap.getWidth(), - selfHeight / (float) bitmap.getHeight()); - - output = new RectF( - (selfWidth - bitmap.getWidth() * destScale) * 0.5f, - (selfHeight - bitmap.getHeight() * destScale) * 0.5f, 0, 0); - - output.right = bitmap.getWidth() * destScale + output.left; - output.bottom = bitmap.getHeight() * destScale + output.top; - } - - // Linear interpolate between start bounds and calculated final bounds - output.left = lerp(sourceImageRect.left, output.left, progress); - output.top = lerp(sourceImageRect.top, output.top, progress); - output.right = lerp(sourceImageRect.right, output.right, progress); - output.bottom = lerp(sourceImageRect.bottom, output.bottom, progress); - - destRect.set(output); - - matrix.setRectToRect(bitmapRect, destRect, Matrix.ScaleToFit.FILL); - - destClip.set( - output.left + sourceOverlap.x * (1f - progress), - output.top + sourceOverlap.y * (1f - progress), - output.right - sourceOverlap.x * (1f - progress), - output.bottom - sourceOverlap.y * (1f - progress) - ); - - invalidate(); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - if (bitmap != null) { - canvas.save(); - if (progress < 1f) { - canvas.clipRect(destClip); - } - canvas.drawBitmap(bitmap, matrix, paint); - canvas.restore(); - } - } - - private void init() { - paint.setAntiAlias(true); - paint.setFilterBitmap(true); - } - - private float lerp(float a, float b, float x) { - return a + (b - a) * x; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/WrappingGridView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/WrappingGridView.java deleted file mode 100644 index 7e681c0749..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/WrappingGridView.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.ui.view; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewGroup; -import android.widget.GridView; - -public class WrappingGridView extends GridView { - - public WrappingGridView(Context context) { - super(context); - } - - public WrappingGridView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public WrappingGridView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int heightSpec = heightMeasureSpec; - if (getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT) { - heightSpec = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, View.MeasureSpec.AT_MOST); - } - - super.onMeasure(widthMeasureSpec, heightSpec); - } - -} \ No newline at end of file diff --git a/Clover/app/src/main/java/org/floens/chan/utils/AndroidUtils.java b/Clover/app/src/main/java/org/floens/chan/utils/AndroidUtils.java deleted file mode 100644 index 8cd83a67b4..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/utils/AndroidUtils.java +++ /dev/null @@ -1,491 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.utils; - -import android.annotation.SuppressLint; -import android.annotation.TargetApi; -import android.app.Activity; -import android.app.Application; -import android.app.Dialog; -import android.content.ActivityNotFoundException; -import android.content.ComponentName; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.graphics.Typeface; -import android.graphics.drawable.Drawable; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; -import android.net.Uri; -import android.os.Build; -import android.os.Handler; -import android.os.Looper; -import android.preference.PreferenceManager; -import android.support.customtabs.CustomTabsIntent; -import android.support.design.widget.Snackbar; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewTreeObserver; -import android.view.inputmethod.InputMethodManager; -import android.widget.TextView; -import android.widget.Toast; -import android.view.animation.AccelerateDecelerateInterpolator; -import android.view.animation.ScaleAnimation; - -import org.floens.chan.R; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; - -import static org.floens.chan.ui.theme.ThemeHelper.theme; - -public class AndroidUtils { - private static final String TAG = "AndroidUtils"; - - private static HashMap typefaceCache = new HashMap<>(); - - public static Typeface ROBOTO_MEDIUM; - public static Typeface ROBOTO_MEDIUM_ITALIC; - public static Typeface ROBOTO_CONDENSED_REGULAR; - - @SuppressLint("StaticFieldLeak") - private static Application application; - private static ConnectivityManager connectivityManager; - - private static final Handler mainHandler = new Handler(Looper.getMainLooper()); - - public static void init(Application application) { - if (AndroidUtils.application == null) { - AndroidUtils.application = application; - - ROBOTO_MEDIUM = getTypeface("Roboto-Medium.ttf"); - ROBOTO_MEDIUM_ITALIC = getTypeface("Roboto-MediumItalic.ttf"); - ROBOTO_CONDENSED_REGULAR = getTypeface("RobotoCondensed-Regular.ttf"); - - connectivityManager = (ConnectivityManager) - application.getSystemService(Context.CONNECTIVITY_SERVICE); - } - } - - public static Resources getRes() { - return application.getResources(); - } - - public static Context getAppContext() { - return application; - } - - public static String getString(int res) { - return getRes().getString(res); - } - - public static SharedPreferences getPreferences() { - return PreferenceManager.getDefaultSharedPreferences(application); - } - - public static SharedPreferences getPreferences(Application application) { - return PreferenceManager.getDefaultSharedPreferences(application); - } - - public static SharedPreferences getPreferences(String name) { - return application.getSharedPreferences(name, Context.MODE_PRIVATE); - } - - /** - * Tries to open an app that can open the specified URL.
- * If this app will open the link then show a chooser to the user without this app.
- * Else allow the default logic to run with startActivity. - * - * @param link url to open - */ - public static void openLink(String link) { - PackageManager pm = getAppContext().getPackageManager(); - - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(link)); - - ComponentName resolvedActivity = intent.resolveActivity(pm); - if (resolvedActivity == null) { - openIntentFailed(); - } else { - boolean thisAppIsDefault = resolvedActivity.getPackageName().equals(getAppContext().getPackageName()); - if (!thisAppIsDefault) { - openIntent(intent); - } else { - // Get all intents that match, and filter out this app - List resolveInfos = pm.queryIntentActivities(intent, 0); - List filteredIntents = new ArrayList<>(resolveInfos.size()); - for (ResolveInfo info : resolveInfos) { - if (!info.activityInfo.packageName.equals(getAppContext().getPackageName())) { - Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(link)); - i.setPackage(info.activityInfo.packageName); - filteredIntents.add(i); - } - } - - if (filteredIntents.size() > 0) { - // Create a chooser for the last app in the list, and add the rest with EXTRA_INITIAL_INTENTS that get placed above - Intent chooser = Intent.createChooser(filteredIntents.remove(filteredIntents.size() - 1), null); - chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, filteredIntents.toArray(new Intent[filteredIntents.size()])); - openIntent(chooser); - } else { - openIntentFailed(); - } - } - } - } - - public static void openLinkInBrowser(Activity activity, String link) { - // Hack that's sort of the same as openLink - // The link won't be opened in a custom tab if this app is the default handler for that link. - // Manually check if this app opens it instead of a custom tab, and use the logic of - // openLink to avoid that and show a chooser instead. - boolean openWithCustomTabs = true; - Intent urlIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(link)); - PackageManager pm = getAppContext().getPackageManager(); - ComponentName resolvedActivity = urlIntent.resolveActivity(pm); - if (resolvedActivity != null) { - openWithCustomTabs = !resolvedActivity.getPackageName().equals(getAppContext().getPackageName()); - } - - if (openWithCustomTabs) { - CustomTabsIntent tabsIntent = new CustomTabsIntent.Builder() - .setToolbarColor(theme().primaryColor.color) - .build(); - try { - tabsIntent.launchUrl(activity, Uri.parse(link)); - } catch (ActivityNotFoundException e) { - // Can't check it beforehand so catch the exception - openIntentFailed(); - } - } else { - openLink(link); - } - } - - public static void shareLink(String link) { - Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_TEXT, link); - Intent chooser = Intent.createChooser(intent, getRes().getString(R.string.action_share)); - openIntent(chooser); - } - - public static void openIntent(Intent intent) { - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - if (intent.resolveActivity(getAppContext().getPackageManager()) != null) { - getAppContext().startActivity(intent); - } else { - openIntentFailed(); - } - } - - private static void openIntentFailed() { - Toast.makeText(getAppContext(), R.string.open_link_failed, Toast.LENGTH_LONG).show(); - } - - public static int getAttrColor(Context context, int attr) { - TypedArray typedArray = context.getTheme().obtainStyledAttributes(new int[]{attr}); - int color = typedArray.getColor(0, 0); - typedArray.recycle(); - return color; - } - - public static Drawable getAttrDrawable(Context context, int attr) { - TypedArray typedArray = context.obtainStyledAttributes(new int[]{attr}); - Drawable drawable = typedArray.getDrawable(0); - typedArray.recycle(); - return drawable; - } - - public static boolean isTablet(Context context) { - return context.getResources().getBoolean(R.bool.is_tablet); - } - - public static int getDimen(Context context, int dimen) { - return context.getResources().getDimensionPixelSize(dimen); - } - - public static int dp(float dp) { - return (int) (dp * getRes().getDisplayMetrics().density); - } - - public static int sp(float sp) { - return (int) (sp * getRes().getDisplayMetrics().scaledDensity); - } - - public static Typeface getTypeface(String name) { - if (!typefaceCache.containsKey(name)) { - Typeface typeface = Typeface.createFromAsset(getRes().getAssets(), "font/" + name); - typefaceCache.put(name, typeface); - } - return typefaceCache.get(name); - } - - /** - * Causes the runnable to be added to the message queue. The runnable will - * be run on the ui thread. - */ - public static void runOnUiThread(Runnable runnable) { - mainHandler.post(runnable); - } - - public static void runOnUiThread(Runnable runnable, long delay) { - mainHandler.postDelayed(runnable, delay); - } - - public static void requestKeyboardFocus(Dialog dialog, final View view) { - view.requestFocus(); - dialog.setOnShowListener(new DialogInterface.OnShowListener() { - @Override - public void onShow(DialogInterface dialog) { - requestKeyboardFocus(view); - } - }); - } - - public static void requestKeyboardFocus(final View view) { - InputMethodManager inputManager = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - inputManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); - } - - public static void hideKeyboard(View view) { - InputMethodManager inputManager = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0); - } - - public static void requestViewAndKeyboardFocus(View view) { - view.setFocusable(false); - view.setFocusableInTouchMode(true); - if (view.requestFocus()) { - InputMethodManager inputManager = - (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - inputManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); - } - } - - public static String getReadableFileSize(long bytes, boolean si) { - long unit = si ? 1000 : 1024; - if (bytes < unit) - return bytes + " B"; - int exp = (int) (Math.log(bytes) / Math.log(unit)); - String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp - 1) + (si ? "" : "i"); - return String.format(Locale.US, "%.1f %sB", bytes / Math.pow(unit, exp), pre); - } - - public static CharSequence ellipsize(CharSequence text, int max) { - if (text.length() <= max) { - return text; - } else { - return text.subSequence(0, max) + "\u2026"; - } - } - - public interface OnMeasuredCallback { - /** - * Called when the layout is done. - * - * @param view same view as the argument. - * @return true to continue with rendering, false to cancel and redo the layout. - */ - boolean onMeasured(View view); - } - - /** - * Waits for a measure. Calls callback immediately if the view width and height are more than 0. - * Otherwise it registers an onpredrawlistener. - * Warning: the view you give must be attached to the view root! - */ - public static void waitForMeasure(final View view, final OnMeasuredCallback callback) { - if (view.getWindowToken() == null) { - // If you call getViewTreeObserver on a view when it's not attached to a window will result in the creation of a temporarily viewtreeobserver. - // This is almost always not what you want. - throw new IllegalArgumentException("The view given to waitForMeasure is not attached to the window and does not have a ViewTreeObserver."); - } - - waitForLayoutInternal(true, view.getViewTreeObserver(), view, callback); - } - - /** - * Always registers an onpredrawlistener. - * Warning: the view you give must be attached to the view root! - */ - public static void waitForLayout(final View view, final OnMeasuredCallback callback) { - if (view.getWindowToken() == null) { - // See comment above - throw new IllegalArgumentException("The view given to waitForLayout is not attached to the window and does not have a ViewTreeObserver."); - } - - waitForLayoutInternal(false, view.getViewTreeObserver(), view, callback); - } - - /** - * Always registers an onpredrawlistener. The given ViewTreeObserver will be used. - */ - public static void waitForLayout(final ViewTreeObserver viewTreeObserver, final View view, final OnMeasuredCallback callback) { - waitForLayoutInternal(false, viewTreeObserver, view, callback); - } - - private static void waitForLayoutInternal(boolean returnIfNotZero, final ViewTreeObserver viewTreeObserver, final View view, final OnMeasuredCallback callback) { - int width = view.getWidth(); - int height = view.getHeight(); - - if (returnIfNotZero && width > 0 && height > 0) { - callback.onMeasured(view); - } else { - viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { - @Override - public boolean onPreDraw() { - ViewTreeObserver usingViewTreeObserver = viewTreeObserver; - if (viewTreeObserver != view.getViewTreeObserver()) { - Logger.e(TAG, "view.getViewTreeObserver() is another viewtreeobserver! replacing with the new one"); - usingViewTreeObserver = view.getViewTreeObserver(); - } - - if (usingViewTreeObserver.isAlive()) { - usingViewTreeObserver.removeOnPreDrawListener(this); - } else { - Logger.e(TAG, "ViewTreeObserver not alive, could not remove onPreDrawListener! This will probably not end well"); - } - - boolean ret; - try { - ret = callback.onMeasured(view); - } catch (Exception e) { - Logger.i(TAG, "Exception in onMeasured", e); - throw e; - } - - if (!ret) { - Logger.d(TAG, "waitForLayout requested a re-layout by returning false"); - } - - return ret; - } - }); - } - } - - public static void setRoundItemBackground(View view) { - if (isLollipop()) { - setRoundItemBackgroundLollipop(view); - } else { - view.setBackgroundResource(R.drawable.item_background); - } - } - - public static List findViewsById(ViewGroup root, int id) { - List views = new ArrayList<>(); - int childCount = root.getChildCount(); - for (int i = 0; i < childCount; i++) { - View child = root.getChildAt(i); - if (child instanceof ViewGroup) { - views.addAll(findViewsById((ViewGroup) child, id)); - } - - if (child.getId() == id) { - views.add(child); - } - } - - return views; - } - - public static boolean removeFromParentView(View view) { - if (view.getParent() instanceof ViewGroup && ((ViewGroup) view.getParent()).indexOfChild(view) >= 0) { - ((ViewGroup) view.getParent()).removeView(view); - return true; - } else { - return false; - } - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - private static void setRoundItemBackgroundLollipop(View view) { - view.setBackground(getAttrDrawable(view.getContext(), android.R.attr.selectableItemBackgroundBorderless)); - } - - public static boolean isLollipop() { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; - } - - public static void setElevation(View view, float elevation) { - if (isLollipop()) { - setElevationLollipop(view, elevation); - } - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - private static void setElevationLollipop(View view, float elevation) { - view.setElevation(elevation); - } - - public static void fixSnackbarText(Context context, Snackbar snackbar) { - ((TextView) snackbar.getView().findViewById(R.id.snackbar_text)).setTextColor(0xffffffff); - snackbar.setActionTextColor(getAttrColor(context, R.attr.colorAccent)); - } - - public static ConnectivityManager getConnectivityManager() { - return connectivityManager; - } - - public static boolean isConnected(int type) { - NetworkInfo networkInfo = connectivityManager.getNetworkInfo(type); - return networkInfo != null && networkInfo.isConnected(); - } - - public static void animateViewScale(View view, boolean zoomOut, int duration) { - ScaleAnimation scaleAnimation; - final float normalScale = 1.0f; - final float zoomOutScale = 0.8f; - - if (zoomOut) { - scaleAnimation = new ScaleAnimation( - normalScale, - zoomOutScale, - normalScale, - zoomOutScale, - ScaleAnimation.RELATIVE_TO_SELF, - 0.5f, - ScaleAnimation.RELATIVE_TO_SELF, - 0.5f); - } else { - scaleAnimation = new ScaleAnimation( - zoomOutScale, - normalScale, - zoomOutScale, - normalScale, - ScaleAnimation.RELATIVE_TO_SELF, - 0.5f, - ScaleAnimation.RELATIVE_TO_SELF, - 0.5f); - } - - scaleAnimation.setDuration(duration); - scaleAnimation.setFillAfter(true); - scaleAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); - - view.startAnimation(scaleAnimation); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/utils/BackgroundUtils.java b/Clover/app/src/main/java/org/floens/chan/utils/BackgroundUtils.java deleted file mode 100644 index db57cc5b13..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/utils/BackgroundUtils.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.utils; - -import android.os.Looper; - -import java.util.concurrent.Callable; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; - -public class BackgroundUtils { - - public static boolean isMainThread() { - return Thread.currentThread() == Looper.getMainLooper().getThread(); - } - - public static Cancelable runWithExecutor(Executor executor, final Callable background, - final BackgroundResult result) { - final AtomicBoolean cancelled = new AtomicBoolean(false); - Cancelable cancelable = new Cancelable() { - @Override - public void cancel() { - cancelled.set(true); - } - }; - - executor.execute(new Runnable() { - @Override - public void run() { - if (!cancelled.get()) { - try { - final T res = background.call(); - AndroidUtils.runOnUiThread(new Runnable() { - @Override - public void run() { - if (!cancelled.get()) { - result.onResult(res); - } - } - }); - } catch (final Exception e) { - AndroidUtils.runOnUiThread(new Runnable() { - @Override - public void run() { - throw new RuntimeException(e); - } - }); - } - } - } - }); - - return cancelable; - } - - public interface BackgroundResult { - void onResult(T result); - } - - public interface Cancelable { - void cancel(); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/utils/IOUtils.java b/Clover/app/src/main/java/org/floens/chan/utils/IOUtils.java deleted file mode 100644 index 76ed0c8e41..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/utils/IOUtils.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.utils; - - -import android.content.Context; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.Closeable; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.Reader; -import java.io.StringWriter; -import java.io.Writer; - -public class IOUtils { - private static final int DEFAULT_BUFFER_SIZE = 8192; - - public static String assetAsString(Context context, String assetName) { - String res = null; - try { - res = IOUtils.readString(context.getResources().getAssets().open(assetName)); - } catch (IOException ignored) { - } - return res; - } - - public static String readString(InputStream is) { - Reader sr = new InputStreamReader(is); - Writer sw = new StringWriter(); - - try { - copy(sr, sw); - } catch (IOException e) { - e.printStackTrace(); - } finally { - IOUtils.closeQuietly(sr); - IOUtils.closeQuietly(sw); - } - - return sw.toString(); - } - - public static void closeQuietly(Closeable closeable) { - if (closeable != null) { - try { - closeable.close(); - } catch (IOException ignored) { - } - } - } - - public static void copy(InputStream is, OutputStream os) throws IOException { - int read; - byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; - while ((read = is.read(buffer)) != -1) { - os.write(buffer, 0, read); - } - } - - public static boolean copy(InputStream is, OutputStream os, long maxBytes) throws IOException { - long total = 0; - int read; - byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; - while ((read = is.read(buffer)) != -1) { - os.write(buffer, 0, read); - total += read; - if (total >= maxBytes) { - return false; - } - } - return true; - } - - public static void copy(Reader input, Writer output) throws IOException { - char[] buffer = new char[DEFAULT_BUFFER_SIZE]; - int read; - while ((read = input.read(buffer)) != -1) { - output.write(buffer, 0, read); - } - } - - /** - * Copies the {@link File} specified by {@code in} to {@code out}. - * Both streams are always closed. - * - * @param in input file - * @param out output file - * @throws IOException thrown on copy exceptions. - */ - public static void copyFile(File in, File out) throws IOException { - InputStream is = null; - OutputStream os = null; - try { - copy(is = new BufferedInputStream(new FileInputStream(in)), - os = new BufferedOutputStream(new FileOutputStream(out))); - } finally { - IOUtils.closeQuietly(is); - IOUtils.closeQuietly(os); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/utils/ImageDecoder.java b/Clover/app/src/main/java/org/floens/chan/utils/ImageDecoder.java deleted file mode 100644 index be6bf4f66b..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/utils/ImageDecoder.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.utils; - -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; - -/** - * Simple ImageDecoder. Taken from Volley ImageRequest. - */ -public class ImageDecoder { - public static void decodeFileOnBackgroundThread(final File file, final int maxWidth, final int maxHeight, final ImageDecoderCallback callback) { - Thread thread = new Thread(new Runnable() { - @Override - public void run() { - final Bitmap bitmap = decodeFile(file, maxWidth, maxHeight); - - AndroidUtils.runOnUiThread(new Runnable() { - @Override - public void run() { - callback.onImageBitmap(file, bitmap); - } - }); - } - }); - thread.start(); - } - - public interface ImageDecoderCallback { - void onImageBitmap(File file, Bitmap bitmap); - } - - public static Bitmap decodeFile(File file, int maxWidth, int maxHeight) { - if (!file.exists()) - return null; - - FileInputStream fis; - - try { - fis = new FileInputStream(file); - } catch (FileNotFoundException e) { - e.printStackTrace(); - return null; - } - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - Bitmap bitmap = null; - - try { - IOUtils.copy(fis, baos); - bitmap = decode(baos.toByteArray(), maxWidth, maxHeight); - } catch (IOException | OutOfMemoryError e) { - e.printStackTrace(); - } finally { - IOUtils.closeQuietly(fis); - IOUtils.closeQuietly(baos); - } - - return bitmap; - } - - public static Bitmap decode(byte[] data, int maxWidth, int maxHeight) { - BitmapFactory.Options decodeOptions = new BitmapFactory.Options(); - Bitmap bitmap; - - // If we have to resize this image, first get the natural bounds. - decodeOptions.inJustDecodeBounds = true; - BitmapFactory.decodeByteArray(data, 0, data.length, decodeOptions); - int actualWidth = decodeOptions.outWidth; - int actualHeight = decodeOptions.outHeight; - - // Then compute the dimensions we would ideally like to decode to. - int desiredWidth = getResizedDimension(maxWidth, maxHeight, actualWidth, actualHeight); - int desiredHeight = getResizedDimension(maxHeight, maxWidth, actualHeight, actualWidth); - - // Decode to the nearest power of two scaling factor. - decodeOptions.inJustDecodeBounds = false; - - // decodeOptions.inPreferQualityOverSpeed = PREFER_QUALITY_OVER_SPEED; - decodeOptions.inSampleSize = findBestSampleSize(actualWidth, actualHeight, desiredWidth, desiredHeight); - Bitmap tempBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, decodeOptions); - - // If necessary, scale down to the maximal acceptable size. - if (tempBitmap != null && (tempBitmap.getWidth() > desiredWidth || tempBitmap.getHeight() > desiredHeight)) { - bitmap = Bitmap.createScaledBitmap(tempBitmap, desiredWidth, desiredHeight, true); - tempBitmap.recycle(); - } else { - bitmap = tempBitmap; - } - - return bitmap; - } - - private static int getResizedDimension(int maxPrimary, int maxSecondary, int actualPrimary, int actualSecondary) { - // If no dominant value at all, just return the actual. - if (maxPrimary == 0 && maxSecondary == 0) { - return actualPrimary; - } - - // If primary is unspecified, scale primary to match secondary's scaling ratio. - if (maxPrimary == 0) { - double ratio = (double) maxSecondary / (double) actualSecondary; - return (int) (actualPrimary * ratio); - } - - if (maxSecondary == 0) { - return maxPrimary; - } - - double ratio = (double) actualSecondary / (double) actualPrimary; - int resized = maxPrimary; - if (resized * ratio > maxSecondary) { - resized = (int) (maxSecondary / ratio); - } - return resized; - } - - private static int findBestSampleSize(int actualWidth, int actualHeight, int desiredWidth, int desiredHeight) { - double wr = (double) actualWidth / desiredWidth; - double hr = (double) actualHeight / desiredHeight; - double ratio = Math.min(wr, hr); - float n = 1.0f; - while ((n * 2) <= ratio) { - n *= 2; - } - - return (int) n; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/utils/LocaleUtils.java b/Clover/app/src/main/java/org/floens/chan/utils/LocaleUtils.java deleted file mode 100644 index 44f268121f..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/utils/LocaleUtils.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.floens.chan.utils; - -import android.annotation.TargetApi; -import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.os.Build; - -import org.floens.chan.core.settings.ChanSettings; - -import java.util.Locale; - -public class LocaleUtils { - public static void overrideLocaleToEnglishIfNeeded(Context context) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && - ChanSettings.forceEnglishLocale.get()) { - setLocaleToEnglish(context); - } - } - - @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) - private static void setLocaleToEnglish(Context context) { - Resources resources = context.getResources(); - Configuration configuration = resources.getConfiguration(); - - configuration.setLocale(Locale.ENGLISH); - - resources.updateConfiguration(configuration, resources.getDisplayMetrics()); - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/utils/Logger.java b/Clover/app/src/main/java/org/floens/chan/utils/Logger.java deleted file mode 100644 index 04991109d4..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/utils/Logger.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.utils; - -import android.util.Log; - -import org.floens.chan.ChanBuild; - -public class Logger { - private static final String TAG = "Clover"; - private static final String TAG_SPACER = " | "; - - public static boolean debugEnabled() { - return ChanBuild.DEVELOPER_MODE; - } - - public static void v(String tag, String message) { - if (debugEnabled()) { - Log.v(TAG + TAG_SPACER + tag, message); - } - } - - public static void v(String tag, String message, Throwable throwable) { - if (debugEnabled()) { - Log.v(TAG + TAG_SPACER + tag, message, throwable); - } - } - - public static void v(String tag, String format, Object... args) { - if (debugEnabled()) { - Log.v(TAG + TAG_SPACER + tag, String.format(format, args)); - } - } - - public static void d(String tag, String message) { - if (debugEnabled()) { - Log.d(TAG + TAG_SPACER + tag, message); - } - } - - public static void d(String tag, String message, Throwable throwable) { - if (debugEnabled()) { - Log.d(TAG + TAG_SPACER + tag, message, throwable); - } - } - - public static void d(String tag, String format, Object... args) { - if (debugEnabled()) { - Log.d(TAG + TAG_SPACER + tag, String.format(format, args)); - } - } - - public static void i(String tag, String message) { - Log.i(TAG + TAG_SPACER + tag, message); - } - - public static void i(String tag, String message, Throwable throwable) { - Log.i(TAG + TAG_SPACER + tag, message, throwable); - } - - public static void i(String tag, String format, Object... args) { - Log.i(TAG + TAG_SPACER + tag, String.format(format, args)); - } - - public static void w(String tag, String message) { - Log.w(TAG + TAG_SPACER + tag, message); - } - - public static void w(String tag, String message, Throwable throwable) { - Log.w(TAG + TAG_SPACER + tag, message, throwable); - } - - public static void w(String tag, String format, Object... args) { - Log.w(TAG + TAG_SPACER + tag, String.format(format, args)); - } - - public static void e(String tag, String message) { - Log.e(TAG + TAG_SPACER + tag, message); - } - - public static void e(String tag, String message, Throwable throwable) { - Log.e(TAG + TAG_SPACER + tag, message, throwable); - } - - public static void e(String tag, String format, Object... args) { - Log.e(TAG + TAG_SPACER + tag, String.format(format, args)); - } - - public static void wtf(String tag, String message) { - Log.wtf(TAG + TAG_SPACER + tag, message); - } - - public static void wtf(String tag, String message, Throwable throwable) { - Log.wtf(TAG + TAG_SPACER + tag, message, throwable); - } - - public static void wtf(String tag, String format, Object... args) { - Log.wtf(TAG + TAG_SPACER + tag, String.format(format, args)); - } - - public static void test(String message) { - if (debugEnabled()) { - Log.i(TAG + TAG_SPACER + "test", message); - } - } - - public static void test(String message, Throwable throwable) { - if (debugEnabled()) { - Log.i(TAG + TAG_SPACER + "test", message, throwable); - } - } - - public static void test(String format, Object... args) { - if (debugEnabled()) { - Log.i(TAG + TAG_SPACER + "test", String.format(format, args)); - } - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/utils/RecyclerUtils.java b/Clover/app/src/main/java/org/floens/chan/utils/RecyclerUtils.java deleted file mode 100644 index 26d55b9299..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/utils/RecyclerUtils.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.utils; - -import android.support.v7.widget.RecyclerView; -import android.view.View; - -import java.lang.reflect.Field; - -public class RecyclerUtils { - private static final String TAG = "RecyclerUtils"; - - public static void clearRecyclerCache(RecyclerView recyclerView) { - try { - Field field = RecyclerView.class.getDeclaredField("mRecycler"); - field.setAccessible(true); - RecyclerView.Recycler recycler = (RecyclerView.Recycler) field.get(recyclerView); - recycler.clear(); - } catch (Exception e) { - Logger.e(TAG, "Error clearing RecyclerView cache with reflection", e); - } - } - - public static int[] getIndexAndTop(RecyclerView recyclerView) { - int index = 0, top = 0; - if (recyclerView.getLayoutManager().getChildCount() > 0) { - View topChild = recyclerView.getLayoutManager().getChildAt(0); - index = ((RecyclerView.LayoutParams) topChild.getLayoutParams()).getViewLayoutPosition(); - RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) topChild.getLayoutParams(); - RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); - top = layoutManager.getDecoratedTop(topChild) - params.topMargin - recyclerView.getPaddingTop(); - } - return new int[]{index, top}; - } -} diff --git a/Clover/app/src/main/java/org/floens/chan/utils/Time.java b/Clover/app/src/main/java/org/floens/chan/utils/Time.java deleted file mode 100644 index ea7323b647..0000000000 --- a/Clover/app/src/main/java/org/floens/chan/utils/Time.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.utils; - -public class Time { - public static long get() { - return System.currentTimeMillis(); - } - - public static long startTiming() { - return System.nanoTime(); - } - - public static void endTiming(String tag, long start) { - Logger.v("Timer", tag + " took " + ((System.nanoTime() - start) / 1_000_000.0) + "ms"); - } -} diff --git a/Clover/app/src/main/res/anim/menu_overflow_shake.xml b/Clover/app/src/main/res/anim/menu_overflow_shake.xml deleted file mode 100644 index df8203deac..0000000000 --- a/Clover/app/src/main/res/anim/menu_overflow_shake.xml +++ /dev/null @@ -1,25 +0,0 @@ - - diff --git a/Clover/app/src/main/res/drawable-hdpi/dialog_full_dark.9.png b/Clover/app/src/main/res/drawable-hdpi/dialog_full_dark.9.png deleted file mode 100644 index 911f3fee41..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/dialog_full_dark.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/dialog_full_light.9.png b/Clover/app/src/main/res/drawable-hdpi/dialog_full_light.9.png deleted file mode 100644 index 2129567f2f..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/dialog_full_light.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/drawer_shadow.9.png b/Clover/app/src/main/res/drawable-hdpi/drawer_shadow.9.png deleted file mode 100644 index 236bff558a..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/drawer_shadow.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_action_pause.png b/Clover/app/src/main/res/drawable-hdpi/ic_action_pause.png deleted file mode 100644 index 535ad58b38..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_action_pause.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_add_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_add_black_24dp.png deleted file mode 100644 index c04b523c48..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_add_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_add_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_add_white_24dp.png deleted file mode 100644 index 481643ecd5..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_add_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_arrow_back_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_arrow_back_black_24dp.png deleted file mode 100644 index da807e9962..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_arrow_back_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_arrow_back_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_arrow_back_white_24dp.png deleted file mode 100644 index a2051cef9e..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_arrow_back_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_arrow_forward_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_arrow_forward_black_24dp.png deleted file mode 100644 index 252342d3d7..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_arrow_forward_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_bookmark_outline_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_bookmark_outline_white_24dp.png deleted file mode 100644 index 8b0c16c240..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_bookmark_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_bookmark_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_bookmark_white_24dp.png deleted file mode 100644 index 9de15c51a9..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_bookmark_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_check_circle_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_check_circle_white_24dp.png deleted file mode 100644 index 74efe26345..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_check_circle_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_clear_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_clear_black_24dp.png deleted file mode 100644 index 1a9cd75a0d..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_clear_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_clear_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_clear_white_24dp.png deleted file mode 100644 index ceb1a1eebf..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_clear_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_create_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_create_white_24dp.png deleted file mode 100644 index d3ff58dccd..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_create_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_done_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_done_black_24dp.png deleted file mode 100644 index d4c06072b5..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_done_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_done_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_done_white_24dp.png deleted file mode 100644 index c278b6c2b3..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_done_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_expand_less_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_expand_less_black_24dp.png deleted file mode 100644 index 57139a78ae..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_expand_less_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_expand_more_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_expand_more_black_24dp.png deleted file mode 100644 index 9625f148f8..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_expand_more_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_file_download_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_file_download_white_24dp.png deleted file mode 100644 index c8a2039c58..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_file_download_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_help_outline_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_help_outline_black_24dp.png deleted file mode 100644 index 314154a08e..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_help_outline_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_help_outline_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_help_outline_white_24dp.png deleted file mode 100644 index 4bc2a96383..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_help_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_history_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_history_black_24dp.png deleted file mode 100644 index b74e2899c7..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_history_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_history_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_history_white_24dp.png deleted file mode 100644 index 703d30b925..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_history_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_image_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_image_black_24dp.png deleted file mode 100644 index 52c7887465..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_image_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_image_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_image_white_24dp.png deleted file mode 100644 index b414cf5b68..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_image_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_more_vert_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_more_vert_white_24dp.png deleted file mode 100644 index 67f07e4734..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_more_vert_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_overflow.png b/Clover/app/src/main/res/drawable-hdpi/ic_overflow.png deleted file mode 100644 index 175e73f211..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_overflow.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_overflow_black.png b/Clover/app/src/main/res/drawable-hdpi/ic_overflow_black.png deleted file mode 100644 index b7f19c7211..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_overflow_black.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_24dp.png deleted file mode 100644 index 1c01ac65f2..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_48dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_48dp.png deleted file mode 100644 index 9d10dc5175..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_48dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_playlist_add_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_playlist_add_black_24dp.png deleted file mode 100644 index 731b425906..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_playlist_add_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_playlist_add_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_playlist_add_white_24dp.png deleted file mode 100644 index 4fb76e1784..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_playlist_add_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_radio_button_unchecked_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_radio_button_unchecked_white_24dp.png deleted file mode 100644 index 413fc171b8..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_radio_button_unchecked_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_refresh_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_refresh_black_24dp.png deleted file mode 100644 index 9d94c39c84..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_refresh_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_refresh_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_refresh_white_24dp.png deleted file mode 100644 index ffa7be9337..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_refresh_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_reorder_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_reorder_black_24dp.png deleted file mode 100644 index 142d71505c..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_reorder_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_search_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_search_white_24dp.png deleted file mode 100644 index bbfbc96cbc..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_search_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_select_all_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_select_all_white_24dp.png deleted file mode 100644 index 2d971a94bf..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_select_all_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_send_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_send_black_24dp.png deleted file mode 100644 index 7be098fdea..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_send_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_send_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_send_white_24dp.png deleted file mode 100644 index 0f00172014..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_send_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_settings_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_settings_black_24dp.png deleted file mode 100644 index acf1ddf85b..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_settings_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png deleted file mode 100644 index 97ded33b55..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_subdirectory_arrow_left_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_subdirectory_arrow_left_white_24dp.png deleted file mode 100644 index 0d9f5a623a..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_subdirectory_arrow_left_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_task_description.png b/Clover/app/src/main/res/drawable-hdpi/ic_task_description.png deleted file mode 100644 index 5440da70d1..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_task_description.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_view_list_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_view_list_24dp.png deleted file mode 100644 index c031adccfe..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_view_list_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_view_module_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_view_module_24dp.png deleted file mode 100644 index dd64ea982c..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_view_module_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_volume_off_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_volume_off_white_24dp.png deleted file mode 100644 index ce0c214274..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_volume_off_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_volume_up_white_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_volume_up_white_24dp.png deleted file mode 100644 index 57d787163e..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/ic_volume_up_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-hdpi/panel_shadow.9.png b/Clover/app/src/main/res/drawable-hdpi/panel_shadow.9.png deleted file mode 100644 index 19ae66300e..0000000000 Binary files a/Clover/app/src/main/res/drawable-hdpi/panel_shadow.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/dialog_full_dark.9.png b/Clover/app/src/main/res/drawable-mdpi/dialog_full_dark.9.png deleted file mode 100644 index dc37316094..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/dialog_full_dark.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/dialog_full_light.9.png b/Clover/app/src/main/res/drawable-mdpi/dialog_full_light.9.png deleted file mode 100644 index 0c5770a36f..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/dialog_full_light.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/drawer_shadow.9.png b/Clover/app/src/main/res/drawable-mdpi/drawer_shadow.9.png deleted file mode 100644 index ffe3a28d77..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/drawer_shadow.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_action_pause.png b/Clover/app/src/main/res/drawable-mdpi/ic_action_pause.png deleted file mode 100644 index ffa113372a..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_action_pause.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_add_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_add_black_24dp.png deleted file mode 100644 index 23bf119211..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_add_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_add_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_add_white_24dp.png deleted file mode 100644 index 977dd3427a..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_add_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_arrow_back_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_arrow_back_black_24dp.png deleted file mode 100644 index ad3883098a..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_arrow_back_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_arrow_back_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_arrow_back_white_24dp.png deleted file mode 100644 index d571552fb9..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_arrow_back_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_arrow_forward_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_arrow_forward_black_24dp.png deleted file mode 100644 index 52dd7b042b..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_arrow_forward_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_bookmark_outline_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_bookmark_outline_white_24dp.png deleted file mode 100644 index 9842707619..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_bookmark_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_bookmark_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_bookmark_white_24dp.png deleted file mode 100644 index 84f16627dc..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_bookmark_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_check_circle_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_check_circle_white_24dp.png deleted file mode 100644 index 29469f5b7a..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_check_circle_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_chevron_left_black_24dp.xml b/Clover/app/src/main/res/drawable-mdpi/ic_chevron_left_black_24dp.xml deleted file mode 100644 index 08e55e315c..0000000000 --- a/Clover/app/src/main/res/drawable-mdpi/ic_chevron_left_black_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_clear_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_clear_black_24dp.png deleted file mode 100644 index 40a1a84e34..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_clear_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_clear_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_clear_white_24dp.png deleted file mode 100644 index af7f8288da..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_clear_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_create_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_create_white_24dp.png deleted file mode 100644 index 12b09f1d9b..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_create_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_done_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_done_black_24dp.png deleted file mode 100644 index 5e5e7cf2b1..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_done_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_done_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_done_white_24dp.png deleted file mode 100644 index 6d84e1431b..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_done_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_expand_less_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_expand_less_black_24dp.png deleted file mode 100644 index 08c16a328a..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_expand_less_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_expand_more_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_expand_more_black_24dp.png deleted file mode 100644 index feb85a775d..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_expand_more_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_file_download_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_file_download_white_24dp.png deleted file mode 100644 index d400472fd6..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_file_download_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_help_outline_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_help_outline_black_24dp.png deleted file mode 100644 index 9eb8f36ca3..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_help_outline_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_help_outline_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_help_outline_white_24dp.png deleted file mode 100644 index 1e5dde767e..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_help_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_history_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_history_black_24dp.png deleted file mode 100644 index e77a077ae6..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_history_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_history_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_history_white_24dp.png deleted file mode 100644 index b3000d31ea..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_history_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_image_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_image_black_24dp.png deleted file mode 100644 index 377ce13318..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_image_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_image_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_image_white_24dp.png deleted file mode 100644 index d474bd577d..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_image_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_more_vert_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_more_vert_white_24dp.png deleted file mode 100644 index 017e45edec..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_more_vert_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_overflow.png b/Clover/app/src/main/res/drawable-mdpi/ic_overflow.png deleted file mode 100644 index 7499b7379a..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_overflow.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_overflow_black.png b/Clover/app/src/main/res/drawable-mdpi/ic_overflow_black.png deleted file mode 100644 index 9d573fa069..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_overflow_black.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_24dp.png deleted file mode 100644 index d84427ba92..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_48dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_48dp.png deleted file mode 100644 index 83eaf70d1d..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_48dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_playlist_add_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_playlist_add_black_24dp.png deleted file mode 100644 index d7a7514a84..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_playlist_add_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_playlist_add_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_playlist_add_white_24dp.png deleted file mode 100644 index 73c9812858..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_playlist_add_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_radio_button_unchecked_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_radio_button_unchecked_white_24dp.png deleted file mode 100644 index e74f040b58..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_radio_button_unchecked_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_refresh_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_refresh_black_24dp.png deleted file mode 100644 index c82efd5f5f..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_refresh_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_refresh_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_refresh_white_24dp.png deleted file mode 100644 index 97e42b5251..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_refresh_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_reorder_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_reorder_black_24dp.png deleted file mode 100644 index d18997cd48..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_reorder_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_search_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_search_white_24dp.png deleted file mode 100644 index faefc59c8e..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_search_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_select_all_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_select_all_white_24dp.png deleted file mode 100644 index 966938b9d8..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_select_all_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_send_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_send_black_24dp.png deleted file mode 100644 index 83156aa38f..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_send_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_send_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_send_white_24dp.png deleted file mode 100644 index 048d3eb29d..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_send_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_settings_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_settings_black_24dp.png deleted file mode 100644 index c59419c02b..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_settings_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png deleted file mode 100644 index 8909c35536..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_subdirectory_arrow_left_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_subdirectory_arrow_left_white_24dp.png deleted file mode 100644 index 3502e62c26..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_subdirectory_arrow_left_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_task_description.png b/Clover/app/src/main/res/drawable-mdpi/ic_task_description.png deleted file mode 100644 index 0b1dd80d02..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_task_description.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_view_list_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_view_list_24dp.png deleted file mode 100644 index b90d335f9a..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_view_list_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_view_module_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_view_module_24dp.png deleted file mode 100644 index 538b8f23b7..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_view_module_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_volume_off_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_volume_off_white_24dp.png deleted file mode 100644 index 4681ec141a..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_volume_off_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_volume_up_white_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_volume_up_white_24dp.png deleted file mode 100644 index 7cfd4c7b88..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/ic_volume_up_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-mdpi/panel_shadow.9.png b/Clover/app/src/main/res/drawable-mdpi/panel_shadow.9.png deleted file mode 100644 index e104117f45..0000000000 Binary files a/Clover/app/src/main/res/drawable-mdpi/panel_shadow.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-v21/item_background.xml b/Clover/app/src/main/res/drawable-v21/item_background.xml deleted file mode 100644 index cb4fda2014..0000000000 --- a/Clover/app/src/main/res/drawable-v21/item_background.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - diff --git a/Clover/app/src/main/res/drawable-xhdpi/dialog_full_dark.9.png b/Clover/app/src/main/res/drawable-xhdpi/dialog_full_dark.9.png deleted file mode 100644 index 75d36be33a..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/dialog_full_dark.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/dialog_full_light.9.png b/Clover/app/src/main/res/drawable-xhdpi/dialog_full_light.9.png deleted file mode 100644 index d9bd3375fd..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/dialog_full_light.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png b/Clover/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png deleted file mode 100644 index fabe9d9656..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_action_pause.png b/Clover/app/src/main/res/drawable-xhdpi/ic_action_pause.png deleted file mode 100644 index b02cf9093c..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_action_pause.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_add_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_add_black_24dp.png deleted file mode 100644 index 3191d5283e..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_add_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_add_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_add_white_24dp.png deleted file mode 100644 index 67042105d2..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_add_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_arrow_back_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_arrow_back_black_24dp.png deleted file mode 100644 index 684272536b..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_arrow_back_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_arrow_back_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_arrow_back_white_24dp.png deleted file mode 100644 index ce5b878b0f..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_arrow_back_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_arrow_forward_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_arrow_forward_black_24dp.png deleted file mode 100644 index 27767f1326..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_arrow_forward_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_bookmark_outline_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_bookmark_outline_white_24dp.png deleted file mode 100644 index e42e09fa24..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_bookmark_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_bookmark_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_bookmark_white_24dp.png deleted file mode 100644 index 872349cca6..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_bookmark_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_check_circle_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_check_circle_white_24dp.png deleted file mode 100644 index 4c233ae9f0..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_check_circle_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_clear_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_clear_black_24dp.png deleted file mode 100644 index 6bc437298a..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_clear_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_clear_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_clear_white_24dp.png deleted file mode 100644 index b7c7ffd0e7..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_clear_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_create_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_create_white_24dp.png deleted file mode 100644 index 5a06bff5a2..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_create_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_done_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_done_black_24dp.png deleted file mode 100644 index 64a4944f75..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_done_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_done_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_done_white_24dp.png deleted file mode 100644 index 3b2b65d262..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_done_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_expand_less_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_expand_less_black_24dp.png deleted file mode 100644 index 323360ead9..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_expand_less_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_expand_more_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_expand_more_black_24dp.png deleted file mode 100644 index d3ee65e9ab..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_expand_more_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_file_download_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_file_download_white_24dp.png deleted file mode 100644 index f53cc0c62c..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_file_download_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_help_outline_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_help_outline_black_24dp.png deleted file mode 100644 index 5fa59ee294..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_help_outline_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_help_outline_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_help_outline_white_24dp.png deleted file mode 100644 index e10918b867..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_help_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_history_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_history_black_24dp.png deleted file mode 100644 index 8e44d94fdd..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_history_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_history_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_history_white_24dp.png deleted file mode 100644 index e188d4a37f..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_history_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_image_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_image_black_24dp.png deleted file mode 100644 index 6b7cd7838b..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_image_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_image_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_image_white_24dp.png deleted file mode 100644 index 2642b9e09e..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_image_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_more_vert_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_more_vert_white_24dp.png deleted file mode 100644 index efab8a74f7..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_more_vert_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_overflow.png b/Clover/app/src/main/res/drawable-xhdpi/ic_overflow.png deleted file mode 100644 index e45da5dc95..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_overflow.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_overflow_black.png b/Clover/app/src/main/res/drawable-xhdpi/ic_overflow_black.png deleted file mode 100644 index 77e5c3d121..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_overflow_black.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png deleted file mode 100644 index 615b80d085..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_48dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_48dp.png deleted file mode 100644 index 3e2e2b810d..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_48dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_playlist_add_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_playlist_add_black_24dp.png deleted file mode 100644 index dc4ebe9f39..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_playlist_add_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_playlist_add_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_playlist_add_white_24dp.png deleted file mode 100644 index 52ccba0b2f..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_playlist_add_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_radio_button_unchecked_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_radio_button_unchecked_white_24dp.png deleted file mode 100644 index f1a967f9ba..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_radio_button_unchecked_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_refresh_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_refresh_black_24dp.png deleted file mode 100644 index 0b731280fd..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_refresh_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_refresh_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_refresh_white_24dp.png deleted file mode 100644 index 1989184b14..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_refresh_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_reorder_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_reorder_black_24dp.png deleted file mode 100644 index 0b080a1871..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_reorder_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_search_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_search_white_24dp.png deleted file mode 100644 index bfc3e39394..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_search_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_select_all_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_select_all_white_24dp.png deleted file mode 100644 index b99012a3b3..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_select_all_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_send_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_send_black_24dp.png deleted file mode 100644 index fd36be8b96..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_send_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_send_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_send_white_24dp.png deleted file mode 100644 index ef59e77678..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_send_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_settings_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_settings_black_24dp.png deleted file mode 100644 index e84e188a1d..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_settings_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png deleted file mode 100644 index 5caedc8e57..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_subdirectory_arrow_left_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_subdirectory_arrow_left_white_24dp.png deleted file mode 100644 index 5424e971eb..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_subdirectory_arrow_left_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_task_description.png b/Clover/app/src/main/res/drawable-xhdpi/ic_task_description.png deleted file mode 100644 index fb4c17857b..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_task_description.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_view_list_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_view_list_24dp.png deleted file mode 100644 index 0e7f15a4b4..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_view_list_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_view_module_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_view_module_24dp.png deleted file mode 100644 index 3732eefa93..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_view_module_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_volume_off_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_volume_off_white_24dp.png deleted file mode 100644 index 732a1c0f4c..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_volume_off_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_volume_up_white_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_volume_up_white_24dp.png deleted file mode 100644 index 2ed00343b8..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/ic_volume_up_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/panel_shadow.9.png b/Clover/app/src/main/res/drawable-xhdpi/panel_shadow.9.png deleted file mode 100644 index a702c6674d..0000000000 Binary files a/Clover/app/src/main/res/drawable-xhdpi/panel_shadow.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/dialog_full_dark.9.png b/Clover/app/src/main/res/drawable-xxhdpi/dialog_full_dark.9.png deleted file mode 100644 index b029809dfb..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/dialog_full_dark.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/dialog_full_light.9.png b/Clover/app/src/main/res/drawable-xxhdpi/dialog_full_light.9.png deleted file mode 100644 index 63dd1927de..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/dialog_full_light.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png b/Clover/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png deleted file mode 100644 index b91e9d7f28..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_action_pause.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_action_pause.png deleted file mode 100644 index 293f7127dd..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_action_pause.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_add_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_add_black_24dp.png deleted file mode 100644 index a84106b01f..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_add_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_add_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_add_white_24dp.png deleted file mode 100644 index 72cedcad4f..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_add_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_arrow_back_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_arrow_back_black_24dp.png deleted file mode 100644 index fa432c232d..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_arrow_back_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png deleted file mode 100644 index 746d77579c..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_arrow_forward_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_arrow_forward_black_24dp.png deleted file mode 100644 index a124259898..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_arrow_forward_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_bookmark_outline_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_bookmark_outline_white_24dp.png deleted file mode 100644 index 6ed27a24f4..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_bookmark_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_bookmark_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_bookmark_white_24dp.png deleted file mode 100644 index 3faff90bb2..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_bookmark_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_check_circle_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_check_circle_white_24dp.png deleted file mode 100644 index 542a64b312..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_check_circle_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_clear_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_clear_black_24dp.png deleted file mode 100644 index 51b4401ca0..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_clear_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_clear_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_clear_white_24dp.png deleted file mode 100644 index 6b717e0dda..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_clear_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_create_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_create_white_24dp.png deleted file mode 100644 index 02e19d0457..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_create_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_done_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_done_black_24dp.png deleted file mode 100644 index c9c0174109..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_done_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_done_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_done_white_24dp.png deleted file mode 100644 index 0ebb55559b..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_done_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_expand_less_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_expand_less_black_24dp.png deleted file mode 100644 index ee92f4ecd4..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_expand_less_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_expand_more_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_expand_more_black_24dp.png deleted file mode 100644 index 5cd142c1d3..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_expand_more_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_file_download_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_file_download_white_24dp.png deleted file mode 100644 index 78aa591668..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_file_download_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_folder_black_24dp.xml b/Clover/app/src/main/res/drawable-xxhdpi/ic_folder_black_24dp.xml deleted file mode 100644 index 714360d0f2..0000000000 --- a/Clover/app/src/main/res/drawable-xxhdpi/ic_folder_black_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_help_outline_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_help_outline_black_24dp.png deleted file mode 100644 index dc5cdeebee..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_help_outline_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_help_outline_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_help_outline_white_24dp.png deleted file mode 100644 index e9585a0441..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_help_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_history_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_history_black_24dp.png deleted file mode 100644 index 18519ee5a2..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_history_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_history_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_history_white_24dp.png deleted file mode 100644 index f44df1afd6..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_history_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_image_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_image_black_24dp.png deleted file mode 100644 index 7297bd5d29..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_image_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_image_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_image_white_24dp.png deleted file mode 100644 index f9f1defa6d..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_image_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_more_vert_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_more_vert_white_24dp.png deleted file mode 100644 index d322813072..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_more_vert_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_overflow.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_overflow.png deleted file mode 100644 index 17dc0f2928..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_overflow.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_overflow_black.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_overflow_black.png deleted file mode 100644 index 61f33d2110..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_overflow_black.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png deleted file mode 100644 index 6e1b578c54..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_48dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_48dp.png deleted file mode 100644 index 2bcdf4f84b..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_48dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_playlist_add_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_playlist_add_black_24dp.png deleted file mode 100644 index af0bae3f07..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_playlist_add_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_playlist_add_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_playlist_add_white_24dp.png deleted file mode 100644 index 3f652366df..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_playlist_add_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_radio_button_unchecked_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_radio_button_unchecked_white_24dp.png deleted file mode 100644 index d1c733d2e8..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_radio_button_unchecked_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_refresh_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_refresh_black_24dp.png deleted file mode 100644 index 91187eb038..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_refresh_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_refresh_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_refresh_white_24dp.png deleted file mode 100644 index 1692d8a242..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_refresh_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_reorder_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_reorder_black_24dp.png deleted file mode 100644 index 0a66529bfe..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_reorder_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_search_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_search_white_24dp.png deleted file mode 100644 index abbb989510..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_search_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_select_all_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_select_all_white_24dp.png deleted file mode 100644 index 162ab9847a..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_select_all_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_send_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_send_black_24dp.png deleted file mode 100644 index 40b74ebc16..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_send_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_send_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_send_white_24dp.png deleted file mode 100644 index 1bc7552a96..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_send_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_settings_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_settings_black_24dp.png deleted file mode 100644 index 3023ff8daa..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_settings_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png deleted file mode 100644 index eabb0a2ba4..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_subdirectory_arrow_left_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_subdirectory_arrow_left_white_24dp.png deleted file mode 100644 index 6e57317d97..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_subdirectory_arrow_left_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_task_description.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_task_description.png deleted file mode 100644 index fb51e21bef..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_task_description.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_view_list_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_view_list_24dp.png deleted file mode 100644 index ccedde1410..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_view_list_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_view_module_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_view_module_24dp.png deleted file mode 100644 index 8d3af60235..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_view_module_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_volume_off_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_volume_off_white_24dp.png deleted file mode 100644 index 474aae51e0..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_volume_off_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_volume_up_white_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_volume_up_white_24dp.png deleted file mode 100644 index 2e751a40f5..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/ic_volume_up_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/panel_shadow.9.png b/Clover/app/src/main/res/drawable-xxhdpi/panel_shadow.9.png deleted file mode 100644 index 82091c3b6e..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxhdpi/panel_shadow.9.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_add_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_add_black_24dp.png deleted file mode 100644 index 3cb10924a0..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_add_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_add_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_add_white_24dp.png deleted file mode 100644 index 2bef059583..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_add_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_arrow_back_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_arrow_back_black_24dp.png deleted file mode 100644 index fb5235fb50..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_arrow_back_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png deleted file mode 100644 index fb06e1d485..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_arrow_forward_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_arrow_forward_black_24dp.png deleted file mode 100644 index 8b5a68183d..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_arrow_forward_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_bookmark_outline_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_bookmark_outline_white_24dp.png deleted file mode 100644 index 99db20fe60..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_bookmark_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_bookmark_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_bookmark_white_24dp.png deleted file mode 100644 index 370cf8af5c..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_bookmark_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_check_circle_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_check_circle_white_24dp.png deleted file mode 100644 index 816c590953..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_check_circle_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_clear_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_clear_black_24dp.png deleted file mode 100644 index df42feecb8..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_clear_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_clear_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_clear_white_24dp.png deleted file mode 100644 index 3964192192..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_clear_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_create_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_create_white_24dp.png deleted file mode 100644 index d6668a051c..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_create_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_done_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_done_black_24dp.png deleted file mode 100644 index 2f6d6386de..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_done_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_done_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_done_white_24dp.png deleted file mode 100644 index d670618c7e..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_done_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_expand_less_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_expand_less_black_24dp.png deleted file mode 100644 index 99c6e3e1c2..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_expand_less_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_expand_more_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_expand_more_black_24dp.png deleted file mode 100644 index ad852e3e6f..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_expand_more_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_file_download_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_file_download_white_24dp.png deleted file mode 100644 index ded5652e40..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_file_download_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_help_outline_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_help_outline_black_24dp.png deleted file mode 100644 index 2d3937d0b9..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_help_outline_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_help_outline_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_help_outline_white_24dp.png deleted file mode 100644 index 0f88a23638..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_help_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_history_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_history_black_24dp.png deleted file mode 100644 index 8a198153b3..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_history_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_history_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_history_white_24dp.png deleted file mode 100644 index 5b96af5b7a..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_history_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_image_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_image_black_24dp.png deleted file mode 100644 index ebe206ff7b..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_image_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_image_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_image_white_24dp.png deleted file mode 100644 index 2ffdb55f26..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_image_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_more_vert_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_more_vert_white_24dp.png deleted file mode 100644 index 2f2cb3d004..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_more_vert_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png deleted file mode 100644 index 516f643269..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_48dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_48dp.png deleted file mode 100644 index ca7ae6a020..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_48dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_black_24dp.png deleted file mode 100644 index 46020a7e04..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_white_24dp.png deleted file mode 100644 index 70e74e4a26..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_playlist_add_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_radio_button_unchecked_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_radio_button_unchecked_white_24dp.png deleted file mode 100644 index e32217db10..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_radio_button_unchecked_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_refresh_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_refresh_black_24dp.png deleted file mode 100644 index bcaba5f681..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_refresh_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_refresh_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_refresh_white_24dp.png deleted file mode 100644 index f5beca2511..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_refresh_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_reorder_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_reorder_black_24dp.png deleted file mode 100644 index 56a5bc8ba3..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_reorder_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_search_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_search_white_24dp.png deleted file mode 100644 index dd5adfc7f9..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_search_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_select_all_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_select_all_white_24dp.png deleted file mode 100644 index 896e1ac214..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_select_all_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_send_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_send_black_24dp.png deleted file mode 100644 index 761929f431..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_send_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_send_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_send_white_24dp.png deleted file mode 100644 index 6aeaa850b0..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_send_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_settings_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_settings_black_24dp.png deleted file mode 100644 index 476d5c9780..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_settings_black_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png deleted file mode 100644 index 507c5edd44..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_subdirectory_arrow_left_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_subdirectory_arrow_left_white_24dp.png deleted file mode 100644 index 382884620a..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_subdirectory_arrow_left_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_task_description.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_task_description.png deleted file mode 100644 index 74bd28dba8..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_task_description.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_view_list_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_view_list_24dp.png deleted file mode 100644 index f2c9d42de4..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_view_list_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_view_module_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_view_module_24dp.png deleted file mode 100644 index 41e1a79327..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_view_module_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_volume_off_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_volume_off_white_24dp.png deleted file mode 100644 index df06b06b53..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_volume_off_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_volume_up_white_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_volume_up_white_24dp.png deleted file mode 100644 index 82972b4e59..0000000000 Binary files a/Clover/app/src/main/res/drawable-xxxhdpi/ic_volume_up_white_24dp.png and /dev/null differ diff --git a/Clover/app/src/main/res/drawable/background_accent_rounded.xml b/Clover/app/src/main/res/drawable/background_accent_rounded.xml deleted file mode 100644 index 81a2835eef..0000000000 --- a/Clover/app/src/main/res/drawable/background_accent_rounded.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - diff --git a/Clover/app/src/main/res/drawable/background_hint_arrow.xml b/Clover/app/src/main/res/drawable/background_hint_arrow.xml deleted file mode 100644 index 4b98b1205a..0000000000 --- a/Clover/app/src/main/res/drawable/background_hint_arrow.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - diff --git a/Clover/app/src/main/res/drawable/ic_blue_checkmark_24dp.xml b/Clover/app/src/main/res/drawable/ic_blue_checkmark_24dp.xml deleted file mode 100644 index 0ade221adf..0000000000 --- a/Clover/app/src/main/res/drawable/ic_blue_checkmark_24dp.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/Clover/app/src/main/res/drawable/item_background.xml b/Clover/app/src/main/res/drawable/item_background.xml deleted file mode 100644 index c28e0b4a79..0000000000 --- a/Clover/app/src/main/res/drawable/item_background.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_album_download.xml b/Clover/app/src/main/res/layout/cell_album_download.xml deleted file mode 100644 index 3ef4f7b9af..0000000000 --- a/Clover/app/src/main/res/layout/cell_album_download.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_album_view.xml b/Clover/app/src/main/res/layout/cell_album_view.xml deleted file mode 100644 index 7f8d8e32b8..0000000000 --- a/Clover/app/src/main/res/layout/cell_album_view.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_archive.xml b/Clover/app/src/main/res/layout/cell_archive.xml deleted file mode 100644 index 92ca4c8d4a..0000000000 --- a/Clover/app/src/main/res/layout/cell_archive.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_board.xml b/Clover/app/src/main/res/layout/cell_board.xml deleted file mode 100644 index 273a96829c..0000000000 --- a/Clover/app/src/main/res/layout/cell_board.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_browse_board.xml b/Clover/app/src/main/res/layout/cell_browse_board.xml deleted file mode 100644 index d4d25fed48..0000000000 --- a/Clover/app/src/main/res/layout/cell_browse_board.xml +++ /dev/null @@ -1,29 +0,0 @@ - - diff --git a/Clover/app/src/main/res/layout/cell_browse_input.xml b/Clover/app/src/main/res/layout/cell_browse_input.xml deleted file mode 100644 index fb95ce45c9..0000000000 --- a/Clover/app/src/main/res/layout/cell_browse_input.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_browse_site.xml b/Clover/app/src/main/res/layout/cell_browse_site.xml deleted file mode 100644 index 53a88248ec..0000000000 --- a/Clover/app/src/main/res/layout/cell_browse_site.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_divider.xml b/Clover/app/src/main/res/layout/cell_divider.xml deleted file mode 100644 index 704d448996..0000000000 --- a/Clover/app/src/main/res/layout/cell_divider.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_file.xml b/Clover/app/src/main/res/layout/cell_file.xml deleted file mode 100644 index a53b297f70..0000000000 --- a/Clover/app/src/main/res/layout/cell_file.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_filter.xml b/Clover/app/src/main/res/layout/cell_filter.xml deleted file mode 100644 index e7aa2b96d9..0000000000 --- a/Clover/app/src/main/res/layout/cell_filter.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_header.xml b/Clover/app/src/main/res/layout/cell_header.xml deleted file mode 100644 index 952c2256bb..0000000000 --- a/Clover/app/src/main/res/layout/cell_header.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_history.xml b/Clover/app/src/main/res/layout/cell_history.xml deleted file mode 100644 index 32d93fa307..0000000000 --- a/Clover/app/src/main/res/layout/cell_history.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_link.xml b/Clover/app/src/main/res/layout/cell_link.xml deleted file mode 100644 index b186a1e214..0000000000 --- a/Clover/app/src/main/res/layout/cell_link.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_pin.xml b/Clover/app/src/main/res/layout/cell_pin.xml deleted file mode 100644 index 304d71cbe0..0000000000 --- a/Clover/app/src/main/res/layout/cell_pin.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_post.xml b/Clover/app/src/main/res/layout/cell_post.xml deleted file mode 100644 index f7a2ec9db4..0000000000 --- a/Clover/app/src/main/res/layout/cell_post.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_post_card.xml b/Clover/app/src/main/res/layout/cell_post_card.xml deleted file mode 100644 index d72fc8b5b6..0000000000 --- a/Clover/app/src/main/res/layout/cell_post_card.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_post_last_seen.xml b/Clover/app/src/main/res/layout/cell_post_last_seen.xml deleted file mode 100644 index 515cd618b9..0000000000 --- a/Clover/app/src/main/res/layout/cell_post_last_seen.xml +++ /dev/null @@ -1,22 +0,0 @@ - - diff --git a/Clover/app/src/main/res/layout/cell_post_stub.xml b/Clover/app/src/main/res/layout/cell_post_stub.xml deleted file mode 100644 index eb736d1e41..0000000000 --- a/Clover/app/src/main/res/layout/cell_post_stub.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_site.xml b/Clover/app/src/main/res/layout/cell_site.xml deleted file mode 100644 index 7190830efa..0000000000 --- a/Clover/app/src/main/res/layout/cell_site.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/cell_thread_status.xml b/Clover/app/src/main/res/layout/cell_thread_status.xml deleted file mode 100644 index 8afc26286d..0000000000 --- a/Clover/app/src/main/res/layout/cell_thread_status.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_album_download.xml b/Clover/app/src/main/res/layout/controller_album_download.xml deleted file mode 100644 index a4e6868552..0000000000 --- a/Clover/app/src/main/res/layout/controller_album_download.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_album_view.xml b/Clover/app/src/main/res/layout/controller_album_view.xml deleted file mode 100644 index 63d7428afd..0000000000 --- a/Clover/app/src/main/res/layout/controller_album_view.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/Clover/app/src/main/res/layout/controller_archive.xml b/Clover/app/src/main/res/layout/controller_archive.xml deleted file mode 100644 index b45bfb2a6b..0000000000 --- a/Clover/app/src/main/res/layout/controller_archive.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_board_edit.xml b/Clover/app/src/main/res/layout/controller_board_edit.xml deleted file mode 100644 index 6fa9b9305c..0000000000 --- a/Clover/app/src/main/res/layout/controller_board_edit.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_board_setup.xml b/Clover/app/src/main/res/layout/controller_board_setup.xml deleted file mode 100644 index 785950af3d..0000000000 --- a/Clover/app/src/main/res/layout/controller_board_setup.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_filters.xml b/Clover/app/src/main/res/layout/controller_filters.xml deleted file mode 100644 index 5b50a489a2..0000000000 --- a/Clover/app/src/main/res/layout/controller_filters.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_history.xml b/Clover/app/src/main/res/layout/controller_history.xml deleted file mode 100644 index 64c5fc0912..0000000000 --- a/Clover/app/src/main/res/layout/controller_history.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_image_viewer.xml b/Clover/app/src/main/res/layout/controller_image_viewer.xml deleted file mode 100644 index 469b02e76f..0000000000 --- a/Clover/app/src/main/res/layout/controller_image_viewer.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_navigation_drawer.xml b/Clover/app/src/main/res/layout/controller_navigation_drawer.xml deleted file mode 100644 index e3f5eb5714..0000000000 --- a/Clover/app/src/main/res/layout/controller_navigation_drawer.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_navigation_image_viewer.xml b/Clover/app/src/main/res/layout/controller_navigation_image_viewer.xml deleted file mode 100644 index e757827f26..0000000000 --- a/Clover/app/src/main/res/layout/controller_navigation_image_viewer.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_navigation_setup.xml b/Clover/app/src/main/res/layout/controller_navigation_setup.xml deleted file mode 100644 index 220e6e645e..0000000000 --- a/Clover/app/src/main/res/layout/controller_navigation_setup.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_navigation_toolbar.xml b/Clover/app/src/main/res/layout/controller_navigation_toolbar.xml deleted file mode 100644 index e08944dcdc..0000000000 --- a/Clover/app/src/main/res/layout/controller_navigation_toolbar.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_save_location.xml b/Clover/app/src/main/res/layout/controller_save_location.xml deleted file mode 100644 index bf19677c48..0000000000 --- a/Clover/app/src/main/res/layout/controller_save_location.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_site_setup.xml b/Clover/app/src/main/res/layout/controller_site_setup.xml deleted file mode 100644 index d8fb3247f0..0000000000 --- a/Clover/app/src/main/res/layout/controller_site_setup.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/Clover/app/src/main/res/layout/controller_sites_setup.xml b/Clover/app/src/main/res/layout/controller_sites_setup.xml deleted file mode 100644 index e82d049583..0000000000 --- a/Clover/app/src/main/res/layout/controller_sites_setup.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_theme.xml b/Clover/app/src/main/res/layout/controller_theme.xml deleted file mode 100644 index 551f7d9af6..0000000000 --- a/Clover/app/src/main/res/layout/controller_theme.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/controller_watch.xml b/Clover/app/src/main/res/layout/controller_watch.xml deleted file mode 100644 index 6a6990470f..0000000000 --- a/Clover/app/src/main/res/layout/controller_watch.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/dialog_video_error.xml b/Clover/app/src/main/res/layout/dialog_video_error.xml deleted file mode 100644 index a6fb5e1829..0000000000 --- a/Clover/app/src/main/res/layout/dialog_video_error.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - diff --git a/Clover/app/src/main/res/layout/fragment_folder_pick.xml b/Clover/app/src/main/res/layout/fragment_folder_pick.xml deleted file mode 100644 index 43ce76b22a..0000000000 --- a/Clover/app/src/main/res/layout/fragment_folder_pick.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Clover/app/src/main/res/layout/layout_board_add.xml b/Clover/app/src/main/res/layout/layout_board_add.xml deleted file mode 100644 index 97450a03d2..0000000000 --- a/Clover/app/src/main/res/layout/layout_board_add.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/Clover/app/src/main/assets/captcha/captcha_legacy.html b/Kuroba/app/src/main/assets/html/captcha_legacy.html similarity index 99% rename from Clover/app/src/main/assets/captcha/captcha_legacy.html rename to Kuroba/app/src/main/assets/html/captcha_legacy.html index fe3708670b..9385349436 100644 --- a/Clover/app/src/main/assets/captcha/captcha_legacy.html +++ b/Kuroba/app/src/main/assets/html/captcha_legacy.html @@ -37,4 +37,5 @@ })(); + diff --git a/Kuroba/app/src/main/assets/solver.js b/Kuroba/app/src/main/assets/solver.js new file mode 100644 index 0000000000..f987acb57e --- /dev/null +++ b/Kuroba/app/src/main/assets/solver.js @@ -0,0 +1,56460 @@ +// ==UserScript== +// @name Joshi Koukousei Captcha Service +// @namespace /cumg/ +// @match https://boards.4channel.org/* +// @match https://boards.4chan.org/* +// @match https://sys.4chan.org/* +// @grant none +// @version 1.1 +// @author /cumg/, formerly AUTOMATIC +// @description The Janny Skillers Captcha Solver of choice +// ==/UserScript== +const _DOMParser = DOMParser; +"use strict"; +//(() => { + var __create = Object.create; + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __getProtoOf = Object.getPrototypeOf; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; + var __commonJS = (cb, mod4) => function __require() { + return mod4 || (0, cb[__getOwnPropNames(cb)[0]])((mod4 = { exports: {} }).exports, mod4), mod4.exports; + }; + var __export = (target, all5) => { + for (var name in all5) + __defProp(target, name, { get: all5[name], enumerable: true }); + }; + var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; + }; + var __toESM = (mod4, isNodeMode, target) => (target = mod4 != null ? __create(__getProtoOf(mod4)) : {}, __copyProps( + isNodeMode || !mod4 || !mod4.__esModule ? __defProp(target, "default", { value: mod4, enumerable: true }) : target, + mod4 + )); + var __toBinary = /* @__PURE__ */ (() => { + var table = new Uint8Array(128); + for (var i = 0; i < 64; i++) + table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i; + return (base64) => { + var n = base64.length, bytes = new Uint8Array((n - (base64[n - 1] == "=") - (base64[n - 2] == "=")) * 3 / 4 | 0); + for (var i2 = 0, j = 0; i2 < n; ) { + var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)]; + var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)]; + bytes[j++] = c0 << 2 | c1 >> 4; + bytes[j++] = c1 << 4 | c2 >> 2; + bytes[j++] = c2 << 6 | c3; + } + return bytes; + }; + })(); + + // + var init_define_BUILD_VERSION = __esm({ + ""() { + } + }); + + // node_modules/.pnpm/long@4.0.0/node_modules/long/src/long.js + var require_long = __commonJS({ + "node_modules/.pnpm/long@4.0.0/node_modules/long/src/long.js"(exports, module) { + init_define_BUILD_VERSION(); + module.exports = Long2; + var wasm = null; + try { + wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([ + 0, + 97, + 115, + 109, + 1, + 0, + 0, + 0, + 1, + 13, + 2, + 96, + 0, + 1, + 127, + 96, + 4, + 127, + 127, + 127, + 127, + 1, + 127, + 3, + 7, + 6, + 0, + 1, + 1, + 1, + 1, + 1, + 6, + 6, + 1, + 127, + 1, + 65, + 0, + 11, + 7, + 50, + 6, + 3, + 109, + 117, + 108, + 0, + 1, + 5, + 100, + 105, + 118, + 95, + 115, + 0, + 2, + 5, + 100, + 105, + 118, + 95, + 117, + 0, + 3, + 5, + 114, + 101, + 109, + 95, + 115, + 0, + 4, + 5, + 114, + 101, + 109, + 95, + 117, + 0, + 5, + 8, + 103, + 101, + 116, + 95, + 104, + 105, + 103, + 104, + 0, + 0, + 10, + 191, + 1, + 6, + 4, + 0, + 35, + 0, + 11, + 36, + 1, + 1, + 126, + 32, + 0, + 173, + 32, + 1, + 173, + 66, + 32, + 134, + 132, + 32, + 2, + 173, + 32, + 3, + 173, + 66, + 32, + 134, + 132, + 126, + 34, + 4, + 66, + 32, + 135, + 167, + 36, + 0, + 32, + 4, + 167, + 11, + 36, + 1, + 1, + 126, + 32, + 0, + 173, + 32, + 1, + 173, + 66, + 32, + 134, + 132, + 32, + 2, + 173, + 32, + 3, + 173, + 66, + 32, + 134, + 132, + 127, + 34, + 4, + 66, + 32, + 135, + 167, + 36, + 0, + 32, + 4, + 167, + 11, + 36, + 1, + 1, + 126, + 32, + 0, + 173, + 32, + 1, + 173, + 66, + 32, + 134, + 132, + 32, + 2, + 173, + 32, + 3, + 173, + 66, + 32, + 134, + 132, + 128, + 34, + 4, + 66, + 32, + 135, + 167, + 36, + 0, + 32, + 4, + 167, + 11, + 36, + 1, + 1, + 126, + 32, + 0, + 173, + 32, + 1, + 173, + 66, + 32, + 134, + 132, + 32, + 2, + 173, + 32, + 3, + 173, + 66, + 32, + 134, + 132, + 129, + 34, + 4, + 66, + 32, + 135, + 167, + 36, + 0, + 32, + 4, + 167, + 11, + 36, + 1, + 1, + 126, + 32, + 0, + 173, + 32, + 1, + 173, + 66, + 32, + 134, + 132, + 32, + 2, + 173, + 32, + 3, + 173, + 66, + 32, + 134, + 132, + 130, + 34, + 4, + 66, + 32, + 135, + 167, + 36, + 0, + 32, + 4, + 167, + 11 + ])), {}).exports; + } catch (e) { + } + function Long2(low, high, unsigned) { + this.low = low | 0; + this.high = high | 0; + this.unsigned = !!unsigned; + } + Long2.prototype.__isLong__; + Object.defineProperty(Long2.prototype, "__isLong__", { value: true }); + function isLong(obj) { + return (obj && obj["__isLong__"]) === true; + } + Long2.isLong = isLong; + var INT_CACHE = {}; + var UINT_CACHE = {}; + function fromInt(value, unsigned) { + var obj, cachedObj, cache; + if (unsigned) { + value >>>= 0; + if (cache = 0 <= value && value < 256) { + cachedObj = UINT_CACHE[value]; + if (cachedObj) + return cachedObj; + } + obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true); + if (cache) + UINT_CACHE[value] = obj; + return obj; + } else { + value |= 0; + if (cache = -128 <= value && value < 128) { + cachedObj = INT_CACHE[value]; + if (cachedObj) + return cachedObj; + } + obj = fromBits(value, value < 0 ? -1 : 0, false); + if (cache) + INT_CACHE[value] = obj; + return obj; + } + } + Long2.fromInt = fromInt; + function fromNumber(value, unsigned) { + if (isNaN(value)) + return unsigned ? UZERO : ZERO; + if (unsigned) { + if (value < 0) + return UZERO; + if (value >= TWO_PWR_64_DBL) + return MAX_UNSIGNED_VALUE; + } else { + if (value <= -TWO_PWR_63_DBL) + return MIN_VALUE; + if (value + 1 >= TWO_PWR_63_DBL) + return MAX_VALUE; + } + if (value < 0) + return fromNumber(-value, unsigned).neg(); + return fromBits(value % TWO_PWR_32_DBL | 0, value / TWO_PWR_32_DBL | 0, unsigned); + } + Long2.fromNumber = fromNumber; + function fromBits(lowBits, highBits, unsigned) { + return new Long2(lowBits, highBits, unsigned); + } + Long2.fromBits = fromBits; + var pow_dbl = Math.pow; + function fromString(str, unsigned, radix) { + if (str.length === 0) + throw Error("empty string"); + if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity") + return ZERO; + if (typeof unsigned === "number") { + radix = unsigned, unsigned = false; + } else { + unsigned = !!unsigned; + } + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw RangeError("radix"); + var p2; + if ((p2 = str.indexOf("-")) > 0) + throw Error("interior hyphen"); + else if (p2 === 0) { + return fromString(str.substring(1), unsigned, radix).neg(); + } + var radixToPower = fromNumber(pow_dbl(radix, 8)); + var result = ZERO; + for (var i = 0; i < str.length; i += 8) { + var size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + var power = fromNumber(pow_dbl(radix, size)); + result = result.mul(power).add(fromNumber(value)); + } else { + result = result.mul(radixToPower); + result = result.add(fromNumber(value)); + } + } + result.unsigned = unsigned; + return result; + } + Long2.fromString = fromString; + function fromValue(val, unsigned) { + if (typeof val === "number") + return fromNumber(val, unsigned); + if (typeof val === "string") + return fromString(val, unsigned); + return fromBits(val.low, val.high, typeof unsigned === "boolean" ? unsigned : val.unsigned); + } + Long2.fromValue = fromValue; + var TWO_PWR_16_DBL = 1 << 16; + var TWO_PWR_24_DBL = 1 << 24; + var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL; + var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL; + var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2; + var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL); + var ZERO = fromInt(0); + Long2.ZERO = ZERO; + var UZERO = fromInt(0, true); + Long2.UZERO = UZERO; + var ONE = fromInt(1); + Long2.ONE = ONE; + var UONE = fromInt(1, true); + Long2.UONE = UONE; + var NEG_ONE = fromInt(-1); + Long2.NEG_ONE = NEG_ONE; + var MAX_VALUE = fromBits(4294967295 | 0, 2147483647 | 0, false); + Long2.MAX_VALUE = MAX_VALUE; + var MAX_UNSIGNED_VALUE = fromBits(4294967295 | 0, 4294967295 | 0, true); + Long2.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE; + var MIN_VALUE = fromBits(0, 2147483648 | 0, false); + Long2.MIN_VALUE = MIN_VALUE; + var LongPrototype = Long2.prototype; + LongPrototype.toInt = function toInt() { + return this.unsigned ? this.low >>> 0 : this.low; + }; + LongPrototype.toNumber = function toNumber() { + if (this.unsigned) + return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0); + return this.high * TWO_PWR_32_DBL + (this.low >>> 0); + }; + LongPrototype.toString = function toString(radix) { + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw RangeError("radix"); + if (this.isZero()) + return "0"; + if (this.isNegative()) { + if (this.eq(MIN_VALUE)) { + var radixLong = fromNumber(radix), div3 = this.div(radixLong), rem1 = div3.mul(radixLong).sub(this); + return div3.toString(radix) + rem1.toInt().toString(radix); + } else + return "-" + this.neg().toString(radix); + } + var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned), rem = this; + var result = ""; + while (true) { + var remDiv = rem.div(radixToPower), intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0, digits = intval.toString(radix); + rem = remDiv; + if (rem.isZero()) + return digits + result; + else { + while (digits.length < 6) + digits = "0" + digits; + result = "" + digits + result; + } + } + }; + LongPrototype.getHighBits = function getHighBits() { + return this.high; + }; + LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() { + return this.high >>> 0; + }; + LongPrototype.getLowBits = function getLowBits() { + return this.low; + }; + LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() { + return this.low >>> 0; + }; + LongPrototype.getNumBitsAbs = function getNumBitsAbs() { + if (this.isNegative()) + return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs(); + var val = this.high != 0 ? this.high : this.low; + for (var bit = 31; bit > 0; bit--) + if ((val & 1 << bit) != 0) + break; + return this.high != 0 ? bit + 33 : bit + 1; + }; + LongPrototype.isZero = function isZero() { + return this.high === 0 && this.low === 0; + }; + LongPrototype.eqz = LongPrototype.isZero; + LongPrototype.isNegative = function isNegative() { + return !this.unsigned && this.high < 0; + }; + LongPrototype.isPositive = function isPositive() { + return this.unsigned || this.high >= 0; + }; + LongPrototype.isOdd = function isOdd() { + return (this.low & 1) === 1; + }; + LongPrototype.isEven = function isEven2() { + return (this.low & 1) === 0; + }; + LongPrototype.equals = function equals(other) { + if (!isLong(other)) + other = fromValue(other); + if (this.unsigned !== other.unsigned && this.high >>> 31 === 1 && other.high >>> 31 === 1) + return false; + return this.high === other.high && this.low === other.low; + }; + LongPrototype.eq = LongPrototype.equals; + LongPrototype.notEquals = function notEquals(other) { + return !this.eq(other); + }; + LongPrototype.neq = LongPrototype.notEquals; + LongPrototype.ne = LongPrototype.notEquals; + LongPrototype.lessThan = function lessThan(other) { + return this.comp(other) < 0; + }; + LongPrototype.lt = LongPrototype.lessThan; + LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) { + return this.comp(other) <= 0; + }; + LongPrototype.lte = LongPrototype.lessThanOrEqual; + LongPrototype.le = LongPrototype.lessThanOrEqual; + LongPrototype.greaterThan = function greaterThan(other) { + return this.comp(other) > 0; + }; + LongPrototype.gt = LongPrototype.greaterThan; + LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) { + return this.comp(other) >= 0; + }; + LongPrototype.gte = LongPrototype.greaterThanOrEqual; + LongPrototype.ge = LongPrototype.greaterThanOrEqual; + LongPrototype.compare = function compare(other) { + if (!isLong(other)) + other = fromValue(other); + if (this.eq(other)) + return 0; + var thisNeg = this.isNegative(), otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) + return -1; + if (!thisNeg && otherNeg) + return 1; + if (!this.unsigned) + return this.sub(other).isNegative() ? -1 : 1; + return other.high >>> 0 > this.high >>> 0 || other.high === this.high && other.low >>> 0 > this.low >>> 0 ? -1 : 1; + }; + LongPrototype.comp = LongPrototype.compare; + LongPrototype.negate = function negate() { + if (!this.unsigned && this.eq(MIN_VALUE)) + return MIN_VALUE; + return this.not().add(ONE); + }; + LongPrototype.neg = LongPrototype.negate; + LongPrototype.add = function add4(addend) { + if (!isLong(addend)) + addend = fromValue(addend); + var a48 = this.high >>> 16; + var a32 = this.high & 65535; + var a16 = this.low >>> 16; + var a00 = this.low & 65535; + var b48 = addend.high >>> 16; + var b32 = addend.high & 65535; + var b16 = addend.low >>> 16; + var b00 = addend.low & 65535; + var c48 = 0, c32 = 0, c16 = 0, c00 = 0; + c00 += a00 + b00; + c16 += c00 >>> 16; + c00 &= 65535; + c16 += a16 + b16; + c32 += c16 >>> 16; + c16 &= 65535; + c32 += a32 + b32; + c48 += c32 >>> 16; + c32 &= 65535; + c48 += a48 + b48; + c48 &= 65535; + return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned); + }; + LongPrototype.subtract = function subtract(subtrahend) { + if (!isLong(subtrahend)) + subtrahend = fromValue(subtrahend); + return this.add(subtrahend.neg()); + }; + LongPrototype.sub = LongPrototype.subtract; + LongPrototype.multiply = function multiply3(multiplier) { + if (this.isZero()) + return ZERO; + if (!isLong(multiplier)) + multiplier = fromValue(multiplier); + if (wasm) { + var low = wasm.mul( + this.low, + this.high, + multiplier.low, + multiplier.high + ); + return fromBits(low, wasm.get_high(), this.unsigned); + } + if (multiplier.isZero()) + return ZERO; + if (this.eq(MIN_VALUE)) + return multiplier.isOdd() ? MIN_VALUE : ZERO; + if (multiplier.eq(MIN_VALUE)) + return this.isOdd() ? MIN_VALUE : ZERO; + if (this.isNegative()) { + if (multiplier.isNegative()) + return this.neg().mul(multiplier.neg()); + else + return this.neg().mul(multiplier).neg(); + } else if (multiplier.isNegative()) + return this.mul(multiplier.neg()).neg(); + if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24)) + return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned); + var a48 = this.high >>> 16; + var a32 = this.high & 65535; + var a16 = this.low >>> 16; + var a00 = this.low & 65535; + var b48 = multiplier.high >>> 16; + var b32 = multiplier.high & 65535; + var b16 = multiplier.low >>> 16; + var b00 = multiplier.low & 65535; + var c48 = 0, c32 = 0, c16 = 0, c00 = 0; + c00 += a00 * b00; + c16 += c00 >>> 16; + c00 &= 65535; + c16 += a16 * b00; + c32 += c16 >>> 16; + c16 &= 65535; + c16 += a00 * b16; + c32 += c16 >>> 16; + c16 &= 65535; + c32 += a32 * b00; + c48 += c32 >>> 16; + c32 &= 65535; + c32 += a16 * b16; + c48 += c32 >>> 16; + c32 &= 65535; + c32 += a00 * b32; + c48 += c32 >>> 16; + c32 &= 65535; + c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48; + c48 &= 65535; + return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned); + }; + LongPrototype.mul = LongPrototype.multiply; + LongPrototype.divide = function divide(divisor) { + if (!isLong(divisor)) + divisor = fromValue(divisor); + if (divisor.isZero()) + throw Error("division by zero"); + if (wasm) { + if (!this.unsigned && this.high === -2147483648 && divisor.low === -1 && divisor.high === -1) { + return this; + } + var low = (this.unsigned ? wasm.div_u : wasm.div_s)( + this.low, + this.high, + divisor.low, + divisor.high + ); + return fromBits(low, wasm.get_high(), this.unsigned); + } + if (this.isZero()) + return this.unsigned ? UZERO : ZERO; + var approx, rem, res; + if (!this.unsigned) { + if (this.eq(MIN_VALUE)) { + if (divisor.eq(ONE) || divisor.eq(NEG_ONE)) + return MIN_VALUE; + else if (divisor.eq(MIN_VALUE)) + return ONE; + else { + var halfThis = this.shr(1); + approx = halfThis.div(divisor).shl(1); + if (approx.eq(ZERO)) { + return divisor.isNegative() ? ONE : NEG_ONE; + } else { + rem = this.sub(divisor.mul(approx)); + res = approx.add(rem.div(divisor)); + return res; + } + } + } else if (divisor.eq(MIN_VALUE)) + return this.unsigned ? UZERO : ZERO; + if (this.isNegative()) { + if (divisor.isNegative()) + return this.neg().div(divisor.neg()); + return this.neg().div(divisor).neg(); + } else if (divisor.isNegative()) + return this.div(divisor.neg()).neg(); + res = ZERO; + } else { + if (!divisor.unsigned) + divisor = divisor.toUnsigned(); + if (divisor.gt(this)) + return UZERO; + if (divisor.gt(this.shru(1))) + return UONE; + res = UZERO; + } + rem = this; + while (rem.gte(divisor)) { + approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber())); + var log22 = Math.ceil(Math.log(approx) / Math.LN2), delta = log22 <= 48 ? 1 : pow_dbl(2, log22 - 48), approxRes = fromNumber(approx), approxRem = approxRes.mul(divisor); + while (approxRem.isNegative() || approxRem.gt(rem)) { + approx -= delta; + approxRes = fromNumber(approx, this.unsigned); + approxRem = approxRes.mul(divisor); + } + if (approxRes.isZero()) + approxRes = ONE; + res = res.add(approxRes); + rem = rem.sub(approxRem); + } + return res; + }; + LongPrototype.div = LongPrototype.divide; + LongPrototype.modulo = function modulo(divisor) { + if (!isLong(divisor)) + divisor = fromValue(divisor); + if (wasm) { + var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)( + this.low, + this.high, + divisor.low, + divisor.high + ); + return fromBits(low, wasm.get_high(), this.unsigned); + } + return this.sub(this.div(divisor).mul(divisor)); + }; + LongPrototype.mod = LongPrototype.modulo; + LongPrototype.rem = LongPrototype.modulo; + LongPrototype.not = function not() { + return fromBits(~this.low, ~this.high, this.unsigned); + }; + LongPrototype.and = function and(other) { + if (!isLong(other)) + other = fromValue(other); + return fromBits(this.low & other.low, this.high & other.high, this.unsigned); + }; + LongPrototype.or = function or(other) { + if (!isLong(other)) + other = fromValue(other); + return fromBits(this.low | other.low, this.high | other.high, this.unsigned); + }; + LongPrototype.xor = function xor(other) { + if (!isLong(other)) + other = fromValue(other); + return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned); + }; + LongPrototype.shiftLeft = function shiftLeft(numBits) { + if (isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return fromBits(this.low << numBits, this.high << numBits | this.low >>> 32 - numBits, this.unsigned); + else + return fromBits(0, this.low << numBits - 32, this.unsigned); + }; + LongPrototype.shl = LongPrototype.shiftLeft; + LongPrototype.shiftRight = function shiftRight(numBits) { + if (isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return fromBits(this.low >>> numBits | this.high << 32 - numBits, this.high >> numBits, this.unsigned); + else + return fromBits(this.high >> numBits - 32, this.high >= 0 ? 0 : -1, this.unsigned); + }; + LongPrototype.shr = LongPrototype.shiftRight; + LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) { + if (isLong(numBits)) + numBits = numBits.toInt(); + numBits &= 63; + if (numBits === 0) + return this; + else { + var high = this.high; + if (numBits < 32) { + var low = this.low; + return fromBits(low >>> numBits | high << 32 - numBits, high >>> numBits, this.unsigned); + } else if (numBits === 32) + return fromBits(high, 0, this.unsigned); + else + return fromBits(high >>> numBits - 32, 0, this.unsigned); + } + }; + LongPrototype.shru = LongPrototype.shiftRightUnsigned; + LongPrototype.shr_u = LongPrototype.shiftRightUnsigned; + LongPrototype.toSigned = function toSigned() { + if (!this.unsigned) + return this; + return fromBits(this.low, this.high, false); + }; + LongPrototype.toUnsigned = function toUnsigned() { + if (this.unsigned) + return this; + return fromBits(this.low, this.high, true); + }; + LongPrototype.toBytes = function toBytes(le) { + return le ? this.toBytesLE() : this.toBytesBE(); + }; + LongPrototype.toBytesLE = function toBytesLE() { + var hi = this.high, lo = this.low; + return [ + lo & 255, + lo >>> 8 & 255, + lo >>> 16 & 255, + lo >>> 24, + hi & 255, + hi >>> 8 & 255, + hi >>> 16 & 255, + hi >>> 24 + ]; + }; + LongPrototype.toBytesBE = function toBytesBE() { + var hi = this.high, lo = this.low; + return [ + hi >>> 24, + hi >>> 16 & 255, + hi >>> 8 & 255, + hi & 255, + lo >>> 24, + lo >>> 16 & 255, + lo >>> 8 & 255, + lo & 255 + ]; + }; + Long2.fromBytes = function fromBytes(bytes, unsigned, le) { + return le ? Long2.fromBytesLE(bytes, unsigned) : Long2.fromBytesBE(bytes, unsigned); + }; + Long2.fromBytesLE = function fromBytesLE(bytes, unsigned) { + return new Long2( + bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24, + bytes[4] | bytes[5] << 8 | bytes[6] << 16 | bytes[7] << 24, + unsigned + ); + }; + Long2.fromBytesBE = function fromBytesBE(bytes, unsigned) { + return new Long2( + bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7], + bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], + unsigned + ); + }; + } + }); + + // (disabled):node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/browser.js + var require_browser = __commonJS({ + "(disabled):node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/browser.js"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):util + var require_util = __commonJS({ + "(disabled):util"() { + init_define_BUILD_VERSION(); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js + var require_alea = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function Alea(seed) { + var me = this, mash = Mash(); + me.next = function() { + var t = 2091639 * me.s0 + me.c * 23283064365386963e-26; + me.s0 = me.s1; + me.s1 = me.s2; + return me.s2 = t - (me.c = t | 0); + }; + me.c = 1; + me.s0 = mash(" "); + me.s1 = mash(" "); + me.s2 = mash(" "); + me.s0 -= mash(seed); + if (me.s0 < 0) { + me.s0 += 1; + } + me.s1 -= mash(seed); + if (me.s1 < 0) { + me.s1 += 1; + } + me.s2 -= mash(seed); + if (me.s2 < 0) { + me.s2 += 1; + } + mash = null; + } + function copy(f, t) { + t.c = f.c; + t.s0 = f.s0; + t.s1 = f.s1; + t.s2 = f.s2; + return t; + } + function impl(seed, opts) { + var xg = new Alea(seed), state = opts && opts.state, prng = xg.next; + prng.int32 = function() { + return xg.next() * 4294967296 | 0; + }; + prng.double = function() { + return prng() + (prng() * 2097152 | 0) * 11102230246251565e-32; + }; + prng.quick = prng; + if (state) { + if (typeof state == "object") + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + function Mash() { + var n = 4022871197; + var mash = function(data) { + data = String(data); + for (var i = 0; i < data.length; i++) { + n += data.charCodeAt(i); + var h = 0.02519603282416938 * n; + n = h >>> 0; + h -= n; + h *= n; + n = h >>> 0; + h -= n; + n += h * 4294967296; + } + return (n >>> 0) * 23283064365386963e-26; + }; + return mash; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.alea = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js + var require_xor128 = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function XorGen(seed) { + var me = this, strseed = ""; + me.x = 0; + me.y = 0; + me.z = 0; + me.w = 0; + me.next = function() { + var t = me.x ^ me.x << 11; + me.x = me.y; + me.y = me.z; + me.z = me.w; + return me.w ^= me.w >>> 19 ^ t ^ t >>> 8; + }; + if (seed === (seed | 0)) { + me.x = seed; + } else { + strseed += seed; + } + for (var k = 0; k < strseed.length + 64; k++) { + me.x ^= strseed.charCodeAt(k) | 0; + me.next(); + } + } + function copy(f, t) { + t.x = f.x; + t.y = f.y; + t.z = f.z; + t.w = f.w; + return t; + } + function impl(seed, opts) { + var xg = new XorGen(seed), state = opts && opts.state, prng = function() { + return (xg.next() >>> 0) / 4294967296; + }; + prng.double = function() { + do { + var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21); + } while (result === 0); + return result; + }; + prng.int32 = xg.next; + prng.quick = prng; + if (state) { + if (typeof state == "object") + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.xor128 = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js + var require_xorwow = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function XorGen(seed) { + var me = this, strseed = ""; + me.next = function() { + var t = me.x ^ me.x >>> 2; + me.x = me.y; + me.y = me.z; + me.z = me.w; + me.w = me.v; + return (me.d = me.d + 362437 | 0) + (me.v = me.v ^ me.v << 4 ^ (t ^ t << 1)) | 0; + }; + me.x = 0; + me.y = 0; + me.z = 0; + me.w = 0; + me.v = 0; + if (seed === (seed | 0)) { + me.x = seed; + } else { + strseed += seed; + } + for (var k = 0; k < strseed.length + 64; k++) { + me.x ^= strseed.charCodeAt(k) | 0; + if (k == strseed.length) { + me.d = me.x << 10 ^ me.x >>> 4; + } + me.next(); + } + } + function copy(f, t) { + t.x = f.x; + t.y = f.y; + t.z = f.z; + t.w = f.w; + t.v = f.v; + t.d = f.d; + return t; + } + function impl(seed, opts) { + var xg = new XorGen(seed), state = opts && opts.state, prng = function() { + return (xg.next() >>> 0) / 4294967296; + }; + prng.double = function() { + do { + var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21); + } while (result === 0); + return result; + }; + prng.int32 = xg.next; + prng.quick = prng; + if (state) { + if (typeof state == "object") + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.xorwow = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js + var require_xorshift7 = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function XorGen(seed) { + var me = this; + me.next = function() { + var X = me.x, i = me.i, t, v, w; + t = X[i]; + t ^= t >>> 7; + v = t ^ t << 24; + t = X[i + 1 & 7]; + v ^= t ^ t >>> 10; + t = X[i + 3 & 7]; + v ^= t ^ t >>> 3; + t = X[i + 4 & 7]; + v ^= t ^ t << 7; + t = X[i + 7 & 7]; + t = t ^ t << 13; + v ^= t ^ t << 9; + X[i] = v; + me.i = i + 1 & 7; + return v; + }; + function init2(me2, seed2) { + var j, w, X = []; + if (seed2 === (seed2 | 0)) { + w = X[0] = seed2; + } else { + seed2 = "" + seed2; + for (j = 0; j < seed2.length; ++j) { + X[j & 7] = X[j & 7] << 15 ^ seed2.charCodeAt(j) + X[j + 1 & 7] << 13; + } + } + while (X.length < 8) + X.push(0); + for (j = 0; j < 8 && X[j] === 0; ++j) + ; + if (j == 8) + w = X[7] = -1; + else + w = X[j]; + me2.x = X; + me2.i = 0; + for (j = 256; j > 0; --j) { + me2.next(); + } + } + init2(me, seed); + } + function copy(f, t) { + t.x = f.x.slice(); + t.i = f.i; + return t; + } + function impl(seed, opts) { + if (seed == null) + seed = +new Date(); + var xg = new XorGen(seed), state = opts && opts.state, prng = function() { + return (xg.next() >>> 0) / 4294967296; + }; + prng.double = function() { + do { + var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21); + } while (result === 0); + return result; + }; + prng.int32 = xg.next; + prng.quick = prng; + if (state) { + if (state.x) + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.xorshift7 = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js + var require_xor4096 = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function XorGen(seed) { + var me = this; + me.next = function() { + var w = me.w, X = me.X, i = me.i, t, v; + me.w = w = w + 1640531527 | 0; + v = X[i + 34 & 127]; + t = X[i = i + 1 & 127]; + v ^= v << 13; + t ^= t << 17; + v ^= v >>> 15; + t ^= t >>> 12; + v = X[i] = v ^ t; + me.i = i; + return v + (w ^ w >>> 16) | 0; + }; + function init2(me2, seed2) { + var t, v, i, j, w, X = [], limit = 128; + if (seed2 === (seed2 | 0)) { + v = seed2; + seed2 = null; + } else { + seed2 = seed2 + "\0"; + v = 0; + limit = Math.max(limit, seed2.length); + } + for (i = 0, j = -32; j < limit; ++j) { + if (seed2) + v ^= seed2.charCodeAt((j + 32) % seed2.length); + if (j === 0) + w = v; + v ^= v << 10; + v ^= v >>> 15; + v ^= v << 4; + v ^= v >>> 13; + if (j >= 0) { + w = w + 1640531527 | 0; + t = X[j & 127] ^= v + w; + i = 0 == t ? i + 1 : 0; + } + } + if (i >= 128) { + X[(seed2 && seed2.length || 0) & 127] = -1; + } + i = 127; + for (j = 4 * 128; j > 0; --j) { + v = X[i + 34 & 127]; + t = X[i = i + 1 & 127]; + v ^= v << 13; + t ^= t << 17; + v ^= v >>> 15; + t ^= t >>> 12; + X[i] = v ^ t; + } + me2.w = w; + me2.X = X; + me2.i = i; + } + init2(me, seed); + } + function copy(f, t) { + t.i = f.i; + t.w = f.w; + t.X = f.X.slice(); + return t; + } + ; + function impl(seed, opts) { + if (seed == null) + seed = +new Date(); + var xg = new XorGen(seed), state = opts && opts.state, prng = function() { + return (xg.next() >>> 0) / 4294967296; + }; + prng.double = function() { + do { + var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21); + } while (result === 0); + return result; + }; + prng.int32 = xg.next; + prng.quick = prng; + if (state) { + if (state.X) + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.xor4096 = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js + var require_tychei = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function XorGen(seed) { + var me = this, strseed = ""; + me.next = function() { + var b = me.b, c = me.c, d = me.d, a = me.a; + b = b << 25 ^ b >>> 7 ^ c; + c = c - d | 0; + d = d << 24 ^ d >>> 8 ^ a; + a = a - b | 0; + me.b = b = b << 20 ^ b >>> 12 ^ c; + me.c = c = c - d | 0; + me.d = d << 16 ^ c >>> 16 ^ a; + return me.a = a - b | 0; + }; + me.a = 0; + me.b = 0; + me.c = 2654435769 | 0; + me.d = 1367130551; + if (seed === Math.floor(seed)) { + me.a = seed / 4294967296 | 0; + me.b = seed | 0; + } else { + strseed += seed; + } + for (var k = 0; k < strseed.length + 20; k++) { + me.b ^= strseed.charCodeAt(k) | 0; + me.next(); + } + } + function copy(f, t) { + t.a = f.a; + t.b = f.b; + t.c = f.c; + t.d = f.d; + return t; + } + ; + function impl(seed, opts) { + var xg = new XorGen(seed), state = opts && opts.state, prng = function() { + return (xg.next() >>> 0) / 4294967296; + }; + prng.double = function() { + do { + var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21); + } while (result === 0); + return result; + }; + prng.int32 = xg.next; + prng.quick = prng; + if (state) { + if (typeof state == "object") + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.tychei = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // (disabled):crypto + var require_crypto = __commonJS({ + "(disabled):crypto"() { + init_define_BUILD_VERSION(); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js + var require_seedrandom = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, pool3, math) { + var width = 256, chunks = 6, digits = 52, rngname = "random", startdenom = math.pow(width, chunks), significance = math.pow(2, digits), overflow = significance * 2, mask = width - 1, nodecrypto; + function seedrandom5(seed, options, callback) { + var key = []; + options = options == true ? { entropy: true } : options || {}; + var shortseed = mixkey(flatten3( + options.entropy ? [seed, tostring(pool3)] : seed == null ? autoseed() : seed, + 3 + ), key); + var arc4 = new ARC4(key); + var prng = function() { + var n = arc4.g(chunks), d = startdenom, x = 0; + while (n < significance) { + n = (n + x) * width; + d *= width; + x = arc4.g(1); + } + while (n >= overflow) { + n /= 2; + d /= 2; + x >>>= 1; + } + return (n + x) / d; + }; + prng.int32 = function() { + return arc4.g(4) | 0; + }; + prng.quick = function() { + return arc4.g(4) / 4294967296; + }; + prng.double = prng; + mixkey(tostring(arc4.S), pool3); + return (options.pass || callback || function(prng2, seed2, is_math_call, state) { + if (state) { + if (state.S) { + copy(state, arc4); + } + prng2.state = function() { + return copy(arc4, {}); + }; + } + if (is_math_call) { + math[rngname] = prng2; + return seed2; + } else + return prng2; + })( + prng, + shortseed, + "global" in options ? options.global : this == math, + options.state + ); + } + function ARC4(key) { + var t, keylen = key.length, me = this, i = 0, j = me.i = me.j = 0, s = me.S = []; + if (!keylen) { + key = [keylen++]; + } + while (i < width) { + s[i] = i++; + } + for (i = 0; i < width; i++) { + s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])]; + s[j] = t; + } + (me.g = function(count2) { + var t2, r = 0, i2 = me.i, j2 = me.j, s2 = me.S; + while (count2--) { + t2 = s2[i2 = mask & i2 + 1]; + r = r * width + s2[mask & (s2[i2] = s2[j2 = mask & j2 + t2]) + (s2[j2] = t2)]; + } + me.i = i2; + me.j = j2; + return r; + })(width); + } + function copy(f, t) { + t.i = f.i; + t.j = f.j; + t.S = f.S.slice(); + return t; + } + ; + function flatten3(obj, depth) { + var result = [], typ = typeof obj, prop; + if (depth && typ == "object") { + for (prop in obj) { + try { + result.push(flatten3(obj[prop], depth - 1)); + } catch (e) { + } + } + } + return result.length ? result : typ == "string" ? obj : obj + "\0"; + } + function mixkey(seed, key) { + var stringseed = seed + "", smear, j = 0; + while (j < stringseed.length) { + key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++); + } + return tostring(key); + } + function autoseed() { + try { + var out; + if (nodecrypto && (out = nodecrypto.randomBytes)) { + out = out(width); + } else { + out = new Uint8Array(width); + (global2.crypto || global2.msCrypto).getRandomValues(out); + } + return tostring(out); + } catch (e) { + var browser = global2.navigator, plugins = browser && browser.plugins; + return [+new Date(), global2, plugins, global2.screen, tostring(pool3)]; + } + } + function tostring(a) { + return String.fromCharCode.apply(0, a); + } + mixkey(math.random(), pool3); + if (typeof module == "object" && module.exports) { + module.exports = seedrandom5; + try { + nodecrypto = require_crypto(); + } catch (ex) { + } + } else if (typeof define == "function" && define.amd) { + define(function() { + return seedrandom5; + }); + } else { + math["seed" + rngname] = seedrandom5; + } + })( + typeof self !== "undefined" ? self : exports, + [], + Math + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/index.js + var require_seedrandom2 = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/index.js"(exports, module) { + init_define_BUILD_VERSION(); + var alea5 = require_alea(); + var xor128 = require_xor128(); + var xorwow = require_xorwow(); + var xorshift7 = require_xorshift7(); + var xor4096 = require_xor4096(); + var tychei = require_tychei(); + var sr = require_seedrandom(); + sr.alea = alea5; + sr.xor128 = xor128; + sr.xorwow = xorwow; + sr.xorshift7 = xorshift7; + sr.xor4096 = xor4096; + sr.tychei = tychei; + module.exports = sr; + } + }); + + // (disabled):node_modules/.pnpm/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.js + var require_string_decoder = __commonJS({ + "(disabled):node_modules/.pnpm/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.js"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):path + var require_path = __commonJS({ + "(disabled):path"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):fs + var require_fs = __commonJS({ + "(disabled):fs"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):worker_threads + var require_worker_threads = __commonJS({ + "(disabled):worker_threads"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):perf_hooks + var require_perf_hooks = __commonJS({ + "(disabled):perf_hooks"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):os + var require_os = __commonJS({ + "(disabled):os"() { + init_define_BUILD_VERSION(); + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.js + var require_tfjs_backend_wasm_threaded_simd = __commonJS({ + "node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.js"(exports, module) { + init_define_BUILD_VERSION(); + var WasmBackendModuleThreadedSimd2 = (() => { + var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0; + if (typeof __filename !== "undefined") + _scriptDir = _scriptDir || __filename; + return function(WasmBackendModuleThreadedSimd3) { + WasmBackendModuleThreadedSimd3 = WasmBackendModuleThreadedSimd3 || {}; + function GROWABLE_HEAP_I8() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAP8; + } + function GROWABLE_HEAP_U8() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAPU8; + } + function GROWABLE_HEAP_I16() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAP16; + } + function GROWABLE_HEAP_U16() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAPU16; + } + function GROWABLE_HEAP_I32() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAP32; + } + function GROWABLE_HEAP_F32() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAPF32; + } + function GROWABLE_HEAP_F64() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAPF64; + } + var Module = typeof WasmBackendModuleThreadedSimd3 !== "undefined" ? WasmBackendModuleThreadedSimd3 : {}; + var readyPromiseResolve, readyPromiseReject; + Module["ready"] = new Promise(function(resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject; + }); + var beforeListeners; + if (typeof process !== "undefined" && process.listeners) { + beforeListeners = { uncaughtException: process.listeners("uncaughtException"), unhandledRejection: process.listeners("unhandledRejection") }; + } + var moduleOverrides = Object.assign({}, Module); + var arguments_ = []; + var thisProgram = "./this.program"; + var quit_ = (status, toThrow) => { + throw toThrow; + }; + var ENVIRONMENT_IS_WEB = typeof window === "object"; + var ENVIRONMENT_IS_WORKER = typeof importScripts === "function"; + var ENVIRONMENT_IS_NODE = typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string"; + var ENVIRONMENT_IS_PTHREAD = Module["ENVIRONMENT_IS_PTHREAD"] || false; + var scriptDirectory = ""; + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + return scriptDirectory + path; + } + var read_, readAsync, readBinary, setWindowTitle; + function logExceptionOnExit(e) { + if (e instanceof ExitStatus) + return; + let toLog = e; + err("exiting due to exception: " + toLog); + } + var fs; + var nodePath; + var requireNodeFS; + if (ENVIRONMENT_IS_NODE) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = require_path().dirname(scriptDirectory) + "/"; + } else { + scriptDirectory = __dirname + "/"; + } + requireNodeFS = () => { + if (!nodePath) { + fs = require_fs(); + nodePath = require_path(); + } + }; + read_ = function shell_read(filename, binary) { + requireNodeFS(); + filename = nodePath["normalize"](filename); + return fs.readFileSync(filename, binary ? void 0 : "utf8"); + }; + readBinary = (filename) => { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + return ret; + }; + readAsync = (filename, onload, onerror) => { + requireNodeFS(); + filename = nodePath["normalize"](filename); + fs.readFile(filename, function(err2, data) { + if (err2) + onerror(err2); + else + onload(data.buffer); + }); + }; + if (process["argv"].length > 1) { + thisProgram = process["argv"][1].replace(/\\/g, "/"); + } + arguments_ = process["argv"].slice(2); + process["on"]("uncaughtException", function(ex) { + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); + process["on"]("unhandledRejection", function(reason) { + throw reason; + }); + quit_ = (status, toThrow) => { + if (keepRuntimeAlive()) { + process["exitCode"] = status; + throw toThrow; + } + logExceptionOnExit(toThrow); + process["exit"](status); + }; + Module["inspect"] = function() { + return "[Emscripten Module object]"; + }; + let nodeWorkerThreads; + try { + nodeWorkerThreads = require_worker_threads(); + } catch (e) { + console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'); + throw e; + } + window.Worker = nodeWorkerThreads.Worker; + } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = self.location.href; + } else if (typeof document !== "undefined" && document.currentScript) { + scriptDirectory = document.currentScript.src; + } + if (typeof _scriptDir !== "undefined" && _scriptDir) { + scriptDirectory = _scriptDir; + } + if (scriptDirectory.indexOf("blob:") !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1); + } else { + scriptDirectory = ""; + } + if (!ENVIRONMENT_IS_NODE) { + read_ = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.send(null); + return xhr.responseText; + }; + if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.responseType = "arraybuffer"; + xhr.send(null); + return new Uint8Array(xhr.response); + }; + } + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = () => { + if (xhr.status == 200 || xhr.status == 0 && xhr.response) { + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + }; + } + setWindowTitle = (title) => document.title = title; + } else { + } + if (ENVIRONMENT_IS_NODE) { + if (typeof performance === "undefined") { + window.performance = require_perf_hooks().performance; + } + } + var defaultPrint = console.log.bind(console); + var defaultPrintErr = console.warn.bind(console); + if (ENVIRONMENT_IS_NODE) { + requireNodeFS(); + defaultPrint = (str) => fs.writeSync(1, str + "\n"); + defaultPrintErr = (str) => fs.writeSync(2, str + "\n"); + } + var out = Module["print"] || defaultPrint; + var err = Module["printErr"] || defaultPrintErr; + Object.assign(Module, moduleOverrides); + moduleOverrides = null; + if (Module["arguments"]) + arguments_ = Module["arguments"]; + if (Module["thisProgram"]) + thisProgram = Module["thisProgram"]; + if (Module["quit"]) + quit_ = Module["quit"]; + var POINTER_SIZE = 4; + function warnOnce(text) { + if (!warnOnce.shown) + warnOnce.shown = {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + err(text); + } + } + function convertJsFunctionToWasm(func2, sig) { + if (typeof WebAssembly.Function === "function") { + var typeNames = { "i": "i32", "j": "i64", "f": "f32", "d": "f64" }; + var type = { parameters: [], results: sig[0] == "v" ? [] : [typeNames[sig[0]]] }; + for (var i = 1; i < sig.length; ++i) { + type.parameters.push(typeNames[sig[i]]); + } + return new WebAssembly.Function(type, func2); + } + var typeSection = [1, 0, 1, 96]; + var sigRet = sig.slice(0, 1); + var sigParam = sig.slice(1); + var typeCodes = { "i": 127, "j": 126, "f": 125, "d": 124 }; + typeSection.push(sigParam.length); + for (var i = 0; i < sigParam.length; ++i) { + typeSection.push(typeCodes[sigParam[i]]); + } + if (sigRet == "v") { + typeSection.push(0); + } else { + typeSection = typeSection.concat([1, typeCodes[sigRet]]); + } + typeSection[1] = typeSection.length - 2; + var bytes = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0].concat(typeSection, [2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0])); + var module2 = new WebAssembly.Module(bytes); + var instance = new WebAssembly.Instance(module2, { "e": { "f": func2 } }); + var wrappedFunc = instance.exports["f"]; + return wrappedFunc; + } + var freeTableIndexes = []; + var functionsInTableMap; + function getEmptyTableSlot() { + if (freeTableIndexes.length) { + return freeTableIndexes.pop(); + } + try { + wasmTable.grow(1); + } catch (err2) { + if (!(err2 instanceof RangeError)) { + throw err2; + } + throw "Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."; + } + return wasmTable.length - 1; + } + function updateTableMap(offset, count2) { + for (var i = offset; i < offset + count2; i++) { + var item = getWasmTableEntry(i); + if (item) { + functionsInTableMap.set(item, i); + } + } + } + var tempRet0 = 0; + var setTempRet0 = (value) => { + tempRet0 = value; + }; + var Atomics_load = Atomics.load; + var Atomics_store = Atomics.store; + var Atomics_compareExchange = Atomics.compareExchange; + var wasmBinary; + if (Module["wasmBinary"]) + wasmBinary = Module["wasmBinary"]; + var noExitRuntime = Module["noExitRuntime"] || true; + if (typeof WebAssembly !== "object") { + abort("no native wasm support detected"); + } + var wasmMemory; + var wasmModule; + var ABORT = false; + var EXITSTATUS; + function assert3(condition, text) { + if (!condition) { + abort(text); + } + } + function getCFunc(ident) { + var func2 = Module["_" + ident]; + return func2; + } + function ccall(ident, returnType, argTypes, args, opts) { + var toC = { "string": function(str) { + var ret2 = 0; + if (str !== null && str !== void 0 && str !== 0) { + var len = (str.length << 2) + 1; + ret2 = stackAlloc(len); + stringToUTF8(str, ret2, len); + } + return ret2; + }, "array": function(arr) { + var ret2 = stackAlloc(arr.length); + writeArrayToMemory(arr, ret2); + return ret2; + } }; + function convertReturnValue(ret2) { + if (returnType === "string") + return UTF8ToString(ret2); + if (returnType === "boolean") + return Boolean(ret2); + return ret2; + } + var func2 = getCFunc(ident); + var cArgs = []; + var stack2 = 0; + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack2 === 0) + stack2 = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func2.apply(null, cArgs); + function onDone(ret2) { + if (stack2 !== 0) + stackRestore(stack2); + return convertReturnValue(ret2); + } + ret = onDone(ret); + return ret; + } + function cwrap(ident, returnType, argTypes, opts) { + argTypes = argTypes || []; + var numericArgs = argTypes.every(function(type) { + return type === "number"; + }); + var numericRet = returnType !== "string"; + if (numericRet && numericArgs && !opts) { + return getCFunc(ident); + } + return function() { + return ccall(ident, returnType, argTypes, arguments, opts); + }; + } + var ALLOC_STACK = 1; + function TextDecoderWrapper(encoding) { + var textDecoder = new TextDecoder(encoding); + this.decode = (data) => { + if (data.buffer instanceof SharedArrayBuffer) { + data = new Uint8Array(data); + } + return textDecoder.decode.call(textDecoder, data); + }; + } + var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoderWrapper("utf8") : void 0; + function UTF8ArrayToString(heap, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + while (heap[endPtr] && !(endPtr >= endIdx)) + ++endPtr; + if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { + return UTF8Decoder.decode(heap.subarray(idx, endPtr)); + } else { + var str = ""; + while (idx < endPtr) { + var u0 = heap[idx++]; + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue; + } + var u1 = heap[idx++] & 63; + if ((u0 & 224) == 192) { + str += String.fromCharCode((u0 & 31) << 6 | u1); + continue; + } + var u2 = heap[idx++] & 63; + if ((u0 & 240) == 224) { + u0 = (u0 & 15) << 12 | u1 << 6 | u2; + } else { + u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63; + } + if (u0 < 65536) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); + } + } + } + return str; + } + function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(GROWABLE_HEAP_U8(), ptr, maxBytesToRead) : ""; + } + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) + return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023; + } + if (u <= 127) { + if (outIdx >= endIdx) + break; + heap[outIdx++] = u; + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) + break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63; + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) + break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } else { + if (outIdx + 3 >= endIdx) + break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } + } + heap[outIdx] = 0; + return outIdx - startIdx; + } + function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, GROWABLE_HEAP_U8(), outPtr, maxBytesToWrite); + } + function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) + u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; + if (u <= 127) + ++len; + else if (u <= 2047) + len += 2; + else if (u <= 65535) + len += 3; + else + len += 4; + } + return len; + } + var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoderWrapper("utf-16le") : void 0; + function writeArrayToMemory(array2, buffer3) { + GROWABLE_HEAP_I8().set(array2, buffer3); + } + function writeAsciiToMemory(str, buffer3, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + GROWABLE_HEAP_I8()[buffer3++ >> 0] = str.charCodeAt(i); + } + if (!dontAddNull) + GROWABLE_HEAP_I8()[buffer3 >> 0] = 0; + } + function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - x % multiple; + } + return x; + } + var buffer2, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; + if (ENVIRONMENT_IS_PTHREAD) { + buffer2 = Module["buffer"]; + } + function updateGlobalBufferAndViews(buf) { + buffer2 = buf; + Module["HEAP8"] = HEAP8 = new Int8Array(buf); + Module["HEAP16"] = HEAP16 = new Int16Array(buf); + Module["HEAP32"] = HEAP32 = new Int32Array(buf); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); + Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); + Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); + Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); + Module["HEAPF64"] = HEAPF64 = new Float64Array(buf); + } + var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 16777216; + if (ENVIRONMENT_IS_PTHREAD) { + wasmMemory = Module["wasmMemory"]; + buffer2 = Module["buffer"]; + } else { + if (Module["wasmMemory"]) { + wasmMemory = Module["wasmMemory"]; + } else { + wasmMemory = new WebAssembly.Memory({ "initial": INITIAL_MEMORY / 65536, "maximum": 2147483648 / 65536, "shared": true }); + if (!(wasmMemory.buffer instanceof SharedArrayBuffer)) { + err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"); + if (ENVIRONMENT_IS_NODE) { + console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"); + } + throw Error("bad memory"); + } + } + } + if (wasmMemory) { + buffer2 = wasmMemory.buffer; + } + INITIAL_MEMORY = buffer2.byteLength; + updateGlobalBufferAndViews(buffer2); + var wasmTable; + var __ATPRERUN__ = []; + var __ATINIT__ = []; + var __ATEXIT__ = []; + var __ATPOSTRUN__ = []; + var runtimeInitialized = false; + var runtimeExited = false; + var runtimeKeepaliveCounter = 0; + function keepRuntimeAlive() { + return noExitRuntime || runtimeKeepaliveCounter > 0; + } + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") + Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); + } + function initRuntime() { + runtimeInitialized = true; + if (ENVIRONMENT_IS_PTHREAD) + return; + callRuntimeCallbacks(__ATINIT__); + } + function exitRuntime() { + if (ENVIRONMENT_IS_PTHREAD) + return; + PThread.terminateAllThreads(); + runtimeExited = true; + } + function postRun() { + if (ENVIRONMENT_IS_PTHREAD) + return; + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") + Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); + } + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); + } + function addOnInit(cb) { + __ATINIT__.unshift(cb); + } + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); + } + var runDependencies = 0; + var runDependencyWatcher = null; + var dependenciesFulfilled = null; + function addRunDependency(id) { + runDependencies++; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + } + function removeRunDependency(id) { + runDependencies--; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } + } + Module["preloadedImages"] = {}; + Module["preloadedAudios"] = {}; + function abort(what) { + if (ENVIRONMENT_IS_PTHREAD) { + postMessage({ "cmd": "onAbort", "arg": what }); + } else { + if (Module["onAbort"]) { + Module["onAbort"](what); + } + } + what = "Aborted(" + what + ")"; + err(what); + ABORT = true; + EXITSTATUS = 1; + what += ". Build with -s ASSERTIONS=1 for more info."; + var e = new WebAssembly.RuntimeError(what); + readyPromiseReject(e); + throw e; + } + var dataURIPrefix = "data:application/octet-stream;base64,"; + function isDataURI(filename) { + return filename.startsWith(dataURIPrefix); + } + function isFileURI(filename) { + return filename.startsWith("file://"); + } + var wasmBinaryFile; + wasmBinaryFile = "tfjs-backend-wasm-threaded-simd.wasm"; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } else { + throw "both async and sync fetching of the wasm failed"; + } + } catch (err2) { + abort(err2); + } + } + function getBinaryPromise() { + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch === "function" && !isFileURI(wasmBinaryFile)) { + return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) { + if (!response["ok"]) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; + } + return response["arrayBuffer"](); + }).catch(function() { + return getBinary(wasmBinaryFile); + }); + } else { + if (readAsync) { + return new Promise(function(resolve, reject) { + readAsync(wasmBinaryFile, function(response) { + resolve(new Uint8Array(response)); + }, reject); + }); + } + } + } + return Promise.resolve().then(function() { + return getBinary(wasmBinaryFile); + }); + } + function createWasm() { + var info = { "env": asmLibraryArg, "wasi_snapshot_preview1": asmLibraryArg }; + function receiveInstance(instance, module2) { + var exports3 = instance.exports; + Module["asm"] = exports3; + registerTlsInit(Module["asm"]["emscripten_tls_init"]); + wasmTable = Module["asm"]["__indirect_function_table"]; + addOnInit(Module["asm"]["__wasm_call_ctors"]); + wasmModule = module2; + if (!ENVIRONMENT_IS_PTHREAD) { + var numWorkersToLoad = PThread.unusedWorkers.length; + PThread.unusedWorkers.forEach(function(w) { + PThread.loadWasmModuleToWorker(w, function() { + if (!--numWorkersToLoad) + removeRunDependency("wasm-instantiate"); + }); + }); + } + } + if (!ENVIRONMENT_IS_PTHREAD) { + addRunDependency("wasm-instantiate"); + } + function receiveInstantiationResult(result) { + receiveInstance(result["instance"], result["module"]); + } + function instantiateArrayBuffer(receiver) { + return getBinaryPromise().then(function(binary) { + return WebAssembly.instantiate(binary, info); + }).then(function(instance) { + return instance; + }).then(receiver, function(reason) { + err("failed to asynchronously prepare wasm: " + reason); + abort(reason); + }); + } + function instantiateAsync() { + if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && !isFileURI(wasmBinaryFile) && typeof fetch === "function") { + return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) { + var result = WebAssembly.instantiateStreaming(response, info); + return result.then(receiveInstantiationResult, function(reason) { + err("wasm streaming compile failed: " + reason); + err("falling back to ArrayBuffer instantiation"); + return instantiateArrayBuffer(receiveInstantiationResult); + }); + }); + } else { + return instantiateArrayBuffer(receiveInstantiationResult); + } + } + if (Module["instantiateWasm"]) { + try { + var exports2 = Module["instantiateWasm"](info, receiveInstance); + return exports2; + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false; + } + } + instantiateAsync().catch(readyPromiseReject); + return {}; + } + var tempDouble; + var tempI64; + var ASM_CONSTS = {}; + function callRuntimeCallbacks(callbacks2) { + while (callbacks2.length > 0) { + var callback = callbacks2.shift(); + if (typeof callback == "function") { + callback(Module); + continue; + } + var func2 = callback.func; + if (typeof func2 === "number") { + if (callback.arg === void 0) { + getWasmTableEntry(func2)(); + } else { + getWasmTableEntry(func2)(callback.arg); + } + } else { + func2(callback.arg === void 0 ? null : callback.arg); + } + } + } + function withStackSave(f) { + var stack2 = stackSave(); + var ret = f(); + stackRestore(stack2); + return ret; + } + function demangle(func2) { + return func2; + } + function demangleAll(text) { + var regex = /\b_Z[\w\d_]+/g; + return text.replace(regex, function(x) { + var y = demangle(x); + return x === y ? x : y + " [" + x + "]"; + }); + } + function killThread(pthread_ptr) { + GROWABLE_HEAP_I32()[pthread_ptr >> 2] = 0; + var pthread = PThread.pthreads[pthread_ptr]; + delete PThread.pthreads[pthread_ptr]; + pthread.worker.terminate(); + __emscripten_thread_free_data(pthread_ptr); + PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker), 1); + pthread.worker.pthread = void 0; + } + function cancelThread(pthread_ptr) { + var pthread = PThread.pthreads[pthread_ptr]; + pthread.worker.postMessage({ "cmd": "cancel" }); + } + function cleanupThread(pthread_ptr) { + var pthread = PThread.pthreads[pthread_ptr]; + if (pthread) { + GROWABLE_HEAP_I32()[pthread_ptr >> 2] = 0; + var worker = pthread.worker; + PThread.returnWorkerToPool(worker); + } + } + function _exit(status) { + exit(status); + } + function handleException(e) { + if (e instanceof ExitStatus || e == "unwind") { + return EXITSTATUS; + } + quit_(1, e); + } + var PThread = { unusedWorkers: [], runningWorkers: [], tlsInitFunctions: [], init: function() { + if (ENVIRONMENT_IS_PTHREAD) { + PThread.initWorker(); + } else { + PThread.initMainThread(); + } + }, initMainThread: function() { + var pthreadPoolSize = 8; + for (var i = 0; i < pthreadPoolSize; ++i) { + PThread.allocateUnusedWorker(); + } + }, initWorker: function() { + noExitRuntime = false; + }, pthreads: {}, setExitStatus: function(status) { + EXITSTATUS = status; + }, terminateAllThreads: function() { + for (var t in PThread.pthreads) { + var pthread = PThread.pthreads[t]; + if (pthread && pthread.worker) { + PThread.returnWorkerToPool(pthread.worker); + } + } + for (var i = 0; i < PThread.unusedWorkers.length; ++i) { + var worker = PThread.unusedWorkers[i]; + worker.terminate(); + } + PThread.unusedWorkers = []; + }, returnWorkerToPool: function(worker) { + PThread.runWithoutMainThreadQueuedCalls(function() { + delete PThread.pthreads[worker.pthread.threadInfoStruct]; + PThread.unusedWorkers.push(worker); + PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker), 1); + __emscripten_thread_free_data(worker.pthread.threadInfoStruct); + worker.pthread = void 0; + }); + }, runWithoutMainThreadQueuedCalls: function(func2) { + GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls >> 2] = 0; + try { + func2(); + } finally { + GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls >> 2] = 1; + } + }, receiveObjectTransfer: function(data) { + }, threadInit: function() { + for (var i in PThread.tlsInitFunctions) { + PThread.tlsInitFunctions[i](); + } + }, loadWasmModuleToWorker: function(worker, onFinishedLoading) { + worker.onmessage = (e) => { + var d = e["data"]; + var cmd = d["cmd"]; + if (worker.pthread) + PThread.currentProxiedOperationCallerThread = worker.pthread.threadInfoStruct; + if (d["targetThread"] && d["targetThread"] != _pthread_self()) { + var thread = PThread.pthreads[d.targetThread]; + if (thread) { + thread.worker.postMessage(d, d["transferList"]); + } else { + err('Internal error! Worker sent a message "' + cmd + '" to target pthread ' + d["targetThread"] + ", but that thread no longer exists!"); + } + PThread.currentProxiedOperationCallerThread = void 0; + return; + } + if (cmd === "processQueuedMainThreadWork") { + _emscripten_main_thread_process_queued_calls(); + } else if (cmd === "spawnThread") { + spawnThread(d); + } else if (cmd === "cleanupThread") { + cleanupThread(d["thread"]); + } else if (cmd === "killThread") { + killThread(d["thread"]); + } else if (cmd === "cancelThread") { + cancelThread(d["thread"]); + } else if (cmd === "loaded") { + worker.loaded = true; + if (onFinishedLoading) + onFinishedLoading(worker); + if (worker.runPthread) { + worker.runPthread(); + delete worker.runPthread; + } + } else if (cmd === "print") { + out("Thread " + d["threadId"] + ": " + d["text"]); + } else if (cmd === "printErr") { + err("Thread " + d["threadId"] + ": " + d["text"]); + } else if (cmd === "alert") { + alert("Thread " + d["threadId"] + ": " + d["text"]); + } else if (d.target === "setimmediate") { + worker.postMessage(d); + } else if (cmd === "onAbort") { + if (Module["onAbort"]) { + Module["onAbort"](d["arg"]); + } + } else { + err("worker sent an unknown command " + cmd); + } + PThread.currentProxiedOperationCallerThread = void 0; + }; + worker.onerror = (e) => { + var message = "worker sent an error!"; + err(message + " " + e.filename + ":" + e.lineno + ": " + e.message); + throw e; + }; + if (ENVIRONMENT_IS_NODE) { + worker.on("message", function(data) { + worker.onmessage({ data }); + }); + worker.on("error", function(e) { + worker.onerror(e); + }); + worker.on("detachedExit", function() { + }); + } + worker.postMessage({ "cmd": "load", "urlOrBlob": Module["mainScriptUrlOrBlob"] || _scriptDir, "wasmMemory": wasmMemory, "wasmModule": wasmModule }); + }, allocateUnusedWorker: function() { + var pthreadMainJs = locateFile("tfjs-backend-wasm-threaded-simd.worker.js"); + PThread.unusedWorkers.push(new Worker(pthreadMainJs)); + }, getNewWorker: function() { + if (PThread.unusedWorkers.length == 0) { + PThread.allocateUnusedWorker(); + PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0]); + } + return PThread.unusedWorkers.pop(); + } }; + function establishStackSpace() { + var pthread_ptr = _pthread_self(); + var stackTop = GROWABLE_HEAP_I32()[pthread_ptr + 44 >> 2]; + var stackSize = GROWABLE_HEAP_I32()[pthread_ptr + 48 >> 2]; + var stackMax = stackTop - stackSize; + _emscripten_stack_set_limits(stackTop, stackMax); + stackRestore(stackTop); + } + Module["establishStackSpace"] = establishStackSpace; + function exitOnMainThread(returnCode) { + if (ENVIRONMENT_IS_PTHREAD) + return _emscripten_proxy_to_main_thread_js(1, 0, returnCode); + try { + _exit(returnCode); + } catch (e) { + handleException(e); + } + } + var wasmTableMirror = []; + function getWasmTableEntry(funcPtr) { + var func2 = wasmTableMirror[funcPtr]; + if (!func2) { + if (funcPtr >= wasmTableMirror.length) + wasmTableMirror.length = funcPtr + 1; + wasmTableMirror[funcPtr] = func2 = wasmTable.get(funcPtr); + } + return func2; + } + function invokeEntryPoint(ptr, arg) { + return getWasmTableEntry(ptr)(arg); + } + Module["invokeEntryPoint"] = invokeEntryPoint; + function jsStackTrace() { + var error = new Error(); + if (!error.stack) { + try { + throw new Error(); + } catch (e) { + error = e; + } + if (!error.stack) { + return "(no stack trace available)"; + } + } + return error.stack.toString(); + } + function registerTlsInit(tlsInitFunc, moduleExports, metadata) { + PThread.tlsInitFunctions.push(tlsInitFunc); + } + function setWasmTableEntry(idx, func2) { + wasmTable.set(idx, func2); + wasmTableMirror[idx] = func2; + } + var _emscripten_get_now; + if (ENVIRONMENT_IS_NODE) { + _emscripten_get_now = () => { + var t = process["hrtime"](); + return t[0] * 1e3 + t[1] / 1e6; + }; + } else if (ENVIRONMENT_IS_PTHREAD) { + _emscripten_get_now = () => performance.now() - Module["__performance_now_clock_drift"]; + } else + _emscripten_get_now = () => performance.now(); + var _emscripten_get_now_is_monotonic = true; + function setErrNo(value) { + GROWABLE_HEAP_I32()[___errno_location() >> 2] = value; + return value; + } + function _clock_gettime(clk_id, tp) { + var now2; + if (clk_id === 0) { + now2 = Date.now(); + } else if ((clk_id === 1 || clk_id === 4) && _emscripten_get_now_is_monotonic) { + now2 = _emscripten_get_now(); + } else { + setErrNo(28); + return -1; + } + GROWABLE_HEAP_I32()[tp >> 2] = now2 / 1e3 | 0; + GROWABLE_HEAP_I32()[tp + 4 >> 2] = now2 % 1e3 * 1e3 * 1e3 | 0; + return 0; + } + function ___clock_gettime(a0, a12) { + return _clock_gettime(a0, a12); + } + function ___emscripten_init_main_thread_js(tb) { + __emscripten_thread_init(tb, !ENVIRONMENT_IS_WORKER, 1, !ENVIRONMENT_IS_WEB); + PThread.threadInit(); + } + function ___emscripten_thread_cleanup(thread) { + if (!ENVIRONMENT_IS_PTHREAD) + cleanupThread(thread); + else + postMessage({ "cmd": "cleanupThread", "thread": thread }); + } + function spawnThread(threadParams) { + var worker = PThread.getNewWorker(); + if (!worker) { + return 6; + } + PThread.runningWorkers.push(worker); + var pthread = PThread.pthreads[threadParams.pthread_ptr] = { worker, threadInfoStruct: threadParams.pthread_ptr }; + worker.pthread = pthread; + var msg = { "cmd": "run", "start_routine": threadParams.startRoutine, "arg": threadParams.arg, "threadInfoStruct": threadParams.pthread_ptr }; + worker.runPthread = () => { + msg.time = performance.now(); + worker.postMessage(msg, threadParams.transferList); + }; + if (worker.loaded) { + worker.runPthread(); + delete worker.runPthread; + } + return 0; + } + function ___pthread_create_js(pthread_ptr, attr, start_routine, arg) { + if (typeof SharedArrayBuffer === "undefined") { + err("Current environment does not support SharedArrayBuffer, pthreads are not available!"); + return 6; + } + var transferList = []; + var error = 0; + if (ENVIRONMENT_IS_PTHREAD && (transferList.length === 0 || error)) { + return _emscripten_sync_run_in_main_thread_4(687865856, pthread_ptr, attr, start_routine, arg); + } + if (error) + return error; + var threadParams = { startRoutine: start_routine, pthread_ptr, arg, transferList }; + if (ENVIRONMENT_IS_PTHREAD) { + threadParams.cmd = "spawnThread"; + postMessage(threadParams, transferList); + return 0; + } + return spawnThread(threadParams); + } + function __emscripten_default_pthread_stack_size() { + return 2097152; + } + function __emscripten_notify_thread_queue(targetThreadId, mainThreadId) { + if (targetThreadId == mainThreadId) { + postMessage({ "cmd": "processQueuedMainThreadWork" }); + } else if (ENVIRONMENT_IS_PTHREAD) { + postMessage({ "targetThread": targetThreadId, "cmd": "processThreadQueue" }); + } else { + var pthread = PThread.pthreads[targetThreadId]; + var worker = pthread && pthread.worker; + if (!worker) { + return; + } + worker.postMessage({ "cmd": "processThreadQueue" }); + } + return 1; + } + function _abort() { + abort(""); + } + function _emscripten_check_blocking_allowed() { + if (ENVIRONMENT_IS_NODE) + return; + if (ENVIRONMENT_IS_WORKER) + return; + warnOnce("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread"); + } + function _emscripten_get_heap_max() { + return 2147483648; + } + function _emscripten_memcpy_big(dest, src, num) { + GROWABLE_HEAP_U8().copyWithin(dest, src, src + num); + } + function _emscripten_num_logical_cores() { + if (ENVIRONMENT_IS_NODE) + return require_os().cpus().length; + return navigator["hardwareConcurrency"]; + } + function _emscripten_proxy_to_main_thread_js(index, sync) { + var numCallArgs = arguments.length - 2; + var outerArgs = arguments; + return withStackSave(function() { + var serializedNumCallArgs = numCallArgs; + var args = stackAlloc(serializedNumCallArgs * 8); + var b = args >> 3; + for (var i = 0; i < numCallArgs; i++) { + var arg = outerArgs[2 + i]; + GROWABLE_HEAP_F64()[b + i] = arg; + } + return _emscripten_run_in_main_runtime_thread_js(index, serializedNumCallArgs, args, sync); + }); + } + var _emscripten_receive_on_main_thread_js_callArgs = []; + function _emscripten_receive_on_main_thread_js(index, numCallArgs, args) { + _emscripten_receive_on_main_thread_js_callArgs.length = numCallArgs; + var b = args >> 3; + for (var i = 0; i < numCallArgs; i++) { + _emscripten_receive_on_main_thread_js_callArgs[i] = GROWABLE_HEAP_F64()[b + i]; + } + var isEmAsmConst = index < 0; + var func2 = !isEmAsmConst ? proxiedFunctionTable[index] : ASM_CONSTS[-index - 1]; + return func2.apply(null, _emscripten_receive_on_main_thread_js_callArgs); + } + function emscripten_realloc_buffer(size) { + try { + wasmMemory.grow(size - buffer2.byteLength + 65535 >>> 16); + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1; + } catch (e) { + } + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = GROWABLE_HEAP_U8().length; + requestedSize = requestedSize >>> 0; + if (requestedSize <= oldSize) { + return false; + } + var maxHeapSize = _emscripten_get_heap_max(); + if (requestedSize > maxHeapSize) { + return false; + } + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + return true; + } + } + return false; + } + var JSEvents = { inEventHandler: 0, removeAllEventListeners: function() { + for (var i = JSEvents.eventHandlers.length - 1; i >= 0; --i) { + JSEvents._removeHandler(i); + } + JSEvents.eventHandlers = []; + JSEvents.deferredCalls = []; + }, registerRemoveEventListeners: function() { + if (!JSEvents.removeEventListenersRegistered) { + __ATEXIT__.push(JSEvents.removeAllEventListeners); + JSEvents.removeEventListenersRegistered = true; + } + }, deferredCalls: [], deferCall: function(targetFunction, precedence, argsList) { + function arraysHaveEqualContent(arrA, arrB) { + if (arrA.length != arrB.length) + return false; + for (var i2 in arrA) { + if (arrA[i2] != arrB[i2]) + return false; + } + return true; + } + for (var i in JSEvents.deferredCalls) { + var call = JSEvents.deferredCalls[i]; + if (call.targetFunction == targetFunction && arraysHaveEqualContent(call.argsList, argsList)) { + return; + } + } + JSEvents.deferredCalls.push({ targetFunction, precedence, argsList }); + JSEvents.deferredCalls.sort(function(x, y) { + return x.precedence < y.precedence; + }); + }, removeDeferredCalls: function(targetFunction) { + for (var i = 0; i < JSEvents.deferredCalls.length; ++i) { + if (JSEvents.deferredCalls[i].targetFunction == targetFunction) { + JSEvents.deferredCalls.splice(i, 1); + --i; + } + } + }, canPerformEventHandlerRequests: function() { + return JSEvents.inEventHandler && JSEvents.currentEventHandler.allowsDeferredCalls; + }, runDeferredCalls: function() { + if (!JSEvents.canPerformEventHandlerRequests()) { + return; + } + for (var i = 0; i < JSEvents.deferredCalls.length; ++i) { + var call = JSEvents.deferredCalls[i]; + JSEvents.deferredCalls.splice(i, 1); + --i; + call.targetFunction.apply(null, call.argsList); + } + }, eventHandlers: [], removeAllHandlersOnTarget: function(target, eventTypeString) { + for (var i = 0; i < JSEvents.eventHandlers.length; ++i) { + if (JSEvents.eventHandlers[i].target == target && (!eventTypeString || eventTypeString == JSEvents.eventHandlers[i].eventTypeString)) { + JSEvents._removeHandler(i--); + } + } + }, _removeHandler: function(i) { + var h = JSEvents.eventHandlers[i]; + h.target.removeEventListener(h.eventTypeString, h.eventListenerFunc, h.useCapture); + JSEvents.eventHandlers.splice(i, 1); + }, registerOrRemoveHandler: function(eventHandler) { + var jsEventHandler = function jsEventHandler2(event) { + ++JSEvents.inEventHandler; + JSEvents.currentEventHandler = eventHandler; + JSEvents.runDeferredCalls(); + eventHandler.handlerFunc(event); + JSEvents.runDeferredCalls(); + --JSEvents.inEventHandler; + }; + if (eventHandler.callbackfunc) { + eventHandler.eventListenerFunc = jsEventHandler; + eventHandler.target.addEventListener(eventHandler.eventTypeString, jsEventHandler, eventHandler.useCapture); + JSEvents.eventHandlers.push(eventHandler); + JSEvents.registerRemoveEventListeners(); + } else { + for (var i = 0; i < JSEvents.eventHandlers.length; ++i) { + if (JSEvents.eventHandlers[i].target == eventHandler.target && JSEvents.eventHandlers[i].eventTypeString == eventHandler.eventTypeString) { + JSEvents._removeHandler(i--); + } + } + } + }, queueEventHandlerOnThread_iiii: function(targetThread, eventHandlerFunc, eventTypeId, eventData, userData) { + withStackSave(function() { + var varargs = stackAlloc(12); + GROWABLE_HEAP_I32()[varargs >> 2] = eventTypeId; + GROWABLE_HEAP_I32()[varargs + 4 >> 2] = eventData; + GROWABLE_HEAP_I32()[varargs + 8 >> 2] = userData; + _emscripten_dispatch_to_thread_(targetThread, 637534208, eventHandlerFunc, eventData, varargs); + }); + }, getTargetThreadForEventCallback: function(targetThread) { + switch (targetThread) { + case 1: + return 0; + case 2: + return PThread.currentProxiedOperationCallerThread; + default: + return targetThread; + } + }, getNodeNameForTarget: function(target) { + if (!target) + return ""; + if (target == window) + return "#window"; + if (target == screen) + return "#screen"; + return target && target.nodeName ? target.nodeName : ""; + }, fullscreenEnabled: function() { + return document.fullscreenEnabled || document.webkitFullscreenEnabled; + } }; + function stringToNewUTF8(jsString) { + var length = lengthBytesUTF8(jsString) + 1; + var cString = _malloc(length); + stringToUTF8(jsString, cString, length); + return cString; + } + function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread, targetCanvas, width, height) { + withStackSave(function() { + var varargs = stackAlloc(12); + var targetCanvasPtr = 0; + if (targetCanvas) { + targetCanvasPtr = stringToNewUTF8(targetCanvas); + } + GROWABLE_HEAP_I32()[varargs >> 2] = targetCanvasPtr; + GROWABLE_HEAP_I32()[varargs + 4 >> 2] = width; + GROWABLE_HEAP_I32()[varargs + 8 >> 2] = height; + _emscripten_dispatch_to_thread_(targetThread, 657457152, 0, targetCanvasPtr, varargs); + }); + } + function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread, targetCanvas, width, height) { + targetCanvas = targetCanvas ? UTF8ToString(targetCanvas) : ""; + _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread, targetCanvas, width, height); + } + function maybeCStringToJsString(cString) { + return cString > 2 ? UTF8ToString(cString) : cString; + } + var specialHTMLTargets = [0, typeof document !== "undefined" ? document : 0, typeof window !== "undefined" ? window : 0]; + function findEventTarget(target) { + target = maybeCStringToJsString(target); + var domElement = specialHTMLTargets[target] || (typeof document !== "undefined" ? document.querySelector(target) : void 0); + return domElement; + } + function findCanvasEventTarget(target) { + return findEventTarget(target); + } + function _emscripten_set_canvas_element_size_calling_thread(target, width, height) { + var canvas = findCanvasEventTarget(target); + if (!canvas) + return -4; + if (canvas.canvasSharedPtr) { + GROWABLE_HEAP_I32()[canvas.canvasSharedPtr >> 2] = width; + GROWABLE_HEAP_I32()[canvas.canvasSharedPtr + 4 >> 2] = height; + } + if (canvas.offscreenCanvas || !canvas.controlTransferredOffscreen) { + if (canvas.offscreenCanvas) + canvas = canvas.offscreenCanvas; + var autoResizeViewport = false; + if (canvas.GLctxObject && canvas.GLctxObject.GLctx) { + var prevViewport = canvas.GLctxObject.GLctx.getParameter(2978); + autoResizeViewport = prevViewport[0] === 0 && prevViewport[1] === 0 && prevViewport[2] === canvas.width && prevViewport[3] === canvas.height; + } + canvas.width = width; + canvas.height = height; + if (autoResizeViewport) { + canvas.GLctxObject.GLctx.viewport(0, 0, width, height); + } + } else if (canvas.canvasSharedPtr) { + var targetThread = GROWABLE_HEAP_I32()[canvas.canvasSharedPtr + 8 >> 2]; + _emscripten_set_offscreencanvas_size_on_target_thread(targetThread, target, width, height); + return 1; + } else { + return -4; + } + return 0; + } + function _emscripten_set_canvas_element_size_main_thread(target, width, height) { + if (ENVIRONMENT_IS_PTHREAD) + return _emscripten_proxy_to_main_thread_js(2, 1, target, width, height); + return _emscripten_set_canvas_element_size_calling_thread(target, width, height); + } + function _emscripten_set_canvas_element_size(target, width, height) { + var canvas = findCanvasEventTarget(target); + if (canvas) { + return _emscripten_set_canvas_element_size_calling_thread(target, width, height); + } else { + return _emscripten_set_canvas_element_size_main_thread(target, width, height); + } + } + function _emscripten_unwind_to_js_event_loop() { + throw "unwind"; + } + function __webgl_enable_ANGLE_instanced_arrays(ctx) { + var ext = ctx.getExtension("ANGLE_instanced_arrays"); + if (ext) { + ctx["vertexAttribDivisor"] = function(index, divisor) { + ext["vertexAttribDivisorANGLE"](index, divisor); + }; + ctx["drawArraysInstanced"] = function(mode, first, count2, primcount) { + ext["drawArraysInstancedANGLE"](mode, first, count2, primcount); + }; + ctx["drawElementsInstanced"] = function(mode, count2, type, indices, primcount) { + ext["drawElementsInstancedANGLE"](mode, count2, type, indices, primcount); + }; + return 1; + } + } + function __webgl_enable_OES_vertex_array_object(ctx) { + var ext = ctx.getExtension("OES_vertex_array_object"); + if (ext) { + ctx["createVertexArray"] = function() { + return ext["createVertexArrayOES"](); + }; + ctx["deleteVertexArray"] = function(vao) { + ext["deleteVertexArrayOES"](vao); + }; + ctx["bindVertexArray"] = function(vao) { + ext["bindVertexArrayOES"](vao); + }; + ctx["isVertexArray"] = function(vao) { + return ext["isVertexArrayOES"](vao); + }; + return 1; + } + } + function __webgl_enable_WEBGL_draw_buffers(ctx) { + var ext = ctx.getExtension("WEBGL_draw_buffers"); + if (ext) { + ctx["drawBuffers"] = function(n, bufs) { + ext["drawBuffersWEBGL"](n, bufs); + }; + return 1; + } + } + function __webgl_enable_WEBGL_multi_draw(ctx) { + return !!(ctx.multiDrawWebgl = ctx.getExtension("WEBGL_multi_draw")); + } + var GL = { counter: 1, buffers: [], programs: [], framebuffers: [], renderbuffers: [], textures: [], shaders: [], vaos: [], contexts: {}, offscreenCanvases: {}, queries: [], stringCache: {}, unpackAlignment: 4, recordError: function recordError(errorCode) { + if (!GL.lastError) { + GL.lastError = errorCode; + } + }, getNewId: function(table) { + var ret = GL.counter++; + for (var i = table.length; i < ret; i++) { + table[i] = null; + } + return ret; + }, getSource: function(shader, count2, string, length) { + var source = ""; + for (var i = 0; i < count2; ++i) { + var len = length ? GROWABLE_HEAP_I32()[length + i * 4 >> 2] : -1; + source += UTF8ToString(GROWABLE_HEAP_I32()[string + i * 4 >> 2], len < 0 ? void 0 : len); + } + return source; + }, createContext: function(canvas, webGLContextAttributes) { + if (!canvas.getContextSafariWebGL2Fixed) { + canvas.getContextSafariWebGL2Fixed = canvas.getContext; + canvas.getContext = function(ver, attrs) { + var gl = canvas.getContextSafariWebGL2Fixed(ver, attrs); + return ver == "webgl" == gl instanceof WebGLRenderingContext ? gl : null; + }; + } + var ctx = canvas.getContext("webgl", webGLContextAttributes); + if (!ctx) + return 0; + var handle = GL.registerContext(ctx, webGLContextAttributes); + return handle; + }, registerContext: function(ctx, webGLContextAttributes) { + var handle = _malloc(8); + GROWABLE_HEAP_I32()[handle + 4 >> 2] = _pthread_self(); + var context = { handle, attributes: webGLContextAttributes, version: webGLContextAttributes.majorVersion, GLctx: ctx }; + if (ctx.canvas) + ctx.canvas.GLctxObject = context; + GL.contexts[handle] = context; + if (typeof webGLContextAttributes.enableExtensionsByDefault === "undefined" || webGLContextAttributes.enableExtensionsByDefault) { + GL.initExtensions(context); + } + return handle; + }, makeContextCurrent: function(contextHandle) { + GL.currentContext = GL.contexts[contextHandle]; + Module.ctx = GLctx = GL.currentContext && GL.currentContext.GLctx; + return !(contextHandle && !GLctx); + }, getContext: function(contextHandle) { + return GL.contexts[contextHandle]; + }, deleteContext: function(contextHandle) { + if (GL.currentContext === GL.contexts[contextHandle]) + GL.currentContext = null; + if (typeof JSEvents === "object") + JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas); + if (GL.contexts[contextHandle] && GL.contexts[contextHandle].GLctx.canvas) + GL.contexts[contextHandle].GLctx.canvas.GLctxObject = void 0; + _free(GL.contexts[contextHandle].handle); + GL.contexts[contextHandle] = null; + }, initExtensions: function(context) { + if (!context) + context = GL.currentContext; + if (context.initExtensionsDone) + return; + context.initExtensionsDone = true; + var GLctx2 = context.GLctx; + __webgl_enable_ANGLE_instanced_arrays(GLctx2); + __webgl_enable_OES_vertex_array_object(GLctx2); + __webgl_enable_WEBGL_draw_buffers(GLctx2); + { + GLctx2.disjointTimerQueryExt = GLctx2.getExtension("EXT_disjoint_timer_query"); + } + __webgl_enable_WEBGL_multi_draw(GLctx2); + var exts = GLctx2.getSupportedExtensions() || []; + exts.forEach(function(ext) { + if (!ext.includes("lose_context") && !ext.includes("debug")) { + GLctx2.getExtension(ext); + } + }); + } }; + var __emscripten_webgl_power_preferences = ["default", "low-power", "high-performance"]; + function _emscripten_webgl_do_create_context(target, attributes) { + var a = attributes >> 2; + var powerPreference = GROWABLE_HEAP_I32()[a + (24 >> 2)]; + var contextAttributes = { "alpha": !!GROWABLE_HEAP_I32()[a + (0 >> 2)], "depth": !!GROWABLE_HEAP_I32()[a + (4 >> 2)], "stencil": !!GROWABLE_HEAP_I32()[a + (8 >> 2)], "antialias": !!GROWABLE_HEAP_I32()[a + (12 >> 2)], "premultipliedAlpha": !!GROWABLE_HEAP_I32()[a + (16 >> 2)], "preserveDrawingBuffer": !!GROWABLE_HEAP_I32()[a + (20 >> 2)], "powerPreference": __emscripten_webgl_power_preferences[powerPreference], "failIfMajorPerformanceCaveat": !!GROWABLE_HEAP_I32()[a + (28 >> 2)], majorVersion: GROWABLE_HEAP_I32()[a + (32 >> 2)], minorVersion: GROWABLE_HEAP_I32()[a + (36 >> 2)], enableExtensionsByDefault: GROWABLE_HEAP_I32()[a + (40 >> 2)], explicitSwapControl: GROWABLE_HEAP_I32()[a + (44 >> 2)], proxyContextToMainThread: GROWABLE_HEAP_I32()[a + (48 >> 2)], renderViaOffscreenBackBuffer: GROWABLE_HEAP_I32()[a + (52 >> 2)] }; + var canvas = findCanvasEventTarget(target); + if (!canvas) { + return 0; + } + if (contextAttributes.explicitSwapControl) { + return 0; + } + var contextHandle = GL.createContext(canvas, contextAttributes); + return contextHandle; + } + function _emscripten_webgl_create_context(a0, a12) { + return _emscripten_webgl_do_create_context(a0, a12); + } + var SYSCALLS = { mappings: {}, buffers: [null, [], []], printChar: function(stream, curr) { + var buffer3 = SYSCALLS.buffers[stream]; + if (curr === 0 || curr === 10) { + (stream === 1 ? out : err)(UTF8ArrayToString(buffer3, 0)); + buffer3.length = 0; + } else { + buffer3.push(curr); + } + }, varargs: void 0, get: function() { + SYSCALLS.varargs += 4; + var ret = GROWABLE_HEAP_I32()[SYSCALLS.varargs - 4 >> 2]; + return ret; + }, getStr: function(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, get64: function(low, high) { + return low; + } }; + function _fd_close(fd) { + if (ENVIRONMENT_IS_PTHREAD) + return _emscripten_proxy_to_main_thread_js(3, 1, fd); + return 0; + } + function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { + if (ENVIRONMENT_IS_PTHREAD) + return _emscripten_proxy_to_main_thread_js(4, 1, fd, offset_low, offset_high, whence, newOffset); + } + function _fd_write(fd, iov, iovcnt, pnum) { + if (ENVIRONMENT_IS_PTHREAD) + return _emscripten_proxy_to_main_thread_js(5, 1, fd, iov, iovcnt, pnum); + var num = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = GROWABLE_HEAP_I32()[iov >> 2]; + var len = GROWABLE_HEAP_I32()[iov + 4 >> 2]; + iov += 8; + for (var j = 0; j < len; j++) { + SYSCALLS.printChar(fd, GROWABLE_HEAP_U8()[ptr + j]); + } + num += len; + } + GROWABLE_HEAP_I32()[pnum >> 2] = num; + return 0; + } + function _setTempRet0(val) { + setTempRet0(val); + } + PThread.init(); + var GLctx; + var proxiedFunctionTable = [null, exitOnMainThread, _emscripten_set_canvas_element_size_main_thread, _fd_close, _fd_seek, _fd_write]; + var ASSERTIONS = false; + var asmLibraryArg = { "__clock_gettime": ___clock_gettime, "__emscripten_init_main_thread_js": ___emscripten_init_main_thread_js, "__emscripten_thread_cleanup": ___emscripten_thread_cleanup, "__pthread_create_js": ___pthread_create_js, "_emscripten_default_pthread_stack_size": __emscripten_default_pthread_stack_size, "_emscripten_notify_thread_queue": __emscripten_notify_thread_queue, "abort": _abort, "emscripten_check_blocking_allowed": _emscripten_check_blocking_allowed, "emscripten_get_heap_max": _emscripten_get_heap_max, "emscripten_get_now": _emscripten_get_now, "emscripten_memcpy_big": _emscripten_memcpy_big, "emscripten_num_logical_cores": _emscripten_num_logical_cores, "emscripten_receive_on_main_thread_js": _emscripten_receive_on_main_thread_js, "emscripten_resize_heap": _emscripten_resize_heap, "emscripten_set_canvas_element_size": _emscripten_set_canvas_element_size, "emscripten_unwind_to_js_event_loop": _emscripten_unwind_to_js_event_loop, "emscripten_webgl_create_context": _emscripten_webgl_create_context, "exit": _exit, "fd_close": _fd_close, "fd_seek": _fd_seek, "fd_write": _fd_write, "memory": wasmMemory || Module["wasmMemory"], "setTempRet0": _setTempRet0 }; + var asm = createWasm(); + var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function() { + return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["__wasm_call_ctors"]).apply(null, arguments); + }; + var _init = Module["_init"] = function() { + return (_init = Module["_init"] = Module["asm"]["init"]).apply(null, arguments); + }; + var _init_with_threads_count = Module["_init_with_threads_count"] = function() { + return (_init_with_threads_count = Module["_init_with_threads_count"] = Module["asm"]["init_with_threads_count"]).apply(null, arguments); + }; + var _get_threads_count = Module["_get_threads_count"] = function() { + return (_get_threads_count = Module["_get_threads_count"] = Module["asm"]["get_threads_count"]).apply(null, arguments); + }; + var _register_tensor = Module["_register_tensor"] = function() { + return (_register_tensor = Module["_register_tensor"] = Module["asm"]["register_tensor"]).apply(null, arguments); + }; + var _dispose_data = Module["_dispose_data"] = function() { + return (_dispose_data = Module["_dispose_data"] = Module["asm"]["dispose_data"]).apply(null, arguments); + }; + var _dispose = Module["_dispose"] = function() { + return (_dispose = Module["_dispose"] = Module["asm"]["dispose"]).apply(null, arguments); + }; + var _Abs = Module["_Abs"] = function() { + return (_Abs = Module["_Abs"] = Module["asm"]["Abs"]).apply(null, arguments); + }; + var _Add = Module["_Add"] = function() { + return (_Add = Module["_Add"] = Module["asm"]["Add"]).apply(null, arguments); + }; + var _AddN = Module["_AddN"] = function() { + return (_AddN = Module["_AddN"] = Module["asm"]["AddN"]).apply(null, arguments); + }; + var _All = Module["_All"] = function() { + return (_All = Module["_All"] = Module["asm"]["All"]).apply(null, arguments); + }; + var _Any = Module["_Any"] = function() { + return (_Any = Module["_Any"] = Module["asm"]["Any"]).apply(null, arguments); + }; + var _ArgMax = Module["_ArgMax"] = function() { + return (_ArgMax = Module["_ArgMax"] = Module["asm"]["ArgMax"]).apply(null, arguments); + }; + var _AvgPool = Module["_AvgPool"] = function() { + return (_AvgPool = Module["_AvgPool"] = Module["asm"]["AvgPool"]).apply(null, arguments); + }; + var _BatchMatMul = Module["_BatchMatMul"] = function() { + return (_BatchMatMul = Module["_BatchMatMul"] = Module["asm"]["BatchMatMul"]).apply(null, arguments); + }; + var _Ceil = Module["_Ceil"] = function() { + return (_Ceil = Module["_Ceil"] = Module["asm"]["Ceil"]).apply(null, arguments); + }; + var _ClipByValue = Module["_ClipByValue"] = function() { + return (_ClipByValue = Module["_ClipByValue"] = Module["asm"]["ClipByValue"]).apply(null, arguments); + }; + var _Conv2D = Module["_Conv2D"] = function() { + return (_Conv2D = Module["_Conv2D"] = Module["asm"]["Conv2D"]).apply(null, arguments); + }; + var _Conv2DBackpropInput = Module["_Conv2DBackpropInput"] = function() { + return (_Conv2DBackpropInput = Module["_Conv2DBackpropInput"] = Module["asm"]["Conv2DBackpropInput"]).apply(null, arguments); + }; + var _Cos = Module["_Cos"] = function() { + return (_Cos = Module["_Cos"] = Module["asm"]["Cos"]).apply(null, arguments); + }; + var _Cosh = Module["_Cosh"] = function() { + return (_Cosh = Module["_Cosh"] = Module["asm"]["Cosh"]).apply(null, arguments); + }; + var _CropAndResize = Module["_CropAndResize"] = function() { + return (_CropAndResize = Module["_CropAndResize"] = Module["asm"]["CropAndResize"]).apply(null, arguments); + }; + var _Cumprod = Module["_Cumprod"] = function() { + return (_Cumprod = Module["_Cumprod"] = Module["asm"]["Cumprod"]).apply(null, arguments); + }; + var _Cumsum = Module["_Cumsum"] = function() { + return (_Cumsum = Module["_Cumsum"] = Module["asm"]["Cumsum"]).apply(null, arguments); + }; + var _DepthToSpace = Module["_DepthToSpace"] = function() { + return (_DepthToSpace = Module["_DepthToSpace"] = Module["asm"]["DepthToSpace"]).apply(null, arguments); + }; + var _DepthwiseConv2dNative = Module["_DepthwiseConv2dNative"] = function() { + return (_DepthwiseConv2dNative = Module["_DepthwiseConv2dNative"] = Module["asm"]["DepthwiseConv2dNative"]).apply(null, arguments); + }; + var _Elu = Module["_Elu"] = function() { + return (_Elu = Module["_Elu"] = Module["asm"]["Elu"]).apply(null, arguments); + }; + var _Equal = Module["_Equal"] = function() { + return (_Equal = Module["_Equal"] = Module["asm"]["Equal"]).apply(null, arguments); + }; + var _Exp = Module["_Exp"] = function() { + return (_Exp = Module["_Exp"] = Module["asm"]["Exp"]).apply(null, arguments); + }; + var _FlipLeftRight = Module["_FlipLeftRight"] = function() { + return (_FlipLeftRight = Module["_FlipLeftRight"] = Module["asm"]["FlipLeftRight"]).apply(null, arguments); + }; + var _Floor = Module["_Floor"] = function() { + return (_Floor = Module["_Floor"] = Module["asm"]["Floor"]).apply(null, arguments); + }; + var _FloorDiv = Module["_FloorDiv"] = function() { + return (_FloorDiv = Module["_FloorDiv"] = Module["asm"]["FloorDiv"]).apply(null, arguments); + }; + var _FusedBatchNorm = Module["_FusedBatchNorm"] = function() { + return (_FusedBatchNorm = Module["_FusedBatchNorm"] = Module["asm"]["FusedBatchNorm"]).apply(null, arguments); + }; + var _FusedConv2D = Module["_FusedConv2D"] = function() { + return (_FusedConv2D = Module["_FusedConv2D"] = Module["asm"]["FusedConv2D"]).apply(null, arguments); + }; + var _FusedDepthwiseConv2D = Module["_FusedDepthwiseConv2D"] = function() { + return (_FusedDepthwiseConv2D = Module["_FusedDepthwiseConv2D"] = Module["asm"]["FusedDepthwiseConv2D"]).apply(null, arguments); + }; + var _Gather = Module["_Gather"] = function() { + return (_Gather = Module["_Gather"] = Module["asm"]["Gather"]).apply(null, arguments); + }; + var _GatherNd = Module["_GatherNd"] = function() { + return (_GatherNd = Module["_GatherNd"] = Module["asm"]["GatherNd"]).apply(null, arguments); + }; + var _Greater = Module["_Greater"] = function() { + return (_Greater = Module["_Greater"] = Module["asm"]["Greater"]).apply(null, arguments); + }; + var _GreaterEqual = Module["_GreaterEqual"] = function() { + return (_GreaterEqual = Module["_GreaterEqual"] = Module["asm"]["GreaterEqual"]).apply(null, arguments); + }; + var _LeakyRelu = Module["_LeakyRelu"] = function() { + return (_LeakyRelu = Module["_LeakyRelu"] = Module["asm"]["LeakyRelu"]).apply(null, arguments); + }; + var _Less = Module["_Less"] = function() { + return (_Less = Module["_Less"] = Module["asm"]["Less"]).apply(null, arguments); + }; + var _LessEqual = Module["_LessEqual"] = function() { + return (_LessEqual = Module["_LessEqual"] = Module["asm"]["LessEqual"]).apply(null, arguments); + }; + var _Log = Module["_Log"] = function() { + return (_Log = Module["_Log"] = Module["asm"]["Log"]).apply(null, arguments); + }; + var _LogicalAnd = Module["_LogicalAnd"] = function() { + return (_LogicalAnd = Module["_LogicalAnd"] = Module["asm"]["LogicalAnd"]).apply(null, arguments); + }; + var _LogicalNot = Module["_LogicalNot"] = function() { + return (_LogicalNot = Module["_LogicalNot"] = Module["asm"]["LogicalNot"]).apply(null, arguments); + }; + var _LogicalOr = Module["_LogicalOr"] = function() { + return (_LogicalOr = Module["_LogicalOr"] = Module["asm"]["LogicalOr"]).apply(null, arguments); + }; + var _LogicalXor = Module["_LogicalXor"] = function() { + return (_LogicalXor = Module["_LogicalXor"] = Module["asm"]["LogicalXor"]).apply(null, arguments); + }; + var _Max = Module["_Max"] = function() { + return (_Max = Module["_Max"] = Module["asm"]["Max"]).apply(null, arguments); + }; + var _MaxPool = Module["_MaxPool"] = function() { + return (_MaxPool = Module["_MaxPool"] = Module["asm"]["MaxPool"]).apply(null, arguments); + }; + var _Maximum = Module["_Maximum"] = function() { + return (_Maximum = Module["_Maximum"] = Module["asm"]["Maximum"]).apply(null, arguments); + }; + var _Mean = Module["_Mean"] = function() { + return (_Mean = Module["_Mean"] = Module["asm"]["Mean"]).apply(null, arguments); + }; + var _Min = Module["_Min"] = function() { + return (_Min = Module["_Min"] = Module["asm"]["Min"]).apply(null, arguments); + }; + var _Minimum = Module["_Minimum"] = function() { + return (_Minimum = Module["_Minimum"] = Module["asm"]["Minimum"]).apply(null, arguments); + }; + var _MirrorPad = Module["_MirrorPad"] = function() { + return (_MirrorPad = Module["_MirrorPad"] = Module["asm"]["MirrorPad"]).apply(null, arguments); + }; + var _Multiply = Module["_Multiply"] = function() { + return (_Multiply = Module["_Multiply"] = Module["asm"]["Multiply"]).apply(null, arguments); + }; + var _Neg = Module["_Neg"] = function() { + return (_Neg = Module["_Neg"] = Module["asm"]["Neg"]).apply(null, arguments); + }; + var _NonMaxSuppressionV3 = Module["_NonMaxSuppressionV3"] = function() { + return (_NonMaxSuppressionV3 = Module["_NonMaxSuppressionV3"] = Module["asm"]["NonMaxSuppressionV3"]).apply(null, arguments); + }; + var _NonMaxSuppressionV4 = Module["_NonMaxSuppressionV4"] = function() { + return (_NonMaxSuppressionV4 = Module["_NonMaxSuppressionV4"] = Module["asm"]["NonMaxSuppressionV4"]).apply(null, arguments); + }; + var _NonMaxSuppressionV5 = Module["_NonMaxSuppressionV5"] = function() { + return (_NonMaxSuppressionV5 = Module["_NonMaxSuppressionV5"] = Module["asm"]["NonMaxSuppressionV5"]).apply(null, arguments); + }; + var _NotEqual = Module["_NotEqual"] = function() { + return (_NotEqual = Module["_NotEqual"] = Module["asm"]["NotEqual"]).apply(null, arguments); + }; + var _OneHot = Module["_OneHot"] = function() { + return (_OneHot = Module["_OneHot"] = Module["asm"]["OneHot"]).apply(null, arguments); + }; + var _PadV2 = Module["_PadV2"] = function() { + return (_PadV2 = Module["_PadV2"] = Module["asm"]["PadV2"]).apply(null, arguments); + }; + var _Pow = Module["_Pow"] = function() { + return (_Pow = Module["_Pow"] = Module["asm"]["Pow"]).apply(null, arguments); + }; + var _Prelu = Module["_Prelu"] = function() { + return (_Prelu = Module["_Prelu"] = Module["asm"]["Prelu"]).apply(null, arguments); + }; + var _Prod = Module["_Prod"] = function() { + return (_Prod = Module["_Prod"] = Module["asm"]["Prod"]).apply(null, arguments); + }; + var _RealDiv = Module["_RealDiv"] = function() { + return (_RealDiv = Module["_RealDiv"] = Module["asm"]["RealDiv"]).apply(null, arguments); + }; + var _Relu = Module["_Relu"] = function() { + return (_Relu = Module["_Relu"] = Module["asm"]["Relu"]).apply(null, arguments); + }; + var _Relu6 = Module["_Relu6"] = function() { + return (_Relu6 = Module["_Relu6"] = Module["asm"]["Relu6"]).apply(null, arguments); + }; + var _ResizeBilinear = Module["_ResizeBilinear"] = function() { + return (_ResizeBilinear = Module["_ResizeBilinear"] = Module["asm"]["ResizeBilinear"]).apply(null, arguments); + }; + var _ResizeNearestNeighbor = Module["_ResizeNearestNeighbor"] = function() { + return (_ResizeNearestNeighbor = Module["_ResizeNearestNeighbor"] = Module["asm"]["ResizeNearestNeighbor"]).apply(null, arguments); + }; + var _Reverse = Module["_Reverse"] = function() { + return (_Reverse = Module["_Reverse"] = Module["asm"]["Reverse"]).apply(null, arguments); + }; + var _RotateWithOffset = Module["_RotateWithOffset"] = function() { + return (_RotateWithOffset = Module["_RotateWithOffset"] = Module["asm"]["RotateWithOffset"]).apply(null, arguments); + }; + var _Round = Module["_Round"] = function() { + return (_Round = Module["_Round"] = Module["asm"]["Round"]).apply(null, arguments); + }; + var _Rsqrt = Module["_Rsqrt"] = function() { + return (_Rsqrt = Module["_Rsqrt"] = Module["asm"]["Rsqrt"]).apply(null, arguments); + }; + var _ScatterNd = Module["_ScatterNd"] = function() { + return (_ScatterNd = Module["_ScatterNd"] = Module["asm"]["ScatterNd"]).apply(null, arguments); + }; + var _SelectV2 = Module["_SelectV2"] = function() { + return (_SelectV2 = Module["_SelectV2"] = Module["asm"]["SelectV2"]).apply(null, arguments); + }; + var _Sigmoid = Module["_Sigmoid"] = function() { + return (_Sigmoid = Module["_Sigmoid"] = Module["asm"]["Sigmoid"]).apply(null, arguments); + }; + var _Sin = Module["_Sin"] = function() { + return (_Sin = Module["_Sin"] = Module["asm"]["Sin"]).apply(null, arguments); + }; + var _Softmax = Module["_Softmax"] = function() { + return (_Softmax = Module["_Softmax"] = Module["asm"]["Softmax"]).apply(null, arguments); + }; + var _SparseFillEmptyRows = Module["_SparseFillEmptyRows"] = function() { + return (_SparseFillEmptyRows = Module["_SparseFillEmptyRows"] = Module["asm"]["SparseFillEmptyRows"]).apply(null, arguments); + }; + var _SparseReshape = Module["_SparseReshape"] = function() { + return (_SparseReshape = Module["_SparseReshape"] = Module["asm"]["SparseReshape"]).apply(null, arguments); + }; + var _SparseSegmentReduction = Module["_SparseSegmentReduction"] = function() { + return (_SparseSegmentReduction = Module["_SparseSegmentReduction"] = Module["asm"]["SparseSegmentReduction"]).apply(null, arguments); + }; + var _Sqrt = Module["_Sqrt"] = function() { + return (_Sqrt = Module["_Sqrt"] = Module["asm"]["Sqrt"]).apply(null, arguments); + }; + var _Square = Module["_Square"] = function() { + return (_Square = Module["_Square"] = Module["asm"]["Square"]).apply(null, arguments); + }; + var _SquaredDifference = Module["_SquaredDifference"] = function() { + return (_SquaredDifference = Module["_SquaredDifference"] = Module["asm"]["SquaredDifference"]).apply(null, arguments); + }; + var _Step = Module["_Step"] = function() { + return (_Step = Module["_Step"] = Module["asm"]["Step"]).apply(null, arguments); + }; + var _StridedSlice = Module["_StridedSlice"] = function() { + return (_StridedSlice = Module["_StridedSlice"] = Module["asm"]["StridedSlice"]).apply(null, arguments); + }; + var _Sub = Module["_Sub"] = function() { + return (_Sub = Module["_Sub"] = Module["asm"]["Sub"]).apply(null, arguments); + }; + var _Sum = Module["_Sum"] = function() { + return (_Sum = Module["_Sum"] = Module["asm"]["Sum"]).apply(null, arguments); + }; + var _Tan = Module["_Tan"] = function() { + return (_Tan = Module["_Tan"] = Module["asm"]["Tan"]).apply(null, arguments); + }; + var _Tanh = Module["_Tanh"] = function() { + return (_Tanh = Module["_Tanh"] = Module["asm"]["Tanh"]).apply(null, arguments); + }; + var _Tile = Module["_Tile"] = function() { + return (_Tile = Module["_Tile"] = Module["asm"]["Tile"]).apply(null, arguments); + }; + var _TopK = Module["_TopK"] = function() { + return (_TopK = Module["_TopK"] = Module["asm"]["TopK"]).apply(null, arguments); + }; + var _Transform = Module["_Transform"] = function() { + return (_Transform = Module["_Transform"] = Module["asm"]["Transform"]).apply(null, arguments); + }; + var _Transpose = Module["_Transpose"] = function() { + return (_Transpose = Module["_Transpose"] = Module["asm"]["Transpose"]).apply(null, arguments); + }; + var __FusedMatMul = Module["__FusedMatMul"] = function() { + return (__FusedMatMul = Module["__FusedMatMul"] = Module["asm"]["_FusedMatMul"]).apply(null, arguments); + }; + var _malloc = Module["_malloc"] = function() { + return (_malloc = Module["_malloc"] = Module["asm"]["malloc"]).apply(null, arguments); + }; + var _free = Module["_free"] = function() { + return (_free = Module["_free"] = Module["asm"]["free"]).apply(null, arguments); + }; + var _emscripten_tls_init = Module["_emscripten_tls_init"] = function() { + return (_emscripten_tls_init = Module["_emscripten_tls_init"] = Module["asm"]["emscripten_tls_init"]).apply(null, arguments); + }; + var ___errno_location = Module["___errno_location"] = function() { + return (___errno_location = Module["___errno_location"] = Module["asm"]["__errno_location"]).apply(null, arguments); + }; + var _pthread_self = Module["_pthread_self"] = function() { + return (_pthread_self = Module["_pthread_self"] = Module["asm"]["pthread_self"]).apply(null, arguments); + }; + var _emscripten_main_thread_process_queued_calls = Module["_emscripten_main_thread_process_queued_calls"] = function() { + return (_emscripten_main_thread_process_queued_calls = Module["_emscripten_main_thread_process_queued_calls"] = Module["asm"]["emscripten_main_thread_process_queued_calls"]).apply(null, arguments); + }; + var __emscripten_thread_crashed = Module["__emscripten_thread_crashed"] = function() { + return (__emscripten_thread_crashed = Module["__emscripten_thread_crashed"] = Module["asm"]["_emscripten_thread_crashed"]).apply(null, arguments); + }; + var __emscripten_thread_init = Module["__emscripten_thread_init"] = function() { + return (__emscripten_thread_init = Module["__emscripten_thread_init"] = Module["asm"]["_emscripten_thread_init"]).apply(null, arguments); + }; + var _emscripten_current_thread_process_queued_calls = Module["_emscripten_current_thread_process_queued_calls"] = function() { + return (_emscripten_current_thread_process_queued_calls = Module["_emscripten_current_thread_process_queued_calls"] = Module["asm"]["emscripten_current_thread_process_queued_calls"]).apply(null, arguments); + }; + var _emscripten_main_browser_thread_id = Module["_emscripten_main_browser_thread_id"] = function() { + return (_emscripten_main_browser_thread_id = Module["_emscripten_main_browser_thread_id"] = Module["asm"]["emscripten_main_browser_thread_id"]).apply(null, arguments); + }; + var _emscripten_sync_run_in_main_thread_2 = Module["_emscripten_sync_run_in_main_thread_2"] = function() { + return (_emscripten_sync_run_in_main_thread_2 = Module["_emscripten_sync_run_in_main_thread_2"] = Module["asm"]["emscripten_sync_run_in_main_thread_2"]).apply(null, arguments); + }; + var _emscripten_sync_run_in_main_thread_4 = Module["_emscripten_sync_run_in_main_thread_4"] = function() { + return (_emscripten_sync_run_in_main_thread_4 = Module["_emscripten_sync_run_in_main_thread_4"] = Module["asm"]["emscripten_sync_run_in_main_thread_4"]).apply(null, arguments); + }; + var _emscripten_run_in_main_runtime_thread_js = Module["_emscripten_run_in_main_runtime_thread_js"] = function() { + return (_emscripten_run_in_main_runtime_thread_js = Module["_emscripten_run_in_main_runtime_thread_js"] = Module["asm"]["emscripten_run_in_main_runtime_thread_js"]).apply(null, arguments); + }; + var _emscripten_dispatch_to_thread_ = Module["_emscripten_dispatch_to_thread_"] = function() { + return (_emscripten_dispatch_to_thread_ = Module["_emscripten_dispatch_to_thread_"] = Module["asm"]["emscripten_dispatch_to_thread_"]).apply(null, arguments); + }; + var __emscripten_thread_free_data = Module["__emscripten_thread_free_data"] = function() { + return (__emscripten_thread_free_data = Module["__emscripten_thread_free_data"] = Module["asm"]["_emscripten_thread_free_data"]).apply(null, arguments); + }; + var __emscripten_thread_exit = Module["__emscripten_thread_exit"] = function() { + return (__emscripten_thread_exit = Module["__emscripten_thread_exit"] = Module["asm"]["_emscripten_thread_exit"]).apply(null, arguments); + }; + var _memalign = Module["_memalign"] = function() { + return (_memalign = Module["_memalign"] = Module["asm"]["memalign"]).apply(null, arguments); + }; + var _emscripten_stack_set_limits = Module["_emscripten_stack_set_limits"] = function() { + return (_emscripten_stack_set_limits = Module["_emscripten_stack_set_limits"] = Module["asm"]["emscripten_stack_set_limits"]).apply(null, arguments); + }; + var stackSave = Module["stackSave"] = function() { + return (stackSave = Module["stackSave"] = Module["asm"]["stackSave"]).apply(null, arguments); + }; + var stackRestore = Module["stackRestore"] = function() { + return (stackRestore = Module["stackRestore"] = Module["asm"]["stackRestore"]).apply(null, arguments); + }; + var stackAlloc = Module["stackAlloc"] = function() { + return (stackAlloc = Module["stackAlloc"] = Module["asm"]["stackAlloc"]).apply(null, arguments); + }; + var dynCall_iijjiiii = Module["dynCall_iijjiiii"] = function() { + return (dynCall_iijjiiii = Module["dynCall_iijjiiii"] = Module["asm"]["dynCall_iijjiiii"]).apply(null, arguments); + }; + var dynCall_jiji = Module["dynCall_jiji"] = function() { + return (dynCall_jiji = Module["dynCall_jiji"] = Module["asm"]["dynCall_jiji"]).apply(null, arguments); + }; + var __emscripten_allow_main_runtime_queued_calls = Module["__emscripten_allow_main_runtime_queued_calls"] = 21672; + Module["cwrap"] = cwrap; + Module["keepRuntimeAlive"] = keepRuntimeAlive; + Module["PThread"] = PThread; + Module["PThread"] = PThread; + Module["wasmMemory"] = wasmMemory; + Module["ExitStatus"] = ExitStatus; + var calledRun; + function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status; + } + dependenciesFulfilled = function runCaller() { + if (!calledRun) + run(); + if (!calledRun) + dependenciesFulfilled = runCaller; + }; + function run(args) { + args = args || arguments_; + if (runDependencies > 0) { + return; + } + if (ENVIRONMENT_IS_PTHREAD) { + readyPromiseResolve(Module); + initRuntime(); + postMessage({ "cmd": "loaded" }); + return; + } + preRun(); + if (runDependencies > 0) { + return; + } + function doRun() { + if (calledRun) + return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) + return; + initRuntime(); + readyPromiseResolve(Module); + if (Module["onRuntimeInitialized"]) + Module["onRuntimeInitialized"](); + postRun(); + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function() { + setTimeout(function() { + Module["setStatus"](""); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + } + Module["run"] = run; + function exit(status, implicit) { + EXITSTATUS = status; + if (!implicit) { + if (ENVIRONMENT_IS_PTHREAD) { + exitOnMainThread(status); + throw "unwind"; + } else { + } + } + if (keepRuntimeAlive()) { + } else { + exitRuntime(); + } + procExit(status); + } + function procExit(code) { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + PThread.terminateAllThreads(); + if (Module["onExit"]) + Module["onExit"](code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + } + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") + Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()(); + } + } + run(); + var listenersAdded; + if (beforeListeners) { + listenersAdded = { uncaughtException: process.listeners("uncaughtException").filter(function(listener) { + return !beforeListeners.uncaughtException.indexOf(listener) > -1; + }), unhandledRejection: process.listeners("unhandledRejection").filter(function(listener) { + return !beforeListeners.unhandledRejection.indexOf(listener) > -1; + }) }; + } + var actualModule; + if (typeof WasmBackendModule !== "undefined") { + actualModule = WasmBackendModule; + } else if (typeof WasmBackendModuleThreadedSimd3 !== "undefined") { + actualModule = WasmBackendModuleThreadedSimd3; + } else { + throw new Error("Could not find wasm module in post.js"); + } + if (listenersAdded) { + var tmpDispose = actualModule["_dispose"]; + actualModule["_dispose"] = function() { + tmpDispose(); + listenersAdded.uncaughtException.forEach(function(listener) { + process.removeListener("uncaughtException", listener); + }); + listenersAdded.unhandledRejection.forEach(function(listener) { + process.removeListener("unhandledRejection", listener); + }); + }; + } + return WasmBackendModuleThreadedSimd3.ready; + }; + })(); + if (typeof exports === "object" && typeof module === "object") + module.exports = WasmBackendModuleThreadedSimd2; + else if (typeof define === "function" && define["amd"]) + define([], function() { + return WasmBackendModuleThreadedSimd2; + }); + else if (typeof exports === "object") + exports["WasmBackendModuleThreadedSimd"] = WasmBackendModuleThreadedSimd2; + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js + var require_tfjs_backend_wasm_threaded_simd_worker = __commonJS({ + "node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js"(exports, module) { + init_define_BUILD_VERSION(); + module.exports.wasmWorkerContents = `"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" +");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=((info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports});self.onmessage=(e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["__emscripten_thread_exit"](result)}}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else if(e.data.cmd==="processProxyingQueue"){if(Module["_pthread_self"]()){Module["_emscripten_proxy_execute_queue"](e.data.queue)}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}});`; + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js + var require_tfjs_backend_wasm = __commonJS({ + "node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js"(exports, module) { + init_define_BUILD_VERSION(); + var WasmBackendModule2 = (() => { + var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0; + if (typeof __filename !== "undefined") + _scriptDir = _scriptDir || __filename; + return function(WasmBackendModule3) { + WasmBackendModule3 = WasmBackendModule3 || {}; + var Module = typeof WasmBackendModule3 !== "undefined" ? WasmBackendModule3 : {}; + var readyPromiseResolve, readyPromiseReject; + Module["ready"] = new Promise(function(resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject; + }); + var beforeListeners; + if (typeof process !== "undefined" && process.listeners) { + beforeListeners = { uncaughtException: process.listeners("uncaughtException"), unhandledRejection: process.listeners("unhandledRejection") }; + } + var moduleOverrides = Object.assign({}, Module); + var arguments_ = []; + var thisProgram = "./this.program"; + var quit_ = (status, toThrow) => { + throw toThrow; + }; + var ENVIRONMENT_IS_WEB = typeof window === "object"; + var ENVIRONMENT_IS_WORKER = typeof importScripts === "function"; + var ENVIRONMENT_IS_NODE = typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string"; + var scriptDirectory = ""; + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + return scriptDirectory + path; + } + var read_, readAsync, readBinary, setWindowTitle; + function logExceptionOnExit(e) { + if (e instanceof ExitStatus) + return; + let toLog = e; + err("exiting due to exception: " + toLog); + } + var fs; + var nodePath; + var requireNodeFS; + if (ENVIRONMENT_IS_NODE) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = require_path().dirname(scriptDirectory) + "/"; + } else { + scriptDirectory = __dirname + "/"; + } + requireNodeFS = () => { + if (!nodePath) { + fs = require_fs(); + nodePath = require_path(); + } + }; + read_ = function shell_read(filename, binary) { + requireNodeFS(); + filename = nodePath["normalize"](filename); + return fs.readFileSync(filename, binary ? void 0 : "utf8"); + }; + readBinary = (filename) => { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + return ret; + }; + readAsync = (filename, onload, onerror) => { + requireNodeFS(); + filename = nodePath["normalize"](filename); + fs.readFile(filename, function(err2, data) { + if (err2) + onerror(err2); + else + onload(data.buffer); + }); + }; + if (process["argv"].length > 1) { + thisProgram = process["argv"][1].replace(/\\/g, "/"); + } + arguments_ = process["argv"].slice(2); + process["on"]("uncaughtException", function(ex) { + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); + process["on"]("unhandledRejection", function(reason) { + throw reason; + }); + quit_ = (status, toThrow) => { + if (keepRuntimeAlive()) { + process["exitCode"] = status; + throw toThrow; + } + logExceptionOnExit(toThrow); + process["exit"](status); + }; + Module["inspect"] = function() { + return "[Emscripten Module object]"; + }; + } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = self.location.href; + } else if (typeof document !== "undefined" && document.currentScript) { + scriptDirectory = document.currentScript.src; + } + if (_scriptDir) { + scriptDirectory = _scriptDir; + } + if (scriptDirectory.indexOf("blob:") !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1); + } else { + scriptDirectory = ""; + } + { + read_ = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.send(null); + return xhr.responseText; + }; + if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.responseType = "arraybuffer"; + xhr.send(null); + return new Uint8Array(xhr.response); + }; + } + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = () => { + if (xhr.status == 200 || xhr.status == 0 && xhr.response) { + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + }; + } + setWindowTitle = (title) => document.title = title; + } else { + } + var out = Module["print"] || console.log.bind(console); + var err = Module["printErr"] || console.warn.bind(console); + Object.assign(Module, moduleOverrides); + moduleOverrides = null; + if (Module["arguments"]) + arguments_ = Module["arguments"]; + if (Module["thisProgram"]) + thisProgram = Module["thisProgram"]; + if (Module["quit"]) + quit_ = Module["quit"]; + var POINTER_SIZE = 4; + function warnOnce(text) { + if (!warnOnce.shown) + warnOnce.shown = {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + err(text); + } + } + function convertJsFunctionToWasm(func2, sig) { + if (typeof WebAssembly.Function === "function") { + var typeNames = { "i": "i32", "j": "i64", "f": "f32", "d": "f64" }; + var type = { parameters: [], results: sig[0] == "v" ? [] : [typeNames[sig[0]]] }; + for (var i = 1; i < sig.length; ++i) { + type.parameters.push(typeNames[sig[i]]); + } + return new WebAssembly.Function(type, func2); + } + var typeSection = [1, 0, 1, 96]; + var sigRet = sig.slice(0, 1); + var sigParam = sig.slice(1); + var typeCodes = { "i": 127, "j": 126, "f": 125, "d": 124 }; + typeSection.push(sigParam.length); + for (var i = 0; i < sigParam.length; ++i) { + typeSection.push(typeCodes[sigParam[i]]); + } + if (sigRet == "v") { + typeSection.push(0); + } else { + typeSection = typeSection.concat([1, typeCodes[sigRet]]); + } + typeSection[1] = typeSection.length - 2; + var bytes = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0].concat(typeSection, [2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0])); + var module2 = new WebAssembly.Module(bytes); + var instance = new WebAssembly.Instance(module2, { "e": { "f": func2 } }); + var wrappedFunc = instance.exports["f"]; + return wrappedFunc; + } + var freeTableIndexes = []; + var functionsInTableMap; + function getEmptyTableSlot() { + if (freeTableIndexes.length) { + return freeTableIndexes.pop(); + } + try { + wasmTable.grow(1); + } catch (err2) { + if (!(err2 instanceof RangeError)) { + throw err2; + } + throw "Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."; + } + return wasmTable.length - 1; + } + function updateTableMap(offset, count2) { + for (var i = offset; i < offset + count2; i++) { + var item = getWasmTableEntry(i); + if (item) { + functionsInTableMap.set(item, i); + } + } + } + var tempRet0 = 0; + var setTempRet0 = (value) => { + tempRet0 = value; + }; + var wasmBinary; + if (Module["wasmBinary"]) + wasmBinary = Module["wasmBinary"]; + var noExitRuntime = Module["noExitRuntime"] || true; + if (typeof WebAssembly !== "object") { + abort("no native wasm support detected"); + } + var wasmMemory; + var ABORT = false; + var EXITSTATUS; + function assert3(condition, text) { + if (!condition) { + abort(text); + } + } + function getCFunc(ident) { + var func2 = Module["_" + ident]; + return func2; + } + function ccall(ident, returnType, argTypes, args, opts) { + var toC = { "string": function(str) { + var ret2 = 0; + if (str !== null && str !== void 0 && str !== 0) { + var len = (str.length << 2) + 1; + ret2 = stackAlloc(len); + stringToUTF8(str, ret2, len); + } + return ret2; + }, "array": function(arr) { + var ret2 = stackAlloc(arr.length); + writeArrayToMemory(arr, ret2); + return ret2; + } }; + function convertReturnValue(ret2) { + if (returnType === "string") + return UTF8ToString(ret2); + if (returnType === "boolean") + return Boolean(ret2); + return ret2; + } + var func2 = getCFunc(ident); + var cArgs = []; + var stack2 = 0; + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack2 === 0) + stack2 = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func2.apply(null, cArgs); + function onDone(ret2) { + if (stack2 !== 0) + stackRestore(stack2); + return convertReturnValue(ret2); + } + ret = onDone(ret); + return ret; + } + function cwrap(ident, returnType, argTypes, opts) { + argTypes = argTypes || []; + var numericArgs = argTypes.every(function(type) { + return type === "number"; + }); + var numericRet = returnType !== "string"; + if (numericRet && numericArgs && !opts) { + return getCFunc(ident); + } + return function() { + return ccall(ident, returnType, argTypes, arguments, opts); + }; + } + var ALLOC_STACK = 1; + var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : void 0; + function UTF8ArrayToString(heap, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + while (heap[endPtr] && !(endPtr >= endIdx)) + ++endPtr; + if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { + return UTF8Decoder.decode(heap.subarray(idx, endPtr)); + } else { + var str = ""; + while (idx < endPtr) { + var u0 = heap[idx++]; + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue; + } + var u1 = heap[idx++] & 63; + if ((u0 & 224) == 192) { + str += String.fromCharCode((u0 & 31) << 6 | u1); + continue; + } + var u2 = heap[idx++] & 63; + if ((u0 & 240) == 224) { + u0 = (u0 & 15) << 12 | u1 << 6 | u2; + } else { + u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63; + } + if (u0 < 65536) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); + } + } + } + return str; + } + function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""; + } + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) + return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023; + } + if (u <= 127) { + if (outIdx >= endIdx) + break; + heap[outIdx++] = u; + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) + break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63; + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) + break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } else { + if (outIdx + 3 >= endIdx) + break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } + } + heap[outIdx] = 0; + return outIdx - startIdx; + } + function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + } + function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) + u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; + if (u <= 127) + ++len; + else if (u <= 2047) + len += 2; + else if (u <= 65535) + len += 3; + else + len += 4; + } + return len; + } + var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : void 0; + function writeArrayToMemory(array2, buffer3) { + HEAP8.set(array2, buffer3); + } + function writeAsciiToMemory(str, buffer3, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + HEAP8[buffer3++ >> 0] = str.charCodeAt(i); + } + if (!dontAddNull) + HEAP8[buffer3 >> 0] = 0; + } + function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - x % multiple; + } + return x; + } + var buffer2, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; + function updateGlobalBufferAndViews(buf) { + buffer2 = buf; + Module["HEAP8"] = HEAP8 = new Int8Array(buf); + Module["HEAP16"] = HEAP16 = new Int16Array(buf); + Module["HEAP32"] = HEAP32 = new Int32Array(buf); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); + Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); + Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); + Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); + Module["HEAPF64"] = HEAPF64 = new Float64Array(buf); + } + var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 16777216; + var wasmTable; + var __ATPRERUN__ = []; + var __ATINIT__ = []; + var __ATPOSTRUN__ = []; + var runtimeInitialized = false; + var runtimeExited = false; + var runtimeKeepaliveCounter = 0; + function keepRuntimeAlive() { + return noExitRuntime || runtimeKeepaliveCounter > 0; + } + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") + Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); + } + function initRuntime() { + runtimeInitialized = true; + callRuntimeCallbacks(__ATINIT__); + } + function exitRuntime() { + runtimeExited = true; + } + function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") + Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); + } + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); + } + function addOnInit(cb) { + __ATINIT__.unshift(cb); + } + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); + } + var runDependencies = 0; + var runDependencyWatcher = null; + var dependenciesFulfilled = null; + function addRunDependency(id) { + runDependencies++; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + } + function removeRunDependency(id) { + runDependencies--; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } + } + Module["preloadedImages"] = {}; + Module["preloadedAudios"] = {}; + function abort(what) { + { + if (Module["onAbort"]) { + Module["onAbort"](what); + } + } + what = "Aborted(" + what + ")"; + err(what); + ABORT = true; + EXITSTATUS = 1; + what += ". Build with -s ASSERTIONS=1 for more info."; + var e = new WebAssembly.RuntimeError(what); + readyPromiseReject(e); + throw e; + } + var dataURIPrefix = "data:application/octet-stream;base64,"; + function isDataURI(filename) { + return filename.startsWith(dataURIPrefix); + } + function isFileURI(filename) { + return filename.startsWith("file://"); + } + var wasmBinaryFile; + wasmBinaryFile = "tfjs-backend-wasm.wasm"; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } else { + throw "both async and sync fetching of the wasm failed"; + } + } catch (err2) { + abort(err2); + } + } + function getBinaryPromise() { + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch === "function" && !isFileURI(wasmBinaryFile)) { + return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) { + if (!response["ok"]) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; + } + return response["arrayBuffer"](); + }).catch(function() { + return getBinary(wasmBinaryFile); + }); + } else { + if (readAsync) { + return new Promise(function(resolve, reject) { + readAsync(wasmBinaryFile, function(response) { + resolve(new Uint8Array(response)); + }, reject); + }); + } + } + } + return Promise.resolve().then(function() { + return getBinary(wasmBinaryFile); + }); + } + function createWasm() { + var info = { "env": asmLibraryArg, "wasi_snapshot_preview1": asmLibraryArg }; + function receiveInstance(instance, module2) { + var exports3 = instance.exports; + Module["asm"] = exports3; + wasmMemory = Module["asm"]["memory"]; + updateGlobalBufferAndViews(wasmMemory.buffer); + wasmTable = Module["asm"]["__indirect_function_table"]; + addOnInit(Module["asm"]["__wasm_call_ctors"]); + removeRunDependency("wasm-instantiate"); + } + addRunDependency("wasm-instantiate"); + function receiveInstantiationResult(result) { + receiveInstance(result["instance"]); + } + function instantiateArrayBuffer(receiver) { + return getBinaryPromise().then(function(binary) { + return WebAssembly.instantiate(binary, info); + }).then(function(instance) { + return instance; + }).then(receiver, function(reason) { + err("failed to asynchronously prepare wasm: " + reason); + abort(reason); + }); + } + function instantiateAsync() { + if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && !isFileURI(wasmBinaryFile) && typeof fetch === "function") { + return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) { + var result = WebAssembly.instantiateStreaming(response, info); + return result.then(receiveInstantiationResult, function(reason) { + err("wasm streaming compile failed: " + reason); + err("falling back to ArrayBuffer instantiation"); + return instantiateArrayBuffer(receiveInstantiationResult); + }); + }); + } else { + return instantiateArrayBuffer(receiveInstantiationResult); + } + } + if (Module["instantiateWasm"]) { + try { + var exports2 = Module["instantiateWasm"](info, receiveInstance); + return exports2; + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false; + } + } + instantiateAsync().catch(readyPromiseReject); + return {}; + } + var tempDouble; + var tempI64; + function callRuntimeCallbacks(callbacks2) { + while (callbacks2.length > 0) { + var callback = callbacks2.shift(); + if (typeof callback == "function") { + callback(Module); + continue; + } + var func2 = callback.func; + if (typeof func2 === "number") { + if (callback.arg === void 0) { + getWasmTableEntry(func2)(); + } else { + getWasmTableEntry(func2)(callback.arg); + } + } else { + func2(callback.arg === void 0 ? null : callback.arg); + } + } + } + function demangle(func2) { + return func2; + } + function demangleAll(text) { + var regex = /\b_Z[\w\d_]+/g; + return text.replace(regex, function(x) { + var y = demangle(x); + return x === y ? x : y + " [" + x + "]"; + }); + } + var wasmTableMirror = []; + function getWasmTableEntry(funcPtr) { + var func2 = wasmTableMirror[funcPtr]; + if (!func2) { + if (funcPtr >= wasmTableMirror.length) + wasmTableMirror.length = funcPtr + 1; + wasmTableMirror[funcPtr] = func2 = wasmTable.get(funcPtr); + } + return func2; + } + function jsStackTrace() { + var error = new Error(); + if (!error.stack) { + try { + throw new Error(); + } catch (e) { + error = e; + } + if (!error.stack) { + return "(no stack trace available)"; + } + } + return error.stack.toString(); + } + function setWasmTableEntry(idx, func2) { + wasmTable.set(idx, func2); + wasmTableMirror[idx] = func2; + } + function _abort() { + abort(""); + } + function _emscripten_get_heap_max() { + return 2147483648; + } + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.copyWithin(dest, src, src + num); + } + function emscripten_realloc_buffer(size) { + try { + wasmMemory.grow(size - buffer2.byteLength + 65535 >>> 16); + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1; + } catch (e) { + } + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = HEAPU8.length; + requestedSize = requestedSize >>> 0; + var maxHeapSize = _emscripten_get_heap_max(); + if (requestedSize > maxHeapSize) { + return false; + } + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + return true; + } + } + return false; + } + var SYSCALLS = { mappings: {}, buffers: [null, [], []], printChar: function(stream, curr) { + var buffer3 = SYSCALLS.buffers[stream]; + if (curr === 0 || curr === 10) { + (stream === 1 ? out : err)(UTF8ArrayToString(buffer3, 0)); + buffer3.length = 0; + } else { + buffer3.push(curr); + } + }, varargs: void 0, get: function() { + SYSCALLS.varargs += 4; + var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; + return ret; + }, getStr: function(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, get64: function(low, high) { + return low; + } }; + function _fd_close(fd) { + return 0; + } + function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { + } + function _fd_write(fd, iov, iovcnt, pnum) { + var num = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[iov >> 2]; + var len = HEAP32[iov + 4 >> 2]; + iov += 8; + for (var j = 0; j < len; j++) { + SYSCALLS.printChar(fd, HEAPU8[ptr + j]); + } + num += len; + } + HEAP32[pnum >> 2] = num; + return 0; + } + function _setTempRet0(val) { + setTempRet0(val); + } + var ASSERTIONS = false; + var asmLibraryArg = { "abort": _abort, "emscripten_get_heap_max": _emscripten_get_heap_max, "emscripten_memcpy_big": _emscripten_memcpy_big, "emscripten_resize_heap": _emscripten_resize_heap, "fd_close": _fd_close, "fd_seek": _fd_seek, "fd_write": _fd_write, "setTempRet0": _setTempRet0 }; + var asm = createWasm(); + var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function() { + return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["__wasm_call_ctors"]).apply(null, arguments); + }; + var _init = Module["_init"] = function() { + return (_init = Module["_init"] = Module["asm"]["init"]).apply(null, arguments); + }; + var _init_with_threads_count = Module["_init_with_threads_count"] = function() { + return (_init_with_threads_count = Module["_init_with_threads_count"] = Module["asm"]["init_with_threads_count"]).apply(null, arguments); + }; + var _get_threads_count = Module["_get_threads_count"] = function() { + return (_get_threads_count = Module["_get_threads_count"] = Module["asm"]["get_threads_count"]).apply(null, arguments); + }; + var _register_tensor = Module["_register_tensor"] = function() { + return (_register_tensor = Module["_register_tensor"] = Module["asm"]["register_tensor"]).apply(null, arguments); + }; + var _dispose_data = Module["_dispose_data"] = function() { + return (_dispose_data = Module["_dispose_data"] = Module["asm"]["dispose_data"]).apply(null, arguments); + }; + var _dispose = Module["_dispose"] = function() { + return (_dispose = Module["_dispose"] = Module["asm"]["dispose"]).apply(null, arguments); + }; + var _Abs = Module["_Abs"] = function() { + return (_Abs = Module["_Abs"] = Module["asm"]["Abs"]).apply(null, arguments); + }; + var _Add = Module["_Add"] = function() { + return (_Add = Module["_Add"] = Module["asm"]["Add"]).apply(null, arguments); + }; + var _AddN = Module["_AddN"] = function() { + return (_AddN = Module["_AddN"] = Module["asm"]["AddN"]).apply(null, arguments); + }; + var _All = Module["_All"] = function() { + return (_All = Module["_All"] = Module["asm"]["All"]).apply(null, arguments); + }; + var _Any = Module["_Any"] = function() { + return (_Any = Module["_Any"] = Module["asm"]["Any"]).apply(null, arguments); + }; + var _ArgMax = Module["_ArgMax"] = function() { + return (_ArgMax = Module["_ArgMax"] = Module["asm"]["ArgMax"]).apply(null, arguments); + }; + var _AvgPool = Module["_AvgPool"] = function() { + return (_AvgPool = Module["_AvgPool"] = Module["asm"]["AvgPool"]).apply(null, arguments); + }; + var _BatchMatMul = Module["_BatchMatMul"] = function() { + return (_BatchMatMul = Module["_BatchMatMul"] = Module["asm"]["BatchMatMul"]).apply(null, arguments); + }; + var _Ceil = Module["_Ceil"] = function() { + return (_Ceil = Module["_Ceil"] = Module["asm"]["Ceil"]).apply(null, arguments); + }; + var _ClipByValue = Module["_ClipByValue"] = function() { + return (_ClipByValue = Module["_ClipByValue"] = Module["asm"]["ClipByValue"]).apply(null, arguments); + }; + var _Conv2D = Module["_Conv2D"] = function() { + return (_Conv2D = Module["_Conv2D"] = Module["asm"]["Conv2D"]).apply(null, arguments); + }; + var _Conv2DBackpropInput = Module["_Conv2DBackpropInput"] = function() { + return (_Conv2DBackpropInput = Module["_Conv2DBackpropInput"] = Module["asm"]["Conv2DBackpropInput"]).apply(null, arguments); + }; + var _Cos = Module["_Cos"] = function() { + return (_Cos = Module["_Cos"] = Module["asm"]["Cos"]).apply(null, arguments); + }; + var _Cosh = Module["_Cosh"] = function() { + return (_Cosh = Module["_Cosh"] = Module["asm"]["Cosh"]).apply(null, arguments); + }; + var _CropAndResize = Module["_CropAndResize"] = function() { + return (_CropAndResize = Module["_CropAndResize"] = Module["asm"]["CropAndResize"]).apply(null, arguments); + }; + var _Cumprod = Module["_Cumprod"] = function() { + return (_Cumprod = Module["_Cumprod"] = Module["asm"]["Cumprod"]).apply(null, arguments); + }; + var _Cumsum = Module["_Cumsum"] = function() { + return (_Cumsum = Module["_Cumsum"] = Module["asm"]["Cumsum"]).apply(null, arguments); + }; + var _DepthToSpace = Module["_DepthToSpace"] = function() { + return (_DepthToSpace = Module["_DepthToSpace"] = Module["asm"]["DepthToSpace"]).apply(null, arguments); + }; + var _DepthwiseConv2dNative = Module["_DepthwiseConv2dNative"] = function() { + return (_DepthwiseConv2dNative = Module["_DepthwiseConv2dNative"] = Module["asm"]["DepthwiseConv2dNative"]).apply(null, arguments); + }; + var _Elu = Module["_Elu"] = function() { + return (_Elu = Module["_Elu"] = Module["asm"]["Elu"]).apply(null, arguments); + }; + var _Equal = Module["_Equal"] = function() { + return (_Equal = Module["_Equal"] = Module["asm"]["Equal"]).apply(null, arguments); + }; + var _Exp = Module["_Exp"] = function() { + return (_Exp = Module["_Exp"] = Module["asm"]["Exp"]).apply(null, arguments); + }; + var _FlipLeftRight = Module["_FlipLeftRight"] = function() { + return (_FlipLeftRight = Module["_FlipLeftRight"] = Module["asm"]["FlipLeftRight"]).apply(null, arguments); + }; + var _Floor = Module["_Floor"] = function() { + return (_Floor = Module["_Floor"] = Module["asm"]["Floor"]).apply(null, arguments); + }; + var _FloorDiv = Module["_FloorDiv"] = function() { + return (_FloorDiv = Module["_FloorDiv"] = Module["asm"]["FloorDiv"]).apply(null, arguments); + }; + var _FusedBatchNorm = Module["_FusedBatchNorm"] = function() { + return (_FusedBatchNorm = Module["_FusedBatchNorm"] = Module["asm"]["FusedBatchNorm"]).apply(null, arguments); + }; + var _FusedConv2D = Module["_FusedConv2D"] = function() { + return (_FusedConv2D = Module["_FusedConv2D"] = Module["asm"]["FusedConv2D"]).apply(null, arguments); + }; + var _FusedDepthwiseConv2D = Module["_FusedDepthwiseConv2D"] = function() { + return (_FusedDepthwiseConv2D = Module["_FusedDepthwiseConv2D"] = Module["asm"]["FusedDepthwiseConv2D"]).apply(null, arguments); + }; + var _Gather = Module["_Gather"] = function() { + return (_Gather = Module["_Gather"] = Module["asm"]["Gather"]).apply(null, arguments); + }; + var _GatherNd = Module["_GatherNd"] = function() { + return (_GatherNd = Module["_GatherNd"] = Module["asm"]["GatherNd"]).apply(null, arguments); + }; + var _Greater = Module["_Greater"] = function() { + return (_Greater = Module["_Greater"] = Module["asm"]["Greater"]).apply(null, arguments); + }; + var _GreaterEqual = Module["_GreaterEqual"] = function() { + return (_GreaterEqual = Module["_GreaterEqual"] = Module["asm"]["GreaterEqual"]).apply(null, arguments); + }; + var _LeakyRelu = Module["_LeakyRelu"] = function() { + return (_LeakyRelu = Module["_LeakyRelu"] = Module["asm"]["LeakyRelu"]).apply(null, arguments); + }; + var _Less = Module["_Less"] = function() { + return (_Less = Module["_Less"] = Module["asm"]["Less"]).apply(null, arguments); + }; + var _LessEqual = Module["_LessEqual"] = function() { + return (_LessEqual = Module["_LessEqual"] = Module["asm"]["LessEqual"]).apply(null, arguments); + }; + var _Log = Module["_Log"] = function() { + return (_Log = Module["_Log"] = Module["asm"]["Log"]).apply(null, arguments); + }; + var _LogicalAnd = Module["_LogicalAnd"] = function() { + return (_LogicalAnd = Module["_LogicalAnd"] = Module["asm"]["LogicalAnd"]).apply(null, arguments); + }; + var _LogicalNot = Module["_LogicalNot"] = function() { + return (_LogicalNot = Module["_LogicalNot"] = Module["asm"]["LogicalNot"]).apply(null, arguments); + }; + var _LogicalOr = Module["_LogicalOr"] = function() { + return (_LogicalOr = Module["_LogicalOr"] = Module["asm"]["LogicalOr"]).apply(null, arguments); + }; + var _LogicalXor = Module["_LogicalXor"] = function() { + return (_LogicalXor = Module["_LogicalXor"] = Module["asm"]["LogicalXor"]).apply(null, arguments); + }; + var _Max = Module["_Max"] = function() { + return (_Max = Module["_Max"] = Module["asm"]["Max"]).apply(null, arguments); + }; + var _MaxPool = Module["_MaxPool"] = function() { + return (_MaxPool = Module["_MaxPool"] = Module["asm"]["MaxPool"]).apply(null, arguments); + }; + var _Maximum = Module["_Maximum"] = function() { + return (_Maximum = Module["_Maximum"] = Module["asm"]["Maximum"]).apply(null, arguments); + }; + var _Mean = Module["_Mean"] = function() { + return (_Mean = Module["_Mean"] = Module["asm"]["Mean"]).apply(null, arguments); + }; + var _Min = Module["_Min"] = function() { + return (_Min = Module["_Min"] = Module["asm"]["Min"]).apply(null, arguments); + }; + var _Minimum = Module["_Minimum"] = function() { + return (_Minimum = Module["_Minimum"] = Module["asm"]["Minimum"]).apply(null, arguments); + }; + var _MirrorPad = Module["_MirrorPad"] = function() { + return (_MirrorPad = Module["_MirrorPad"] = Module["asm"]["MirrorPad"]).apply(null, arguments); + }; + var _Multiply = Module["_Multiply"] = function() { + return (_Multiply = Module["_Multiply"] = Module["asm"]["Multiply"]).apply(null, arguments); + }; + var _Neg = Module["_Neg"] = function() { + return (_Neg = Module["_Neg"] = Module["asm"]["Neg"]).apply(null, arguments); + }; + var _NonMaxSuppressionV3 = Module["_NonMaxSuppressionV3"] = function() { + return (_NonMaxSuppressionV3 = Module["_NonMaxSuppressionV3"] = Module["asm"]["NonMaxSuppressionV3"]).apply(null, arguments); + }; + var _NonMaxSuppressionV4 = Module["_NonMaxSuppressionV4"] = function() { + return (_NonMaxSuppressionV4 = Module["_NonMaxSuppressionV4"] = Module["asm"]["NonMaxSuppressionV4"]).apply(null, arguments); + }; + var _NonMaxSuppressionV5 = Module["_NonMaxSuppressionV5"] = function() { + return (_NonMaxSuppressionV5 = Module["_NonMaxSuppressionV5"] = Module["asm"]["NonMaxSuppressionV5"]).apply(null, arguments); + }; + var _NotEqual = Module["_NotEqual"] = function() { + return (_NotEqual = Module["_NotEqual"] = Module["asm"]["NotEqual"]).apply(null, arguments); + }; + var _OneHot = Module["_OneHot"] = function() { + return (_OneHot = Module["_OneHot"] = Module["asm"]["OneHot"]).apply(null, arguments); + }; + var _PadV2 = Module["_PadV2"] = function() { + return (_PadV2 = Module["_PadV2"] = Module["asm"]["PadV2"]).apply(null, arguments); + }; + var _Pow = Module["_Pow"] = function() { + return (_Pow = Module["_Pow"] = Module["asm"]["Pow"]).apply(null, arguments); + }; + var _Prelu = Module["_Prelu"] = function() { + return (_Prelu = Module["_Prelu"] = Module["asm"]["Prelu"]).apply(null, arguments); + }; + var _Prod = Module["_Prod"] = function() { + return (_Prod = Module["_Prod"] = Module["asm"]["Prod"]).apply(null, arguments); + }; + var _RealDiv = Module["_RealDiv"] = function() { + return (_RealDiv = Module["_RealDiv"] = Module["asm"]["RealDiv"]).apply(null, arguments); + }; + var _Relu = Module["_Relu"] = function() { + return (_Relu = Module["_Relu"] = Module["asm"]["Relu"]).apply(null, arguments); + }; + var _Relu6 = Module["_Relu6"] = function() { + return (_Relu6 = Module["_Relu6"] = Module["asm"]["Relu6"]).apply(null, arguments); + }; + var _ResizeBilinear = Module["_ResizeBilinear"] = function() { + return (_ResizeBilinear = Module["_ResizeBilinear"] = Module["asm"]["ResizeBilinear"]).apply(null, arguments); + }; + var _ResizeNearestNeighbor = Module["_ResizeNearestNeighbor"] = function() { + return (_ResizeNearestNeighbor = Module["_ResizeNearestNeighbor"] = Module["asm"]["ResizeNearestNeighbor"]).apply(null, arguments); + }; + var _Reverse = Module["_Reverse"] = function() { + return (_Reverse = Module["_Reverse"] = Module["asm"]["Reverse"]).apply(null, arguments); + }; + var _RotateWithOffset = Module["_RotateWithOffset"] = function() { + return (_RotateWithOffset = Module["_RotateWithOffset"] = Module["asm"]["RotateWithOffset"]).apply(null, arguments); + }; + var _Round = Module["_Round"] = function() { + return (_Round = Module["_Round"] = Module["asm"]["Round"]).apply(null, arguments); + }; + var _Rsqrt = Module["_Rsqrt"] = function() { + return (_Rsqrt = Module["_Rsqrt"] = Module["asm"]["Rsqrt"]).apply(null, arguments); + }; + var _ScatterNd = Module["_ScatterNd"] = function() { + return (_ScatterNd = Module["_ScatterNd"] = Module["asm"]["ScatterNd"]).apply(null, arguments); + }; + var _SelectV2 = Module["_SelectV2"] = function() { + return (_SelectV2 = Module["_SelectV2"] = Module["asm"]["SelectV2"]).apply(null, arguments); + }; + var _Sigmoid = Module["_Sigmoid"] = function() { + return (_Sigmoid = Module["_Sigmoid"] = Module["asm"]["Sigmoid"]).apply(null, arguments); + }; + var _Sin = Module["_Sin"] = function() { + return (_Sin = Module["_Sin"] = Module["asm"]["Sin"]).apply(null, arguments); + }; + var _Softmax = Module["_Softmax"] = function() { + return (_Softmax = Module["_Softmax"] = Module["asm"]["Softmax"]).apply(null, arguments); + }; + var _SparseFillEmptyRows = Module["_SparseFillEmptyRows"] = function() { + return (_SparseFillEmptyRows = Module["_SparseFillEmptyRows"] = Module["asm"]["SparseFillEmptyRows"]).apply(null, arguments); + }; + var _SparseReshape = Module["_SparseReshape"] = function() { + return (_SparseReshape = Module["_SparseReshape"] = Module["asm"]["SparseReshape"]).apply(null, arguments); + }; + var _SparseSegmentReduction = Module["_SparseSegmentReduction"] = function() { + return (_SparseSegmentReduction = Module["_SparseSegmentReduction"] = Module["asm"]["SparseSegmentReduction"]).apply(null, arguments); + }; + var _Sqrt = Module["_Sqrt"] = function() { + return (_Sqrt = Module["_Sqrt"] = Module["asm"]["Sqrt"]).apply(null, arguments); + }; + var _Square = Module["_Square"] = function() { + return (_Square = Module["_Square"] = Module["asm"]["Square"]).apply(null, arguments); + }; + var _SquaredDifference = Module["_SquaredDifference"] = function() { + return (_SquaredDifference = Module["_SquaredDifference"] = Module["asm"]["SquaredDifference"]).apply(null, arguments); + }; + var _Step = Module["_Step"] = function() { + return (_Step = Module["_Step"] = Module["asm"]["Step"]).apply(null, arguments); + }; + var _StridedSlice = Module["_StridedSlice"] = function() { + return (_StridedSlice = Module["_StridedSlice"] = Module["asm"]["StridedSlice"]).apply(null, arguments); + }; + var _Sub = Module["_Sub"] = function() { + return (_Sub = Module["_Sub"] = Module["asm"]["Sub"]).apply(null, arguments); + }; + var _Sum = Module["_Sum"] = function() { + return (_Sum = Module["_Sum"] = Module["asm"]["Sum"]).apply(null, arguments); + }; + var _Tan = Module["_Tan"] = function() { + return (_Tan = Module["_Tan"] = Module["asm"]["Tan"]).apply(null, arguments); + }; + var _Tanh = Module["_Tanh"] = function() { + return (_Tanh = Module["_Tanh"] = Module["asm"]["Tanh"]).apply(null, arguments); + }; + var _Tile = Module["_Tile"] = function() { + return (_Tile = Module["_Tile"] = Module["asm"]["Tile"]).apply(null, arguments); + }; + var _TopK = Module["_TopK"] = function() { + return (_TopK = Module["_TopK"] = Module["asm"]["TopK"]).apply(null, arguments); + }; + var _Transform = Module["_Transform"] = function() { + return (_Transform = Module["_Transform"] = Module["asm"]["Transform"]).apply(null, arguments); + }; + var _Transpose = Module["_Transpose"] = function() { + return (_Transpose = Module["_Transpose"] = Module["asm"]["Transpose"]).apply(null, arguments); + }; + var __FusedMatMul = Module["__FusedMatMul"] = function() { + return (__FusedMatMul = Module["__FusedMatMul"] = Module["asm"]["_FusedMatMul"]).apply(null, arguments); + }; + var _malloc = Module["_malloc"] = function() { + return (_malloc = Module["_malloc"] = Module["asm"]["malloc"]).apply(null, arguments); + }; + var _free = Module["_free"] = function() { + return (_free = Module["_free"] = Module["asm"]["free"]).apply(null, arguments); + }; + var ___errno_location = Module["___errno_location"] = function() { + return (___errno_location = Module["___errno_location"] = Module["asm"]["__errno_location"]).apply(null, arguments); + }; + var _emscripten_main_thread_process_queued_calls = Module["_emscripten_main_thread_process_queued_calls"] = function() { + return (_emscripten_main_thread_process_queued_calls = Module["_emscripten_main_thread_process_queued_calls"] = Module["asm"]["emscripten_main_thread_process_queued_calls"]).apply(null, arguments); + }; + var stackSave = Module["stackSave"] = function() { + return (stackSave = Module["stackSave"] = Module["asm"]["stackSave"]).apply(null, arguments); + }; + var stackRestore = Module["stackRestore"] = function() { + return (stackRestore = Module["stackRestore"] = Module["asm"]["stackRestore"]).apply(null, arguments); + }; + var stackAlloc = Module["stackAlloc"] = function() { + return (stackAlloc = Module["stackAlloc"] = Module["asm"]["stackAlloc"]).apply(null, arguments); + }; + var dynCall_iijjiiii = Module["dynCall_iijjiiii"] = function() { + return (dynCall_iijjiiii = Module["dynCall_iijjiiii"] = Module["asm"]["dynCall_iijjiiii"]).apply(null, arguments); + }; + var dynCall_jiji = Module["dynCall_jiji"] = function() { + return (dynCall_jiji = Module["dynCall_jiji"] = Module["asm"]["dynCall_jiji"]).apply(null, arguments); + }; + Module["cwrap"] = cwrap; + var calledRun; + function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status; + } + dependenciesFulfilled = function runCaller() { + if (!calledRun) + run(); + if (!calledRun) + dependenciesFulfilled = runCaller; + }; + function run(args) { + args = args || arguments_; + if (runDependencies > 0) { + return; + } + preRun(); + if (runDependencies > 0) { + return; + } + function doRun() { + if (calledRun) + return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) + return; + initRuntime(); + readyPromiseResolve(Module); + if (Module["onRuntimeInitialized"]) + Module["onRuntimeInitialized"](); + postRun(); + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function() { + setTimeout(function() { + Module["setStatus"](""); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + } + Module["run"] = run; + function procExit(code) { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + if (Module["onExit"]) + Module["onExit"](code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + } + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") + Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()(); + } + } + run(); + var listenersAdded; + if (beforeListeners) { + listenersAdded = { uncaughtException: process.listeners("uncaughtException").filter(function(listener) { + return !beforeListeners.uncaughtException.indexOf(listener) > -1; + }), unhandledRejection: process.listeners("unhandledRejection").filter(function(listener) { + return !beforeListeners.unhandledRejection.indexOf(listener) > -1; + }) }; + } + var actualModule; + if (typeof WasmBackendModule3 !== "undefined") { + actualModule = WasmBackendModule3; + } else if (typeof WasmBackendModuleThreadedSimd !== "undefined") { + actualModule = WasmBackendModuleThreadedSimd; + } else { + throw new Error("Could not find wasm module in post.js"); + } + if (listenersAdded) { + var tmpDispose = actualModule["_dispose"]; + actualModule["_dispose"] = function() { + tmpDispose(); + listenersAdded.uncaughtException.forEach(function(listener) { + process.removeListener("uncaughtException", listener); + }); + listenersAdded.unhandledRejection.forEach(function(listener) { + process.removeListener("unhandledRejection", listener); + }); + }; + } + return WasmBackendModule3.ready; + }; + })(); + if (typeof exports === "object" && typeof module === "object") + module.exports = WasmBackendModule2; + else if (typeof define === "function" && define["amd"]) + define([], function() { + return WasmBackendModule2; + }); + else if (typeof exports === "object") + exports["WasmBackendModule"] = WasmBackendModule2; + } + }); + + // src/group1-shard1of1.bin + var group1_shard1of1_exports = {}; + __export(group1_shard1of1_exports, { + default: () => group1_shard1of1_default + }); + var group1_shard1of1_default; + var init_group1_shard1of1 = __esm({ + "src/group1-shard1of1.bin"() { + group1_shard1of1_default = __toBinary("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"); + } + }); + + // src/tfjs-backend-wasm-threaded-simd.wasm + var tfjs_backend_wasm_threaded_simd_exports = {}; + __export(tfjs_backend_wasm_threaded_simd_exports, { + default: () => tfjs_backend_wasm_threaded_simd_default + }); + var tfjs_backend_wasm_threaded_simd_default; + var init_tfjs_backend_wasm_threaded_simd = __esm({ + "src/tfjs-backend-wasm-threaded-simd.wasm"() { + tfjs_backend_wasm_threaded_simd_default = __toBinary("AGFzbQEAAAABjQZVYAF/AGADf39/AGAFf39/f38AYAJ/fwF/YAJ/fwBgBH9/f38AYAp/f39/f39/f39/AGAIf39/f39/f38AYAF/AX9gBX9/f39/AX9gBn9/f39/fwBgDH9/f39/f39/f39/fwBgCX9/f39/f39/fwBgA39/fwF/YAd/f39/f39/AGAAAGALf39/f39/f39/f38AYAABf2ADf319AGAEf39/fwF/YAJ9fQF/YAl/f39/f39/f38Bf2ACfX0BfWAEfX1/fwF/YAF9AX1gBH99fX0AYAJ/fQBgAXwBfGAEf399fwBgB39+fn9/f38Bf2AEf35+fwBgA39+fwF+YBN/f39/f39/f39/f39/f39/f39/AGAXf39/f39/f39/f39/f39/f39/f39/fX8AYA1/f39/f39/f39/f31/AGADf399AGAHf39/f39/fwF/YAV/fX9/fwBgAXwBfWABfwF8YAF/AX1gBX9+fn5+AGAAAXxgA39/fwF8YA5/f39/f39/f39/f39/fwBgBH99fX8AYBt/f39/f39/f39/f39/f39/f39/f39/f39/f38AYAp/f39/f39/f31/AGAHf39/f399fwBgEX9/f39/f39/f39/f39/f39/AGAFf39/fX0Bf2AGf39/fX1/AX9gBn9/f319fQF/YAh/f39/f399fwBgC39/f39/fX19f39/AGAMf39/f39/f39/f39/AX9gBH99f38AYA9/f39/f39/f39/f39/fX8AYAN9f38BfWAYf39/f39/f39/f39/f39/f39/f39/f31/AGAHf39/fX19fwF/YAZ9fX9/f38Bf2ADf31/AGACfn8Bf2ACfHwBfGACfH8Bf2ADfHx/AXxgAn1/AX9gA39/fAF/YAJ/fAF8YAJ/fQF9YAF9AX9gBn9/f39/fwF/YAF9AGACfX0AYAN9fX0AYAR9fX19AGAFf319fX0AYAh/f39/f39/fwF/YAR/f39/AXxgAX4Bf2ACfH8BfGAEfn5+fgF/YAR/fn5+AGAKf39/f39/f39/fwF/ArUFFgNlbnYFYWJvcnQADwNlbnYcZW1zY3JpcHRlbl9udW1fbG9naWNhbF9jb3JlcwARA2VudiJlbXNjcmlwdGVuX3Vud2luZF90b19qc19ldmVudF9sb29wAA8DZW52EmVtc2NyaXB0ZW5fZ2V0X25vdwAqA2VudhVlbXNjcmlwdGVuX21lbWNweV9iaWcADQNlbnYfX2Vtc2NyaXB0ZW5fbm90aWZ5X3RocmVhZF9xdWV1ZQADA2Vudh9lbXNjcmlwdGVuX3dlYmdsX2NyZWF0ZV9jb250ZXh0AAMDZW52ImVtc2NyaXB0ZW5fc2V0X2NhbnZhc19lbGVtZW50X3NpemUADQNlbnYTX19wdGhyZWFkX2NyZWF0ZV9qcwATA2VudiRlbXNjcmlwdGVuX3JlY2VpdmVfb25fbWFpbl90aHJlYWRfanMAKwNlbnYgX19lbXNjcmlwdGVuX2luaXRfbWFpbl90aHJlYWRfanMAAANlbnYmX2Vtc2NyaXB0ZW5fZGVmYXVsdF9wdGhyZWFkX3N0YWNrX3NpemUAEQNlbnYbX19lbXNjcmlwdGVuX3RocmVhZF9jbGVhbnVwAAADZW52BGV4aXQAAANlbnYhZW1zY3JpcHRlbl9jaGVja19ibG9ja2luZ19hbGxvd2VkAA8Wd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF9jbG9zZQAIFndhc2lfc25hcHNob3RfcHJldmlldzEIZmRfd3JpdGUAEwNlbnYXZW1zY3JpcHRlbl9nZXRfaGVhcF9tYXgAEQNlbnYWZW1zY3JpcHRlbl9yZXNpemVfaGVhcAAIA2VudgtzZXRUZW1wUmV0MAAAFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfc2VlawAJA2VudgZtZW1vcnkCA4ACgIACA8sEyQQPDwAACAQPABEBAAQEDwQBAQQHAwMFAQECAAQsAgMEDAEABC0gLgEBLwoKDCABBxQDAwEKAQcWAzAhIQcHBxQDAwcUAwMcBxQDAwcUAwMBBwMBBwMHAwUAMQcWAwEFBxYDBxAQEAcDATIzNAcUAwIABDUHFgMDAQUHAwMBAQAEBgYKNgEBDAIEAQAEBTcODAEBBwMDOAYHAwUBAQ4HBQQBBQETCQMTCQM5Og4iAAAAADsECAMBAgAEBDwABAAEIwAHBwcHBwwFGAAFAAQAACIBAAQAARwABQAAAQUTBAEBDw8IAwMDAw0DAxEXPRcXFwMVFRUVFQMIExMAFRcJCQkJCQkJJAkJCQkJCQMNBA0AAAEGCgIOCgoCAQEBAQEBBAQFAQoKAQEEAQQQDAsGDAwKGhkSAAAAAAAZABoAACUlPgUFDBAMEBAGBgYGBgYGBgYGBgYGBgYGBQcHDg4GBgYGBgYGBgYGBgYGDgsLCwsLCwsLCwsLCwsMDAsLEBAODgUFCgEBAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBQUFBQUHBwUFBQUFBQUFBQUFBQUKAQEBBQIMCAQEBAQEBAQEBAQEBAgIBxEJAQgBPwIBHQQRCAEAAEAJQUImJkMPRAMEAQVFJycbRhgoKBhHGBseAQgPCAARAwAAAA0JD08RCRsbGA0IAFAWCAgAAAADAAgAAwAAEQQYUQgNHwgDCAMNAwgAAA0IHykeUh5TBCkIDQgRAAgCVAkEBwFwAagCqAIGLgh/AUGAzsECC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38AQaipAQsHqA55EV9fd2FzbV9jYWxsX2N0b3JzABUEaW5pdAAbF2luaXRfd2l0aF90aHJlYWRzX2NvdW50ABwRZ2V0X3RocmVhZHNfY291bnQAHQ9yZWdpc3Rlcl90ZW5zb3IAHgxkaXNwb3NlX2RhdGEAHwdkaXNwb3NlACIZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAA0FicwAlA0FkZAAnBEFkZE4AKgNBbGwAKwNBbnkALAZBcmdNYXgALQdBdmdQb29sADALQmF0Y2hNYXRNdWwANARDZWlsADULQ2xpcEJ5VmFsdWUAOAZDb252MkQAORNDb252MkRCYWNrcHJvcElucHV0ADoDQ29zADsEQ29zaAA8DUNyb3BBbmRSZXNpemUAPQdDdW1wcm9kAD4GQ3Vtc3VtAD8MRGVwdGhUb1NwYWNlAEAVRGVwdGh3aXNlQ29udjJkTmF0aXZlAEEDRWx1AEIFRXF1YWwAQwNFeHAARw1GbGlwTGVmdFJpZ2h0AEgFRmxvb3IASQhGbG9vckRpdgBKDkZ1c2VkQmF0Y2hOb3JtAE0LRnVzZWRDb252MkQAThRGdXNlZERlcHRod2lzZUNvbnYyRABPBkdhdGhlcgBQCEdhdGhlck5kAFEHR3JlYXRlcgBSDEdyZWF0ZXJFcXVhbABWCUxlYWt5UmVsdQBaBExlc3MAWwlMZXNzRXF1YWwAXwNMb2cAYwpMb2dpY2FsQW5kAGQKTG9naWNhbE5vdABmCUxvZ2ljYWxPcgBnCkxvZ2ljYWxYb3IAaQNNYXgAawdNYXhQb29sAG0HTWF4aW11bQBuBE1lYW4AcQNNaW4AcgdNaW5pbXVtAHMJTWlycm9yUGFkAHYITXVsdGlwbHkAegNOZWcAfBNOb25NYXhTdXBwcmVzc2lvblYzAH0TTm9uTWF4U3VwcHJlc3Npb25WNAB+E05vbk1heFN1cHByZXNzaW9uVjUAfwhOb3RFcXVhbACAAQZPbmVIb3QAgwEFUGFkVjIAhgEDUG93AIcBBVByZWx1AIsBBFByb2QAjAEHUmVhbERpdgCNAQRSZWx1AJABBVJlbHU2AJEBDlJlc2l6ZUJpbGluZWFyAJQBFVJlc2l6ZU5lYXJlc3ROZWlnaGJvcgCVAQdSZXZlcnNlAJYBEFJvdGF0ZVdpdGhPZmZzZXQAlwEFUm91bmQAmAEFUnNxcnQAmQEJU2NhdHRlck5kAJoBCFNlbGVjdFYyAJsBB1NpZ21vaWQAnAEDU2luAJ0BB1NvZnRtYXgAoAETU3BhcnNlRmlsbEVtcHR5Um93cwChAQ1TcGFyc2VSZXNoYXBlAKIBFlNwYXJzZVNlZ21lbnRSZWR1Y3Rpb24AowEEU3FydACkAQZTcXVhcmUApQERU3F1YXJlZERpZmZlcmVuY2UApgEEU3RlcACpAQxTdHJpZGVkU2xpY2UAqgEDU3ViAKsBA1N1bQCtAQNUYW4ArgEEVGFuaACvAQRUaWxlALABBFRvcEsAsQEJVHJhbnNmb3JtAL0BCVRyYW5zcG9zZQC/AQxfRnVzZWRNYXRNdWwAwAEGbWFsbG9jAMgEBGZyZWUAygQTZW1zY3JpcHRlbl90bHNfaW5pdADuAxBfX2Vycm5vX2xvY2F0aW9uAPgDDHB0aHJlYWRfc2VsZgC7BCtlbXNjcmlwdGVuX21haW5fdGhyZWFkX3Byb2Nlc3NfcXVldWVkX2NhbGxzAKMEGl9lbXNjcmlwdGVuX3RocmVhZF9jcmFzaGVkAIQEF19lbXNjcmlwdGVuX3RocmVhZF9pbml0ANsELmVtc2NyaXB0ZW5fY3VycmVudF90aHJlYWRfcHJvY2Vzc19xdWV1ZWRfY2FsbHMAmQQhZW1zY3JpcHRlbl9tYWluX2Jyb3dzZXJfdGhyZWFkX2lkAJwEJGVtc2NyaXB0ZW5fc3luY19ydW5faW5fbWFpbl90aHJlYWRfMgChBCRlbXNjcmlwdGVuX3N5bmNfcnVuX2luX21haW5fdGhyZWFkXzQAogQrX2Vtc2NyaXB0ZW5fYWxsb3dfbWFpbl9ydW50aW1lX3F1ZXVlZF9jYWxscwMHKGVtc2NyaXB0ZW5fcnVuX2luX21haW5fcnVudGltZV90aHJlYWRfanMApAQeZW1zY3JpcHRlbl9kaXNwYXRjaF90b190aHJlYWRfAKYEHF9lbXNjcmlwdGVuX3RocmVhZF9mcmVlX2RhdGEAsgQXX2Vtc2NyaXB0ZW5fdGhyZWFkX2V4aXQAswQIbWVtYWxpZ24AxwQbZW1zY3JpcHRlbl9zdGFja19zZXRfbGltaXRzANMECXN0YWNrU2F2ZQDYBAxzdGFja1Jlc3RvcmUA2QQKc3RhY2tBbGxvYwDaBBBkeW5DYWxsX2lpamppaWlpANwEDGR5bkNhbGxfamlqaQDdBAgBFgmyBAEAQQELpwIXGJEClwL/AYUCKCkukwKaAjZERUaUApwCS0xTVFVXWFlcXV5gYWJlaGpsb3B0dYICiAJ7ZZUCnQKBAYIBaoQBiAGJAYoBgQKHAo4BjwGSAZICmQKeAZYCngKDAokCpwGoAawBassBwQHDAcQB0QHUAd0B5QHfAeEB4gHnAewB6gHtAfUB+wL4AokDhgPxAvIC/wKAA/wC+QKKA4cD8wKBA/0C+gKLA4gD9ALHAoID9QL2AoMDhAP3AuUC5ALjAusC4gLqAuEC6QLgAugC3wLnAt4C5gKFA+4C8AKPA5ED2wLdAo0DwgPEA8cDzgOTA+0C7wKOA5AD2gLcAowDwQPDA8YDzwOSA8wCzQPMA8oDywLTA88CyALFA80CygLSA/4C2ALZAtcCxQLGAssD0APJAtQD0QPOApYDyQO3A78DvAOxA64DrAOqA6gDpgO0A6MDoAOdA5oDmAPIA7YDvgO7A7ADrQOrA6kDpwOlA7MDogOfA5wDmQOXA54DmwO1A6QDoQOyA68DuAPAA70DuQO6A9YC0ALRAuwC0gKUA5UD0wLUAtUD1gPUAtwD1QLbA9oD2QPYA9cD3QOzArQCrwKwArECsgK4ArcCxALDAsICvgLBAsACqAKnAqsCrAKpAqoCrQK8Ar8CrgK2AqYCtQK7AroCuQKfAqACoQKiAqEC3wPgA+ED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cHEhAiAIIBVqISYgACAEKAIIQQJ0aigCACINIAhsISkgACABQQJ0aigCACIYIA1sIAhsISogCEEQayIfQQR2QQFqIgBB/v///wFxIRAgAEEBcSEgQQAhGwNAIBgEQCAYIBtsIRwgJiAbIB1sIh5qISEgFSAeaiErICYgGyAqbCIAaiEsIAAgFWohLUEAIRMDQCANBEAgEyAcaiANbCEFIAYgE2wiACAeaiERIAAgIWohIiAAICtqISMgLCATIClsIgBqISQgACAtaiElQQAhDANAAkAgCEUNACAFIAxqIAhsIQQgESAMIA9sIgFqIQNBACEAAkAgFEUNACAaICUgCCAMbCIJamogGSABICJqakkgGSABICNqaiAaIAkgJGpqSXENAEEAIQEgH0EQTwRAA0AgDiAAIARqaiALIAMgACAHbGpq/QAAAP0LAAAgDiAAQRByIgkgBGpqIAsgAyAHIAlsamr9AAAA/QsAACAAQSBqIQAgAUECaiIBIBBHDQALCyAgBEAgDiAAIARqaiALIAMgACAHbGpq/QAAAP0LAAALIAIiACAIRg0BCyAAQQFyIQEgFgRAIA4gACAEamogCyADIAAgB2xqai0AADoAACABIQALIAEgCEYNAANAIA4gACAEamogCyADIAAgB2xqai0AADoAACAOIABBAWoiASAEamogCyADIAEgB2xqai0AADoAACAAQQJqIgAgCEcNAAsLIAxBAWoiDCANRw0ACwsgE0EBaiITIBhHDQALCyAbQQFqIhsgKEcNAAsMAQtBASEPIAooAgAiASgCBCEEIAAoAgQhCSAAKAIIIgMhHEEBIQcCQAJAIAEoAgAiCEEBRg0AQQEhHCADQQEgBEEBRiIHGyEPQQEgAyAHGyEHIAgNACADIAlsIRwMAQsgDyADIAlsIgMgBBshDyADIAcgBBshBwsgACAIQQJ0aigCACIeRQ0AIAdBAUYgACABKAIIQQJ0aigCACIIQQ9LcSEUIAhBAXEhFiAIQXBxIQIgCCAVaiEYIAAgBEECdGooAgAiDSAIbCEhIAhBEGsiH0EEdkEBaiIAQf7///8BcSEQIABBAXEhIEEAIRMDQCANBEAgDSATbCERIBggEyAcbCIFaiEiIAUgFWohIyAYIBMgIWwiAGohJCAAIBVqISVBACEMA0ACQCAIRQ0AIAwgEWogCGwhBCAMIA9sIgEgBWohA0EAIQACQCAURQ0AIBogJSAIIAxsIglqaiAZIAEgImpqSSAZIAEgI2pqIBogCSAkampJcQ0AQQAhASAfQRBPBEADQCAOIAAgBGpqIAsgAyAAIAdsamr9AAAA/QsAACAOIABBEHIiCSAEamogCyADIAcgCWxqav0AAAD9CwAAIABBIGohACABQQJqIgEgEEcNAAsLICAEQCAOIAAgBGpqIAsgAyAAIAdsamr9AAAA/QsAAAsgAiIAIAhGDQELIABBAXIhASAWBEAgDiAAIARqaiALIAMgACAHbGpqLQAAOgAAIAEhAAsgASAIRg0AA0AgDiAAIARqaiALIAMgACAHbGpqLQAAOgAAIA4gAEEBaiIBIARqaiALIAMgASAHbGpqLQAAOgAAIABBAmoiACAIRw0ACwsgDEEBaiIMIA1HDQALCyATQQFqIhMgHkcNAAsLIBUgJ2oiFSAXSQ0ACwsgCigCACIABEAgCiAANgIEIAAQyQQLIAooAhAiAARAIAogADYCFCAAEMkECyAKQeAAaiQADAELIBIgAzYCBCASIAA2AgBB1RAgEhAmCyASKAIQIgIEQCASIAI2AhQgAhDJBAsgEigCICICBEAgEiACNgIkIAIQyQQLIBJBMGokAA8LEAAACx8AIAAgASACIAMgBCAFIAYgByAIIAkgCiALIAwQ4wELDABB4KwBKAIAEMIBCzQBAX8gAARAIAAoAgAQwgEgACgCBBDCASAAKAJoIgEEQCAAIAE2AmwgARDJBAsgABDJBAsLVwECf0HwrAEoAgAiAARAA0AgACgCACECIAAoAgwiAQRAIAAgATYCECABEMkECyAAEMkEIAIiAA0ACwtB6KwBKAIAIQBB6KwBQQA2AgAgAARAIAAQyQQLC1cBAn9BhK0BKAIAIgAEQANAIAAoAgAhAiAAKAIMIgEEQCAAIAE2AhAgARDJBAsgABDJBCACIgANAAsLQfysASgCACEAQfysAUEANgIAIAAEQCAAEMkECwvjNAQnfwJ9CXsBfiMAQbABayIYJAAgABAZIQAgBBAZISMgFxAZITsgIygCACEqIAAoAgAhLiAHBEAgBxAZKAIAITULIDsoAgAhNiAYQQA2AqgBIBhCADcDoAECQEEAIBRBBEcgFRsNACA7KAIEIgBFBEBBACE2DAELIBhBoAFqIAAQxgEgGCgCoAEhNgtBACEAIBhBADYCnAEgDARAQQAhC0EAIQpBACEJQQAhCEEEIQALQQEhDAJ/IBNFBEAgESEpIBIMAQtBASEpIABBAXIhACARIQwgEiARbgshK0EAIBQgFEEDa0ECSRshH0MAAID/IT9DAACAfyFAAkACQAJAIBRBAWsOAgABAgtDAAAAACE/DAELQwAAAAAhP0MAAMBAIUALIBggQDgCmAEgGCA/OAKUASAYIAA2ApABIBggBzYCjAEgGCAENgKIASAYIB82AoQBIBggEjYCgAEgGCARNgJ8IBggKzYCeCAYICk2AnQgGCAMNgJwIBggDjYCbCAYIA02AmggGCAQNgJkIBggDzYCYCAYIAY2AlwgGCAFNgJYIBggCzYCVCAYIAo2AlAgGCAJNgJMIBggCDYCSAJAAkAgGEHIAGoQxwEiH0HgrAFGBEBBACEfIBhBADYCQCAYQgA3AzgCQCATDQAgIygCBCITBEAgGEE4aiATEMYBIBgoAjghHwsgGEEIENcEIhM2AiggGCATQQhqIiM2AjAgEyAFIAZsIBFsrSASrUIghoQ3AgAgGCAjNgIsIBhBCBDXBCITNgIYIBggE0EIaiIjNgIgIBNCATcCACAYICM2AhwgKiAYQShqIBhBGGogHxDvASAYKAI4ISogGCgCGCITBEAgGCATNgIcIBMQyQQLIBgoAigiE0UNACAYIBM2AiwgExDJBAsgGEGcAWohHSMAQTBrIiMkAEECIRMCQCA/vEH/////B3FBgICA/AdLDQAgQLwhHyA/IEBgDQAgH0H/////B3FBgICA/AdLDQBBmLUBKAIAIhMEQCAjQSBqID8gQCATERIACyBAQwAAgH9bIRMgP0MAAAAAWyE3IECMID9bISUCfyAFIAZsIS9BBCEwQdi1ASEfA0AgHyAvIB8tAA1GDQEaIB9BEGohHyAwQQFrIjANAAtBAAsiHwRAICNBEGogPyBAIB8oAggREgALIBMgN3EhNyATICVxIRNBgLoBKAIAIiUEQCAjID8gQCAlERIACwJ/IAUhMCAGIS8gDCEmICkhJSAAIQwgI0EgaiEiICNBEGohISAjISkgHyEAIDchBiAdIQVBASE4AkBBpK4BKAIAIjJBAXFFDQBBBSE4IDJBAnFBAkcNAEECITgCQCAwRQ0AIC9FDQAgD0UNACAQRQ0AIA1FDQAgDkUNACAmRQ0AICVFDQAgK0UNACAlICZsIBFLDQAgJiArbCASSw0AIAxBAXEiHSAlQQFHcQ0AIAggCXIgCnIgC3IiOUEAIAxBBHEiMhsNAUEGITgQ/gEiGUUNACAlQQFGICtBAUZxIR4gDyAQciEzAn8CQAJAAkACQAJAAkAgLyAwbCIsQQFHDQAgHkUNACAzQQFHDQAgOQ0ADAELIB4gAEEAR3ENAUGftQEtAAAhHyAZICtBnbUBLQAAIgAQ+AEgJUEBQZ61AS0AAHQiKRCKAiI3ICxsQQJ0QQRqbCAmbCIhEIsCIh42AnQgHkUNByAsQQFHIDlBAEdyIDNBAUdyITMgHkEAICH8CwAgGSAi/QAAAP0LANABIBNFDQJBiLUBQei0AUGItQEoAgAiIRshHiAhDQQgBg0DDAQLIBkgJkGEugEtAAAQigJBA3QQiwIiHTYCdCAdRQ0GICZBhLoBLQAAICogNSAdQQBB9wERCgAgGSAp/QAAAP0LANABQfy5ASgCACEdIBlBhboBLQAAOgDMAiAZIB02AsgCQQAhHUEJDAQLIBkgJiAALQAMEIoCIikgLEECdEEEamwiHhCLAiIiNgJ0ICJFDQUgIkEAIB78CwAgGSAh/QAAAP0LANABIDAgLyAmIAAtAAwgKiA1IBkoAnRBAEEAQfgBQfkBIB0bEQwAIAAhHSATBH8gAEEEaiAAIAAoAgQbBSAdCygCACEdIBkgAC8ADTsBzAIgGSAdNgLIAiApQQJ0QRBqIR1BAwwDC0HotAEhHiAGRQ0BC0H4tAFB6LQBQfi0ASgCABshHgtBASAfdCETQZ21AS0AAEEAbCEhIBkoAnQhIgJ/IDNFBEAgJiArICUgACApIBMgKiA1ICIgIUEAQfoBERAAQZy1AS0AACEdIBkgHjUCACAeNQIIQiCGhDcCyAJB0QIhIUHQAiEiQdICDAELAkAgHQRAICYgKyAsIAAgKSAqIDUgIiAhQQBB+wERBgAMAQsgJiArICwgJSAAICkgEyAqIDUgIiAhQQBB/AERCwALQZy1AS0AACEdIB4oAgQhISAeKAIMIR4gGUEANgLQAiAZIB42AswCIBkgITYCyAJB1QIhIUHUAiEiQdYCCyEeIBkgImogHToAACAZICFqIAA6AAAgGSAeaiApOgAAIDdBAnRBEGohHUEFQQQgMxsLISJBASAsQQFHIDJBAEdxIjIgORsEQCAZIB0QiwIiKjYCuAEgKkUNAiAqQQAgHfwLAAsgGSAiNgLEAiAZQRo2AsACIBkgEjYCbCAZIBE2AlQgGSArNgI4IBkgJTYCNCAZICY2AiwgGSAONgIoIBkgDTYCJCAZIBA2AiAgGSAPNgIcIBkgLzYCGCAZIDA2AhQgGSALNgIQIBkgCjYCDCAZIAk2AgggGSAINgIEIBlBADYCwAQgGSAMQXtxQQRBACAyG3I2AsgBIAUgGTYCAEEADAILQQAhGQsgGRCjAiA4CyETCyAjQTBqJAAgEyIRBEAgGCARNgIQQfcfIBhBEGoQJgsgGCgCPCEFIBgoAjghDCAYQgA3AzggGCgCQCEGIBhBADYCQCAYKAKcASENQeCsASgCACIRRQRAQeCsASERQeCsASEIDAILQeCsASEIA0ACQAJAIBgoAkgiACARKAIQIhJJDQAgEUEQaiEJAkAgACASSw0AIBgoAkwiCiARKAIUIgtJDQEgCiALSw0AIBgoAlAiCiARKAIYIgtJDQEgCiALSw0AIBhByABqIAkQyAENASAJKAIAIRIgGCgCSCEACwJAIAAgEksNACAAIBJJDQUgESgCFCIAIBgoAkwiEkkNACAAIBJLDQUgESgCGCIAIBgoAlAiEkkNACAAIBJLDQUgCSAYQcgAahDIAUUNBQsgEUEEaiEIIBEoAgQiAEUNBCAIIREMAQsgESgCACIADQAgESEIDAMLIBEhCCAAIREMAAsACyAYIB8oAmQiETYCnAEMAQsCQCAIKAIARQRAQfQAENcEIgBBEGogGEHIAGpB1AD8CgAAIAAgBjYCcCAAIAU2AmwgACAMNgJoIAAgDTYCZCAAIBE2AgggAEIANwIAIAggADYCAEHcrAEoAgAoAgAiEQRAQdysASARNgIAIAgoAgAhAAtB4KwBKAIAIAAQM0HkrAFB5KwBKAIAQQFqNgIADAELIAxFDQAgDBDJBAsgBCAYQcgAakHorAEQyQEgBwRAIAcgGEHIAGpB/KwBEMkBC0GIrAFBiKwBKAIAQQFqNgIAIBgoAjgiEQRAIBggETYCPCAREMkECyAYKAKcASERC0GMrAEoAgAhACARKALAAkEaRgR/An8gASEEIAIhBSADIQYgNiECIAAQ3gMhNEEAISxBACEvQQAhKiMAQdAAayI6JAAgEUEANgLABEEBIQECQAJAQaSuASgCACIHQQFxRQ0AQQUhASAHQQJxQQJHDQBBAiEBIAVFDQAgBkUNACARIAQEfyARIC42AlggESAGNgJQIBEgBTYCTCARIAQ2AgACQCARLQDIAUEEcQRAIAUgESgCHCInEPoBIQEgESAGIBEoAiAiBxD6ASIAQQFrIAdsIAZrIBEoAigiAyARKAIYIhpBAWtsakEBaiIxQQF2Ijw2AhAgESAnIAFBAWtsIAVrIBEoAiQgESgCFCInQQFrbGpBAWoiHEEBdiIbNgIEIBEgHCAbazYCDCARIDEgPGs2AggMAQsgESgCDCARKAIEIAVqaiARKAIUIicgESgCJCARKAIcEIwCIQEgESgCCCARKAIQIAZqaiARKAIYIhogESgCKCIDIBEoAiAiBxCMAiEACyARIAI2AnAgESAANgJoIBEgATYCZAJAAkACQAJAAkAgESgCxAJBBGsOBgABBwcHAwILIBEoAiwhByARKAI0IicgES0A0gIQigJBAnRBBGohCCARKALIAiEbIBEtANECIQYgES0A0AIhGiARKAI4IQUgASAEbCAAbCIAQQFGBEBBASAaIBEoAswCIgEbIRogASAbIAEbIRsLIBEoAlQhASARKAJ0IQQgESAbNgLcAyARQQI2AtgDIBEgBUECdDYC1AMgESAGQQJ0NgLQAyARIAI2AsgDIBEgCDYCwAMgESAENgK8AyARIAFBAnQ2ArgDIBEgLjYCtAMgESAnQQJ0NgKwAyARIAUgBhD4ASAIbDYCxAMgESAR/QAE0AH9CwTgAyARIBH9AATgAf0LBPADIBEgEf0ABPAB/QsEgAQgESARKAJsQQJ0NgLMAyAaQf8BcSEEIAUhAQJAIDRBAkkNACAFIAAgBBD5ASABIAdsbCA0QQVsEPkBIi5NDQAgBSAFIAYgLmwQ+QEgBmwQ/AEhAQsgEQJ/IAdBAUYEQCARQf0BNgLcAiAAIQdBBQwBCyARQf4BNgLcAiARIAU2AugCIAAhBUEHCzYC2AIgESABNgL8AiARIAQ2AvgCIBEgBTYC5AIgESAHNgLgAgwDCyAaICdsIQcgESgCyAIhMSARQdUCaiEnIBEtANQCIRogACABbCIAQQFGBEBBASAaIBEoAswCIgEbIRogASAxIAEbITELICctAAAhJyARKAIsIQMgB0ECdCE8IAAgGkH/AXEiGhD4ASEBAkAgBSARKAKcAUYEQCARKAKgASAGRg0BCyARKAJgIAEgPGwQ/QEiAUUEQEEGIQEMBgsgESAuNgKkASARIAE2AmAgESAGNgKgASARIAU2ApwBIBEoAmgiPSARKAJkbCIcIBpuIiAgHCAaICBsR2ogGmwhOCARKAIUITMgESgCGCEkIBEoAlQhKCARKAIQITcgESgCBCErIBEoAighGSARKAIkITUgESgCICEdIBEoAhwhKSARKAJQIT4gESgCTCETIBEoArgBIS0gESgCWCEeIBEoAmAhIEIBIUogPUEBRwRAQR8gPUEBa2drIhtB/wFxISpBAiAbdCA9a61CIIYgPa2AQgF8Qv////8PgyFKQQEhLwsgOARAICQgM2whEiAcQQFrISMgGkEBRiAkQQNLcSEmICRBAXEhECAkQXxxIQEgJEEDcSEfICRBBGsiHEECdkEBaiIbQf7///8HcSEPIBtBAXEhDiAbQfz///8HcSENIBtBA3EhJSAt/REhQSAe/REhQyAoQQJ0IjL9ESFEID79ESFFIBn9ESFGIBxBBEkhDCAcQQxJIQsDQCAaBEAgEiAsbCEKQQAhIQNAIDMEQCAjICEgLGoiGyAbICNLGyIcIEogHK1+QiCIpyIbayAvdiAbaiAqdiICIClsICtrIQkgCiAhaiEbIBwgAiA9bGsgHWwgN2siOf0RIUdBACEiA0AgIiAkbCEcAkAgEyAJICIgNWxqIgJNBEAgJEUNAUEAIShBACECICYEQEEAIQhBACEwIAtFBEADQCAgIBsgAiAcaiAabGpBAnRqIEH9CwIAICAgGyACQQRyIBxqIBpsakECdGogQf0LAgAgICAbIAJBCHIgHGogGmxqQQJ0aiBB/QsCACAgIBsgAkEMciAcaiAabGpBAnRqIEH9CwIAIAJBEGohAiAwQQRqIjAgDUcNAAsLICUEQANAICAgGyACIBxqIBpsakECdGogQf0LAgAgAkEEaiECIAhBAWoiCCAlRw0ACwsgASICICRGDQILICQgAkF/c2ohCCAfBEADQCAgIBsgAiAcaiAabGpBAnRqIC02AgAgAkEBaiECIChBAWoiKCAfRw0ACwsgCEEDSQ0BA0AgICAbIAIgHGoiKCAabGpBAnRqIC02AgAgICAbIChBAWogGmxqQQJ0aiAtNgIAICAgGyAoQQJqIBpsakECdGogLTYCACAgIBsgKEEDaiAabGpBAnRqIC02AgAgAkEEaiICICRHDQALDAELICRFDQAgAiA+bCEoQQAhAiAmBEAgKP0RIUj9DAAAAAABAAAAAgAAAAMAAAAhQkEAIQggDEUEQANAICAgGyACIBxqIBpsakECdGogRyBCIEb9tQH9rgEiSSBI/a4BIET9tQEgQ/2uASBBIEkgRf06/VL9CwIAICAgGyACQQRyIBxqIBpsakECdGogRyBC/QwEAAAABAAAAAQAAAAEAAAA/a4BIEb9tQH9rgEiSSBI/a4BIET9tQEgQ/2uASBBIEkgRf06/VL9CwIAIEL9DAgAAAAIAAAACAAAAAgAAAD9rgEhQiACQQhqIQIgCEECaiIIIA9HDQALCyAOBEAgICAbIAIgHGogGmxqQQJ0aiBHIEIgRv21Af2uASJCIEj9rgEgRP21ASBD/a4BIEEgQiBF/Tr9Uv0LAgALIAEiAiAkRg0BCyACQQFyIQggEARAICAgGyACIBxqIBpsakECdGogOSACIBlsaiICIChqIDJsIB5qIC0gAiA+SRs2AgAgCCECCyAIICRGDQADQCAgIBsgAiAcaiAabGpBAnRqIDkgAiAZbGoiCCAoaiAybCAeaiAtIAggPkkbNgIAICAgGyACQQFqIgggHGogGmxqQQJ0aiA5IAggGWxqIgggKGogMmwgHmogLSAIID5JGzYCACACQQJqIgIgJEcNAAsLICJBAWoiIiAzRw0ACwsgIUEBaiIhIBpHDQALCyAaICxqIiwgOEkNAAsLIBEoAnAhAgsgES0A1gIhCCARKAI0IRwgESgCYCEgIBEoAqQBISQgESgCuAEhKCARKAJ0IS0gESgCbCEbIBEoAjghASARIDE2AvQDIBFBAjYC8AMgESABQQJ0NgLkAyARIBxBAnQiMTYC3AMgESAnQQJ0NgLYAyARIBtBAnQ2AtQDIBEgAjYC0AMgESAtNgLMAyARICg2AsgDIBEgLiAkazYCxAMgESAgNgLAAyARIDE2ArgDIBEgGiA8bDYCtAMgESAHNgKwAyARIAAgG2xBAnQ2AuwDIBEgHCAIEIoCIAdsQQJ0QQRqIgc2ArwDIBEgASAnEPgBIAdsNgLgAyARIBEoAlQgBSAGbGxBAnQ2AugDIBEgEf0AA/AB/QsDmAQgESAR/QAD4AH9CwOIBCARIBH9AAPQAf0LA/gDAn8gASA0QQJJDQAaIAEgACAaEPkBIAMgBGwgAWxsIDRBBWwQ+QEiByABTw0AGiABIAEgByAnbBD5ASAnbBD8AQshBQJAIANBAUYEQCARAn8gBEECTwRAIBFB/wE2AtwCIBEgATYC6AJBBwwBCyARQYACNgLcAiAAIQQgASEAQQULNgLYAiARIAA2AuQCIBEgBDYC4AIMAQsgEQJ/IARBAk8EQCARQYECNgLcAiARIAE2AuwCQQkMAQsgEUGCAjYC3AIgAyEEIAAhAyABIQBBBws2AtgCIBEgADYC6AIgESADNgLkAiARIAQ2AuACCyARIAU2AvwCIBEgGjYC+AIMAgsgByAaIANBAUYbIjQgAEEBa2wgGmogJ2whBwJ/AkAgESgCnAEgBUcNACARKAKgASAGRw0AIBEoAqQBDAELIBEoAmAgASAHbEECdBD9ASICRQRAQQYhAQwFCyARIAI2AmAgESAHIDQQpQIgESAGNgKgASARIAU2ApwBIBEgLjYCpAEgESgCcCECIC4LIRogESgCVCEDIBEoAmwhCCARKAJgITEgESgCdCE8IBEoAiwhGyARKAK4ASEcIDr9DAAAAAAAAAAAAAAAAAAAAAD9CwI8IDr9DAAAAAAAAAAAAAAAAAAAAAD9CwIsIDr9DAAAAAAAAAAAAAAAAAAAAAD9CwIcIBEgHDYC3AMgESAbNgLYAyARIAA2AtQDIBEgAjYCyAMgESA8NgLEAyARIC4gGms2ArwDIBEgB0ECdDYCuAMgESAnIDRsQQJ0NgK0AyARIDE2ArADIBEgCCAba0ECdDYC4AMgESAAIAhsIgBBAnQ2AtADIBEgAyAFIAZsbEECdDYCwAMgESAAIAFsQQJ0NgLMAyARIDooAhg2AuQDIBFBAzYC2AIgEUGDAjYC3AIgESAENgLgAiARIAE2AuQCIBEgEf0AA/AB/QsDiAQgESAR/QAD4AH9CwP4AyARIBH9AAPQAf0LA+gDIBEgESgCyAI2ApgEDAELIBEoAsgCIQUgESgCLCEHIBEoAlQhBiARKAJ0IQggESgCbCEbIDr9DAAAAAAAAAAAAAAAAAAAAAD9CwIEIBEgBTYCyAMgESAbQQJ0NgLEAyARIAI2AsADIBEgCDYCvAMgESAGQQJ0NgK4AyARIC42ArQDIBEgB0ECdDYCsAMgESA6KAIANgLMAyARIBH9AATQAf0LBNADAn8gASAEbCAAbCIBIDRBAkkNABogASABIDRBBWwQ+QEiBSABTw0AGiABIAEgBSARLQDMAiIAbBD5ASAAbBD8AQshACARQQI2AtgCIBEgADYC+AIgESABNgLgAiARQYQCNgLcAgtBAQVBAgs2AsAEQQAhAQsgOkHQAGokACABDAELAAsFQQILIhEEQCAYIBE2AgBBiR8gGBAmCyAYKAKcAUGMrAEoAgAQvQIgFEEDRgRAIDYgOygCBCAVIBcQ6wELAkAgFEEERgRAIDYgOygCBCAWIBcQ6QEMAQsCQAJAIBRBBWsOAgABAgsgNiA7KAIEIBcQ7gEMAQsgNiA7KAIEIBcQ6AELIBgoAqABIhEEQCAYIBE2AqQBIBEQyQQLIBhBsAFqJAALgAIBBn8gASAAKAIIIgMgACgCBCICa0ECdU0EQCAAIAEEfyACQQAgAUECdCIB/AsAIAEgAmoFIAILNgIEDwsCQCACIAAoAgAiBGsiB0ECdSIGIAFqIgVBgICAgARPDQBBACECIAZBAnQCfyAFIAMgBGsiA0EBdSIGIAUgBksbQf////8DIANB/P///wdJGyIDBEAgA0GAgICABE8NAiADQQJ0ENcEIQILIAILaiIFQQAgAUECdCIB/AsAIAEgBWohASACIANBAnRqIQMgB0EASgRAIAIgBCAH/AoAAAsgACADNgIIIAAgATYCBCAAIAI2AgAgBARAIAQQyQQLDwsQAAALkgIBBX8jAEEQayIFJAACQAJAQeCsASgCACIBRQ0AQeCsASEDA0ACQAJAIAEoAhAiAiAAKAIAIgRJDQACQCACIARLDQAgASgCFCICIAAoAgQiBEkNASACIARLDQAgASgCGCICIAAoAggiBEkNASACIARLDQAgAUEQaiAAEMgBRQ0AIAFBBGohAQwCCyABIQMMAQsgAUEEaiEBCyABKAIAIgENAAsgA0HgrAFGDQAgACgCACIBIAMoAhAiAkkNACABIAJLDQEgACgCBCIBIAMoAhQiAkkNACABIAJLDQEgACgCCCIBIAMoAhgiAkkNACABIAJLDQEgACADQRBqEMgBRQ0BC0HgrAEhAwsgBUEQaiQAIAMLowQCBH8CfSMAQRBrIgUkAEEBIQQCQCAAKAIMIgIgASgCDCIDSQ0AIAIgA0sEQEEAIQQMAQsgACgCECICIAEoAhAiA0kNACACIANLBEBBACEEDAELIAAoAhQiAiABKAIUIgNJDQAgAiADSwRAQQAhBAwBCyAAKAIYIgIgASgCGCIDSQ0AIAIgA0sEQEEAIQQMAQsgACgCHCICIAEoAhwiA0kNACACIANLBEBBACEEDAELIAAoAiAiAiABKAIgIgNJDQAgAiADSwRAQQAhBAwBCyAAKAIkIgIgASgCJCIDSQ0AIAIgA0sEQEEAIQQMAQsgACgCKCICIAEoAigiA0kNAEEAIQQgAiADSw0AAn9BASEEAkAgACgCLCICIAEoAiwiA0kNAEEAIAIgA0sNARogACgCMCICIAEoAjAiA0kNAEEAIAIgA0sNARogACgCNCICIAEoAjQiA0kNAEEAIAIgA0sNARogACgCOCICIAEoAjgiA0kNAEEAIAIgA0sNARogACgCPCICIAEoAjwiA0kNAEEAIAIgA0sNARogACgCQCICIAEoAkAiA0kNAEEAIAIgA0sNARogACgCRCICIAEoAkQiA0kNAEEAIAIgA0sNARogACgCSCICIAEoAkgiA0kNAEEAIAIgA0sNARogACoCTCIGIAEqAkwiB10NAEEAIQQgBiAHXg0AIAAqAlAgASoCUF0hBAsgBAshBAsgBUEQaiQAIAQLwgUBCX8jAEEgayIGJAAgBiAANgIUAkACQAJAAkAgAigCBCIERQ0AIAIoAgAiCgJ/IARBAWsgAHEgBGkiCUEBTQ0AGiAAIAAgBEkNABogACAEcAsiB0ECdGooAgAiA0UNACADKAIAIgNFDQAgBEEBayEIIAlBAUshCwNAAkAgACADKAIEIgVHBEACQCALRQRAIAUgCHEhBQwBCyAEIAVLDQAgBSAEcCEFCyAFIAdGDQEMAwsgAygCCCAARg0DCyADKAIAIgMNAAsLIAZB1AAQ1wQiADYCCCAGIABB1ABqIgM2AhAgACABQdQA/AoAACAGIAM2AgwgBkEYaiACIAZBFGogBkEUaiAGQQhqEMoBIAYoAhRBxQAQGiAGKAIIIgBFDQEgBiAANgIMIAAQyQQMAQsgCgJ/IAAgCHEgCUEBTQ0AGiAAIAAgBEkNABogACAEcAsiAkECdGooAgAiA0UNASADKAIAIgNFDQEgCUEBSyEHA0ACQAJAIAAgAygCBCIFRwRAAkAgB0UEQCAFIAhxIQUMAQsgBCAFSw0AIAUgBHAhBQsgAiAFRg0BDAULIAMoAgggAEYNAQsgAygCACIDDQEMAwsLIAMoAhAiACADKAIUIgRJBEAgACABQdQA/AoAACADIABB1ABqNgIQDAELIAAgAygCDCIFayIAQdQAbSIIQQFqIgJBxOGwGE8NASACIAQgBWtB1ABtIgRBAXQiByACIAdLG0HD4bAYIARB4bCYDEkbIgQEfyAEQcThsBhPDQIgBEHUAGwQ1wQFQQALIgIgCEHUAGxqIgcgAUHUAPwKAAAgByAAQax/bUHUAGxqIQggAiAEQdQAbGohBCAHQdQAaiECIABBAEoEQCAIIAUgAPwKAAALIAMgBDYCFCADIAI2AhAgAyAINgIMIAVFDQAgBRDJBAsgBkEgaiQADwsQAAALxAQCBn8CfSACKAIAIQYgAAJ/AkAgASgCBCIFRQ0AIAEoAgACfyAFQQFrIAZxIAVpIgdBAU0NABogBiAFIAZLDQAaIAYgBXALIghBAnRqKAIAIgJFDQAgBUEBayEJIAdBAUshCgNAIAIoAgAiAkUNASAGIAIoAgQiB0cEQAJAIApFBEAgByAJcSEHDAELIAUgB0sNACAHIAVwIQcLIAcgCEcNAgsgAigCCCAGRw0AC0EADAELQRgQ1wQiAiADKAIANgIIIAIgBCgCADYCDCACIAQoAgQ2AhAgAiAEKAIINgIUIARBADYCCCAEQgA3AgAgAiAGNgIEIAJBADYCAAJAQQAgBSABKAIMQQFqsyIMIAEqAhAiCyAFs5ReGw0AIAUgBUEBa3FBAEcgBUEDSXIgBUEBdHIhByABAn8gDCALlY0iC0MAAIBPXSALQwAAAABgcQRAIAupDAELQQALIgUgByAFIAdLGxAjIAEoAgQiBSAFQQFrcUUEQCAFQQFrIAZxIQgMAQsgBSAGSwRAIAYhCAwBCyAGIAVwIQgLAkAgASgCACAIQQJ0aiIHKAIAIgZFBEAgAiABKAIINgIAIAEgAjYCCCAHIAFBCGo2AgAgAigCACIGRQ0BIAYoAgQhBgJAIAUgBUEBayIHcUUEQCAGIAdxIQYMAQsgBSAGSw0AIAYgBXAhBgsgASgCACAGQQJ0aiACNgIADAELIAIgBigCADYCACAGIAI2AgALIAEgASgCDEEBajYCDEEBCzoABCAAIAI2AgALFAAgAEHorAEQzAEgAEH8rAEQzAEL1AMBB38jAEEQayIGJAAgBiAANgIMAkAgASgCBCIERQ0AAkAgBGkiBUEBTQRAIARBAWsgAHEhAwwBCyAEIAAiA0sNACAAIARwIQMLIAEoAgAgA0ECdGooAgAiAkUNACACKAIAIgJFDQAgBEEBayEIIAVBAUshBwNAAkACQCAAIAIoAgQiBUcEQAJAIAdFBEAgBSAIcSEFDAELIAQgBUsNACAFIARwIQULIAMgBUYNAQwECyACKAIIIABGDQELIAIoAgAiAg0BDAILCyACKAIMIgQgAigCECIHRwRAA0ACQCAEEMcBIgJB4KwBRg0AIAIoAmQQowJBiKwBQYisASgCAEEBazYCACAEEMcBIgNB4KwBRg0AAkAgAygCBCICRQRAIAMoAggiBSgCACADRg0BIANBCGohAANAIAAoAgAiAkEIaiEAIAIgAigCCCIFKAIARw0ACwwBCwNAIAIiBSgCACICDQALCyADQdysASgCAEYEQEHcrAEgBTYCAAtB5KwBQeSsASgCAEEBazYCAEHgrAEoAgAgAxDNASADKAJoIgIEQCADIAI2AmwgAhDJBAsgAxDJBAsgBEHUAGoiBCAHRw0ACwsgASAGQQxqECELIAZBEGokAAvdCQEGfwJ/AkACQCABIgIoAgAiBARAIAEoAgQiA0UNAQNAIAMiAigCACIDDQALCyACKAIEIgQNAUEAIQRBAQwCCwsgBCACKAIINgIIQQALIQYCfwJ/IAIgAigCCCIDKAIARgRAIAMgBDYCACAAIAJGBEAgBCEAQQAMAwsgAigCCEEEagwBCyADIAQ2AgQgAigCCAsoAgALIQMgAi0ADCEHIAEgAkcEQCACIAEoAggiBTYCCCAFIAEoAggoAgAgAUdBAnRqIAI2AgAgAiABKAIAIgU2AgAgBSACNgIIIAIgASgCBCIFNgIEIAUEQCAFIAI2AggLIAIgAS0ADDoADCACIAAgACABRhshAAsCQCAHRQ0AIABFDQAgBgRAA0AgAy0ADCECAkAgAyADKAIIIgEoAgBHBEAgAkH/AXFFBEAgA0EBOgAMIAFBADoADCADKAIIIgIgAigCBCIBKAIAIgQ2AgQgBARAIAQgAjYCCAsgASACKAIINgIIIAIoAggiBCAEKAIAIAJHQQJ0aiABNgIAIAEgAjYCACACIAE2AgggAyAAIAAgAygCACICRhshACACKAIEIQMLAkACQAJAAkAgAygCACICBEAgAi0ADEUNAQsgAygCBCIBBEAgAS0ADEUNAgsgA0EAOgAMAkAgACADKAIIIgNGBEAgACEDDAELIAMtAAwNBgsgA0EBOgAMDwsgAygCBCIBRQ0BCyABLQAMDQAgAyECDAELIAJBAToADCADQQA6AAwgAyADKAIAIgIoAgQiADYCACAABEAgACADNgIICyACIAMoAgg2AgggAygCCCIAIAAoAgAgA0dBAnRqIAI2AgAgAiADNgIEIAMgAjYCCAsgAiACKAIIIgMtAAw6AAwgA0EBOgAMIAIoAgRBAToADCACKAIIIgMgAygCBCICKAIAIgA2AgQgAARAIAAgAzYCCAsgAiADKAIINgIIIAMoAggiACAAKAIAIANHQQJ0aiACNgIAIAIgAzYCACADIAI2AggPCyACQf8BcUUEQCADQQE6AAwgAUEAOgAMIAMoAggiAiACKAIAIgEoAgQiBDYCACAEBEAgBCACNgIICyABIAIoAgg2AgggAigCCCIEIAQoAgAgAkdBAnRqIAE2AgAgASACNgIEIAIgATYCCCADIAAgACADKAIEIgJGGyEAIAIoAgAhAwsCQAJAIAMoAgAiAkUNACACLQAMDQAgAyECDAELAkAgAygCBCIBBEAgAS0ADEUNAQsgA0EAOgAMIAMoAggiAy0ADEEAIAAgA0cbDQIgA0EBOgAMDwsgAgR/IAItAAxFBEAgAyECDAILIAMoAgQFIAELQQE6AAwgA0EAOgAMIAMgAygCBCICKAIAIgA2AgQgAARAIAAgAzYCCAsgAiADKAIINgIIIAMoAggiACAAKAIAIANHQQJ0aiACNgIAIAIgAzYCACADIAI2AggLIAIgAigCCCIDLQAMOgAMIANBAToADCACKAIAQQE6AAwgAigCCCIDIAMoAgAiAigCBCIANgIAIAAEQCAAIAM2AggLIAIgAygCCDYCCCADKAIIIgAgACgCACADR0ECdGogAjYCACACIAM2AgQgAyACNgIIDwsgAygCCCICIAIoAgAgA0ZBAnRqKAIAIQMMAAsACyAEQQE6AAwLC+UkAxF/BXsFfSMAQYABayIHJAAgABAZIQAgARAZKAIAIQwgACgCACEVIAAoAgQhACAHQgA3A1ggB/0MAAAAAAAA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ACAEIANwIQQLIAQgBUYNAQwECyACKAIIIABGDQELIAIoAgAiAg0BDAILCyACKAIMIgcgAigCECIKRwRAQcitASgCACECA0ACf0EAIAIiBkUNABogBygCCCEIIAcoAgQhBSAHKAIAIQRByK0BIQMDQAJAAkAgAigCECIAIARJDQACQCAAIARLDQAgAigCFCIAIAVJDQEgACAFSw0AIAIoAhggCE8NACACQQRqIQIMAgsgAiEDDAELIAJBBGohAgsgAigCACICDQALIAYgA0HIrQFGDQAaIAYgAygCECICIARLDQAaAkAgAiAESQ0AIAYgAygCFCICIAVLDQEaIAIgBUkNACAGIAggAygCGEkNARoLIAMoAhwQowJBiKwBQYisASgCAEEBazYCACAHIQACQEHIrQEoAgAiBkUNACAAKAIIIQggACgCBCEFIAAoAgAhA0HIrQEhAiAGIQADQAJAAkAgACgCECIEIANJDQACQCADIARJDQAgACgCFCIEIAVJDQEgBCAFSw0AIAAoAhggCE8NACAAQQRqIQAMAgsgACECDAELIABBBGohAAsgACgCACIADQALIAJByK0BRg0AIAMgAigCECIASQ0AAkAgACADSQ0AIAUgAigCFCIASQ0BIAAgBUkNACAIIAIoAhhJDQELAkAgAigCBCIARQRAIAIoAggiAygCACACRg0BIAJBCGohBANAIAQoAgAiAEEIaiEEIAAgACgCCCIDKAIARw0ACwwBCwNAIAAiAygCACIADQALCyACQcStASgCAEYEQEHErQEgAzYCAAtBzK0BQcytASgCAEEBazYCACAGIAIQzQEgAhDJBAtByK0BKAIACyECIAdBDGoiByAKRw0ACwsgASAJQQxqECELIAlBEGokAAsQAEH4rQFB/K0BKAIAEJ8BC8cEAQV/IwBBIGsiBSQAIAIQGSgCACEGIAVBADYCHAJAAkACQAJAAkBB/K0BKAIAIgJFDQBB/K0BIQMDQCACIAMgAigCECIEGyEDIAIgBEVBAnRqKAIAIgINAAsgA0H8rQFGDQAgAygCEEECSQ0BCyAFQRxqIQQjAEHwAGsiAyQAQQIhAgJAQZC3ASgCACICBEAgA0MAAIA/QwAAgD9DAACAPyACERkAC0EBQQFBAUEAIANB8ABBJUGMtwEoAgAgBBCPAiECCyADQfAAaiQAIAIE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bGogACgCNCAAKAI4IABBQGsgACgCUBELACAMJAALPwAgACgCECAAKAIUIAAoAgAgACgCDCABbGogACgCCCAAKAIEIAAoAhggACgCHCABbGogAEEgaiAAKAJQEQ4AC24BB38gACgCACECIAAoAgwhAyAAKAIYIQQgACgCHCEFIwAiBiAAKAIUIgdBAnRBzwBqQXBxayIIJAAgACgCECAHIAIgASADbGogACgCCCAAKAIEIAggBCABIAVsaiAAQSBqIAAoAlARBwAgBiQAC1gAIAMgACgCACIDIAAoAgQgAkEEdGogACgCCCAAKAIMIAFsaiAAKAIQIAIgACgCIHRqIAAoAhQgAiAAKAIYIgJsaiAAKAIcIAFsaiACIANrIAAoAiQRDgALOgAgAiAAKAIAIAAoAgQgACgCCCICIAFsaiACIAAoAgwgACgCECABIAAoAhQiAWxqIAEgACgCGBEOAAulAgIBewJ/IwBBEGsiCCQAIAAoAhggACgCLCABbGogACgCKCACbGogACgCJCADbGogACgCICAEbGogACgCHCAFbGohBwJAAkAgACgCYCABIAAoAkRrTQ0AIAX9ESAE/RwBIAP9HAIgAv0cAyAA/QACNP2xASAA/QACUP06Igb9GwBBAXEgBv0bAUEBcUEBdHIgBv0bAkEBcUECdHIgBv0bA0EDdHJBD3FBD0cNAEEBIAAoAkwgACgCMCAAKAJIIAAoAgAgACgCFCABbGogACgCECACbGogACgCDCADbGogACgCCCAEbGogACgCBCAFbGpBACAHQQAgACgCaCAAKAJsEQwADAELQQEgACgCZCAHQQAgACgCaCAAKAJwEQIACyAIQRBqJAALrwEAIAAoAkggACgCACAAKAIEIAFsaiAAKAIIIAJsaiAAKAIMIANsaiAAKAIQIARsaiAAKAIUIAVsaiAAKAIYIAAoAhwgAWxqIAAoAiAgAmxqIAAoAiQgA2xqIAAoAiggBGxqIAAoAiwgBWxqIAAoAjAgACgCNCABbGogACgCOCACbGogACgCPCADbGogAEFAaygCACAEbGogACgCRCAFbGogAEHQAGogACgCiAERAgALtAEBBX8gAEEYaiEEIAAoAgwgACgCECIFIAFsaiEDIAAoAgQgACgCCCIGIAFsaiEBIAJBAXEEfyAAKAIAIAEgAyAEIAAoAhQRBQAg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ACEFIAIgAf0AABAiByAEIAcgBv1OIgf95AEgBP3lAf0M/////////////////////yIJIAggBCAH/UX9Uv1S/QsAECACIAUgBCAFIAb9TiIH/eQBIAT95QEgCSAIIAQgB/1F/VL9Uv0LAAAgAkEgaiECIAFBIGohASAAQSBrIgBBH0sNAAsLAkAgAEEQSQRAIAAhAwwBCyAAQRBrIgNBEHFFBEAgAiAB/QAAACIFIAQgBSAG/U4iBf3kASAE/eUB/Qz/////////////////////IAggBCAF/UX9Uv1S/QsAACACQRBqIQIgAUEQaiEBIAMhAAsgA0EQSQ0AIAAhAwNAIAIgAf0AAAAiBSAEIAUgBv1OIgX95AEgBP3lAf0M/////////////////////yIHIAggBCAF/UX9Uv1S/QsAACACIAH9AAAQIgUgBCAFIAb9TiIF/eQBIAT95QEgByAIIAQgBf1F/VL9Uv0LABAgAkEgaiECIAFBIGohASADQSBrIgNBD0sNAAsLAkAgA0UNACAB/QAAACIFIAQgBSAG/U4iBv3kASAE/eUB/Qz/////////////////////IAggBCAG/UX9Uv1SIQQgA0EIcQRAIAIgBP0hADkDACAEIAT9DQgJCgsMDQ4PCAkKCwwNDg8hBCACQQhqIQILIANBBHFFDQAgAiAE/R8AOAIACwvzBQEIeyAD/QADACAD/QADCCAE/Q0AAQIDBAUGBwABAgMEBQYHIgT9DQABAgMEBQYHAAECAwQFBgciCP1NIQkgA/0KAxAhCiAAQR9LBEADQCAB/QAAACEHIAIgAf0AABAiBSAEIAUgCf1OIgv95AEgBP3lAf0M/////////////////////yIGIAggBCAL/UX9Uv1SIgsgCiAL/eQBIAYgCCAFIAv9Rf1S/VL9CwAQIAIgByAEIAcgCf1OIgX95AEgBP3lASAGIAggBCAF/UX9Uv1SIgUgCiAF/eQBIAYgCCAHIAX9Rf1S/VL9CwAAIAJBIGohAiABQSBqIQEgAEEgayIAQR9LDQALCwJAIABBEEkEQCAAIQMMAQsgAEEQayIDQRBxRQRAIAIgAf0AAAAiByAEIAcgCf1OIgb95AEgBP3lAf0M/////////////////////yIFIAggBCAG/UX9Uv1SIgYgCiAG/eQBIAUgCCAH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AA0HIBNFDQJBASEBA0AgBCABQQJ0aigCACILBEAgAyABQQR0aiALIAIQ8gNBASEMIAFBAWoiAUEKRw0BDAkLC0EBIQwgAUEKTw0HA0AgBCABQQJ0aigCAA0BIAFBAWoiAUEKRw0ACwwHC0EcIQoMBAsgCiAJayIOIAggCCAOSBsiCEH/////ByANa0oNAkE9IQogCCANaiIGIA8gBiAPShsiASALSg0DIABBICABIAYgBxD0AyAAIBAgDRDwAyAAQTAgASAGIAdBgIAEcxD0AyAAQTAgCCAOQQAQ9AMgACAJIA4Q8AMgAEEgIAEgBiAHQYDAAHMQ9AMMAQsLQQAhDAwDC0E9IQoLEPgDIAo2AgALQX8hDAsgBUHgAGokACAMC7gBAQN/IAAtAABBIHFFBEACQCACIAAiAygCECIEBH8gBAUgAxD5Aw0BIAMoAhALIAMoAhQiBWtLBEAgAyABIAIgAygCJBENABoMAQsCQCADKAJQQQBIDQAgAiEAA0AgACIERQ0BIAEgBEEBayIAai0AAEEKRw0ACyADIAEgBCADKAIkEQ0AIARJDQEgASAEaiEBIAIgBGshAiADKAIUIQULIAUgASACEJcEIAMgAygCFCACajYCFAsLC20BA38gACgCACwAABCYBEUEQEEADwsDQCAAKAIAIQNBfyEBIAJBzJmz5gBNBEBBfyADLAAAQTBrIgEgAkEKbCICaiABQf////8HIAJrShshAQsgACADQQFqNgIAIAEhAiADLAABEJgEDQALIAEL4QYDA34BfwF8IwBBEGsiBiQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAECBQMEBgcICQoLDA0ODxAREgsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADBELIAIgAigCACIBQQRqNgIAIAAgATQCADcDAAwQCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAMDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADA4LIAIgAigCACIBQQRqNgIAIAAgATUCADcDAAwNCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwAMDAsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADAsLIAIgAigCACIBQQRqNgIAIAAgATMBADcDAAwKCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAMCQsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADAgLIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAwHCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAMBgsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMADAULIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAwECyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAMAwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADAILIAIgAigCAEEHakF4cSIBQQhqNgIAIAErAwAhByMAQRBrIgEkAAJ+IAe9IgVC////////////AIMiA0KAgICAgICACH1C/////////+//AFgEQCADQjyGIQQgA0IEiEKAgICAgICAgDx8DAELIANCgICAgICAgPj/AFoEQCAFQjyGIQQgBUIEiEKAgICAgIDA//8AhAwBC0IAIANQDQAaIAEgA0IAIAWnZ0EgaiADQiCIp2cgA0KAgICAEFQbIgJBMWoQzwQgASkDACEEIAEpAwhCgICAgICAwACFQYz4ACACa61CMIaECyEDIAYgBDcDACAGIAMgBUKAgICAgICAgIB/g4Q3AwggAUEQaiQAIAAgBikDCDcDCCAAIAYpAwA3AwAMAQsgACACQaACEQQACyAGQRBqJAALgwECA38BfgJAIABCgICAgBBUBEAgACEFDAELA0AgAUEBayIBIAAgAEIKgCIFQgp+fadBMHI6AAAgAEL/////nwFWIQIgBSEAIAINAAsLIAWnIgIEQANAIAFBAWsiASACIAJBCm4iA0EKbGtBMHI6AAAgAkEJSyEEIAMhAiAEDQALCyABC3EBAX8jAEGAAmsiBSQAAkAgAiADTA0AIARBgMAEcQ0AIAUgAUH/AXEgAiADayICQYACIAJBgAJJIgMbEIgEIANFBEADQCAAIAVBgAIQ8AMgAkGAAmsiAkH/AUsNAAsLIAAgBSACEPADCyAFQYACaiQAC+sDAQV/IwBBoAJrIgMkACADIAI2ApwCIANB8AFqQQBBKPwLACADIAMoApwCNgKYAgJAQQAgASADQZgCaiADQdAAaiADQfABahDvA0EASA0AIAAoAkxBAE4EQAJAIwIoAhAiBiAAIgIoAkxB/////3txRg0AQQEhBCACQcwAaiIFQQAgBv5IAgBFDQAgBUEAIAZBgICAgARyIgb+SAIAIgJFDQADQCACQYCAgIAEciEEAkAgAkGAgICABHFFBEAgBSACIAT+SAIAIAJHDQELIAVBACAEEPoDCyAFQQAgBv5IAgAiAg0AC0EBIQQLIAQhBQsgACgCACEEIAAoAkhBAEwEQCAAIARBX3E2AgALAn8CQAJAIAAoAjBFBEAgAEHQADYCMCAAQQA2AhwgAEIANwMQIAAoAiwhByAAIAM2AiwMAQsgACgCEA0BC0F/IAAQ+QMNARoLIAAgASADQZgCaiADQdAAaiADQfABahDvAwshAiAEQSBxIQEgBwR/IABBAEEAIAAoAiQRDQAaIABBADYCMCAAIAc2AiwgAEEANgIcIAAoAhQaIABCADcDEEEABSACCxogACAAKAIAIAFyNgIAIAVFDQAgAEEA/kECTEGAgICABHEEQCAAQcwAakEBEIcECwsgA0GgAmokAAv0HwISfwJ+IwBBgDxrIggkACAIQQA2AqwCAkAgAkI/iKcEQCACQoCAgICAgICAgH+FIQJBASESQZsIIRQMAQsgBUGAEHEEQEEBIRJBngghFAwBC0GhCEGcCCAFQQFxIhIbIRQgEkUhGAsCQAJ/IAJC////////P4MhGgJ/IAJCMIinQf//AXEiB0H//wFHBEBBBCAHDQEaQQJBAyABIBqEUBsMAgsgASAahFALC0EBTARAIABBICADIBJBA2oiByAFQf//e3EQ9AMgACAUIBIQ8AMgAEHECEGEGiAGQSBxIgkbQcgIQYgaIAkbIAFCAFIgAkL///////////8AgyIZQoCAgICAgMD//wBWIBlCgICAgICAwP//AFEbIAFCAFIgAkL///////////8AgyIZQoCAgICAgMD//wBWIBlCgICAgICAwP//AFEbchtBAxDwAyAAQSAgAyAHIAVBgMAAcxD0AyADIAcgAyAHShshCwwBCyAIQYACaiETIAhB4AFqIAEgAiAIQawCahCWBCAIQdABaiAIKQPgASICIAgpA+gBIgEgAiABEM4EAkACfwJAIAgpA9ABIgIgCCkD2AEiAUIAQgAQ0AQEQCAIIAgoAqwCIgdBAWs2AqwCIAZBIHIiFkHhAEcNAQwDCyAGQSByIhZB4QBGDQIgCCgC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mNqQorW/yAx9IgRCAFMNACAEIgNCAFINACAARAAAAAAAAAAAog8LIANCAYYhAyABQQFrIgEgAkoNAAsgAiEBCwJAIANCmNqQorW/yAx9IgRCAFMNACAEIgNCAFINACAARAAAAAAAAAAAog8LAkAgA0L/////////B1YEQCADIQQMAQsDQCABQQFrIQEgA0KAgICAgICABFQhAiADQgGGIgQhAyACDQALCyABQQBKBH4gBEKAgICAgICACH0gAa1CNIaEBSAEQQEgAWutiAsgBUKAgICAgICAgIB/g4S/C8IBAQN/IwBBIGsiBCQAAkAgAkIwiKciBkH//wFxIgVB//8BRg0AIAVFBEAgAyABIAJCAEIAENAEBH8gBCABIAJCgICAgICAwLvAABDSBCAEQRBqIAQpAwAgBCkDCCADEJYEIAQpAxghAiAEKQMQIQEgAygCAEH4AGsFQQALNgIADAELIAMgBUH+/wBrNgIAIAJC////////P4MgBkGAgAJxQf7/AHKtQjCGhCECCyAAIAE3AwAgACACNwMIIARBIGokAAv9AwECfyACQYAETwRAIAAgASACEAQaDwsgACACaiEDAkAgACABc0EDcUUEQAJAIABBA3FFBEAgACECDAELIAJFBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICQQNxRQ0BIAIgA0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIASw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgAE0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsLCgAgAEEwa0EKSQuhAQEDfyMBLQAARQRAIwFBAToAAEGcvQEQtQQCQCMCEJoEIgBFBEBBnL0BELcEDAELIAAoAggiASAAKAIMRwRAA0BBnL0BELcEIAAoAgQgAUEDdGoiAigCBCACKAIAEQAAQZy9ARC1BCAAIAFBAWpBgAFvIgE2AgggASAAKAIMRw0ACwtBnL0BELcEIABBCGpB/////wcQhwQLIwFBADoAAAsLLAEBf0G4vQEoAgAiAQRAA0AgACABKAIARgRAIAEPCyABKAIQIgENAAsLQQALFQAgAARAIAAoArgBEMkECyAAEMkECwYAQay8AQvgAgEGf0GsvAEgACAAQQFGGyIEQQJHIAQjAkdxRQRAIAEQngRBAQ8LQZy9ARC1BCAEIgAQmgQiA0UEQEEUEMgEIgNCADcCDCADQgA3AgQgAyAANgIAQbi9ASgCACIABH8DQCAAIgIoAhAiAA0ACyACQRBqBUG4vQELIAM2AgALIAMiACgCBCICRQRAIABBgAgQyAQiAjYCBAsCQAJAIAAoAgwiA0EBakGAAW8iBSAAKAIIIgZGBEAgAEEIaiEHIARBrLwBRyECA0BBnL0BELcEIAINAiAHIAVEAAAAAAAA8H8QhQQaQZy9ARC1BCAAKAIMIgNBAWpBgAFvIgUgACgCCCIGRg0ACyAAKAIEIQILIAIgA0EDdGoiAiABNgIEIAJBoQI2AgACQCADIAZHDQAgBEGsvAEQBQ0AIAEQmwRBnL0BELcEDAILIAAgBTYCDEGcvQEQtwQMAQsgARCbBAtBAAufDgEBfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAiAUH////vAEwEQCABQaeAgDBMBEAgAUH///8fTARAAkAgAUGAgIAQaw4DBRwGAAsgAUGAgICKeEYNAyABDRsgACgCBBEPAAwbCyABQf///y9MBEAgAUGIgIAgaw4DBxsIBgsgAUGAgIAwRg0IIAFBoICAMEcNGiAAKAIQIAAoAhggACoCICAAKAIEESMADBoLIAFBp4GAwABMBEACQCABQaiAgDBrDgMKGwsACyABQYCAgMAARg0LIAFBoICAwABHDRogACgCECAAKAIYIAAqAiAgACgCKCAAKAIEERwADBoLIAFBp4WA0ABMBEAgAUGogYDAAGsOAwwaDQ4LIAFBqIWA0ABGDQ4gAUGAgIDgAEcNGSAAKAIQIAAoAhggACgCICAAKAIoIAAoAjAgACgCOCAAKAIEEQoADBkLIAFB////rwJMBEAgAUH///+vAUwEQCABQf///48BTARAIAFBgICA8ABGDREgAUGAgICAAUcNGyAAKAIQIAAoAhggACgCICAAKAIoIAAoAjAgACgCOCAAKAJAIAAoAkggACgCBBEHAAwbCyABQYCAgJABRg0RIAFBgICAoAFHDRogACgCECAAKAIYIAAoAiAgACgCKCAAKAIwIAAoAjggACgCQCAAKAJIIAAoAlAgACgCWCAAKAIEEQYADBoLIAFB////jwJMBEAgAUGAgICwAUYNEiABQYCAgIACRw0aIAAgACgCBBERADYCsAEMGgsgAUGAgICQAkYNEiABQYCAgKACRg0TIAFBgICAqQJHDRkgACAAKAIQIAAoAhgQBjYCsAEMGQsgAUH////PAkwEQCABQf///78CTARAIAFBgICAsAJGDRUgAUGAgMC5AkcNGiAAIAAoAhAgACgCGCAAKAIgEAc2ArABDBoLIAFBgICAwAJGDRUgAUGAgIDIAkcNGSAAIAAoAhAgACgCGCAAKAIgIAAoAigQCDYCsAEMGQsgAUH////vAkwEQCABQYCAgNACRg0WIAFBgICA4AJHDRkgACAAKAIQIAAoAhggACgCICAAKAIoIAAoAjAgACgCOCAAKAIEEUgANgKwAQwZCyABQYCAgPACRg0WIAFBgICAgANGDRcgAUGAgICQA0cNGCAAIAAoAhAgACgCGCAAKAIgIAAoAiggACgCMCAAKAI4IAAoAkAgACgCSCAAKAJQIAAoAgQRFQA2ArABDBgLIAAgACgCBCAAKAIQIABBGGoQCTkDsAEMFwsgACgCECAAKAIEEQAADBYLIAAqAhAgACgCBBFJAAwVCyABQYCAgCBHDRQgACgCECAAKAIYIAAoAgQRBAAMFAsgACgCECAAKgIYIAAoAgQRGgAMEwsgACoCECAAKgIYIAAoAgQRSgAMEgsgACgCECAAKAIYIAAoAiAgACgCBBEBAAwRCyAAKAIQIAAqAhggACoCICAAKAIEERIADBALIAAqAhAgACoCGCAAKgIgIAAo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6MUBKQMAQgEgAa2GhDcDACAAIAJBCGoiAjYCACACQXxxIABqQQRrIAI2AgAMAQsgACABakEEayABNgIACyAAQQRqBSADCwsJACAAIAEQxQQLCQBBCCAAEMUEC4MDAQR/IAAEQCAAQQRrIQNBAEEB/kMA3L0BBEADQEHcvQEtAAANAEEAQQH+QwDcvQENAAsLIAMoAgAiBCEBIAMhAiAAQQhrKAIAIgAgAEF+cSIARwRAIAMgAGsiAigCBCIBIAIoAgg2AgggAigCCCABNgIEIAAgBGohAQsgAyAEaiIAKAIAIgMgACADakEEaygCAEcEQCAAKAIEIgQgACgCCDYCCCAAKAIIIAQ2AgQgASADaiEBCyACIAE2AgAgAUF8cSACakEEayABQQFyNgIAIAICfyACKAIAQQhrIgFB/wBNBEAgAUEDdkEBawwBCyABZyEAIAFBHSAAa3ZBBHMgAEECdGtB7gBqIAFB/x9NDQAaIAFBHiAAa3ZBAnMgAEEBdGtBxwBqIgFBPyABQT9JGwsiAUEEdCIAQeC9AWo2AgQgAiAAQei9AWoiACgCADYCCCAAIAI2AgAgAigCCCACNgIEQejFAUHoxQEpAwBCASABrYaENwMAQdy9AUEA/hkAAAsLBwAgABDJBAsoAQF/QRYhAyABQQNxBH8gAwUgACABIAIQxQQiATYCAEEAQQwgARsLCwQAQQALBABCAAvNCQIDfgR/IwBB8ABrIggkACAEQv///////////wCDIQYCQAJAIAFQIgkgAkL///////////8AgyIFQoCAgICAgMD//wB9QoCAgICAgMCAgH9UIAVQG0UEQCADQgBSIAZCgICAgICAwP//AH0iB0KAgICAgIDAgIB/ViAHQoCAgICAgMCAgH9RGw0BCyAJIAVCgICAgICAwP//AFQgBUKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEEIAEhAwwCCyADUCAGQoCAgICAgMD//wBUIAZCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhBAwCCyABIAVCgICAgICAwP//AIWEUARAQoCAgICAgOD//wAgAiABIAOFIAIgBIVCgICAgICAgICAf4WEUCIJGyEEQgAgASAJGyEDDAILIAMgBkKAgICAgIDA//8AhYRQDQEgASAFhFAEQCADIAaEQgBSDQIgASADgyEDIAIgBIMhBAwCCyADIAaEUEUNACABIQMgAiEEDAELIAMgASABIANUIAUgBlQgBSAGURsiChshBSAEIAIgChsiBkL///////8/gyEHIAIgBCAKGyICQjCIp0H//wFxIQsgBkIwiKdB//8BcSIJRQRAIAhB4ABqIAUgByAFIAcgB1AiCRt5IAlBBnStfKciCUEPaxDPBEEQIAlrIQkgCCkDaCEHIAgpA2AhBQsgASADIAobIQMgAkL///////8/gyEEIAtFBEAgCEHQAGogAyAEIAMgBCAEUCIKG3kgCkEGdK18pyIKQQ9rEM8EQRAgCmshCyAIKQNYIQQgCCkDUCEDCyAEQgOGIANCPYiEQoCAgICAgIAEhCEEIAdCA4YgBUI9iIQhASACIAaFIQICfiADQgOGIgMgCSALayIKRQ0AGiAKQf8ASwRAQgAhBEIBDAELIAhBQGsgAyAEQYABIAprEM8EIAhBMGogAyAEIAoQ0QQgCCkDOCEEIAgpAzAgCCkDQCAIKQNIhEIAUq2ECyEDIAFCgICAgICAgASEIQcgBUIDhiEBAkAgAkIAUwRAIAEgA30iBSAHIAR9IAEgA1StfSIEhFAEQEIAIQNCACEEDAMLIARC/////////wNWDQEgCEEgaiAFIAQgBSAEIARQIgobeSAKQQZ0rXynQQxrIgoQzwQgCSAKayEJIAgpAyghBCAIKQMgIQUMAQsgASADfCIFIANUrSAEIAd8fCIEQoCAgICAgIAIg1ANACAFQgGDIARCP4YgBUIBiISEIQUgCUEBaiEJIARCAYghBAsgBkKAgICAgICAgIB/gyEBIAlB//8BTgRAIAFCgICAgICAwP//AIQhBEIAIQMMAQtBACEKAkAgCUEASgRAIAkhCgwBCyAIQRBqIAUgBCAJQf8AahDPBCAIIAUgBEEBIAlrENEEIAgpAwAgCCkDECAIKQMYhEIAUq2EIQUgCCkDCCEECyAEQj2GIAVCA4iEIgMgAyAFp0EHcSIJQQRLrXwiBVatIARCA4hC////////P4MgCq1CMIaEIAGEfCEEAkACQCAJQQRHBEAgBSEDDAELIAQgBUIBgyIBIAV8IgMgAVStfCEEDAELIAlFDQELCyAAIAM3AwAgACAENwMIIAhB8ABqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgL2wECAX8CfkEBIQQCQCAAQgBSIAFC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBRGw0AIAJCAFIgA0L///////////8AgyIGQoCAgICAgMD//wBWIAZCgICAgICAwP//AFEbDQAgACAChCAFIAaEhFAEQEEADwsgASADg0IAWQRAQX8hBCAAIAJUIAEgA1MgASADURsNASAAIAKFIAEgA4WEQgBSDwtBfyEEIAAgAlYgASADVSABIANRGw0AIAAgAoUgASADhYRCAFIhBAsgBAtQAQF+AkAgA0HAAHEEQCACIANBQGqtiCEBQgAhAgwBCyADRQ0AIAJBwAAgA2uthiABIAOtIgSIhCEBIAIgBIghAgsgACABNwMAIAAgAjcDCAu5CgIFfxB+IwBB4ABrIgQkACADQv///////z+DIQ0gAiADhUKAgICAgICAgIB/gyEJIAJC////////P4MiDEIgiCEQAkACQCADQjCIp0H//wFxIgVB//8Ba0GBgH5LIAJCMIinQf//AXEiB0H//wFrQYKAfk9xDQAgAVAgAkL///////////8AgyIKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCQwCCyADQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AUXJFBEAgA0KAgICAgIAghCEJQgAhAQwCCyABIApCgICAgICAwP//AIWEUARAIAJQBEBCgICAgICA4P//ACEJQgAhAQwDCyAJQoCAgICAgMD//wCEIQlCACEBDAILIAJCgICAgICAwP//AIVQBEAgASAKhCECQgAhASACUARAQoCAgICAgOD//wAhCQwDCyAJQoCAgICAgMD//wCEIQkMAgsgASAKhFAEQEIAIQEMAgsgAlAEQEIAIQEMAgsgCkL///////8/WARAIARB0ABqIAEgDCABIAwgDFAiBht5IAZBBnStfKciBkEPaxDPBEEQIAZrIQYgBCkDWCIMQiCIIRAgBCkDUCEBCyACQv///////z9WDQAgBEFAa0IAIA1CACANIA1QIggbeSAIQQZ0rXynIghBD2sQzwQgBiAIa0EQ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ACABIAKtIAOtQiCGhCAErSAFrUIghoQgBiAHIAggCSAAER0ACyIBAX4gASACrSADrUIghoQgBCAAER8AIgVCIIinEBMgBacLC5igAQ4BoicALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABfX25leHRfcHJpbWUgb3ZlcmZsb3cAbmFuAGluZgBBcmdtYXggZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAE1heCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3BhcnNlRmlsbEVtcHR5Um93cyBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQARXhwIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTdGVwIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTcGFyc2VTZWdtZW50UmVkdWN0aW9uIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABNaW4gZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFN1bSBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAUHJvZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQATGVha3lSZWx1IGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABBYnMgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAE5lZyBmb3IgdGVuc29yIGlkcyAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3F1YXJlIGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABSb3VuZCBmb3IgdGVuc29yIGlkcyAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAUmVsdTYgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFBvdyBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAERpdiBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAE11bCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFNxdWFyZWREaWZmZXJlbmNlIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAQWRkIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3ViIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU2NhdHRlciBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABHYXRoZXIgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAVHJhbnNwb3NlIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFRpbGUgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAR2F0aGVyTmQgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAQWRkTiBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQARmxvb3JEaXYgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQATWF4aW11bSBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABNaW5pbXVtIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGR0eXBlICVkAEN1bXN1bSBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQAQ3VtcHJvZCBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQAVG9wSyBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQATm90RXF1YWwgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC5VbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExlc3NFcXVhbCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLlVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQAR3JlYXRlckVxdWFsIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMb2dpY2FsTm90IGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMZXNzIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQATG9naWNhbFhvciBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAEdyZWF0ZXIgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMb2dpY2FsT3IgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABFcXVhbCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExvZ2ljYWxBbmQgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABOQU4ASU5GAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9jb25zdGFudF9wYWRfbmRfeDMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9jb25zdGFudF9wYWRfbmRfeDMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwXypfbmRfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV8qX25kX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9yZXNpemVfYmlsaW5lYXIyZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfcmVzaXplX2JpbGluZWFyMmRfbmh3Y19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfY29udm9sdXRpb24yZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfY29udm9sdXRpb24yZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9tYXhfcG9vbGluZzJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2F2ZXJhZ2VfcG9vbGluZzJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3NvZnRtYXhfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9zb2Z0bWF4X25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9wcmVsdV9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX3ByZWx1X25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9lbHVfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9lbHVfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2NsYW1wX25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfY2xhbXBfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3NpZ21vaWRfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9zaWdtb2lkX25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9mdWxs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AP//////////AAAAAAAAAAAAAAAAAAAAABQBeP//AQAK////////////Af8B/wAAAAAAAAH/Af8B/wAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAAf8B/wEAAAABAAAAAf//////AAAAAAH///8AAAAA/////////////ygACv//////AQAK/////wD//////////wGqAwH/Af///wEA//////////////////8K//////8AAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAAAAUAAAAHAAAACwAAAA0AAAARAAAAEwAAABcAAAAdAAAAHwAAACUAAAApAAAAKwAAAC8AAAA1AAAAOwAAAD0AAABDAAAARwAAAEkAAABPAAAAUwAAAFkAAABhAAAAZQAAAGcAAABrAAAAbQAAAHEAAAB/AAAAgwAAAIkAAACLAAAAlQAAAJcAAACdAAAAowAAAKcAAACtAAAAswAAALUAAAC/AAAAwQAAAMUAAADHAAAA0wAAAAEAAAALAAAADQAAABEAAAATAAAAFwAAAB0AAAAfAAAAJQAAACkAAAArAAAALwAAADUAAAA7AAAAPQAAAEMAAABHAAAASQAAAE8AAABTAAAAWQAAAGEAAABlAAAAZwAAAGsAAABtAAAAcQAAAHkAAAB/AAAAgwAAAIkAAACLAAAAjwAAAJUAAACXAAAAnQAAAKMAAACnAAAAqQAAAK0AAACzAAAAtQAAALsAAAC/AAAAwQAAAMUAAADHAAAA0QAAAAFkAQAAAAgAAAABAAAAAAAAAAUAAAAAAAAAAAAAACMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQBAAAlAQAA1F4AAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAD//////////wFZsFQAAAAAAAAFAAAAAAAAAAAAAAAmAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAQAAJwEAAPhiAAAABAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA/////woBCEhVAAAAZ1AA"); + } + }); + + // src/tfjs-backend-wasm-simd.wasm + var tfjs_backend_wasm_simd_exports = {}; + __export(tfjs_backend_wasm_simd_exports, { + default: () => tfjs_backend_wasm_simd_default + }); + var tfjs_backend_wasm_simd_default; + var init_tfjs_backend_wasm_simd = __esm({ + "src/tfjs-backend-wasm-simd.wasm"() { + tfjs_backend_wasm_simd_default = __toBinary("AGFzbQEAAAABvwVKYAN/f38AYAV/f39/fwBgAX8AYAR/f39/AGACf38AYAJ/fwF/YAp/f39/f39/f39/AGAIf39/f39/f38AYAZ/f39/f38AYAx/f39/f39/f39/f38AYAF/AX9gBX9/f39/AX9gCX9/f39/f39/fwBgA39/fwF/YAd/f39/f39/AGALf39/f39/f39/f38AYAAAYAN/fX0AYAJ9fQF/YAJ9fQF9YAl/f39/f39/f38Bf2AEf39/fwF/YAR9fX9/AX9gAX0BfWAAAX9gBH99fX0AYAF8AXxgAn99AGAHf35+f39/fwF/YAR/fn5/AGATf39/f39/f39/f39/f39/f39/fwBgF39/f39/f39/f39/f39/f39/f39/f31/AGAEf399fwBgDX9/f39/f39/f39/fX8AYAV/fX9/fwBgAXwBfWABfwF8YAF/AX1gA39+fwF+YAV/fn5+fgBgDn9/f39/f39/f39/f39/AGAEf319fwBgG39/f39/f39/f39/f39/f39/f39/f39/f39/fwBgCn9/f39/f39/fX8AYAd/f39/f31/AGARf39/f39/f39/f39/f39/f38AYAV/f399fQF/YAZ/f399fX8Bf2AGf39/fX19AX9gCH9/f39/f31/AGALf39/f399fX1/f38AYAx/f39/f39/f39/f38Bf2AEf31/fwBgD39/f39/f39/f39/f399fwBgA31/fwF9YBh/f39/f39/f39/f39/f39/f39/f39/fX8AYAd/f399fX1/AX9gA39/fQBgBn19f39/fwF/YAd/f39/f39/AX9gA399fwBgAn5/AX9gAnx8AXxgAnx/AX9gA3x8fwF8YAJ9fwF/YAJ/fAF8YAJ/fQF9YAF9AX9gAX4Bf2ACfH8BfGAEfn5+fgF/YAR/fn5+AGAKf39/f39/f39/fwF/AtsBCANlbnYFYWJvcnQAEANlbnYVZW1zY3JpcHRlbl9tZW1jcHlfYmlnAA0Wd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF9jbG9zZQAKFndhc2lfc25hcHNob3RfcHJldmlldzEIZmRfd3JpdGUAFQNlbnYXZW1zY3JpcHRlbl9nZXRfaGVhcF9tYXgAGANlbnYWZW1zY3JpcHRlbl9yZXNpemVfaGVhcAAKA2VudgtzZXRUZW1wUmV0MAACFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfc2VlawALA6IEoAQQAgIKBBACGAACBAQQBAAABAcFBQMAAAECBCgBBQQMAAIEKR4qAAArCAgMHgAHEgUFAAgABxMFLB8fBwcHEgUFBxIFBSAHEgUFBxIFBQAHBQAHBQcFAwItBxMFAAMHEwUHDw8PBwUALi8wBxIFAQIEMQcTBQUAAwcFBQAAAgQGBggyAAAMAQQAAgQDMw4MAAAHBQU0BgcFAwAADgcDBAADABULBRULBTU2DiECAgICNwQKBQABAgQEOAIEAgQ5AgcHBwcHDAMXAgMCBAICIQACBAIAIAIDAgIAAxUEAAAQEAoFBQUFDQUFGBY6FhYWBRQUFBQUBQoVFQIUFgsLCwsLCws7CwsLCwsLBQ0EDQICAAYIAQ4ICAEAAAAAAAAEBAMACAgAAAQABA8MCQYMDAgbGRECAgICAhkCGwICIiI8AwMMDwwPDwYGBgYGBgYGBgYGBgYGBgYDBwcODgYGBgYGBgYGBgYGBgYOCQkJCQkJCQkJCQkJCQwMCQkPDw4OAwMIAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwMDAwMDAwcHAwMDAwMDAwMDAwMDAwgAAAADAQwKBAQEBAQEBAQEBAQEAgoKBwsACgA9AQAcBBgKPgs/QCMjQQ0ADUIkJBpDFyUlF0QXGh0KEBoaF0UTCgoXRgoNJgoFCgUNCgICDScdRx1IJwoNChgCCkkLBAcBcAGkAqQCBQcBAYACgIACBgkBfwFBoMTBAgsHwQprBm1lbW9yeQIAEV9fd2FzbV9jYWxsX2N0b3JzAAgEaW5pdAANF2luaXRfd2l0aF90aHJlYWRzX2NvdW50AA4RZ2V0X3RocmVhZHNfY291bnQADw9yZWdpc3Rlcl90ZW5zb3IAEAxkaXNwb3NlX2RhdGEAEQdkaXNwb3NlABQZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAA0FicwAXA0FkZAAZBEFkZE4AHANBbGwAHQNBbnkAHgZBcmdNYXgAHwdBdmdQb29sACILQmF0Y2hNYXRNdWwAJgRDZWlsACcLQ2xpcEJ5VmFsdWUAKgZDb252MkQAKxNDb252MkRCYWNrcHJvcElucHV0ACwDQ29zAC0EQ29zaAAuDUNyb3BBbmRSZXNpemUALwdDdW1wcm9kADAGQ3Vtc3VtADEMRGVwdGhUb1NwYWNlADIVRGVwdGh3aXNlQ29udjJkTmF0aXZlADMDRWx1ADQFRXF1YWwANQNFeHAAOQ1GbGlwTGVmdFJpZ2h0ADoFRmxvb3IAOwhGbG9vckRpdgA8DkZ1c2VkQmF0Y2hOb3JtAD8LRnVzZWRDb252MkQAQBRGdXNlZERlcHRod2lzZUNvbnYyRABBBkdhdGhlcgBCCEdhdGhlck5kAEMHR3JlYXRlcgBEDEdyZWF0ZXJFcXVhbABICUxlYWt5UmVsdQBMBExlc3MATQlMZXNzRXF1YWwAUQNMb2cAVQpMb2dpY2FsQW5kAFYKTG9naWNhbE5vdABYCUxvZ2ljYWxPcgBZCkxvZ2ljYWxYb3IAWwNNYXgAXQdNYXhQb29sAF8HTWF4aW11bQBgBE1lYW4AYwNNaW4AZAdNaW5pbXVtAGUJTWlycm9yUGFkAGgITXVsdGlwbHkAbANOZWcAbhNOb25NYXhTdXBwcmVzc2lvblYzAG8TTm9uTWF4U3VwcHJlc3Npb25WNABwE05vbk1heFN1cHByZXNzaW9uVjUAcQhOb3RFcXVhbAByBk9uZUhvdAB1BVBhZFYyAHgDUG93AHkFUHJlbHUAfQRQcm9kAH4HUmVhbERpdgB/BFJlbHUAggEFUmVsdTYAgwEOUmVzaXplQmlsaW5lYXIAhgEVUmVzaXplTmVhcmVzdE5laWdoYm9yAIcBB1JldmVyc2UAiAEQUm90YXRlV2l0aE9mZnNldACJAQVSb3VuZACKAQVSc3FydACLAQlTY2F0dGVyTmQAjAEIU2VsZWN0VjIAjQEHU2lnbW9pZACOAQNTaW4AjwEHU29mdG1heACSARNTcGFyc2VGaWxsRW1wdHlSb3dzAJMBDVNwYXJzZVJlc2hhcGUAlAEWU3BhcnNlU2VnbWVudFJlZHVjdGlvbgCVAQRTcXJ0AJYBBlNxdWFyZQCXARFTcXVhcmVkRGlmZmVyZW5jZQCYAQRTdGVwAJsBDFN0cmlkZWRTbGljZQCcAQNTdWIAnQEDU3VtAJ8BA1RhbgCgAQRUYW5oAKEBBFRpbGUAogEEVG9wSwCjAQlUcmFuc2Zvcm0ArwEJVHJhbnNwb3NlALEBDF9GdXNlZE1hdE11bACyAQZt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AwwKCyAHKAIAIQ8gCCgCACEQIAogC2siBEUEQCAJQQA2AmggCUIANwNgQQAhBQwJCyAEQQBIDQxBACEKIAQQogQiBUEAIARBAnUiDkECdCIIEPUDIgAgCGohESAOQQEgDkEBSxsiB0EESQ0DIAdBfHEiCkEEayIIQQJ2QQFqIgNBAXEhEgJAIAhFBEBBACEDDAELIANB/v///wdxIQFBACEDQQAhDQNAIAAgA0ECdCIIaiACIAhq/QACACAIIAxq/QACAP2uASAIIAtq/QACAP2uAf0LAgAgACAIQRByIghqIAIgCGr9AAIAIAggDGr9AAIA/a4BIAggC2r9AAIA/a4B/QsCACADQQhqIQMgDUECaiINIAFHDQALCyASBEAgACADQQJ0IghqIAIgCGr9AAIAIAggDGr9AAIA/a4BIAggC2r9AAIA/a4B/QsCAAsgByAKRw0DDAcLIAcoAgAhDyAIKAIAIRAgCiALayIERQRAIAlBADYCaCAJQgA3A2BBACEFDAYLIARBAEgNC0EAIQogBBCiBCIFQQAgBEECdSIOQQJ0IggQ9QMiACAIaiERIA5BASAOQQFLGyIHQQRJDQMgB0F8cSIKQQRrIghBAnZBAWoiA0EBcSESAkAgCEUEQEEAIQMMAQsgA0H+////B3EhAUEAIQNBACENA0AgACADQQJ0IghqIAIgCGr9AAIAIAggDGr9AAIA/a4BIAggC2r9AAIA/a4B/QsCACAAIAhBEHIiCGogAiAIav0AAgAgCCAMav0AAgD9rgEgCCALav0AAgD9rgH9CwIAIANBCGohAyANQQJqIg0gAUcNAAsLIBIEQCAAIANBAnQiCGogAiAIav0AAgAgCCAMav0AAgD9rgEgCCALav0AAgD9rgH9CwIACyAHIApHDQMMBAsgCSADNgIEIAkgADYCAEHFLCAJEBgMCQsDQCAAIApBAnQiCGogCCALaigCACACIAhqKAIAIAggDGooAgBqajYCACAKQQFqIgogB0cNAAsMBgsDQCAAIApBAnQiCGogCCALaigCACACIAhqKAIAIAggDGooAgBqajYCACAKQQFqIgogB0cNAAsMAwsDQCAAIApBAnQiCGogCCALaigCACACIAhqKAIAIAggDGooAgBqajYCACAKQQFqIgogB0cNAAsLIAkgBBCiBCIINgJgIAkgCCAOQQJ0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IAMLoQQCAX4FfyACKAIEIgcgASgCBCIISSACKAIAIgUgASgCACIGSiAFIAZGGyEJAkAgCCAAKAIESSAGIAAoAgAiCEogBiAIRhtFBEBBACEGIAlFDQEgASkCACEEIAEgAikCADcCACACIAQ3AgBBASEGIAEoAgQgACgCBEkgASgCACIFIAAoAgAiB0ogBSAHRhtBAUcEQCAEQiCIpyEHIASnIQUMAgsgACkCACEEIAAgASkCADcCACABIAQ3AgAgAigCBCEHIAIoAgAhBUECIQYMAQsgACkCACEEIAkEQCAAIAIpAgA3AgAgAiAENwIAIARCIIinIQcgBKchBUEBIQYMAQsgACABKQIANwIAIAEgBDcCAEEBIQYgAigCBCIHIARCIIinIglJIAIoAgAiBSAEpyIISiAFIAhGG0EBRw0AIAEgAikCADcCACACIAQ3AgBBAiEGIAkhByAIIQULIAMoAgQgB0kgAygCACIHIAVKIAUgB0YbQQFGBH8gAikCACEEIAIgAykCADcCACADIAQ3AgAgAigCBCABKAIESSACKAIAIgUgASgCACIDSiADIAVGG0EBRwRAIAZBAWoPCyABKQIAIQQgASACKQIANwIAIAIgBDcCACABKAIEIAAoAgRJIAEoAgAiAiAAKAIAIgVKIAIgBUYbQQFHBEAgBkECag8LIAApAgAhBCAAIAEpAgA3AgAgASAENwIAIAZBA2oFIAYLC6UCAgF+A38gACABIAIgAxCsASEGIAQoAgQgAygCBEkgBCgCACIHIAMoAgAiCEogByAIRhtBAUYEfyADKQIAIQUgAyAEKQIANwIAIAQgBTcCACADKAIEIAIoAgRJIAMoAgAiBCACKAIAIgdKIAQgB0YbQQFHBEAgBkEBag8LIAIpAgAhBSACIAMpAgA3AgAgAyAFNwIAIAIoAgQgASgCBEkgAigCACIDIAEoAgAiBEogAyAERhtBAUcEQCAGQQJqDwsgASkCACEFIAEgAikCADcCACACIAU3AgAgASgCBCAAKAIESSABKAIAIgMgACgCACICSiACIANGG0EBRwRAIAZBA2oPCyAAKQIAIQUgACABKQIANwIAIAEgBTcCACAGQQRqBSAGCwuTBwIIfwJ+QQEhBgJAAkACQAJAAkACQCABIABrQQN1DgYFBQABAgMECyABQQhrIgMoAgQgACgCBEkgAygCACICIAAoAgAiBEogAiAERhtBAUcNBCAAKQIAIQogACADKQIANwIAIAMgCjcCAEEBDwsgACgCDCIEIAFBCGsiAigCBEsgAigCACIFIAAoAggiA0ogAyAFRhshBSAEIAAoAgRJIAMgACgCACIESiADIARGG0UEQCAFRQ0EIAApAgghCiAAIAIpAgA3AgggAiAKNwIAIAAoAgwgACgCBEkgACgCCCIDIAAoAgAiAkogAiADRhtBAUcNBCAAKQIIIQogACAAKQIANwIIIAAgCjcCAEEBDwsgACkCACEKIAUEQCAAIAIpAgA3AgAgAiAKNwIAQQEPCyAAKQIIIQsgACAKNwIIIAAgCzcCACACKAIEIApCIIinSSACKAIAIgMgCqciBEogAyAERhtBAUcNAyAAIAIpAgA3AgggAiAKNwIAQQEPCyAAIABBCGogAEEQaiABQQhrEKwBGkEBDwsgACAAQQhqIABBEGogAEEYaiABQQhrEK0BGkEBDwsgACgCFCIIIAAoAgwiBEkgACgCECIDIAAoAggiAkogAiADRhshBQJAIAQgACgCBCIHSSACIAAoAgAiBEogAiAERhtFBEAgBUUNASAAKQIQIQogACAAKQIIIgs3AhAgACAKNwIIIAunIQMgByAKQiCIp0sgBCAKpyICSCACIARGG0EBRw0BIAAgACkCADcCCCAAIAo3AgAMAQsgACkCACEKIAUEQCAAKQIQIQsgACAKNwIQIAAgCzcCACAKpyEDDAELIAApAgghCyAAIAo3AgggACALNwIAIAggCkIgiKdJIAMgCqciAkogAiADRhtBAUcNACAAKQIQIQsgACAKNwIQIAAgCzcCCCACIQMLIABBGGoiAiABRg0AIABBEGohBgNAAkAgAiIHKAIEIAYoAgRJIAIoAgAiAiADSiACIANGG0EBRgRAIAcpAgAiCkIgiKchCCAKpyEEIAchAgNAAkAgAiAGIgMpAgA3AgAgACADRgRAIAAhAwwBCyADIgJBCGsiBigCBCAISyAGKAIAIgUgBEggBCAFRhsNAQsLIAMgCjcCACAJQQFqIglBCEYNAQsgASAHQQhqIgJGBEBBAQ8FIAcoAgAhAyAHIQYMAgsACwsgB0EIaiABRiEGCyAGC7MIAgt9FH8gABALIQAgARALIQEgDhALKAIAISQgASgCACElIAAoAgAhHwJAIAoEQCAKQQBIDQEgCkECdCIKEKIEIiAgCSAKEPMDGgsgAwRAICAoAgghHCAgKAIEIR0gICgCACEmIAtBAWshJwNAIAQEQCAjICZsIR4gJSAjQQN0QQAgAhtBAnRqIhtBFGohKCAbQRBqISkgG0EMaiEqIBtBCGohKyAbQQRqISwgG0EcaiEBIBtBGGohDkEAISEDQCAFBEAgHSAhbCAeaiEtICGzIRNBACEiA0AgBgRAIC0gHCAibGohACAisyEUQQAhCgNAIA0hDwJAIA4qAgAgFJQgASoCACATlJJDAACAP5IiEUMAAAAAWw0AICsqAgAgGyoCACAUlCAsKgIAIBOUkpIgEZUgByAMELABIRIgKCoCACAqKgIAIBSUICkqAgAgE5SSkiARlSAIIAwQsAEhEQJAAkAgJw4CAAECCwJ/IBEQjAQiD4tDAAAAT10EQCAPqAwBC0GAgICAeAsiC0EASCEaAn8gEhCMBCIPi0MAAABPXQRAIA+oDAELQYCAgIB4CyEJIA0hDyAaDQEgByAJTQ0BIAlBAEgNASAIIAtNDQEgHyAKIB5qIAkgHGxqIAsgHWxqQQJ0aioCACEPDAELIBKOIQ8CfyARjiIVi0MAAABPXQRAIBWoDAELQYCAgIB4CyIaQQBIIQkCfyAPi0MAAABPXQRAIA+oDAELQYCAgIB4CyELIA9DAACAP5IhECAVQwAAgD+SIRYCfQJAIA0CfwJAIAlFBEACfSANIAcgC00NABogDSALQQBIDQAaIA0gCCAaTQ0AGiAfIAogHmogCyAcbGogGiAdbGpBAnRqKgIACyEXIBCLQwAAAE9dRQ0BIBCoDAILIBCLQwAAAE9dBEAgEKghCQwDC0GAgICAeCEJDAILQYCAgIB4CyIJIAdPDQEaIA0gCCAaTQ0BGiANIAlBAEgNARogHyAKIB5qIBogHWxqIAkgHGxqQQJ0aioCAAwBCyANIRcgDQshGCAQIBKTIRAgEiAPkyESIA0hDwJ9IA0CfyAWi0MAAABPXQRAIBaoDAELQYCAgIB4CyIaQQBIDQAaAn0gDSAHIAtNDQAaIA0gC0EASA0AGiANIAggGk0NABogHyAKIB5qIAsgHGxqIBogHWxqQQJ0aioCAAshDyANIAcgCU0NABogDSAIIBpNDQAaIA0gCUEASA0AGiAfIAogHmogGiAdbGogCSAcbGpBAnRqKgIACyEZIBYgEZMgECAXlCASIBiUkpQgESAVkyAQIA+UIBIgGZSSlJIhDwsgJCAAIApqQQJ0aiAPOAIAIApBAWoiCiAGRw0ACwsgIkEBaiIiIAVHDQALCyAhQQFqIiEgBEcNAAsLICNBAWoiIyADRw0ACwsgIBCYBA8LEAAAC+sDAgJ9AX8CQAJAAkACQCACQQJrDgMAAQIDCwJAIABDAAAAAF0EQCABQQJJDQEgACABQQF0IgKzIgNdBEACfyAAjCADlSIEi0MAAABPXQRAIASoDAELQYCAgIB4CyACbLMgAJIhAAsgACADkkMAAIC/IACTIABBACABa7NdGyEDDAELIAFBAWuzIABdRQRAIAAhAwwBCyABQQJJDQACfyAAIAFBAXQiArMiA5UiBItDAAAAT10EQCAEqAwBC0GAgICAeAshBSADIAAgAiAFbLOTIgCTQwAAgL+SIAAgACABs2AbIQMLIAFBAWuzIgAgAyAAIANdGyIAQwAAAAAgAEMAAAAAXhsPCwJAIABDAAAAAF0EQCABQQFrIQIgAUEBTQRAIAKzIQNDAAAAACEADAILAn8gAIwgArMiA5UiBItDAAAAT10EQCAEqAwBC0GAgICAeAtBAWogAWyzIACSIQAMAQsgAUEBa7MiAyAAXUUNACABQQJJBEBDAAAAACEADAELIAACfyAAIAOVIgSLQwAAAE9dBEAgBKgMAQtBgICAgHgLIAFss5MhAAsgAyAAIAAgA14bIgBDAAAAACAAQwAAAABeGw8LIAFBAWuzIgMgACAAIANeGyIAQwAAAAAgAEMAAAAAXhshAAsgAAvlSgInfwF7IwBBMGsiEiQAIBJBADYCKCASQgA3AyACQCACBEAgAkEASA0BIBIgAkECdCIIEKIEIgc2AiAgEiAHIAJBAnRqIgI2AiggByABIAgQ8wMaIBIgAjYCJAsgEkEANgIYIBJCADcDECAGBEAgBkEASA0BIBIgBkECdCIHEKIEIgI2AhAgEiACIAZBAnRqIgY2AhggAiAFIAcQ8wMaIBIgBjYCFAsgABALIQIgBBALIQYCQAJAAkACQAJAIAMOAwABAgMLIAIoAgAgEkEgaiASQRBqIAYoAgAQ4QEMAwsgAigCACEZIAYoAgAhGkEAIQdBACEDIwBB4ABrIgokACAKQQA2AhggCkIANwMQIApBADYCCCAKQgA3AwAgEkEgaiILIBJBEGogCkEQaiAKEOIBIScCQAJAIAsoAgAiACALKAIEIgRHBEBBASEXAkAgBCAAa0EEayILQQxPBEAgC0ECdkEBaiIMQfz///8HcSIJQQRrIgtBAnZBAWoiD0EDcSEBAkAgC0EMSQRA/QwBAAAAAQAAAAEAAAABAAAAIS5BACELDAELIA9B/P///wdxIQj9DAEAAAABAAAAAQAAAAEAAAAhLkEAIQsDQCAAIAtBAnQiD0Ewcmr9AAIAIAAgD0Egcmr9AAIAIAAgD0EQcmr9AAIAIAAgD2r9AAIAIC79tQH9tQH9tQH9tQEhLiALQRBqIQsgB0EEaiIHIAhHDQALCyABBEADQCAAIAtBAnRq/QACACAu/bUBIS4gC0EEaiELIANBAWoiAyABRw0ACwsgLiAuIC79DQgJCgsMDQ4PAAAAAAAAAAD9tQEiLiAuIC79DQQFBgcAAAAAAAAAAAAAAAD9tQH9GwAhFyAJIAxGDQEgACAJQQJ0aiEACwNAIAAoAgAgF2whFyAAQQRqIgAgBEcNAAsLIBdFDQIMAQtBASEXCwNAIBogFUECdCIAaiEPIAAgGWohCwJAAkACQAJAAkAgCigCFCIDIAooAhAiAGsiCUECdSINQQJrDgMAAwIBCyAAKAIAIgNFDQMgACgCBCIMQXxxIQggDEEDcSEBIAxBAWshDUEAIQkDQAJAIAxFDQAgDyAJQQJ0aiEAQQAhByANQQJLBEADQCAAIAsoAgA2AgAgACADQQJ0IgRqIgAgCygCBDYCACAAIARqIgAgCygCCDYCACAAIARqIgAgCygCDDYCACAAIARqIQAgC0EQaiELIAdBBGoiByAIRw0ACwtBACEEIAFFDQADQCAAIAsoAgA2AgAgC0EEaiELIAAgA0ECdGohACAEQQFqIgQgAUcNAAsLIAlBAWoiCSADRw0ACwwDCwJAIAAgA0YEQEEBIRAMAQtBASEQIAlBBGsiBEEMSQR/IAAFIARBAnZBAWoiBUH8////B3EiEUEEayIEQQJ2QQFqIgdBA3EhDEEAIQECQCAEQQxJBED9DAEAAAABAAAAAQAAAAEAAAAhLkEAIQQMAQsgB0H8////B3EhDv0MAQAAAAEAAAABAAAAAQAAACEuQQAhBEEAIQgDQCAAIARBAnQiB0Ewcmr9AAIAIAAgB0Egcmr9AAIAIAAgB0EQcmr9AAIAIAAgB2r9AAIAIC79tQH9tQH9tQH9tQEhLiAEQRBqIQQgCEEEaiIIIA5HDQALCyAMBEADQCAAIARBAnRq/QACACAu/bUBIS4gBEEEaiEEIAFBAWoiASAMRw0ACwsgLiAuIC79DQgJCgsMDQ4PAAAAAAAAAAD9tQEiLiAuIC79DQQFBgcAAAAAAAAAAAAAAAD9tQH9GwAhECAFIBFGDQEgACARQQJ0agshBANAIAQoAgAgEGwhECAEQQRqIgQgA0cNAAsLIApBADYCSCAKQgA3A0ACQAJAIAkEQCAJQQBIDQEgCiAJEKIEIgQ2AkAgCiAEIA1BAnRqNgJIIAogBCAAIAkQ8wMgCWo2AkQLIApB0ABqIApBQGsQ4wEgCigCQCIABEAgCiAANgJEIAAQ3QMLAn8gCigCFCAKKAIQIgNrIgBFBEBBACEUQQAMAQsgAEEASA0BQQAhCCAAEKIEIhRBACAAQQJ1IgBBAWtB/////wNxIhFBAnRBBGoQ9QMhBCAAQQEgAEEBSxsiAUEDcSENIAooAgAhB0EAIQAgAUEBa0EDTwRAIAFBfHEhDkEAIQkDQCAEIABBAnQiAWogAyABIAdqKAIAQQJ0aigCADYCACAEIAFBBHIiDGogAyAHIAxqKAIAQQJ0aigCADYCACAEIAFBCHIiDGogAyAHIAxqKAIAQQJ0aigCADYCACAEIAFBDHIiAWogAyABIAdqKAIAQQJ0aigCADYCACAAQQRqIQAgCUEEaiIJIA5HDQALCyARQQFqIQkgDQRAA0AgBCAAQQJ0IgFqIAMgASAHaigCAEECdGooAgA2AgAgAEEBaiEAIAhBAWoiCCANRw0ACwsgBCAJQQJ0agshACAKQQA2AiggCkIANwMgIAAgFGsiAARAIABBAEgNASAKIAAQogQiBDYCICAKIAQgAEECdUECdGo2AiggCiAEIBQgABDzAyAAajYCJAsgCkEwaiAKQSBqEOMBIAooAiAiAARAIAogADYCJCAAEN0DC0EAIQUgEEUNAQNAQQAhEUEAIQQCQCAKKAJUIAooAlAiAWsiB0ECdSIAQQFqIgMgAEkNACADQYCAgIAETw0CIANBAnQQogQiBEEAIABBAnQiCUEEahD1AyIIIAlqIhZBBGohESAHBEAgAEEBIABBAUsbIglBAXEhG0EAIQMgBSEAIAdBCE8EQCAJQX5xIQ5BACEJA0AgCCADQQJ0IgdqIAAgASAHaigCACIMbiINNgIAIAggB0EEciIHaiAAIAwgDWxrIgAgASAHaigCACIHbiIMNgIAIAAgByAMbGshACADQQJqIQMgCUECaiIJIA5HDQALCyAWIBsEfyAIIANBAnQiA2ogACABIANqKAIAIgNuIgc2AgAgACADIAdsawUgAAs2AgAMAQsgCCAFNgIACwJAAkACQAJAAkACQAJ/IBEgBGsiAEUEQEEAIQ1BAAwBCyAAQQBIDQhBACEIIAAQogQiDUEAIABBAnUiAEEBa0H/////A3FBAnQiFkEEahD1AyEDIABBASAAQQFLGyIBQQNxIQ4gCigCACEHQQAhACABQQFrQQNPBEAgAUF8cSERQQAhCQNAIAMgAEECdCIBaiAEIAEgB2ooAgBBAnRqKAIANgIAIAMgAUEEciIMaiAEIAcgDGooAgBBAnRqKAIANgIAIAMgAUEIciIMaiAEIAcgDGooAgBBAnRqKAIANgIAIAMgAUEMciIBaiAEIAEgB2ooAgBBAnRqKAIANgIAIABBBGohACAJQQRqIgkgEUcNAAsLIA4EQANAIAMgAEECdCIBaiAEIAEgB2ooAgBBAnRqKAIANgIAIABBAWohACAIQQFqIgggDkcNAAsLIAMgFmpBBGoLIA1rQQJ1IgAOAgMAAQsgDSgCACEHDAELIA0gAEEBayIIQQJ0aigCACEHIAhFDQAgCigCMCEDQQAhACAIQQRPBED9DAAAAAAAAAAAAAAAAAAAAAAgB/0cACEuIAhBfHEiAEEEayIHQQJ2QQFqIgFBA3EhEUEAIQkCQCAHQQxJBEBBACEHDAELIAFB/P///wdxIRZBACEHQQAhDANAIA0gB0ECdCIBQTByIg5q/QACACADIA5q/QACAP21ASANIAFBIHIiDmr9AAIAIAMgDmr9AAIA/bUBIA0gAUEQciIOav0AAgAgAyAOav0AAgD9tQEgASANav0AAgAgASADav0AAgD9tQEgLv2uAf2uAf2uAf2uASEuIAdBEGohByAMQQRqIgwgFkcNAAsLIBEEQANAIA0gB0ECdCIBav0AAgAgASADav0AAgD9tQEgLv2uASEuIAdBBGohByAJQQFqIgkgEUcNAAsLIC4gLiAu/Q0ICQoLDA0ODwAAAAAAAAAA/a4BIi4gLiAu/Q0EBQYHAAAAAAAAAAAAAAAA/a4B/RsAIQcgACAIRg0BCwNAIA0gAEECdCIBaigCACABIANqKAIAbCAHaiEHIABBAWoiACAIRw0ACwsgDyAHQQJ0aiALIAVBAnRqKAIANgIADAELIA8gCyAFQQJ0aigCADYCACANRQ0BCyANEN0DCyAEBEAgBBDdAwsgECAFQQFqIgVHDQALDAELEAAACyAKKAIwIgAEQCAKIAA2AjQgABDdAwsgFARAIBQQ3QMLIAooAlAiAEUNAiAKIAA2AlQgABDdAwwCCyAKKAIAIgQoAgQhASAAKAIIIQkgACgCBCEMQQEhBiAAKAIMIgMhHkEBIRBBASEHAkACQAJAIAQoAgAiCEECRg0AQQEhHiADIQYgAUECRwRAIANBASAEKAIIQQJGIgcbIRBBASADIAcbIQdBASEGCyAIQQFHDQAgAyAJbCEeDAELAkAgAUEBRgRAIAMgCWwhBgwBCyADIAlsIg0gECAEKAIIQQFGIg4bIRAgByANIA4bIQcLIAgNACADIAlsIAxsIR4MAQsgAUUEQCADIAlsIAxsIQZBACEBDAELIBAgAyAJbCAMbCIDIAQoAggiCRshECADIAcgCRshBwsgACAIQQJ0aigCACIoRQ0BIAdBAUYgACAEKAIMQQJ0aigCACIIQQNLcSEWIAhBAXEhGyAIQXxxIQIgCCAVaiEmIAAgBCgCCEECdGooAgAiDiAIbCEpIAAgAUECdGooAgAiGCAObCAIbCEqIAhBBGsiIEECdkEBaiIAQf7///8HcSENIABBAXEhIUEAIRwDQCAYBEAgGCAcbCEdICYgHCAebCIfaiEiIBUgH2ohKyAmIBwgKmwiAGohLCAAIBVqIS1BACETA0AgDgRAIBMgHWogDmwhESAGIBNsIgAgH2ohBSAAICJqIRQgACAraiEjICwgEyApbCIAaiEkIAAgLWohJUEAIQwDQAJAIAhFDQAgDCARaiAIbCEEIAUgDCAQbCIBaiEDQQAhAAJAIBZFDQAgGiAlIAggDGwiCWpBAnRqIBkgASAUakECdGpJBEAgGSABICNqQQJ0aiAaIAkgJGpBAnRqSQ0BC0EAIQEgIEEETwRAA0AgDyAAIARqQQJ0aiALIAMgACAHbGpBAnRq/QACAP0LAgAgDyAAQQRyIgkgBGpBAnRqIAsgAyAHIAlsakECdGr9AAIA/QsCACAAQQhqIQAgAUECaiIBIA1HDQALCyAhBEAgDyAAIARqQQJ0aiALIAMgACAHbGpBAnRq/QACAP0LAgALIAIiACAIRg0BCyAAQQFyIQEgGwRAIA8gACAEakECdGogCyADIAAgB2xqQQJ0aigCADYCACABIQALIAEgCEYNAANAIA8gACAEakECdGogCyADIAAgB2xqQQJ0aigCADYCACAPIABBAWoiASAEakECdGogCyADIAEgB2xqQQJ0aigCADYCACAAQQJqIgAgCEcNAAsLIAxBAWoiDCAORw0ACwsgE0EBaiITIBhHDQALCyAcQQFqIhwgKEcNAAsMAQtBASEQIAooAgAiASgCBCEEIAAoAgQhCSAAKAIIIgMhHUEBIQcCQAJAIAEoAgAiCEEBRg0AQQEhHSADQQEgBEEBRiIHGyEQQQEgAyAHGyEHIAgNACADIAlsIR0MAQsgECADIAlsIgMgBBshECADIAcgBBshBwsgACAIQQJ0aigCACIfRQ0AIAdBAUYgACABKAIIQQJ0aigCACIIQQNLcSEWIAhBAXEhGyAIQXxxIQIgCCAVaiEYIAAgBEECdGooAgAiDiAIbCEiIAhBBGsiIEECdkEBaiIAQf7///8HcSENIABBAXEhIUEAIRMDQCAOBEAgDiATbCEFIBggEyAdbCIRaiEUIBEgFWohIyAYIBMgImwiAGohJCAAIBVqISVBACEMA0ACQCAIRQ0AIAUgDGogCGwhBCAMIBBsIgEgEWohA0EAIQACQCAWRQ0AIBogJSAIIAxsIglqQQJ0aiAZIAEgFGpBAnRqSQRAIBkgASAjakECdGogGiAJICRqQQJ0akkNAQtBACEBICBBBE8EQANAIA8gACAEakECdGogCyADIAAgB2xqQQJ0av0AAgD9CwIAIA8gAEEEciIJIARqQQJ0aiALIAMgByAJbGpBAnRq/QACAP0LAgAgAEEIaiEAIAFBAmoiASANRw0ACwsgIQRAIA8gACAEakECdGogCyADIAAgB2xqQQJ0av0AAgD9CwIACyACIgAgCEYNAQsgAEEBciEBIBsEQCAPIAAgBGpBAnRqIAsgAyAAIAdsakECdGooAgA2AgAgASEACyABIAhGDQADQCAPIAAgBGpBAnRqIAsgAyAAIAdsakECdGooAgA2AgAgDyAAQQFqIgEgBGpBAnRqIAsgAyABIAdsakECdGooAgA2AgAgAEECaiIAIAhHDQALCyAMQQFqIgwgDkcNAAsLIBNBAWoiEyAfRw0ACwsgFSAnaiIVIBdJDQALCyAKKAIAIgAEQCAKIAA2AgQgABDdAwsgCigCECIABEAgCiAANgIUIAAQ3QMLIApB4ABqJAAMAgsgAigCACEZIAYoAgAhGkEAIQdBACEDIwBB4ABrIgokACAKQQA2AhggCkIANwMQIApBADYCCCAKQgA3AwAgEkEgaiILIBJBEGogCkEQaiAKEOIBIScCQAJAIAsoAgAiACALKAIEIgRHBEBBASEXAkAgBCAAa0EEayILQQxPBEAgC0ECdkEBaiIMQfz///8HcSIJQQRrIgtBAnZBAWoiD0EDcSEBAkAgC0EMSQRA/QwBAAAAAQAAAAEAAAABAAAAIS5BACELDAELIA9B/P///wdxIQj9DAEAAAABAAAAAQAAAAEAAAAhLkEAIQsDQCAAIAtBAnQiD0Ewcmr9AAIAIAAgD0Egcmr9AAIAIAAgD0EQcmr9AAIAIAAgD2r9AAIAIC79tQH9tQH9tQH9tQEhLiALQRBqIQsgB0EEaiIHIAhHDQALCyABBEADQCAAIAtBAnRq/QACACAu/bUBIS4gC0EEaiELIANBAWoiAyABRw0ACwsgLiAuIC79DQgJCgsMDQ4PAAAAAAAAAAD9tQEiLiAuIC79DQQFBgcAAAAAAAAAAAAAAAD9tQH9GwAhFyAJIAxGDQEgACAJQQJ0aiEACwNAIAAoAgAgF2whFyAAQQRqIgAgBEcNAAsLIBdFDQIMAQtBASEXCwNAIBQgGmohDyAUIBlqIQsCQAJAAkACQAJAIAooAhQiAyAKKAIQIgBrIglBAnUiDUECaw4DAAMCAQsgACgCACIERQ0DIAAoAgQiCUF8cSEBIAlBA3EhByAJQQFrIQxBACEIA0ACQCAJRQ0AIAggD2ohAEEAIQMgDEECSwRAA0AgACALLQAAOgAAIAAgBGoiACALLQABOgAAIAAgBGoiACALLQACOgAAIAAgBGoiACALLQADOgAAIAtBBGohCyAAIARqIQAgA0EEaiIDIAFHDQALC0EAIQMgB0UNAANAIAAgCy0AADoAACALQQFqIQsgACAEaiEAIANBAWoiAyAHRw0ACwsgCEEBaiIIIARHDQALDAMLAkAgACADRgRAQQEhEAwBC0EBIRAgCUEEayIEQQxJBH8gAAUgBEECdkEBaiIFQfz///8HcSIRQQRrIgRBAnZBAWoiB0EDcSEMQQAhAQJAIARBDEkEQP0MAQAAAAEAAAABAAAAAQAAACEuQQAhBAwBCyAHQfz///8HcSEO/QwBAAAAAQAAAAEAAAABAAAAIS5BACEEQQAhCANAIAAgBEECdCIHQTByav0AAgAgACAHQSByav0AAgAgACAHQRByav0AAgAgACAHav0AAgAgLv21Af21Af21Af21ASEuIARBEGohBCAIQQRqIgggDkcNAAsLIAwEQANAIAAgBEECdGr9AAIAIC79tQEhLiAEQQRqIQQgAUEBaiIBIAxHDQALCyAuIC4gLv0NCAkKCwwNDg8AAAAAAAAAAP21ASIuIC4gLv0NBAUGBwAAAAAAAAAAAAAAAP21Af0bACEQIAUgEUYNASAAIBFBAnRqCyEEA0AgBCgCACAQbCEQIARBBGoiBCADRw0ACwsgCkEANgJIIApCADcDQAJAAkAgCQRAIAlBAEgNASAKIAkQogQiBDYCQCAKIAQgDUECdGo2AkggCiAEIAAgCRDzAyAJajYCRAsgCkHQAGogCkFAaxDjASAKKAJAIgAEQCAKIAA2AkQgABDdAwsCfyAKKAIUIAooAhAiA2siAEUEQEEAIRZBAAwBCyAAQQBIDQFBACEIIAAQogQiFkEAIABBAnUiAEEBa0H/////A3EiEUECdEEEahD1AyEEIABBASAAQQFLGyIBQQNxIQ0gCigCACEHQQAhACABQQFrQQNPBEAgAUF8cSEOQQAhCQNAIAQgAEECdCIBaiADIAEgB2ooAgBBAnRqKAIANgIAIAQgAUEEciIMaiADIAcgDGooAgBBAnRqKAIANgIAIAQgAUEIciIMaiADIAcgDGooAgBBAnRqKAIANgIAIAQgAUEMciIBaiADIAEgB2ooAgBBAnRqKAIANgIAIABBBGohACAJQQRqIgkgDkcNAAsLIBFBAWohCSANBEADQCAEIABBAnQiAWogAyABIAdqKAIAQQJ0aigCADYCACAAQQFqIQAgCEEBaiIIIA1HDQALCyAEIAlBAnRqCyEAIApBADYCKCAKQgA3AyAgACAWayIABEAgAEEASA0BIAogABCiBCIENgIgIAogBCAAQQJ1QQJ0ajYCKCAKIAQgFiAAEPMDIABqNgIkCyAKQTBqIApBIGoQ4wEgCigCICIABEAgCiAANgIkIAAQ3QMLQQAhBSAQRQ0BA0BBACERQQAhBAJAIAooAlQgCigCUCIBayIHQQJ1IgBBAWoiAyAASQ0AIANBgICAgARPDQIgA0ECdBCiBCIEQQAgAEECdCIJQQRqEPUDIgggCWoiFUEEaiERIAcEQCAAQQEgAEEBSxsiCUEBcSEbQQAhAyAFIQAgB0EITwRAIAlBfnEhDkEAIQkDQCAIIANBAnQiB2ogACABIAdqKAIAIgxuIg02AgAgCCAHQQRyIgdqIAAgDCANbGsiACABIAdqKAIAIgduIgw2AgAgACAHIAxsayEAIANBAmohAyAJQQJqIgkgDkcNAAsLIBUgGwR/IAggA0ECdCIDaiAAIAEgA2ooAgAiA24iBzYCACAAIAMgB2xrBSAACzYCAAwBCyAIIAU2AgALAkACQAJAAkACQAJAAn8gESAEayIARQRAQQAhDUEADAELIABBAEgNCEEAIQggABCiBCINQQAgAEECdSIAQQFrQf////8DcUECdCIVQQRqEPUDIQMgAEEBIABBAUsbIgFBA3EhDiAKKAIAIQdBACEAIAFBAWtBA08EQCABQXxxIRFBACEJA0AgAyAAQQJ0IgFqIAQgASAHaigCAEECdGooAgA2AgAgAyABQQRyIgxqIAQgByAMaigCAEECdGooAgA2AgAgAyABQQhyIgxqIAQgByAMaigCAEECdGooAgA2AgAgAyABQQxyIgFqIAQgASAHaigCAEECdGooAgA2AgAgAEEEaiEAIAlBBGoiCSARRw0ACwsgDgRAA0AgAyAAQQJ0IgFqIAQgASAHaigCAEECdGooAgA2AgAgAEEBaiEAIAhBAWoiCCAORw0ACwsgAyAVakEEagsgDWtBAnUiAA4CAwABCyANKAIAIQcMAQsgDSAAQQFrIghBAnRqKAIAIQcgCEUNACAKKAIwIQNBACEAIAhBBE8EQP0MAAAAAAAAAAAAAAAAAAAAACAH/RwAIS4gCEF8cSIAQQRrIgdBAnZBAWoiAUEDcSERQQAhCQJAIAdBDEkEQEEAIQcMAQsgAUH8////B3EhFUEAIQdBACEMA0AgDSAHQQJ0IgFBMHIiDmr9AAIAIAMgDmr9AAIA/bUBIA0gAUEgciIOav0AAgAgAyAOav0AAgD9tQEgDSABQRByIg5q/QACACADIA5q/QACAP21ASABIA1q/QACACABIANq/QACAP21ASAu/a4B/a4B/a4B/a4BIS4gB0EQaiEHIAxBBGoiDCAVRw0ACwsgEQRAA0AgDSAHQQJ0IgFq/QACACABIANq/QACAP21ASAu/a4BIS4gB0EEaiEHIAlBAWoiCSARRw0ACwsgLiAuIC79DQgJCgsMDQ4PAAAAAAAAAAD9rgEiLiAuIC79DQQFBgcAAAAAAAAAAAAAAAD9rgH9GwAhByAAIAhGDQELA0AgDSAAQQJ0IgFqKAIAIAEgA2ooAgBsIAdqIQcgAEEBaiIAIAhHDQALCyAHIA9qIAUgC2otAAA6AAAMAQsgDyAFIAtqLQAAOgAAIA1FDQELIA0Q3QMLIAQEQCAEEN0DCyAQIAVBAWoiBUcNAAsMAQsQAAALIAooAjAiAARAIAogADYCNCAAEN0DCyAWBEAgFhDdAwsgCigCUCIARQ0CIAogADYCVCAAEN0DDAILIAooAgAiBCgCBCEBIAAoAgghCSAAKAIEIQxBASEGIAAoAgwiAyEeQQEhEEEBIQcCQAJAAkAgBCgCACIIQQJGDQBBASEeIAMhBiABQQJHBEAgA0EBIAQoAghBAkYiBxshEEEBIAMgBxshB0EBIQYLIAhBAUcNACADIAlsIR4MAQsCQCABQQFGBEAgAyAJbCEGDAELIAMgCWwiDSAQIAQoAghBAUYiDhshECAHIA0gDhshBwsgCA0AIAMgCWwgDGwhHgwBCyABRQRAIAMgCWwgDGwhBkEAIQEMAQsgECADIAlsIAxsIgMgBCgCCCIJGyEQIAMgByAJGyEHCyAAIAhBAnRqKAIAIihFDQEgB0EBRiAAIAQoAgxBAnRqKAIAIghBD0txIRUgCEEBcSEbIAhBcHEhAiAIIBRqISYgACAEKAIIQQJ0aigCACIOIAhsISkgACABQQJ0aigCACIYIA5sIAhsISogCEEQayIgQQR2QQFqIgBB/v///wFxIQ0gAEEBcSEhQQAhHANAIBgEQCAYIBxsIR0gJiAcIB5sIh9qISIgFCAfaiErICYgHCAqbCIAaiEsIAAgFGohLUEAIRMDQCAOBEAgEyAdaiAObCERIAYgE2wiACAfaiEFIAAgImohFiAAICtqISMgLCATIClsIgBqISQgACAtaiElQQAhDANAAkAgCEUNACAMIBFqIAhsIQQgBSAMIBBsIgFqIQNBACEAAkAgFUUNACAaICUgCCAMbCIJamogGSABIBZqakkgGSABICNqaiAaIAkgJGpqSXENAEEAIQEgIEEQTwRAA0AgDyAAIARqaiALIAMgACAHbGpq/QAAAP0LAAAgDyAAQRByIgkgBGpqIAsgAyAHIAlsamr9AAAA/QsAACAAQSBqIQAgAUECaiIBIA1HDQALCyAhBEAgDyAAIARqaiALIAMgACAHbGpq/QAAAP0LAAALIAIiACAIRg0BCyAAQQFyIQEgGwRAIA8gACAEamogCyADIAAgB2xqai0AADoAACABIQALIAEgCEYNAANAIA8gACAEamogCyADIAAgB2xqai0AADoAACAPIABBAWoiASAEamogCyADIAEgB2xqai0AADoAACAAQQJqIgAgCEcNAAsLIAxBAWoiDCAORw0ACwsgE0EBaiITIBhHDQALCyAcQQFqIhwgKEcNAAsMAQtBASEQIAooAgAiASgCBCEEIAAoAgQhCSAAKAIIIgMhHUEBIQcCQAJAIAEoAgAiCEEBRg0AQQEhHSADQQEgBEEBRiIHGyEQQQEgAyAHGyEHIAgNACADIAlsIR0MAQsgECADIAlsIgMgBBshECADIAcgBBshBwsgACAIQQJ0aigCACIfRQ0AIAdBAUYgACABKAIIQQJ0aigCACIIQQ9LcSEVIAhBAXEhGyAIQXBxIQIgCCAUaiEYIAAgBEECdGooAgAiDiAIbCEiIAhBEGsiIEEEdkEBaiIAQf7///8BcSENIABBAXEhIUEAIRMDQCAOBEAgDiATbCEFIBggEyAdbCIRaiEWIBEgFGohIyAYIBMgImwiAGohJCAAIBRqISVBACEMA0ACQCAIRQ0AIAUgDGogCGwhBCAMIBBsIgEgEWohA0EAIQACQCAVRQ0AIBogJSAIIAxsIglqaiAZIAEgFmpqSSAZIAEgI2pqIBogCSAkampJcQ0AQQAhASAgQRBPBEADQCAPIAAgBGpqIAsgAyAAIAdsamr9AAAA/QsAACAPIABBEHIiCSAEamogCyADIAcgCWxqav0AAAD9CwAAIABBIGohACABQQJqIgEgDUcNAAsLICEEQCAPIAAgBGpqIAsgAyAAIAdsamr9AAAA/QsAAAsgAiIAIAhGDQELIABBAXIhASAbBEAgDyAAIARqaiALIAMgACAHbGpqLQAAOgAAIAEhAAsgASAIRg0AA0AgDyAAIARqaiALIAMgACAHbGpqLQAAOgAAIA8gAEEBaiIBIARqaiALIAMgASAHbGpqLQAAOgAAIABBAmoiACAIRw0ACwsgDEEBaiIMIA5HDQALCyATQQFqIhMgH0cNAAsLIBQgJ2oiFCAXSQ0ACwsgCigCACIABEAgCiAANgIEIAAQ3QMLIAooAhAiAARAIAogADYCFCAAEN0DCyAKQeAAaiQADAELIBIgAzYCBCASIAA2AgBBxRAgEhAYCyASKAIQIgIEQCASIAI2AhQgAhCYBAsgEigCICICBEAgEiACNgIkIAIQmAQLIBJBMGokAA8LEAAACx8AIAAgASACIAMgBCAFIAYgByAIIAkgCiALIAwQ1QELDABBvKsBKAIAELQBCzQBAX8gAARAIAAoAgAQtAEgACgCBBC0ASAAKAJoIgEEQCAAIAE2AmwgARCYBAsgABCYBAsLVwECf0HMqwEoAgAiAARAA0AgACgCACECIAAoAgwiAQRAIAAgATYCECABEJgECyAAEJgEIAIiAA0ACwtBxKsBKAIAIQBBxKsBQQA2AgAgAARAIAAQmAQLC1cBAn9B4KsBKAIAIgAEQANAIAAoAgAhAiAAKAIMIgEEQCAAIAE2AhAgARCYBAsgABCYBCACIgANAAsLQdirASgCACEAQdirAUEANgIAIAAEQCAAEJgECwvpNAQnfwJ9CXsBfiMAQbABayIYJAAgABALIQAgBBALISMgFxALITsgIygCACEqIAAoAgAhLiAHBEAgBxALKAIAITULIDsoAgAhNiAYQQA2AqgBIBhCADcDoAECQEEAIBRBBEcgFRsNACA7KAIEIgBFBEBBACE2DAELIBhBoAFqIAAQuAEgGCgCoAEhNgtBACEAIBhBADYCnAEgDARAQQAhC0EAIQpBACEJQQAhCEEEIQALQQEhDAJ/IBNFBEAgESEpIBIMAQtBASEpIABBAXIhACARIQwgEiARbgshK0EAIBQgFEEDa0ECSRshH0MAAID/IT9DAACAfyFAAkACQAJAIBRBAWsOAgABAgtDAAAAACE/DAELQwAAAAAhP0MAAMBAIUALIBggQDgCmAEgGCA/OAKUASAYIAA2ApABIBggBzYCjAEgGCAENgKIASAYIB82AoQBIBggEjYCgAEgGCARNgJ8IBggKzYCeCAYICk2AnQgGCAMNgJwIBggDjYCbCAYIA02AmggGCAQNgJkIBggDzYCYCAYIAY2AlwgGCAFNgJYIBggCzYCVCAYIAo2AlAgGCAJNgJMIBggCDYCSAJAAkAgGEHIAGoQuQEiH0G8qwFGBEBBACEfIBhBADYCQCAYQgA3AzgCQCATDQAgIygCBCITBEAgGEE4aiATELgBIBgoAjghHwsgGEEIEKIEIhM2AiggGCATQQhqIiM2AjAgEyAFIAZsIBFsrSASrUIghoQ3AgAgGCAjNgIsIBhBCBCiBCITNgIYIBggE0EIaiIjNgIgIBNCATcCACAYICM2AhwgKiAYQShqIBhBGGogHxDhASAYKAI4ISogGCgCGCITBEAgGCATNgIcIBMQmAQLIBgoAigiE0UNACAYIBM2AiwgExCYBAsgGEGcAWohHSMAQTBrIiMkAEECIRMCQCA/vEH/////B3FBgICA/AdLDQAgQLwhHyA/IEBgDQAgH0H/////B3FBgICA/AdLDQBB9LMBKAIAIhMEQCAjQSBqID8gQCATEREACyBAQwAAgH9bIRMgP0MAAAAAWyE3IECMID9bISUCfyAFIAZsIS9BBCEwQbS0ASEfA0AgHyAvIB8tAA1GDQEaIB9BEGohHyAwQQFrIjANAAtBAAsiHwRAICNBEGogPyBAIB8oAggREQALIBMgN3EhNyATICVxIRNB3LgBKAIAIiUEQCAjID8gQCAlEREACwJ/IAUhMCAGIS8gDCEmICkhJSAAIQwgI0EgaiEiICNBEGohISAjISkgHyEAIDchBiAdIQVBASE4AkBBgK0BKAIAIjJBAXFFDQBBBSE4IDJBAnFBAkcNAEECITgCQCAwRQ0AIC9FDQAgD0UNACAQRQ0AIA1FDQAgDkUNACAmRQ0AICVFDQAgK0UNACAlICZsIBFLDQAgJiArbCASSw0AIAxBAXEiHSAlQQFHcQ0AIAggCXIgCnIgC3IiOUEAIAxBBHEiMhsNAUEGITgQ8AEiGUUNACAlQQFGICtBAUZxIR4gDyAQciEzAn8CQAJAAkACQAJAAkAgLyAwbCIsQQFHDQAgHkUNACAzQQFHDQAgOQ0ADAELIB4gAEEAR3ENAUH7swEtAAAhHyAZICtB+bMBLQAAIgAQ6gEgJUEBQfqzAS0AAHQiKRD8ASI3ICxsQQJ0QQRqbCAmbCIhEP0BIh42AnQgHkUNByAsQQFHIDlBAEdyIDNBAUdyITMgHkEAICEQ9QMaIBlB0AFqICJBEBDzAxogE0UNAkHkswFBxLMBQeSzASgCACIhGyEeICENBCAGDQMMBAsgGSAmQeC4AS0AABD8AUEDdBD9ASIdNgJ0IB1FDQYgJkHguAEtAAAgKiA1IB1BAEH3AREIACAZQdABaiApQRAQ8wMaQdi4ASgCACEdIBlB4bgBLQAAOgDMAiAZIB02AsgCQQAhHUEJDAQLIBkgJiAALQAMEPwBIikgLEECdEEEamwiHhD9ASIiNgJ0ICJFDQUgIkEAIB4Q9QMaIBlB0AFqICFBEBDzAxogMCAvICYgAC0ADCAqIDUgGSgCdEEAQQBB+AFB+QEgHRsRDAAgACEdIBMEfyAAQQRqIAAgACgCBBsFIB0LKAIAIR0gGSAALwANOwHMAiAZIB02AsgCIClBAnRBEGohHUEDDAMLQcSzASEeIAZFDQELQdSzAUHEswFB1LMBKAIAGyEeC0EBIB90IRNB+bMBLQAAQQBsISEgGSgCdCEiAn8gM0UEQCAmICsgJSAAICkgEyAqIDUgIiAhQQBB+gERDwBB+LMBLQAAIR0gGSAeNQIAIB41AghCIIaENwLIAkHRAiEhQdACISJB0gIMAQsCQCAdBEAgJiArICwgACApICogNSAiICFBAEH7AREGAAwBCyAmICsgLCAlIAAgKSATICogNSAiICFBAEH8AREJAAtB+LMBLQAAIR0gHigCBCEhIB4oAgwhHiAZQQA2AtACIBkgHjYCzAIgGSAhNgLIAkHVAiEhQdQCISJB1gILIR4gGSAiaiAdOgAAIBkgIWogADoAACAZIB5qICk6AAAgN0ECdEEQaiEdQQVBBCAzGwshIkEBICxBAUcgMkEAR3EiMiA5GwRAIBkgHRD9ASIqNgK4ASAqRQ0CICpBACAdEPUDGgsgGSAiNgLEAiAZQRo2AsACIBkgEjYCbCAZIBE2AlQgGSArNgI4IBkgJTYCNCAZICY2AiwgGSAONgIoIBkgDTYCJCAZIBA2AiAgGSAPNgIcIBkgLzYCGCAZIDA2AhQgGSALNgIQIBkgCjYCDCAZIAk2AgggGSAINgIEIBlBADYCwAQgGSAMQXtxQQRBACAyG3I2AsgBIAUgGTYCAEEADAILQQAhGQsgGRCVAiA4CyETCyAjQTBqJAAgEyIRBEAgGCARNgIQQecfIBhBEGoQGAsgGCgCPCEFIBgoAjghDCAYQgA3AzggGCgCQCEGIBhBADYCQCAYKAKcASENQbyrASgCACIRRQRAQbyrASERQbyrASEIDAILQbyrASEIA0ACQAJAIBgoAkgiACARKAIQIhJJDQAgEUEQaiEJAkAgACASSw0AIBgoAkwiCiARKAIUIgtJDQEgCiALSw0AIBgoAlAiCiARKAIYIgtJDQEgCiALSw0AIBhByABqIAkQugENASAJKAIAIRIgGCgCSCEACwJAIAAgEksNACAAIBJJDQUgESgCFCIAIBgoAkwiEkkNACAAIBJLDQUgESgCGCIAIBgoAlAiEkkNACAAIBJLDQUgCSAYQcgAahC6AUUNBQsgEUEEaiEIIBEoAgQiAEUNBCAIIREMAQsgESgCACIADQAgESEIDAMLIBEhCCAAIREMAAsACyAYIB8oAmQiETYCnAEMAQsCQCAIKAIARQRAQfQAEKIEIgBBEGogGEHIAGpB1AAQ8wMaIAAgBjYCcCAAIAU2AmwgACAMNgJoIAAgDTYCZCAAIBE2AgggAEIANwIAIAggADYCAEG4qwEoAgAoAgAiEQRAQbirASARNgIAIAgoAgAhAAtBvKsBKAIAIAAQJUHAqwFBwKsBKAIAQQFqNgIADAELIAxFDQAgDBCYBAsgBCAYQcgAakHEqwEQuwEgBwRAIAcgGEHIAGpB2KsBELsBC0HoqgFB6KoBKAIAQQFqNgIAIBgoAjgiEQRAIBggETYCPCAREJgECyAYKAKcASERC0HsqgEoAgAhACARKALAAkEaRgR/An8gASEEIAIhBSADIQYgNiECIAAQ0AMhNEEAISxBACEvQQAhKiMAQdAAayI6JAAgEUEANgLABEEBIQECQAJAQYCtASgCACIHQQFxRQ0AQQUhASAHQQJxQQJHDQBBAiEBIAVFDQAgBkUNACARIAQEfyARIC42AlggESAGNgJQIBEgBTYCTCARIAQ2AgACQCARLQDIAUEEcQRAIAUgESgCHCInEOwBIQEgESAGIBEoAiAiBxDsASIAQQFrIAdsIAZrIBEoAigiAyARKAIYIhpBAWtsakEBaiIxQQF2Ijw2AhAgESAnIAFBAWtsIAVrIBEoAiQgESgCFCInQQFrbGpBAWoiHEEBdiIbNgIEIBEgHCAbazYCDCARIDEgPGs2AggMAQsgESgCDCARKAIEIAVqaiARKAIUIicgESgCJCARKAIcEP4BIQEgESgCCCARKAIQIAZqaiARKAIYIhogESgCKCIDIBEoAiAiBxD+ASEACyARIAI2AnAgESAANgJoIBEgATYCZAJAAkACQAJAAkAgESgCxAJBBGsOBgABBwcHAwILIBEoAiwhByARKAI0IicgES0A0gIQ/AFBAnRBBGohCCARKALIAiEbIBEtANECIQYgES0A0AIhGiARKAI4IQUgASAEbCAAbCIAQQFGBEBBASAaIBEoAswCIgEbIRogASAbIAEbIRsLIBEoAlQhASARKAJ0IQQgESAbNgLcAyARQQI2AtgDIBEgBUECdDYC1AMgESAGQQJ0NgLQAyARIAI2AsgDIBEgCDYCwAMgESAENgK8AyARIAFBAnQ2ArgDIBEgLjYCtAMgESAnQQJ0NgKwAyARIAUgBhDqASAIbDYCxAMgESAR/QAE0AH9CwTgAyARIBH9AATgAf0LBPADIBEgEf0ABPAB/QsEgAQgESARKAJsQQJ0NgLMAyAaQf8BcSEEIAUhAQJAIDRBAkkNACAFIAAgBBDrASABIAdsbCA0QQVsEOsBIi5NDQAgBSAFIAYgLmwQ6wEgBmwQ7gEhAQsgEQJ/IAdBAUYEQCARQf0BNgLcAiAAIQdBBQwBCyARQf4BNgLcAiARIAU2AugCIAAhBUEHCzYC2AIgESABNgL8AiARIAQ2AvgCIBEgBTYC5AIgESAHNgLgAgwDCyAaICdsIQcgESgCyAIhMSARQdUCaiEnIBEtANQCIRogACABbCIAQQFGBEBBASAaIBEoAswCIgEbIRogASAxIAEbITELICctAAAhJyARKAIsIQMgB0ECdCE8IAAgGkH/AXEiGhDqASEBAkAgBSARKAKcAUYEQCARKAKgASAGRg0BCyARKAJgIAEgPGwQ7wEiAUUEQEEGIQEMBgsgESAuNgKkASARIAE2AmAgESAGNgKgASARIAU2ApwBIBEoAmgiPSARKAJkbCIcIBpuIiAgHCAaICBsR2ogGmwhOCARKAIUITMgESgCGCEkIBEoAlQhKCARKAIQITcgESgCBCErIBEoAighGSARKAIkITUgESgCICEdIBEoAhwhKSARKAJQIT4gESgCTCETIBEoArgBIS0gESgCWCEeIBEoAmAhIEIBIUogPUEBRwRAQR8gPUEBa2drIhtB/wFxISpBAiAbdCA9a61CIIYgPa2AQgF8Qv////8PgyFKQQEhLwsgOARAICQgM2whEiAcQQFrISMgGkEBRiAkQQNLcSEmICRBAXEhECAkQXxxIQEgJEEDcSEfICRBBGsiHEECdkEBaiIbQf7///8HcSEPIBtBAXEhDiAbQfz///8HcSENIBtBA3EhJSAt/REhQSAe/REhQyAoQQJ0IjL9ESFEID79ESFFIBn9ESFGIBxBBEkhDCAcQQxJIQsDQCAaBEAgEiAsbCEKQQAhIQNAIDMEQCAjICEgLGoiGyAbICNLGyIcIEogHK1+QiCIpyIbayAvdiAbaiAqdiICIClsICtrIQkgCiAhaiEbIBwgAiA9bGsgHWwgN2siOf0RIUdBACEiA0AgIiAkbCEcAkAgEyAJICIgNWxqIgJNBEAgJEUNAUEAIShBACECICYEQEEAIQhBACEwIAtFBEADQCAgIBsgAiAcaiAabGpBAnRqIEH9CwIAICAgGyACQQRyIBxqIBpsakECdGogQf0LAgAgICAbIAJBCHIgHGogGmxqQQJ0aiBB/QsCACAgIBsgAkEMciAcaiAabGpBAnRqIEH9CwIAIAJBEGohAiAwQQRqIjAgDUcNAAsLICUEQANAICAgGyACIBxqIBpsakECdGogQf0LAgAgAkEEaiECIAhBAWoiCCAlRw0ACwsgASICICRGDQILICQgAkF/c2ohCCAfBEADQCAgIBsgAiAcaiAabGpBAnRqIC02AgAgAkEBaiECIChBAWoiKCAfRw0ACwsgCEEDSQ0BA0AgICAbIAIgHGoiKCAabGpBAnRqIC02AgAgICAbIChBAWogGmxqQQJ0aiAtNgIAICAgGyAoQQJqIBpsakECdGogLTYCACAgIBsgKEEDaiAabGpBAnRqIC02AgAgAkEEaiICICRHDQALDAELICRFDQAgAiA+bCEoQQAhAiAmBEAgKP0RIUj9DAAAAAABAAAAAgAAAAMAAAAhQkEAIQggDEUEQANAICAgGyACIBxqIBpsakECdGogRyBCIEb9tQH9rgEiSSBI/a4BIET9tQEgQ/2uASBBIEkgRf06/VL9CwIAICAgGyACQQRyIBxqIBpsakECdGogRyBC/QwEAAAABAAAAAQAAAAEAAAA/a4BIEb9tQH9rgEiSSBI/a4BIET9tQEgQ/2uASBBIEkgRf06/VL9CwIAIEL9DAgAAAAIAAAACAAAAAgAAAD9rgEhQiACQQhqIQIgCEECaiIIIA9HDQALCyAOBEAgICAbIAIgHGogGmxqQQJ0aiBHIEIgRv21Af2uASJCIEj9rgEgRP21ASBD/a4BIEEgQiBF/Tr9Uv0LAgALIAEiAiAkRg0BCyACQQFyIQggEARAICAgGyACIBxqIBpsakECdGogOSACIBlsaiICIChqIDJsIB5qIC0gAiA+SRs2AgAgCCECCyAIICRGDQADQCAgIBsgAiAcaiAabGpBAnRqIDkgAiAZbGoiCCAoaiAybCAeaiAtIAggPkkbNgIAICAgGyACQQFqIgggHGogGmxqQQJ0aiA5IAggGWxqIgggKGogMmwgHmogLSAIID5JGzYCACACQQJqIgIgJEcNAAsLICJBAWoiIiAzRw0ACwsgIUEBaiIhIBpHDQALCyAaICxqIiwgOEkNAAsLIBEoAnAhAgsgES0A1gIhCCARKAI0IRwgESgCYCEgIBEoAqQBISQgESgCuAEhKCARKAJ0IS0gESgCbCEbIBEoAjghASARIDE2AvQDIBFBAjYC8AMgESABQQJ0NgLkAyARIBxBAnQiMTYC3AMgESAnQQJ0NgLYAyARIBtBAnQ2AtQDIBEgAjYC0AMgESAtNgLMAyARICg2AsgDIBEgLiAkazYCxAMgESAgNgLAAyARIDE2ArgDIBEgGiA8bDYCtAMgESAHNgKwAyARIAAgG2xBAnQ2AuwDIBEgHCAIEPwBIAdsQQJ0QQRqIgc2ArwDIBEgASAnEOoBIAdsNgLgAyARIBEoAlQgBSAGbGxBAnQ2AugDIBEgEf0AA/AB/QsDmAQgESAR/QAD4AH9CwOIBCARIBH9AAPQAf0LA/gDAn8gASA0QQJJDQAaIAEgACAaEOsBIAMgBGwgAWxsIDRBBWwQ6wEiByABTw0AGiABIAEgByAnbBDrASAnbBDuAQshBQJAIANBAUYEQCARAn8gBEECTwRAIBFB/wE2AtwCIBEgATYC6AJBBwwBCyARQYACNgLcAiAAIQQgASEAQQULNgLYAiARIAA2AuQCIBEgBDYC4AIMAQsgEQJ/IARBAk8EQCARQYECNgLcAiARIAE2AuwCQQkMAQsgEUGCAjYC3AIgAyEEIAAhAyABIQBBBws2AtgCIBEgADYC6AIgESADNgLkAiARIAQ2AuACCyARIAU2AvwCIBEgGjYC+AIMAgsgByAaIANBAUYbIjQgAEEBa2wgGmogJ2whBwJ/AkAgESgCnAEgBUcNACARKAKgASAGRw0AIBEoAqQBDAELIBEoAmAgASAHbEECdBDvASICRQRAQQYhAQwFCyARIAI2AmAgESAHIDQQlwIgESAGNgKgASARIAU2ApwBIBEgLjYCpAEgESgCcCECIC4LIRogESgCVCEDIBEoAmwhCCARKAJgITEgESgCdCE8IBEoAiwhGyARKAK4ASEcIDr9DAAAAAAAAAAAAAAAAAAAAAD9CwI8IDr9DAAAAAAAAAAAAAAAAAAAAAD9CwIsIDr9DAAAAAAAAAAAAAAAAAAAAAD9CwIcIBEgHDYC3AMgESAbNgLYAyARIAA2AtQDIBEgAjYCyAMgESA8NgLEAyARIC4gGms2ArwDIBEgB0ECdDYCuAMgESAnIDRsQQJ0NgK0AyARIDE2ArADIBEgCCAba0ECdDYC4AMgESAAIAhsIgBBAnQ2AtADIBEgAyAFIAZsbEECdDYCwAMgESAAIAFsQQJ0NgLMAyARIDooAhg2AuQDIBFBAzYC2AIgEUGDAjYC3AIgESAENgLgAiARIAE2AuQCIBEgEf0AA/AB/QsDiAQgESAR/QAD4AH9CwP4AyARIBH9AAPQAf0LA+gDIBEgESgCyAI2ApgEDAELIBEoAsgCIQUgESgCLCEHIBEoAlQhBiARKAJ0IQggESgCbCEbIDr9DAAAAAAAAAAAAAAAAAAAAAD9CwIEIBEgBTYCyAMgESAbQQJ0NgLEAyARIAI2AsADIBEgCDYCvAMgESAGQQJ0NgK4AyARIC42ArQDIBEgB0ECdDYCsAMgESA6KAIANgLMAyARIBH9AATQAf0LBNADAn8gASAEbCAAbCIBIDRBAkkNABogASABIDRBBWwQ6wEiBSABTw0AGiABIAEgBSARLQDMAiIAbBDrASAAbBDuAQshACARQQI2AtgCIBEgADYC+AIgESABNgLgAiARQYQCNgLcAgtBAQVBAgs2AsAEQQAhAQsgOkHQAGokACABDAELAAsFQQILIhEEQCAYIBE2AgBB+R4gGBAYCyAYKAKcAUHsqgEoAgAQrwIgFEEDRgRAIDYgOygCBCAVIBcQ3QELAkAgFEEERgRAIDYgOygCBCAWIBcQ2wEMAQsCQAJAIBRBBWsOAgABAgsgNiA7KAIEIBcQ4AEMAQsgNiA7KAIEIBcQ2gELIBgoAqABIhEEQCAYIBE2AqQBIBEQmAQLIBhBsAFqJAAL+gEBBn8gASAAKAIIIgIgACgCBCIDa0ECdU0EQCAAIAEEfyADQQAgAUECdCIBEPUDIAFqBSADCzYCBA8LAkAgAyAAKAIAIgRrIgZBAnUiBSABaiIHQYCAgIAETw0AQQAhAyAFQQJ0An8gByACIARrIgJBAXUiBSAFIAdJG0H/////AyACQfz///8HSRsiAgRAIAJBgICAgARPDQIgAkECdBCiBCEDCyADC2pBACABQQJ0IgEQ9QMgAWohASADIAJBAnRqIQIgBkEASgRAIAMgBCAGEPMDGgsgACACNgIIIAAgATYCBCAAIAM2AgAgBARAIAQQmAQLDwsQAAALkgIBBX8jAEEQayIFJAACQAJAQbyrASgCACIBRQ0AQbyrASEDA0ACQAJAIAEoAhAiAiAAKAIAIgRJDQACQCACIARLDQAgASgCFCICIAAoAgQiBEkNASACIARLDQAgASgCGCICIAAoAggiBEkNASACIARLDQAgAUEQaiAAELoBRQ0AIAFBBGohAQwCCyABIQMMAQsgAUEEaiEBCyABKAIAIgENAAsgA0G8qwFGDQAgACgCACIBIAMoAhAiAkkNACABIAJLDQEgACgCBCIBIAMoAhQiAkkNACABIAJLDQEgACgCCCIBIAMoAhgiAkkNACABIAJLDQEgACADQRBqELoBRQ0BC0G8qwEhAwsgBUEQaiQAIAMLowQCBH8CfSMAQRBrIgUkAEEBIQQCQCAAKAIMIgIgASgCDCIDSQ0AIAIgA0sEQEEAIQQMAQsgACgCECICIAEoAhAiA0kNACACIANLBEBBACEEDAELIAAoAhQiAiABKAIUIgNJDQAgAiADSwRAQQAhBAwBCyAAKAIYIgIgASgCGCIDSQ0AIAIgA0sEQEEAIQQMAQsgACgCHCICIAEoAhwiA0kNACACIANLBEBBACEEDAELIAAoAiAiAiABKAIgIgNJDQAgAiADSwRAQQAhBAwBCyAAKAIkIgIgASgCJCIDSQ0AIAIgA0sEQEEAIQQMAQsgACgCKCICIAEoAigiA0kNAEEAIQQgAiADSw0AAn9BASEEAkAgACgCLCICIAEoAiwiA0kNAEEAIAIgA0sNARogACgCMCICIAEoAjAiA0kNAEEAIAIgA0sNARogACgCNCICIAEoAjQiA0kNAEEAIAIgA0sNARogACgCOCICIAEoAjgiA0kNAEEAIAIgA0sNARogACgCPCICIAEoAjwiA0kNAEEAIAIgA0sNARogACgCQCICIAEoAkAiA0kNAEEAIAIgA0sNARogACgCRCICIAEoAkQiA0kNAEEAIAIgA0sNARogACgCSCICIAEoAkgiA0kNAEEAIAIgA0sNARogACoCTCIGIAEqAkwiB10NAEEAIQQgBiAHXg0AIAAqAlAgASoCUF0hBAsgBAshBAsgBUEQaiQAIAQLvAUBCX8jAEEgayIGJAAgBiAANgIUAkACQAJAAkAgAigCBCIERQ0AIAIoAgAiCgJ/IARBAWsgAHEgBGkiCUEBTQ0AGiAAIAAgBEkNABogACAEcAsiB0ECdGooAgAiA0UNACADKAIAIgNFDQAgBEEBayEIIAlBAUshCwNAAkAgACADKAIEIgVHBEACQCALRQRAIAUgCHEhBQwBCyAEIAVLDQAgBSAEcCEFCyAFIAdGDQEMAwsgAygCCCAARg0DCyADKAIAIgMNAAsLIAZB1AAQogQiADYCCCAGIABB1ABqIgM2AhAgACABQdQAEPMDGiAGIAM2AgwgBkEYaiACIAZBFGogBkEUaiAGQQhqELwBIAYoAhRBxQAQDCAGKAIIIgBFDQEgBiAANgIMIAAQmAQMAQsgCgJ/IAAgCHEgCUEBTQ0AGiAAIAAgBEkNABogACAEcAsiAkECdGooAgAiA0UNASADKAIAIgNFDQEgCUEBSyEHA0ACQAJAIAAgAygCBCIFRwRAAkAgB0UEQCAFIAhxIQUMAQsgBCAFSw0AIAUgBHAhBQsgAiAFRg0BDAULIAMoAgggAEYNAQsgAygCACIDDQEMAwsLIAMoAhAiBSADKAIUIgRJBEAgAyAFIAFB1AAQ8wNB1ABqNgIQDAELIAUgAygCDCIAayIFQdQAbSIIQQFqIgJBxOGwGE8NASACIAQgAGtB1ABtIgRBAXQiByACIAdLG0HD4bAYIARB4bCYDEkbIgQEfyAEQcThsBhPDQIgBEHUAGwQogQFQQALIgIgCEHUAGxqIAFB1AAQ8wMiCCAFQax/bUHUAGxqIQcgAiAEQdQAbGohBCAIQdQAaiECIAVBAEoEQCAHIAAgBRDzAxoLIAMgBDYCFCADIAI2AhAgAyAHNgIMIABFDQAgABCYBAsgBkEgaiQADwsQAAALxAQCBn8CfSACKAIAIQYgAAJ/AkAgASgCBCIFRQ0AIAEoAgACfyAFQQFrIAZxIAVpIgdBAU0NABogBiAFIAZLDQAaIAYgBXALIghBAnRqKAIAIgJFDQAgBUEBayEJIAdBAUshCgNAIAIoAgAiAkUNASAGIAIoAgQiB0cEQAJAIApFBEAgByAJcSEHDAELIAUgB0sNACAHIAVwIQcLIAcgCEcNAgsgAigCCCAGRw0AC0EADAELQRgQogQiAiADKAIANgIIIAIgBCgCADYCDCACIAQoAgQ2AhAgAiAEKAIINgIUIARBADYCCCAEQgA3AgAgAiAGNgIEIAJBADYCAAJAQQAgBSABKAIMQQFqsyIMIAEqAhAiCyAFs5ReGw0AIAUgBUEBa3FBAEcgBUEDSXIgBUEBdHIhByABAn8gDCALlY0iC0MAAIBPXSALQwAAAABgcQRAIAupDAELQQALIgUgByAFIAdLGxAVIAEoAgQiBSAFQQFrcUUEQCAFQQFrIAZxIQgMAQsgBSAGSwRAIAYhCAwBCyAGIAVwIQgLAkAgASgCACAIQQJ0aiIHKAIAIgZFBEAgAiABKAIINgIAIAEgAjYCCCAHIAFBCGo2AgAgAigCACIGRQ0BIAYoAgQhBgJAIAUgBUEBayIHcUUEQCAGIAdxIQYMAQsgBSAGSw0AIAYgBXAhBgsgASgCACAGQQJ0aiACNgIADAELIAIgBigCADYCACAGIAI2AgALIAEgASgCDEEBajYCDEEBCzoABCAAIAI2AgALFAAgAEHEqwEQvgEgAEHYqwEQvgEL1AMBB38jAEEQayIGJAAgBiAANgIMAkAgASgCBCIERQ0AAkAgBGkiBUEBTQRAIARBAWsgAHEhAwwBCyAEIAAiA0sNACAAIARwIQMLIAEoAgAgA0ECdGooAgAiAkUNACACKAIAIgJFDQAgBEEBayEIIAVBAUshBwNAAkACQCAAIAIoAgQiBUcEQAJAIAdFBEAgBSAIcSEFDAELIAQgBUsNACAFIARwIQULIAMgBUYNAQwECyACKAIIIABGDQELIAIoAgAiAg0BDAILCyACKAIMIgQgAigCECIHRwRAA0ACQCAEELkBIgJBvKsBRg0AIAIoAmQQlQJB6KoBQeiqASgCAEEBazYCACAEELkBIgNBvKsBRg0AAkAgAygCBCICRQRAIAMoAggiBSgCACADRg0BIANBCGohAANAIAAoAgAiAkEIaiEAIAIgAigCCCIFKAIARw0ACwwBCwNAIAIiBSgCACICDQALCyADQbirASgCAEYEQEG4qwEgBTYCAAtBwKsBQcCrASgCAEEBazYCAEG8qwEoAgAgAxC/ASADKAJoIgIEQCADIAI2AmwgAhCYBAsgAxCYBAsgBEHUAGoiBCAHRw0ACwsgASAGQQxqEBMLIAZBEGokAAvdCQEGfwJ/AkACQCABIgIoAgAiBARAIAEoAgQiA0UNAQNAIAMiAigCACIDDQALCyACKAIEIgQNAUEAIQRBAQwCCwsgBCACKAIINgIIQQALIQYCfwJ/IAIgAigCCCIDKAIARgRAIAMgBDYCACAAIAJGBEAgBCEAQQAMAwsgAigCCEEEagwBCyADIAQ2AgQgAigCCAsoAgALIQMgAi0ADCEHIAEgAkcEQCACIAEoAggiBTYCCCAFIAEoAggoAgAgAUdBAnRqIAI2AgAgAiABKAIAIgU2AgAgBSACNgIIIAIgASgCBCIFNgIEIAUEQCAFIAI2AggLIAIgAS0ADDoADCACIAAgACABRhshAAsCQCAHRQ0AIABFDQAgBgRAA0AgAy0ADCECAkAgAyADKAIIIgEoAgBHBEAgAkH/AXFFBEAgA0EBOgAMIAFBADoADCADKAIIIgIgAigCBCIBKAIAIgQ2AgQgBARAIAQgAjYCCAsgASACKAIINgIIIAIoAggiBCAEKAIAIAJHQQJ0aiABNgIAIAEgAjYCACACIAE2AgggAyAAIAAgAygCACICRhshACACKAIEIQMLAkACQAJAAkAgAygCACICBEAgAi0ADEUNAQsgAygCBCIBBEAgAS0ADEUNAgsgA0EAOgAMAkAgACADKAIIIgNGBEAgACEDDAELIAMtAAwNBgsgA0EBOgAMDwsgAygCBCIBRQ0BCyABLQAMDQAgAyECDAELIAJBAToADCADQQA6AAwgAyADKAIAIgIoAgQiADYCACAABEAgACADNgIICyACIAMoAgg2AgggAygCCCIAIAAoAgAgA0dBAnRqIAI2AgAgAiADNgIEIAMgAjYCCAsgAiACKAIIIgMtAAw6AAwgA0EBOgAMIAIoAgRBAToADCACKAIIIgMgAygCBCICKAIAIgA2AgQgAARAIAAgAzYCCAsgAiADKAIINgIIIAMoAggiACAAKAIAIANHQQJ0aiACNgIAIAIgAzYCACADIAI2AggPCyACQf8BcUUEQCADQQE6AAwgAUEAOgAMIAMoAggiAiACKAIAIgEoAgQiBDYCACAEBEAgBCACNgIICyABIAIoAgg2AgggAigCCCIEIAQoAgAgAkdBAnRqIAE2AgAgASACNgIEIAIgATYCCCADIAAgACADKAIEIgJGGyEAIAIoAgAhAwsCQAJAIAMoAgAiAkUNACACLQAMDQAgAyECDAELAkAgAygCBCIBBEAgAS0ADEUNAQsgA0EAOgAMIAMoAggiAy0ADEEAIAAgA0cbDQIgA0EBOgAMDwsgAgR/IAItAAxFBEAgAyECDAILIAMoAgQFIAELQQE6AAwgA0EAOgAMIAMgAygCBCICKAIAIgA2AgQgAARAIAAgAzYCCAsgAiADKAIINgIIIAMoAggiACAAKAIAIANHQQJ0aiACNgIAIAIgAzYCACADIAI2AggLIAIgAigCCCIDLQAMOgAMIANBAToADCACKAIAQQE6AAwgAigCCCIDIAMoAgAiAigCBCIANgIAIAAEQCAAIAM2AggLIAIgAygCCDYCCCADKAIIIgAgACgCACADR0ECdGogAjYCACACIAM2AgQgAyACNgIIDwsgAygCCCICIAIoAgAgA0ZBAnRqKAIAIQMMAAsACyAEQQE6AAwLC+MkAxF/BXsFfSMAQYABayIHJAAgABALIQAgARALKAIAIQwgACgCACEVIAAoAgQhACAHQgA3A1ggB/0MAAAAAAAAAAAAAAAAAAAAAP0LA0ggAEEETwRAIABBAnYhC0EAIQADQCAEIAwgAEECdGoqAgAiHV0EQCAHKAJQIAcoAkwiCGsiAUECdUHVAmxBAWtBACABGyAHKAJcIAcoAlhqIgFGBEAgB0HIAGoQwQEgBygCTCEIIAcoAlggBygCXGohAQsgCCABQdUCbiIJQQJ0aigCACABIAlB1QJsa0EMbGoiAUEANgIIIAEgHTgCBCABIAA2AgAgByAHKAJcQQFqIg02AlwgBygCTCIBIAcoAlgiCEHVAm4iCkECdGohCSAHAn8gASAHKAJQRgRAIAEgCCANakHVAm5BAnRqIQFBACENQQAMAQsgASAIIA1qIg1B1QJuIg5BAnRqIgEoAgAgDSAOQdUCbGtBDGxqIQ0gCSgCACAIIApB1QJsa0EMbGoLNgJsIAcgCTYCaCAHIA02AjwgByABNgI4IAcgBykDaDcDICAHIAcpAzg3AxggB0EgaiAHQRhqEMIBCyAAQQFqIgAgC0cNAAsLQQAhCSAHQQA2AkAgB0IANwM4IAdBADYCMCAHQgA3AygCQAJAIAJFBEBBACELDAELQQAhCyAHKAJcIgpFDQBDAAAAvyAFlUMAAAAAIAVDAAAAAF4bISADQCAHKAJMIgEgBygCWCIIQdUCbiIAQQJ0aiIJKAIAIAggAEHVAmxrIgtBDGxqIgAoAgghDCAAKgIEIR4gACgCACENAkAgBygCUCABRg0AIAEgCCAKaiIIQdUCbiIKQQJ0aiIOKAIAIAggCkHVAmxrIgFBDGxqIgggAEYNACABIAtrIA4gCWtBAnVB1QJsaiILQQJIDQAgAEEIaiEKIAFFBEAgDkEEaygCAEH8H2ohCAsgB0HwAGoiDiAKKAIANgIAIAcgACkCADcDaCAKIAhBDGsiAUEIaiIIKAIANgIAIAAgASkCADcCACAIIA4oAgA2AgAgASAHKQNoNwIAIAtBAWsiDkECSQ0AIAAgCSgCAGsiAUEMbSEIAn8gAUF1TgRAIAkgCEEBaiIBQdUCbiIIQQJ0aiIPKAIAIhMgASAIQdUCbGtBDGxqDAELQdMCIAhrIgFB1QJuIghB1QJsIAFrQQxsIAkgCEECdGsiDygCACITakHwH2oLIQEgAEEEaiERQQEhCAJAIA5BA0kNACABIBNrIhJBDG0hECABKgIEIR0gASgCACEUIB0CfyASQXVOBEAgDyAQQQFqIhJB1QJuIhBBAnRqKAIAIBIgEEHVAmxrQQxsagwBC0HTAiAQayISQdUCbiIQQdUCbCASa0EMbCAPIBBBAnRrKAIAakHwH2oLIhIqAgQiBV1FBEAgBSAdXA0BIBQgEigCAEwNAQtBAiEIIAFBDGoiASATa0H8H0cNACAPKAIEIQELIAEqAgQiBSARKgIAIh1dDQAgACgCACEUIAUgHVsEQCABKAIAIBRKDQELIAtBA2tBAXYhEiAKKAIAIRYgACEKA0ACQCAKIAEiCykCADcCACAKIAEoAgg2AgggCCASSg0AAn8gCEEBdCIKQQFyIgggACAJKAIAa0EMbWoiAUEASgRAIAkgAUHVAm4iD0ECdGoiEygCACIRIAEgD0HVAmxrQQxsagwBC0HUAiABayIBQdUCbiIRQdUCbCABa0EMbCAJIBFBAnRrIhMoAgAiEWpB8B9qCyEBAkAgCkECaiIKIA5ODQAgASARayIPQQxtIRAgASoCBCEFIAEoAgAhFyAFAn8gD0F1TgRAIBMgEEEBaiIPQdUCbiIQQQJ0aigCACAPIBBB1QJsa0EMbGoMAQtB0wIgEGsiD0HVAm4iEEHVAmwgD2tBDGwgEyAQQQJ0aygCAGpB8B9qCyIPKgIEIh9dRQRAIAUgH1wNASAXIA8oAgBMDQELIAFBDGoiASARa0H8H0YEQCATKAIEIQELIAohCAsgASoCBCIFIB1dDQAgCyEKIAUgHVwNASABKAIAIBRMDQELCyALIBY2AgggCyAdOAIEIAsgFDYCAAsgByAHKAJcIgBBAWs2AlwgBygCUCIKIAcoAkxrIgFBAnVB1QJsQQFrQQAgARsgACAHKAJYamtBAWpBqgVPBEAgCkEEaygCABCYBCAHIAcoAlBBBGsiCjYCUAsgBygCOCEJIAcoAjwhCyAEIB5eDQEgFSANQQR0aiEBIB4hBSALIAlrIg5BAnUiESEAAkADQCAMIABBAWsiAEwEQEMAAAAAIR0CQCAB/V0CACIYIAH9XQIIIhn96wEiGyAYIBn96gEiGf3lASIY/R8AIBj9HwGUIh9DAAAAAF8NACAVIAkgAEECdGooAgBBBHRqIgj9XQIAIhggCP1dAggiGv3rASIcIBggGv3qASIa/eUBIhj9HwAgGP0fAZQiIUMAAAAAXw0AIBsgHP3qASAZIBr96wH95QH9DAAAAAAAAAAAAAAAAAAAAAD96QEiGP0fACAY/R8BlCIdIB8gIZIgHZOVIR0LIAMgHV8NAiAFIB0gICAdlJQQ/gNDAAAAACADIB1gG5QiBSAEX0UNAQsLIAUgHlsEQAJAIAcoAkAgC0cEQCALIA02AgAgByALQQRqNgI8DAELIBFBAWoiAEGAgICABE8NBSAAIA5BAXUiASAAIAFLG0H/////AyAOQfz///8HSRsiAQR/IAFBgICAgARPDQYgAUECdBCiBAVBAAsiACARQQJ0aiIIIA02AgAgACABQQJ0aiEBIAhBBGohCCAOQQBKBEAgACAJIA4Q8wMaCyAHIAE2AkAgByAINgI8IAcgADYCOCAJRQ0AIAkQmAQLIAcoAiwiACAHKAIwRwRAIAAgBTgCACAHIABBBGo2AiwMAgsgACAHKAIoIghrIgBBAnUiDEEBaiIBQYCAgIAETw0EIAEgAEEBdSIJIAEgCUsbQf////8DIABB/P///wdJGyIJBH8gCUGAgICABE8NBSAJQQJ0EKIEBUEACyIBIAxBAnRqIgwgBTgCACABIAlBAnRqIQkgDEEEaiEMIABBAEoEQCABIAggABDzAxoLIAcgCTYCMCAHIAw2AiwgByABNgIoIAhFDQEgCBCYBAwBCyAEIAVdRQ0AIAogBygCTCIBayIAQQJ1QdUCbEEBa0EAIAAbIAcoAlwgBygCWGoiAEYEQCAHQcgAahDBASAHKAJMIQEgBygCWCAHKAJcaiEACyABIABB1QJuIghBAnRqKAIAIAAgCEHVAmxrQQxsaiIAIBE2AgggACAFOAIEIAAgDTYCACAHIAcoAlxBAWoiCTYCXCAHKAJMIgAgBygCWCIIQdUCbiIMQQJ0aiEBIAcCfyAAIAcoAlBGBEAgACAIIAlqQdUCbkECdGohAEEAIQlBAAwBCyAAIAggCWoiCUHVAm4iC0ECdGoiACgCACAJIAtB1QJsa0EMbGohCSABKAIAIAggDEHVAmxrQQxsags2AmwgByABNgJoIAcgCTYCfCAHIAA2AnggByAHKQNoNwMQIAcgBykDeDcDCCAHQRBqIAdBCGoQwgELIAcoAjwiCyAHKAI4IglrQQJ1IAJPDQEgBygCXCIKDQALCyALIAlrIgBBAnUhASAGBH8gB0EANgJoAkAgASACSQRAIAdB6ABqIQkgAiABayIGIAdBOGoiDSgCCCIAIA0oAgQiCGtBAnVNBEAgDSAGBH8gCCAGQQJ0aiEAAkACQCAGQQFrQf////8DcSIKQQNJDQAgCUEEaiAISyAGQQJ0IAhqIAlLcQ0AIApBAWoiD0H8////B3EiEEEEayIKQQJ2QQFqIgtBAXEhDgJAIApFBEBBACEKDAELIAtB/v///wdxIQwgCf0JAgAhGEEAIQpBACELA0AgCCAKQQJ0IgZqIBj9CwIAIAggBkEQcmogGP0LAgAgCkEIaiEKIAtBAmoiCyAMRw0ACwsgDgRAIAggCkECdGogCf0JAgD9CwIACyAPIBBGDQEgCCAQQQJ0aiEICwNAIAggCSgCADYCACAIQQRqIgggAEcNAAsLIAAFIAgLNgIEDAILAkAgCCANKAIAIgprQQJ1IgsgBmoiDEGAgICABE8NACAMIAAgCmsiAEEBdSIKIAogDEkbQf////8DIABB/P///wdJGyIOBH8gDkGAgICABE8NASAOQQJ0EKIEBUEACyIPIAtBAnRqIgsgBkECdGohCgJAAn8gCyAGQQFrQf////8DcSIGQQNJDQAaIAlBBGogC0sEQCALIAxBAnQgD2ogCUsNARoLIAZBAWoiEkH8////B3EiEUEEayIAQQJ2QQFqIgZBAXEhEwJAIABFBEBBACEADAELIAZB/v///wdxIRAgCf0JAgAhGEEAIQBBACEGA0AgCyAAQQJ0IgxqIBj9CwIAIAsgDEEQcmogGP0LAgAgAEEIaiEAIAZBAmoiBiAQRw0ACwsgEwRAIAsgAEECdGogCf0JAgD9CwIACyARIBJGDQEgCyARQQJ0agshAANAIAAgCSgCADYCACAAQQRqIgAgCkcNAAsLIA8gDkECdGohBiALIAggDSgCACIAayIIayEJIAhBAEoEQCAJIAAgCBDzAxoLIA0gBjYCCCANIAo2AgQgDSAJNgIAIAAEQCAAEN0DCwwCCxAAAAsgASACTQ0AIAcgCSACQQJ0ajYCPAsgB0EANgJoAkAgAiAHKAIsIAcoAigiCGtBAnUiAEsEQCAHQegAaiELIAIgAGsiACAHQShqIgwoAggiBiAMKAIEIgprQQJ1TQRAIAwgAAR/IAogAEECdGohBgJAAkAgAEEBa0H/////A3EiAkEDSQ0AIAtBBGogCksgAEECdCAKaiALS3ENACACQQFqIg5B/P///wdxIg9BBGsiAkECdkEBaiIIQQFxIQ0CQCACRQRAQQAhAgwBCyAIQf7///8HcSEJIAv9CQIAIRhBACECQQAhCANAIAogAkECdCIAaiAY/QsCACAKIABBEHJqIBj9CwIAIAJBCGohAiAIQQJqIgggCUcNAAsLIA0EQCAKIAJBAnRqIAv9CQIA/QsCAAsgDiAPRg0BIAogD0ECdGohCgsDQCAKIAsqAgA4AgAgCkEEaiIKIAZHDQALCyAGBSAKCzYCBAwCCwJAIAogDCgCACICa0ECdSIIIABqIglBgICAgARPDQAgCSAGIAJrIgZBAXUiAiACIAlJG0H/////AyAGQfz///8HSRsiDQR/IA1BgICAgARPDQEgDUECdBCiBAVBAAsiDiAIQQJ0aiIIIABBAnRqIQICQAJ/IAggAEEBa0H/////A3EiAEEDSQ0AGiALQQRqIAhLBEAgCCAJQQJ0IA5qIAtLDQEaCyAAQQFqIhFB/P///wdxIhBBBGsiBkECdkEBaiIAQQFxIRICQCAGRQRAQQAhBgwBCyAAQf7///8HcSEPIAv9CQIAIRhBACEGQQAhAANAIAggBkECdCIJaiAY/QsCACAIIAlBEHJqIBj9CwIAIAZBCGohBiAAQQJqIgAgD0cNAAsLIBIEQCAIIAZBAnRqIAv9CQIA/QsCAAsgECARRg0BIAggEEECdGoLIQYDQCAGIAsqAgA4AgAgBkEEaiIGIAJHDQALCyAOIA1BAnRqIQAgCCAKIAwoAgAiBmsiCmshCyAKQQBKBEAgCyAGIAoQ8wMaCyAMIAA2AgggDCACNgIEIAwgCzYCACAGBEAgBhDdAwsMAgsQAAALIAAgAk0NACAHIAggAkECdGo2AiwLIAcoAjwgBygCOCIJayIAQQJ1BSABCyEIIAAQlgQgCSAAEPMDIRUgBygCLCAHKAIoIgBrIgwQlgQgACAMEPMDIQtBBBCWBCINIAE2AgBBEBCiBCIMIA02AgwgDCALNgIIIAwgCDYCBCAMIBU2AgAgAARAIAcgADYCLCAAEJgEIAcoAjghCQsgCQRAIAcgCTYCPCAJEJgECyAHQQA2AlwgBygCUCIBIAcoAkwiAGsiCEEJTwRAA0AgACgCABCYBCAHIAcoAkxBBGoiADYCTCAHKAJQIgEgAGsiCEEISw0ACwtBqgEhCQJAAkACQCAIQQJ2QQFrDgIBAAILQdUCIQkLIAcgCTYCWAsCQCAAIAFGDQADQCAAKAIAEJgEIABBBGoiACABRw0ACyAHKAJQIgAgBygCTCIBRg0AIAcgACAAIAFrQQRrQQJ2QX9zQQJ0ajYCUAsgBygCSCIABEAgABCYBAsgB0GAAWokACAMDwsQAAALpBoBEH8CQAJAIAAoAhAiAUHVAk8EQCAAIAFB1QJrNgIQIAAoAgQiAigCACEIIAAgAkEEaiIBNgIEAkAgACgCCCIDIAAoAgxHDQAgACgCACIJIAFJBEAgASABIAlrQQJ1QQFqQX5tQQJ0IgVqIQIgAyABayIDBEAgAiABIAMQ9AMgACgCBCEBCyAAIAIgA2oiAzYCCCAAIAEgBWo2AgQMAQsgAyAJayIFQQF1QQEgBRsiBkGAgICABE8NAiAGQQJ0IgUQogQiCyAFaiEOIAMgAWshBCALIAZBfHFqIgUhAwJAIARFDQAgBSAEQXxxaiEDAn8gBSAEQQRrIgdBDEkNABoCQCALIAZBfHEiBmogBEEEa0F8cSIEIAJqQQhqTw0AIAQgBmogC2pBBGogAU0NACAFDAELIAdBAnZBAWoiEEH8////B3EiDEEEayIEQQJ2QQFqIgdBA3EhDUEAIQZBACECIARBDE8EQCAHQfz///8HcSEPQQAhBwNAIAUgAkECdCIEaiABIARq/QACAP0LAgAgBSAEQRByIgpqIAEgCmr9AAIA/QsCACAFIARBIHIiCmogASAKav0AAgD9CwIAIAUgBEEwciIEaiABIARq/QACAP0LAgAgAkEQaiECIAdBBGoiByAPRw0ACwsgDQRAA0AgBSACQQJ0IgRqIAEgBGr9AAIA/QsCACACQQRqIQIgBkEBaiIGIA1HDQALCyAMIBBGDQEgASAMQQJ0IgJqIQEgAiAFagshAgNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIANHDQALCyAAIA42AgwgACADNgIIIAAgBTYCBCAAIAs2AgAgCUUNACAJEJgEIAAoAgghAwsgAyAINgIAIAAgACgCCEEEajYCCA8LIAAoAggiCCAAKAIEIgJrIgZBAnUiBSAAKAIMIgMgACgCACIEayIBQQJ1SQRAQfwfEKIEIQkgAyAIayIBBEACQCADIAhHDQAgAiAESwRAIAIgAiAEa0ECdUEBakF+bUECdCIDaiEBIAAgBgR/IAEgAiAGEPQDIAAoAgQFIAILIANqNgIEIAAgASAFQQJ0aiIINgIIDAELIAggBGsiAUEBdUEBIAEbIgFBgICAgARPDQMgAUECdCIDEKIEIgsgA2ohDiALIAFBfHFqIgMhCAJAIAZFDQAgAyAFQQJ0aiEIAn8gAyAGQQRrIgVBDEkNABoCQCALIAFBfHEiAWogBkEEa0F8cSIGIAJqQQRqTw0AIAEgBmogC2pBBGogAk0NACADDAELIAVBAnZBAWoiEEH8////B3EiDEEEayIFQQJ2QQFqIgdBA3EhDUEAIQZBACEBIAVBDE8EQCAHQfz///8HcSEPQQAhBwNAIAMgAUECdCIFaiACIAVq/QACAP0LAgAgAyAFQRByIgpqIAIgCmr9AAIA/QsCACADIAVBIHIiCmogAiAKav0AAgD9CwIAIAMgBUEwciIFaiACIAVq/QACAP0LAgAgAUEQaiEBIAdBBGoiByAPRw0ACwsgDQRAA0AgAyABQQJ0IgVqIAIgBWr9AAIA/QsCACABQQRqIQEgBkEBaiIGIA1HDQALCyAMIBBGDQEgAiAMQQJ0IgFqIQIgASADagshAQNAIAEgAigCADYCACACQQRqIQIgAUEEaiIBIAhHDQALCyAAIA42AgwgACAINgIIIAAgAzYCBCAAIAs2AgAgBEUNACAEEJgEIAAoAgghCAsgCCAJNgIAIAAgACgCCEEEajYCCA8LAkAgAiAERwRAIAIhBAwBCyADIAhLBEAgCCABQQJ2QQFqQQF2QQJ0IgFqIQQgBgRAIAQgBUECdGsiBCACIAYQ9AMgACgCCCEICyAAIAQ2AgQgACABIAhqNgIIDAELIAMgAmsiAUEBdUEBIAEbIgFBgICAgARPDQIgAUECdCIDEKIEIgogA2ohDyAKIAFBA2oiB0F8cWoiBCEIAkAgBkUNACAEIAVBAnRqIQggAiEDAn8gBCAGQQRrIgVBDEkNABogCiAHQXxxIgdqIAZBBGtBfHEiBiACakEEakkEQCAEIAYgB2ogCmpBBGogAksNARoLIAVBAnZBAWoiDEH8////B3EiDkEEayIDQQJ2QQFqIgZBA3EhC0EAIQVBACEBIANBDE8EQCAGQfz///8HcSENQQAhBgNAIAQgAUECdCIDaiACIANq/QACAP0LAgAgBCADQRByIgdqIAIgB2r9AAIA/QsCACAEIANBIHIiB2ogAiAHav0AAgD9CwIAIAQgA0EwciIDaiACIANq/QACAP0LAgAgAUEQaiEBIAZBBGoiBiANRw0ACwsgCwRAA0AgBCABQQJ0IgNqIAIgA2r9AAIA/QsCACABQQRqIQEgBUEBaiIFIAtHDQALCyAMIA5GDQEgAiAOQQJ0IgFqIQMgASAEagshAQNAIAEgAygCADYCACADQQRqIQMgAUEEaiIBIAhHDQALCyAAIA82AgwgACAINgIIIAAgBDYCBCAAIAo2AgAgAkUNACACEJgEIAAoAgQhBAsgBEEEayAJNgIAIAAgACgCBCIBQQRrIgI2AgQgAigCACEIIAAgATYCBAJAIAAoAggiAyAAKAIMRw0AIAAoAgAiCSABSQRAIAEgASAJa0ECdUEBakF+bUECdCIFaiECIAMgAWsiAwRAIAIgASADEPQDIAAoAgQhAQsgACACIANqIgM2AgggACABIAVqNgIEDAELIAMgCWsiAkEBdUEBIAIbIgRBgICAgARPDQIgBEECdCICEKIEIgsgAmohDiADIAFrIQIgCyAEQXxxaiIFIQMCQCACRQ0AIAUgAkF8cWohAwJ/IAUgAkEEayIGQQxJDQAaAkAgCyAEQXxxIgRqIAJBBGtBfHEiAiABakEEak8NACACIARqIAtqQQRqIAFNDQAgBQwBCyAGQQJ2QQFqIhBB/P///wdxIgxBBGsiBEECdkEBaiIHQQNxIQ1BACEGQQAhAiAEQQxPBEAgB0H8////B3EhD0EAIQcDQCAFIAJBAnQiBGogASAEav0AAgD9CwIAIAUgBEEQciIKaiABIApq/QACAP0LAgAgBSAEQSByIgpqIAEgCmr9AAIA/QsCACAFIARBMHIiBGogASAEav0AAgD9CwIAIAJBEGohAiAHQQRqIgcgD0cNAAsLIA0EQANAIAUgAkECdCIEaiABIARq/QACAP0LAgAgAkEEaiECIAZBAWoiBiANRw0ACwsgDCAQRg0BIAEgDEECdCICaiEBIAIgBWoLIQIDQCACIAEoAgA2AgAgAUEEaiEBIAJBBGoiAiADRw0ACwsgACAONgIMIAAgAzYCCCAAIAU2AgQgACALNgIAIAlFDQAgCRCYBCAAKAIIIQMLIAMgCDYCACAAIAAoAghBBGo2AggPCyABQQF1QQEgARsiBEGAgICABE8NACAEQQJ0IgEQogQiBiABaiEBIAYgBUECdGohA0H8HxCiBCEJAkAgBCAFRw0AIAMgBmshBSADIAZLBEAgAyAFQQJ1QQFqQX5tQQJ0aiEDDAELIAVBAXVBASAFGyICQYCAgIAETw0BIAJBAnQiARCiBCEFIAYQmAQgASAFaiEBIAUgAkF8cWohAyAAKAIEIQIgACgCCCEIIAUhBgsgAyAJNgIAIANBBGohBSACIAhGDQEDQAJAIAMgBkcEQCADIQQMAQsgASAFSwRAIAUgA2shAiAFIAEgBWtBAnVBAWpBAm1BAnRqIQUgAkUEQCADIQYgBSEEDAILIAUgAmsiBCADIAIQ9AMgAyEGDAELIAEgA2siAUEBdUEBIAEbIgFBgICAgARPDQIgBSADayEJIAFBAnQiDxCiBCIGIAFBA2pBfHEiB2oiBCEFAkAgCUUNACAEIAlBfHFqIQUgAyECAn8gBCAJQQRrIglBDEkNABogBiAHaiADIAlBfHEiCmpBBGpJBEAgBCADIAYgByAKampBBGpJDQEaCyAJQQJ2QQFqIgxB/P///wdxIg5BBGsiAkECdkEBaiIHQQNxIQtBACEJQQAhASACQQxPBEAgB0H8////B3EhDUEAIQcDQCAEIAFBAnQiAmogAiADav0AAgD9CwIAIAQgAkEQciIKaiADIApq/QACAP0LAgAgBCACQSByIgpqIAMgCmr9AAIA/QsCACAEIAJBMHIiAmogAiADav0AAgD9CwIAIAFBEGohASAHQQRqIgcgDUcNAAsLIAsEQANAIAQgAUECdCICaiACIANq/QACAP0LAgAgAUEEaiEBIAlBAWoiCSALRw0ACwsgDCAORg0BIAMgDkECdCIBaiECIAEgBGoLIQEDQCABIAIoAgA2AgAgAkEEaiECIAFBBGoiASAFRw0ACwsgBiAPaiEBIAMQmAQLIARBBGsiAyAIQQRrIggoAgA2AgAgCCAAKAIERw0ACwwBCxAAAAsgACABNgIMIAAgBTYCCCAAIAM2AgQgACgCACEBIAAgBjYCACABBEAgARCYBAsLkgQDCH8CfQJ+AkAgASkCACIMQiCIpyIBIAApAgAiDUIgiKciB0YNACAMpyIEIA2nIgZrQQJ1QdUCbCABIAQoAgAiBWtBDG1qIAcgBigCAGsiA0F0bWoiAEECSA0AIABBAmsiCEEBdiEAAn8gByAIQQJJDQAaIANBDG0gAGoiAkEASgRAIAYgAkHVAm4iA0ECdGooAgAgAiADQdUCbGtBDGxqDAELQdQCIAJrIgJB1QJuIgNB1QJsIAJrQQxsIAYgA0ECdGsoAgBqQfAfagsiAioCBCEKIAEgBUYEfyAEQQRrKAIAQfwfagUgAQtBDGsiASgCACEDIAogASoCBCILXUUEQCAKIAtcDQEgAigCACADTA0BCyABQQhqIgQoAgAhCSABIAIpAgA3AgAgBCACKAIINgIAAkAgCEECSQ0AA0AgAEEBa0ECbSEEAn8gByAAQQNJDQAaIAcgBigCAGtBDG0gBGoiAUEASgRAIAYgAUHVAm4iBUECdGooAgAgASAFQdUCbGtBDGxqDAELQdQCIAFrIgFB1QJuIgVB1QJsIAFrQQxsIAYgBUECdGsoAgBqQfAfagsiASoCBCIKIAtdRQRAIAogC1wNAiABKAIAIANMDQILIAIgASkCADcCACACIAEoAgg2AgggAEECSyEFIAEhAiAEIQAgBQ0ACwsgAiAJNgIIIAIgCzgCBCACIAM2AgALCxAAQeyrAUHwqwEoAgAQxAELIAAgAQRAIAAgASgCABDEASAAIAEoAgQQxAEgARCYBAsL2wQCBn8BfSMAQSBrIgMkACAAEAshACABEAsiBSgCACEGIAAoAgAhByADQQA2AhwCQAJAAkACQAJAQfCrASgCACIARQ0AQfCrASEBA0ACQCAAKgIQIglDAAAAAF0EQCAAQQRqIQAMAQsCQCAJQwAAAABeDQAgACoCFCACXUUNACAAQQRqIQAMAQsgACEBCyAAKAIAIgANAAsgAUHwqwFGDQAgASoCECIJQwAAAABeDQAgCUMAAAAAXQ0BIAEqAhQgAl5FDQELQwAAAAAgAkEBIANBHGoQggIiAARAIAMgADYCEEH1JyADQRBqEBgMBAtB8KsBIQRB8KsBKAIAIgBFBEBB8KsBIQAMAgsDQAJAAkACQCAAKgIQIglDAAAAAF5FBEAgCUMAAAAAXQ0CIAAqAhQiCSACXkUNAQsgACgCACIBDQIgACEEDAULIAIgCV5FDQQLIABBBGohBCAAKAIEIgFFDQMgBCEACyAAIQQgASEADAALAAsgAyABKAIYIgA2AhwMAQsgBCgCAEUEQEEcEKIEIgEgAjgCFCABQwAAAAA4AhAgAygCHCEIIAEgADYCCCABQgA3AgAgASAINgIYIAQgATYCAEHsqwEoAgAoAgAiAARAQeyrASAANgIAIAQoAgAhAQtB8KsBKAIAIAEQJUH0qwFB9KsBKAIAQQFqNgIAC0HoqgFB6KoBKAIAQQFqNgIAIAMoAhwhAAsgACAFKAIEIAcgBkHsqgEoAgAQjQIiAARAIAMgADYCAEGRJyADEBgMAQsgAygCHEHsqgEoAgAQrwILIANBIGokAAtBAQF/QYCsASgCACIABEADQCAAKAIAIQEgABCYBCABIgANAAsLQfirASgCACEAQfirAUEANgIAIAAEQCAAEJgECwvkHQIVfwF7IAAQCyEAIAMQCyEDIAYQCyEGIAAoAgAhGSAAKAIEIQAgAygCACEaIAMoAgQhFiAGKAIAIRsgBCEGIwBB8AFrIgkkACACQQJ0IRQCQAJAIAIEQCACQQBIDQEgFBCiBCISIAEgFBDzAyACQQJ0aiEKCyAFQQJ0IRUgBQRAIAVBAEgNASAVEKIEIhMgBiAVEPMDIAVBAnRqIQgLIAlBADYC2AEgCUIANwPQASAKIBJrIgtBAnUhAyALBEAgC0EASA0BIAkgCxCiBCIKNgLQASAJIAogA0ECdGo2AtgBIAkgCiASIAsQ8wMgC2o2AtQBCyAJQQA2AsgBIAlCADcDwAEgCCATayINQQJ1IQ8gDQRAIA1BAEgNASAJIA0QogQiCDYCwAEgCSAIIA9BAnRqNgLIASAJIAggEyANEPMDIA1qNgLEAQsgCUHgAWogCUHQAWogCUHAAWoQ5AEgCSgCwAEiCARAIAkgCDYCxAEgCBDdAwsgCSgC0AEiCARAIAkgCDYC1AEgCBDdAwsgCUEANgKoASAJQgA3A6ABIAkoAuQBIAkoAuABIgFrIggEQCAIQQBIDQEgCSAIEKIEIgo2AqABIAkgCjYCpAEgCSAKIAhBAnVBAnRqNgKoASAJIAogASAIEPMDIAhqNgKkAQsgCUGwAWogCUGgAWoQ4wEgCSgCoAEiCARAIAkgCDYCpAEgCBDdAwsCQCAJKALgASIIIAkoAuQBIgZGBEBBASERDAELQQEhESAGIAhrQQRrIgpBDE8EQCAKQQJ2QQFqIhhB/P///wdxIhdBBGsiCkECdkEBaiIBQQNxIQQCQCAKQQxJBED9DAEAAAABAAAAAQAAAAEAAAAhHUEAIQoMAQsgAUH8////B3EhEP0MAQAAAAEAAAABAAAAAQAAACEdQQAhCgNAIAggCkECdCIBQTByav0AAgAgCCABQSByav0AAgAgCCABQRByav0AAgAgASAIav0AAgAgHf21Af21Af21Af21ASEdIApBEGohCiAOQQRqIg4gEEcNAAsLIAQEQANAIAggCkECdGr9AAIAIB39tQEhHSAKQQRqIQogDEEBaiIMIARHDQALCyAdIB0gHf0NCAkKCwwNDg8AAAAAAAAAAP21ASIdIB0gHf0NBAUGBwAAAAAAAAAAAAAAAP21Af0bACERIBcgGEYNASAIIBdBAnRqIQgLA0AgCCgCACARbCERIAhBBGoiCCAGRw0ACwsgCUEANgKIASAJQgA3A4ABIAsEQCALQQBIDQEgCSALEKIEIgg2AoABIAkgCCADQQJ0ajYCiAEgCSAIIBIgCxDzAyALajYChAELIAlBkAFqIAlBgAFqEOMBIAkoAoABIggEQCAJIAg2AoQBIAgQ3QMLIAlBADYCaCAJQgA3A2AgDQRAIA1BAEgNASAJIA0QogQiCDYCYCAJIAggD0ECdGo2AmggCSAIIBMgDRDzAyANajYCZAsgCUHwAGogCUHgAGoQ4wEgCSgCYCIIBEAgCSAINgJkIAgQ3QMLIAlBADYCSCAJQgA3A0AgCwRAIAkgCxCiBCIINgJAIAkgCCADQQJ0ajYCSCAJIAggEiALEPMDIAtqNgJECyAJQQA2AjggCUIANwMwIAkoAuQBIAkoAuABIgFrIggEQCAIQQBIDQEgCSAIEKIEIgo2AjAgCSAKNgI0IAkgCiAIQQJ1QQJ0ajYCOCAJIAogASAIEPMDIAhqNgI0CyAJQdAAaiAJQUBrIAlBMGoQ5QEgCSgCMCIIBEAgCSAINgI0IAgQ3QMLIAkoAkAiCARAIAkgCDYCRCAIEN0DCyAJQQA2AhggCUIANwMQIA0EQCAJIA0QogQiCDYCECAJIAggD0ECdGo2AhggCSAIIBMgDRDzAyANajYCFAsgCUEANgIIIAlCADcDACAJKALkASAJKALgASIBayIIBEAgCEEASA0BIAkgCBCiBCIKNgIAIAkgCjYCBCAJIAogCEECdUECdGo2AgggCSAKIAEgCBDzAyAIajYCBAsgCUEgaiAJQRBqIAkQ5QEgCSgCACIIBEAgCSAINgIEIAgQ3QMLIAkoAhAiCARAIAkgCDYCFCAIEN0DCwJAAkAgCSgCVCAJKAJQRw0AIAkoAiQgCSgCIEcNACARRQ0BQQAhCANAIBsgCEECdGogGSAIIABwQQJ0aioCACAaIAggFnBBAnRqKgIAIAcREwA4AgAgCEEBaiIIIBFHDQALDAELIBFFDQBBACEAQQAgAmtBAnQhGEEAIAVrQQJ0IRwDQEEAIRBBACEWAkAgCSgCtAEgCSgCsAEiBmsiAUECdSIIQQFqIgogCEkNACAKQYCAgIAETw0DIApBAnQQogQiFkEAIAhBAnQiC0EEahD1AyIMIAtqIgNBBGohECABBEAgCEEBIAhBAUsbIgtBAXEhD0EAIQogACEIIAFBCE8EQCALQX5xIQRBACELA0AgDCAKQQJ0IgFqIAggASAGaigCACINbiIONgIAIAwgAUEEciIBaiAIIA0gDmxrIgggASAGaigCACIBbiINNgIAIAggASANbGshCCAKQQJqIQogC0ECaiILIARHDQALCyADIA8EfyAMIApBAnQiCmogCCAGIApqKAIAIgpuIgE2AgAgCCABIApsawUgCAs2AgAMAQsgDCAANgIACwJAIBRFBEBBACEEQQAhCgwBCyAUQQBIDQMgFBCiBCEEIAJFBEAgBCEKDAELIAQgECAYaiAUEPMDIgghCiAIIBRqIQQLAkAgCSgCVCAJKAJQIgFrIghFDQAgCEECdSIIQQEgCEEBSxsiBkEDcSENQQAhDEEAIQggBkEBa0EDTwRAIAZBfHEhDkEAIQsDQCAKIAEgCEECdCIGaigCAEECdGpBADYCACAKIAEgBkEEcmooAgBBAnRqQQA2AgAgCiABIAZBCHJqKAIAQQJ0akEANgIAIAogASAGQQxyaigCAEECdGpBADYCACAIQQRqIQggC0EEaiILIA5HDQALCyANRQ0AA0AgCiABIAhBAnRqKAIAQQJ0akEANgIAIAhBAWohCCAMQQFqIgwgDUcNAAsLAkACQAJAIAQgCmtBAnUiBA4CAgABCyAKKAIAIQQMAQsgCiAEQQFrIgtBAnRqKAIAIQQgC0UNACAJKAKQASEBQQAhCCALQQRPBED9DAAAAAAAAAAAAAAAAAAAAAAgBP0cACEdIAtBfHEiCEEEayIGQQJ2QQFqIgxBA3EhA0EAIQ0CQCAGQQxJBEBBACEGDAELIAxB/P///wdxIQ9BACEGQQAhDgNAIAogBkECdCIMQTByIgRq/QACACABIARq/QACAP21ASAKIAxBIHIiBGr9AAIAIAEgBGr9AAIA/bUBIAogDEEQciIEav0AAgAgASAEav0AAgD9tQEgCiAMav0AAgAgASAMav0AAgD9tQEgHf2uAf2uAf2uAf2uASEdIAZBEGohBiAOQQRqIg4gD0cNAAsLIAMEQANAIAogBkECdCIMav0AAgAgASAMav0AAgD9tQEgHf2uASEdIAZBBGohBiANQQFqIg0gA0cNAAsLIB0gHSAd/Q0ICQoLDA0ODwAAAAAAAAAA/a4BIh0gHSAd/Q0EBQYHAAAAAAAAAAAAAAAA/a4B/RsAIQQgCCALRg0BCwNAIAogCEECdCIGaigCACABIAZqKAIAbCAEaiEEIAhBAWoiCCALRw0ACwsCQCAVRQRAQQAhA0EAIQEMAQsgFUEASA0DIBUQogQhAyAFRQRAIAMhAQwBCyADIBAgHGogFRDzAyIIIQEgCCAVaiEDCwJAIAkoAiQgCSgCICIGayIIRQ0AIAhBAnUiCEEBIAhBAUsbIgxBA3EhDkEAIQtBACEIIAxBAWtBA08EQCAMQXxxIRBBACENA0AgASAGIAhBAnQiDGooAgBBAnRqQQA2AgAgASAGIAxBBHJqKAIAQQJ0akEANgIAIAEgBiAMQQhyaigCAEECdGpBADYCACABIAYgDEEMcmooAgBBAnRqQQA2AgAgCEEEaiEIIA1BBGoiDSAQRw0ACwsgDkUNAANAIAEgBiAIQQJ0aigCAEECdGpBADYCACAIQQFqIQggC0EBaiILIA5HDQALCwJAAkACQCADIAFrQQJ1IgYOAgIAAQsgASgCACEGDAELIAEgBkEBayINQQJ0aigCACEGIA1FDQAgCSgCcCEMQQAhCCANQQRPBED9DAAAAAAAAAAAAAAAAAAAAAAgBv0cACEdIA1BfHEiCEEEayIGQQJ2QQFqIgtBA3EhD0EAIQ4CQCAGQQxJBEBBACEGDAELIAtB/P///wdxIRdBACEGQQAhEANAIAEgBkECdCILQTByIgNq/QACACADIAxq/QACAP21ASABIAtBIHIiA2r9AAIAIAMgDGr9AAIA/bUBIAEgC0EQciIDav0AAgAgAyAMav0AAgD9tQEgASALav0AAgAgCyAMav0AAgD9tQEgHf2uAf2uAf2uAf2uASEdIAZBEGohBiAQQQRqIhAgF0cNAAsLIA8EQANAIAEgBkECdCILav0AAgAgCyAMav0AAgD9tQEgHf2uASEdIAZBBGohBiAOQQFqIg4gD0cNAAsLIB0gHSAd/Q0ICQoLDA0ODwAAAAAAAAAA/a4BIh0gHSAd/Q0EBQYHAAAAAAAAAAAAAAAA/a4B/RsAIQYgCCANRg0BCwNAIAEgCEECdCILaigCACALIAxqKAIAbCAGaiEGIAhBAWoiCCANRw0ACwsgGyAAQQJ0aiAZIARBAnRqKgIAIBogBkECdGoqAgAgBxETADgCACABBEAgARDdAwsgCgRAIAoQ3QMLIBYEQCAWEN0DCyAAQQFqIgAgEUcNAAsLIAkoAiAiCARAIAkgCDYCJCAIEN0DCyAJKAJQIggEQCAJIAg2AlQgCBDdAwsgCSgCcCIIBEAgCSAINgJ0IAgQ3QMLIAkoApABIggEQCAJIAg2ApQBIAgQ3QMLIAkoArABIggEQCAJIAg2ArQBIAgQ3QMLIAkoAuABIggEQCAJIAg2AuQBIAgQ3QMLIBMEQCATEN0DCyASBEAgEhDdAwsgCUHwAWokAAwBCxAAAAsL5B0CFX8BeyAAEAshACADEAshAyAGEAshBiAAKAIAIRkgACgCBCEAIAMoAgAhGiADKAIEIRYgBigCACEbIAQhBiMAQfABayIJJAAgAkECdCEUAkACQCACBEAgAkEASA0BIBQQogQiEiABIBQQ8wMgAkECdGohCgsgBUECdCEVIAUEQCAFQQBIDQEgFRCiBCITIAYgFRDzAyAFQQJ0aiEICyAJQQA2AtgBIAlCADcD0AEgCiASayILQQJ1IQMgCwRAIAtBAEgNASAJIAsQogQiCjYC0AEgCSAKIANBAnRqNgLYASAJIAogEiALEPMDIAtqNgLUAQsgCUEANgLIASAJQgA3A8ABIAggE2siDUECdSEPIA0EQCANQQBIDQEgCSANEKIEIgg2AsABIAkgCCAPQQJ0ajYCyAEgCSAIIBMgDRDzAyANajYCxAELIAlB4AFqIAlB0AFqIAlBwAFqEOQBIAkoAsABIggEQCAJIAg2AsQBIAgQ3QMLIAkoAtABIggEQCAJIAg2AtQBIAgQ3QMLIAlBADYCqAEgCUIANwOgASAJKALkASAJKALgASIBayIIBEAgCEEASA0BIAkgCBCiBCIKNgKgASAJIAo2AqQBIAkgCiAIQQJ1QQJ0ajYCqAEgCSAKIAEgCBDzAyAIajYCpAELIAlBsAFqIAlBoAFqEOMBIAkoAqABIggEQCAJIAg2AqQBIAgQ3QMLAkAgCSgC4AEiCCAJKALkASIGRgRAQQEhEQwBC0EBIREgBiAIa0EEayIKQQxPBEAgCkECdkEBaiIYQfz///8HcSIXQQRrIgpBAnZBAWoiAUEDcSEEAkAgCkEMSQRA/QwBAAAAAQAAAAEAAAABAAAAIR1BACEKDAELIAFB/P///wdxIRD9DAEAAAABAAAAAQAAAAEAAAAhHUEAIQoDQCAIIApBAnQiAUEwcmr9AAIAIAggAUEgcmr9AAIAIAggAUEQcmr9AAIAIAEgCGr9AAIAIB39tQH9tQH9tQH9tQEhHSAKQRBqIQogDkEEaiIOIBBHDQALCyAEBEADQCAIIApBAnRq/QACACAd/bUBIR0gCkEEaiEKIAxBAWoiDCAERw0ACwsgHSAdIB39DQgJCgsMDQ4PAAAAAAAAAAD9tQEiHSAdIB39DQQFBgcAAAAAAAAAAAAAAAD9tQH9GwAhESAXIBhGDQEgCCAXQQJ0aiEICwNAIAgoAgAgEWwhESAIQQRqIgggBkcNAAsLIAlBADYCiAEgCUIANwOAASALBEAgC0EASA0BIAkgCxCiBCIINgKAASAJIAggA0ECdGo2AogBIAkgCCASIAsQ8wMgC2o2AoQBCyAJQZABaiAJQYABahDjASAJKAKAASIIBEAgCSAINgKEASAIEN0DCyAJQQA2AmggCUIANwNgIA0EQCANQQBIDQEgCSANEKIEIgg2AmAgCSAIIA9BAnRqNgJoIAkgCCATIA0Q8wMgDWo2AmQLIAlB8ABqIAlB4ABqEOMBIAkoAmAiCARAIAkgCDYCZCAIEN0DCyAJQQA2AkggCUIANwNAIAsEQCAJIAsQogQiCDYCQCAJIAggA0ECdGo2AkggCSAIIBIgCxDzAyALajYCRAsgCUEANgI4IAlCADcDMCAJKALkASAJKALgASIBayIIBEAgCEEASA0BIAkgCBCiBCIKNgIwIAkgCjYCNCAJIAogCEECdUECdGo2AjggCSAKIAEgCBDzAyAIajYCNAsgCUHQAGogCUFAayAJQTBqEOUBIAkoAjAiCARAIAkgCDYCNCAIEN0DCyAJKAJAIggEQCAJIAg2AkQgCBDdAwsgCUEANgIYIAlCADcDECANBEAgCSANEKIEIgg2AhAgCSAIIA9BAnRqNgIYIAkgCCATIA0Q8wMgDWo2AhQLIAlBADYCCCAJQgA3AwAgCSgC5AEgCSgC4AEiAWsiCARAIAhBAEgNASAJIAgQogQiCjYCACAJIAo2AgQgCSAKIAhBAnVBAnRqNgIIIAkgCiABIAgQ8wMgCGo2AgQLIAlBIGogCUEQaiAJEOUBIAkoAgAiCARAIAkgCDYCBCAIEN0DCyAJKAIQIggEQCAJIAg2AhQgCBDdAwsCQAJAIAkoAlQgCSgCUEcNACAJKAIkIAkoAiBHDQAgEUUNAUEAIQgDQCAbIAhBAnRqIBkgCCAAcEECdGooAgAgGiAIIBZwQQJ0aigCACAHEQUANgIAIAhBAWoiCCARRw0ACwwBCyARRQ0AQQAhAEEAIAJrQQJ0IRhBACAFa0ECdCEcA0BBACEQQQAhFgJAIAkoArQBIAkoArABIgZrIgFBAnUiCEEBaiIKIAhJDQAgCkGAgICABE8NAyAKQQJ0EKIEIhZBACAIQQJ0IgtBBGoQ9QMiDCALaiIDQQRqIRAgAQRAIAhBASAIQQFLGyILQQFxIQ9BACEKIAAhCCABQQhPBEAgC0F+cSEEQQAhCwNAIAwgCkECdCIBaiAIIAEgBmooAgAiDW4iDjYCACAMIAFBBHIiAWogCCANIA5sayIIIAEgBmooAgAiAW4iDTYCACAIIAEgDWxrIQggCkECaiEKIAtBAmoiCyAERw0ACwsgAyAPBH8gDCAKQQJ0IgpqIAggBiAKaigCACIKbiIBNgIAIAggASAKbGsFIAgLNgIADAELIAwgADYCAAsCQCAURQRAQQAhBEEAIQoMAQsgFEEASA0DIBQQogQhBCACRQRAIAQhCgwBCyAEIBAgGGogFBDzAyIIIQogCCAUaiEECwJAIAkoAlQgCSgCUCIBayIIRQ0AIAhBAnUiCEEBIAhBAUsbIgZBA3EhDUEAIQxBACEIIAZBAWtBA08EQCAGQXxxIQ5BACELA0AgCiABIAhBAnQiBmooAgBBAnRqQQA2AgAgCiABIAZBBHJqKAIAQQJ0akEANgIAIAogASAGQQhyaigCAEECdGpBADYCACAKIAEgBkEMcmooAgBBAnRqQQA2AgAgCEEEaiEIIAtBBGoiCyAORw0ACwsgDUUNAANAIAogASAIQQJ0aigCAEECdGpBADYCACAIQQFqIQggDEEBaiIMIA1HDQALCwJAAkACQCAEIAprQQJ1IgQOAgIAAQsgCigCACEEDAELIAogBEEBayILQQJ0aigCACEEIAtFDQAgCSgCkAEhAUEAIQggC0EETwRA/QwAAAAAAAAAAAAAAAAAAAAAIAT9HAAhHSALQXxxIghBBGsiBkECdkEBaiIMQQNxIQNBACENAkAgBkEMSQRAQQAhBgwBCyAMQfz///8HcSEPQQAhBkEAIQ4DQCAKIAZBAnQiDEEwciIEav0AAgAgASAEav0AAgD9tQEgCiAMQSByIgRq/QACACABIARq/QACAP21ASAKIAxBEHIiBGr9AAIAIAEgBGr9AAIA/bUBIAogDGr9AAIAIAEgDGr9AAIA/bUBIB39rgH9rgH9rgH9rgEhHSAGQRBqIQYgDkEEaiIOIA9HDQALCyADBEADQCAKIAZBAnQiDGr9AAIAIAEgDGr9AAIA/bUBIB39rgEhHSAGQQRqIQYgDUEBaiINIANHDQALCyAdIB0gHf0NCAkKCwwNDg8AAAAAAAAAAP2uASIdIB0gHf0NBAUGBwAAAAAAAAAAAAAAAP2uAf0bACEEIAggC0YNAQsDQCAKIAhBAnQiBmooAgAgASAGaigCAGwgBGohBCAIQQFqIgggC0cNAAsLAkAgFUUEQEEAIQNBACEBDAELIBVBAEgNAyAVEKIEIQMgBUUEQCADIQEMAQsgAyAQIBxqIBUQ8wMiCCEBIAggFWohAwsCQCAJKAIkIAkoAiAiBmsiCEUNACAIQQJ1IghBASAIQQFLGyIMQQNxIQ5BACELQQAhCCAMQQFrQQNPBEAgDEF8cSEQQQAhDQNAIAEgBiAIQQJ0IgxqKAIAQQJ0akEANgIAIAEgBiAMQQRyaigCAEECdGpBADYCACABIAYgDEEIcmooAgBBAnRqQQA2AgAgASAGIAxBDHJqKAIAQQJ0akEANgIAIAhBBGohCCANQQRqIg0gEEcNAAsLIA5FDQADQCABIAYgCEECdGooAgBBAnRqQQA2AgAgCEEBaiEIIAtBAWoiCyAORw0ACwsCQAJAAkAgAyABa0ECdSIGDgICAAELIAEoAgAhBgwBCyABIAZBAWsiDUECdGooAgAhBiANRQ0AIAkoAnAhDEEAIQggDUEETwRA/QwAAAAAAAAAAAAAAAAAAAAAIAb9HAAhHSANQXxxIghBBGsiBkECdkEBaiILQQNxIQ9BACEOAkAgBkEMSQRAQQAhBgwBCyALQfz///8HcSEXQQAhBkEAIRADQCABIAZBAnQiC0EwciIDav0AAgAgAyAMav0AAgD9tQEgASALQSByIgNq/QACACADIAxq/QACAP21ASABIAtBEHIiA2r9AAIAIAMgDGr9AAIA/bUBIAEgC2r9AAIAIAsgDGr9AAIA/bUBIB39rgH9rgH9rgH9rgEhHSAGQRBqIQYgEEEEaiIQIBdHDQALCyAPBEADQCABIAZBAnQiC2r9AAIAIAsgDGr9AAIA/bUBIB39rgEhHSAGQQRqIQYgDkEBaiIOIA9HDQALCyAdIB0gHf0NCAkKCwwNDg8AAAAAAAAAAP2uASIdIB0gHf0NBAUGBwAAAAAAAAAAAAAAAP2uAf0bACEGIAggDUYNAQsDQCABIAhBAnQiC2ooAgAgCyAMaigCAGwgBmohBiAIQQFqIgggDUcNAAsLIBsgAEECdGogGSAEQQJ0aigCACAaIAZBAnRqKAIAIAcRBQA2AgAgAQRAIAEQ3QMLIAoEQCAKEN0DCyAWBEAgFhDdAwsgAEEBaiIAIBFHDQALCyAJKAIgIggEQCAJIAg2AiQgCBDdAwsgCSgCUCIIBEAgCSAINgJUIAgQ3QMLIAkoAnAiCARAIAkgCDYCdCAIEN0DCyAJKAKQASIIBEAgCSAINgKUASAIEN0DCyAJKAKwASIIBEAgCSAINgK0ASAIEN0DCyAJKALgASIIBEAgCSAINgLkASAIEN0DCyATBEAgExDdAwsgEgRAIBIQ3QMLIAlB8AFqJAAMAQsQAAALC9IdAhV/AXsgABALIQAgAxALIQMgBhALIQYgACgCACEZIAAoAgQhACADKAIAIRogAygCBCEWIAYoAgAhGyAEIQYjAEHwAWsiCSQAIAJBAnQhFAJAAkAgAgRAIAJBAEgNASAUEKIEIhIgASAUEPMDIAJBAnRqIQoLIAVBAnQhFSAFBEAgBUEASA0BIBUQogQiEyAGIBUQ8wMgBUECdGohCAsgCUEANgLYASAJQgA3A9ABIAogEmsiC0ECdSEDIAsEQCALQQBIDQEgCSALEKIEIgo2AtABIAkgCiADQQJ0ajYC2AEgCSAKIBIgCxDzAyALajYC1AELIAlBADYCyAEgCUIANwPAASAIIBNrIg1BAnUhDyANBEAgDUEASA0BIAkgDRCiBCIINgLAASAJIAggD0ECdGo2AsgBIAkgCCATIA0Q8wMgDWo2AsQBCyAJQeABaiAJQdABaiAJQcABahDkASAJKALAASIIBEAgCSAINgLEASAIEN0DCyAJKALQASIIBEAgCSAINgLUASAIEN0DCyAJQQA2AqgBIAlCADcDoAEgCSgC5AEgCSgC4AEiAWsiCARAIAhBAEgNASAJIAgQogQiCjYCoAEgCSAKNgKkASAJIAogCEECdUECdGo2AqgBIAkgCiABIAgQ8wMgCGo2AqQBCyAJQbABaiAJQaABahDjASAJKAKgASIIBEAgCSAINgKkASAIEN0DCwJAIAkoAuABIgggCSgC5AEiBkYEQEEBIREMAQtBASERIAYgCGtBBGsiCkEMTwRAIApBAnZBAWoiGEH8////B3EiF0EEayIKQQJ2QQFqIgFBA3EhBAJAIApBDEkEQP0MAQAAAAEAAAABAAAAAQAAACEdQQAhCgwBCyABQfz///8HcSEQ/QwBAAAAAQAAAAEAAAABAAAAIR1BACEKA0AgCCAKQQJ0IgFBMHJq/QACACAIIAFBIHJq/QACACAIIAFBEHJq/QACACABIAhq/QACACAd/bUB/bUB/bUB/bUBIR0gCkEQaiEKIA5BBGoiDiAQRw0ACwsgBARAA0AgCCAKQQJ0av0AAgAgHf21ASEdIApBBGohCiAMQQFqIgwgBEcNAAsLIB0gHSAd/Q0ICQoLDA0ODwAAAAAAAAAA/bUBIh0gHSAd/Q0EBQYHAAAAAAAAAAAAAAAA/bUB/RsAIREgFyAYRg0BIAggF0ECdGohCAsDQCAIKAIAIBFsIREgCEEEaiIIIAZHDQALCyAJQQA2AogBIAlCADcDgAEgCwRAIAtBAEgNASAJIAsQogQiCDYCgAEgCSAIIANBAnRqNgKIASAJIAggEiALEPMDIAtqNgKEAQsgCUGQAWogCUGAAWoQ4wEgCSgCgAEiCARAIAkgCDYChAEgCBDdAwsgCUEANgJoIAlCADcDYCANBEAgDUEASA0BIAkgDRCiBCIINgJgIAkgCCAPQQJ0ajYCaCAJIAggEyANEPMDIA1qNgJkCyAJQfAAaiAJQeAAahDjASAJKAJgIggEQCAJIAg2AmQgCBDdAwsgCUEANgJIIAlCADcDQCALBEAgCSALEKIEIgg2AkAgCSAIIANBAnRqNgJIIAkgCCASIAsQ8wMgC2o2AkQLIAlBADYCOCAJQgA3AzAgCSgC5AEgCSgC4AEiAWsiCARAIAhBAEgNASAJIAgQogQiCjYCMCAJIAo2AjQgCSAKIAhBAnVBAnRqNgI4IAkgCiABIAgQ8wMgCGo2AjQLIAlB0ABqIAlBQGsgCUEwahDlASAJKAIwIggEQCAJIAg2AjQgCBDdAwsgCSgCQCIIBEAgCSAINgJEIAgQ3QMLIAlBADYCGCAJQgA3AxAgDQRAIAkgDRCiBCIINgIQIAkgCCAPQQJ0ajYCGCAJIAggEyANEPMDIA1qNgIUCyAJQQA2AgggCUIANwMAIAkoAuQBIAkoAuABIgFrIggEQCAIQQBIDQEgCSAIEKIEIgo2AgAgCSAKNgIEIAkgCiAIQQJ1QQJ0ajYCCCAJIAogASAIEPMDIAhqNgIECyAJQSBqIAlBEGogCRDlASAJKAIAIggEQCAJIAg2AgQgCBDdAwsgCSgCECIIBEAgCSAINgIUIAgQ3QMLAkACQCAJKAJUIAkoAlBHDQAgCSgCJCAJKAIgRw0AIBFFDQFBACEIA0AgCCAbaiAZIAggAHBqLQAAIBogCCAWcGotAAAgBxEFADoAACAIQQFqIgggEUcNAAsMAQsgEUUNAEEAIQBBACACa0ECdCEYQQAgBWtBAnQhHANAQQAhEEEAIRYCQCAJKAK0ASAJKAKwASIGayIBQQJ1IghBAWoiCiAISQ0AIApBgICAgARPDQMgCkECdBCiBCIWQQAgCEECdCILQQRqEPUDIgwgC2oiA0EEaiEQIAEEQCAIQQEgCEEBSxsiC0EBcSEPQQAhCiAAIQggAUEITwRAIAtBfnEhBEEAIQsDQCAMIApBAnQiAWogCCABIAZqKAIAIg1uIg42AgAgDCABQQRyIgFqIAggDSAObGsiCCABIAZqKAIAIgFuIg02AgAgCCABIA1sayEIIApBAmohCiALQQJqIgsgBEcNAAsLIAMgDwR/IAwgCkECdCIKaiAIIAYgCmooAgAiCm4iATYCACAIIAEgCmxrBSAICzYCAAwBCyAMIAA2AgALAkAgFEUEQEEAIQRBACEKDAELIBRBAEgNAyAUEKIEIQQgAkUEQCAEIQoMAQsgBCAQIBhqIBQQ8wMiCCEKIAggFGohBAsCQCAJKAJUIAkoAlAiAWsiCEUNACAIQQJ1IghBASAIQQFLGyIGQQNxIQ1BACEMQQAhCCAGQQFrQQNPBEAgBkF8cSEOQQAhCwNAIAogASAIQQJ0IgZqKAIAQQJ0akEANgIAIAogASAGQQRyaigCAEECdGpBADYCACAKIAEgBkEIcmooAgBBAnRqQQA2AgAgCiABIAZBDHJqKAIAQQJ0akEANgIAIAhBBGohCCALQQRqIgsgDkcNAAsLIA1FDQADQCAKIAEgCEECdGooAgBBAnRqQQA2AgAgCEEBaiEIIAxBAWoiDCANRw0ACwsCQAJAAkAgBCAKa0ECdSIEDgICAAELIAooAgAhBAwBCyAKIARBAWsiC0ECdGooAgAhBCALRQ0AIAkoApABIQFBACEIIAtBBE8EQP0MAAAAAAAAAAAAAAAAAAAAACAE/RwAIR0gC0F8cSIIQQRrIgZBAnZBAWoiDEEDcSEDQQAhDQJAIAZBDEkEQEEAIQYMAQsgDEH8////B3EhD0EAIQZBACEOA0AgCiAGQQJ0IgxBMHIiBGr9AAIAIAEgBGr9AAIA/bUBIAogDEEgciIEav0AAgAgASAEav0AAgD9tQEgCiAMQRByIgRq/QACACABIARq/QACAP21ASAKIAxq/QACACABIAxq/QACAP21ASAd/a4B/a4B/a4B/a4BIR0gBkEQaiEGIA5BBGoiDiAPRw0ACwsgAwRAA0AgCiAGQQJ0Igxq/QACACABIAxq/QACAP21ASAd/a4BIR0gBkEEaiEGIA1BAWoiDSADRw0ACwsgHSAdIB39DQgJCgsMDQ4PAAAAAAAAAAD9rgEiHSAdIB39DQQFBgcAAAAAAAAAAAAAAAD9rgH9GwAhBCAIIAtGDQELA0AgCiAIQQJ0IgZqKAIAIAEgBmooAgBsIARqIQQgCEEBaiIIIAtHDQALCwJAIBVFBEBBACEDQQAhAQwBCyAVQQBIDQMgFRCiBCEDIAVFBEAgAyEBDAELIAMgECAcaiAVEPMDIgghASAIIBVqIQMLAkAgCSgCJCAJKAIgIgZrIghFDQAgCEECdSIIQQEgCEEBSxsiDEEDcSEOQQAhC0EAIQggDEEBa0EDTwRAIAxBfHEhEEEAIQ0DQCABIAYgCEECdCIMaigCAEECdGpBADYCACABIAYgDEEEcmooAgBBAnRqQQA2AgAgASAGIAxBCHJqKAIAQQJ0akEANgIAIAEgBiAMQQxyaigCAEECdGpBADYCACAIQQRqIQggDUEEaiINIBBHDQALCyAORQ0AA0AgASAGIAhBAnRqKAIAQQJ0akEANgIAIAhBAWohCCALQQFqIgsgDkcNAAsLAkACQAJAIAMgAWtBAnUiBg4CAgABCyABKAIAIQYMAQsgASAGQQFrIg1BAnRqKAIAIQYgDUUNACAJKAJwIQxBACEIIA1BBE8EQP0MAAAAAAAAAAAAAAAAAAAAACAG/RwAIR0gDUF8cSIIQQRrIgZBAnZBAWoiC0EDcSEPQQAhDgJAIAZBDEkEQEEAIQYMAQsgC0H8////B3EhF0EAIQZBACEQA0AgASAGQQJ0IgtBMHIiA2r9AAIAIAMgDGr9AAIA/bUBIAEgC0EgciIDav0AAgAgAyAMav0AAgD9tQEgASALQRByIgNq/QACACADIAxq/QACAP21ASABIAtq/QACACALIAxq/QACAP21ASAd/a4B/a4B/a4B/a4BIR0gBkEQaiEGIBBBBGoiECAXRw0ACwsgDwRAA0AgASAGQQJ0Igtq/QACACALIAxq/QACAP21ASAd/a4BIR0gBkEEaiEGIA5BAWoiDiAPRw0ACwsgHSAdIB39DQgJCgsMDQ4PAAAAAAAAAAD9rgEiHSAdIB39DQQFBgcAAAAAAAAAAAAAAAD9rgH9GwAhBiAIIA1GDQELA0AgASAIQQJ0IgtqKAIAIAsgDGooAgBsIAZqIQYgCEEBaiIIIA1HDQALCyAAIBtqIAQgGWotAAAgBiAaai0AACAHEQUAOgAAIAEEQCABEN0DCyAKBEAgChDdAwsgFgRAIBYQ3QMLIABBAWoiACARRw0ACwsgCSgCICIIBEAgCSAINgIkIAgQ3QMLIAkoAlAiCARAIAkgCDYCVCAIEN0DCyAJKAJwIggEQCAJIAg2AnQgCBDdAwsgCSgCkAEiCARAIAkgCDYClAEgCBDdAwsgCSgCsAEiCARAIAkgCDYCtAEgCBDdAwsgCSgC4AEiCARAIAkgCDYC5AEgCBDdAwsgEwRAIBMQ3QMLIBIEQCASEN0DCyAJQfABaiQADAELEAAACwveHQIVfwF7IAAQCyEAIAMQCyEDIAYQCyEGIAAoAgAhGSAAKAIEIQAgAygCACEaIAMoAgQhFiAGKAIAIRsgBCEGIwBB8AFrIgkkACACQQJ0IRQCQAJAIAIEQCACQQBIDQEgFBCiBCISIAEgFBDzAyACQQJ0aiEKCyAFQQJ0IRUgBQRAIAVBAEgNASAVEKIEIhMgBiAVEPMDIAVBAnRqIQgLIAlBADYC2AEgCUIANwPQASAKIBJrIgtBAnUhAyALBEAgC0EASA0BIAkgCxCiBCIKNgLQASAJIAogA0ECdGo2AtgBIAkgCiASIAsQ8wMgC2o2AtQBCyAJQQA2AsgBIAlCADcDwAEgCCATayINQQJ1IQ8gDQRAIA1BAEgNASAJIA0QogQiCDYCwAEgCSAIIA9BAnRqNgLIASAJIAggEyANEPMDIA1qNgLEAQsgCUHgAWogCUHQAWogCUHAAWoQ5AEgCSgCwAEiCARAIAkgCDYCxAEgCBDdAwsgCSgC0AEiCARAIAkgCDYC1AEgCBDdAwsgCUEANgKoASAJQgA3A6ABIAkoAuQBIAkoAuABIgFrIggEQCAIQQBIDQEgCSAIEKIEIgo2AqABIAkgCjYCpAEgCSAKIAhBAnVBAnRqNgKoASAJIAogASAIEPMDIAhqNgKkAQsgCUGwAWogCUGgAWoQ4wEgCSgCoAEiCARAIAkgCDYCpAEgCBDdAwsCQCAJKALgASIIIAkoAuQBIgZGBEBBASERDAELQQEhESAGIAhrQQRrIgpBDE8EQCAKQQJ2QQFqIhhB/P///wdxIhdBBGsiCkECdkEBaiIBQQNxIQQCQCAKQQxJBED9DAEAAAABAAAAAQAAAAEAAAAhHUEAIQoMAQsgAUH8////B3EhEP0MAQAAAAEAAAABAAAAAQAAACEdQQAhCgNAIAggCkECdCIBQTByav0AAgAgCCABQSByav0AAgAgCCABQRByav0AAgAgASAIav0AAgAgHf21Af21Af21Af21ASEdIApBEGohCiAOQQRqIg4gEEcNAAsLIAQEQANAIAggCkECdGr9AAIAIB39tQEhHSAKQQRqIQogDEEBaiIMIARHDQALCyAdIB0gHf0NCAkKCwwNDg8AAAAAAAAAAP21ASIdIB0gHf0NBAUGBwAAAAAAAAAAAAAAAP21Af0bACERIBcgGEYNASAIIBdBAnRqIQgLA0AgCCgCACARbCERIAhBBGoiCCAGRw0ACwsgCUEANgKIASAJQgA3A4ABIAsEQCALQQBIDQEgCSALEKIEIgg2AoABIAkgCCADQQJ0ajYCiAEgCSAIIBIgCxDzAyALajYChAELIAlBkAFqIAlBgAFqEOMBIAkoAoABIggEQCAJIAg2AoQBIAgQ3QMLIAlBADYCaCAJQgA3A2AgDQRAIA1BAEgNASAJIA0QogQiCDYCYCAJIAggD0ECdGo2AmggCSAIIBMgDRDzAyANajYCZAsgCUHwAGogCUHgAGoQ4wEgCSgCYCIIBEAgCSAINgJkIAgQ3QMLIAlBADYCSCAJQgA3A0AgCwRAIAkgCxCiBCIINgJAIAkgCCADQQJ0ajYCSCAJIAggEiALEPMDIAtqNgJECyAJQQA2AjggCUIANwMwIAkoAuQBIAkoAuABIgFrIggEQCAIQQBIDQEgCSAIEKIEIgo2AjAgCSAKNgI0IAkgCiAIQQJ1QQJ0ajYCOCAJIAogASAIEPMDIAhqNgI0CyAJQdAAaiAJQUBrIAlBMGoQ5QEgCSgCMCIIBEAgCSAINgI0IAgQ3QMLIAkoAkAiCARAIAkgCDYCRCAIEN0DCyAJQQA2AhggCUIANwMQIA0EQCAJIA0QogQiCDYCECAJIAggD0ECdGo2AhggCSAIIBMgDRDzAyANajYCFAsgCUEANgIIIAlCADcDACAJKALkASAJKALgASIBayIIBEAgCEEASA0BIAkgCBCiBCIKNgIAIAkgCjYCBCAJIAogCEECdUECdGo2AgggCSAKIAEgCBDzAyAIajYCBAsgCUEgaiAJQRBqIAkQ5QEgCSgCACIIBEAgCSAINgIEIAgQ3QMLIAkoAhAiCARAIAkgCDYCFCAIEN0DCwJAAkAgCSgCVCAJKAJQRw0AIAkoAiQgCSgCIEcNACARRQ0BQQAhCANAIAggG2ogGSAIIABwQQJ0aioCACAaIAggFnBBAnRqKgIAIAcREgA6AAAgCEEBaiIIIBFHDQALDAELIBFFDQBBACEAQQAgAmtBAnQhGEEAIAVrQQJ0IRwDQEEAIRBBACEWAkAgCSgCtAEgCSgCsAEiBmsiAUECdSIIQQFqIgogCEkNACAKQYCAgIAETw0DIApBAnQQogQiFkEAIAhBAnQiC0EEahD1AyIMIAtqIgNBBGohECABBEAgCEEBIAhBAUsbIgtBAXEhD0EAIQogACEIIAFBCE8EQCALQX5xIQRBACELA0AgDCAKQQJ0IgFqIAggASAGaigCACINbiIONgIAIAwgAUEEciIBaiAIIA0gDmxrIgggASAGaigCACIBbiINNgIAIAggASANbGshCCAKQQJqIQogC0ECaiILIARHDQALCyADIA8EfyAMIApBAnQiCmogCCAGIApqKAIAIgpuIgE2AgAgCCABIApsawUgCAs2AgAMAQsgDCAANgIACwJAIBRFBEBBACEEQQAhCgwBCyAUQQBIDQMgFBCiBCEEIAJFBEAgBCEKDAELIAQgECAYaiAUEPMDIgghCiAIIBRqIQQLAkAgCSgCVCAJKAJQIgFrIghFDQAgCEECdSIIQQEgCEEBSxsiBkEDcSENQQAhDEEAIQggBkEBa0EDTwRAIAZBfHEhDkEAIQsDQCAKIAEgCEECdCIGaigCAEECdGpBADYCACAKIAEgBkEEcmooAgBBAnRqQQA2AgAgCiABIAZBCHJqKAIAQQJ0akEANgIAIAogASAGQQxyaigCAEECdGpBADYCACAIQQRqIQggC0EEaiILIA5HDQALCyANRQ0AA0AgCiABIAhBAnRqKAIAQQJ0akEANgIAIAhBAWohCCAMQQFqIgwgDUcNAAsLAkACQAJAIAQgCmtBAnUiBA4CAgABCyAKKAIAIQQMAQsgCiAEQQFrIgtBAnRqKAIAIQQgC0UNACAJKAKQASEBQQAhCCALQQRPBED9DAAAAAAAAAAAAAAAAAAAAAAgBP0cACEdIAtBfHEiCEEEayIGQQJ2QQFqIgxBA3EhA0EAIQ0CQCAGQQxJBEBBACEGDAELIAxB/P///wdxIQ9BACEGQQAhDgNAIAogBkECdCIMQTByIgRq/QACACABIARq/QACAP21ASAKIAxBIHIiBGr9AAIAIAEgBGr9AAIA/bUBIAogDEEQciIEav0AAgAgASAEav0AAgD9tQEgCiAMav0AAgAgASAMav0AAgD9tQEgHf2uAf2uAf2uAf2uASEdIAZBEGohBiAOQQRqIg4gD0cNAAsLIAMEQANAIAogBkECdCIMav0AAgAgASAMav0AAgD9tQEgHf2uASEdIAZBBGohBiANQQFqIg0gA0cNAAsLIB0gHSAd/Q0ICQoLDA0ODwAAAAAAAAAA/a4BIh0gHSAd/Q0EBQYHAAAAAAAAAAAAAAAA/a4B/RsAIQQgCCALRg0BCwNAIAogCEECdCIGaigCACABIAZqKAIAbCAEaiEEIAhBAWoiCCALRw0ACwsCQCAVRQRAQQAhA0EAIQEMAQsgFUEASA0DIBUQogQhAyAFRQRAIAMhAQwBCyADIBAgHGogFRDzAyIIIQEgCCAVaiEDCwJAIAkoAiQgCSgCICIGayIIRQ0AIAhBAnUiCEEBIAhBAUsbIgxBA3EhDkEAIQtBACEIIAxBAWtBA08EQCAMQXxxIRBBACENA0AgASAGIAhBAnQiDGooAgBBAnRqQQA2AgAgASAGIAxBBHJqKAIAQQJ0akEANgIAIAEgBiAMQQhyaigCAEECdGpBADYCACABIAYgDEEMcmooAgBBAnRqQQA2AgAgCEEEaiEIIA1BBGoiDSAQRw0ACwsgDkUNAANAIAEgBiAIQQJ0aigCAEECdGpBADYCACAIQQFqIQggC0EBaiILIA5HDQALCwJAAkACQCADIAFrQQJ1IgYOAgIAAQsgASgCACEGDAELIAEgBkEBayINQQJ0aigCACEGIA1FDQAgCSgCcCEMQQAhCCANQQRPBED9DAAAAAAAAAAAAAAAAAAAAAAgBv0cACEdIA1BfHEiCEEEayIGQQJ2QQFqIgtBA3EhD0EAIQ4CQCAGQQxJBEBBACEGDAELIAtB/P///wdxIRdBACEGQQAhEANAIAEgBkECdCILQTByIgNq/QACACADIAxq/QACAP21ASABIAtBIHIiA2r9AAIAIAMgDGr9AAIA/bUBIAEgC0EQciIDav0AAgAgAyAMav0AAgD9tQEgASALav0AAgAgCyAMav0AAgD9tQEgHf2uAf2uAf2uAf2uASEdIAZBEGohBiAQQQRqIhAgF0cNAAsLIA8EQANAIAEgBkECdCILav0AAgAgCyAMav0AAgD9tQEgHf2uASEdIAZBBGohBiAOQQFqIg4gD0cNAAsLIB0gHSAd/Q0ICQoLDA0ODwAAAAAAAAAA/a4BIh0gHSAd/Q0EBQYHAAAAAAAAAAAAAAAA/a4B/RsAIQYgCCANRg0BCwNAIAEgCEECdCILaigCACALIAxqKAIAbCAGaiEGIAhBAWoiCCANRw0ACwsgACAbaiAZIARBAnRqKgIAIBogBkECdGoqAgAgBxESADoAACABBEAgARDdAwsgCgRAIAoQ3QMLIBYEQCAWEN0DCyAAQQFqIgAgEUcNAAsLIAkoAiAiCARAIAkgCDYCJCAIEN0DCyAJKAJQIggEQCAJIAg2AlQgCBDdAwsgCSgCcCIIBEAgCSAINgJ0IAgQ3QMLIAkoApABIggEQCAJIAg2ApQBIAgQ3QMLIAkoArABIggEQCAJIAg2ArQBIAgQ3QMLIAkoAuABIggEQCAJIAg2AuQBIAgQ3QMLIBMEQCATEN0DCyASBEAgEhDdAwsgCUHwAWokAAwBCxAAAAsL3h0CFX8BeyAAEAshACADEAshAyAGEAshBiAAKAIAIRkgACgCBCEAIAMoAgAhGiADKAIEIRYgBigCACEbIAQhBiMAQfABayIJJAAgAkECdCEUAkACQCACBEAgAkEASA0BIBQQogQiEiABIBQQ8wMgAkECdGohCgsgBUECdCEVIAUEQCAFQQBIDQEgFRCiBCITIAYgFRDzAyAFQQJ0aiEICyAJQQA2AtgBIAlCADcD0AEgCiASayILQQJ1IQMgCwRAIAtBAEgNASAJIAsQogQiCjYC0AEgCSAKIANBAnRqNgLYASAJIAogEiALEPMDIAtqNgLUAQsgCUEANgLIASAJQgA3A8ABIAggE2siDUECdSEPIA0EQCANQQBIDQEgCSANEKIEIgg2AsABIAkgCCAPQQJ0ajYCyAEgCSAIIBMgDRDzAyANajYCxAELIAlB4AFqIAlB0AFqIAlBwAFqEOQBIAkoAsABIggEQCAJIAg2AsQBIAgQ3QMLIAkoAtABIggEQCAJIAg2AtQBIAgQ3QMLIAlBADYCqAEgCUIANwOgASAJKALkASAJKALgASIBayIIBEAgCEEASA0BIAkgCBCiBCIKNgKgASAJIAo2AqQBIAkgCiAIQQJ1QQJ0ajYCqAEgCSAKIAEgCBDzAyAIajYCpAELIAlBsAFqIAlBoAFqEOMBIAkoAqABIggEQCAJIAg2AqQBIAgQ3QMLAkAgCSgC4AEiCCAJKALkASIGRgRAQQEhEQwBC0EBIREgBiAIa0EEayIKQQxPBEAgCkECdkEBaiIYQfz///8HcSIXQQRrIgpBAnZBAWoiAUEDcSEEAkAgCkEMSQRA/QwBAAAAAQAAAAEAAAABAAAAIR1BACEKDAELIAFB/P///wdxIRD9DAEAAAABAAAAAQAAAAEAAAAhHUEAIQoDQCAIIApBAnQiAUEwcmr9AAIAIAggAUEgcmr9AAIAIAggAUEQcmr9AAIAIAEgCGr9AAIAIB39tQH9tQH9tQH9tQEhHSAKQRBqIQogDkEEaiIOIBBHDQALCyAEBEADQCAIIApBAnRq/QACACAd/bUBIR0gCkEEaiEKIAxBAWoiDCAERw0ACwsgHSAdIB39DQgJCgsMDQ4PAAAAAAAAAAD9tQEiHSAdIB39DQQFBgcAAAAAAAAAAAAAAAD9tQH9GwAhESAXIBhGDQEgCCAXQQJ0aiEICwNAIAgoAgAgEWwhESAIQQRqIgggBkcNAAsLIAlBADYCiAEgCUIANwOAASALBEAgC0EASA0BIAkgCxCiBCIINgKAASAJIAggA0ECdGo2AogBIAkgCCASIAsQ8wMgC2o2AoQBCyAJQZABaiAJQYABahDjASAJKAKAASIIBEAgCSAINgKEASAIEN0DCyAJQQA2AmggCUIANwNgIA0EQCANQQBIDQEgCSANEKIEIgg2AmAgCSAIIA9BAnRqNgJoIAkgCCATIA0Q8wMgDWo2AmQLIAlB8ABqIAlB4ABqEOMBIAkoAmAiCARAIAkgCDYCZCAIEN0DCyAJQQA2AkggCUIANwNAIAsEQCAJIAsQogQiCDYCQCAJIAggA0ECdGo2AkggCSAIIBIgCxDzAyALajYCRAsgCUEANgI4IAlCADcDMCAJKALkASAJKALgASIBayIIBEAgCEEASA0BIAkgCBCiBCIKNgIwIAkgCjYCNCAJIAogCEECdUECdGo2AjggCSAKIAEgCBDzAyAIajYCNAsgCUHQAGogCUFAayAJQTBqEOUBIAkoAjAiCARAIAkgCDYCNCAIEN0DCyAJKAJAIggEQCAJIAg2AkQgCBDdAwsgCUEANgIYIAlCADcDECANBEAgCSANEKIEIgg2AhAgCSAIIA9BAnRqNgIYIAkgCCATIA0Q8wMgDWo2AhQLIAlBADYCCCAJQgA3AwAgCSgC5AEgCSgC4AEiAWsiCARAIAhBAEgNASAJIAgQogQiCjYCACAJIAo2AgQgCSAKIAhBAnVBAnRqNgIIIAkgCiABIAgQ8wMgCGo2AgQLIAlBIGogCUEQaiAJEOUBIAkoAgAiCARAIAkgCDYCBCAIEN0DCyAJKAIQIggEQCAJIAg2AhQgCBDdAwsCQAJAIAkoAlQgCSgCUEcNACAJKAIkIAkoAiBHDQAgEUUNAUEAIQgDQCAIIBtqIBkgCCAAcEECdGooAgAgGiAIIBZwQQJ0aigCACAHEQUAOgAAIAhBAWoiCCARRw0ACwwBCyARRQ0AQQAhAEEAIAJrQQJ0IRhBACAFa0ECdCEcA0BBACEQQQAhFgJAIAkoArQBIAkoArABIgZrIgFBAnUiCEEBaiIKIAhJDQAgCkGAgICABE8NAyAKQQJ0EKIEIhZBACAIQQJ0IgtBBGoQ9QMiDCALaiIDQQRqIRAgAQRAIAhBASAIQQFLGyILQQFxIQ9BACEKIAAhCCABQQhPBEAgC0F+cSEEQQAhCwNAIAwgCkECdCIBaiAIIAEgBmooAgAiDW4iDjYCACAMIAFBBHIiAWogCCANIA5sayIIIAEgBmooAgAiAW4iDTYCACAIIAEgDWxrIQggCkECaiEKIAtBAmoiCyAERw0ACwsgAyAPBH8gDCAKQQJ0IgpqIAggBiAKaigCACIKbiIBNgIAIAggASAKbGsFIAgLNgIADAELIAwgADYCAAsCQCAURQRAQQAhBEEAIQoMAQsgFEEASA0DIBQQogQhBCACRQRAIAQhCgwBCyAEIBAgGGogFBDzAyIIIQogCCAUaiEECwJAIAkoAlQgCSgCUCIBayIIRQ0AIAhBAnUiCEEBIAhBAUsbIgZBA3EhDUEAIQxBACEIIAZBAWtBA08EQCAGQXxxIQ5BACELA0AgCiABIAhBAnQiBmooAgBBAnRqQQA2AgAgCiABIAZBBHJqKAIAQQJ0akEANgIAIAogASAGQQhyaigCAEECdGpBADYCACAKIAEgBkEMcmooAgBBAnRqQQA2AgAgCEEEaiEIIAtBBGoiCyAORw0ACwsgDUUNAANAIAogASAIQQJ0aigCAEECdGpBADYCACAIQQFqIQggDEEBaiIMIA1HDQALCwJAAkACQCAEIAprQQJ1IgQOAgIAAQsgCigCACEEDAELIAogBEEBayILQQJ0aigCACEEIAtFDQAgCSgCkAEhAUEAIQggC0EETwRA/QwAAAAAAAAAAAAAAAAAAAAAIAT9HAAhHSALQXxxIghBBGsiBkECdkEBaiIMQQNxIQNBACENAkAgBkEMSQRAQQAhBgwBCyAMQfz///8HcSEPQQAhBkEAIQ4DQCAKIAZBAnQiDEEwciIEav0AAgAgASAEav0AAgD9tQEgCiAMQSByIgRq/QACACABIARq/QACAP21ASAKIAxBEHIiBGr9AAIAIAEgBGr9AAIA/bUBIAogDGr9AAIAIAEgDGr9AAIA/bUBIB39rgH9rgH9rgH9rgEhHSAGQRBqIQYgDkEEaiIOIA9HDQALCyADBEADQCAKIAZBAnQiDGr9AAIAIAEgDGr9AAIA/bUBIB39rgEhHSAGQQRqIQYgDUEBaiINIANHDQALCyAdIB0gHf0NCAkKCwwNDg8AAAAAAAAAAP2uASIdIB0gHf0NBAUGBwAAAAAAAAAAAAAAAP2uAf0bACEEIAggC0YNAQsDQCAKIAhBAnQiBmooAgAgASAGaigCAGwgBGohBCAIQQFqIgggC0cNAAsLAkAgFUUEQEEAIQNBACEBDAELIBVBAEgNAyAVEKIEIQMgBUUEQCADIQEMAQsgAyAQIBxqIBUQ8wMiCCEBIAggFWohAwsCQCAJKAIkIAkoAiAiBmsiCEUNACAIQQJ1IghBASAIQQFLGyIMQQNxIQ5BACELQQAhCCAMQQFrQQNPBEAgDEF8cSEQQQAhDQNAIAEgBiAIQQJ0IgxqKAIAQQJ0akEANgIAIAEgBiAMQQRyaigCAEECdGpBADYCACABIAYgDEEIcmooAgBBAnRqQQA2AgAgASAGIAxBDHJqKAIAQQJ0akEANgIAIAhBBGohCCANQQRqIg0gEEcNAAsLIA5FDQADQCABIAYgCEECdGooAgBBAnRqQQA2AgAgCEEBaiEIIAtBAWoiCyAORw0ACwsCQAJAAkAgAyABa0ECdSIGDgICAAELIAEoAgAhBgwBCyABIAZBAWsiDUECdGooAgAhBiANRQ0AIAkoAnAhDEEAIQggDUEETwRA/QwAAAAAAAAAAAAAAAAAAAAAIAb9HAAhHSANQXxxIghBBGsiBkECdkEBaiILQQNxIQ9BACEOAkAgBkEMSQRAQQAhBgwBCyALQfz///8HcSEXQQAhBkEAIRADQCABIAZBAnQiC0EwciIDav0AAgAgAyAMav0AAgD9tQEgASALQSByIgNq/QACACADIAxq/QACAP21ASABIAtBEHIiA2r9AAIAIAMgDGr9AAIA/bUBIAEgC2r9AAIAIAsgDGr9AAIA/bUBIB39rgH9rgH9rgH9rgEhHSAGQRBqIQYgEEEEaiIQIBdHDQALCyAPBEADQCABIAZBAnQiC2r9AAIAIAsgDGr9AAIA/bUBIB39rgEhHSAGQQRqIQYgDkEBaiIOIA9HDQALCyAdIB0gHf0NCAkKCwwNDg8AAAAAAAAAAP2uASIdIB0gHf0NBAUGBwAAAAAAAAAAAAAAAP2uAf0bACEGIAggDUYNAQsDQCABIAhBAnQiC2ooAgAgCyAMaigCAGwgBmohBiAIQQFqIgggDUcNAAsLIAAgG2ogGSAEQQJ0aigCACAaIAZBAnRqKAIAIAcRBQA6AAAgAQRAIAEQ3QMLIAoEQCAKEN0DCyAWBEAgFhDdAwsgAEEBaiIAIBFHDQALCyAJKAIgIggEQCAJIAg2AiQgCBDdAwsgCSgCUCIIBEAgCSAINgJUIAgQ3QMLIAkoAnAiCARAIAkgCDYCdCAIEN0DCyAJKAKQASIIBEAgCSAINgKUASAIEN0DCyAJKAKwASIIBEAgCSAINgK0ASAIEN0DCyAJKALgASIIBEAgCSAINgLkASAIEN0DCyATBEAgExDdAwsgEgRAIBIQ3QMLIAlB8AFqJAAMAQsQAAALC98DAQh/IwBBIGsiCSQAIAAQCyEAIAMQCyEDIAYQCygCACELIAMoAgAhDCAAKAIAIQ0gCUEANgIUAkACQAJAAkBB/KsBKAIAIgpFDQAgB0GV08feBWwiAEEYdiAAc0GV08feBWxB1Mye+gZzIgBBDXYgAHNBldPH3gVsIgBBD3YgAHMhBkH4qwEoAgACfyAKQQFrIAZxIAppIgNBAU0NABogBiAGIApJDQAaIAYgCnALIg5BAnRqKAIAIgBFDQAgACgCACIARQ0AIApBAWshDyADQQFLIRADQAJAIAYgACgCBCIDRwRAAkAgEEUEQCADIA9xIQMMAQsgAyAKSQ0AIAMgCnAhAwsgAyAORg0BDAMLIAAoAgggB0YNAwsgACgCACIADQALC0MAAID/QwAAgH9BACAJQRRqIAcRFgBFBEAgCSAHNgIIIAkgCSgCFDYCDCAJQRhqQfirASAJQQhqIAlBCGoQzQFB6KoBQeiqASgCAEEBajYCACAJKAIUIQAMAgtBsxxBABAYDAILIAkgACgCDCIANgIUCyAAIAIgASAFIAQgDSAMIAtB7KoBKAIAIAgRFAAiAARAIAkgADYCAEHTGyAJEBgMAQsgCSgCFEHsqgEoAgAQrwILIAlBIGokAAvWBAMHfwJ9AX4gAigCACIIQZXTx94FbCICQRh2IAJzQZXTx94FbEHUzJ76BnMiAkENdiACc0GV08feBWwiAkEPdiACcyEGIAACfwJAIAEoAgQiBEUNACABKAIAAn8gBiAEQQFrcSAEaSIFQQFNDQAaIAYgBCAGSw0AGiAGIARwCyIHQQJ0aigCACICRQ0AIARBAWshCSAFQQFLIQoDQCACKAIAIgJFDQEgBiACKAIEIgVHBEACQCAKRQRAIAUgCXEhBQwBCyAEIAVLDQAgBSAEcCEFCyAFIAdHDQILIAIoAgggCEcNAAtBAAwBC0EQEKIEIQIgAykCACENIAIgBjYCBCACIA03AgggAkEANgIAAkBBACAEIAEoAgxBAWqzIgwgASoCECILIASzlF4bDQAgBCAEQQFrcUEARyAEQQNJciAEQQF0ciEFIAECfyAMIAuVjSILQwAAgE9dIAtDAAAAAGBxBEAgC6kMAQtBAAsiBCAFIAQgBUsbEBUgASgCBCIEIARBAWtxRQRAIARBAWsgBnEhBwwBCyAEIAZLBEAgBiEHDAELIAYgBHAhBwsCQCABKAIAIAdBAnRqIgYoAgAiBUUEQCACIAEoAgg2AgAgASACNgIIIAYgAUEIajYCACACKAIAIgVFDQEgBSgCBCEFAkAgBCAEQQFrIgZxRQRAIAUgBnEhBQwBCyAEIAVLDQAgBSAEcCEFCyABKAIAIAVBAnRqIAI2AgAMAQsgAiAFKAIANgIAIAUgAjYCAAsgASABKAIMQQFqNgIMQQELOgAEIAAgAjYCAAutBAIBfAJ/AkAgACAAWwRAA0AgALsQgQREGC1EVPshGUCgEIEEIgFEGC1EVPsh6T9jBEAjAEEQayICJAACQCABvUIgiKdB/////wdxIgNB+8Ok/wNNBEAgA0GAgMDyA0kNASABRAAAAAAAAAAAQQAQ7wMhAQwBCyADQYCAwP8HTwRAIAEgAaEhAQwBCwJAAkACQAJAIAEgAhDuA0EDcQ4DAAECAwsgAisDACACKwMIQQEQ7wMhAQwDCyACKwMAIAIrAwgQ7AMhAQwCCyACKwMAIAIrAwhBARDvA5ohAQwBCyACKwMAIAIrAwgQ7AOaIQELIAJBEGokACABtg8LIAFEGC1EVPsh+T9jBEAjAEEQayICJAACfEQYLURU+yHpPyABRBgtRFT7Iem/oKEiAb1CIIinQf////8HcSIDQfvDpP8DTQRARAAAAAAAAPA/IANBnsGa8gNJDQEaIAFEAAAAAAAAAAAQ7AMMAQsgASABoSADQYCAwP8HTw0AGgJAAkACQAJAIAEgAhDuA0EDcQ4DAAECAwsgAisDACACKwMIEOwDDAMLIAIrAwAgAisDCEEBEO8DmgwCCyACKwMAIAIrAwgQ7AOaDAELIAIrAwAgAisDCEEBEO8DCyEBIAJBEGokACABtg8LIAFEGC1EVPshCUBjRQ0CRBgtRFT7Ifk/IAFEGC1EVPsh+b+gobYiACAAWw0ACwtDAADAfw8LRBgtRFT7IRlAIAGhthDOAYwLQQEBf0GUrAEoAgAiAARAA0AgACgCACEBIAAQmAQgASIADQALC0GMrAEoAgAhAEGMrAFBADYCACAABEAgABCYBAsLywMBCX8jAEEgayIEJAAgABALIQAgARALIgcoAgAhCCAAKAIAIQkgBEEANgIUAkACQAJAAkBBkKwBKAIAIgVFDQAgAkGV08feBWwiAEEYdiAAc0GV08feBWxB1Mye+gZzIgBBDXYgAHNBldPH3gVsIgBBD3YgAHMhBkGMrAEoAgACfyAFQQFrIAZxIAVpIgFBAU0NABogBiAFIAZLDQAaIAYgBXALIgpBAnRqKAIAIgBFDQAgACgCACIARQ0AIAVBAWshCyABQQFLIQwDQAJAIAYgACgCBCIBRwRAAkAgDEUEQCABIAtxIQEMAQsgASAFSQ0AIAEgBXAhAQsgASAKRg0BDAMLIAAoAgggAkYNAwsgACgCACIADQALC0EBQQFBAUEBIARBFGogAhELAEUEQCAEIAI2AgggBCAEKAIUNgIMIARBGGpBjKwBIARBCGogBEEIahDNAUHoqgFB6KoBKAIAQQFqNgIAIAQoAhQhAAwCC0GzHEEAEBgMAgsgBCAAKAIMIgA2AhQLIAAgBygCBCAJIAhB7KoBKAIAIAMRCwAiAARAIAQgADYCAEHTGyAEEBgMAQsgBCgCFEHsqgEoAgAQrwILIARBIGokAAsQAEGgrAFBpKwBKAIAENIBCyAAIAEEQCAAIAEoAgAQ0gEgACABKAIEENIBIAEQmAQLC1cBAn9BtKwBKAIAIgAEQANAIAAoAgAhAiAAKAIMIgEEQCAAIAE2AhAgARCYBAsgABCYBCACIgANAAsLQaysASgCACEAQaysAUEANgIAIAAEQCAAEJgECwtXAQJ/QcisASgCACIABEADQCAAKAIAIQIgACgCDCIBBEAgACABNgIQIAEQmAQLIAAQmAQgAiIADQALC0HArAEoAgAhAEHArAFBADYCACAABEAgABCYBAsL4BkEKn8EfQJ+AXsjAEHgAGsiDSQAQwAAgH9DAADAQEMAAIB/IAhBAkYbIAhBAUYbIThDAAAAAEMAAID/IAhBAWtBAkkbITkgASgCACEaAkACQCAGDQAgBw0AIBpBAUcNAEEBIRogBCgCAEEBRw0AQQAgCCAIQQNrQQJJGyEFIAAQCyEGIAMQCyEHIAwQCygCACESIAcoAgAhEyAGKAIAIQ5BACEAIAkEQCAJEAsoAgAhAAsgDUEANgIwIA0gBTYCWCANIAk2AlQgDSADNgJQAkACQAJAQaSsASgCACIGRQ0AQaSsASECA0ACQAJAIAYoAhAiByADSQ0AAkAgAyAHSQ0AIAYoAhQiByAJSQ0BIAcgCUsNACAGKAIYIAVPDQAgBkEEaiEGDAILIAYhAgwBCyAGQQRqIQYLIAYoAgAiBg0ACyACQaSsAUYNACACKAIQIgYgA0sNACADIAZLDQEgAigCFCIGIAlLDQAgBiAJSQ0BIAIoAhggBU0NAQsgBCgCBCEGIAQoAgghByANQTBqIRAjAEEQayIFJABBAiEEAkAgObxB/////wdxQYCAgPwHSw0AIDi8IQIgOCA5Xw0AIAJB/////wdxQYCAgPwHSw0AQeSzAUHEswFB5LMBKAIAG0HEswEgOIwgOVsbQcSzASA4QwAAgH9bGyECQfSzASgCACIEBEAgBSA5IDggBBERAAsCf0EAIQRBASEPAkBBgK0BKAIAIhFBAXFFDQBBBSEPIBFBAnFBAkcNAEECIQ8CQCAGQQFrIAZPDQAgB0EBayAHTw0BQQYhDxDwASIERQ0AQfuzAS0AACEXIAQgB0H5swEtAAAiERDqASAGQQFB+rMBLQAAdCIUEPwBQQJ0QQRqbCIbEP0BIhg2AnQgGEUNASAYQQAgGxD1AxogByAGIBEgFEEBIBd0IBMgACAEKAJ0QQBBhQIRDAAgBCAHNgJsIAQgBjYCVCAEIAc2AjggBCAGNgI0IARB0AFqIAVBEBDzAxogBEEENgLEAiAEQQE2AsgBIARBKDYCwAIgAjUCACE7IAI1AgghPEH4swEtAAAhDyAEQQA2AsAEIAQgFDoA0gIgBCAROgDRAiAEIA86ANACIAQgOyA8QiCGhDcCyAIgECAENgIAQQAMAgtBACEECyAEEJUCIA8LIQQLIAVBEGokACAEIgZFBEAgDSANKAJYNgIoIA0gDSkDUDcDICANIA0oAjA2AiwgDUFAayEQIA1BIGohBCANQSBqIQ8CQAJAQaSsASgCACIABEBBpKwBIQIgBCgCCCEFIAQoAgQhBiAEKAIAIQcDQAJAAkACQAJAIAcgACgCECIESQ0AIAQgB0kNAiAGIAAoAhQiBEkNACAEIAZJDQIgBSAAKAIYIgRPDQELIAAoAgAiBA0CDAULIAQgBU8NBQsgAEEEaiECIAAoAgQiBEUNBCACIQALIAAhAiAEIQAMAAsAC0GkrAEhAAsgACECCyAQIAIoAgAiBAR/QQAFQSAQogQhBCAP/QACACE9IAQgADYCCCAEQgA3AgAgBCA9/QsCECACIAQ2AgBBoKwBKAIAKAIAIgAEf0GgrAEgADYCACACKAIABSAECyEAQaSsASgCACAAECVBqKwBQaisASgCAEEBajYCAEEBCzoABCAQIAQ2AgAgAyANQdAAakGsrAEQ1gEgCQRAIAkgDUHQAGpBwKwBENYBC0HoqgFB6KoBKAIAQQFqNgIAIA0oAjAhBgwCCyANIAY2AhBBlSsgDUEQahAYDAMLIA0gAigCHCIGNgIwCyABKAIEIQBB7KoBKAIAIQEgBigCwAJBKEYEfyAGQdABaiERIAEQ0AMhByAGQQA2AsAEQYCtAS0AAEEBcQR/IAYgAAR/IAYgEjYCcCAGQQE2AmggBiAANgJkIAYgDjYCWCAGQQE2AlAgBiAANgJMIAZBATYCACAGKALIAiECIAYtANECIQMgBi0A0AIhBCAGKAI0IQUgAEEBRgRAQQEgBCAGKALMAiIBGyEEIAEgAiABGyECCyAGKAI4IQEgBigCVCEJIAYoAnQhECAGLQDSAiEPIAYgAjYC3AMgBkECNgLYAyAGQQA2AtQDIAYgA0ECdDYC0AMgBiASNgLIAyAGQQA2AsQDIAYgEDYCvAMgBiAJQQJ0NgK4AyAGIA42ArQDIAYgBUECdDYCsAMgBkHgA2oiDv0MAAAAAAAAAAAAAAAAAAAAAP0LBAAgBv0MAAAAAAAAAAAAAAAAAAAAAP0LBPADIAb9DAAAAAAAAAAAAAAAAAAAAAD9CwSABCAGIAYoAmxBAnQ2AswDIAYgBSAPEPwBQQJ0QQRqNgLAAyAOIBFBEBDzAxogBEH/AXEhEgJ/IAEgB0ECSQ0AGiABIAAgEhDrASABbCAHQQVsEOsBIg4gAU8NABogASABIAMgDmwQ6wEgA2wQ7gELIQ4gBkEFNgLYAiAGIA42AvwCIAYgEjYC+AIgBiABNgLkAiAGIAA2AuACIAZB/QE2AtwCQQEFQQILNgLABEEABUEBCwVBAgsiBgRAIA0gBjYCAEGnKiANEBgMAgsgDSgCMEHsqgEoAgAQrwIMAQsgBEEEQQggBxtqKAIAIRUgAUEIQQQgBhtqKAIAIRYgAUEEQQggBhtqKAIAIRkCQCACBEAgAkEASA0BIAJBAnQiExCiBCIcIAEgExDzAyACQQJ0aiETCyAFBH8gBUEASA0BIAVBAnQiARCiBCIdIAQgARDzAyAFQQJ0agVBAAshAiANQQA2AlggDUIANwNQIBMgHGsiAQRAIAFBAEgNASANIAEQogQiBTYCUCANIAUgAUECdUECdGo2AlggDSAFIBwgARDzAyABajYCVAsgDUEgaiANQdAAahDjASANKAJQIgEEQCANIAE2AlQgARCYBAsgDUEANgI4IA1CADcDMCACIB1rIgEEQCABQQBIDQEgDSABEKIEIgI2AjAgDSACIAFBAnVBAnRqNgI4IA0gAiAdIAEQ8wMgAWo2AjQLIA1BQGsgDUEwahDjASANKAIwIgEEQCANIAE2AjQgARCYBAsgDSgCQCIBKAIEIQUgDSgCICICKAIEIQQgASgCACEkIAIoAgAhJSAAEAshAiADEAshAyAMEAsoAgAhIyADKAIAIQEgAigCACECAn8gCUUEQEF/ISFBAAwBCyAJEAsiAygCBEEBayEhIAMoAgALISYgGiAVIBZsIidsIgNBAEoEQCAjQQAgAyADQf////8DcUEAR2tBAnRBBGoQ9QMaCyAaBEAgBUEBIAcbIShBASAFIAcbIQVBASAEIAYbISkgBEEBIAYbIQQDQCAWBEAgDiAnbCEqQQAhD0EwIR4DQCAPQTBqIRsgFQRAIBYgGyAWIBtJGyErIBYgHiAWIB5JGyEsQTAhH0EAIREDQCARQTBqIRggGQRAIBUgGCAVIBhJGyEtIBUgHyAVIB9JGyEuQQAhIkEwISBBACEUA0AgFCIQQTBqIRQgDyArSQRAIBkgFCAUIBlLGyEvICJBMGxBAXIhMCAQQQFyITEgBSAQbCEyIAQgEGwhMyAZICAgGSAgSRsiE0EBcSE0IA8hFwNAIBEgLUkEQCAVIBdsITUgFyApbCE2IBEhEgNAQwAAAAAhNwJAIBAgL08NACAdKAIAQQFrIgYgDiAGIA5JGyAkbCASIChsaiEDIBwoAgBBAWsiBiAOIAYgDkkbICVsIDZqIQcgECEGIDQEQCACIAcgM2pBAnRqKgIAIAEgAyAyakECdGoqAgCUQwAAAACSITcgMSEGCyATIDBGDQADQCACIAcgBkEBaiIAIARsakECdGoqAgAgASADIAAgBWxqQQJ0aioCAJQgAiAHIAQgBmxqQQJ0aioCACABIAMgBSAGbGpBAnRqKgIAlCA3kpIhNyAGQQJqIgYgE0cNAAsLICMgEiA1aiIGICpqQQJ0aiIDKgIAITogAyA5IDggNyA6kiAJBH0gJiAhIAYgBiAhSxtBAnRqKgIABUMAAAAAC5IiNyA3IDheGyI3IDcgOV0bOAIAIBJBAWoiEiAuRw0ACwsgF0EBaiIXICxHDQALCyAiQQFqISIgIEEwaiEgIBQgGUkNAAsLIB9BMGohHyAYIhEgFUkNAAsLIB5BMGohHiAbIg8gFkkNAAsLIA5BAWoiDiAaRw0ACwsgDSgCQCIGBEAgDSAGNgJEIAYQmAQLIA0oAiAiBgRAIA0gBjYCJCAGEJgECyAdBEAgHRCYBAsgHEUNASAcEJgEDAELEAAACyAMEAsiBigCACEDAkACQAJAAkACQCAIQQNrDgQAAQIDBAsgAyAGKAIEIAogDBDdAQwDCyADIAYoAgQgCyAMENsBDAILIAMgBigCBCAMEOABDAELIAMgBigCBCAMENoBCyANQeAAaiQAC9YFAQl/IwBBIGsiBiQAIAYgADYCFAJAAkACQAJAIAIoAgQiBUUNACACKAIAIgoCfyAFQQFrIABxIAVpIglBAU0NABogACAAIAVJDQAaIAAgBXALIgdBAnRqKAIAIgNFDQAgAygCACIDRQ0AIAVBAWshCCAJQQFLIQsDQAJAIAAgAygCBCIERwRAAkAgC0UEQCAEIAhxIQQMAQsgBCAFSQ0AIAQgBXAhBAsgBCAHRg0BDAMLIAMoAgggAEYNAwsgAygCACIDDQALCyAGQQwQogQiADYCCCAGIABBDGoiAzYCECAAIAEoAgg2AgggACABKQIANwIAIAYgAzYCDCAGQRhqIAIgBkEUaiAGQRRqIAZBCGoQvAEgBigCFEHMABAMIAYoAggiAEUNASAGIAA2AgwgABCYBAwBCyAKAn8gACAIcSAJQQFNDQAaIAAgACAFSQ0AGiAAIAVwCyICQQJ0aigCACIDRQ0BIAMoAgAiA0UNASAJQQFLIQcDQAJAAkAgACADKAIEIgRHBEACQCAHRQRAIAQgCHEhBAwBCyAEIAVJDQAgBCAFcCEECyACIARGDQEMBQsgAygCCCAARg0BCyADKAIAIgMNAQwDCwsgAygCECIAIAMoAhQiAkkEQCAAIAEpAgA3AgAgACABKAIINgIIIAMgAEEMajYCEAwBCyAAIAMoAgwiBGsiBUEMbSIIQQFqIgBB1qrVqgFPDQEgACACIARrQQxtIgJBAXQiByAAIAdLG0HVqtWqASACQarVqtUASRsiAgR/IAJB1qrVqgFPDQIgAkEMbBCiBAVBAAsiByAIQQxsaiIAIAEpAgA3AgAgACABKAIINgIIIAAgBUF0bUEMbGohASAHIAJBDGxqIQIgAEEMaiEAIAVBAEoEQCABIAQgBRDzAxoLIAMgAjYCFCADIAA2AhAgAyABNgIMIARFDQAgBBCYBAsgBkEgaiQADwsQAAALFAAgAEGsrAEQ2AEgAEHArAEQ2AELugYBCX8jAEEQayIJJAAgCSAANgIMAkAgASgCBCIDRQ0AIAEoAgACfyADQQFrIABxIANpIgRBAU0NABogACAAIANJDQAaIAAgA3ALIgVBAnRqKAIAIgJFDQAgAigCACICRQ0AIANBAWshBiAEQQFLIQcDQAJAAkAgACACKAIEIgRHBEACQCAHRQRAIAQgBnEhBAwBCyADIARLDQAgBCADcCEECyAEIAVGDQEMBAsgAigCCCAARg0BCyACKAIAIgINAQwCCwsgAigCDCIHIAIoAhAiCkcEQEGkrAEoAgAhAgNAAn9BACACIgZFDQAaIAcoAgghCCAHKAIEIQUgBygCACEEQaSsASEDA0ACQAJAIAIoAhAiACAESQ0AAkAgACAESw0AIAIoAhQiACAFSQ0BIAAgBUsNACACKAIYIAhPDQAgAkEEaiECDAILIAIhAwwBCyACQQRqIQILIAIoAgAiAg0ACyAGIANBpKwBRg0AGiAGIAMoAhAiAiAESw0AGgJAIAIgBEkNACAGIAMoAhQiAiAFSw0BGiACIAVJDQAgBiAIIAMoAhhJDQEaCyADKAIcEJUCQeiqAUHoqgEoAgBBAWs2AgAgByEAAkBBpKwBKAIAIgZFDQAgACgCCCEIIAAoAgQhBSAAKAIAIQNBpKwBIQIgBiEAA0ACQAJAIAAoAhAiBCADSQ0AAkAgAyAESQ0AIAAoAhQiBCAFSQ0BIAQgBUsNACAAKAIYIAhPDQAgAEEEaiEADAILIAAhAgwBCyAAQQRqIQALIAAoAgAiAA0ACyACQaSsAUYNACADIAIoAhAiAEkNAAJAIAAgA0kNACAFIAIoAhQiAEkNASAAIAVJDQAgCCACKAIYSQ0BCwJAIAIoAgQiAEUEQCACKAIIIgMoAgAgAkYNASACQQhqIQQDQCAEKAIAIgBBCGohBCAAIAAoAggiAygCAEcNAAsMAQsDQCAAIgMoAgAiAA0ACwsgAkGgrAEoAgBGBEBBoKwBIAM2AgALQaisAUGorAEoAgBBAWs2AgAgBiACEL8BIAIQ3QMLQaSsASgCAAshAiAHQQxqIgcgCkcNAAsLIAEgCUEMahATCyAJQRBqJAALEABB1KwBQdisASgCABCRAQvHBAEFfyMAQSBrIgUkACACEAsoAgAhBiAFQQA2AhwCQAJAAkACQAJAQdisASgCACICRQ0AQdisASEDA0AgAiADIAIoAhAiBBshAyACIARFQQJ0aigCACICDQALIANB2KwBRg0AIAMoAhBBAkkNAQsgBUEcaiEEIwBB8ABrIgMkAEECIQICQEHstQEoAgAiAgRAIANDAACAP0MAAIA/QwAAgD8gAhEZAAtBAUEBQQFBACADQfAAQSVB6LUBKAIAIAQQgQIhAgsgA0HwAGokACACBEAgBSACNgIQQa4mIAVBEGoQGAwEC0HYrAEhA0HYrAEoAgAiAkUEQEHYrAEhAgwCCwNAAkAgAigCECIEQQJPBEAgAigCACIEDQEgAiEDDAQLIAQNAyACQQRqIQMgAigCBCIERQ0DIAMhAgsgAiEDIAQhAgwACwALIAUgAygCFCICNgIcDAELIAMoAgBFBEAgBSgCHCEHQRgQogQiBCAHNgIUIARBATYCECAEIAI2AgggBEIANwIAIAMgBDYCAEHUrAEoAgAoAgAiAgRAQdSsASACNgIAIAMoAgAhBAtB2KwBKAIAIAQQJUHcrAFB3KwBKAIAQQFqNgIAC0HoqgFB6KoBKAIAQQFqNgIAIAUoAhwhAgtB7KoBKAIAIQMgAigCwAJBJUYEfyACQQA2AsAEIAIgASAAIAYgAkHQAWpB8AAgAxDQAxCKAgVBAgsiAgRAIAUgAjYCAEHMJSAFEBgMAQsgBSgCHEHsqgEoAgAQrwILIAVBIGokAAtXAgJ/AX0gAxALIgEoAgQEQCABKAIAIQRBACEDA0AgBCADQQJ0IgVqIAAgBWoqAgAiBiACQwAAgD8gBkMAAAAAXRuUOAIAIANBAWoiAyABKAIESQ0ACwsLQQEBf0HorAEoAgAiAARAA0AgACgCACEBIAAQmAQgASIADQALC0HgrAEoAgAhAEHgrAFBADYCACAABEAgABCYBAsL1QoDC38CfQF+IwBBMGsiByQAIAIQCyELIAMQCygCACEMIAsoAgAhCCAHQQA2AiQCQAJAAkBB5KwBKAIAIgVFDQBB4KwBKAIAAn8gBUEBayACcSAFaSIEQQFNDQAaIAIgAiAFSQ0AGiACIAVwCyIGQQJ0aigCACIDRQ0AIAMoAgAiA0UNACAFQQFrIQkgBEEBSyEKA0ACQCACIAMoAgQiBEcEQAJAIApFBEAgBCAJcSEEDAELIAQgBUkNACAEIAVwIQQLIAQgBkYNAQwDCyADKAIIIAJGDQMLIAMoAgAiAw0ACwsCfyALKAIEIQMgB0EkaiEKQQEhBgJAAkBBgK0BLQAAQQFxRQ0AQQIhBiADQQFrIANPDQBBAA0AQQYhBhDwASIERQ0AIAQgA0ECdCIJQRBqEP0BIgU2AnQgBUUNASAFIAggCRDzAxogBEE/NgLAAiAEIAM2AmwgBCADNgJUIAQgAzYCPCAEQQA2AsAEIARBADYCyAEgCiAENgIAQQAMAgtBACEECyAEEJUCIAYLIgMEQCAHIAM2AhBB5yQgB0EQahAYCyAHIAI2AhggByAHKAIkNgIcIAdBGGohDUEAIQggB0EYaigCACEDIAdBKGoiDgJ/AkBB5KwBKAIAIgRFDQBB4KwBKAIAAn8gBEEBayADcSAEaSIFQQFNDQAaIAMgAyAESQ0AGiADIARwCyIIQQJ0aigCACIGRQ0AIARBAWshCSAFQQFLIQoDQCAGKAIAIgZFDQEgAyAGKAIEIgVHBEACQCAKRQRAIAUgCXEhBQwBCyAEIAVLDQAgBSAEcCEFCyAFIAhHDQILIAYoAgggA0cNAAtBAAwBC0EQEKIEIQYgDSkCACERIAYgAzYCBCAGIBE3AgggBkEANgIAAkBBACAEQeysASgCAEEBarMiEEHwrAEqAgAiDyAEs5ReGw0AIAQgBEEBa3FBAEcgBEEDSXIgBEEBdHIhBUHgrAECfyAQIA+VjSIPQwAAgE9dIA9DAAAAAGBxBEAgD6kMAQtBAAsiBCAFIAQgBUsbEBVB5KwBKAIAIgQgBEEBa3FFBEAgBEEBayADcSEIDAELIAMgBEkEQCADIQgMAQsgAyAEcCEICwJAQeCsASgCACAIQQJ0aiIFKAIAIgNFBEAgBkHorAEoAgA2AgBB6KwBIAY2AgAgBUHorAE2AgAgBigCACIDRQ0BIAMoAgQhAwJAIAQgBEEBayIFcUUEQCADIAVxIQMMAQsgAyAESQ0AIAMgBHAhAwtB4KwBKAIAIANBAnRqIAY2AgAMAQsgBiADKAIANgIAIAMgBjYCAAtB7KwBQeysASgCAEEBajYCAEEBCzoABCAOIAY2AgAgAkHRABAMQeiqAUHoqgEoAgBBAWo2AgAgBygCJCEDDAELIAcgAygCDCIDNgIkCyABIAsoAgRuIQIgDCEBQeyqASgCACEIAn9BAiADKALAAkE/Rw0AGiADQQA2AsAEQQFBgK0BLQAAQQFxRQ0AGiADIAIEfyADQfC2ASgCADYCyAMgAyADKAJsQQJ0NgLEAyADIAE2AsADIAMgAygCdDYCvAMgAyADKAJUQQJ0NgK4AyADIAA2ArQDIAMgAygCPEECdDYCsAMCfyACIAgQ0AMiAEECSQ0AGiACIAIgAEEFbBDrASIAIAJPDQAaIAIgAiAAQfS2AS8BACIBbBDrASABbBDuAQshASADQQI2AtgCIAMgATYC+AIgAyACNgLgAiADQYcCNgLcAkEBBUECCzYCwARBAAsiAwRAIAcgAzYCAEGDJCAHEBgLIAcoAiRB7KoBKAIAEK8CIAdBMGokAAv1AQEHfyMAQRBrIgQkACAEIAA2AgwCQAJAQeSsASgCACICRQ0AQeCsASgCAAJ/IAJBAWsgAHEgAmkiAUEBTQ0AGiAAIAAgAkkNABogACACcAsiBUECdGooAgAiA0UNACADKAIAIgNFDQAgAkEBayEGIAFBAUshBwNAAkAgACADKAIEIgFHBEACQCAHRQRAIAEgBnEhAQwBCyABIAJJDQAgASACcCEBCyABIAVGDQEMAwsgAygCCCAARg0DCyADKAIAIgMNAAsLEAAACyADKAIMEJUCQeiqAUHoqgEoAgBBAWs2AgBB4KwBIARBDGoQEiAEQRBqJAALEABB9KwBQfisASgCABCRAQu5BAEFfyMAQSBrIgUkACACEAsoAgAhBiAFQQA2AhwCQAJAAkACQAJAQfisASgCACICRQ0AQfisASEDA0AgAiADIAIoAhAiBBshAyACIARFQQJ0aigCACICDQALIANB+KwBRg0AIAMoAhBBAkkNAQsgBUEcaiECIwBB4ABrIgMkAEHQtgEoAgAiBARAIANBCGogBBECAAtBAUEBQQFBACADQQhqQdgAQcQAQcy2ASgCACACEIECIQIgA0HgAGokACACBEAgBSACNgIQQcApIAVBEGoQGAwEC0H4rAEhA0H4rAEoAgAiAkUEQEH4rAEhAgwCCwNAAkAgAigCECIEQQJPBEAgAigCACIEDQEgAiEDDAQLIAQNAyACQQRqIQMgAigCBCIERQ0DIAMhAgsgAiEDIAQhAgwACwALIAUgAygCFCICNgIcDAELIAMoAgBFBEAgBSgCHCEHQRgQogQiBCAHNgIUIARBATYCECAEIAI2AgggBEIANwIAIAMgBDYCAEH0rAEoAgAoAgAiAgRAQfSsASACNgIAIAMoAgAhBAtB+KwBKAIAIAQQJUH8rAFB/KwBKAIAQQFqNgIAC0HoqgFB6KoBKAIAQQFqNgIAIAUoAhwhAgtB7KoBKAIAIQMgAigCwAJBxABGBH8gAkEANgLABCACIAEgACAGIAJB0AFqQdgAIAMQ0AMQigIFQQILIgIEQCAFIAI2AgBB2iggBRAYDAELIAUoAhxB7KoBKAIAEK8CCyAFQSBqJAALvyQCKX8BeyMAQeAAayIKJAAgCkEANgIYIApCADcDECAKQQA2AgggCkIANwMAIAEgAiAKQRBqIAoQ4gEhJgJAAkAgASgCACICIAEoAgQiBkcEQEEBIRYCQCAGIAJrQQRrIgFBDE8EQCABQQJ2QQFqIgtB/P///wdxIglBBGsiAUECdkEBaiIOQQNxIQUCQCABQQxJBED9DAEAAAABAAAAAQAAAAEAAAAhLUEAIQEMAQsgDkH8////B3EhCP0MAQAAAAEAAAABAAAAAQAAACEtQQAhAQNAIAIgAUECdCIOQTByav0AAgAgAiAOQSByav0AAgAgAiAOQRByav0AAgAgAiAOav0AAgAgLf21Af21Af21Af21ASEtIAFBEGohASAEQQRqIgQgCEcNAAsLIAUEQANAIAIgAUECdGr9AAIAIC39tQEhLSABQQRqIQEgB0EBaiIHIAVHDQALCyAtIC0gLf0NCAkKCwwNDg8AAAAAAAAAAP21ASItIC0gLf0NBAUGBwAAAAAAAAAAAAAAAP21Af0bACEWIAkgC0YNASACIAlBAnRqIQILA0AgAigCACAWbCEWIAJBBGoiAiAGRw0ACwsgFkUNAgwBC0EBIRYLA0AgAyAVQQJ0IgJqIQ4gACACaiEBAkACQAJAAkACQCAKKAIUIgcgCigCECICayIJQQJ1IgxBAmsOAwADAgELIAIoAgAiB0UNAyACKAIEIgtBfHEhCCALQQNxIQUgC0EBayEMQQAhCQNAAkAgC0UNACAOIAlBAnRqIQJBACEEIAxBAksEQANAIAIgASoCADgCACACIAdBAnQiBmoiAiABKgIEOAIAIAIgBmoiAiABKgIIOAIAIAIgBmoiAiABKgIMOAIAIAIgBmohAiABQRBqIQEgBEEEaiIEIAhHDQALC0EAIQYgBUUNAANAIAIgASoCADgCACABQQRqIQEgAiAHQQJ0aiECIAZBAWoiBiAFRw0ACwsgCUEBaiIJIAdHDQALDAMLAkAgAiAHRgRAQQEhDwwBC0EBIQ8gCUEEayIGQQxJBH8gAgUgBkECdkEBaiIRQfz///8HcSIQQQRrIgZBAnZBAWoiBEEDcSELQQAhBQJAIAZBDEkEQP0MAQAAAAEAAAABAAAAAQAAACEtQQAhBgwBCyAEQfz///8HcSEN/QwBAAAAAQAAAAEAAAABAAAAIS1BACEGQQAhCANAIAIgBkECdCIEQTByav0AAgAgAiAEQSByav0AAgAgAiAEQRByav0AAgAgAiAEav0AAgAgLf21Af21Af21Af21ASEtIAZBEGohBiAIQQRqIgggDUcNAAsLIAsEQANAIAIgBkECdGr9AAIAIC39tQEhLSAGQQRqIQYgBUEBaiIFIAtHDQALCyAtIC0gLf0NCAkKCwwNDg8AAAAAAAAAAP21ASItIC0gLf0NBAUGBwAAAAAAAAAAAAAAAP21Af0bACEPIBAgEUYNASACIBBBAnRqCyEGA0AgBigCACAPbCEPIAZBBGoiBiAHRw0ACwsgCkEANgJIIApCADcDQAJAAkAgCQRAIAlBAEgNASAKIAkQogQiBjYCQCAKIAYgDEECdGo2AkggCiAGIAIgCRDzAyAJajYCRAsgCkHQAGogCkFAaxDjASAKKAJAIgIEQCAKIAI2AkQgAhCYBAsCfyAKKAIUIAooAhAiB2siAkUEQEEAIRNBAAwBCyACQQBIDQFBACEIIAIQogQiE0EAIAJBAnUiAkEBa0H/////A3EiEEECdEEEahD1AyEGIAJBASACQQFLGyIFQQNxIQwgCigCACEEQQAhAiAFQQFrQQNPBEAgBUF8cSENQQAhCQNAIAYgAkECdCIFaiAHIAQgBWooAgBBAnRqKAIANgIAIAYgBUEEciILaiAHIAQgC2ooAgBBAnRqKAIANgIAIAYgBUEIciILaiAHIAQgC2ooAgBBAnRqKAIANgIAIAYgBUEMciIFaiAHIAQgBWooAgBBAnRqKAIANgIAIAJBBGohAiAJQQRqIgkgDUcNAAsLIBBBAWohCSAMBEADQCAGIAJBAnQiBWogByAEIAVqKAIAQQJ0aigCADYCACACQQFqIQIgCEEBaiIIIAxHDQALCyAGIAlBAnRqCyECIApBADYCKCAKQgA3AyAgAiATayICBEAgAkEASA0BIAogAhCiBCIGNgIgIAogBiACQQJ1QQJ0ajYCKCAKIAYgEyACEPMDIAJqNgIkCyAKQTBqIApBIGoQ4wEgCigCICICBEAgCiACNgIkIAIQmAQLQQAhESAPRQ0BA0BBACEQQQAhBgJAIAooAlQgCigCUCIFayIEQQJ1IgJBAWoiByACSQ0AIAdBgICAgARPDQIgB0ECdBCiBCIGQQAgAkECdCIJQQRqEPUDIgggCWoiFEEEaiEQIAQEQCACQQEgAkEBSxsiCUEBcSEZQQAhByARIQIgBEEITwRAIAlBfnEhDUEAIQkDQCAIIAdBAnQiBGogAiAEIAVqKAIAIgtuIgw2AgAgCCAEQQRyIgRqIAIgCyAMbGsiAiAEIAVqKAIAIgRuIgs2AgAgAiAEIAtsayECIAdBAmohByAJQQJqIgkgDUcNAAsLIBQgGQR/IAggB0ECdCIHaiACIAUgB2ooAgAiB24iBDYCACACIAQgB2xrBSACCzYCAAwBCyAIIBE2AgALAkACQAJAAkACQAJAAn8gECAGayICRQRAQQAhDEEADAELIAJBAEgNCEEAIQggAhCiBCIMQQAgAkECdSICQQFrQf////8DcUECdCIUQQRqEPUDIQcgAkEBIAJBAUsbIgVBA3EhDSAKKAIAIQRBACECIAVBAWtBA08EQCAFQXxxIRBBACEJA0AgByACQQJ0IgVqIAYgBCAFaigCAEECdGooAgA2AgAgByAFQQRyIgtqIAYgBCALaigCAEECdGooAgA2AgAgByAFQQhyIgtqIAYgBCALaigCAEECdGooAgA2AgAgByAFQQxyIgVqIAYgBCAFaigCAEECdGooAgA2AgAgAkEEaiECIAlBBGoiCSAQRw0ACwsgDQRAA0AgByACQQJ0IgVqIAYgBCAFaigCAEECdGooAgA2AgAgAkEBaiECIAhBAWoiCCANRw0ACwsgByAUakEEagsgDGtBAnUiAg4CAwABCyAMKAIAIQQMAQsgDCACQQFrIghBAnRqKAIAIQQgCEUNACAKKAIwIQdBACECIAhBBE8EQP0MAAAAAAAAAAAAAAAAAAAAACAE/RwAIS0gCEF8cSICQQRrIgRBAnZBAWoiBUEDcSEQQQAhCQJAIARBDEkEQEEAIQQMAQsgBUH8////B3EhFEEAIQRBACELA0AgDCAEQQJ0IgVBMHIiDWr9AAIAIAcgDWr9AAIA/bUBIAwgBUEgciINav0AAgAgByANav0AAgD9tQEgDCAFQRByIg1q/QACACAHIA1q/QACAP21ASAFIAxq/QACACAFIAdq/QACAP21ASAt/a4B/a4B/a4B/a4BIS0gBEEQaiEEIAtBBGoiCyAURw0ACwsgEARAA0AgDCAEQQJ0IgVq/QACACAFIAdq/QACAP21ASAt/a4BIS0gBEEEaiEEIAlBAWoiCSAQRw0ACwsgLSAtIC39DQgJCgsMDQ4PAAAAAAAAAAD9rgEiLSAtIC39DQQFBgcAAAAAAAAAAAAAAAD9rgH9GwAhBCACIAhGDQELA0AgDCACQQJ0IgVqKAIAIAUgB2ooAgBsIARqIQQgAkEBaiICIAhHDQALCyAOIARBAnRqIAEgEUECdGoqAgA4AgAMAQsgDiABIBFBAnRqKgIAOAIAIAxFDQELIAwQmAQLIAYEQCAGEJgECyAPIBFBAWoiEUcNAAsMAQsQAAALIAooAjAiAgRAIAogAjYCNCACEJgECyATBEAgExCYBAsgCigCUCICRQ0CIAogAjYCVCACEJgEDAILIAooAgAiBigCBCEFIAIoAgghCSACKAIEIQtBASEXIAIoAgwiByEcQQEhD0EBIQQCQAJAAkAgBigCACIIQQJGDQBBASEcIAchFyAFQQJHBEAgB0EBIAYoAghBAkYiBBshD0EBIAcgBBshBEEBIRcLIAhBAUcNACAHIAlsIRwMAQsCQCAFQQFGBEAgByAJbCEXDAELIAcgCWwiDCAPIAYoAghBAUYiDRshDyAEIAwgDRshBAsgCA0AIAcgCWwgC2whHAwBCyAFRQRAIAcgCWwgC2whF0EAIQUMAQsgDyAHIAlsIAtsIgcgBigCCCIJGyEPIAcgBCAJGyEECyACIAhBAnRqKAIAIidFDQEgBEEBRiACIAYoAgxBAnRqKAIAIghBA0txIRQgCEEBcSEZIAhBfHEhHiAIIBVqISUgAiAGKAIIQQJ0aigCACINIAhsISggAiAFQQJ0aigCACIYIA1sIAhsISkgCEEEayIfQQJ2QQFqIgJB/v///wdxIQwgAkEBcSEgQQAhGgNAIBgEQCAYIBpsIRsgJSAaIBxsIh1qISEgFSAdaiEqICUgGiApbCICaiErIAIgFWohLEEAIRIDQCANBEAgEiAbaiANbCEQIBIgF2wiAiAdaiERIAIgIWohEyACICpqISIgKyASIChsIgJqISMgAiAsaiEkQQAhCwNAAkAgCEUNACALIBBqIAhsIQYgESALIA9sIgVqIQdBACECAkAgFEUNACADICQgCCALbCIJakECdGogACAFIBNqQQJ0akkEQCAAIAUgImpBAnRqIAMgCSAjakECdGpJDQELQQAhBSAfQQRPBEADQCAOIAIgBmpBAnRqIAEgByACIARsakECdGr9AAIA/QsCACAOIAJBBHIiCSAGakECdGogASAHIAQgCWxqQQJ0av0AAgD9CwIAIAJBCGohAiAFQQJqIgUgDEcNAAsLICAEQCAOIAIgBmpBAnRqIAEgByACIARsakECdGr9AAIA/QsCAAsgHiICIAhGDQELIAJBAXIhBSAZBEAgDiACIAZqQQJ0aiABIAcgAiAEbGpBAnRqKgIAOAIAIAUhAgsgBSAIRg0AA0AgDiACIAZqQQJ0aiABIAcgAiAEbGpBAnRqKgIAOAIAIA4gAkEBaiIFIAZqQQJ0aiABIAcgBCAFbGpBAnRqKgIAOAIAIAJBAmoiAiAIRw0ACwsgC0EBaiILIA1HDQALCyASQQFqIhIgGEcNAAsLIBpBAWoiGiAnRw0ACwwBC0EBIQ8gCigCACIFKAIEIQYgAigCBCEJIAIoAggiByEbQQEhBAJAAkAgBSgCACIIQQFGDQBBASEbIAdBASAGQQFGIgQbIQ9BASAHIAQbIQQgCA0AIAcgCWwhGwwBCyAPIAcgCWwiByAGGyEPIAcgBCAGGyEECyACIAhBAnRqKAIAIh1FDQAgBEEBRiACIAUoAghBAnRqKAIAIghBA0txIRQgCEEBcSEZIAhBfHEhHiAIIBVqIRggAiAGQQJ0aigCACINIAhsISEgCEEEayIfQQJ2QQFqIgJB/v///wdxIQwgAkEBcSEgQQAhEgNAIA0EQCANIBJsIREgGCASIBtsIhBqIRMgECAVaiEiIBggEiAhbCICaiEjIAIgFWohJEEAIQsDQAJAIAhFDQAgCyARaiAIbCEGIAsgD2wiBSAQaiEHQQAhAgJAIBRFDQAgAyAkIAggC2wiCWpBAnRqIAAgBSATakECdGpJBEAgACAFICJqQQJ0aiADIAkgI2pBAnRqSQ0BC0EAIQUgH0EETwRAA0AgDiACIAZqQQJ0aiABIAcgAiAEbGpBAnRq/QACAP0LAgAgDiACQQRyIgkgBmpBAnRqIAEgByAEIAlsakECdGr9AAIA/QsCACACQQhqIQIgBUECaiIFIAxHDQALCyAgBEAgDiACIAZqQQJ0aiABIAcgAiAEbGpBAnRq/QACAP0LAgALIB4iAiAIRg0BCyACQQFyIQUgGQRAIA4gAiAGakECdGogASAHIAIgBGxqQQJ0aioCADgCACAFIQILIAUgCEYNAANAIA4gAiAGakECdGogASAHIAIgBGxqQQJ0aioCADgCACAOIAJBAWoiBSAGakECdGogASAHIAQgBWxqQQJ0aioCADgCACACQQJqIgIgCEcNAAsLIAtBAWoiCyANRw0ACwsgEkEBaiISIB1HDQALCyAVICZqIhUgFkkNAAsLIAooAgAiAgRAIAogAjYCBCACEJgECyAKKAIQIgIEQCAKIAI2AhQgAhCYBAsgCkHgAGokAAvaCAIMfwF7IAEoAgQgASgCACIHayENAkAgACgCACIFIAAoAgQiCEYEQEEBIQoMAQtBASEKIAggBWtBBGsiBEEMSQR/IAUFIARBAnZBAWoiD0H8////B3EiDkEEayIEQQJ2QQFqIgZBA3EhCwJAIARBDEkEQP0MAQAAAAEAAAABAAAAAQAAACEQQQAhBAwBCyAGQfz///8HcSEJ/QwBAAAAAQAAAAEAAAABAAAAIRBBACEEQQAhCgNAIAUgBEECdCIGQTByav0AAgAgBSAGQSByav0AAgAgBSAGQRByav0AAgAgBSAGav0AAgAgEP21Af21Af21Af21ASEQIARBEGohBCAKQQRqIgogCUcNAAsLIAsEQANAIAUgBEECdGr9AAIAIBD9tQEhECAEQQRqIQQgDEEBaiIMIAtHDQALCyAQIBAgEP0NCAkKCwwNDg8AAAAAAAAAAP21ASIQIBAgEP0NBAUGBwAAAAAAAAAAAAAAAP21Af0bACEKIA4gD0YNASAFIA5BAnRqCyEEA0AgBCgCACAKbCEKIARBBGoiBCAIRw0ACwsgDUECdSEJAkAgDUUEQEEAIQQMAQsgCUEBIAlBAUsbIQhBACEEA0AgByAEQQJ0IgZqKAIAIARHDQEgCiAFIAZqKAIAbiEKIARBAWoiBCAIRw0ACyAIIQQLAkAgCSAEayIHIAMoAgQgAygCACIGa0ECdSIFSwRAIAMgByAFaxC4AQwBCyAFIAdNDQAgAyAGIAdBAnRqNgIECwJAIAIoAgQgAigCACIGa0ECdSIFIAdJBEAgAiAHIAVrELgBDAELIAUgB00NACACIAYgB0ECdGo2AgQLAkAgBCAJTw0AIARBAWohBiAEIQUgB0EBcQRAIAIoAgAgBEECdCIFIAAoAgBqKAIANgIAIAMoAgAgASgCACAFaigCADYCACAGIQULIAYgCUYNAANAIAUgBGtBAnQiBiACKAIAaiAFQQJ0IgggACgCAGooAgA2AgAgAygCACAGaiABKAIAIAhqKAIANgIAIAVBAWoiBiAEa0ECdCIIIAIoAgBqIAZBAnQiBiAAKAIAaigCADYCACADKAIAIAhqIAEoAgAgBmooAgA2AgAgBUECaiIFIAlHDQALCyAHBEAgB0F+cSEMIAdBAXEhC0EAIQIgCSAEQQFqRiEJA0AgAygCACEFQQAhBEF/IQZBACEAIAlFBEADQAJAIAUgBEECdGooAgAiASACSQ0AIAZBf0cEQCAFIAZBAnRqKAIAIAFNDQELIAQhBgsCQCAFIARBAXIiAUECdGooAgAiCCACSQ0AIAZBf0cEQCAFIAZBAnRqKAIAIAhNDQELIAEhBgsgBEECaiEEIABBAmoiACAMRw0ACwsCQCALRQ0AIAUgBEECdGooAgAiACACSQ0AIAZBf0cEQCAFIAZBAnRqKAIAIABNDQELIAQhBgsgBSAGQQJ0aiACNgIAIAJBAWoiAiAHRw0ACwsgCguOAgEHfyABKAIEIAEoAgAiCGsiAUEHTQRAIABBADYCCCAAQgA3AgAPCwJAAn8CQCABQQJ1IgZBAWsiAwRAIANBgICAgARPDQMgA0ECdCIEEKIEIgNBACAGQQJ0IgJBBGsQ9QMiBSACaiICQQhrIAQgCGooAgA2AgAgBCAFaiEEIAJBBGshByABQQhHDQEgACAENgIIIAAgBzYCBCAAIAU2AgAPC0EAIQNBACABQQlJDQEaCyAGQQNrIQEDQCADIAFBAnQiAmogCCACQQRqIgJqKAIAIAIgA2ooAgBsNgIAIAFBAWsiASAGSQ0ACyAHIQIgAwshBSAAIAQ2AgggACACNgIEIAAgBTYCAA8LEAAAC4UHAQh/IABBADYCCCAAQgA3AgACQCACKAIEIAIoAgBrQQJ1IgQgASgCBCIGIAEoAgAiBWtBAnUiCSAEIAlLGyIKRQ0AQQAhCQJAA0BBASEEIAYgBWtBAnUgCUF/cyIGaiIHQQBOBEAgBSAHQQJ0aigCACEECwJAAkACQAJAAkACQAJAAkAgAigCBCACKAIAIgVrQQJ1IAZqIgZBAE4EQCAFIAZBAnRqKAIAIQUgBEEBRg0BIAVBAUcNAgwDC0EBIQUgBEEBRw0CCyAAKAIIIANHBEAgAyAFNgIADAQLIAMgACgCACIHayIEQQJ1IghBAWoiA0GAgICABE8NBiADIARBAXUiBiADIAZLG0H/////AyAEQfz///8HSRsiAwR/IANBgICAgARPDQcgA0ECdBCiBAVBAAsiBiAIQQJ0aiIIIAU2AgAgBiADQQJ0aiEFIAhBBGohAyAEQQBKBEAgBiAHIAQQ8wMaCyAAIAU2AgggACADNgIEIAAgBjYCACAHRQ0FIAcQmAQMBQsgBCAFRwRAQYQsQQAQGAwFCyADIAAoAghHDQEgAyAAKAIAIgdrIgZBAnUiCEEBaiIDQYCAgIAETw0FIAMgBkEBdSIFIAMgBUsbQf////8DIAZB/P///wdJGyIDBH8gA0GAgICABE8NBiADQQJ0EKIEBUEACyIFIAhBAnRqIgggBDYCACAFIANBAnRqIQQgCEEEaiEDIAZBAEoEQCAFIAcgBhDzAxoLIAAgBDYCCCAAIAM2AgQgACAFNgIAIAdFDQQgBxCYBAwECyADIAAoAghGDQILIAMgBDYCAAsgACADQQRqIgM2AgQMAQsgAyAAKAIAIgdrIgVBAnUiCEEBaiIDQYCAgIAETw0BIAMgBUEBdSIGIAMgBksbQf////8DIAVB/P///wdJGyIDBH8gA0GAgICABE8NAiADQQJ0EKIEBUEACyIGIAhBAnRqIgggBDYCACAGIANBAnRqIQQgCEEEaiEDIAVBAEoEQCAGIAcgBRDzAxoLIAAgBDYCCCAAIAM2AgQgACAGNgIAIAdFDQAgBxCYBAsgCUEBaiIJIApGDQIgASgCACEFIAEoAgQhBgwBCwsQAAALIAAoAgAiBCADRg0AIANBBGsiAyAETQ0AA0AgBCgCACEAIAQgAygCADYCACADIAA2AgAgBEEEaiIEIANBBGsiA0kNAAsLC8wDAQp/IAEoAgAhBCABKAIEIQUgAigCACEGIAIoAgQhAyAAQQA2AgggAEIANwIAAkAgBSAEayIERQ0AIAMgBmtBAnUhCyAEQQJ1IglBASAJQQFLGyEMQQAhA0EAIQQCQANAAkACQCALIARBf3MiBmoiBUEASA0AIAIoAgAgBUECdGooAgBBAkkNACABKAIAIAYgCWoiBUECdGooAgBBAUcNACAAKAIIIgYgA0sEQCADIAU2AgAgACADQQRqIgM2AgQMAQsgAyAAKAIAIghrIgpBAnUiB0EBaiIDQYCAgIAETw0BIAdBAnQgAyAGIAhrIgZBAXUiByADIAdLG0H/////AyAGQfz///8HSRsiAwR/IANBgICAgARPDQIgA0ECdBCiBAVBAAsiBmoiByAFNgIAIAYgA0ECdGohBSAHQQRqIQMgCkEASgRAIAYgCCAKEPMDGgsgACAFNgIIIAAgAzYCBCAAIAY2AgAgCEUNACAIEJgECyAMIARBAWoiBEcNAQwCCwsQAAALIAAoAgAiBCADRg0AIANBBGsiBSAETQ0AA0AgBCgCACEGIAQgBSgCADYCACAFIAY2AgAgBEEEaiIEIAVBBGsiBUkNAAsLC0YBAX9BvLoBQby6ASgCACIAQZAuIAAbNgIAQcC6ASgCAEHft96aAUcEQEHUABEQAEHAugFB37femgE2AgALQYCtAS0AABoL0BcBGX8jAEGQAWsiACQAQcSzAUHVAEHWAEGMLioCAEGMLioCAJO8IgJBAE4iARs2AgBByLMBQdcAQdgAIAEbNgIAQcyzAUHZAEHaACABGzYCAEHQswFB2wBB3AAgARs2AgBB1LMBQd0AQd4AIAEbNgIAQdizAUHfAEHgACABGzYCAEHcswFB4QA2AgBB4LMBQeIANgIAQeSzAUHjAEHkACABGzYCAEHoswFB5QBB5gAgARs2AgBB7LMBQecANgIAQfmzAUEIOgAAQfizAUEFQQQgARs6AABB9LMBQegANgIAQfCzAUHpADYCAEH8swFB6gBB6wAgARs2AgBBgLQBQewAQe0AIAEbNgIAQZy0AUHuADYCAEHwtAFBhDI7AQBB7LQBQegANgIAQei0AUHvADYCAEHktAFB8AA2AgBB4bQBQQk6AABB4LQBQQRBCCABGyIDOgAAQdy0AUHoADYCAEHYtAFB8QBB8gAgARs2AgBB1LQBQfMAQfQAIAEbNgIAQdG0AUEEOgAAQdC0ASADOgAAQcy0AUHoADYCAEHItAFB9QBB9gAgARs2AgBBxLQBQfcAQfgAIAEbNgIAQcG0AUEDOgAAQcC0ASADOgAAQby0AUHoADYCAEG4tAFB+QBB+gAgARs2AgBBtLQBQfsAQfwAIAEbNgIAQbK0AUECOgAAQbC0AUGEBDsBAEGstAFB6AA2AgBBoLQBQf0ANgIAAn8gAkEASCIBBEBB/wAhAkGAASEGQYEBIQdBggEhCEGDASEJQYQBIQpBhQEhC0GGASEMQYcBIQRBiAEhBUGJASENQf4ADAELQYsBIQJBjAEhBkGNASEHQY4BIQhBjwEhCUGQASEKQZEBIQtBkgEhDEGTASEEQZQBIQVBlQEhDUGKAQshA0G8tgFBCDoAAEG4tgFBlgE2AgBBtLYBQZcBNgIAQbC2AUEIOgAAQay2AUGWATYCAEGotgEgBTYCAEGktgFBCDoAAEGgtgFBlgE2AgBBnLYBQZgBNgIAQZi2AUGZATYCAEGUtgFBEDoAAEGQtgFBmgE2AgBBjLYBQZsBNgIAQYi2AUEIOgAAQYS2AUGcATYCAEGAtgEgBDYCAEH8tQFBEDoAAEH4tQFBnQE2AgBB9LUBQZ4BNgIAQfC1AUEUOgAAQey1AUGfATYCAEHotQEgDDYCAEHktQFBCDoAAEHgtQFB6AA2AgBB3LUBIAs2AgBB2LUBQRA6AABB1LUBQaABNgIAQdC1AUGhATYCAEHMtQFBgRA7AQBByLUBQaIBNgIAQcS1AUGJEDsBAEHAtQFBowE2AgBBvLUBQQk7AQBBuLUBQaQBNgIAQbS1AUEEOwEAQbC1AUGlATYCAEGstQFBiRA7AQBBqLUBQegANgIAQaS1ASAKNgIAQaC1AUGHgBA2AgBBnLUBQaYBNgIAQZi1AUGnATYCAEGUtQEgAzYCAEGQtQEgAjYCAEGMtQFBiZAQNgIAQYi1ASAGNgIAQYS1ASAHNgIAQYC1AUGJkBA2AgBB/LQBQacBNgIAQfi0ASAINgIAQfS0ASAJNgIAQcC2AUGoATYCAEHEtgFBlgE2AgBByLYBQQg6AABBzLYBQakBNgIAQdC2AUGqATYCAEHUtgFBEDoAAEG/tgEgAC0AjwE6AABBvbYBIAAvAI0BOwAAQcm2ASAALwCKATsAAEHLtgEgAC0AjAE6AABB1bYBIAAvAIcBOwAAQde2ASAALQCJAToAAEHgtgFBEDoAAEHctgFBADYCAEHYtgFBqwE2AgBB4bYBIAAvAIQBOwAAQeO2ASAALQCGAToAAEHstgFBCDoAAEHotgFBADYCAEHktgFBrAE2AgBB7bYBIAAvAIEBOwAAQe+2ASAALQCDAToAAEHsuAFBEDoAAEH0tgFBgoAgNgIAQei4AUGtATYCAEHkuAFBrgE2AgBB8LYBIA02AgBB7bgBIAAvAH47AABB77gBIAAtAIABOgAAAn8gAQRAQa8BIQ1BsAEhDkGxASEPQbIBIRAgAEHSAGohA0GzASECQbQBIREgAEHVAGohBkG1ASEHQbYBIRIgAEHYAGohCCAAQeUAaiEJQbcBIQpBuAEhEyAAQegAaiELIABB+ABqIQxBuQEhFEG6ASEVQbsBIRYgAEH7AGohBEG8ASEFQb0BIRdBvgEhGCAAQc8AagwBC0G/ASENQcABIQ5BwQEhD0HCASEQIABBImohA0HDASECQcQBIREgAEElaiEGQcUBIQdBxgEhEiAAQShqIQggAEE1aiEJQccBIQpByAEhEyAAQThqIQsgAEHJAGohDEHJASEUQcoBIRVBywEhFiAAQcwAaiEEQcwBIQVBzQEhF0HOASEYIABBH2oLIQFBlLcBQRA6AABBkLcBQegANgIAQYy3AUHPATYCAEGItwFBzwE2AgBBhLcBQdABNgIAQYC3ASAFNgIAQfy2ASAFNgIAQfi2ASAXNgIAQfC4ASAYNgIAIAQtAAIhBSAELwAAIQRBtLcBQRA6AABBsLcBQegANgIAQay3AUHRATYCAEGotwFB0gE2AgBBpLcBQdMBNgIAQaC3ASAUNgIAQZy3ASAVNgIAQZi3ASAWNgIAQZe3ASAFOgAAQZW3ASAEOwAAQbW3ASAMLwAAOwAAQbe3ASAMLQACOgAAIAtBADYCCCALQgA3AwBBwLcBIAo2AgBBvLcBIAo2AgBBuLcBIBM2AgBBxLcB/QwAAAAAAAAAAAAAAAAAAAAA/QsCAEHUtwFBEDoAAEHVtwEgCS8AADsAAEHXtwEgCS0AAjoAACAIQQA2AgggCEIANwMAQeC3ASAHNgIAQdy3ASAHNgIAQdi3ASASNgIAQeS3Af0MAAAAAAAAAAAAAAAAAAAAAP0LAgBB9LcBQRA6AABB9bcBIAYvAAA7AABB97cBIAYtAAI6AABBlLgBQRA6AABBkLgBQegANgIAQYy4AUHUATYCAEGIuAFB1AE2AgBBhLgBQdUBNgIAQYC4ASACNgIAQfy3ASACNgIAQfi3ASARNgIAQZW4ASADLwAAOwAAQZe4ASADLQACOgAAQbS4AUEQOgAAQbC4AUHoADYCAEGsuAFB1gE2AgBBqLgBQdcBNgIAQaS4AUHYATYCAEGguAEgDjYCAEGcuAEgDzYCAEGYuAEgEDYCAEG3uAEgAS0AAjoAAEG1uAEgAS8AADsAAEG4uAFB2QE2AgBBvLgBQdoBNgIAQcC4AUHaATYCAEHEuAH9DAAAAAAAAAAAAAAAAAAAAAD9CwIAQdS4AUEQOgAAQdi4ASANNgIAQdy4AUHoADYCAEHEuQFB2wE2AgBByLkBQdwBNgIAQcy5AUEQOgAAQeC4AUGEBDsBAEHVuAEgAC8AHDsAAEHXuAEgAC0AHjoAAEHNuQEgAC8AGTsAAEHPuQEgAC0AGzoAAEHYuQFBGDoAAEHUuQFB3QE2AgBB0LkBQd4BNgIAQdm5ASAALwAWOwAAQdu5ASAALQAYOgAAQeS5AUEgOgAAQeC5AUHfATYCAEHcuQFB4AE2AgBB57kBIAAtABU6AABB5bkBIAAvABM7AABB6LkBQeEBNgIAQey5AUHiATYCAEHwuQFBIDoAAEHzuQEgAC0AEjoAAEHxuQEgAC8AEDsAAEH8uQFBIDoAAEH4uQFB4wE2AgBB9LkBQeQBNgIAQf+5ASAALQAPOgAAQf25ASAALwANOwAAQYC6AUHlATYCAEGEugFB5gE2AgBBiLoBQSA6AABBi7oBIAAtAAw6AABBiboBIAAvAAo7AABBsLoBQQE6AABBrLoBQecBNgIAQai6AUHoATYCAEGcugFB6QE2AgBBmLoBQeoBNgIAQZS6AUHrATYCAEGQugFB7AE2AgBBjLoBQe0BNgIAQbO6ASAALQAJOgAAQbG6ASAALwAHOwAAQbS6AUHuATYCAEG4ugFBAToAAEG7ugEgAC0ABjoAAEG5ugEgAC8ABDsAAEGErQFBvLoBKAIAIgH9AAIA/QsCAEGUrQEgASkCEDcCAEGArQFBhzA2AgAgAEGQAWokAAsqAQF/QYStASgCAEEQIABBlK0BKAIAEQ0AIgEEQCABQQAgABD1AxoLIAELEQBBACAAIAFrIgEgACABSRsLDAAgACABEOsBIAFsCxQBAX8gACABbiICIAAgASACbEdqCwkAIAAgARDrAQsNACAAIAFrIAJuQQFqCwwAIAEgACAAIAFLGwsXAEGErQEoAgAgACABQYytASgCABENAAssAQF/QYStASgCAEEQQdAEQZStASgCABENACIABEAgAEEAQdAEEPUDGgsgAAsTACAAIAEgAkEDQfi2ASADEPIBC6UCAQN/IwBBEGsiCCQAQQEhBwJAQYCtAS0AAEEBcUUNAEECIQcgALxB/////wdxQYCAgPwHSw0AIAG8IQYgACABYA0AIAZB/////wdxQYCAgPwHSw0AIARBDGogBCAEKAIMGyAEIAGMIABbGyAEIAFDAACAf1sbIQcgBCgCGCIEBEAgCCAAIAEgBBERAAsCfyACIQQgCCECAn9BAUGArQEoAgAiBkEBcUUNABpBBSAGQQJxQQJHDQAaQQYQ8AEiBkUNARogBkHQAWogAkEQEPMDGiAGIAcoAgA2AsgCIAYgBygCBDYCzAIgBygCCCECIAYgAzYCwAIgBiACNgLQAiAGQQA2AsAEIAYgBDYCyAEgBSAGNgIAQQALCyEHCyAIQRBqJAAgBwsTACAAIAEgAkEkQZi3ASADEPIBCxMAIAAgASACQTtB+LcBIAMQ8gELFAAgACABIAJBzABBmLgBIAMQ8gELDAAgACABIAAgAUsbCx0AIAgQ0AMaIABBAyABIAIgAyAEIAUgBiAHEPgBC/0VAgx/B3sgACILQdABaiEAIwBB8ABrIgwkACALQQA2AsAEAn9BAUGArQEoAgAiDUEBcUUNABpBBSANQQJxQQJHDQAaQQIgCygCwAIgAUcNABpBBCACIAQQ9gFBBksNABogDP0MAQAAAAEAAAABAAAAAQAAAP0LBFAgDEKBgICAEDcDYCAM/QwBAAAAAQAAAAEAAAABAAAA/QsEMCAMQoGAgIAQNwNAIAz9DAEAAAABAAAAAQAAAAEAAAD9CwQQIAxCgYCAgBA3AyACQCACIAQQ7gEiE0UEQEEAIQ0MAQtBASEJQQAhDUEBIREDQCADIAIgCWtBAnRqKAIAIgFBAUciDkUgBSAEIAlrQQJ0aigCACIKQQFGcUUEQAJ/IA5FBEAgECAScSESIBBBf3MhDkEBIRAgDEEwaiAPIA5BAXFqIg9BAWsiFEECdGohDiAKDAELIApBAUYEQCAQIBJxIRAgEkF/cyEOQQEhEiAMQdAAaiAPIA5BAXFqIg9BAWsiFEECdGohDiABDAELQQIgASAKRw0EGiAPIBAgEnIgEXJBAXFqIg9BAWsiFEECdCIOIAxB0ABqaiIRIBEoAgAgAWw2AgAgDEEwaiAOaiEOQQAhEkEAIRAgAQshESAOIA4oAgAgEWw2AgAgDEEQaiAUQQJ0aiIOIA4oAgAgEWw2AgBBACERCyAKRSANIAFFcnIhDSAJQQFqIgkgE00NAAsLAkACQAJAIAIgBEsEQCAPIBJBf3NBAXFqIQ8gAiAEayICRQ0BIA9BAnRBBGsiCSAMQRBqaiIRKAIAIQEgDEHQAGogCWoiECgCACEFQQAhCQJAIAJBBE8EQP0MAAAAAAAAAAAAAAAAAAAAACAN/RwAIRX9DAAAAAABAAAAAQAAAAEAAAAgBf0cACEW/QwAAAAAAQAAAAEAAAABAAAAIAH9HAAhFyACQXxxIglBBGsiCkECdkEBaiINQQNxIQRBACEBAkAgCkEMSQRAQQAhCgwBCyANQfz///8HcSEOQQAhCkEAIQUDQCAXIAMgCkECdCINav0AAgAiGP21ASADIA1BEHJq/QACACIZ/bUBIAMgDUEgcmr9AAIAIhr9tQEgAyANQTByav0AAgAiG/21ASEXIBYgGP21ASAZ/bUBIBr9tQEgG/21ASEWIBUgGP0MAAAAAAAAAAAAAAAAAAAAAP03/VAgGf0MAAAAAAAAAAAAAAAAAAAAAP03/VAgGv0MAAAAAAAAAAAAAAAAAAAAAP03/VAgG/0MAAAAAAAAAAAAAAAAAAAAAP03/VAhFSAKQRBqIQogBUEEaiIFIA5HDQALCyAEBEADQCAXIAMgCkECdGr9AAIAIhj9tQEhFyAWIBj9tQEhFiAVIBj9DAAAAAAAAAAAAAAAAAAAAAD9N/1QIRUgCkEEaiEKIAFBAWoiASAERw0ACwsgFf0bAEEBcSAV/RsBQQFxQQF0ciAV/RsCQQFxQQJ0ciAV/RsDQQN0ckEPcUEARyENIBcgF/0MAAAAAAAAAAAAAAAAAAAAAP0NCAkKCwwNDg8AAAAAAAAAAP21ASIVIBUgFf0NBAUGBwAAAAAAAAAAAAAAAP21Af0bACEBIBYgFiAV/Q0ICQoLDA0ODwAAAAAAAAAA/bUBIhUgFSAV/Q0EBQYHAAAAAAAAAAAAAAAA/bUB/RsAIQUgAiAJRg0BCwNAIAEgAyAJQQJ0aigCACIKbCEBIAUgCmwhBSANIApFciENIAlBAWoiCSACRw0ACwsgECAFNgIAIBEgATYCAEECIQkgD0EBEPYBIQ4gDUEBcUUNAgwDCyACIARPDQAgDyAQQX9zQQFxaiEPIAQgAmsiAkUNACAPQQJ0QQRrIgkgDEEQamoiESgCACEDIAxBMGogCWoiECgCACEBQQAhCQJAIAJBBE8EQP0MAAAAAAAAAAAAAAAAAAAAACAN/RwAIRX9DAAAAAABAAAAAQAAAAEAAAAgAf0cACEW/QwAAAAAAQAAAAEAAAABAAAAIAP9HAAhFyACQXxxIglBBGsiCkECdkEBaiINQQNxIQRBACEDAkAgCkEMSQRAQQAhCgwBCyANQfz///8HcSEOQQAhCkEAIQEDQCAXIAUgCkECdCINav0AAgAiGP21ASAFIA1BEHJq/QACACIZ/bUBIAUgDUEgcmr9AAIAIhr9tQEgBSANQTByav0AAgAiG/21ASEXIBYgGP21ASAZ/bUBIBr9tQEgG/21ASEWIBUgGP0MAAAAAAAAAAAAAAAAAAAAAP03/VAgGf0MAAAAAAAAAAAAAAAAAAAAAP03/VAgGv0MAAAAAAAAAAAAAAAAAAAAAP03/VAgG/0MAAAAAAAAAAAAAAAAAAAAAP03/VAhFSAKQRBqIQogAUEEaiIBIA5HDQALCyAEBEADQCAXIAUgCkECdGr9AAIAIhj9tQEhFyAWIBj9tQEhFiAVIBj9DAAAAAAAAAAAAAAAAAAAAAD9N/1QIRUgCkEEaiEKIANBAWoiAyAERw0ACwsgFf0bAEEBcSAV/RsBQQFxQQF0ciAV/RsCQQFxQQJ0ciAV/RsDQQN0ckEPcUEARyENIBcgF/0MAAAAAAAAAAAAAAAAAAAAAP0NCAkKCwwNDg8AAAAAAAAAAP21ASIVIBUgFf0NBAUGBwAAAAAAAAAAAAAAAP21Af0bACEDIBYgFiAV/Q0ICQoLDA0ODwAAAAAAAAAA/bUBIhUgFSAV/Q0EBQYHAAAAAAAAAAAAAAAA/bUB/RsAIQEgAiAJRg0BCwNAIAMgBSAJQQJ0aigCACIKbCEDIAEgCmwhASANIApFciENIAlBAWoiCSACRw0ACwsgECABNgIAIBEgAzYCAEECIQkgD0EBEPYBIQ4gDUEBcUUNAQwCC0ECIQkgD0EBEPYBIQ4gDUEBcQ0BCyAMKAIQIQogCyAGNgKwAyALQbQDaiIS/QwAAAAAAAAAAAAAAAAAAAAA/QsCACALQQA2AsQDIAsgBzYCyAMgC0HMA2oiE/0MAAAAAAAAAAAAAAAAAAAAAP0LAgAgC0EANgLcAyALIAg2AuADIAv9DAAAAAAAAAAAAAAAAAAAAAD9CwLkAyALQQA2AvQDIAsgCkECdDYC+AMgC0H8A2pBAEHEABD1AxogC0GABGogAEEQEPMDIQlBASEBAkAgDCgCUCIDQQFGBEAgCyAGNgLIAyALIAc2ArADIAsgCygC0AI2ArgEIAkgAEEQEPMDGiAMQdAAaiERIAxBMGohECAMKAIwIQMMAQsgDCgCMCIJQQFGBEAgCyALKALMAjYCuAQgDEHQAGohECAMQTBqIREMAQsgDEHQAGohECAMQTBqIREgAyAJRwRAIAkhAQwBCyALIAsoAsgCNgK4BCADIQELQQEhCSAOQQFLBEAgC0GwA2ohDwNAIBAgCUECdCINaigCACIFQQFHBEAgEkEFIAlrQQJ0aiADQQJ0NgIACwJAIA0gEWooAgAiAkEBRgRAQQUgCWshBAwBCyATQQUgCWsiBEECdGogAUECdDYCAAsgDyAEQQJ0aiAKQQJ0NgI0IAEgAmwhASADIAVsIQMgDEEQaiANaigCACAKbCEKIAlBAWoiCSAORw0ACwsgC0EKNgLYAiALQfUBNgLcAiALIAwoAiQ2AuACIAsgDCgCIDYC5AIgCyAMKAIcNgLoAiALIAwoAhg2AuwCIAwoAhQhCSALQoGAgIAQNwP4AiALIAk2AvACQQEhCQsgCyAJNgLABEEACyEJIAxB8ABqJAAgCQsdACAIENADGiAAQSQgASACIAMgBCAFIAYgBxD4AQsdACAIENADGiAAQTsgASACIAMgBCAFIAYgBxD4AQseACAIENADGiAAQcwAIAEgAiADIAQgBSAGIAcQ+AELEAAgACABakEBa0EAIAFrcQsXAEGErQEoAgBBECAAQZStASgCABENAAsYACAAIAFBAWsgAmxBAWoQ6QEgA25BAWoLFgAgAUEBayACbEF/cyAAaiADbkEBagsVAEGErQEoAgAgAEGYrQEoAgARBAALjgEBAn9BASEKAkBBgK0BLQAAQQFxRQ0AQQIhCiAAQQFrIAFPDQAgACACSw0AEPABIglFBEBBBg8LIAkgAjYCbCAJIAE2AlQgCSAANgI8IAUEQCAJQdABaiAEIAUQ8wMaCyAJIAY2AsACIAkgBzYCyAJBACEKIAlBADYCwAQgCSADNgLIASAIIAk2AgALIAoLqQEBA38jAEEQayIGJABBAiEEAkAgALxB/////wdxQYCAgPwHSw0AIAG8IQUgACABYA0AIAVB/////wdxQYCAgPwHSw0AQZi2ASgCACIFQdy1ASgCACIEIAUbIAQgAUMAAIB/WxsgBCAAQwAAAABbGyEEQeC1ASgCACIFBEAgBiAAIAEgBRERAAtBAUEBQQEgAiAGQRBBDCAEIAMQgQIhBAsgBkEQaiQAIAQLSwECfyMAQRBrIgUkAEHUtQEoAgAiBgRAIAVBCGogBhECAAsgACABIAIgAyAFQQhqQQhBAUHQtQEoAgAgBBCBAiEAIAVBEGokACAAC0sBAn8jAEEgayIFJABBoLYBKAIAIgYEQCAFQQhqIAYRAgALIAAgASACIAMgBUEIakEYQQlBnLYBKAIAIAQQgQIhACAFQSBqJAAgAAtLAQJ/IwBBIGsiBSQAQbi2ASgCACIGBEAgBUEIaiAGEQIACyAAIAEgAiADIAVBCGpBGEEPQbS2ASgCACAEEIECIQAgBUEgaiQAIAALSwECfyMAQSBrIgUkAEHEtgEoAgAiBgRAIAVBCGogBhECAAsgACABIAIgAyAFQQhqQRhBK0HAtgEoAgAgBBCBAiEAIAVBIGokACAAC0sBAn8jAEEQayIFJABBkLYBKAIAIgYEQCAFQQhqIAYRAgALIAAgASACIAMgBUEIakEIQT5BjLYBKAIAIAQQgQIhACAFQRBqJAAgAAtMAQJ/IwBBEGsiBSQAQdy2ASgCACIGBEAgBUEIaiAGEQIACyAAIAEgAiADIAVBCGpBAUHJAEHYtgEoAgAgBBCBAiEAIAVBEGokACAACzcBAX9BAiEFIAAoAsACQQFGBH8gAEEANgLABCAAIAEgAiADIABB0AFqQQggBBDQAxCKAgUgBQsL2wIBBH9BgK0BLQAAQQFxBH8gACABBH8gACgCyAIhCCAAAn9BACABQQFHIAAoAjwiByAAKAJUIglGIAAoAmwiCiAHRnEbRQRAIAAgAjYCsAMgACAINgLEAyAAQQA2AsADIAAgCkECdDYCvAMgACADNgK4AyAAIAlBAnQ2ArQDIABByANqQQBB8AAQ9QMhAiAFBEAgAiAEIAUQ8wMaCyAAQQI2AtgCIABBiwI2AtwCIAAgASAHbEECdCIHNgLgAiAHQYAgIAZBAUYbDAELIAAgCDYCxAMgACAKQQJ0NgLAAyAAIAM2ArwDIAAgCUECdDYCuAMgACACNgK0AyAAIAdBAnQ2ArADIABByANqQQBB8AAQ9QMhByAFBEAgByAEIAUQ8wMaCyAAQQI2AtgCIAAgATYC4AIgAEGMAjYC3AIgAUEBIAZBAUYbCzYC+AJBAQVBAgs2AsAEQQAFQQELCzcBAX9BAiEFIAAoAsACQQlGBH8gAEEANgLABCAAIAEgAiADIABB0AFqQRggBBDQAxCKAgUgBQsLNwEBf0ECIQUgACgCwAJBD0YEfyAAQQA2AsAEIAAgASACIAMgAEHQAWpBGCAEENADEIoCBSAFCws3AQF/QQIhBSAAKALAAkEMRgR/IABBADYCwAQgACABIAIgAyAAQdABakEQIAQQ0AMQigIFIAULCzcBAX9BAiEFIAAoAsACQStGBH8gAEEANgLABCAAIAEgAiADIABB0AFqQRggBBDQAxCKAgUgBQsLNwEBf0ECIQUgACgCwAJBPkYEfyAAQQA2AsAEIAAgASACIAMgAEHQAWpBCCAEENADEIoCBSAFCws4AQF/QQIhBSAAKALAAkHJAEYEfyAAQQA2AsAEIAAgASACIAMgAEHQAWpBASAEENADEIoCBSAFCwsHACABEJYEC/gFAQd/An8gAUUEQEEIIAIQlAQMAQsgAkUEQCABEJcEQQAMAQsCQCACQUdLDQAgAQJ/IAJBA2pBfHFBCCACQQhLGyICQQhqIQACfwJAIAFBBGsiCSIEKAIAIgUgBGoiAygCACIIIAMgCGoiB0EEaygCAEcEQCAHIAAgBGoiAEEQak8EQCADKAIEIgUgAygCCDYCCCADKAIIIAU2AgQgACAHIABrIgM2AgAgA0F8cSAAakEEayADQQFyNgIAIAACfyAAKAIAQQhrIgNB/wBNBEAgA0EDdkEBawwBCyADQR0gA2ciBWt2QQRzIAVBAnRrQe4AaiADQf8fTQ0AGiADQR4gBWt2QQJzIAVBAXRrQccAaiIDQT8gA0E/SRsLIgNBBHQiBUGAvAFqNgIEIAAgBUGIvAFqIgUoAgA2AgggBSAANgIAIAAoAgggADYCBEGIxAFBiMQBKQMAQgEgA62GhDcDACAEIAAgBGsiADYCACAAQXxxIARqQQRrIAA2AgBBAQwECyAAIAdLDQEgAygCBCIAIAMoAgg2AgggAygCCCAANgIEIAQgBSAIaiIANgIAIABBfHEgBGpBBGsgADYCAEEBDAMLIAUgAEEQak8EQCAEIAA2AgAgAEF8cSAEakEEayAANgIAIAAgBGoiBCAFIABrIgA2AgAgAEF8cSAEakEEayAAQQFyNgIAIAQCfyAEKAIAQQhrIgBB/wBNBEAgAEEDdkEBawwBCyAAQR0gAGciA2t2QQRzIANBAnRrQe4AaiAAQf8fTQ0AGiAAQR4gA2t2QQJzIANBAXRrQccAaiIAQT8gAEE/SRsLIgBBBHQiA0GAvAFqNgIEIAQgA0GIvAFqIgMoAgA2AgggAyAENgIAIAQoAgggBDYCBEGIxAFBiMQBKQMAQgEgAK2GhDcDAEEBDAMLQQEgACAFTQ0BGgtBAAsLDQEaQQggAhCUBCIARQ0AIAAgASACIAkoAgBBCGsiBiACIAZJGxDzAxogARCXBCAAIQYLIAYLCwwAIAEEQCABEJcECws1ACMAQRBrIgAkACAAQQA2AgwgAEEMaiABIAIQmQQhASAAKAIMIQIgAEEQaiQAQQAgAiABGwtVAEGArQEtAABBAXEEfyAARQRADwsgACgCYBCWAiAAKAJ0EIACIAAoArgBEIACIAAoAsABEJYCIAAoAsQBEJYCIAAoArwBEIACIAAQgAJBAAVBAQsaCxUAQYStASgCACAAQZCtASgCABEEAAuPCgIkfwl7IAAoAmQiGARAIAAoAhAhGSAAKAIEIRogACgCJCEbIAAoAiAhHCAAKAIcIR0gACgCaCENIAAoAkwhHiAAKAJgIQUgACgCFCIEQQFGIAAoAhgiCEEDS3EhFCAIQQFxIR8gCEF8cSEVIAhBA3EhFiAIQQRrIgNBAnZBAWoiCUH+////B3EhICAJQQFxISEgCUH8////B3EhIiAJQQNxIRcgACgCuAEiCf0RIScgACgCWCIQ/REhKSAAKAJUQQJ0IhH9ESEqIAAoAlAiDv0RISsgACgCKCIS/REhLCADQQRJISMgA0EMSSEkA0AgBARAIAEgE2whJSATIB1sIBprISZBACEPA0AgDyAlaiEAAkAgHiAmIA8gG2xqIgNNBEBBACELIA1FDQEDQAJAIAhFDQAgAiALbCEGQQAhCkEAIQMgFARAQQAhDEEAIQcgJEUEQANAIAUgACADIAZqIARsakECdGogJ/0LAgAgBSAAIANBBHIgBmogBGxqQQJ0aiAn/QsCACAFIAAgA0EIciAGaiAEbGpBAnRqICf9CwIAIAUgACADQQxyIAZqIARsakECdGogJ/0LAgAgA0EQaiEDIAdBBGoiByAiRw0ACwsgFwRAA0AgBSAAIAMgBmogBGxqQQJ0aiAn/QsCACADQQRqIQMgDEEBaiIMIBdHDQALCyAVIgMgCEYNAQsgCCADQX9zaiEMIBYEQANAIAUgACADIAZqIARsakECdGogCTYCACADQQFqIQMgCkEBaiIKIBZHDQALCyAMQQJNDQADQCAFIAAgAyAGaiIKIARsakECdGogCTYCACAFIAAgCkEBaiAEbGpBAnRqIAk2AgAgBSAAIApBAmogBGxqQQJ0aiAJNgIAIAUgACAKQQNqIARsakECdGogCTYCACADQQRqIgMgCEcNAAsLIAtBAWoiCyANRw0ACwwBCyANRQ0AIAMgDmwiDP0RIS1BACELA0ACQCAIRQ0AIAIgC2whBiALIBxsIBlrIQpBACEDIBQEQCAK/REhLv0MAAAAAAEAAAACAAAAAwAAACEoQQAhByAjRQRAA0AgBSAAIAMgBmogBGxqQQJ0aiAuICggLP21Af2uASIvIC39rgEgKv21ASAp/a4BICcgLyAr/Tr9Uv0LAgAgBSAAIANBBHIgBmogBGxqQQJ0aiAuICj9DAQAAAAEAAAABAAAAAQAAAD9rgEgLP21Af2uASIvIC39rgEgKv21ASAp/a4BICcgLyAr/Tr9Uv0LAgAgKP0MCAAAAAgAAAAIAAAACAAAAP2uASEoIANBCGohAyAHQQJqIgcgIEcNAAsLICEEQCAFIAAgAyAGaiAEbGpBAnRqIC4gKCAs/bUB/a4BIiggLf2uASAq/bUBICn9rgEgJyAoICv9Ov1S/QsCAAsgFSIDIAhGDQELIANBAXIhByAfBEAgBSAAIAMgBmogBGxqQQJ0aiAKIAMgEmxqIgMgDGogEWwgEGogCSADIA5JGzYCACAHIQMLIAcgCEYNAANAIAUgACADIAZqIARsakECdGogCiADIBJsaiIHIAxqIBFsIBBqIAkgByAOSRs2AgAgBSAAIANBAWoiByAGaiAEbGpBAnRqIAogByASbGoiByAMaiARbCAQaiAJIAcgDkkbNgIAIANBAmoiAyAIRw0ACwsgC0EBaiILIA1HDQALCyAPQQFqIg8gBEcNAAsLIBNBAWoiEyAYRw0ACwsL6A8DDXsIfQ9/IAEgA0EBRyAIcSIga7IgAyAga7KVIRogAiAEQQFHIAhxIiBrsiAEICBrspUhGSACQQFrISAgAUEBayEmAkBBASAIIAkbBEAgA0UNASAF/REhDCAA/REhDSAg/REhEiAZ/RMhEyAEQQRJIScgBEEEdCEoIARBA3QhKSAEQXxxIiRBA3QhKiAkQQR0ISsDQAJ/IBogI7KUIheLQwAAAE9dBEAgF6gMAQtBgICAgHgLIQgCQCAERQ0AIBcgCLOTIRggCEEBaiIBICYgASAmSRsgAmwhCSACIAhsISVBACEBAkAgJw0AIAcgBiAoakkgByApaiAGS3ENACAHICpqISwgBiAraiEtIAn9ESEPICX9ESEQ/QwAAAAAAQAAAAIAAAADAAAAIQ5BACEIA0AgBiAIQQR0IgFqIh8gECATIA79+gH95gEiEf34ASIL/a4BIA39tQEgDP2uASIK/VoCAAAgBiABQRByaiIhIAr9WgIAASAGIAFBIHJqIiIgCv1aAgACIAYgAUEwcmoiASAK/VoCAAMgH0EEaiAL/QwBAAAAAQAAAAEAAAABAAAA/a4BIBL9twEiFCAQ/a4BIA39tQEgDP2uASIK/VoCAAAgIUEEaiAK/VoCAAEgIkEEaiAK/VoCAAIgAUEEaiAK/VoCAAMgH0EIaiAPIAv9rgEgDf21ASAM/a4BIgr9WgIAACAhQQhqIAr9WgIAASAiQQhqIAr9WgIAAiABQQhqIAr9WgIAAyAfQQxqIBQgD/2uASAN/bUBIAz9rgEiCv1aAgAAICFBDGogCv1aAgABICJBDGogCv1aAgACIAFBDGogCv1aAgADIAcgCEEDdCIBaiIfIBEgC/37Af3lASIL/R8AOAIAIAcgAUEIcmoiISAL/R8BOAIAIAcgAUEQcmoiIiAL/R8COAIAIAcgAUEYcmoiASAL/R8DOAIAIB8gGDgCBCAhIBg4AgQgIiAYOAIEIAEgGDgCBCAO/QwEAAAABAAAAAQAAAAEAAAA/a4BIQ4gCEEEaiIIICRHDQALIC0hBiAsIQcgJCIBIARGDQELA0AgBiAJAn8gGSABspQiF4tDAAAAT10EQCAXqAwBC0GAgICAeAsiCGogAGwgBWo2AgggBiAIICVqIABsIAVqNgIAIAYgCEEBaiIfICAgHyAgSRsiHyAJaiAAbCAFajYCDCAGIB8gJWogAGwgBWo2AgQgByAYOAIEIAcgFyAIs5M4AgAgB0EIaiEHIAZBEGohBiABQQFqIgEgBEcNAAsLICNBAWoiIyADRw0ACwwBCyADRQ0AIBpDAAAAP5RDAAAAv5IhHSAmsyEbIAX9ESEMIAD9ESENICD9ESETICCzIhz9EyERIBlDAAAAP5RDAAAAv5IiHv0TIRUgGf0TIRYgBEEESSEnIARBBHQhKCAEQQN0ISkgBEF8cSIkQQN0ISogJEEEdCErA0ACfyAbICOyIBqUIB2SIhdDAAAAACAXQwAAAABeGyIXIBcgG14bIheLQwAAAE9dBEAgF6gMAQtBgICAgHgLIQgCQCAERQ0AIBcgCLOTIRggCEEBaiIBICYgASAmSRsgAmwhCSACIAhsISVBACEBAkAgJw0AIAcgBiAoakkgByApaiAGS3ENACAHICpqISwgBiAraiEtIAn9ESEPICX9ESEQ/QwAAAAAAQAAAAIAAAADAAAAIQ5BACEIA0AgBiAIQQR0IgFqIh8gECARIA79+gEgFv3mASAV/eQBIgv9DAAAAAAAAAAAAAAAAAAAAAAiCiALIAr9RP1SIgsgCyAR/UT9UiIU/fgBIgv9rgEgDf21ASAM/a4BIgr9WgIAACAGIAFBEHJqIiEgCv1aAgABIAYgAUEgcmoiIiAK/VoCAAIgBiABQTByaiIBIAr9WgIAAyAfQQRqIAv9DAEAAAABAAAAAQAAAAEAAAD9rgEgE/23ASISIBD9rgEgDf21ASAM/a4BIgr9WgIAACAhQQRqIAr9WgIAASAiQQRqIAr9WgIAAiABQQRqIAr9WgIAAyAfQQhqIA8gC/2uASAN/bUBIAz9rgEiCv1aAgAAICFBCGogCv1aAgABICJBCGogCv1aAgACIAFBCGogCv1aAgADIB9BDGogEiAP/a4BIA39tQEgDP2uASIK/VoCAAAgIUEMaiAK/VoCAAEgIkEMaiAK/VoCAAIgAUEMaiAK/VoCAAMgByAIQQN0IgFqIh8gFCAL/fsB/eUBIgv9HwA4AgAgByABQQhyaiIhIAv9HwE4AgAgByABQRByaiIiIAv9HwI4AgAgByABQRhyaiIBIAv9HwM4AgAgHyAYOAIEICEgGDgCBCAiIBg4AgQgASAYOAIEIA79DAQAAAAEAAAABAAAAAQAAAD9rgEhDiAIQQRqIgggJEcNAAsgLSEGICwhByAkIgEgBEYNAQsDQCAGIAkCfyAcIAGyIBmUIB6SIhdDAAAAACAXQwAAAABeGyIXIBcgHF4bIheLQwAAAE9dBEAgF6gMAQtBgICAgHgLIghqIABsIAVqNgIIIAYgCCAlaiAAbCAFajYCACAGIAhBAWoiHyAgIB8gIEkbIh8gCWogAGwgBWo2AgwgBiAfICVqIABsIAVqNgIEIAcgGDgCBCAHIBcgCLOTOAIAIAdBCGohByAGQRBqIQYgAUEBaiIBIARHDQALCyAjQQFqIiMgA0cNAAsLC3IAIAQgBSAAKAIAIgQgACgCBCAAKAIIIgUgAmwgASAEbGpqIAUgACgCDCAAKAIQIANsaiAAKAIUIAFsaiAAKAIYIAAoAhwiBCACbGogAyAAKAIodGogACgCJCABbGogBCAAKAIgIABBMGogACgCLBEGAAtYACADIAQgACgCACAAKAIEIAAoAggiAyABbGogAyAAKAIMIAAoAhAgAmxqIAAoAhggASAAKAIcIgFsaiACIAAoAih0aiABIAAoAiAgAEEwaiAAKAIsEQYAC5QBACAFIAYgACgCCCAAKAIEIAAoAhAgAyAAKAIAbEECdGogACgCHCAAKAIMIARsaiAAKAIwIAJsaiAAKAIgIAMgACgCJCIDbGogACgCNCACbGogACgCPCABbGogBCAAKAJAdGogAyAAKAIoIAAoAhQgACgCLCACbGogACgCOCABbGogACgCGCAAQcgAaiAAKAJEEQkAC4IBACAEIAUgACgCCCAAKAIEIAAoAhAgAiAAKAIAbEECdGogACgCHCAAKAIMIANsaiAAKAIwIAFsaiAAKAIgIAIgACgCJCICbGogACgCNCABbGogAyAAKAJAdGogAiAAKAIoIAAoAhQgACgCLCABbGogACgCGCAAQcgAaiAAKAJEEQkAC3kAIAQgBSAAKAIIIAAoAgQgACgCECACIAAoAgBsQQJ0aiAAKAIcIAAoAgwgA2xqIAAoAiAgAiAAKAIkIgJsaiAAKAI8IAFsaiADIAAoAkB0aiACIAAoAiggACgCFCAAKAI4IAFsaiAAKAIYIABByABqIAAoAkQRCQALZwAgAyAEIAAoAgggACgCBCAAKAIQIAEgACgCAGxBAnRqIAAoAhwgACgCDCACbGogACgCICABIAAoAiQiAWxqIAIgACgCQHRqIAEgACgCKCAAKAIUIAAoAhggAEHIAGogACgCRBEJAAtgACAAKAIoIAAoAiQgACgCACAAKAIIIAJsaiAAKAIUIAAoAhggACgCHCABbGogACgCICACbGogACgCBCAAKAIwIAAoAgwgACgCECABbGogACgCLCAAQThqIAAoAmgRBgALWwAgACgCHCAAKAIgIAAoAiQgACgCACAAKAIEIAJsaiAAKAIIIAAoAgwgAWxqIAAoAhAgACgCFCABbGogACgCGCACbGogACgCKCAAKAIsIABBMGogACgCQBEMAAtgACAAKAIcIAAoAiAgACgCJCAAKAIAIAAoAgQgAmxqIAAoAgggACgCDCABbGogACgCKCAAKAIQIAAoAhQgAWxqIAAoAhggAmxqIAAoAiwgACgCMCAAQThqIAAoAmgRBgALmwEBCn8gACgCGCEDIAAoAhQhBCAAKAIQIQUgACgCACEGIAAoAgQhByAAKAIIIQggACgCDCEJIwAiCiAAKAIkIgtBAnRBzwBqQXBxayIMJAAgACgCHCAAKAIgIAsgBiACIAdsaiAIIAEgCWxqIAAoAiggDCAFIAEgBGxq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IAkgCyAGIAX9Q/1S/eUB/QsAECACQSBqIQIgAUEgaiEBIANBIGsiA0EPSw0ACwsCQCADRQ0AIAH9AAAAIgYgBCAGIAf9TiIH/eQBIAT95QH9DP////////////////////8gCCAEIAf9Rf1S/VIiBCAJ/QwAAAAAAAAAAAAAAAAAAAAAIAYgBP1D/VL95QEhBCADQQhxBEAgAiAE/SEAOQMAIAQgBP0NCAkKCwwNDg8ICQoLDA0ODyEEIAJBCGohAgsgA0EEcUUNACACIAT9HwA4AgALC90EAQZ7IAP9AAMAIAP9AAMIIAT9DQABAgMEBQYHAAECAwQFBgciBP0NAAECAwQFBgcAAQIDBAUGByII/U0hBiAAQR9LBEADQCAB/QAAACEFIAIgAf0AABAiByAEIAcgBv1OIgf95AEgBP3lAf0M/////////////////////yIJIAggBCAH/UX9Uv1S/QsAECACIAUgBCAFIAb9TiIH/eQBIAT95QEgCSAIIAQgB/1F/VL9Uv0LAAAgAkEgaiECIAFBIGohASAAQSBrIgBBH0sNAAsLAkAgAEEQSQRAIAAhAwwBCyAAQRBrIgNBEHFFBEAgAiAB/QAAACIFIAQgBSAG/U4iBf3kASAE/eUB/Qz/////////////////////IAggBCAF/UX9Uv1S/QsAACACQRBqIQIgAUEQaiEBIAMhAAsgA0EQSQ0AIAAhAwNAIAIgAf0AAAAiBSAEIAUgBv1OIgX95AEgBP3lAf0M/////////////////////yIHIAggBCAF/UX9Uv1S/QsAACACIAH9AAAQIgUgBCAFIAb9TiIF/eQBIAT95QEgByAIIAQgBf1F/VL9Uv0LABAgAkEgaiECIAFBIGohASADQSBrIgNBD0sNAAsLAkAgA0UNACAB/QAAACIFIAQgBSAG/U4iBv3kASAE/eUB/Qz/////////////////////IAggBCAG/UX9Uv1SIQQgA0EIcQRAIAIgBP0hADkDACAEIAT9DQgJCgsMDQ4PCAkKCwwNDg8hBCACQQhqIQILIANBBHFFDQAgAiAE/R8AOAIACwvzBQEIeyAD/QADACAD/QADCCAE/Q0AAQIDBAUGBwABAgMEBQYHIgT9DQABAgMEBQYHAAECAwQFBgciCP1NIQkgA/0KAxAhCiAAQR9LBEADQCAB/QAAACEHIAIgAf0AABAiBSAEIAUgCf1OIgv95AEgBP3lAf0M/////////////////////yIGIAggBCAL/UX9Uv1SIgsgCiAL/eQBIAYgCCAFIAv9Rf1S/VL9CwAQIAIgByAEIAcgCf1OIgX95AEgBP3lASAGIAggBCAF/UX9Uv1SIgUgCiAF/eQBIAYgCCAHIAX9Rf1S/VL9CwAAIAJBIGohAiABQSBqIQEgAEEgayIAQR9LDQALCwJAIABBEEkEQCAAIQMMAQsgAEEQayIDQRBxRQRAIAIgAf0AAAAiByAEIAcgCf1OIgb95AEgBP3lAf0M/////////////////////yIFIAggBCAG/UX9Uv1SIgYgCiAG/eQBIAUgCCAHIAb9Rf1S/VL9CwAAIAJBEGohAiABQRBqIQEgAyEACyADQRBJDQAgACEDA0AgAiAB/QAAACIGIAQgBiAJ/U4iBf3kASAE/eUB/Qz/////////////////////IgcgCCAEIAX9Rf1S/VIiBSAKIAX95AEgByAIIAYgBf1F/VL9Uv0LAAAgAiAB/QAAECIGIAQgBiAJ/U4iBf3kASAE/eUBIAcgCCAEIAX9Rf1S/VIiBSAKIAX95AEgByAIIAYgBf1F/VL9Uv0LABAgAkEgaiECIAFBIGohASADQSBrIgNBD0sNAAsLAkAgA0UNACAB/QAAACIHIAQgByAJ/U4iBv3kASAE/eUB/Qz/////////////////////IgkgCCAEIAb9Rf1S/VIiBCAKIAT95AEgCSAIIAcgBP1F/VL9UiEEIANBCHEEQCACIAT9IQA5AwAgBCAE/Q0ICQoLDA0ODwgJCgsMDQ4PIQQgAkEIaiECCyADQQRxRQ0AIAIgBP0fADgCAAsLjQYBCHsgA/0AAwAgA/0AAwggBP0NAAECAwQFBgcAAQIDBAUGByIE/Q0AAQIDBAUGBwABAgMEBQYHIgj9TSEHIAP9CgMQIQkgAEEfSwRAA0AgAf0AAAAhBSACIAH9AAAQIgYgBCAGIAf9TiIG/eQBIAT95QEiCiAJ/QwAAAAAAAAAAAAAAAAAAAAAIAogBv1E/VL95QH9DP////////////////////8iCiAIIAQgBv1F/VL9Uv0LABAgAiAFIAQgBSAH/U4iBv3kASAE/eUBIgUgCSALIAUgBv1E/VL95QEgCiAIIAQgBv1F/VL9Uv0LAAAgAkEgaiECIAFBIGohASAAQSBrIgBBH0sNAAsLAkAgAEEQSQRAIAAhAwwBCyAAQRBrIgNBEHFFBEAgAiAB/QAAACIFIAQgBSAH/U4iBf3kASAE/eUBIgYgCf0MAAAAAAAAAAAAAAAAAAAAACAGIAX9RP1S/eUB/Qz/////////////////////IAggBCAF/UX9Uv1S/QsAACACQRBqIQIgAUEQaiEBIAMhAAsgA0EQSQ0AIAAhAwNAIAIgAf0AAAAiBSAEIAUgB/1OIgX95AEgBP3lASIGIAn9DAAAAAAAAAAAAAAAAAAAAAAiCiAGIAX9RP1S/eUB/Qz/////////////////////IgYgCCAEIAX9Rf1S/VL9CwAAIAIgAf0AABAiBSAEIAUgB/1OIgX95AEgBP3lASILIAkgCiALIAX9RP1S/eUBIAYgCCAEIAX9Rf1S/VL9CwAQIAJBIGohAiABQSBqIQEgA0EgayIDQQ9LDQALCwJAIANFDQAgAf0AAAAiBSAEIAUgB/1OIgf95AEgBP3lASIFIAn9DAAAAAAAAAAAAAAAAAAAAAAgBSAH/UT9Uv3lAf0M/////////////////////yAIIAQgB/1F/VL9UiEEIANBCHEEQCACIAT9IQA5AwAgBCAE/Q0ICQoLDA0ODwgJCgsMDQ4PIQQgAkEIaiECCyADQQRxRQ0AIAIgBP0fADgCAAsLnQMBBXsgA/0AAwggBP0NAAECAwQFBgcAAQIDBAUGByEFIAP9AAMAIAT9DQABAgMEBQYHAAECAwQFBgf9TSEGIABBH0sEQANAIAH9AAAAIQQgAiAB/QAAECIH/fgB/foBIAcgBv0MAAAAAAAAAAAAAAAAAAAAACAH/eABIAX9Q/1S/VL9CwAQIAIgBP34Af36ASAEIAYgCCAE/eABIAX9Q/1S/VL9CwAAIAJBIGohAiABQSBqIQEgAEEgayIAQR9LDQALCyAAQQ9LBEADQCACIAH9AAAAIgT9+AH9+gEgBCAG/QwAAAAAAAAAAAAAAAAAAAAAIAT94AEgBf1D/VL9Uv0LAAAgAkEQaiECIAFBEGohASAAQRBrIgBBD0sNAAsLAkAgAEUNACAB/QAAACIE/fgB/foBIAQgBv0MAAAAAAAAAAAAAAAAAAAAACAE/eABIAX9Q/1S/VIhBCAAQQhxBEAgAiAE/SEAOQMAIAQgBP0NCAkKCwwNDg8ICQoLDA0ODyEEIAJBCGohAgsgAEEEcUUNACACIAT9HwA4AgALC7ULARN7IAP9AANAIAP9AANIIAX9DQABAgMEBQYHAAECAwQFBgciBf0NAAECAwQFBgcAAQIDBAUGByENIAP9AAM4IAX9DQABAgMEBQYHAAECAwQFBgchDiAD/QADMCAF/Q0AAQIDBAUGBwABAgMEBQYHIQ8gA/0AAyggBf0NAAECAwQFBgcAAQIDBAUGByEQIAP9AAMgIAX9DQABAgMEBQYHAAECAwQFBgchESAD/QADGCAF/Q0AAQIDBAUGBwABAgMEBQYHIQogA/0AAxAgBf0NAAECAwQFBgcAAQIDBAUGByESIAP9AAMAIAX9DQABAgMEBQYHAAECAwQFBgchBiAD/QADCCAF/Q0AAQIDBAUGBwABAgMEBQYHIQsgA/0KA1AhEyAAQT9LBEADQCAB/QAAACEVIAH9AAAQIQcgAf0AACAhCCAC/QwAAAAAAAAAAAAAAAAAAAAAIAH9AAAwIhT94AEiCSAL/eYBIAb95AEiFiAG/eUBIgQgCv3mASAJIAQgEv3mAf3kAf3kASIEIBZBF/2rASIW/eYBIAQgBCAEIAQgEf3mASAQ/eQB/eYBIA/95AH95gEgDv3kAf3mASAN/eQB/eYBIBb95AEiBCAEIAX95AH95wEgCSAT/UT9UiIEIAUgBP3lASAUQR/9rAH9Uv0LADAgAiAMIAj94AEiCSAL/eYBIAb95AEiFCAG/eUBIgQgCv3mASAJIAQgEv3mAf3kAf3kASIEIBRBF/2rASIU/eYBIAQgBCAEIAQgEf3mASAQ/eQB/eYBIA/95AH95gEgDv3kAf3mASAN/eQB/eYBIBT95AEiBCAEIAX95AH95wEgCSAT/UT9UiIEIAUgBP3lASAIQR/9rAH9Uv0LACAgAiAMIAf94AEiCCAL/eYBIAb95AEiCSAG/eUBIgQgCv3mASAIIAQgEv3mAf3kAf3kASIEIAlBF/2rASIJ/eYBIAQgBCAEIAQgEf3mASAQ/eQB/eYBIA/95AH95gEgDv3kAf3mASAN/eQB/eYBIAn95AEiBCAEIAX95AH95wEgCCAT/UT9UiIEIAUgBP3lASAHQR/9rAH9Uv0LABAgAiAMIBX94AEiByAL/eYBIAb95AEiCCAG/eUBIgQgCv3mASAHIAQgEv3mAf3kAf3kASIEIAhBF/2rASII/eYBIAQgBCAEIAQgEf3mASAQ/eQB/eYBIA/95AH95gEgDv3kAf3mASAN/eQB/eYBIAj95AEiBCAEIAX95AH95wEgByAT/UT9UiIEIAUgBP3lASAVQR/9rAH9Uv0LAAAgAkFAayECIAFBQGshASAAQUBqIgBBP0sNAAsLIABBD0sEQANAIAL9DAAAAAAAAAAAAAAAAAAAAAAgAf0AAAAiFf3gASIMIAv95gEgBv3kASIHIAb95QEiBCAK/eYBIAwgBCAS/eYB/eQB/eQBIgQgB0EX/asBIgf95gEgBCAEIAQgBCAR/eYBIBD95AH95gEgD/3kAf3mASAO/eQB/eYBIA395AH95gEgB/3kASIEIAQgBf3kAf3nASAMIBP9RP1SIgQgBSAE/eUBIBVBH/2sAf1S/QsAACACQRBqIQIgAUEQaiEBIABBEGsiAEEPSw0ACwsCQCAARQ0A/QwAAAAAAAAAAAAAAAAAAAAAIAH9AAAAIgz94AEiBCAL/eYBIAb95AEiCyAG/eUBIgYgCv3mASAEIAYgEv3mAf3kAf3kASIGIAtBF/2rASIK/eYBIAYgBiAGIAYgEf3mASAQ/eQB/eYBIA/95AH95gEgDv3kAf3mASAN/eQB/eYBIAr95AEiBiAGIAX95AH95wEgBCAT/UT9UiIGIAUgBv3lASAMQR/9rAH9UiEFIABBCHEEQCACIAX9IQA5AwAgBSAF/Q0ICQoLDA0ODwgJCgsMDQ4PIQUgAkEIaiECCyAAQQRxRQ0AIAIgBf0fADgCAAsLqwQCAXsCfwJAIABBIEkNACAAQSBrIgVBBXZBAWpBA3EiBgRAQQAhAwNAIAH9AAAAIQQgAiAB/QAAEP3jAf0LABAgAiAE/eMB/QsAACAAQSBrIQAgAkEgaiECIAFBIGohASADQQFqIgMgBkcNAAsLIAVB3wBNDQADQCAB/QAAACEEIAIgAf0AABD94wH9CwAQIAIgBP3jAf0LAAAgAf0AACAhBCACIAH9AAAw/eMB/QsAMCACIAT94wH9CwAgIAH9AABAIQQgAiAB/QAAUP3jAf0LAFAgAiAE/eMB/QsAQCAB/QAAYCEEIAIgAf0AAHD94wH9CwBwIAIgBP3jAf0LAGAgAkGAAWohAiABQYABaiEBIABBgAFrIgBBH0sNAAsLAkAgAEEQSQ0AIABBEGsiBUEEdkEBakEDcSIGBEBBACEDA0AgAiAB/QAAAP3jAf0LAAAgAEEQayEAIAJBEGohAiABQRBqIQEgA0EBaiIDIAZHDQALCyAFQTBJDQADQCACIAH9AAAA/eMB/QsAACACIAH9AAAQ/eMB/QsAECACIAH9AAAg/eMB/QsAICACIAH9AAAw/eMB/QsAMCACQUBrIQIgAUFAayEBIABBQGoiAEEPSw0ACwsCQCAARQ0AIAH9AAAA/eMBIQQgAEEIcQRAIAIgBP0hADkDACAEIAT9DQgJCgsMDQ4PCAkKCwwNDg8hBCACQQhqIQILIABBBHFFDQAgAiAE/R8AOAIACwvDBAICewJ/IAP9CgMAIQQCQCAAQSBJDQAgAEEgayIGQQV2QQFqQQNxIgcEQEEAIQMDQCAB/QAAACEFIAIgAf0AABAgBP1O/QsAECACIAUgBP1O/QsAACAAQSBrIQAgAkEgaiECIAFBIGohASADQQFqIgMgB0cNAAsLIAZB3wBNDQADQCAB/QAAACEFIAIgAf0AABAgBP1O/QsAECACIAUgBP1O/QsAACAB/QAAICEFIAIgAf0AADAgBP1O/QsAMCACIAUgBP1O/QsAICAB/QAAQCEFIAIgAf0AAFAgBP1O/QsAUCACIAUgBP1O/QsAQCAB/QAAYCEFIAIgAf0AAHAgBP1O/QsAcCACIAUgBP1O/QsAYCACQYABaiECIAFBgAFqIQEgAEGAAWsiAEEfSw0ACwsCQCAAQRBJDQAgAEEQayIGQQR2QQFqQQNxIgcEQEEAIQMDQCACIAH9AAAAIAT9Tv0LAAAgAEEQayEAIAJBEGohAiABQRBqIQEgA0EBaiIDIAdHDQALCyAGQTBJDQADQCACIAH9AAAAIAT9Tv0LAAAgAiAB/QAAECAE/U79CwAQIAIgAf0AACAgBP1O/QsAICACIAH9AAAwIAT9Tv0LADAgAkFAayECIAFBQGshASAAQUBqIgBBD0sNAAsLAkAgAEUNACAB/QAAACAE/U4hBCAAQQhxBEAgAiAE/SEAOQMAIAQgBP0NCAkKCwwNDg8ICQoLDA0ODyEEIAJBCGohAgsgAEEEcUUNACACIAT9HwA4AgALC8MEAgJ7An8gA/0KAwAhBAJAIABBIEkNACAAQSBrIgZBBXZBAWpBA3EiBwRAQQAhAwNAIAH9AAAAIQUgAiAB/QAAECAE/VH9CwAQIAIgBSAE/VH9CwAAIABBIGshACACQSBqIQIgAUEgaiEBIANBAWoiAyAHRw0ACwsgBkHfAE0NAANAIAH9AAAAIQUgAiAB/QAAECAE/VH9CwAQIAIgBSAE/VH9CwAAIAH9AAAgIQUgAiAB/QAAMCAE/VH9CwAwIAIgBSAE/VH9CwAgIAH9AABAIQUgAiAB/QAAUCAE/VH9CwBQIAIgBSAE/VH9CwBAIAH9AABgIQUgAiAB/QAAcCAE/VH9CwBwIAIgBSAE/VH9CwBgIAJBgAFqIQIgAUGAAWohASAAQYABayIAQR9LDQALCwJAIABBEEkNACAAQRBrIgZBBHZBAWpBA3EiBwRAQQAhAwNAIAIgAf0AAAAgBP1R/QsAACAAQRBrIQAgAkEQaiECIAFBEGohASADQQFqIgMgB0cNAAsLIAZBMEkNAANAIAIgAf0AAAAgBP1R/QsAACACIAH9AAAQIAT9Uf0LABAgAiAB/QAAICAE/VH9CwAgIAIgAf0AADAgBP1R/QsAMCACQUBrIQIgAUFAayEBIABBQGoiAEEPSw0ACwsCQCAARQ0AIAH9AAAAIAT9USEEIABBCHEEQCACIAT9IQA5AwAgBCAE/Q0ICQoLDA0ODwgJCgsMDQ4PIQQgAkEIaiECCyAAQQRxRQ0AIAIgBP0fADgCAAsL4QQCAnsCfwJAIABBIEkNACAAQSBrIgZBBXZBAWpBA3EiBwRAQQAhAwNAIAH9AAAAIQQgAiAB/QAAECIFIAX95gH9CwAQIAIgBCAE/eYB/QsAACAAQSBrIQAgAkEgaiECIAFBIGohASADQQFqIgMgB0cNAAsLIAZB3wBNDQADQCAB/QAAACEEIAIgAf0AABAiBSAF/eYB/QsAECACIAQgBP3mAf0LAAAgAf0AACAhBCACIAH9AAAwIgUgBf3mAf0LADAgAiAEIAT95gH9CwAgIAH9AABAIQQgAiAB/QAAUCIFIAX95gH9CwBQIAIgBCAE/eYB/QsAQCAB/QAAYCEEIAIgAf0AAHAiBSAF/eYB/QsAcCACIAQgBP3mAf0LAGAgAkGAAWohAiABQYABaiEBIABBgAFrIgBBH0sNAAsLAkAgAEEQSQ0AIABBEGsiBkEEdkEBakEDcSIHBEBBACEDA0AgAiAB/QAAACIEIAT95gH9CwAAIABBEGshACACQRBqIQIgAUEQaiEBIANBAWoiAyAHRw0ACwsgBkEwSQ0AA0AgAiAB/QAAACIEIAT95gH9CwAAIAIgAf0AABAiBCAE/eYB/QsAECACIAH9AAAgIgQgBP3mAf0LACAgAiAB/QAAMCIEIAT95gH9CwAwIAJBQGshAiABQUBrIQEgAEFAaiIAQQ9LDQALCwJAIABFDQAgAf0AAAAiBCAE/eYBIQQgAEEIcQRAIAIgBP0hADkDACAEIAT9DQgJCgsMDQ4PCAkKCwwNDg8hBCACQQhqIQILIABBBHFFDQAgAiAE/R8AOAIACwvDBgEGeyAD/QADACAG/Q0AAQIDBAUGBwABAgMEBQYHIQUgA/0KAwghBiAAQR9LBEADQCAB/QEAACEHIAH9AQAIIQggAf0BABAhCSACIAYgAf0BABggBf2OASIE/RgEsv0TIAT9GAWy/SABIAT9GAay/SACIAT9GAey/SAD/eYB/QsAcCACIAYgBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mAf0LAGAgAiAGIAkgBf2OASIE/RgEsv0TIAT9GAWy/SABIAT9GAay/SACIAT9GAey/SAD/eYB/QsAUCACIAYgBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mAf0LAEAgAiAGIAggBf2OASIE/RgEsv0TIAT9GAWy/SABIAT9GAay/SACIAT9GAey/SAD/eYB/QsAMCACIAYgBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mAf0LACAgAiAGIAcgBf2OASIE/RgEsv0TIAT9GAWy/SABIAT9GAay/SACIAT9GAey/SAD/eYB/QsAECACIAYgBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mAf0LAAAgAkGAAWohAiABQSBqIQEgAEEgayIAQR9LDQALCyAAQQdLBEADQCACIAYgAf0BAAAgBf2OASIE/RgEsv0TIAT9GAWy/SABIAT9GAay/SACIAT9GAey/SAD/eYB/QsAECACIAYgBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mAf0LAAAgAkEgaiECIAFBCGohASAAQQhrIgBBB0sNAAsLAkAgAEUNACAGIAH9AQAAIAX9jgEiBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mASEFIABBBHEEQCACIAX9CwAAIAYgBP0YBLL9EyAE/RgFsv0gASAE/RgGsv0gAiAE/RgHsv0gA/3mASEFIAJBEGohAgsgAEECcQRAIAIgBf0hADkDACAFIAX9DQgJCgsMDQ4PCAkKCwwNDg8hBSACQQhqIQILIABBAXFFDQAgAiAF/R8AOAIACwvDBgEGeyAD/QADACAG/Q0AAQIDBAUGBwABAgMEBQYHIQUgA/0KAwghBiAAQR9LBEADQCAB/QIAACEHIAH9AgAIIQggAf0CABAhCSACIAYgAf0CABggBf2OASIE/RgEsv0TIAT9GAWy/SABIAT9GAay/SACIAT9GAey/SAD/eYB/QsAcCACIAYgBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mAf0LAGAgAiAGIAkgBf2OASIE/RgEsv0TIAT9GAWy/SABIAT9GAay/SACIAT9GAey/SAD/eYB/QsAUCACIAYgBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mAf0LAEAgAiAGIAggBf2OASIE/RgEsv0TIAT9GAWy/SABIAT9GAay/SACIAT9GAey/SAD/eYB/QsAMCACIAYgBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mAf0LACAgAiAGIAcgBf2OASIE/RgEsv0TIAT9GAWy/SABIAT9GAay/SACIAT9GAey/SAD/eYB/QsAECACIAYgBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mAf0LAAAgAkGAAWohAiABQSBqIQEgAEEgayIAQR9LDQALCyAAQQdLBEADQCACIAYgAf0CAAAgBf2OASIE/RgEsv0TIAT9GAWy/SABIAT9GAay/SACIAT9GAey/SAD/eYB/QsAECACIAYgBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mAf0LAAAgAkEgaiECIAFBCGohASAAQQhrIgBBB0sNAAsLAkAgAEUNACAGIAH9AgAAIAX9jgEiBP0YALL9EyAE/RgBsv0gASAE/RgCsv0gAiAE/RgDsv0gA/3mASEFIABBBHEEQCACIAX9CwAAIAYgBP0YBLL9EyAE/RgFsv0gASAE/RgGsv0gAiAE/RgHsv0gA/3mASEFIAJBEGohAgsgAEECcQRAIAIgBf0hADkDACAFIAX9DQgJCgsMDQ4PCAkKCwwNDg8hBSACQQhqIQILIABBAXFFDQAgAiAF/R8AOAIACwuqAwMGfwF7AXwgAUEEayIGQQJ2QQFqQQdxIQggAv0RIgz9IQAhDSAGQRxJIQsgBSEKA0AgCigCACEGAkAgAUEESQRAIAEhBwwBC0EAIQkgASEHIAgEQANAIAYgDP0LAAAgB0EEayEHIAZBEGohBiAJQQFqIgkgCEcNAAsLIAsNAANAIAYgDP0LAHAgBiAM/QsAYCAGIAz9CwBQIAYgDP0LAEAgBiAM/QsAMCAGIAz9CwAgIAYgDP0LABAgBiAM/QsAACAGQYABaiEGIAdBIGsiB0EDSw0ACwsCQCAHRQ0AIAdBAnEEQCAGIA05AwAgBkEIaiEGCyAHQQFxRQ0AIAYgAjYCAAsgCkEEaiEKIABBAWsiAA0ACyABQQFxIQhBACEGIAFBAUcEQCABQX5xIQlBACEHA0AgBiAFIAQoAgBBAnRqKAIAaiADKAIANgIAIAUgBCgCBEECdGooAgAgBkEEcmogAygCBDYCACAGQQhqIQYgA0EIaiEDIARBCGohBCAHQQJqIgcgCUcNAAsLIAgEQCAGIAUgBCgCAEECdGooAgBqIAMoAgA2AgALC8gEAwR/AnsBfSAAIAFqIQMCQCAAQRBJDQAgAEEQayIFQQR2QQFqQQNxIgYEQANAIAIgAf0AAAAiByAD/QAAACII/Q0ICQoLGBkaGwwNDg8cHR4f/QsAECACIAcgCP0NAAECAxAREhMEBQYHFBUWF/0LAAAgAEEQayEAIAJBIGohAiADQRBqIQMgAUEQaiEBIARBAWoiBCAGRw0ACwsgBUEwSQ0AA0AgAiAB/QAAACIHIAP9AAAAIgj9DQgJCgsYGRobDA0ODxwdHh/9CwAQIAIgByAI/Q0AAQIDEBESEwQFBgcUFRYX/QsAACACIAH9AAAQIgcgA/0AABAiCP0NCAkKCxgZGhsMDQ4PHB0eH/0LADAgAiAHIAj9DQABAgMQERITBAUGBxQVFhf9CwAgIAIgAf0AACAiByAD/QAAICII/Q0ICQoLGBkaGwwNDg8cHR4f/QsAUCACIAcgCP0NAAECAxAREhMEBQYHFBUWF/0LAEAgAiAB/QAAMCIHIAP9AAAwIgj9DQgJCgsYGRobDA0ODxwdHh/9CwBwIAIgByAI/Q0AAQIDEBESEwQFBgcUFRYX/QsAYCACQYABaiECIANBQGshAyABQUBrIQEgAEFAaiIAQQ9LDQALCwJAIABFDQAgAEEIcQRAIAIgAf0KAwAgAysDAP0iASIHIAf9DQABAgMICQoLBAUGBwwNDg/9CwAAIAJBEGohAiADQQhqIQMgAUEIaiEBCyAAQQRxRQ0AIAEqAgAhCSACIAMqAgA4AgQgAiAJOAIACwvVBQMEewN/An0gACABaiIHIABqIQgCQCAAQRBJBEAgACEJDAELIABBEGsiCUEQcUUEQCACIAj9AAAAIgMgAf0AAAAiBP0NAAECAwgJCgsUFRYXHB0eHyIFIAf9AAAAIgYgA/0NBAUGBwwNDg8UFRYXHB0eHyID/Q0EBQYHDA0ODxQVFhccHR4f/QsAICACIAMgBCAG/Q0AAQIDCAkKCxAREhMYGRobIgT9DQABAgMICQoLFBUWFxwdHh/9CwAQIAIgBCAF/Q0AAQIDCAkKCxAREhMYGRob/QsAACACQTBqIQIgCEEQaiEIIAdBEGohByABQRBqIQEgCSEACyAJQRBJDQAgACEJA0AgAiAI/QAAACIDIAH9AAAAIgT9DQABAgMICQoLFBUWFxwdHh8iBSAH/QAAACIGIAP9DQQFBgcMDQ4PFBUWFxwdHh8iA/0NBAUGBwwNDg8UFRYXHB0eH/0LACAgAiADIAQgBv0NAAECAwgJCgsQERITGBkaGyIE/Q0AAQIDCAkKCxQVFhccHR4f/QsAECACIAQgBf0NAAECAwgJCgsQERITGBkaG/0LAAAgAiAI/QAAECIDIAH9AAAQIgT9DQABAgMICQoLFBUWFxwdHh8iBSAH/QAAECIGIAP9DQQFBgcMDQ4PFBUWFxwdHh8iA/0NBAUGBwwNDg8UFRYXHB0eH/0LAFAgAiADIAQgBv0NAAECAwgJCgsQERITGBkaGyIE/Q0AAQIDCAkKCxQVFhccHR4f/QsAQCACIAQgBf0NAAECAwgJCgsQERITGBkaG/0LADAgAkHgAGohAiAIQSBqIQggB0EgaiEHIAFBIGohASAJQSBrIglBD0sNAAsLIAkEQANAIAEqAgAhCiAHKgIAIQsgAiAIKgIAOAIIIAIgCzgCBCACIAo4AgAgAkEMaiECIAhBBGohCCAHQQRqIQcgAUEEaiEBIAlBBGsiCQ0ACwsL9gMDA38GewN9IAAgAWoiAyAAaiIEIABqIQUgAEEQTwRAA0AgAiAB/QAAACIGIAP9AAAAIgf9DQgJCgsYGRobDA0ODxwdHh8iCCAE/QAAACIJIAX9AAAAIgr9DQgJCgsYGRobDA0ODxwdHh8iC/0NCAkKCwwNDg8YGRobHB0eH/0LADAgAiAIIAv9DQABAgMEBQYHEBESExQVFhf9CwAgIAIgBiAH/Q0AAQIDEBESEwQFBgcUFRYXIgYgCSAK/Q0AAQIDEBESEwQFBgcUFRYXIgf9DQgJCgsMDQ4PGBkaGxwdHh/9CwAQIAIgBiAH/Q0AAQIDBAUGBxAREhMUFRYX/QsAACACQUBrIQIgBUEQaiEFIARBEGohBCADQRBqIQMgAUEQaiEBIABBEGsiAEEPSw0ACwsCQCAARQ0AIABBCHEEQCACIAH9CgMAIAMrAwD9IgEiBiAE/QoDACAFKwMA/SIBIgf9DQQFBgcMDQ4PFBUWFxwdHh/9CwAQIAIgBiAH/Q0AAQIDCAkKCxAREhMYGRob/QsAACACQSBqIQIgBUEIaiEFIARBCGohBCADQQhqIQMgAUEIaiEBCyAAQQRxRQ0AIAEqAgAhDCADKgIAIQ0gBCoCACEOIAIgBSoCADgCDCACIA44AgggAiANOAIEIAIgDDgCAAsLggUDC38GewN9IAEEQCAAQQNsIQxBECAAIAFsayENIAFBAnQiBCADakEQayEJIAFBAWsgAGwgAmohCiAAQRBJIQ4DQCACIAxqIgIgCiACIApJGyICIABrIgUgAGsiBiAAayEHIAAhCCAORQRAA0AgAyAH/QAAACIPIAb9AAAAIhD9DQABAgMQERITBAUGBxQVFhciESAF/QAAACISIAL9AAAAIhP9DQABAgMQERITBAUGBxQVFhciFP0NAAECAwQFBgcQERITFBUWF/0LAAAgAyAEaiIDIBEgFP0NCAkKCwwNDg8YGRobHB0eH/0LAAAgAyAEaiIDIA8gEP0NCAkKCxgZGhsMDQ4PHB0eHyIPIBIgE/0NCAkKCxgZGhsMDQ4PHB0eHyIQ/Q0AAQIDBAUGBxAREhMUFRYX/QsAACADIARqIgMgDyAQ/Q0ICQoLDA0ODxgZGhscHR4f/QsAACACQRBqIQIgBUEQaiEFIAZBEGohBiAHQRBqIQcgAyAEaiEDIAhBEGsiCEEPSw0ACwsCQCAIRQ0AIAhBCHEEQCADIAf9CgMAIAYrAwD9IgEiDyAF/QoDACACKwMA/SIBIhD9DQABAgMICQoLEBESExgZGhv9CwAAIAMgBGoiAyAPIBD9DQQFBgcMDQ4PFBUWFxwdHh/9CwAAIAVBCGohBSAGQQhqIQYgB0EIaiEHIAMgBGohAyACQQhqIQILIAhBBHFFDQAgByoCACEVIAYqAgAhFiAFKgIAIRcgAyACKgIAOAIMIAMgFzgCCCADIBY4AgQgAyAVOAIAIAMgBGohAyACQQRqIQILIAkgAyANaiIDIAMgCUsbIQMgC0EEaiILIAFJDQALCwviBAMBewh/AXwgBEEQdiEIIAMgAWshCSABQUBqIgNBBnZBAWpBA3EhByAE/REiBf0hACEOIAFBwABJIQogA0G/AUshCwNAAkAgCgRAIAEhAwwBC0EAIQYgASEDIAcEQANAIAIgBf0LADAgAiAF/QsAICACIAX9CwAQIAIgBf0LAAAgA0FAaiEDIAJBQGshAiAGQQFqIgYgB0cNAAsLIAtFDQADQCACIAX9CwDwASACIAX9CwDgASACIAX9CwDQASACIAX9CwDAASACIAX9CwCwASACIAX9CwCgASACIAX9CwCQASACIAX9CwCAASACIAX9CwBwIAIgBf0LAGAgAiAF/QsAUCACIAX9CwBAIAIgBf0LADAgAiAF/QsAICACIAX9CwAQIAIgBf0LAAAgAkGAAmohAiADQYACayIDQT9LDQALCwJAIANBEEkNAEEAIQYgA0EQayIMQQR2QQFqQQdxIg0EQANAIAIgBf0LAAAgA0EQayEDIAJBEGohAiAGQQFqIgYgDUcNAAsLIAxB8ABJDQADQCACIAX9CwBwIAIgBf0LAGAgAiAF/QsAUCACIAX9CwBAIAIgBf0LADAgAiAF/QsAICACIAX9CwAQIAIgBf0LAAAgAkGAAWohAiADQYABayIDQQ9LDQALCwJAIANFDQAgA0EIcQRAIAIgDjkDACACQQhqIQILIANBBHEEQCACIAQ2AgAgAkEEaiECCyADQQJxBH8gAiAEOwEAIAJBAmohAiAIBSAECyEGIANBAXFFDQAgAiAGOgAAIAJBAWohAgsgAiAJaiECIABBAWsiAA0ACwuQCAMCewl/AXwgCEEQdiELIAUgAWshDyAHIAEgAmogA2prIRAgA0EQayIRQQR2QQFqQQdxIQwgAUEQayIHQQR2QQFqQQdxIQ0gAkEQayISQQR2QQFqQQdxIQ4gCP0RIgn9IQAhFCAHQfAASSETA0ACQCACRQ0AAkAgAkEQSQRAIAIhBwwBC0EAIQUgAiEHIA4EQANAIAYgCf0LAAAgB0EQayEHIAZBEGohBiAFQQFqIgUgDkcNAAsLIBJB8ABJDQADQCAGIAn9CwBwIAYgCf0LAGAgBiAJ/QsAUCAGIAn9CwBAIAYgCf0LADAgBiAJ/QsAICAGIAn9CwAQIAYgCf0LAAAgBkGAAWohBiAHQYABayIHQQ9LDQALCyAHQQhxBEAgBiAUOQMAIAZBCGohBgsgB0EEcQRAIAYgCDYCACAGQQRqIQYLIAdBAnEEfyAGIAg7AQAgBkECaiEGIAsFIAgLIQUgB0EBcUUNACAGIAU6AAAgBkEBaiEGCwJAIAFBEEkEQCABIQcMAQtBACEFIAEhByANBEADQCAGIAT9AAAA/QsAACAHQRBrIQcgBkEQaiEGIARBEGohBCAFQQFqIgUgDUcNAAsLIBMNAANAIAYgBP0AAAD9CwAAIAYgBP0AABD9CwAQIAYgBP0AACD9CwAgIAYgBP0AADD9CwAwIAYgBP0AAED9CwBAIAYgBP0AAFD9CwBQIAYgBP0AAGD9CwBgIAYgBP0AAHD9CwBwIAZBgAFqIQYgBEGAAWohBCAHQYABayIHQQ9LDQALCwJAIAdFDQAgBP0AAAAhCiAHQQhxBEAgBiAK/SEAOQMAIAogCv0NCAkKCwwNDg8ICQoLDA0ODyEKIAZBCGohBgsgB0EEcQRAIAYgCv0fADgCACAKQSD9zQEhCiAGQQRqIQYLIAQgB2ohBCAK/RsAIQUgB0ECcQRAIAYgBTsBACAGQQJqIQYgBUEQdiEFCyAHQQFxRQ0AIAYgBToAACAGQQFqIQYLAkAgA0UNAAJAIANBEEkEQCADIQcMAQtBACEFIAMhByAMBEADQCAGIAn9CwAAIAdBEGshByAGQRBqIQYgBUEBaiIFIAxHDQALCyARQfAASQ0AA0AgBiAJ/QsAcCAGIAn9CwBgIAYgCf0LAFAgBiAJ/QsAQCAGIAn9CwAwIAYgCf0LACAgBiAJ/QsAECAGIAn9CwAAIAZBgAFqIQYgB0GAAWsiB0EPSw0ACwsgB0EIcQRAIAYgFDkDACAGQQhqIQYLIAdBBHEEQCAGIAg2AgAgBkEEaiEGCyAHQQJxBH8gBiAIOwEAIAZBAmohBiALBSAICyEFIAdBAXFFDQAgBiAFOgAAIAZBAWohBgsgBiAQaiEGIAQgD2ohBCAAQQFrIgANAAsLEQAgAEUEQEEBDwsgACgChAELhAIBCX8gASgCACEDIAAoAhQhByAAKAIQIQgDQCABKAIIIQICQANAIAJFDQEgASACQQFrIAEoAggiBCACIARGGzYCCCACIARHIQUgBCECIAUNAAsgByADIAgRBAAgA0EBaiEDDAELCyABKAIMIgYgACgChAEiCiAGG0EBayIDIAZHBEADQCAAIANBBnRqIgJBxAFqIQkgAkHIAWohAQNAIAEoAgAhAgJAA0AgAkUNASABIAJBAWsgASgCACIEIAIgBEYbNgIAIAIgBEchBSAEIQIgBQ0ACyAJIAkoAgBBAWsiAjYCACAHIAIgCBEEAAwBCwsgAyAKIAMbQQFrIgMgBkcNAAsLC7YCAQt/IAAoAhwiBSABKAIAbCEDIAAoAhghCCAAKAIUIQkgACgCECEKA0AgASgCCCECAkADQCACRQ0BIAEgAkEBayABKAIIIgQgAiAERhs2AgggAiAERyEGIAQhAiAGDQALIAkgAyAIIANrIgIgBSACIAVJGyAKEQAAIAMgBWohAwwBCwsgASgCDCIHIAAoAoQBIgwgBxtBAWsiAyAHRwRAA0AgACADQQZ0aiICQcQBaiELIAJByAFqIQEDQCABKAIAIQICQANAIAJFDQEgASACQQFrIAEoAgAiBCACIARGGzYCACACIARHIQYgBCECIAYNAAsgCyALKAIAQQFrIgI2AgAgCSACIAVsIgIgCCACayICIAUgAiAFSRsgChEAAAwBCwsgAyAMIAMbQQFrIgMgB0cNAAsLC+8CAgx/AX4gASgCACICIAIgADUCHCIOIAKtfkIgiKciA2sgAC0AICILdiADaiAALQAhIgx2IgQgACgCGCIIbGshBSAAKAIUIQkgACgCECEKA0AgASgCCCECAkADQCACRQ0BIAEgAkEBayABKAIIIgMgAiADRhs2AgggAiADRyEGIAMhAiAGDQALIAkgBCAFIAoRAABBACAFQQFqIgIgAiAIRiICGyEFIAIgBGohBAwBCwsgASgCDCIHIAAoAoQBIg0gBxtBAWsiBCAHRwRAA0AgACAEQQZ0aiICQcQBaiEFIAJByAFqIQEDQCABKAIAIQICQANAIAJFDQEgASACQQFrIAEoAgAiAyACIANGGzYCACACIANHIQYgAyECIAYNAAsgBSAFKAIAQQFrIgI2AgAgCSACIAKtIA5+QiCIpyIDayALdiADaiAMdiIDIAIgAyAIbGsgChEAAAwBCwsgBCANIAQbQQFrIgQgB0cNAAsLC6IDAg5/AX4gACgCHCIFIAEoAgAiAiACIAA1AiQiECACrX5CIIinIgNrIAAtACgiDHYgA2ogAC0AKSINdiIGIAAoAiAiDmxrbCEEIAAoAhghByAAKAIUIQogACgCECELA0AgASgCCCECAkADQCACRQ0BIAEgAkEBayABKAIIIgMgAiADRhs2AgggAiADRyEIIAMhAiAIDQALIAogBiAEIAcgBGsiAiAFIAIgBUkbIAsRAwAgBCAFaiICQQAgAiAHSRshBCAGIAIgB09qIQYMAQsLIAEoAgwiCSAAKAKEASIPIAkbQQFrIgQgCUcEQANAIAAgBEEGdGoiAkHEAWohBiACQcgBaiEBA0AgASgCACECAkADQCACRQ0BIAEgAkEBayABKAIAIgMgAiADRhs2AgAgAiADRyEIIAMhAiAIDQALIAYgBigCAEEBayICNgIAIAogAiACrSAQfkIgiKciA2sgDHYgA2ogDXYiAyACIAMgDmxrIAVsIgIgByACayICIAUgAiAFSRsgCxEDAAwBCwsgBCAPIAQbQQFrIgQgCUcNAAsLC9wDAhB/AX4gASgCACICIAA1AiwiEiACrX5CIIinIgNrIAAtADAiDnYgA2ogAC0AMSIPdiIDIAAoAhwiBmwhBCAAKAIkIgcgAiADIAAoAigiEGxrbCEFIAAoAiAhCSAAKAIYIQsgACgCFCEMIAAoAhAhDQNAIAEoAgghAgJAA0AgAkUNASABIAJBAWsgASgCCCIDIAIgA0YbNgIIIAIgA0chCCADIQIgCA0ACyAMIAQgBSALIARrIgIgBiACIAZJGyAJIAVrIgIgByACIAdJGyANEQEAIAUgB2oiAkEAIAIgCUkiAhshBUEAIAYgAhsgBGohBAwBCwsgASgCDCIKIAAoAoQBIhEgChtBAWsiBCAKRwRAA0AgACAEQQZ0aiICQcQBaiEFIAJByAFqIQEDQCABKAIAIQICQANAIAJFDQEgASACQQFrIAEoAgAiAyACIANGGzYCACACIANHIQggAyECIAgNAAsgBSAFKAIAQQFrIgI2AgAgDCACIAKtIBJ+QiCIpyIDayAOdiADaiAPdiIDIAZsIgggAiADIBBsayAHbCICIAsgCGsiAyAGIAMgBkkbIAkgAmsiAiAHIAIgB0kbIA0RAQAMAQsLIAQgESAEG0EBayIEIApHDQALCwvXAwIPfwJ+IAEoAgAiAyAANQIoIhEgA61+QiCIpyICayAALQAsIgx2IAJqIAAtAC0iDXYiAiACIAA1AhwiEiACrX5CIIinIgRrIAAtACAiDnYgBGogAC0AISIPdiIHIAAoAhgiCGxrIQYgAyACIAAoAiQiCWxrIQUgACgCFCEKIAAoAhAhCwNAIAEoAgghAgJAA0AgAkUNASABIAJBAWsgASgCCCIDIAIgA0YbNgIIIAIgA0chBCADIQIgBA0ACyAKIAcgBiAFIAsRAwAgBUEBaiIFIAlHDQFBACEFQQAgBkEBaiICIAIgCEYiAhshBiACIAdqIQcMAQsLIAEoAgwiBiAAKAKEASIQIAYbQQFrIgUgBkcEQANAIAAgBUEGdGoiAkHEAWohByACQcgBaiEBA0AgASgCACECAkADQCACRQ0BIAEgAkEBayABKAIAIgMgAiADRhs2AgAgAiADRyEEIAMhAiAEDQALIAcgBygCAEEBayICNgIAIAogAiACrSARfkIgiKciA2sgDHYgA2ogDXYiAyADrSASfkIgiKciBGsgDnYgBGogD3YiBCADIAQgCGxrIAIgAyAJbGsgCxEDAAwBCwsgBSAQIAUbQQFrIgUgBkcNAAsLC8MEAhN/An4gACgCHCIIIAEoAgAiAyAANQI4IhUgA61+QiCIpyICayAALQA8Ig92IAJqIAAtAD0iEHYiAiACIAA1AiwiFiACrX5CIIinIgRrIAAtADAiEXYgBGogAC0AMSISdiIGIAAoAigiE2xrbCEHIAAoAiQiCSADIAIgACgCNCIUbGtsIQUgACgCICELIAAoAhghCiAAKAIUIQ0gACgCECEOA0AgCiAHayICIAggAiAISRshDAJAA0AgASgCCCECA0AgAkUNAiABIAJBAWsgASgCCCIDIAIgA0YbNgIIIAIgA0chBCADIQIgBA0ACyANIAYgByAFIAwgCyAFayICIAkgAiAJSRsgDhEIACAFIAlqIgUgC0kNAAtBACEFIAcgCGoiAkEAIAIgCkkbIQcgBiACIApPaiEGDAELCyABKAIMIgYgACgChAEiDCAGG0EBayIFIAZHBEADQCAAIAVBBnRqIgJBxAFqIQcgAkHIAWohAQNAIAEoAgAhAgJAA0AgAkUNASABIAJBAWsgASgCACIDIAIgA0YbNgIAIAIgA0chBCADIQIgBA0ACyAHIAcoAgBBAWsiAjYCACANIAIgAq0gFX5CIIinIgNrIA92IANqIBB2IgMgA60gFn5CIIinIgRrIBF2IARqIBJ2IgQgAyAEIBNsayAIbCIEIAIgAyAUbGsgCWwiAiAKIARrIgMgCCADIAhJGyALIAJrIgIgCSACIAlJGyAOEQgADAELCyAFIAwgBRtBAWsiBSAGRw0ACwsLxgQCE38DfiABKAIAIgMgADUCLCIVIAOtfkIgiKciAmsgAC0AMCINdiACaiAALQAxIg52IgIgAiAANQIgIhYgAq1+QiCIpyIFayAALQAkIg92IAVqIAAtACUiEHYiBiAAKAIcIglsayEIIAMgAiAAKAIoIhFsayICIAIgADUCOCIXIAKtfkIgiKciA2sgAC0APCISdiADaiAALQA9IhN2IgcgACgCNCIKbGshBCAAKAIYIRQgACgCFCELIAAoAhAhDANAIAEoAgghAgJAA0AgAkUNASABIAJBAWsgASgCCCIDIAIgA0YbNgIIIAIgA0chBSADIQIgBQ0ACyALIAYgCCAHIAQgDBEBACAEQQFqIgQgCkcNAUEAIQQgB0EBaiIHIBRHDQFBACAIQQFqIgIgAiAJRiICGyEIIAIgBmohBkEAIQcMAQsLIAEoAgwiBiAAKAKEASIIIAYbQQFrIgQgBkcEQANAIAAgBEEGdGoiAkHEAWohByACQcgBaiEBA0AgASgCACECAkADQCACRQ0BIAEgAkEBayABKAIAIgMgAiADRhs2AgAgAiADRyEFIAMhAiAFDQALIAcgBygCAEEBayICNgIAIAsgAiACrSAVfkIgiKciA2sgDXYgA2ogDnYiAyADrSAWfkIgiKciBWsgD3YgBWogEHYiBSADIAUgCWxrIAIgAyARbGsiAiACrSAXfkIgiKciA2sgEnYgA2ogE3YiAyACIAMgCmxrIAwRAQAMAQsLIAQgCCAEG0EBayIEIAZHDQALCwuxBQIXfwN+IAEoAgAiAyAANQI4IhkgA61+QiCIpyICayAALQA8IhF2IAJqIAAtAD0iEnYiAiACIAA1AiwiGiACrX5CIIinIgRrIAAtADAiE3YgBGogAC0AMSIUdiIJIAAoAigiDmxrIQsgAyACIAAoAjQiFWxrIgIgADUCRCIbIAKtfkIgiKciA2sgAC0ASCIWdiADaiAALQBJIhd2IgMgACgCHCIHbCEGIAAoAiQiCCACIAMgAEFAaygCACIYbGtsIQUgACgCICEMIAAoAhghDSAAKAIUIQ8gACgCECEQA0AgDSAGayICIAcgAiAHSRshCgJAA0AgASgCCCECA0AgAkUNAiABIAJBAWsgASgCCCIDIAIgA0YbNgIIIAIgA0chBCADIQIgBA0ACyAPIAkgCyAGIAUgCiAMIAVrIgIgCCACIAhJGyAQEQ4AIAUgCGoiBSAMSQ0AC0EAIQUgBiAHaiIGIA1JDQFBACALQQFqIgIgAiAORiICGyELIAIgCWohCUEAIQYMAQsLIAEoAgwiCiAAKAKEASIJIAobQQFrIgUgCkcEQANAIAAgBUEGdGoiAkHEAWohBiACQcgBaiEBA0AgASgCACECAkADQCACRQ0BIAEgAkEBayABKAIAIgMgAiADRhs2AgAgAiADRyEEIAMhAiAEDQALIAYgBigCAEEBayICNgIAIA8gAiACrSAZfkIgiKciA2sgEXYgA2ogEnYiAyADrSAafkIgiKciBGsgE3YgBGogFHYiBCADIAQgDmxrIAIgAyAVbGsiAiACrSAbfkIgiKciA2sgFnYgA2ogF3YiAyAHbCIEIAIgAyAYbGsgCGwiAiANIARrIgMgByADIAdJGyAMIAJrIgIgCCACIAhJGyAQEQ4ADAELCyAFIAkgBRtBAWsiBSAKRw0ACwsLsQUCF38EfiABKAIAIgUgADUCOCIZIAWtfkIgiKciAmsgAC0APCIPdiACaiAALQA9IhB2IgIgADUCLCIaIAKtfkIgiKciA2sgAC0AMCIRdiADaiAALQAxIhJ2IgMgAyAANQIgIhsgA61+QiCIpyIEayAALQAkIhN2IARqIAAtACUiFHYiCCAAKAIcIgpsayEJIAIgAyAAKAIoIgtsayEGIAUgAiAAKAI0IhVsayICIAIgADUCRCIcIAKtfkIgiKciA2sgAC0ASCIWdiADaiAALQBJIhd2IgcgAEFAaygCACIMbGshBCAAKAIYIRggACgCFCENIAAoAhAhDgNAIAEoAgghAgJAA0AgAkUNASABIAJBAWsgASgCCCIDIAIgA0YbNgIIIAIgA0chBSADIQIgBQ0ACyANIAggCSAGIAcgBCAOEQgAIARBAWoiBCAMRw0BQQAhBCAHQQFqIgcgGEcNAUEAIQcgBkEBaiIGIAtHDQFBACAJQQFqIgIgAiAKRiICGyEJIAIgCGohCEEAIQYMAQsLIAEoAgwiCCAAKAKEASIJIAgbQQFrIgQgCEcEQANAIAAgBEEGdGoiAkHEAWohByACQcgBaiEBA0AgASgCACECAkADQCACRQ0BIAEgAkEBayABKAIAIgMgAiADRhs2AgAgAiADRyEFIAMhAiAFDQALIAcgBygCAEEBayICNgIAIA0gAiACrSAZfkIgiKciA2sgD3YgA2ogEHYiAyADrSAafkIgiKciBWsgEXYgBWogEnYiBSAFrSAbfkIgiKciBmsgE3YgBmogFHYiBiAFIAYgCmxrIAMgBSALbGsgAiADIBVsayICIAKtIBx+QiCIpyIDayAWdiADaiAXdiIDIAIgAyAMbGsgDhEIAAwBCwsgBCAJIAQbQQFrIgQgCEcNAAsLC5kGAht/BH4gASgCACIEIAA1AkQiHSAErX5CIIinIgJrIAAtAEgiE3YgAmogAC0ASSIUdiICIAA1AjgiHiACrX5CIIinIgNrIAAtADwiFXYgA2ogAC0APSIWdiIDIAMgADUCLCIfIAOtfkIgiKciBWsgAC0AMCIXdiAFaiAALQAxIhh2IgogACgCKCIPbGshDCACIAMgACgCNCIQbGshByAEIAIgAEFAaygCACIZbGsiAiAANQJQIiAgAq1+QiCIpyIDayAALQBUIhp2IANqIAAtAFUiG3YiAyAAKAIcIghsIQYgACgCJCIJIAIgAyAAKAJMIhxsa2whBSAAKAIgIQ0gACgCGCEOIAAoAhQhESAAKAIQIRIDQCAOIAZrIgIgCCACIAhJGyELAkADQCABKAIIIQIDQCACRQ0CIAEgAkEBayABKAIIIgMgAiADRhs2AgggAiADRyEEIAMhAiAEDQALIBEgCiAMIAcgBiAFIAsgDSAFayICIAkgAiAJSRsgEhEHACAFIAlqIgUgDUkNAAtBACEFIAYgCGoiBiAOSQ0BQQAhBiAHQQFqIgcgEEcNAUEAIAxBAWoiAiACIA9GIgIbIQwgAiAKaiEKQQAhBwwBCwsgASgCDCIHIAAoAoQBIgogBxtBAWsiBSAHRwRAA0AgACAFQQZ0aiICQcQBaiEGIAJByAFqIQEDQCABKAIAIQICQANAIAJFDQEgASACQQFrIAEoAgAiAyACIANGGzYCACACIANHIQQgAyECIAQNAAsgBiAGKAIAQQFrIgI2AgAgESACIAKtIB1+QiCIpyIDayATdiADaiAUdiIDIAOtIB5+QiCIpyIEayAVdiAEaiAWdiIEIAStIB9+QiCIpyILayAXdiALaiAYdiILIAQgCyAPbGsgAyAEIBBsayACIAMgGWxrIgIgAq0gIH5CIIinIgNrIBp2IANqIBt2IgMgCGwiBCACIAMgHGxrIAlsIgIgDiAEayIDIAggAyAISRsgDSACayICIAkgAiAJSRsgEhEHAAwBCwsgBSAKIAUbQQFrIgUgB0cNAAsLC4gHAiB/BX4gASgCACIEIAA1AlQiIiAErX5CIIinIgJrIAAtAFgiFHYgAmogAC0AWSIVdiICIAA1AjwiIyACrX5CIIinIgNrIABBQGstAAAiFnYgA2ogAC0AQSIXdiIDIAMgADUCMCIkIAOtfkIgiKciBWsgAC0ANCIYdiAFaiAALQA1Ihl2IgwgACgCLCIQbGshDSACIAMgACgCOCIabGsiAyADIAA1AkgiJSADrX5CIIinIgVrIAAtAEwiG3YgBWogAC0ATSIcdiIJIAAoAkQiEWxrIQcgACgCICIKIAQgAiAAKAJQIh1sayICIAA1AmAiJiACrX5CIIinIgNrIAAtAGQiHnYgA2ogAC0AZSIfdiIDbCEGIAAoAigiCyACIAMgACgCXCIgbGtsIQUgACgCHCEOIAAoAiQhDyAAKAIYISEgACgCFCESIAAoAhAhEwNAIA4gBmsiAiAKIAIgCkkbIQgCQANAIAEoAgghAgNAIAJFDQIgASACQQFrIAEoAggiAyACIANGGzYCCCACIANHIQQgAyECIAQNAAsgEiAMIA0gCSAHIAYgBSAIIA8gBWsiAiALIAIgC0kbIBMRDAAgBSALaiIFIA9JDQALQQAhBSAGIApqIgYgDkkNAUEAIQYgB0EBaiIHIBFHDQFBACEHIAlBAWoiCSAhRw0BQQAgDUEBaiICIAIgEEYiAhshDSACIAxqIQxBACEJDAELCyABKAIMIgcgACgChAEiCSAHG0EBayIFIAdHBEADQCAAIAVBBnRqIgJBxAFqIQYgAkHIAWohAQNAIAEoAgAhAgJAA0AgAkUNASABIAJBAWsgASgCACIDIAIgA0YbNgIAIAIgA0chBCADIQIgBA0ACyAGIAYoAgBBAWsiAjYCACASIAIgAq0gIn5CIIinIgNrIBR2IANqIBV2IgMgA60gI35CIIinIgRrIBZ2IARqIBd2IgQgBK0gJH5CIIinIghrIBh2IAhqIBl2IgggBCAIIBBsayADIAQgGmxrIgQgBK0gJX5CIIinIghrIBt2IAhqIBx2IgggBCAIIBFsayACIAMgHWxrIgIgAq0gJn5CIIinIgNrIB52IANqIB92IgMgCmwiBCACIAMgIGxrIAtsIgIgDiAEayIDIAogAyAKSRsgDyACayICIAsgAiALSRsgExEMAAwBCwsgBSAJIAUbQQFrIgUgB0cNAAsLCwcAIAAQmAQLpgUBCH8gAEUEQAJ/QbijAS4BACIBRQRAQcS6AUEcNgIAQX8MAQsCQAJAIAFBfkoNAEHpoAwhAAJAAkACQAJAAkACQAJAIAFB/wFxQQFrDgsIAAECAwQEBQUGAwcLQYCACAwIC0GAgAIMBwtBgIAEDAYLQf////8HDAULQQEMBAsQBEEQdgwDC0EADAILIAEhAAsgAAshAAsjAEEQayICJAAgAkEANgIMIAJBDGpBwAAgAEEGdEHAAWoiARCZBEUEQCACKAIMQQAgARD1AxogAigCDCEDCyACQRBqJAACQCADIgJFDQACQCAAQQFGBEAgAiAANgKEASACQQA7AYwBIAJBATYCiAEMAQsgAiAANgKEASACQQE6AIwBIAJBHyAAQQFrZ2siAToAjQEgAkECIAF0IABrrUIghiAArYCnQQFqNgKIASAARQ0BC0EAIQEgAEEBa0EDTwRAIABBfHEhByACQcABaiEFA0AgBSABQQZ0aiIDIAI2AhAgAyABNgIMIAUgAUEBciIDQQZ0aiIGIAI2AhAgBiADNgIMIAUgAUECciIDQQZ0aiIGIAI2AhAgBiADNgIMIAUgAUEDciIDQQZ0aiIGIAI2AhAgBiADNgIMIAFBBGohASAIQQRqIgggB0cNAAsLIABBA3EiAwRAA0AgAiABQQZ0aiIFIAI2AtABIAUgATYCzAEgAUEBaiEBIARBAWoiBCADRw0ACwsgAEEBTQ0AIAIgAEEBazYCACACQQE2AgQgAkEEaiEEQQEhAQNAIAFBAWoiASAARw0ACyAEKAIARQ0AQcCEPSEBA0AgBCgCAEUNASAEKAIARQ0BIAQoAgBFDQEgBCgCAEUNASAEKAIARQ0BIAFBBWsiAQ0ACyAEKAIARQ0AA0AgBCgCAA0ACwsgAguDAgEHfyAAKAIQIgIgAigCACIBQQFrNgIAIAFBAUYEQCACQQA2AgQLIAJBBGohBiACQQhqIQRBACEBA0ACQCAEKAIAIgMgAUcNAEHAhD0hBSAHQQJxRQRAA0AgBCgCACIDIAFHDQIgBCgCACIDIAFHDQIgBCgCACIDIAFHDQIgBCgCACIDIAFHDQIgBCgCACIDIAFHDQIgBUEFayIFDQALCwNAIAQoAgAiAyABRg0ACwsgAigCaCEHAkACQAJAIANB/////wdxQQFrDgIAAgELIAIgACACKAIMEQQACyACIAIoAgAiBUEBazYCACADIQEgBUEBRw0BIAZBADYCAAwBCwtBAAvUAwIEfwF+IAAgBzYCaCAAIAU2AhQgACAENgIQIAAgATYCDCAAQQE2AgQgACAAKAKEASIEQQFrNgIAIAAtAI0BIQUgAC0AjAEhByAANQKIASEMIAMEQCAAQRhqIAIgAxDzAxoLAkAgBEUNACAGIAYgDCAGrX5CIIinIgNrIAd2IANqIAV2IgcgBGxrIQIgBEEBcSEJQQAhA0EAIQYgBEEBRwRAIARBfnEhCiAAQcABaiEIA0AgCCAGQQZ0aiIEIAcgAiAGS2oiBTYCCCAEIAM2AgAgBCADIAVqIgU2AgQgCCAGQQFyIgNBBnRqIgQgByACIANLaiIDNgIIIAQgAyAFaiIDNgIEIAQgBTYCACAGQQJqIQYgC0ECaiILIApHDQALCyAJRQ0AIAAgBkEGdGoiBCAHIAIgBktqIgY2AsgBIAQgAyAGajYCxAEgBCADNgLAAQsgACAAKAIIQX9zQQFyQYGAgIB4cTYCCCAAIABBwAFqIAERBAACQCAAKAIERQ0AIABBBGohBkHAhD0hAwNAIAYoAgBFDQEgBigCAEUNASAGKAIARQ0BIAYoAgBFDQEgBigCAEUNASADQQVrIgMNAAsgBigCAEUNAANAIAYoAgANAAsLC9AUAhF/AX4jAEHgAGsiBSQAIAUgATYCXCAFQcYAaiEVIAVBxwBqIRJBACEBAkACQAJAAkADQCABQf////8HIAxrSg0BIAEgDGohDCAFKAJcIgkhAQJAAkACQCAJLQAAIgsEQANAAkACQCALQf8BcSILRQRAIAEhCwwBCyALQSVHDQEgASELA0AgAS0AAUElRw0BIAUgAUECaiIHNgJcIAtBAWohCyABLQACIQYgByEBIAZBJUYNAAsLIAsgCWsiAUH/////ByAMayILSg0HIAAEQCAAIAkgARDiAwsgAQ0GQX8hEEEBIQcgBSgCXCwAARCDBCEGIAUoAlwhAQJAIAZFDQAgAS0AAkEkRw0AIAEsAAFBMGshEEEBIRNBAyEHCyAFIAEgB2oiATYCXEEAIQ0CQCABLAAAIg5BIGsiBkEfSwRAIAEhBwwBCyABIQdBASAGdCIGQYnRBHFFDQADQCAFIAFBAWoiBzYCXCAGIA1yIQ0gASwAASIOQSBrIgZBIE8NASAHIQFBASAGdCIGQYnRBHENAAsLAkAgDkEqRgRAIAUCfwJAIAcsAAEQgwRFDQAgBSgCXCIHLQACQSRHDQAgBywAAUECdCAEakHAAWtBCjYCACAHLAABQQR0IANqQYAGaygCACEPQQEhEyAHQQNqDAELIBMNBkEAIRNBACEPIAAEQCACIAIoAgAiAUEEajYCACABKAIAIQ8LIAUoAlxBAWoLIgE2AlwgD0EATg0BQQAgD2shDyANQYDAAHIhDQwBCyAFQdwAahDjAyIPQQBIDQggBSgCXCEBC0EAIQdBfyEIAn9BACABLQAAQS5HDQAaIAEtAAFBKkYEQCAFAn8CQCABLAACEIMERQ0AIAUoAlwiBi0AA0EkRw0AIAYsAAJBAnQgBGpBwAFrQQo2AgAgBiwAAkEEdCADakGABmsoAgAhCCAGQQRqDAELIBMNBiAABH8gAiACKAIAIgFBBGo2AgAgASgCAAVBAAshCCAFKAJcQQJqCyIBNgJcIAhBf3NBH3YMAQsgBSABQQFqNgJcIAVB3ABqEOMDIQggBSgCXCEBQQELIRQDQCAHIQZBHCEKIAEsAABB+wBrQUZJDQkgBSABQQFqIg42AlwgASwAACEHIA4hASAHIAZBOmxqQe8tai0AACIHQQFrQQhJDQALAkACQCAHQRtHBEAgB0UNCyAQQQBOBEAgBCAQQQJ0aiAHNgIAIAUgAyAQQQR0aiIBKQMINwNQIAUgASkDADcDSAwCCyAARQ0IIAVByABqIAcgAhDkAyAFKAJcIQ4MAgsgEEEATg0KC0EAIQEgAEUNBwsgDUH//3txIhEgDSANQYDAAHEbIQdBACENQYEIIRAgEiEKAkACQAJAAn8CQAJAAkACQAJ/AkACQAJAAkACQAJAAkAgDkEBaywAACIBQV9xIAEgAUEPcUEDRhsgASAGGyIBQdgAaw4hBBQUFBQUFBQUDhQPBg4ODhQGFBQUFAIFAxQUCRQBFBQEAAsCQCABQcEAaw4HDhQLFA4ODgALIAFB0wBGDQkMEwsgBSkDSCEWQYEIDAULQQAhAQJAAkACQAJAAkACQAJAIAZB/wFxDggAAQIDBBoFBhoLIAUoAkggDDYCAAwZCyAFKAJIIAw2AgAMGAsgBSgCSCAMrDcDAAwXCyAFKAJIIAw7AQAMFgsgBSgCSCAMOgAADBULIAUoAkggDDYCAAwUCyAFKAJIIAysNwMADBMLIAhBCCAIQQhLGyEIIAdBCHIhB0H4ACEBCyASIREgAUEgcSEGIAUpA0giFlBFBEADQCARQQFrIhEgFqdBD3FBgDJqLQAAIAZyOgAAIBZCD1YhCSAWQgSIIRYgCQ0ACwsgESEJIAUpA0hQDQMgB0EIcUUNAyABQQR2QYEIaiEQQQIhDQwDCyASIQEgBSkDSCIWUEUEQANAIAFBAWsiASAWp0EHcUEwcjoAACAWQgdWIREgFkIDiCEWIBENAAsLIAEhCSAHQQhxRQ0CIAggEiAJayIBQQFqIAEgCEgbIQgMAgsgBSkDSCIWQgBTBEAgBUIAIBZ9IhY3A0hBASENQYEIDAELIAdBgBBxBEBBASENQYIIDAELQYMIQYEIIAdBAXEiDRsLIRAgFiASEOUDIQkLIBRBACAIQQBIGw0OIAdB//97cSAHIBQbIQcCQCAFKQNIIhZCAFINACAIDQAgEiIJIQpBACEIDAwLIAggFlAgEiAJa2oiASABIAhIGyEIDAsLAn9B/////wcgCCAIQQBIGyIHIgpBAEchDgJAAkACQCAFKAJIIgFBviwgARsiCSIBIgZBA3FFDQAgCkUNAANAIAYtAABFDQIgCkEBayIKQQBHIQ4gBkEBaiIGQQNxRQ0BIAoNAAsLIA5FDQELAkAgBi0AAEUNACAKQQRJDQADQCAGKAIAIg5Bf3MgDkGBgoQIa3FBgIGChHhxDQEgBkEEaiEGIApBBGsiCkEDSw0ACwsgCkUNAANAIAYgBi0AAEUNAhogBkEBaiEGIApBAWsiCg0ACwtBAAsiBiABayAHIAYbIgEgCWohCiAIQQBOBEAgESEHIAEhCAwLCyARIQcgASEIIAotAAANDQwKCyAIBEAgBSgCSAwCC0EAIQEgAEEgIA9BACAHEOYDDAILIAVBADYCDCAFIAUpA0g+AgggBSAFQQhqNgJIQX8hCCAFQQhqCyELQQAhAQJAA0AgCygCACIGRQ0BAkAgBUEEaiAGEJIEIgZBAEgiCQ0AIAYgCCABa0sNACALQQRqIQsgCCABIAZqIgFLDQEMAgsLIAkNDQtBPSEKIAFBAEgNCyAAQSAgDyABIAcQ5gMgAUUEQEEAIQEMAQtBACEGIAUoAkghCwNAIAsoAgAiCUUNASAFQQRqIAkQkgQiCSAGaiIGIAFLDQEgACAFQQRqIAkQ4gMgC0EEaiELIAEgBksNAAsLIABBICAPIAEgB0GAwABzEOYDIA8gASABIA9IGyEBDAgLIBRBACAIQQBIGw0IQT0hCiAAIAUpA0ggBSkDUCAPIAggByABQZ8CERwAIgFBAE4NBwwJCyAFIAUpA0g8AEZBASEIIBUhCSARIQcMBAsgBSABQQFqIgc2AlwgAS0AASELIAchAQwACwALIAANByATRQ0CQQEhAQNAIAQgAUECdGooAgAiCwRAIAMgAUEEdGogCyACEOQDQQEhDCABQQFqIgFBCkcNAQwJCwtBASEMIAFBCk8NBwNAIAQgAUECdGooAgANASABQQFqIgFBCkcNAAsMBwtBHCEKDAQLIAogCWsiDiAIIAggDkgbIghB/////wcgDWtKDQJBPSEKIAggDWoiBiAPIAYgD0obIgEgC0oNAyAAQSAgASAGIAcQ5gMgACAQIA0Q4gMgAEEwIAEgBiAHQYCABHMQ5gMgAEEwIAggDkEAEOYDIAAgCSAOEOIDIABBICABIAYgB0GAwABzEOYDDAELC0EAIQwMAwtBPSEKC0HEugEgCjYCAAtBfyEMCyAFQeAAaiQAIAwLuQEBA38gAC0AAEEgcUUEQAJAIAIgACIDKAIQIgQEfyAEBSADEOsDDQEgAygCEAsgAygCFCIFa0sEQCADIAEgAiADKAIkEQ0AGgwBCwJAIAMoAlBBAEgNACACIQADQCAAIgRFDQEgASAEQQFrIgBqLQAAQQpHDQALIAMgASAEIAMoAiQRDQAgBEkNASABIARqIQEgAiAEayECIAMoAhQhBQsgBSABIAIQ8wMaIAMgAygCFCACajYCFAsLC20BA38gACgCACwAABCDBEUEQEEADwsDQCAAKAIAIQNBfyEBIAJBzJmz5gBNBEBBfyADLAAAQTBrIgEgAkEKbCICaiABQf////8HIAJrShshAQsgACADQQFqNgIAIAEhAiADLAABEIMEDQALIAEL4QYDA34BfwF8IwBBEGsiBiQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAECBQMEBgcICQoLDA0ODxAREgsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADBELIAIgAigCACIBQQRqNgIAIAAgATQCADcDAAwQCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAMDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADA4LIAIgAigCACIBQQRqNgIAIAAgATUCADcDAAwNCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwAMDAsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADAsLIAIgAigCACIBQQRqNgIAIAAgATMBADcDAAwKCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAMCQsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADAgLIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAwHCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAMBgsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMADAULIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAwECyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAMAwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADAILIAIgAigCAEEHakF4cSIBQQhqNgIAIAErAwAhByMAQRBrIgEkAAJ+IAe9IgVC////////////AIMiA0KAgICAgICACH1C/////////+//AFgEQCADQjyGIQQgA0IEiEKAgICAgICAgDx8DAELIANCgICAgICAgPj/AFoEQCAFQjyGIQQgBUIEiEKAgICAgIDA//8AhAwBC0IAIANQDQAaIAEgA0IAIAWnZ0EgaiADQiCIp2cgA0KAgICAEFQbIgJBMWoQmwQgASkDACEEIAEpAwhCgICAgICAwACFQYz4ACACa61CMIaECyEDIAYgBDcDACAGIAMgBUKAgICAgICAgIB/g4Q3AwggAUEQaiQAIAAgBikDCDcDCCAAIAYpAwA3AwAMAQsgACACQaACEQQACyAGQRBqJAALgwECA38BfgJAIABCgICAgBBUBEAgACEFDAELA0AgAUEBayIBIAAgAEIKgCIFQgp+fadBMHI6AAAgAEL/////nwFWIQIgBSEAIAINAAsLIAWnIgIEQANAIAFBAWsiASACIAJBCm4iA0EKbGtBMHI6AAAgAkEJSyEEIAMhAiAEDQALCyABC3IBAX8jAEGAAmsiBSQAAkAgAiADTA0AIARBgMAEcQ0AIAUgAUH/AXEgAiADayICQYACIAJBgAJJIgMbEPUDGiADRQRAA0AgACAFQYACEOIDIAJBgAJrIgJB/wFLDQALCyAAIAUgAhDiAwsgBUGAAmokAAu4AgEEfyMAQaACayIDJAAgAyACNgKcAiADQfABakEAQSgQ9QMaIAMgAygCnAI2ApgCAkBBACABIANBmAJqIANB0ABqIANB8AFqEOEDQQBIDQAgACgCTEEATiEGIAAoAgAhBSAAKAJIQQBMBEAgACAFQV9xNgIACwJ/AkACQCAAKAIwRQRAIABB0AA2AjAgAEEANgIcIABCADcDECAAKAIsIQQgACADNgIsDAELIAAoAhANAQtBfyAAEOsDDQEaCyAAIAEgA0GYAmogA0HQAGogA0HwAWoQ4QMLIQIgBUEgcSEBIAQEfyAAQQBBACAAKAIkEQ0AGiAAQQA2AjAgACAENgIsIABBADYCHCAAKAIUGiAAQgA3AxBBAAUgAgsaIAAgACgCACABcjYCACAGRQ0ACyADQaACaiQAC/QfAhJ/An4jAEGAPGsiCCQAIAhBADYCrAICQCACQj+IpwRAIAJCgICAgICAgICA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AkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAvoAgECfwJAIAAgAUYNACABIAAgAmoiA2tBACACQQF0a00EQCAAIAEgAhDzAxoPCyAAIAFzQQNxIQQCQAJAIAAgAUkEQCAEBEAgACEDDAMLIABBA3FFBEAgACEDDAILIAAhAwNAIAJFDQQgAyABLQAAOgAAIAFBAWohASACQQFrIQIgA0EBaiIDQQNxDQALDAELAkAgBA0AIANBA3EEQANAIAJFDQUgACACQQFrIgJqIgMgASACai0AADoAACADQQNxDQALCyACQQNNDQADQCAAIAJBBGsiAmogASACaigCADYCACACQQNLDQALCyACRQ0CA0AgACACQQFrIgJqIAEgAmotAAA6AAAgAg0ACwwCCyACQQNNDQADQCADIAEoAgA2AgAgAUEEaiEBIANBBGohAyACQQRrIgJBA0sNAAsLIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQQFrIgINAAsLC/ICAgJ/AX4CQCACRQ0AIAAgAToAACAAIAJqIgNBAWsgAToAACACQQNJDQAgACABOgACIAAgAToAASADQQNrIAE6AAAgA0ECayABOgAAIAJBB0kNACAAIAE6AAMgA0EEayABOgAAIAJBCUkNACAAQQAgAGtBA3EiBGoiAyABQf8BcUGBgoQIbCIBNgIAIAMgAiAEa0F8cSIEaiICQQRrIAE2AgAgBEEJSQ0AIAMgATYCCCADIAE2AgQgAkEIayABNgIAIAJBDGsgATYCACAEQRlJDQAgAyABNgIYIAMgATYCFCADIAE2AhAgAyABNgIMIAJBEGsgATYCACACQRRrIAE2AgAgAkEYayABNgIAIAJBHGsgATYCACAEIANBBHFBGHIiBGsiAkEgSQ0AIAGtQoGAgIAQfiEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkEgayICQR9LDQALCyAACx4BAX8jAEEQ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aygCAEcEQCAAKAIEIgQgACgCCDYCCCAAKAIIIAQ2AgQgASADaiEBCyACIAE2AgAgAUF8cSACakEEayABQQFyNgIAIAICfyACKAIAQQhrIgFB/wBNBEAgAUEDdkEBawwBCyABZyEAIAFBHSAAa3ZBBHMgAEECdGtB7gBqIAFB/x9NDQAaIAFBHiAAa3ZBAnMgAEEBdGtBxwBqIgFBPyABQT9JGwsiAUEEdCIAQYC8AWo2AgQgAiAAQYi8AWoiACgCADYCCCAAIAI2AgAgAigCCCACNgIEQYjEAUGIxAEpAwBCASABrYaENwMACwsHACAAEJcECygBAX9BFiEDIAFBA3EEfyADBSAAIAEgAhCUBCIBNgIAQQBBDCABGwsLzQkCA34EfyMAQfAAayIIJAAgBEL///////////8AgyEGAkACQCABUCIJIAJC////////////AIMiBUKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAFUBtFBEAgA0IAUiAGQoCAgICAgMD//wB9IgdCgICAgICAwICAf1YgB0KAgICAgIDAgIB/URsNAQsgCSAFQoCAgICAgMD//wBUIAVCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgBkKAgICAgIDA//8AVCAGQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAFQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiCRshBEIAIAEgCRshAwwCCyADIAZCgICAgICAwP//AIWEUA0BIAEgBYRQBEAgAyAGhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAGhFBFDQAgASEDIAIhBAwBCyADIAEgASADVCAFIAZUIAUgBlEbIgobIQUgBCACIAobIgZC////////P4MhByACIAQgChsiAkIwiKdB//8BcSELIAZCMIinQf//AXEiCUUEQCAIQeAAaiAFIAcgBSAHIAdQIgkbeSAJQQZ0rXynIglBD2sQmwRBECAJayEJIAgpA2ghByAIKQNgIQULIAEgAyAKGyEDIAJC////////P4MhBCALRQRAIAhB0ABqIAMgBCADIAQgBFAiCht5IApBBnStfKciCkEPaxCbBEEQIAprIQsgCCkDWCEEIAgpA1AhAwsgBEIDhiADQj2IhEKAgICAgICABIQhBCAHQgOGIAVCPYiEIQEgAiAGhSECAn4gA0IDhiIDIAkgC2siCkUNABogCkH/AEsEQEIAIQRCAQwBCyAIQUBrIAMgBEGAASAKaxCbBCAIQTBqIAMgBCAKEJ0EIAgpAzghBCAIKQMwIAgpA0AgCCkDSIRCAFKthAshAyABQoCAgICAgIAEhCEHIAVCA4YhAQJAIAJCAFMEQCABIAN9IgUgByAEfSABIANUrX0iBIRQBEBCACEDQgAhBAwDCyAEQv////////8DVg0BIAhBIGogBSAEIAUgBCAEUCIKG3kgCkEGdK18p0EMayIKEJsEIAkgCmshCSAIKQMoIQQgCCkDICEFDAELIAEgA3wiBSADVK0gBCAHfHwiBEKAgICAgICACINQDQAgBUIBgyAEQj+GIAVCAYiEhCEFIAlBAWohCSAEQgGIIQQLIAZCgICAgICAgICAf4MhASAJQf//AU4EQCABQoCAgICAgMD//wCEIQRCACEDDAELQQAhCgJAIAlBAEoEQCAJIQoMAQsgCEEQaiAFIAQgCUH/AGoQmwQgCCAFIARBASAJaxCdBCAIKQMAIAgpAxAgCCkDGIRCAFKthCEFIAgpAwghBAsgBEI9hiAFQgOIhCIDIAMgBadBB3EiCUEES618IgVWrSAEQgOIQv///////z+DIAqtQjCGhCABhHwhBAJAAkAgCUEERwRAIAUhAwwBCyAEIAVCAYMiASAFfCIDIAFUrXwhBAwBCyAJRQ0BCwsgACADNwMAIAAgBDcDCCAIQfAAaiQAC1ABAX4CQCADQcAAcQRAIAEgA0FAaq2GIQJCACEBDAELIANFDQAgAiADrSIEhiABQcAAIANrrYiEIQIgASAEhiEBCyAAIAE3AwAgACACNwMIC9sBAgF/An5BASEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQEF/IQQgACACVCABIANTIAEgA1EbDQEgACAChSABIAOFhEIAUg8LQX8hBCAAIAJWIAEgA1UgASADURsNACAAIAKFIAEgA4WEQgBSIQQLIAQLUAEBfgJAIANBwABxBEAgAiADQUBqrYghAUIAIQIMAQsgA0UNACACQcAAIANrrYYgASADrSIEiIQhASACIASIIQILIAAgATcDACAAIAI3AwgLuQoCBX8QfiMAQeAAayIEJAAgA0L///////8/gyENIAIgA4VCgICAgICAgICAf4MhCSACQv///////z+DIgxCIIghEAJAAkAgA0IwiKdB//8BcSIFQf//AWtBgYB+SyACQjCIp0H//wFxIgdB//8Ba0GCgH5PcQ0AIAFQIAJC////////////AIMiCkKAgICAgIDA//8AVCAKQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQkMAgsgA0L///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFFyRQRAIANCgICAgICAIIQhCUIAIQEMAgsgASAKQoCAgICAgMD//wCFhFAEQCACUARAQoCAgICAgOD//wAhCUIAIQEMAwsgCUKAgICAgIDA//8AhCEJQgAhAQwCCyACQoCAgICAgMD//wCFUARAIAEgCoQhAkIAIQEgAlAEQEKAgICAgIDg//8AIQkMAwsgCUKAgICAgIDA//8AhCEJDAILIAEgCoRQBEBCACEBDAILIAJQBEBCACEBDAILIApC////////P1gEQCAEQdAAaiABIAwgASAMIAxQIgYbeSAGQQZ0rXynIgZBD2sQmwRBECAGayEGIAQpA1giDEIgiCEQIAQpA1AhAQsgAkL///////8/Vg0AIARBQGtCACANQgAgDSANUCIIG3kgCEEGdK18pyIIQQ9rEJsEIAYgCGtBEGohBiAEKQNIIQ0gBCkDQCELCyALQg+GIgpCgID+/w+DIgIgAUIgiCIDfiIRIApCIIgiCiABQv////8PgyIBfnwiD0IghiISIAEgAn58Ig4gElStIAIgDEL/////D4MiDH4iFSADIAp+fCISIA1CD4YgC0IxiIQiE0L/////D4MiCyABfnwiDSAPIBFUrUIghiAPQiCIhHwiESACIBBCgIAEhCIPfiIWIAogDH58IhAgE0IgiEKAgICACIQiAiABfnwiEyADIAt+fCIUQiCGfCIXfCEBIAUgB2ogBmpB//8AayEFAkAgAiADfiIYIAogD358IgMgGFStIAMgCyAM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dGVwIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTcGFyc2VTZWdtZW50UmVkdWN0aW9uIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABNaW4gZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFN1bSBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAUHJvZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQATGVha3lSZWx1IGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABBYnMgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAE5lZyBmb3IgdGVuc29yIGlkcyAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3F1YXJlIGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABSb3VuZCBmb3IgdGVuc29yIGlkcyAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAUmVsdTYgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFBvdyBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAERpdiBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAE11bCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFNxdWFyZWREaWZmZXJlbmNlIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAQWRkIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3ViIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU2NhdHRlciBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABHYXRoZXIgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAVHJhbnNwb3NlIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFRpbGUgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAR2F0aGVyTmQgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAQWRkTiBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQARmxvb3JEaXYgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQATWF4aW11bSBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABNaW5pbXVtIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGR0eXBlICVkAEN1bXN1bSBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQAQ3VtcHJvZCBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQAVG9wSyBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQATm90RXF1YWwgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC5VbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExlc3NFcXVhbCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLlVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQAR3JlYXRlckVxdWFsIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMb2dpY2FsTm90IGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMZXNzIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQATG9naWNhbFhvciBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAEdyZWF0ZXIgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMb2dpY2FsT3IgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABFcXVhbCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExvZ2ljYWxBbmQgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABOQU4ASU5GAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9jb25zdGFudF9wYWRfbmRfeDMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9jb25zdGFudF9wYWRfbmRfeDMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwXypfbmRfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV8qX25kX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9yZXNpemVfYmlsaW5lYXIyZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfcmVzaXplX2JpbGluZWFyMmRfbmh3Y19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfY29udm9sdXRpb24yZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfY29udm9sdXRpb24yZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9tYXhfcG9vbGluZzJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2F2ZXJhZ2VfcG9vbGluZzJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3NvZnRtYXhfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9zb2Z0bWF4X25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9wcmVsdV9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX3ByZWx1X25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9lbHVfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9lbHVfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2NsYW1wX25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfY2xhbXBfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3NpZ21vaWRfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9zaWdtb2lkX25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9mdWxseV9jb25uZWN0ZWRfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9mdWxseV9jb25uZWN0ZWRfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AT3BlcmFuZHMgY291bGQgbm90IGJlIGJyb2FkY2FzdCB0b2dldGhlciwgc2hhcGUgbWlzbWF0Y2guAChudWxsKQBNaXJyb3JQYWQgZm9yIHRlbnNv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AAAAAAAArEea/Yxg7j899SSfyjizP6BqAh+zpOw/upE4VKl2xD/m/GpXNiDrP9LkxEoLhM4/LaqhY9HC6T8cZcbwRQbUP+1BeAPmhug/+J8bLJyO2D9iSFP13GfnP8x7sU6k4Nw/C25JyRZ20j96xnWgaRnXv926p2wKx94/yPa+SEcV578ruCplRxX3P6BUAAAAAAAAAv8ABGQAIAAABP//BgABAAEAAQD//wH/Af//////Af8B/wH/Af8B/wH/Af8B//////8K/yAA//8D/wH/BP8eAAABBf//////YwAACGMA6AMCAAAA//////8AAAAB/wH//////////////wBBiaMBCwEEAEGWowELRAH/Af//////AAEgAAQAgAAACP//Af8B/////////wH/Bv8H/wj/Cf//////vAK8AgEA//8BAAEA//8AAP//////////AEHqowELARQAQYqkAQse//8BAAr///////////8B/wH/AAAAAAAAAf8B/wH/AEG6pAELSAH/AAAAAAAAAf8B/wEAAAABAAAAAf//////AAAAAAH///8AAAAA/////////////ygACv//////AQAK/////wD//////////wBB5qUBCxwB/wH///8BAP//////////////////Cv//////AEGUpgEL+QICAAAAAwAAAAUAAAAHAAAACwAAAA0AAAARAAAAEwAAABcAAAAdAAAAHwAAACUAAAApAAAAKwAAAC8AAAA1AAAAOwAAAD0AAABDAAAARwAAAEkAAABPAAAAUwAAAFkAAABhAAAAZQAAAGcAAABrAAAAbQAAAHEAAAB/AAAAgwAAAIkAAACLAAAAlQAAAJcAAACdAAAAowAAAKcAAACtAAAAswAAALUAAAC/AAAAwQAAAMUAAADHAAAA0wAAAAEAAAALAAAADQAAABEAAAATAAAAFwAAAB0AAAAfAAAAJQAAACkAAAArAAAALwAAADUAAAA7AAAAPQAAAEMAAABHAAAASQAAAE8AAABTAAAAWQAAAGEAAABlAAAAZwAAAGsAAABtAAAAcQAAAHkAAAB/AAAAgwAAAIkAAACLAAAAjwAAAJUAAACXAAAAnQAAAKMAAACnAAAAqQAAAK0AAACzAAAAtQAAALsAAAC/AAAAwQAAAMUAAADHAAAA0QBBkKkBCxEBAAAAAQAAAAgAAAAAAAAABQBBrKkBCwIhAQBBxKkBCwoiAQAAIwEAAFBdAEHcqQELAQIAQeypAQsI//////////8AQbCqAQsDIGJQ"); + } + }); + + // src/tfjs-backend-wasm.wasm + var tfjs_backend_wasm_exports = {}; + __export(tfjs_backend_wasm_exports, { + default: () => tfjs_backend_wasm_default + }); + var tfjs_backend_wasm_default; + var init_tfjs_backend_wasm = __esm({ + "src/tfjs-backend-wasm.wasm"() { + tfjs_backend_wasm_default = __toBinary("AGFzbQEAAAABvwVKYAN/f38AYAR/f39/AGACf38AYAF/AGACf38Bf2AKf39/f39/f39/fwBgBX9/f39/AGAIf39/f39/f38AYAx/f39/f39/f39/f38AYAZ/f39/f38AYAF/AX9gBX9/f39/AX9gCX9/f39/f39/fwBgA39/fwF/YAd/f39/f39/AGALf39/f39/f39/f38AYAAAYAN/fX0AYAJ9fQF/YAJ9fQF9YAl/f39/f39/f38Bf2AEf39/fwF/YAR9fX9/AX9gAX0BfWAAAX9gBH99fX0AYAF8AXxgB39+fn9/f38Bf2AEf35+fwBgAn99AGATf39/f39/f39/f39/f39/f39/fwBgF39/f39/f39/f39/f39/f39/f39/f31/AGAEf399fwBgDX9/f39/f39/f39/fX8AYAV/fX9/fwBgAXwBfWABfwF8YAF/AX1gA39+fwF+YAV/fn5+fgBgDn9/f39/f39/f39/f39/AGAEf319fwBgG39/f39/f39/f39/f39/f39/f39/f39/f39/fwBgCn9/f39/f39/fX8AYAd/f39/f31/AGARf39/f39/f39/f39/f39/f38AYAV/f399fQF/YAZ/f399fX8Bf2AGf39/fX19AX9gCH9/f39/f31/AGALf39/f399fX1/f38AYAx/f39/f39/f39/f38Bf2AEf31/fwBgD39/f39/f39/f39/f399fwBgA31/fwF9YBh/f39/f39/f39/f39/f39/f39/f39/fX8AYAd/f399fX1/AX9gA39/fQBgBn19f39/fwF/YAd/f39/f39/AX9gA399fwBgAn5/AX9gAnx8AXxgAnx/AX9gA3x8fwF8YAJ9fwF/YAJ/fAF8YAJ/fQF9YAF9AX9gAX4Bf2ACfH8BfGAEfn5+fgF/YAR/fn5+AGAKf39/f39/f39/fwF/AtsBCANlbnYFYWJvcnQAEANlbnYVZW1zY3JpcHRlbl9tZW1jcHlfYmlnAA0Wd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF9jbG9zZQAKFndhc2lfc25hcHNob3RfcHJldmlldzEIZmRfd3JpdGUAFQNlbnYXZW1zY3JpcHRlbl9nZXRfaGVhcF9tYXgAGANlbnYWZW1zY3JpcHRlbl9yZXNpemVfaGVhcAAKA2VudgtzZXRUZW1wUmV0MAADFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfc2VlawALA4AE/gMQAwMKAhADGAADAgIQAgAAAgcEBAEAAAYDAigGBAIMAAMCKR4qAAArCQkMHgAHEgQEAAkABxMELB8fBwcHEgQEBxIEBCAHEgQEBxIEBAAHBAAHBAcEAQMtBxMEAAEHEwQHDw8PBwQALi8wBxIEBgMCMQcTBAQAAQcEBAAAAwIFBQkyAAAMBgIAAwIBMw4MAAAHBAQ0BQcEAQAADgcBAgABABULBBULBDU2DiEDAwMDNwIKBAAGAwICOAMCAwI5AwcHBwcHDAEXAwEDAgMDIQADAgMAIAMBAwMAARUCAAAQEAoEBAQEDQQEGBY6FhYWBBQUFBQUBAoVFQMUFgsLCwsLCws7CwsLCwsLBA0CDQMDAAUJBg4JCQYAAAAAAAACAgEACQkAAAIAAg8MCAUMDAkBAR0ZEQMDGRkDAwMiIjwBAQwPDAEFBQUOCAgIDgEJAAYGAQEBAQEBAQEBAQEBAQUFBQUICAEBCQAAAAEGDA8FBQUFBQUFBQUHDgUFBQUFBQUFCAgICAgICAgMCA8OAQYGBgYGBgYGBgYGBgYGAQEBBwEFBQUFCAgKAgICAgICAgICAgICAwoKBwsACgA9BgAbAhgKPgs/QCMjQQ0ADUIkJBpDFyUlF0QXGhwKEBoaF0UTCgoXRgoNJgoECgQNCgMDJxxHHEgnCg0KGAMKSQsEBwFwAYYChgIFBwEBgAKAgAIGCQF/AUHgxsECCwfBCmsGbWVtb3J5AgARX193YXNtX2NhbGxfY3RvcnMACARpbml0AA0XaW5pdF93aXRoX3RocmVhZHNfY291bnQADhFnZXRfdGhyZWFkc19jb3VudAAPD3JlZ2lzdGVyX3RlbnNvcgAQDGRpc3Bvc2VfZGF0YQARB2Rpc3Bvc2UAFBlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQADQWJzABcDQWRkABkEQWRkTgAcA0FsbAAdA0FueQAeBkFyZ01heAAfB0F2Z1Bvb2wAIgtCYXRjaE1hdE11bAAmBENlaWwAJwtDbGlwQnlWYWx1ZQAqBkNvbnYyRAArE0NvbnYyREJhY2twcm9wSW5wdXQALANDb3MALQRDb3NoAC4NQ3JvcEFuZFJlc2l6ZQAvB0N1bXByb2QAMAZDdW1zdW0AMQxEZXB0aFRvU3BhY2UAMhVEZXB0aHdpc2VDb252MmROYXRpdmUAMwNFbHUANAVFcXVhbAA1A0V4cAA5DUZsaXBMZWZ0UmlnaHQAOgVGbG9vcgA7CEZsb29yRGl2ADwORnVzZWRCYXRjaE5vcm0APwtGdXNlZENvbnYyRABAFEZ1c2VkRGVwdGh3aXNlQ29udjJEAEEGR2F0aGVyAEIIR2F0aGVyTmQAQwdHcmVhdGVyAEQMR3JlYXRlckVxdWFsAEgJTGVha3lSZWx1AEwETGVzcwBNCUxlc3NFcXVhbABRA0xvZwBVCkxvZ2ljYWxBbmQAVgpMb2dpY2FsTm90AFgJTG9naWNhbE9yAFkKTG9naWNhbFhvcgBbA01heABdB01heFBvb2wAXwdNYXhpbXVtAGAETWVhbgBjA01pbgBkB01pbmltdW0AZQlNaXJyb3JQYWQAaAhNdWx0aXBseQBsA05lZwBuE05vbk1heFN1cHByZXNzaW9uVjMAbxNOb25NYXhTdXBwcmVzc2lvblY0AHATTm9uTWF4U3VwcHJlc3Npb25WNQBxCE5vdEVxdWFsAHIGT25lSG90AHUFUGFkVjIAeANQb3cAeQVQcmVsdQB9BFByb2QAfgdSZWFsRGl2AH8EUmVsdQCCAQVSZWx1NgCDAQ5SZXNpemVCaWxpbmVhcgCGARVSZXNpemVOZWFyZXN0TmVpZ2hib3IAhwEHUmV2ZXJzZQCIARBSb3RhdGVXaXRoT2Zmc2V0AIkBBVJvdW5kAIoBBVJzcXJ0AIsBCVNjYXR0ZXJOZACMAQhTZWxlY3RWMgCNAQdTaWdtb2lkAI4BA1NpbgCPAQdTb2Z0bWF4AJIBE1NwYXJzZUZpbGxFbXB0eVJvd3MAkwENU3BhcnNlUmVzaGFwZQCUARZTcGFyc2VTZWdtZW50UmVkdWN0aW9uAJUBBFNxcnQAlgEGU3F1YXJlAJcBEVNxdWFyZWREaWZmZXJlbmNlAJgBBFN0ZXAAmwEMU3RyaWRlZFNsaWNlAJwBA1N1YgCdAQNTdW0AnwEDVGFuAKABBFRhbmgAoQEEVGlsZQCiAQRUb3BLAKMBCVRyYW5zZm9ybQCvAQlUcmFuc3Bvc2UAsQEMX0Z1c2VkTWF0TXVsALIBBm1hbGxvYwD1AwRmcmVlAPcDEF9fZXJybm9fbG9jYXRpb24A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DQAgAkEBayEJIANBAUshCgNAIAQoAgAiBEUNASAAIAQoAgQiA0cEQAJAIApFBEAgAyAJcSEDDAELIAIgA0sNACADIAJwIQMLIAEgA0cNAgsgBCgCCCAARw0AC0EADAELQRQQgAQiBCAGKAIANgIIIAcpAgAhDSAEIAA2AgQgBCANNwIMIARBADYCAAJAQQAgAkGMrQEoAgBBAWqzIgxBkK0BKgIAIgsgArOUXhsNACACIAJBAWtxQQBHIAJBA0lyIAJBAXRyIQNBgK0BAn8gDCALlY0iC0MAAIBPXSALQwAAAABgcQRAIAupDAELQQALIgIgAyACIANLGxAVQYStASgCACICIAJBAWtxRQRAIAJBAWsgAHEhAQwBCyAAIAJJBEAgACEBDAELIAAgAnAhAQsCQEGArQEoAgAgAUECdGoiAygCACIARQRAIARBiK0BKAIANgIAQYitASAENgIAIANBiK0BNgIAIAQoAgAiAEUNASAAKAIEIQACQCACIAJBAWsiA3FFBEAgACADcSEADAELIAAgAkkNACAAIAJwIQALQYCtASgCACAAQQJ0aiAENgIADAELIAQgACgCADYCACAAIAQ2AgALQYytAUGMrQEoAgBBAWo2AgBBAQs6AAQgCCAENgIAIAVBIGokAAuzAgEHfyMAQRBrIgQkACAEIAA2AgxBgK0BIARBDGoQEgJAQZitASgCACICRQ0AIAQoAgwhA0GUrQEoAgACfyACQQFrIANxIAJpIgFBAU0NABogAyACIANLDQAaIAMgAnALIgVBAnRqKAIAIgBFDQAgACgCACIARQ0AIAJBAWshBiABQQFLIQcDQAJAAkAgAyAAKAIEIgFHBEACQCAHRQRAIAEgBnEhAQwBCyABIAJJDQAgASACcCEBCyABIAVGDQEMBAsgACgCCCADRg0BCyAAKAIAIgANAQwCCwsCQCAAKAIMIgIgACgCECIBRg0AIAMgAigCABEDACACQQRqIgAgAUYNAANAIAQoAgwgACgCABEDACAAQQRqIgAgAUcNAAsLQZStASAEQQxqEBMLIARBEGokAAvqAQEHfyMAQRBrIgUkAAJAIAAoAgQiA0UNACAAKAIAAn8gASgCACIEIANBAWtxIANpIgJBAU0NABogBCADIARLDQAaIAQgA3ALIgZBAnRqKAIAIgFFDQAgASgCACIBRQ0AIANBAWshByACQQFLIQgDQAJAAkAgBCABKAIEIgJHBEACQCAIRQRAIAIgB3EhAgwBCyACIANJDQAgAiADcCECCyACIAZGDQEMBAsgASgCCCAERg0BCyABKAIAIgENAQwCCwsgBSAAIAEQFiAFKAIAIQEgBUEANgIAIAEEQCABEPcDCwsgBUEQaiQAC4sCAQd/IwBBEGsiBCQAAkAgACgCBCIDRQ0AIAAoAgACfyABKAIAIgUgA0EBa3EgA2kiAkEBTQ0AGiAFIAMgBUsNABogBSADcAsiBkECdGooAgAiAUUNACABKAIAIgFFDQAgA0EBayEHIAJBAUshCANAAkACQCAFIAEoAgQiAkcEQAJAIAhFBEAgAiAHcSECDAELIAIgA0kNACACIANwIQILIAIgBkYNAQwECyABKAIIIAVGDQELIAEoAgAiAQ0BDAILCyAEIAAgARAWIAQoAgAhASAEQQA2AgAgAQRAAkAgBC0ACEUNACABKAIMIgJFDQAgASACNgIQIAIQ9wMLIAEQ9wMLCyAEQRBqJAALgQcBB38CQEGIrQEoAgAiAUUNAAJAA0ACQAJAIAAgA0cEQCAAIAEoAgg2AgAgACECDAELIAMgBGsiAEECdSIGQQFqIgJBgICAgARPDQEgAiAAQQF1IgMgAiADSxtB/////wMgAEH8////B0kbIgMEfyADQYCAgIAETw0CIANBAnQQgAQFQQALIgUgBkECdGoiAiABKAIINgIAIANBAnQhAyAAQQBKBEAgBSAEIAAQ0gMaCyADIAVqIQMgBARAIAQQ9wMLIAUhBAsgAkEEaiEAIAEoAgAiAQ0BDAILCxAAAAsgACAERg0AIAQhAANAIAAoAgAQESAAIAJGIQEgAEEEaiEAIAFFDQALC0GMrQEoAgAEQEGIrQEoAgAiAARAA0AgACgCACEBIAAQ9wMgASIADQALC0GIrQFBADYCAAJAQYStASgCACIBRQ0AIAFBA3EhBUEAIQJBACEAIAFBAWtBA08EQCABQXxxIQZBACEDA0AgAEECdCIBQYCtASgCAGpBADYCAEGArQEoAgAgAUEEcmpBADYCAEGArQEoAgAgAUEIcmpBADYCAEGArQEoAgAgAUEMcmpBADYCACAAQQRqIQAgA0EEaiIDIAZHDQALCyAFRQ0AA0BBgK0BKAIAIABBAnRqQQA2AgAgAEEBaiEAIAJBAWoiAiAFRw0ACwtBjK0BQQA2AgALQaCtASgCAARAQZytASgCACIABEADQCAAKAIAIQEgACgCDCICBEAgACACNgIQIAIQ9wMLIAAQ9wMgASIADQALC0EAIQBBnK0BQQA2AgACQEGYrQEoAgAiAUUNACABQQNxIQMgAUEBa0EDTwRAIAFBfHEhBUEAIQIDQCAAQQJ0IgFBlK0BKAIAakEANgIAQZStASgCACABQQRyakEANgIAQZStASgCACABQQhyakEANgIAQZStASgCACABQQxyakEANgIAIABBBGohACACQQRqIgIgBUcNAAsLIANFDQBBACEBA0BBlK0BKAIAIABBAnRqQQA2AgAgAEEBaiEAIAFBAWoiASADRw0ACwtBoK0BQQA2AgALQaytASgCACIABEAgACgChAEiAkECTwRAIABCgYCAgCA3AgQgACACQQFrNgIAQQEhAQNAIAAgAUEGdGooAtQBGiABQQFqIgEgAkcNAAsLIAAQvAMLQaytAUEANgIAIAQEQCAEEPcDCwvdBQIJfwF9AkACf0ECIAFBAUYNABogASABIAFBAWtxRQ0AGiABEP4DCyIDIAAoAgQiAU0EQCABIANNDQEgAUEDSSEFAn8gACgCDLMgACoCEJWNIgtDAACAT10gC0MAAAAAYHEEQCALqQwBC0EACyECAn8CQCAFDQAgAWlBAUsNACACQQFBICACQQFrZ2t0IAJBAkkbDAELIAIQ/gMLIgIgAyACIANLGyIDIAFPDQELIAAhBEEAIQJBACEFAkACQCADBEAgA0GAgICABE8NASADQQJ0EIAEIQAgBCgCACEBIAQgADYCACABBEAgARC8AwsgBCADNgIEIANBA3EhBkEAIQEgA0EBa0EDTwRAIANBfHEhBwNAIAFBAnQiACAEKAIAakEANgIAIAQoAgAgAEEEcmpBADYCACAEKAIAIABBCHJqQQA2AgAgBCgCACAAQQxyakEANgIAIAFBBGohASAFQQRqIgUgB0cNAAsLIAYEQANAIAQoAgAgAUECdGpBADYCACABQQFqIQEgAkEBaiICIAZHDQALCyAEKAIIIgVFDQIgBEEIaiEBIAUoAgQhBgJAIANpIgJBAU0EQCAGIANBAWtxIQYMAQsgAyAGSw0AIAYgA3AhBgsgBCgCACAGQQJ0aiABNgIAIAUoAgAi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SwRAQQAPCyAAKAIwIgIgASgCMCIDSQ0AQQAhBCACIANLDQAgACgCNCABKAI0SSEECyAEC6IEAQN/IAEgACABRiIDOgAMAkAgAw0AA0AgASgCCCICLQAMDQECQAJ/IAIgAigCCCIDKAIAIgRGBEACQCADKAIEIgRFDQAgBC0ADA0AIARBDGohBAwDCwJAIAEgAigCAEYEQCACIQQMAQsgAiACKAIEIgQoAgAiATYCBCAEIAEEfyABIAI2AgggAigCCAUgAws2AgggAigCCCIDIAMoAgAgAkdBAnRqIAQ2AgAgBCACNgIAIAIgBDYCCCAEKAIIIQMLIARBAToADCADQQA6AAwgAyADKAIAIgIoAgQiBDYCACAEBEAgBCADNgIICyACIAMoAgg2AgggAygCCCIEIAQoAgAgA0dBAnRqIAI2AgAgAiADNgIEIANBCGoMAQsCQCAERQ0AIAQtAAwNACAEQQxqIQQMAgsCQCABIAIoAgBHBEAgAiEBDAELIAIgASgCBCIENgIAIAEgBAR/IAQgAjYCCCACKAIIBSADCzYCCCACKAIIIgMgAygCACACR0ECdGogATYCACABIAI2AgQgAiABNgIIIAEoAgghAwsgAUEBOgAMIANBADoADCADIAMoAgQiAigCACIENgIEIAQEQCAEIAM2AggLIAIgAygCCDYCCCADKAIIIgQgBCgCACADR0ECdGogAjYCACACIAM2AgAgA0EIagsgAjYCAAwCCyACQQE6AAwgAyAAIANGIgI6AAwgBEEBOgAAIAMhASACRQ0ACwsLIgAgACABIAIgAyAEIAUgBiAHQQBBAEEAQwAAAAAgCBDVAQsNACAAIAJBCkELENABCw8AQbytAUHArQEoAgAQKQseACABBEAgACABKAIAECkgACABKAIEECkgARD3AwsLsQQCBn8BfSMAQSBrIgQkACAAEAshBiADEAsoAgAhByAGKAIAIQggBEEANgIcAkACQAJAAkBBwK0BKAIAIgBFDQBBwK0BIQMDQAJAAkAgACoCECIKIAFdDQAgASAKXUUEQCAAKgIUIAJdDQELIAAhAwwBCyAAQQRqIQALIAAoAgAiAA0ACyADQcCtAUYNACADKgIQIgogAV4NACABIApeDQEgAyoCFCACXkUNAQsgASACQQAgBEEcahCCAiIABEAgBCAANgIQQfUnIARB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IANBfHEhCyADQQNxIQcgBSgCACEAIANBAWtBA0khDANAAkAgA0UNACAGIApqIQFBACEIIAxFBEADQCAAIAZBAnQiBSAEIAIgAS0AABtqKgIAOAIAIAAgBCACIAEtAAAbIAVqKgIAOAIEIAAgBCACIAEtAAAbIAVqKgIAOAIIIAAgBCACIAEtAAAbIAVqKgIAOAIMIABBEGohACAIQQRqIgggC0cNAAsLQQAhBSAHRQ0AA0AgACAGQQJ0IAQgAiABLQAAG2oqAgA4AgAgAEEEaiEAIAVBAWoiBSAHRw0ACwsgBkEBaiIGIAlHDQALCwsVACAAEAsiACgCACAAKAIEIAEQ4AELVAECfyAAEAshASACEAshACABKAIEBEAgACgCACEDIAEoAgAhBEEAIQADQCADIABBAnQiAmogAiAEaioCABDOATgCACAAQQFqIgAgASgCBEkNAAsLCxAAQeytAUHwrQEoAgAQkQELIAAgAQRAIAAgASgCABCRASAAIAEoAgQQkQEgARD3AwsLjgcBBX8jAEEgayIFJAAgABALIQAgARALKAIAIQggACgCACEHIAVBADYCHAJAAkACQAJAAkBB8K0BKAIAIgBFDQBB8K0BIQEDQCABIAAgACgCECACSSIEGyEBIAAgBEECdGooAgAiAA0ACyABQfCtAUYNACABKAIQIAJNDQELAn8gBUEcaiEAQQEhAQJAAkBBwK8BLQAAQQFxRQ0AQQIhASACQQFrIAJPDQBBAA0AEPABIgENAUEGIQELQQAQlQIgAQwBCyABQccANgKQAiABIAI2AmwgASACNgJUIAEgAjYCPCABQQA2AoAEIAFBADYCyAEgACABNgIAQQALIgAEQCAFIAA2AhBBnCMgBUEQahAYDAQLQfCtASEBQfCtASgCACIARQRAQfCtASEADAILA0ACQCACIAAoAhAiBEkEQCAAKAIAIgQNASAAIQEMBAsgAiAETQ0DIABBBGohASAAKAIEIgRFDQMgASEACyAAIQEgBCEADAALAAsgBSABKAIUIgA2AhwMAQsgASgCAEUEQCAFKAIcIQZBGBCABCIEIAY2AhQgBCACNgIQIAQgADYCCCAEQgA3AgAgASAENgIAQeytASgCACgCACIABEBB7K0BIAA2AgAgASgCACEEC0HwrQEoAgAgBBAlQfStAUH0rQEoAgBBAWo2AgALQaitAUGorQEoAgBBAWo2AgAgBSgCHCEAC0GsrQEoAgAaAn9BAiAAKAKQAkHHAEcNABogAEEANgKABEEBQcCvAS0AAEEBcUUNABogACADBH8gACAINgJwIAAgBzYCWCAAIAM2AgBBsLsBKAIAIQZBpLsBKAIAIQRBvLoBKAIAIQIgAEGgA2oiAUIANwMAIAAgAjYCnAMgACAENgKYAyAAIAY2ApQDIAAgACgCbEECdDYCkAMgACAINgKMAyAAIAAoAlRBAnQ2AogDIAAgBzYChAMgACAAKAI8QQJ0NgKAAyAAQagDaiIGQgA3AwAgAEIANwOwAyAAQgA3A7gDIABCADcDwAMgAEIANwPIA0HIugEoAgAiBwRAIAAgBzYCnAMLIAFDAACA/0MAAIB/QdC6ASgCABERACAGQai7ASgCABEDACAAIAM2ArACIABB7AE2AqwCIABBATYCqAJBAQVBAgs2AoAEQQALIgAEQCAFIAA2AgBBtiIgBRAYDAELIAUoAhxBrK0BKAIAEK8CCyAFQSBqJAAL+BYCDH8BfSMAQRBrIhUkACAAEAshACABEAshECAGEAshDSAHEAshASAIEAshCCAJEAshBiAKEAshByALEAsoAgAhDCAHKAIAIQsgBigCACEGIAEoAgAhASAAKAIAIQACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAg4CAAECCyAIKAIAIRMgECgCACEUIA0oAgAqAgAhGCAMQQA2AgAgBEUEQCADRQ0OIAwgAzYCBCAMQQE2AgAMDgsgBEGAgICABE8NAkEAIQggBEECdCIOEIAEQQAgDhDUAyENQQEhCSADRQ0IQQAhBwNAIAAgBSAHbEECdGooAgAiAkEASARAIAwgAjYCCCAMIAc2AgQgDEECNgIADAsLIAIgBEkEQCANIAJBAnRqIgogCigCAEEBajYCACAJIAIgCE9xIQkgAiEIIAdBAWoiByADRg0KDAELCyAMIAQ2AgwgDCACNgIIIAwgBzYCBCAMQQM2AgAMCQsgCCgCACETIBAoAgAhFCANKAIAKAIAIRcgDEEANgIAIARFBEAgA0UNDSAMIAM2AgQgDEEBNgIADA0LIARBgICAgARPDQFBACEIIARBAnQiDhCABEEAIA4Q1AMhDUEBIQkgA0UNAkEAIQcDQCAAIAUgB2xBAnRqKAIAIgJBAEgEQCAMIAI2AgggDCAHNgIEIAxBAjYCAAwFCyACIARJBEAgDSACQQJ0aiIKIAooAgBBAWo2AgAgCSACIAhPcSEJIAIhCCAHQQFqIgcgA0YNBAwBCwsgDCAENgIMIAwgAjYCCCAMIAc2AgQgDEEDNgIADAMLIBUgAjYCAEH5CCAVEBgMCwsQAAALIAYgDSgCACICRToAACANIAJBASACGyIMNgIAIAJBAEchCgJAIARBAkkNAEEBIQIgBEEBayIHQQFxIRIgBEECRwRAIAdBfnEhEUEAIRADQCACIAZqIA0gAkECdGoiCCgCACIHRToAACAIIAdBASAHGyAMaiIMNgIAIAYgAkEBaiIIaiANIAhBAnRqIg8oAgAiCEU6AAAgDyAIQQEgCBsgDGoiDDYCACAKIAdBAEdxIAhBAEdxIQogAkECaiECIBBBAmoiECARRw0ACwsgEkUNACACIAZqIA0gAkECdGoiBigCACICRToAACAGIAJBASACGyAMajYCACAKIAJBAEdxIQoLIAkgCnFFDQMgAyAFbCICBEAgASAAIAJBAnQQ0wMLIANFDQAgEyAUIANBAnQQ0wMgA0EBa0H/////A3EiAkEBaiIBQQdxIQZBACEAIAJBB08NAUEAIQIMAgtBACESIA0Q9wMMCAsgAUH4////B3EhB0EAIQJBACEBA0AgCyACNgIAIAsgAkEHcjYCHCALIAJBBnI2AhggCyACQQVyNgIUIAsgAkEEcjYCECALIAJBA3I2AgwgCyACQQJyNgIIIAsgAkEBcjYCBCACQQhqIQIgC0EgaiELIAFBCGoiASAHRw0ACwsgBgRAA0AgCyACNgIAIAJBAWohAiALQQRqIQsgAEEBaiIAIAZHDQALCyADIRIgDRD3AwwGCyAEQQJ0IA1qQQRrKAIAIRJBACEPIA4QgARBACAOENQDIQ4gAwRAIAVBfHEhECAFQQNxIQwgBUEBa0ECSyEWA0AgDiAAIAUgD2wiBkECdGooAgAiB0ECdCIJaiIIKAIAIQIgBwR/IAkgDWpBBGsoAgAFQQALIQcgCCACQQFqNgIAIAIgB2ohEQJAIAVFDQAgBSARbCEHQQAhCEEAIQJBACEJIBYEQANAIAEgAiAHakECdGogACACIAZqQQJ0aigCADYCACABIAJBAXIiCiAHakECdGogACAGIApqQQJ0aigCADYCACABIAJBAnIiCiAHakECdGogACAGIApqQQJ0aigCADYCACABIAJBA3IiCiAHakECdGogACAGIApqQQJ0aigCADYCACACQQRqIQIgCUEEaiIJIBBHDQALCyAMRQ0AA0AgASACIAdqQQJ0aiAAIAIgBmpBAnRqKAIANgIAIAJBAWohAiAIQQFqIgggDEcNAAsLIBMgEUECdGogFCAPQQJ0IgJqKAIANgIAIAIgC2ogETYCACAPQQFqIg8gA0cNAAsLIAFBBGohCCAFQQJ0QQRrIQkgDigCAEUEQCABQQA2AgAgBUECTwRAIAhBACAJENQDGgsgEyAXNgIACyAEQQJPBEBBASECIARBASAEQQFLGyEGA0AgDiACQQJ0IgBqKAIARQRAIAEgACANakEEaygCACIAIAVsQQJ0IgdqIAI2AgAgBUECTwRAIAcgCGpBACAJENQDGgsgEyAAQQJ0aiAXNgIACyACQQFqIgIgBkcNAAsLIA4Q9wMgDRD3AwwFCyAGIA0oAgAiAkU6AAAgDSACQQEgAhsiDDYCACACQQBHIQoCQCAEQQJJDQBBASECIARBAWsiB0EBcSESIARBAkcEQCAHQX5xIRFBACEQA0AgAiAGaiANIAJBAnRqIggoAgAiB0U6AAAgCCAHQQEgBxsgDGoiDDYCACAGIAJBAWoiCGogDSAIQQJ0aiIPKAIAIghFOgAAIA8gCEEBIAgbIAxqIgw2AgAgCiAHQQBHcSAIQQBHcSEKIAJBAmohAiAQQQJqIhAgEUcNAAsLIBJFDQAgAiAGaiANIAJBAnRqIgYoAgAiAkU6AAAgBiACQQEgAhsgDGo2AgAgCiACQQBHcSEKCyAJIApxRQ0DIAMgBWwiAgRAIAEgACACQQJ0ENMDCyADRQ0AIBMgFCADQQJ0ENMDIANBAWtB/////wNxIgJBAWoiAUEHcSEGQQAhACACQQdPDQFBACECDAILQQAhEiANEPcDDAMLIAFB+P///wdxIQdBACECQQAhAQNAIAsgAjYCACALIAJBB3I2AhwgCyACQQZyNgIYIAsgAkEFcjYCFCALIAJBBHI2AhAgCyACQQNyNgIMIAsgAkECcjYCCCALIAJBAXI2AgQgAkEIaiECIAtBIGohCyABQQhqIgEgB0cNAAsLIAYEQANAIAsgAjYCACACQQFqIQIgC0EEaiELIABBAWoiACAGRw0ACwsgAyESIA0Q9wMMAQsgBEECdCANakEEaygCACESQQAhDyAOEIAEQQAgDhDUAyEOIAMEQCAFQXxxIRAgBUEDcSEMIAVBAWtBAkshFgNAIA4gACAFIA9sIgZBAnRqKAIAIgdBAnQiCWoiCCgCACECIAcEfyAJIA1qQQRrKAIABUEACyEHIAggAkEBajYCACACIAdqIRECQCAFRQ0AIAUgEWwhB0EAIQhBACECQQAhCSAWBEADQCABIAIgB2pBAnRqIAAgAiAGakECdGooAgA2AgAgASACQQFyIgogB2pBAnRqIAAgBiAKakECdGooAgA2AgAgASACQQJyIgogB2pBAnRqIAAgBiAKakECdGooAgA2AgAgASACQQNyIgogB2pBAnRqIAAgBiAKakECdGooAgA2AgAgAkEEaiECIAlBBGoiCSAQRw0ACwsgDEUNAANAIAEgAiAHakECdGogACACIAZqQQJ0aigCADYCACACQQFqIQIgCEEBaiIIIAxHDQALCyATIBFBAnRqIBQgD0ECdCICaioCADgCACACIAtqIBE2AgAgD0EBaiIPIANHDQALCyABQQRqIQggBUECdEEEayEJIA4oAgBFBEAgAUEANgIAIAVBAk8EQCAIQQAgCRDUAxoLIBMgGDgCAAsgBEECTwRAQQEhAiAEQQEgBEEBSxshBgNAIA4gAkECdCIAaigCAEUEQCABIAAgDWpBBGsoAgAiACAFbEECdCIHaiACNgIAIAVBAk8EQCAHIAhqQQAgCRDUAxoLIBMgAEECdGogGDgCAAsgAkEBaiICIAZHDQALCyAOEPcDIA0Q9wMLIBVBEGokACASC9UNAg1/AXwgABALIQAgARALIQkgAhALIQ8gBBALIQEgBRALIQIgBhALIQUgAigCACEOIAEoAgAhEiAPKAIAIQ0gCSgCACEKIAAoAgAhEEF/IQQgBSgCACIHQX82AgBBASEIQQEhAgJAAkACQAJAIAkoAgQiAARAIABBAEgNASAAQQJ0IgAQgAQgCiAAENIDIQsCQCAARQ0AIABBBGsiAEECdkEBaiIBQQdxIQYCQCAAQRxJBEAgCyEBDAELIAFB+P///wdxIQxBACEFIAshAANAIAAoAhwgACgCGCAAKAIUIAAoAhAgACgCDCAAKAIIIAAoAgQgACgCACACbGxs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IAAgBUECdGo2AkggByAAIAEgBhDSAyAGajYCRAsgB0HQAGogB0FAaxDjASAHKAJAIgAEQCAHIAA2AkQgABC8AwsCfyAHKAIUIAcoAhAiAWsiAEUEQEEAIRFBAAwBCyAAQQBIDQFBACEKIAAQgAQiEUEAIABBAnUiAEEBa0H/////A3EiD0ECdEEEahDUAyECIABBASAAQQFLGyIFQQNxIQsgBygCACEGQQAhACAFQQFrQQNPBEAgBUF8cSENQQAhCANAIAIgAEECdCIFaiABIAUgBmooAgBBAnRqKAIANgIAIAIgBUEEciIJaiABIAYgCWooAgBBAnRqKAIANgIAIAIgBUEIciIJaiABIAYgCWooAgBBAnRqKAIANgIAIAIgBUEMciIFaiABIAUgBmooAgBBAnRqKAIANgIAIABBBGohACAIQQRqIgggDUcNAAsLIA9BAWohCCALBEADQCACIABBAnQiBWogASAFIAZqKAIAQQJ0aigCADYCACAAQQFqIQAgCkEBaiIKIAtHDQALCyACIAhBAnRqCyEAIAdBADYCKCAHQgA3AyAgACARayIABEAgAEEASA0BIAcgABCABCICNgIgIAcgAiAAQQJ1QQJ0ajYCKCAHIAIgESAAENIDIABqNgIkCyAHQTBqIAdBIGoQ4wEgBygCICIABEAgByAANgIkIAAQvAMLQQAhAyAORQ0BA0BBACEPQQAhAgJAIAcoAlQgBygCUCIFayIGQQJ1IgBBAWoiASAASQ0AIAFBgICAgARPDQIgAUECdBCABCICQQAgAEECdCIIQQRqENQDIgogCGoiFEEEaiEPIAYEQCAAQQEgAEEBSxsiCEEBcSESQQAhASADIQAgBkEITwRAIAhBfnEhDUEAIQgDQCAKIAFBAnQiBmogACAFIAZqKAIAIgluIgs2AgAgCiAGQQRyIgZqIAAgCSALbGsiACAFIAZqKAIAIgZuIgk2AgAgACAGIAlsayEAIAFBAmohASAIQQJqIgggDUcNAAsLIBQgEgR/IAogAUECdCIBaiAAIAEgBWooAgAiAW4iBjYCACAAIAEgBmxrBSAACzYCAAwBCyAKIAM2AgALAkACQAJAAkACQAJAAn8gDyACayIARQRAQQAhC0EADAELIABBAEgNCEEAIQogABCABCILQQAgAEECdSIAQQFrQf////8DcUECdCIUQQRqENQDIQEgAEEBIABBAUsbIgVBA3EhDSAHKAIAIQZBACEAIAVBAWtBA08EQCAFQXxxIQ9BACEIA0AgASAAQQJ0IgVqIAIgBSAGaigCAEECdGooAgA2AgAgASAFQQRyIglqIAIgBiAJaigCAEECdGooAgA2AgAgASAFQQhyIglqIAIgBiAJaigCAEECdGooAgA2AgAgASAFQQxyIgVqIAIgBSAGaigCAEECdGooAgA2AgAgAEEEaiEAIAhBBGoiCCAPRw0ACwsgDQRAA0AgASAAQQJ0IgVqIAIgBSAGaigCAEECdGooAgA2AgAgAEEBaiEAIApBAWoiCiANRw0ACwsgASAUakEEagsgC2tBAnUiAA4CAwABCyALKAIAIQYMAQsgCyAAQQFrIgVBAnRqKAIAIQYgBUUNACAHKAIwIQEgBUEDcSENQQAhCgJAIABBAmtBA0kEQEEAIQAMAQsgBUF8cSEPQQAhAEEAIQgDQCALIABBAnQiBUEMciIJaigCACABIAlqKAIAbCALIAVBCHIiCWooAgAgASAJaigCAGwgBSALaigCACABIAVqKAIAbCAGaiALIAVBBHIiCWooAgAgASAJaigCAGxqamohBiAAQQRqIQAgCEEEaiIIIA9HDQALCyANRQ0AA0AgCyAAQQJ0IgVqKAIAIAEgBWooAgBsIAZqIQYgAEEBaiEAIApBAWoiCiANRw0ACwsgBiATaiADIAxqLQAAOgAADAELIBMgAyAMai0AADoAACALRQ0BCyALELwDCyACBEAgAhC8AwsgDiADQQFqIgNHDQALDAELEAAACyAHKAIwIgAEQCAHIAA2AjQgABC8AwsgEQRAIBEQvAMLIAcoAlAiAEUNAiAHIAA2AlQgABC8AwwCCyAHKAIAIgAoAgQhBiABKAIIIQggASgCBCEJQQEhBCABKAIMIgIhF0EBIQ5BASEFAkACQAJAIAAoAgAiCkECRg0AQQEhFyACIQQgBkECRwRAIAJBASAAKAIIQQJGIgUbIQ5BASACIAUbIQVBASEECyAKQQFHDQAgAiAIbCEXDAELAkAgBkEBRgRAIAIgCGwhBAwBCyACIAhsIgsgDiAAKAIIQQFGIg0bIQ4gBSALIA0bIQULIAoNACACIAhsIAlsIRcMAQsgBkUEQCACIAhsIAlsIQRBACEGDAELIA4gAiAIbCAJbCICIAAoAggiCBshDiACIAUgCBshBQsgASAKQQJ0aigCACIdRQ0BIAEgBkECdGooAgAhESABIAAoAghBAnRqKAIAIQ0gASAAKAIMQQJ0aigCACILQX5xIQggC0EBcSEUQQAhGANAIBEEQCARIBhsIRUgFyAYbCEeQQAhEgNAIA0EQCASIBVqIA1sIQ8gBCASbCAeaiEDQQAhCQNAIAkgD2ogC2whAiADIAkgDmxqIQFBACEAQQAhBgJAAkACQCALDgICAQALA0AgEyAAIAJqaiAMIAEgACAFbGpqLQAAOgAAIBMgAEEBciIKIAJqaiAMIAEgBSAKbGpqLQAAOgAAIABBAmohACAGQQJqIgYgCEcNAAsLIBRFDQAgEyAAIAJqaiAMIAEgACAFbGpqLQAAOgAACyAJQQFqIgkgDUcNAAsLIBJBAWoiEiARRw0ACwsgGEEBaiIYIB1HDQALDAELQQEhDiAHKAIAIgYoAgQhACABKAIEIQggASgCCCICIRVBASEFAkACQCAGKAIAIgpBAUYNAEEBIRUgAkEBIABBAUYiBRshDkEBIAIgBRshBSAKDQAgAiAIbCEVDAELIA4gAiAIbCICIAAbIQ4gAiAFIAAbIQULIAEgCkECdGooAgAiEUUNACABIABBAnRqKAIAIQ0gASAGKAIIQQJ0aigCACILQX5xIQggC0EBcSEUQQAhEgNAIA0EQCANIBJsIQ8gEiAVbCEDQQAhCQNAIAkgD2ogC2whAiAJIA5sIANqIQFBACEAQQAhBgJAAkACQCALDgICAQALA0AgEyAAIAJqaiAMIAEgACAFbGpqLQAAOgAAIBMgAEEBciIKIAJqaiAMIAEgBSAKbGpqLQAAOgAAIABBAmohACAGQQJqIgYgCEcNAAsLIBRFDQAgEyAAIAJqaiAMIAEgACAFbGpqLQAAOgAACyAJQQFqIgkgDUcNAAsLIBJBAWoiEiARRw0ACwsgFiAcaiIWIBlJDQALCyAHKAIAIgAEQCAHIAA2AgQgABC8AwsgBygCECIABEAgByAANgIUIAAQvAMLIAdB4ABqJAAMAQsgECADNgIEIBAgADYCAEHFECAQEBgLIBAoAhAiAgRAIBAgAjYCFCACEPcDCyAQKAIgIgIEQCAQIAI2AiQgAhD3AwsgEEEwaiQADwsQAAALHwAgACABIAIgAyAEIAUgBiAHIAggCSAKIAsgDBDVAQsMAEH8rQEoAgAQtAELNAEBfyAABEAgACgCABC0ASAAKAIEELQBIAAoAmgiAQRAIAAgATYCbCABEPcDCyAAEPcDCwtXAQJ/QYyuASgCACIABEADQCAAKAIAIQIgACgCDCIBBEAgACABNgIQIAEQ9wMLIAAQ9wMgAiIADQALC0GErgEoAgAhAEGErgFBADYCACAABEAgABD3AwsLVwECf0GgrgEoAgAiAARAA0AgACgCACECIAAoAgwiAQRAIAAgATYCECABEPcDCyAAEPcDIAIiAA0ACwtBmK4BKAIAIQBBmK4BQQA2AgAgAARAIAAQ9wMLC8MuAyF/An0BfiMAQbABayIYJAAgABALIQAgBBALIR4gFxALITggHigCACElIAAoAgAhLCAHBEAgBxALKAIAIS0LIDgoAgAhNiAYQQA2AqgBIBhCADcDoAECQEEAIBRBBEcgFRsNACA4KAIEIgBFBEBBACE2DAELIBhBoAFqIAAQuAEgGCgCoAEhNgtBACEAIBhBADYCnAEgDARAQQAhC0EAIQpBACEJQQAhCEEEIQALQQEhDAJ/IBNFBEAgESEoIBIMAQtBASEoIABBAXIhACARIQwgEiARbgshKUEAIBQgFEEDa0ECSRshHUMAAID/ITlDAACAfyE6AkACQAJAIBRBAWsOAgABAgtDAAAAACE5DAELQwAAAAAhOUMAAMBAIToLIBggOjgCmAEgGCA5OAKUASAYIAA2ApABIBggBzYCjAEgGCAENgKIASAYIB02AoQBIBggEjYCgAEgGCARNgJ8IBggKTYCeCAYICg2AnQgGCAMNgJwIBggDjYCbCAYIA02AmggGCAQNgJkIBggDzYCYCAYIAY2AlwgGCAFNgJYIBggCzYCVCAYIAo2AlAgGCAJNgJMIBggCDYCSAJAAkAgGEHIAGoQuQEiHUH8rQFGBEBBACEdIBhBADYCQCAYQgA3AzgCQCATDQAgHigCBCITBEAgGEE4aiATELgBIBgoAjghHQsgGEEIEIAEIhM2AiggGCATQQhqIh42AjAgEyAFIAZsIBFsrSASrUIghoQ3AgAgGCAeNgIsIBhBCBCABCITNgIYIBggE0EIaiIeNgIgIBNCATcCACAYIB42AhwgJSAYQShqIBhBGGogHRDhASAYKAI4ISUgGCgCGCITBEAgGCATNgIcIBMQ9wMLIBgoAigiE0UNACAYIBM2AiwgExD3AwsgGEGcAWohHCMAQSBrIh4kAEECIRMCQCA5vEH/////B3FBgICA/AdLDQAgOrwhHSA5IDpgDQAgHUH/////B3FBgICA/AdLDQBBtLYBKAIAIhMEQCAeQRhqIDkgOiATEREACyA6QwAAgH9bIRMgOUMAAAAAWyE0IDqMIDlbIR8CfyAFIAZsITJBBCEqQfS2ASEdA0AgHSAyIB0tAA1GDQEaIB1BEGohHSAqQQFrIioNAAtBAAsiHQRAIB5BEGogOSA6IB0oAggREQALIBMgNHEhNCATIB9xIRNBnLsBKAIAIh8EQCAeQQhqIDkgOiAfEREACwJ/IAUhKiAGITIgDCEfIAAhDCAeQRhqISEgHkEQaiEgIB5BCGohJiAdIQAgNCEGIBwhBUEBITUCQEHArwEoAgAiLkEBcUUNAEEFITUgLkECcUECRw0AQQIhNQJAICpFDQAgMkUNACAPRQ0AIBBFDQAgDUUNACAORQ0AIB9FDQAgKEUNACApRQ0AIB8gKGwgEUsNACAfIClsIBJLDQAgDEEBcSIcIChBAUdxDQAgCCAJciAKciALciI3QQAgDEEEcSIuGw0BQQYhNRDwASIZRQ0AIChBAUYgKUEBRnEhGyAPIBByIS8CfwJAAkACQAJAAkACQCAqIDJsIitBAUcNACAbRQ0AIC9BAUcNACA3DQAMAQsgGyAAQQBHcQ0BQbu2AS0AACEdIBkgKUG5tgEtAAAiABDqASAoQQFBurYBLQAAdCImEPwBIjQgK2xBAnRBBGpsIB9sIiAQ/QEiGzYCdCAbRQ0HICtBAUcgN0EAR3IgL0EBR3IhLyAbQQAgIBDUAxogGUHQAWogIUEIENIDGiATRQ0CQaS2AUGEtgFBpLYBKAIAIiAbIRsgIA0EIAYNAwwECyAZIB9BoLsBLQAAEPwBQQN0EP0BIhw2AnQgHEUNBiAfQaC7AS0AACAlIC0gHEEAQdkBEQkAIBlB0AFqICZBCBDSAxpBmLsBKAIAIRwgGUGhuwEtAAA6AJwCIBkgHDYCmAJBACEcQQkMBAsgGSAfIAAtAAwQ/AEiJiArQQJ0QQRqbCIbEP0BIiE2AnQgIUUNBSAhQQAgGxDUAxogGUHQAWogIEEIENIDGiAqIDIgHyAALQAMICUgLSAZKAJ0QQBBAEHaAUHbASAcGxEMACAAIRwgEwR/IABBBGogACAAKAIEGwUgHAsoAgAhHCAZIAAvAA07AZwCIBkgHDYCmAIgJkECdEEQaiEcQQMMAwtBhLYBIRsgBkUNAQtBlLYBQYS2AUGUtgEoAgAbIRsLQQEgHXQhE0G5tgEtAABBAGwhICAZKAJ0ISECfyAvRQRAIB8gKSAoIAAgJiATICUgLSAhICBBAEHcAREPAEG4tgEtAAAhHCAZIBs1AgAgGzUCCEIghoQ3ApgCQaECISBBoAIhIUGiAgwBCwJAIBwEQCAfICkgKyAAICYgJSAtICEgIEEAQd0BEQUADAELIB8gKSArICggACAmIBMgJSAtICEgIEEAQd4BEQgAC0G4tgEtAAAhHCAbKAIEISAgGygCDCEbIBlBADYCoAIgGSAbNgKcAiAZICA2ApgCQaUCISBBpAIhIUGmAgshGyAZICFqIBw6AAAgGSAgaiAAOgAAIBkgG2ogJjoAACA0QQJ0QRBqIRxBBUEEIC8bCyEhQQEgK0EBRyAuQQBHcSIuIDcbBEAgGSAcEP0BIiU2ArgBICVFDQIgJUEAIBwQ1AMaCyAZICE2ApQCIBlBGjYCkAIgGSASNgJsIBkgETYCVCAZICk2AjggGSAoNgI0IBkgHzYCLCAZIA42AiggGSANNgIkIBkgEDYCICAZIA82AhwgGSAyNgIYIBkgKjYCFCAZIAs2AhAgGSAKNgIMIBkgCTYCCCAZIAg2AgQgGUEANgKABCAZIAxBe3FBBEEAIC4bcjYCyAEgBSAZNgIAQQAMAgtBACEZCyAZEJUCIDULIRMLIB5BIGokACATIhEEQCAYIBE2AhBB5x8gGEEQahAYCyAYKAI8IQUgGCgCOCEMIBhCADcDOCAYKAJAIQYgGEEANgJAIBgoApwBIQ1B/K0BKAIAIhFFBEBB/K0BIRFB/K0BIQgMAgtB/K0BIQgDQAJAAkAgGCgCSCIAIBEoAhAiEkkNACARQRBqIQkCQCAAIBJLDQAgGCgCTCIKIBEoAhQiC0kNASAKIAtLDQAgGCgCUCIKIBEoAhgiC0kNASAKIAtLDQAgGEHIAGogCRC6AQ0BIAkoAgAhEiAYKAJIIQALAkAgACASSw0AIAAgEkkNBSARKAIUIgAgGCgCTCISSQ0AIAAgEksNBSARKAIYIgAgGCgCUCISSQ0AIAAgEksNBSAJIBhByABqELoBRQ0FCyARQQRqIQggESgCBCIARQ0EIAghEQwBCyARKAIAIgANACARIQgMAwsgESEIIAAhEQwACwALIBggHSgCZCIRNgKcAQwBCwJAIAgoAgBFBEBB9AAQgAQiAEEQaiAYQcgAakHUABDSAxogACAGNgJwIAAgBTYCbCAAIAw2AmggACANNgJkIAAgETYCCCAAQgA3AgAgCCAANgIAQfitASgCACgCACIRBEBB+K0BIBE2AgAgCCgCACEAC0H8rQEoAgAgABAlQYCuAUGArgEoAgBBAWo2AgAMAQsgDEUNACAMEPcDCyAEIBhByABqQYSuARC7ASAHBEAgByAYQcgAakGYrgEQuwELQaitAUGorQEoAgBBAWo2AgAgGCgCOCIRBEAgGCARNgI8IBEQ9wMLIBgoApwBIRELQaytASgCACEAIBEoApACQRpGBH8CfyADIQUgNiEHIAAQrwMhM0EAIS5BACEtQQAhHCARQQA2AoAEQQEhAwJAAkBBwK8BKAIAIgZBAXFFDQBBBSEDIAZBAnFBAkcNAEECIQMgAkUNACAFRQ0AIBEgAQR/IBEgLDYCWCARIAU2AlAgESACNgJMIBEgATYCAAJAIBEtAMgBQQRxBEAgAiARKAIcIiMQ7AEhAyARIAUgESgCICIGEOwBIgBBAWsgBmwgBWsgESgCKCIEIBEoAhgiGkEBa2xqQQFqIidBAXYiITYCECARICMgA0EBa2wgAmsgESgCJCARKAIUIiNBAWtsakEBaiIiQQF2IiQ2AgQgESAiICRrNgIMIBEgJyAhazYCCAwBCyARKAIMIBEoAgQgAmpqIBEoAhQiIyARKAIkIBEoAhwQ/gEhAyARKAIIIBEoAhAgBWpqIBEoAhgiGiARKAIoIgQgESgCICIGEP4BIQALIBEgBzYCcCARIAA2AmggESADNgJkAkACQAJAAkACQCARKAKUAkEEaw4GAAEHBwcDAgsgESgCLCEGIBEoAjQiIyARLQCiAhD8AUECdEEEaiEnIBEoApgCIQQgES0AoQIhBSARLQCgAiEaIBEoAjghAiABIANsIABsIgBBAUYEQEEBIBogESgCnAIiAxshGiADIAQgAxshBAsgESgCVCEDIBEoAnQhASARIAQ2AqwDIBFBAjYCqAMgESACQQJ0NgKkAyARIAVBAnQ2AqADIBEgBzYCmAMgESAnNgKQAyARIAE2AowDIBEgA0ECdDYCiAMgESAsNgKEAyARICNBAnQ2AoADIBEgAiAFEOoBICdsNgKUAyARIBEpA9ABNwOwAyARIBEpA9gBNwO4AyARIBEpA+ABNwPAAyARIBEoAmxBAnQ2ApwDIBpB/wFxIQEgAiEDAkAgM0ECSQ0AIAIgACABEOsBIAMgBmxsIDNBBWwQ6wEiLE0NACACIAIgBSAsbBDrASAFbBDuASEDCyARAn8gBkEBRgRAIBFB3wE2AqwCIAAhBkEFDAELIBFB4AE2AqwCIBEgAjYCuAIgACECQQcLNgKoAiARIAM2AswCIBEgATYCyAIgESACNgK0AiARIAY2ArACDAMLIBogI2whBiARKAKYAiEnIBFBpQJqISMgES0ApAIhGiAAIANsIgBBAUYEQEEBIBogESgCnAIiAxshGiADICcgAxshJwsgIy0AACEjIBEoAiwhBCAGQQJ0ISEgACAaQf8BcSIaEOoBIQMCQCACIBEoApwBRgRAIBEoAqABIAVGDQELQQYgESgCYCADICFsEO8BIgNFDQcaIBEgLDYCpAEgESADNgJgIBEgBTYCoAEgESACNgKcASARKAJoIiAgESgCZGwiAyAabiIiIAMgGiAibEdqIBpsITIgESgCFCE3IBEoAhghJCARKAJUISIgESgCECEoIBEoAgQhEyARKAIoITUgESgCJCESIBEoAiAhECARKAIcIQ8gESgCUCEmIBEoAkwhDiARKAK4ASEwIBEoAlghHyARKAJgITFCASE7ICBBAUcEQEEfICBBAWtnayIHQf8BcSEcQQIgB3QgIGutQiCGICCtgEIBfEL/////D4MhO0EBIS0LIDIEQCAkIDdsIQ0gIkECdCEdIANBAWshJSAkQX5xIQwgJEEBcSELICRBfHEhCiAkQQNxITQgJEEBayEpA0AgGgRAIA0gLmwhCUEAISsDQCA3BEAgJSArIC5qIgcgByAlSxsiByA7IAetfkIgiKciA2sgLXYgA2ogHHYiAyAPbCATayEIIAcgAyAgbGsgEGwgKGshKiAJICtqISJBACEvA0AgJCAvbCEDAkAgDiAIIBIgL2xqIgdNBEAgJEUNAUEAIRlBACEHQQAhGyApQQNPBEADQCAxICIgAyAHaiAabGpBAnRqIDA2AgAgMSAiIAdBAXIgA2ogGmxqQQJ0aiAwNgIAIDEgIiAHQQJyIANqIBpsakECdGogMDYCACAxICIgB0EDciADaiAabGpBAnRqIDA2AgAgB0EEaiEHIBtBBGoiGyAKRw0ACwsgNEUNAQNAIDEgIiADIAdqIBpsakECdGogMDYCACAHQQFqIQcgGUEBaiIZIDRHDQALDAELICRFDQAgByAmbCEZQQAhB0EAIRsgKQRAA0AgMSAiIAMgB2ogGmxqQQJ0aiAqIAcgNWxqIh4gGWogHWwgH2ogMCAeICZJGzYCACAxICIgB0EBciIeIANqIBpsakECdGogKiAeIDVsaiIeIBlqIB1sIB9qIDAgHiAmSRs2AgAgB0ECaiEHIBtBAmoiGyAMRw0ACwsgC0UNACAxICIgAyAHaiAabGpBAnRqICogByA1bGoiByAZaiAdbCAfaiAwIAcgJkkbNgIACyAvQQFqIi8gN0cNAAsLICtBAWoiKyAaRw0ACwsgGiAuaiIuIDJJDQALCyARKAJwIQcLIBEtAKYCITAgESgCNCEiIBEoAmAhMSARKAKkASEZIBEoArgBIRsgESgCdCEeIBEoAmwhJCARKAI4IQMgESAnNgLEAyARQQI2AsADIBEgA0ECdDYCtAMgESAiQQJ0Iic2AqwDIBEgI0ECdDYCqAMgESAkQQJ0NgKkAyARIAc2AqADIBEgHjYCnAMgESAbNgKYAyARICwgGWs2ApQDIBEgMTYCkAMgESAnNgKIAyARIBogIWw2AoQDIBEgBjYCgAMgESAAICRsQQJ0NgK8AyARICIgMBD8ASAGbEECdEEEaiIGNgKMAyARIAMgIxDqASAGbDYCsAMgESARKAJUIAIgBWxsQQJ0NgK4AyARIBEpA+ABNwPYAyARIBEpA9gBNwPQAyARIBEpA9ABNwPIAwJ/IAMgM0ECSQ0AGiADIAAgGhDrASABIARsIANsbCAzQQVsEOsBIgYgA08NABogAyADIAYgI2wQ6wEgI2wQ7gELIQICQCAEQQFGBEAgEQJ/IAFBAk8EQCARQeEBNgKsAiARIAM2ArgCQQcMAQsgEUHiATYCrAIgACEBIAMhAEEFCzYCqAIgESAANgK0AiARIAE2ArACDAELIBECfyABQQJPBEAgEUHjATYCrAIgESADNgK8AkEJDAELIBFB5AE2AqwCIAQhASAAIQQgAyEAQQcLNgKoAiARIAA2ArgCIBEgBDYCtAIgESABNgKwAgsgESACNgLMAiARIBo2AsgCDAILIAYgGiAEQQFGGyIzIABBAWtsIBpqICNsIQYCfwJAIBEoApwBIAJHDQAgESgCoAEgBUcNACARKAKkAQwBC0EGIBEoAmAgAyAGbEECdBDvASIHRQ0GGiARIAc2AmAgESAGIDMQlwIgESAFNgKgASARIAI2ApwBIBEgLDYCpAEgESgCcCEHICwLIScgESARKAK4ATYCrAMgESARKAIsIgQ2AqgDIBEgADYCpAMgESAHNgKYAyARIBEoAnQ2ApQDIBEgLCAnazYCjAMgESAGQQJ0NgKIAyARIBEoAmA2AoADIBEgESgCmAI2AswDIBEgIyAzbEECdDYChAMgESARKAJsIgYgBGtBAnQ2ArADIBEgACAGbCIAQQJ0NgKgAyARIBEoAlQgAiAFbGxBAnQ2ApADIBEgACADbEECdDYCnAMgESADNgK0AiARIAE2ArACIBFB5QE2AqwCIBFBAzYCqAIgESARKQLgATcCxAMgESARKQLYATcCvAMgESARKQLQATcCtAMMAQsgESAHNgKQAyARIBEoAnQ2AowDIBEgLDYChAMgESARKQPQATcCnAMgESARKAKYAjYCmAMgESARKAJsQQJ0NgKUAyARIBEoAlRBAnQ2AogDIBEgESgCLEECdDYCgAMCfyABIANsIABsIgMgM0ECSQ0AGiADIAMgM0EFbBDrASICIANPDQAaIAMgAyACIBEtAJwCIgBsEOsBIABsEO4BCyEAIBFBAjYCqAIgESAANgLIAiARIAM2ArACIBFB5gE2AqwCC0EBBUECCzYCgARBACEDCyADDAELAAsFQQILIhEEQCAYIBE2AgBB+R4gGBAYCyAYKAKcAUGsrQEoAgAQrwIgFEEDRgRAIDYgOCgCBCAVIBcQ3QELAkAgFEEERgRAIDYgOCgCBCAWIBcQ2wEMAQsCQAJAIBRBBWsOAgABAgsgNiA4KAIEIBcQ4AEMAQsgNiA4KAIEIBcQ2gELIBgoAqABIhEEQCAYIBE2AqQBIBEQ9wMLIBhBsAFqJAAL+gEBBn8gASAAKAIIIgIgACgCBCIDa0ECdU0EQCAAIAEEfyADQQAgAUECdCIBENQDIAFqBSADCzYCBA8LAkAgAyAAKAIAIgRrIgZBAnUiBSABaiIHQYCAgIAETw0AQQAhAyAFQQJ0An8gByACIARrIgJBAXUiBSAFIAdJG0H/////AyACQfz///8HSRsiAgRAIAJBgICAgARPDQIgAkECdBCABCEDCyADC2pBACABQQJ0IgEQ1AMgAWohASADIAJBAnRqIQIgBkEASgRAIAMgBCAGENIDGgsgACACNgIIIAAgATYCBCAAIAM2AgAgBARAIAQQ9wMLDwsQAAALkgIBBX8jAEEQayIFJAACQAJAQfytASgCACIBRQ0AQfytASEDA0ACQAJAIAEoAhAiAiAAKAIAIgRJDQACQCACIARLDQAgASgCFCICIAAoAgQiBEkNASACIARLDQAgASgCGCICIAAoAggiBEkNASACIARLDQAgAUEQaiAAELoBRQ0AIAFBBGohAQwCCyABIQMMAQsgAUEEaiEBCyABKAIAIgENAAsgA0H8rQFGDQAgACgCACIBIAMoAhAiAkkNACABIAJLDQEgACgCBCIBIAMoAhQiAkkNACABIAJLDQEgACgCCCIBIAMoAhgiAkkNACABIAJLDQEgACADQRBqELoBRQ0BC0H8rQEhAwsgBUEQaiQAIAMLowQCBH8CfSMAQRBrIgUkAEEBIQQCQCAAKAIMIgIgASgCDCIDSQ0AIAIgA0sEQEEAIQQMAQsgACgCECICIAEoAhAiA0kNACACIANLBEBBACEEDAELIAAoAhQiAiABKAIUIgNJDQAgAiADSwRAQQAhBAwBCyAAKAIYIgIgASgCGCIDSQ0AIAIgA0sEQEEAIQQMAQsgACgCHCICIAEoAhwiA0kNACACIANLBEBBACEEDAELIAAoAiAiAiABKAIgIgNJDQAgAiADSwRAQQAhBAwBCyAAKAIkIgIgASgCJCIDSQ0AIAIgA0sEQEEAIQQMAQsgACgCKCICIAEoAigiA0kNAEEAIQQgAiADSw0AAn9BASEEAkAgACgCLCICIAEoAiwiA0kNAEEAIAIgA0sNARogACgCMCICIAEoAjAiA0kNAEEAIAIgA0sNARogACgCNCICIAEoAjQiA0kNAEEAIAIgA0sNARogACgCOCICIAEoAjgiA0kNAEEAIAIgA0sNARogACgCPCICIAEoAjwiA0kNAEEAIAIgA0sNARogACgCQCICIAEoAkAiA0kNAEEAIAIgA0sNARogACgCRCICIAEoAkQiA0kNAEEAIAIgA0sNARogACgCSCICIAEoAkgiA0kNAEEAIAIgA0sNARogACoCTCIGIAEqAkwiB10NAEEAIQQgBiAHXg0AIAAqAlAgASoCUF0hBAsgBAshBAsgBUEQaiQAIAQLvAUBCX8jAEEgayIGJAAgBiAANgIUAkACQAJAAkAgAigCBCIERQ0AIAIoAgAiCgJ/IARBAWsgAHEgBGkiCUEBTQ0AGiAAIAAgBEkNABogACAEcAsiB0ECdGooAgAiA0UNACADKAIAIgNFDQAgBEEBayEIIAlBAUshCwNAAkAgACADKAIEIgVHBEACQCALRQRAIAUgCHEhBQwBCyAEIAVLDQAgBSAEcCEFCyAFIAdGDQEMAwsgAygCCCAARg0DCyADKAIAIgMNAAsLIAZB1AAQgAQiADYCCCAGIABB1ABqIgM2AhAgACABQdQAENIDGiAGIAM2AgwgBkEYaiACIAZBFGogBkEUaiAGQQhqELwBIAYoAhRBxQAQDCAGKAIIIgBFDQEgBiAANgIMIAAQ9wMMAQsgCgJ/IAAgCHEgCUEBTQ0AGiAAIAAgBEkNABogACAEcAsiAkECdGooAgAiA0UNASADKAIAIgNFDQEgCUEBSyEHA0ACQAJAIAAgAygCBCIFRwRAAkAgB0UEQCAFIAhxIQUMAQsgBCAFSw0AIAUgBHAhBQsgAiAFRg0BDAULIAMoAgggAEYNAQsgAygCACIDDQEMAwsLIAMoAhAiBSADKAIUIgRJBEAgAyAFIAFB1AAQ0gNB1ABqNgIQDAELIAUgAygCDCIAayIFQdQAbSIIQQFqIgJBxOGwGE8NASACIAQgAGtB1ABtIgRBAXQiByACIAdLG0HD4bAYIARB4bCYDEkbIgQEfyAEQcThsBhPDQIgBEHUAGwQgAQFQQALIgIgCEHUAGxqIAFB1AAQ0gMiCCAFQax/bUHUAGxqIQcgAiAEQdQAbGohBCAIQdQAaiECIAVBAEoEQCAHIAAgBRDSAxoLIAMgBDYCFCADIAI2AhAgAyAHNgIMIABFDQAgABD3AwsgBkEgaiQADwsQAAALxAQCBn8CfSACKAIAIQYgAAJ/AkAgASgCBCIFRQ0AIAEoAgACfyAFQQFrIAZxIAVpIgdBAU0NABogBiAFIAZLDQAaIAYgBXALIghBAnRqKAIAIgJFDQAgBUEBayEJIAdBAUshCgNAIAIoAgAiAkUNASAGIAIoAgQiB0cEQAJAIApFBEAgByAJcSEHDAELIAUgB0sNACAHIAVwIQcLIAcgCEcNAgsgAigCCCAGRw0AC0EADAELQRgQgAQiAiADKAIANgIIIAIgBCgCADYCDCACIAQoAgQ2AhAgAiAEKAIINgIUIARBADYCCCAEQgA3AgAgAiAGNgIEIAJBADYCAAJAQQAgBSABKAIMQQFqsyIMIAEqAhAiCyAFs5ReGw0AIAUgBUEBa3FBAEcgBUEDSXIgBUEBdHIhByABAn8gDCALlY0iC0MAAIBPXSALQwAAAABgcQRAIAupDAELQQALIgUgByAFIAdLGxAVIAEoAgQiBSAFQQFrcUUEQCAFQQFrIAZxIQgMAQsgBSAGSwRAIAYhCAwBCyAGIAVwIQgLAkAgASgCACAIQQJ0aiIHKAIAIgZFBEAgAiABKAIINgIAIAEgAjYCCCAHIAFBCGo2AgAgAigCACIGRQ0BIAYoAgQhBgJAIAUgBUEBayIHcUUEQCAGIAdxIQYMAQsgBSAGSw0AIAYgBXAhBgsgASgCACAGQQJ0aiACNgIADAELIAIgBigCADYCACAGIAI2AgALIAEgASgCDEEBajYCDEEBCzoABCAAIAI2AgALFAAgAEGErgEQvgEgAEGYrgEQvgEL1AMBB38jAEEQayIGJAAgBiAANgIMAkAgASgCBCIERQ0AAkAgBGkiBUEBTQRAIARBAWsgAHEhAwwBCyAEIAAiA0sNACAAIARwIQMLIAEoAgAgA0ECdGooAgAiAkUNACACKAIAIgJFDQAgBEEBayEIIAVBAUshBwNAAkACQCAAIAIoAgQiBUcEQAJAIAdFBEAgBSAIcSEFDAELIAQgBUsNACAFIARwIQULIAMgBUYNAQwECyACKAIIIABGDQELIAIoAgAiAg0BDAILCyACKAIMIgQgAigCECIHRwRAA0ACQCAEELkBIgJB/K0BRg0AIAIoAmQQlQJBqK0BQaitASgCAEEBazYCACAEELkBIgNB/K0BRg0AAkAgAygCBCICRQRAIAMoAggiBSgCACADRg0BIANBCGohAANAIAAoAgAiAkEIaiEAIAIgAigCCCIFKAIARw0ACwwBCwNAIAIiBSgCACICDQALCyADQfitASgCAEYEQEH4rQEgBTYCAAtBgK4BQYCuASgCAEEBazYCAEH8rQEoAgAgAxC/ASADKAJoIgIEQCADIAI2AmwgAhD3AwsgAxD3AwsgBEHUAGoiBCAHRw0ACwsgASAGQQxqEBMLIAZBEGokAAvdCQEGfwJ/AkACQCABIgIoAgAiBARAIAEoAgQiA0UNAQNAIAMiAigCACIDDQALCyACKAIEIgQNAUEAIQRBAQwCCwsgBCACKAIINgIIQQALIQYCfwJ/IAIgAigCCCIDKAIARgRAIAMgBDYCACAAIAJGBEAgBCEAQQAMAwsgAigCCEEEagwBCyADIAQ2AgQgAigCCAsoAgALIQMgAi0ADCEHIAEgAkcEQCACIAEoAggiBTYCCCAFIAEoAggoAgAgAUdBAnRqIAI2AgAgAiABKAIAIgU2AgAgBSACNgIIIAIgASgCBCIFNgIEIAUEQCAFIAI2AggLIAIgAS0ADDoADCACIAAgACABRhshAAsCQCAHRQ0AIABFDQAgBgRAA0AgAy0ADCECAkAgAyADKAIIIgEoAgBHBEAgAkH/AXFFBEAgA0EBOgAMIAFBADoADCADKAIIIgIgAigCBCIBKAIAIgQ2AgQgBARAIAQgAjYCCAsgASACKAIINgIIIAIoAggiBCAEKAIAIAJHQQJ0aiABNgIAIAEgAjYCACACIAE2AgggAyAAIAAgAygCACICRhshACACKAIEIQMLAkACQAJAAkAgAygCACICBEAgAi0ADEUNAQsgAygCBCIBBEAgAS0ADEUNAgsgA0EAOgAMAkAgACADKAIIIgNGBEAgACEDDAELIAMtAAwNBgsgA0EBOgAMDwsgAygCBCIBRQ0BCyABLQAMDQAgAyECDAELIAJBAToADCADQQA6AAwgAyADKAIAIgIoAgQiADYCACAABEAgACADNgIICyACIAMoAgg2AgggAygCCCIAIAAoAgAgA0dBAnRqIAI2AgAgAiADNgIEIAMgAjYCCAsgAiACKAIIIgMtAAw6AAwgA0EBOgAMIAIoAgRBAToADCACKAIIIgMgAygCBCICKAIAIgA2AgQgAARAIAAgAzYCCAsgAiADKAIINgIIIAMoAggiACAAKAIAIANHQQJ0aiACNgIAIAIgAzYCACADIAI2AggPCyACQf8BcUUEQCADQQE6AAwgAUEAOgAMIAMoAggiAiACKAIAIgEoAgQiBDYCACAEBEAgBCACNgIICyABIAIoAgg2AgggAigCCCIEIAQoAgAgAkdBAnRqIAE2AgAgASACNgIEIAIgATYCCCADIAAgACADKAIEIgJGGyEAIAIoAgAhAwsCQAJAIAMoAgAiAkUNACACLQAMDQAgAyECDAELAkAgAygCBCIBBEAgAS0ADEUNAQsgA0EAOgAMIAMoAggiAy0ADEEAIAAgA0cbDQIgA0EBOgAMDwsgAgR/IAItAAxFBEAgAyECDAILIAMoAgQFIAELQQE6AAwgA0EAOgAMIAMgAygCBCICKAIAIgA2AgQgAARAIAAgAzYCCAsgAiADKAIINgIIIAMoAggiACAAKAIAIANHQQJ0aiACNgIAIAIgAzYCACADIAI2AggLIAIgAigCCCIDLQAMOgAMIANBAToADCACKAIAQQE6AAwgAigCCCIDIAMoAgAiAigCBCIANgIAIAAEQCAAIAM2AggLIAIgAygCCDYCCCADKAIIIgAgACgCACADR0ECdGogAjYCACACIAM2AgQgAyACNgIIDwsgAygCCCICIAIoAgAgA0ZBAnRqKAIAIQMMAAsACyAEQQE6AAwLC/MiAhF/DX0jAEGAAWsiByQAIAAQCyEAIAEQCygCACEMIAAoAgAhFSAAKAIEIQAgB0IANwNYIAdCADcDUCAHQgA3A0ggAEEETwRAIABBAnYhCkEAIQADQCAEIAwgAEECdGoqAgAiGV0EQCAHKAJQIAcoAkwiCGsiAUECdUHVAmxBAWtBACABGyAHKAJcIAcoAlhqIgFGBEAgB0HIAGoQwQEgBygCTCEIIAcoAlggBygCXGohAQsgCCABQdUCbiIJQQJ0aigCACABIAlB1QJsa0EMbGoiAUEANgIIIAEgGTgCBCABIAA2AgAgByAHKAJcQQFqIg02AlwgBygCTCIBIAcoAlgiCEHVAm4iC0ECdGohCSAHAn8gASAHKAJQRgRAIAEgCCANakHVAm5BAnRqIQFBACENQQAMAQsgASAIIA1qIg1B1QJuIg5BAnRqIgEoAgAgDSAOQdUCbGtBDGxqIQ0gCSgCACAIIAtB1QJsa0EMbGoLNgJsIAcgCTYCaCAHIA02AjwgByABNgI4IAcgBykDaDcDICAHIAcpAzg3AxggB0EgaiAHQRhqEMIBCyAAQQFqIgAgCkcNAAsLQQAhCSAHQQA2AkAgB0IANwM4IAdBADYCMCAHQgA3AygCQAJAIAJFBEBBACEKDAELQQAhCiAHKAJcIgtFDQBDAAAAvyAFlUMAAAAAIAVDAAAAAF4bISMDQCAHKAJMIgEgBygCWCIIQdUCbiIAQQJ0aiIJKAIAIAggAEHVAmxrIgpBDGxqIgAoAgghDCAAKgIEIRsgACgCACENAkAgBygCUCABRg0AIAEgCCALaiIIQdUCbiILQQJ0aiIOKAIAIAggC0HVAmxrIgFBDGxqIgggAEYNACABIAprIA4gCWtBAnVB1QJsaiIKQQJIDQAgAEEIaiELIAFFBEAgDkEEaygCAEH8H2ohCAsgB0HwAGoiDiALKAIANgIAIAcgACkCADcDaCALIAhBDGsiAUEIaiIIKAIANgIAIAAgASkCADcCACAIIA4oAgA2AgAgASAHKQNoNwIAIApBAWsiDkECSQ0AIAAgCSgCAGsiAUEMbSEIAn8gAUF1TgRAIAkgCEEBaiIBQdUCbiIIQQJ0aiIPKAIAIhMgASAIQdUCbGtBDGxqDAELQdMCIAhrIgFB1QJuIghB1QJsIAFrQQxsIAkgCEECdGsiDygCACITakHwH2oLIQEgAEEEaiERQQEhCAJAIA5BA0kNACABIBNrIhJBDG0hECABKgIEIRkgASgCACEUIBkCfyASQXVOBEAgDyAQQQFqIhJB1QJuIhBBAnRqKAIAIBIgEEHVAmxrQQxsagwBC0HTAiAQayISQdUCbiIQQdUCbCASa0EMbCAPIBBBAnRrKAIAakHwH2oLIhIqAgQiBV1FBEAgBSAZXA0BIBQgEigCAEwNAQtBAiEIIAFBDGoiASATa0H8H0cNACAPKAIEIQELIAEqAgQiBSARKgIAIhldDQAgACgCACEUIAUgGVsEQCABKAIAIBRKDQELIApBA2tBAXYhEiALKAIAIRYgACELA0ACQCALIAEiCikCADcCACALIAEoAgg2AgggCCASSg0AAn8gCEEBdCILQQFyIgggACAJKAIAa0EMbWoiAUEASgRAIAkgAUHVAm4iD0ECdGoiEygCACIRIAEgD0HVAmxrQQxsagwBC0HUAiABayIBQdUCbiIRQdUCbCABa0EMbCAJIBFBAnRrIhMoAgAiEWpB8B9qCyEBAkAgC0ECaiILIA5ODQAgASARayIPQQxtIRAgASoCBCEFIAEoAgAhFyAFAn8gD0F1TgRAIBMgEEEBaiIPQdUCbiIQQQJ0aigCACAPIBBB1QJsa0EMbGoMAQtB0wIgEGsiD0HVAm4iEEHVAmwgD2tBDGwgEyAQQQJ0aygCAGpB8B9qCyIPKgIEIhhdRQRAIAUgGFwNASAXIA8oAgBMDQELIAFBDGoiASARa0H8H0YEQCATKAIEIQELIAshCAsgASoCBCIFIBldDQAgCiELIAUgGVwNASABKAIAIBRMDQELCyAKIBY2AgggCiAZOAIEIAogFDYCAAsgByAHKAJcIgBBAWs2AlwgBygCUCILIAcoAkxrIgFBAnVB1QJsQQFrQQAgARsgACAHKAJYamtBAWpBqgVPBEAgC0EEaygCABD3AyAHIAcoAlBBBGsiCzYCUAsgBygCOCEJIAcoAjwhCiAEIBteDQEgFSANQQR0aiEAIBshGiAKIAlrIg5BAnUiESEIAkADQCAMIAhBAWsiCEwEQEMAAAAAIRkCQCAAKgIIIgUgACoCACIYIAUgGF4bIhwgBSAYIAUgGF0bIh2TIAAqAgwiBSAAKgIEIhggBSAYXhsiHiAFIBggBSAYXRsiH5OUIiRDAAAAAF8NACAVIAkgCEECdGooAgBBBHRqIgEqAggiBSABKgIAIhggBSAYXhsiICAFIBggBSAYXRsiIZMgASoCDCIFIAEqAgQiGCAFIBheGyIiIAUgGCAFIBhdGyIFk5QiGEMAAAAAXw0AICAgHCAcICBeGyAhIB0gHSAhXRuTQwAAAACXICIgHiAeICJeGyAFIB8gBSAfXhuTQwAAAACXlCIZICQgGJIgGZOVIRkLIAMgGV8NAiAaIBkgIyAZlJQQ3QNDAAAAACADIBlgG5QiGiAEX0UNAQsLIBogG1sEQAJAIAcoAkAgCkcEQCAKIA02AgAgByAKQQRqNgI8DAELIBFBAWoiAEGAgICABE8NBSAAIA5BAXUiASAAIAFLG0H/////AyAOQfz///8HSRsiAQR/IAFBgICAgARPDQYgAUECdBCABAVBAAsiACARQQJ0aiIIIA02AgAgACABQQJ0aiEBIAhBBGohCCAOQQBKBEAgACAJIA4Q0gMaCyAHIAE2AkAgByAINgI8IAcgADYCOCAJRQ0AIAkQ9wMLIAcoAiwiACAHKAIwRwRAIAAgGjgCACAHIABBBGo2AiwMAgsgACAHKAIoIghrIgBBAnUiDEEBaiIBQYCAgIAETw0EIAEgAEEBdSIJIAEgCUsbQf////8DIABB/P///wdJGyIJBH8gCUGAgICABE8NBSAJQQJ0EIAEBUEACyIBIAxBAnRqIgwgGjgCACABIAlBAnRqIQkgDEEEaiEMIABBAEoEQCABIAggABDSAxoLIAcgCTYCMCAHIAw2AiwgByABNgIoIAhFDQEgCBD3AwwBCyAEIBpdRQ0AIAsgBygCTCIBayIAQQJ1QdUCbEEBa0EAIAAbIAcoAlwgBygCWGoiAEYEQCAHQcgAahDBASAHKAJMIQEgBygCWCAHKAJcaiEACyABIABB1QJuIghBAnRqKAIAIAAgCEHVAmxrQQxsaiIAIBE2AgggACAaOAIEIAAgDTYCACAHIAcoAlxBAWoiCTYCXCAHKAJMIgAgBygCWCIIQdUCbiIMQQJ0aiEBIAcCfyAAIAcoAlBGBEAgACAIIAlqQdUCbkECdGohAEEAIQlBAAwBCyAAIAggCWoiCUHVAm4iCkECdGoiACgCACAJIApB1QJsa0EMbGohCSABKAIAIAggDEHVAmxrQQxsags2AmwgByABNgJoIAcgCTYCfCAHIAA2AnggByAHKQNoNwMQIAcgBykDeDcDCCAHQRBqIAdBCGoQwgELIAcoAjwiCiAHKAI4IglrQQJ1IAJPDQEgBygCXCILDQALCyAKIAlrIgBBAnUhASAGBH8gB0EANgJoAkAgASACSQRAIAdB6ABqIQhBACEMQQAhDSACIAFrIgogB0E4aiIOKAIIIgAgDigCBCILa0ECdU0EQAJAIApFDQAgCkECdCEMIApBAWtB/////wNxIQYgCyEAIApBB3EiCgRAA0AgACAIKAIANgIAIABBBGohACANQQFqIg0gCkcNAAsLIAsgDGohCyAGQQdJDQADQCAAIAgoAgA2AgAgACAIKAIANgIEIAAgCCgCADYCCCAAIAgoAgA2AgwgACAIKAIANgIQIAAgCCgCADYCFCAAIAgoAgA2AhggACAIKAIANgIcIABBIGoiACALRw0ACwsgDiALNgIEDAILAkAgCyAOKAIAIglrQQJ1Ig8gCmoiBkGAgICABE8NACAGIAAgCWsiAEEBdSIJIAYgCUsbQf////8DIABB/P///wdJGyIJBEAgCUGAgICABE8NASAJQQJ0EIAEIQwLIApBAnQhECAKQQFrQf////8DcSERIAwgD0ECdGoiBiEAIApBB3EiCgRAIAYhAANAIAAgCCgCADYCACAAQQRqIQAgDUEBaiINIApHDQALCyAGIBBqIQ0gEUEHTwRAA0AgACAIKAIANgIAIAAgCCgCADYCBCAAIAgoAgA2AgggACAIKAIANgIMIAAgCCgCADYCECAAIAgoAgA2AhQgACAIKAIANgIYIAAgCCgCADYCHCAAQSBqIgAgDUcNAAsLIAwgCUECdGohDCAGIAsgDigCACIIayIAayEKIABBAEoEQCAKIAggABDSAxoLIA4gDDYCCCAOIA02AgQgDiAKNgIAIAgEQCAIELwDCwwCCxAAAAsgASACTQ0AIAcgCSACQQJ0ajYCPAsgB0EANgJoAkAgAiAHKAIsIAcoAigiCGtBAnUiAEsEQCAHQegAaiEIQQAhCUEAIQwgAiAAayICIAdBKGoiDSgCCCIGIA0oAgQiC2tBAnVNBEACQCACRQ0AIAJBAnQhCSACQQFrQf////8DcSEAIAshBiACQQdxIgIEQANAIAYgCCoCADgCACAGQQRqIQYgDEEBaiIMIAJHDQALCyAJIAtqIQsgAEEHSQ0AA0AgBiAIKgIAOAIAIAYgCCoCADgCBCAGIAgqAgA4AgggBiAIKgIAOAIMIAYgCCoCADgCECAGIAgqAgA4AhQgBiAIKgIAOAIYIAYgCCoCADgCHCAGQSBqIgYgC0cNAAsLIA0gCzYCBAwCCwJAIAsgDSgCACIKa0ECdSIOIAJqIgBBgICAgARPDQAgACAGIAprIgZBAXUiCiAAIApLG0H/////AyAGQfz///8HSRsiCgRAIApBgICAgARPDQEgCkECdBCABCEJCyACQQJ0IQ8gAkEBa0H/////A3EhECAJIA5BAnRqIgAhBiACQQdxIgIEQCAAIQYDQCAGIAgqAgA4AgAgBkEEaiEGIAxBAWoiDCACRw0ACwsgACAPaiEMIBBBB08EQANAIAYgCCoCADgCACAGIAgqAgA4AgQgBiAIKgIAOAIIIAYgCCoCADgCDCAGIAgqAgA4AhAgBiAIKgIAOAIUIAYgCCoCADgCGCAGIAgqAgA4AhwgBkEgaiIGIAxHDQALCyAJIApBAnRqIQkgACALIA0oAgAiCGsiBmshAiAGQQBKBEAgAiAIIAYQ0gMaCyANIAk2AgggDSAMNgIEIA0gAjYCACAIBEAgCBC8AwsMAgsQAAALIAAgAk0NACAHIAggAkECdGo2AiwLIAcoAjwgBygCOCIJayIAQQJ1BSABCyEIIAAQ9QMgCSAAENIDIRUgBygCLCAHKAIoIgBrIgwQ9QMgACAMENIDIQpBBBD1AyINIAE2AgBBEBCABCIMIA02AgwgDCAKNgIIIAwgCDYCBCAMIBU2AgAgAARAIAcgADYCLCAAEPcDIAcoAjghCQsgCQRAIAcgCTYCPCAJEPcDCyAHQQA2AlwgBygCUCIBIAcoAkwiAGsiCEEJTwRAA0AgACgCABD3AyAHIAcoAkxBBGoiADYCTCAHKAJQIgEgAGsiCEEISw0ACwtBqgEhCQJAAkACQCAIQQJ2QQFrDgIBAAILQdUCIQkLIAcgCTYCWAsCQCAAIAFGDQADQCAAKAIAEPcDIABBBGoiACABRw0ACyAHKAJQIgAgBygCTCIBRg0AIAcgACAAIAFrQQRrQQJ2QX9zQQJ0ajYCUAsgBygCSCIABEAgABD3AwsgB0GAAWokACAMDwsQAAALzRMBC38CQAJAIAAoAhAiAkHVAk8EQCAAIAJB1QJrNgIQIAAoAgQiAigCACEHIAAgAkEEaiICNgIEAkAgACgCCCIDIAAoAgxHDQAgACgCACIFIAJJBEAgAiACIAVrQQJ1QQFqQX5tQQJ0IgRqIQEgAyACayIDBEAgASACIAMQ0wMgACgCBCECCyAAIAEgA2oiAzYCCCAAIAIgBGo2AgQMAQsgAyAFayIBQQF1QQEgARsiBEGAgICABE8NAiAEQQJ0IgEQgAQiCCABaiEJIAMgAmshASAIIARBfHFqIgYhAwJAIAFFDQAgAUF8cSEKAkAgAUEEayILQQJ2QQFqQQdxIgRFBEAgBiEBDAELQQAhAyAGIQEDQCABIAIoAgA2AgAgAkEEaiECIAFBBGohASADQQFqIgMgBEcNAAsLIAYgCmohAyALQRxJDQADQCABIAIoAgA2AgAgASACKAIENgIEIAEgAigCCDYCCCABIAIoAgw2AgwgASACKAIQNgIQIAEgAigCFDYCFCABIAIoAhg2AhggASACKAIcNgIcIAJBIGohAiABQSBqIgEgA0cNAAsLIAAgCTYCDCAAIAM2AgggACAGNgIEIAAgCDYCACAFRQ0AIAUQ9wMgACgCCCEDCyADIAc2AgAgACAAKAIIQQRqNgIIDwsgACgCCCIHIAAoAgQiAmsiBkECdSIDIAAoAgwiBCAAKAIAIgVrIgFBAnVJBEBB/B8QgAQhCCAEIAdrIgEEQAJAIAQgB0cNACACIAVLBEAgAiACIAVrQQJ1QQFqQX5tQQJ0IgRqIQEgACAGBH8gASACIAYQ0wMgACgCBAUgAgsgBGo2AgQgACABIANBAnRqIgc2AggMAQsgByAFayIBQQF1QQEgARsiAUGAgICABE8NAyABQQJ0IgQQgAQiCiAEaiELIAogAUF8cWoiCSEHAkAgBkUNACADQQJ0IQcCQCAGQQRrIgZBAnZBAWpBB3EiBEUEQCAJIQEMAQtBACEDIAkhAQNAIAEgAigCADYCACACQQRqIQIgAUEEaiEBIANBAWoiAyAERw0ACwsgByAJaiEHIAZBHEkNAANAIAEgAigCADYCACABIAIoAgQ2AgQgASACKAIINgIIIAEgAigCDDYCDCABIAIoAhA2AhAgASACKAIUNgIUIAEgAigCGDYCGCABIAIoAhw2AhwgAkEgaiECIAFBIGoiASAHRw0ACwsgACALNgIMIAAgBzYCCCAAIAk2AgQgACAKNgIAIAVFDQAgBRD3AyAAKAIIIQcLIAcgCDYCACAAIAAoAghBBGo2AggPCwJAIAIgBUcEQCACIQUMAQsgBCAHSwRAIAcgAUECdkEBakEBdkECdCIBaiEFIAYEQCAFIANBAnRrIgUgAiAGENMDIAAoAgghBwsgACAFNgIEIAAgASAHajYCCAwBCyAEIAJrIgFBAXVBASABGyIBQYCAgIAETw0CIAFBAnQiBBCABCIJIARqIQogCSABQQNqQXxxaiIFIQQCQCAGRQ0AIANBAnQhCyAFIQEgAiEDIAZBBGsiBkECdkEBakEHcSIHBEBBACEEA0AgASADKAIANgIAIANBBGohAyABQQRqIQEgBEEBaiIEIAdHDQALCyAFIAtqIQQgBkEcSQ0AA0AgASADKAIANgIAIAEgAygCBDYCBCABIAMoAgg2AgggASADKAIMNgIMIAEgAygCEDYCECABIAMoAhQ2AhQgASADKAIYNgIYIAEgAygCHDYCHCADQSBqIQMgAUEgaiIBIARHDQALCyAAIAo2AgwgACAENgIIIAAgBTYCBCAAIAk2AgAgAkUNACACEPcDIAAoAgQhBQsgBUEEayAINgIAIAAgACgCBCICQQRrIgE2AgQgASgCACEHIAAgAjYCBAJAIAAoAggiAyAAKAIMRw0AIAAoAgAiBSACSQRAIAIgAiAFa0ECdUEBakF+bUECdCIEaiEBIAMgAmsiAwRAIAEgAiADENMDIAAoAgQhAgsgACABIANqIgM2AgggACACIARqNgIEDAELIAMgBWsiAUEBdUEBIAEbIgRBgICAgARPDQIgBEECdCIBEIAEIgggAWohCSADIAJrIQEgCCAEQXxxaiIGIQMCQCABRQ0AIAFBfHEhCgJAIAFBBGsiC0ECdkEBakEHcSIERQRAIAYhAQwBC0EAIQMgBiEBA0AgASACKAIANgIAIAJBBGohAiABQQRqIQEgA0EBaiIDIARHDQALCyAGIApqIQMgC0EcSQ0AA0AgASACKAIANgIAIAEgAigCBDYCBCABIAIoAgg2AgggASACKAIMNgIMIAEgAigCEDYCECABIAIoAhQ2AhQgASACKAIYNgIYIAEgAigCHDYCHCACQSBqIQIgAUEgaiIBIANHDQALCyAAIAk2AgwgACADNgIIIAAgBjYCBCAAIAg2AgAgBUUNACAFEPcDIAAoAgghAwsgAyAHNgIAIAAgACgCCEEEajYCCA8LIAFBAXVBASABGyIFQYCAgIAETw0AIAVBAnQiARCABCIIIAFqIQEgCCADQQJ0aiEEQfwfEIAEIQYCQCADIAVHDQAgBCAIayEDIAQgCEsEQCAEIANBAnVBAWpBfm1BAnRqIQQMAQsgA0EBdUEBIAMbIgJBgICAgARPDQEgAkECdCIBEIAEIQMgCBD3AyABIANqIQEgAyACQXxxaiEEIAAoAgQhAiAAKAIIIQcgAyEICyAEIAY2AgAgBEEEaiEDIAIgB0YNAQNAAkAgBCAIRwRAIAQhBgwBCyABIANLBEAgAyAEayECIAMgASADa0ECdUEBakECbUECdGohAyACRQRAIAQhCCADIQYMAgsgAyACayIGIAQgAhDTAyAEIQgMAQsgASAEayICQQF1QQEgAhsiAkGAgICABE8NAiADIARrIQUgAkECdCIJEIAEIgggAkEDakF8cWoiBiEDAkAgBUUNACAFQXxxIQpBACEDIAYhAiAEIQEgBUEEayILQQJ2QQFqQQdxIgUEQANAIAIgASgCADYCACABQQRqIQEgAkEEaiECIANBAWoiAyAFRw0ACwsgBiAKaiEDIAtBHEkNAANAIAIgASgCADYCACACIAEoAgQ2AgQgAiABKAIINgIIIAIgASgCDDYCDCACIAEoAhA2AhAgAiABKAIUNgIUIAIgASgCGDYCGCACIAEoAhw2AhwgAUEgaiEBIAJBIGoiAiADRw0ACwsgCCAJaiEBIAQQ9wMLIAZBBGsiBCAHQQRrIgcoAgA2AgAgByAAKAIERw0ACwwBCxAAAAsgACABNgIMIAAgAzYCCCAAIAQ2AgQgACgCACECIAAgCDYCACACBEAgAhD3AwsLkgQDCH8CfQJ+AkAgASkCACIMQiCIpyIBIAApAgAiDUIgiKciB0YNACAMpyIEIA2nIgZrQQJ1QdUCbCABIAQoAgAiBWtBDG1qIAcgBigCAGsiA0F0bWoiAEECSA0AIABBAmsiCEEBdiEAAn8gByAIQQJJDQAaIANBDG0gAGoiAkEASgRAIAYgAkHVAm4iA0ECdGooAgAgAiADQdUCbGtBDGxqDAELQdQCIAJrIgJB1QJuIgNB1QJsIAJrQQxsIAYgA0ECdGsoAgBqQfAfagsiAioCBCEKIAEgBUYEfyAEQQRrKAIAQfwfagUgAQtBDGsiASgCACEDIAogASoCBCILXUUEQCAKIAtcDQEgAigCACADTA0BCyABQQhqIgQoAgAhCSABIAIpAgA3AgAgBCACKAIINgIAAkAgCEECSQ0AA0AgAEEBa0ECbSEEAn8gByAAQQNJDQAaIAcgBigCAGtBDG0gBGoiAUEASgRAIAYgAUHVAm4iBUECdGooAgAgASAFQdUCbGtBDGxqDAELQdQCIAFrIgFB1QJuIgVB1QJsIAFrQQxsIAYgBUECdGsoAgBqQfAfagsiASoCBCIKIAtdRQRAIAogC1wNAiABKAIAIANMDQILIAIgASkCADcCACACIAEoAgg2AgggAEECSyEFIAEhAiAEIQAgBQ0ACwsgAiAJNgIIIAIgCzgCBCACIAM2AgALCxAAQayuAUGwrgEoAgAQxAELIAAgAQRAIAAgASgCABDEASAAIAEoAgQQxAEgARD3AwsL2wQCBn8BfSMAQSBrIgMkACAAEAshACABEAsiBSgCACEGIAAoAgAhByADQQA2AhwCQAJAAkACQAJAQbCuASgCACIARQ0AQbCuASEBA0ACQCAAKgIQIglDAAAAAF0EQCAAQQRqIQAMAQsCQCAJQwAAAABeDQAgACoCFCACXUUNACAAQQRqIQAMAQsgACEBCyAAKAIAIgANAAsgAUGwrgFGDQAgASoCECIJQwAAAABeDQAgCUMAAAAAXQ0BIAEqAhQgAl5FDQELQwAAAAAgAkEBIANBHGoQggIiAARAIAMgADYCEEH1JyADQRBqEBgMBAtBsK4BIQRBsK4BKAIAIgBFBEBBsK4BIQAMAgsDQAJAAkACQCAAKgIQIglDAAAAAF5FBEAgCUMAAAAAXQ0CIAAqAhQiCSACXkUNAQsgACgCACIBDQIgACEEDAULIAIgCV5FDQQLIABBBGohBCAAKAIEIgFFDQMgBCEACyAAIQQgASEADAALAAsgAyABKAIYIgA2AhwMAQsgBCgCAEUEQEEcEIAEIgEgAjgCFCABQwAAAAA4AhAgAygCHCEIIAEgADYCCCABQgA3AgAgASAINgIYIAQgATYCAEGsrgEoAgAoAgAiAARAQayuASAANgIAIAQoAgAhAQtBsK4BKAIAIAEQJUG0rgFBtK4BKAIAQQFqNgIAC0GorQFBqK0BKAIAQQFqNgIAIAMoAhwhAAsgACAFKAIEIAcgBkGsrQEoAgAQjQIiAARAIAMgADYCAEGRJyADEBgMAQsgAygCHEGsrQEoAgAQrwILIANBIGokAAtBAQF/QcCuASgCACIABEADQCAAKAIAIQEgABD3AyABIgANAAsLQbiuASgCACEAQbiuAUEANgIAIAAEQCAAEPcDCwusGAEUfyAAEAshACADEAshAyAGEAshBiAAKAIAIRcgACgCBCELIAMoAgAhGCADKAIEIQMgBigCACEZIAEhCiAFIQZBACEBQQAhBSMAQfABayIIJAAgAkECdCESAkACQCACBEAgAkEASA0BIBIQgAQiECAKIBIQ0gMgAkECdGohCQsgBkECdCETIAYEQCAGQQBIDQEgExCABCIRIAQgExDSAyAGQQJ0aiEBCyAIQQA2AtgBIAhCADcD0AEgCSAQayIKQQJ1IQwgCgRAIApBAEgNASAIIAoQgAQiCTYC0AEgCCAJIAxBAnRqNgLYASAIIAkgECAKENIDIApqNgLUAQsgCEEANgLIASAIQgA3A8ABIAEgEWsiBEECdSEAIAQEQCAEQQBIDQEgCCAEEIAEIgE2AsABIAggASAAQQJ0ajYCyAEgCCABIBEgBBDSAyAEajYCxAELIAhB4AFqIAhB0AFqIAhBwAFqEOQBIAgoAsABIgEEQCAIIAE2AsQBIAEQvAMLIAgoAtABIgEEQCAIIAE2AtQBIAEQvAMLIAhBADYCqAEgCEIANwOgASAIKALkASAIKALgASINayIBBEAgAUEASA0BIAggARCABCIJNgKgASAIIAk2AqQBIAggCSABQQJ1QQJ0ajYCqAEgCCAJIA0gARDSAyABajYCpAELIAhBsAFqIAhBoAFqEOMBIAgoAqABIgEEQCAIIAE2AqQBIAEQvAMLQQEhFCAIKALgASIBIAgoAuQBIglHBEADQCABKAIAIBRsIRQgAUEEaiIBIAlHDQALCyAIQQA2AogBIAhCADcDgAEgCgRAIApBAEgNASAIIAoQgAQiATYCgAEgCCABIAxBAnRqNgKIASAIIAEgECAKENIDIApqNgKEAQsgCEGQAWogCEGAAWoQ4wEgCCgCgAEiAQRAIAggATYChAEgARC8AwsgCEEANgJoIAhCADcDYCAEBEAgBEEASA0BIAggBBCABCIBNgJgIAggASAAQQJ0ajYCaCAIIAEgESAEENIDIARqNgJkCyAIQfAAaiAIQeAAahDjASAIKAJgIgEEQCAIIAE2AmQgARC8AwsgCEEANgJIIAhCADcDQCAKBEAgCCAKEIAEIgE2AkAgCCABIAxBAnRqNgJIIAggASAQIAoQ0gMgCmo2AkQLIAhBADYCOCAIQgA3AzAgCCgC5AEgCCgC4AEiCmsiAQRAIAFBAEgNASAIIAEQgAQiCTYCMCAIIAk2AjQgCCAJIAFBAnVBAnRqNgI4IAggCSAKIAEQ0gMgAWo2AjQLIAhB0ABqIAhBQGsgCEEwahDlASAIKAIwIgEEQCAIIAE2AjQgARC8AwsgCCgCQCIBBEAgCCABNgJEIAEQvAMLIAhBADYCGCAIQgA3AxAgBARAIAggBBCABCIBNgIQIAggASAAQQJ0ajYCGCAIIAEgESAEENIDIARqNgIUCyAIQQA2AgggCEIANwMAIAgoAuQBIAgoAuABIgprIgEEQCABQQBIDQEgCCABEIAEIgk2AgAgCCAJNgIEIAggCSABQQJ1QQJ0ajYCCCAIIAkgCiABENIDIAFqNgIECyAIQSBqIAhBEGogCBDlASAIKAIAIgEEQCAIIAE2AgQgARC8AwsgCCgCECIBBEAgCCABNgIUIAEQvAMLAkACQCAIKAJUIAgoAlBHDQAgCCgCJCAIKAIgRw0AIBRFDQFBACEBA0AgGSABQQJ0aiAXIAEgC3BBAnRqKgIAIBggASADcEECdGoqAgAgBxETADgCACABQQFqIgEgFEcNAAsMAQsgFEUNAEEAIAJrQQJ0IRpBACAGa0ECdCEbA0BBACEVQQAhFgJAIAgoArQBIAgoArABIgRrIgpBAnUiAUEBaiIJIAFJDQAgCUGAgICABE8NAyAJQQJ0EIAEIhZBACABQQJ0IgNBBGoQ1AMiCyADaiIOQQRqIRUgCgRAIAFBASABQQFLGyIDQQFxIQ9BACEJIAUhASAKQQhPBEAgA0F+cSENQQAhAwNAIAsgCUECdCIKaiABIAQgCmooAgAiDG4iADYCACALIApBBHIiCmogASAAIAxsayIBIAQgCmooAgAiCm4iDDYCACABIAogDGxrIQEgCUECaiEJIANBAmoiAyANRw0ACwsgDiAPBH8gCyAJQQJ0IglqIAEgBCAJaigCACIJbiIKNgIAIAEgCSAKbGsFIAELNgIADAELIAsgBTYCAAsCQCASRQRAQQAhDUEAIQEMAQsgEkEASA0DIBIQgAQhDSACRQRAIA0hAQwBCyANIBUgGmogEhDSAyIJIQEgCSASaiENCwJAIAgoAlQgCCgCUCIKayIJRQ0AIAlBAnUiCUEBIAlBAUsbIgRBA3EhDEEAIQtBACEJIARBAWtBA08EQCAEQXxxIQBBACEDA0AgASAKIAlBAnQiBGooAgBBAnRqQQA2AgAgASAKIARBBHJqKAIAQQJ0akEANgIAIAEgCiAEQQhyaigCAEECdGpBADYCACABIAogBEEMcmooAgBBAnRqQQA2AgAgCUEEaiEJIANBBGoiAyAARw0ACwsgDEUNAANAIAEgCiAJQQJ0aigCAEECdGpBADYCACAJQQFqIQkgC0EBaiILIAxHDQALCwJAAkACQCANIAFrQQJ1IgAOAgIAAQsgASgCACEADAELIAEgAEEBayIJQQJ0aigCACEEIAlFBEAgBCEADAELIAgoApABIQogCUEDcSENQQAhCwJAIABBAmtBA0kEQEEAIQkgBCEADAELIAlBfHEhDkEAIQkgBCEAQQAhAwNAIAEgCUECdCIEQQxyIgxqKAIAIAogDGooAgBsIAEgBEEIciIMaigCACAKIAxqKAIAbCABIARqKAIAIAQgCmooAgBsIABqIAEgBEEEciIMaigCACAKIAxqKAIAbGpqaiEAIAlBBGohCSADQQRqIgMgDkcNAAsLIA1FDQADQCABIAlBAnQiBGooAgAgBCAKaigCAGwgAGohACAJQQFqIQkgC0EBaiILIA1HDQALCwJAIBNFBEBBACEPQQAhCQwBCyATQQBIDQMgExCABCEPIAZFBEAgDyEJDAELIA8gFSAbaiATENIDIgohCSAKIBNqIQ8LAkAgCCgCJCAIKAIgIgRrIgpFDQAgCkECdSIKQQEgCkEBSxsiC0EDcSENQQAhA0EAIQogC0EBa0EDTwRAIAtBfHEhDkEAIQwDQCAJIAQgCkECdCILaigCAEECdGpBADYCACAJIAQgC0EEcmooAgBBAnRqQQA2AgAgCSAEIAtBCHJqKAIAQQJ0akEANgIAIAkgBCALQQxyaigCAEECdGpBADYCACAKQQRqIQogDEEEaiIMIA5HDQALCyANRQ0AA0AgCSAEIApBAnRqKAIAQQJ0akEANgIAIApBAWohCiADQQFqIgMgDUcNAAsLAkACQAJAIA8gCWtBAnUiBA4CAgABCyAJKAIAIQQMAQsgCSAEQQFrIgpBAnRqKAIAIQMgCkUEQCADIQQMAQsgCCgCcCELIApBA3EhD0EAIQwCQCAEQQJrQQNJBEBBACEKIAMhBAwBCyAKQXxxIRVBACEKIAMhBEEAIQ0DQCAJIApBAnQiA0EMciIOaigCACALIA5qKAIAbCAJIANBCHIiDmooAgAgCyAOaigCAGwgAyAJaigCACADIAtqKAIAbCAEaiAJIANBBHIiDmooAgAgCyAOaigCAGxqamohBCAKQQRqIQogDUEEaiINIBVHDQALCyAPRQ0AA0AgCSAKQQJ0IgNqKAIAIAMgC2ooAgBsIARqIQQgCkEBaiEKIAxBAWoiDCAPRw0ACwsgGSAFQQJ0aiAXIABBAnRqKgIAIBggBEECdGoqAgAgBxETADgCACAJBEAgCRC8AwsgAQRAIAEQvAMLIBYEQCAWELwDCyAFQQFqIgUgFEcNAAsLIAgoAiAiAQRAIAggATYCJCABELwDCyAIKAJQIgEEQCAIIAE2AlQgARC8AwsgCCgCcCIBBEAgCCABNgJ0IAEQvAMLIAgoApABIgEEQCAIIAE2ApQBIAEQvAMLIAgoArABIgEEQCAIIAE2ArQBIAEQvAMLIAgoAuABIgEEQCAIIAE2AuQBIAEQvAMLIBEEQCARELwDCyAQBEAgEBC8AwsgCEHwAWokAAwBCxAAAAsLrBgBFH8gABALIQAgAxALIQMgBhALIQYgACgCACEXIAAoAgQhCyADKAIAIRggAygCBCEDIAYoAgAhGSABIQogBSEGQQAhAUEAIQUjAEHwAWsiCCQAIAJBAnQhEgJAAkAgAgRAIAJBAEgNASASEIAEIhAgCiASENIDIAJBAnRqIQkLIAZBAnQhEyAGBEAgBkEASA0BIBMQgAQiESAEIBMQ0gMgBkECdGohAQsgCEEANgLYASAIQgA3A9ABIAkgEGsiCkECdSEMIAoEQCAKQQBIDQEgCCAKEIAEIgk2AtABIAggCSAMQQJ0ajYC2AEgCCAJIBAgChDSAyAKajYC1AELIAhBADYCyAEgCEIANwPAASABIBFrIgRBAnUhACAEBEAgBEEASA0BIAggBBCABCIBNgLAASAIIAEgAEECdGo2AsgBIAggASARIAQQ0gMgBGo2AsQBCyAIQeABaiAIQdABaiAIQcABahDkASAIKALAASIBBEAgCCABNgLEASABELwDCyAIKALQASIBBEAgCCABNgLUASABELwDCyAIQQA2AqgBIAhCADcDoAEgCCgC5AEgCCgC4AEiDWsiAQRAIAFBAEgNASAIIAEQgAQiCTYCoAEgCCAJNgKkASAIIAkgAUECdUECdGo2AqgBIAggCSANIAEQ0gMgAWo2AqQBCyAIQbABaiAIQaABahDjASAIKAKgASIBBEAgCCABNgKkASABELwDC0EBIRQgCCgC4AEiASAIKALkASIJRwRAA0AgASgCACAUbCEUIAFBBGoiASAJRw0ACwsgCEEANgKIASAIQgA3A4ABIAoEQCAKQQBIDQEgCCAKEIAEIgE2AoABIAggASAMQQJ0ajYCiAEgCCABIBAgChDSAyAKajYChAELIAhBkAFqIAhBgAFqEOMBIAgoAoABIgEEQCAIIAE2AoQBIAEQvAMLIAhBADYCaCAIQgA3A2AgBARAIARBAEgNASAIIAQQgAQiATYCYCAIIAEgAEECdGo2AmggCCABIBEgBBDSAyAEajYCZAsgCEHwAGogCEHgAGoQ4wEgCCgCYCIBBEAgCCABNgJkIAEQvAMLIAhBADYCSCAIQgA3A0AgCgRAIAggChCABCIBNgJAIAggASAMQQJ0ajYCSCAIIAEgECAKENIDIApqNgJECyAIQQA2AjggCEIANwMwIAgoAuQBIAgoAuABIgprIgEEQCABQQBIDQEgCCABEIAEIgk2AjAgCCAJNgI0IAggCSABQQJ1QQJ0ajYCOCAIIAkgCiABENIDIAFqNgI0CyAIQdAAaiAIQUBrIAhBMGoQ5QEgCCgCMCIBBEAgCCABNgI0IAEQvAMLIAgoAkAiAQRAIAggATYCRCABELwDCyAIQQA2AhggCEIANwMQIAQEQCAIIAQQgAQiATYCECAIIAEgAEECdGo2AhggCCABIBEgBBDSAyAEajYCFAsgCEEANgIIIAhCADcDACAIKALkASAIKALgASIKayIBBEAgAUEASA0BIAggARCABCIJNgIAIAggCTYCBCAIIAkgAUECdUECdGo2AgggCCAJIAogARDSAyABajYCBAsgCEEgaiAIQRBqIAgQ5QEgCCgCACIBBEAgCCABNgIEIAEQvAMLIAgoAhAiAQRAIAggATYCFCABELwDCwJAAkAgCCgCVCAIKAJQRw0AIAgoAiQgCCgCIEcNACAURQ0BQQAhAQNAIBkgAUECdGogFyABIAtwQQJ0aigCACAYIAEgA3BBAnRqKAIAIAcRBAA2AgAgAUEBaiIBIBRHDQALDAELIBRFDQBBACACa0ECdCEaQQAgBmtBAnQhGwNAQQAhFUEAIRYCQCAIKAK0ASAIKAKwASIEayIKQQJ1IgFBAWoiCSABSQ0AIAlBgICAgARPDQMgCUECdBCABCIWQQAgAUECdCIDQQRqENQDIgsgA2oiDkEEaiEVIAoEQCABQQEgAUEBSxsiA0EBcSEPQQAhCSAFIQEgCkEITwRAIANBfnEhDUEAIQMDQCALIAlBAnQiCmogASAEIApqKAIAIgxuIgA2AgAgCyAKQQRyIgpqIAEgACAMbGsiASAEIApqKAIAIgpuIgw2AgAgASAKIAxsayEBIAlBAmohCSADQQJqIgMgDUcNAAsLIA4gDwR/IAsgCUECdCIJaiABIAQgCWooAgAiCW4iCjYCACABIAkgCmxrBSABCzYCAAwBCyALIAU2AgALAkAgEkUEQEEAIQ1BACEBDAELIBJBAEgNAyASEIAEIQ0gAkUEQCANIQEMAQsgDSAVIBpqIBIQ0gMiCSEBIAkgEmohDQsCQCAIKAJUIAgoAlAiCmsiCUUNACAJQQJ1IglBASAJQQFLGyIEQQNxIQxBACELQQAhCSAEQQFrQQNPBEAgBEF8cSEAQQAhAwNAIAEgCiAJQQJ0IgRqKAIAQQJ0akEANgIAIAEgCiAEQQRyaigCAEECdGpBADYCACABIAogBEEIcmooAgBBAnRqQQA2AgAgASAKIARBDHJqKAIAQQJ0akEANgIAIAlBBGohCSADQQRqIgMgAEcNAAsLIAxFDQADQCABIAogCUECdGooAgBBAnRqQQA2AgAgCUEBaiEJIAtBAWoiCyAMRw0ACwsCQAJAAkAgDSABa0ECdSIADgICAAELIAEoAgAhAAwBCyABIABBAWsiCUECdGooAgAhBCAJRQRAIAQhAAwBCyAIKAKQASEKIAlBA3EhDUEAIQsCQCAAQQJrQQNJBEBBACEJIAQhAAwBCyAJQXxxIQ5BACEJIAQhAEEAIQMDQCABIAlBAnQiBEEMciIMaigCACAKIAxqKAIAbCABIARBCHIiDGooAgAgCiAMaigCAGwgASAEaigCACAEIApqKAIAbCAAaiABIARBBHIiDGooAgAgCiAMaigCAGxqamohACAJQQRqIQkgA0EEaiIDIA5HDQALCyANRQ0AA0AgASAJQQJ0IgRqKAIAIAQgCmooAgBsIABqIQAgCUEBaiEJIAtBAWoiCyANRw0ACwsCQCATRQRAQQAhD0EAIQkMAQsgE0EASA0DIBMQgAQhDyAGRQRAIA8hCQwBCyAPIBUgG2ogExDSAyIKIQkgCiATaiEPCwJAIAgoAiQgCCgCICIEayIKRQ0AIApBAnUiCkEBIApBAUsbIgtBA3EhDUEAIQNBACEKIAtBAWtBA08EQCALQXxxIQ5BACEMA0AgCSAEIApBAnQiC2ooAgBBAnRqQQA2AgAgCSAEIAtBBHJqKAIAQQJ0akEANgIAIAkgBCALQQhyaigCAEECdGpBADYCACAJIAQgC0EMcmooAgBBAnRqQQA2AgAgCkEEaiEKIAxBBGoiDCAORw0ACwsgDUUNAANAIAkgBCAKQQJ0aigCAEECdGpBADYCACAKQQFqIQogA0EBaiIDIA1HDQALCwJAAkACQCAPIAlrQQJ1IgQOAgIAAQsgCSgCACEEDAELIAkgBEEBayIKQQJ0aigCACEDIApFBEAgAyEEDAELIAgoAnAhCyAKQQNxIQ9BACEMAkAgBEECa0EDSQRAQQAhCiADIQQMAQsgCkF8cSEVQQAhCiADIQRBACENA0AgCSAKQQJ0IgNBDHIiDmooAgAgCyAOaigCAGwgCSADQQhyIg5qKAIAIAsgDmooAgBsIAMgCWooAgAgAyALaigCAGwgBGogCSADQQRyIg5qKAIAIAsgDmooAgBsampqIQQgCkEEaiEKIA1BBGoiDSAVRw0ACwsgD0UNAANAIAkgCkECdCIDaigCACADIAtqKAIAbCAEaiEEIApBAWohCiAMQQFqIgwgD0cNAAsLIBkgBUECdGogFyAAQQJ0aigCACAYIARBAnRqKAIAIAcRBAA2AgAgCQRAIAkQvAMLIAEEQCABELwDCyAWBEAgFhC8AwsgBUEBaiIFIBRHDQALCyAIKAIgIgEEQCAIIAE2AiQgARC8AwsgCCgCUCIBBEAgCCABNgJUIAEQvAMLIAgoAnAiAQRAIAggATYCdCABELwDCyAIKAKQASIBBEAgCCABNgKUASABELwDCyAIKAKwASIBBEAgCCABNgK0ASABELwDCyAIKALgASIBBEAgCCABNgLkASABELwDCyARBEAgERC8AwsgEARAIBAQvAMLIAhB8AFqJAAMAQsQAAALC5oYARR/IAAQCyEAIAMQCyEDIAYQCyEGIAAoAgAhFyAAKAIEIQsgAygCACEYIAMoAgQhAyAGKAIAIRkgASEKIAUhBkEAIQFBACEFIwBB8AFrIggkACACQQJ0IRICQAJAIAIEQCACQQBIDQEgEhCABCIQIAogEhDSAyACQQJ0aiEJCyAGQQJ0IRMgBgRAIAZBAEgNASATEIAEIhEgBCATENIDIAZBAnRqIQELIAhBADYC2AEgCEIANwPQASAJIBBrIgpBAnUhDCAKBEAgCkEASA0BIAggChCABCIJNgLQASAIIAkgDEECdGo2AtgBIAggCSAQIAoQ0gMgCmo2AtQBCyAIQQA2AsgBIAhCADcDwAEgASARayIEQQJ1IQAgBARAIARBAEgNASAIIAQQgAQiATYCwAEgCCABIABBAnRqNgLIASAIIAEgESAEENIDIARqNgLEAQsgCEHgAWogCEHQAWogCEHAAWoQ5AEgCCgCwAEiAQRAIAggATYCxAEgARC8AwsgCCgC0AEiAQRAIAggATYC1AEgARC8AwsgCEEANgKoASAIQgA3A6ABIAgoAuQBIAgoAuABIg1rIgEEQCABQQBIDQEgCCABEIAEIgk2AqABIAggCTYCpAEgCCAJIAFBAnVBAnRqNgKoASAIIAkgDSABENIDIAFqNgKkAQsgCEGwAWogCEGgAWoQ4wEgCCgCoAEiAQRAIAggATYCpAEgARC8AwtBASEUIAgoAuABIgEgCCgC5AEiCUcEQANAIAEoAgAgFGwhFCABQQRqIgEgCUcNAAsLIAhBADYCiAEgCEIANwOAASAKBEAgCkEASA0BIAggChCABCIBNgKAASAIIAEgDEECdGo2AogBIAggASAQIAoQ0gMgCmo2AoQBCyAIQZABaiAIQYABahDjASAIKAKAASIBBEAgCCABNgKEASABELwDCyAIQQA2AmggCEIANwNgIAQEQCAEQQBIDQEgCCAEEIAEIgE2AmAgCCABIABBAnRqNgJoIAggASARIAQQ0gMgBGo2AmQLIAhB8ABqIAhB4ABqEOMBIAgoAmAiAQRAIAggATYCZCABELwDCyAIQQA2AkggCEIANwNAIAoEQCAIIAoQgAQiATYCQCAIIAEgDEECdGo2AkggCCABIBAgChDSAyAKajYCRAsgCEEANgI4IAhCADcDMCAIKALkASAIKALgASIKayIBBEAgAUEASA0BIAggARCABCIJNgIwIAggCTYCNCAIIAkgAUECdUECdGo2AjggCCAJIAogARDSAyABajYCNAsgCEHQAGogCEFAayAIQTBqEOUBIAgoAjAiAQRAIAggATYCNCABELwDCyAIKAJAIgEEQCAIIAE2AkQgARC8AwsgCEEANgIYIAhCADcDECAEBEAgCCAEEIAEIgE2AhAgCCABIABBAnRqNgIYIAggASARIAQQ0gMgBGo2AhQLIAhBADYCCCAIQgA3AwAgCCgC5AEgCCgC4AEiCmsiAQRAIAFBAEgNASAIIAEQgAQiCTYCACAIIAk2AgQgCCAJIAFBAnVBAnRqNgIIIAggCSAKIAEQ0gMgAWo2AgQLIAhBIGogCEEQaiAIEOUBIAgoAgAiAQRAIAggATYCBCABELwDCyAIKAIQIgEEQCAIIAE2AhQgARC8AwsCQAJAIAgoAlQgCCgCUEcNACAIKAIkIAgoAiBHDQAgFEUNAUEAIQEDQCABIBlqIBcgASALcGotAAAgGCABIANwai0AACAHEQQAOgAAIAFBAWoiASAURw0ACwwBCyAURQ0AQQAgAmtBAnQhGkEAIAZrQQJ0IRsDQEEAIRVBACEWAkAgCCgCtAEgCCgCsAEiBGsiCkECdSIBQQFqIgkgAUkNACAJQYCAgIAETw0DIAlBAnQQgAQiFkEAIAFBAnQiA0EEahDUAyILIANqIg5BBGohFSAKBEAgAUEBIAFBAUsbIgNBAXEhD0EAIQkgBSEBIApBCE8EQCADQX5xIQ1BACEDA0AgCyAJQQJ0IgpqIAEgBCAKaigCACIMbiIANgIAIAsgCkEEciIKaiABIAAgDGxrIgEgBCAKaigCACIKbiIMNgIAIAEgCiAMbGshASAJQQJqIQkgA0ECaiIDIA1HDQALCyAOIA8EfyALIAlBAnQiCWogASAEIAlqKAIAIgluIgo2AgAgASAJIApsawUgAQs2AgAMAQsgCyAFNgIACwJAIBJFBEBBACENQQAhAQwBCyASQQBIDQMgEhCABCENIAJFBEAgDSEBDAELIA0gFSAaaiASENIDIgkhASAJIBJqIQ0LAkAgCCgCVCAIKAJQIgprIglFDQAgCUECdSIJQQEgCUEBSxsiBEEDcSEMQQAhC0EAIQkgBEEBa0EDTwRAIARBfHEhAEEAIQMDQCABIAogCUECdCIEaigCAEECdGpBADYCACABIAogBEEEcmooAgBBAnRqQQA2AgAgASAKIARBCHJqKAIAQQJ0akEANgIAIAEgCiAEQQxyaigCAEECdGpBADYCACAJQQRqIQkgA0EEaiIDIABHDQALCyAMRQ0AA0AgASAKIAlBAnRqKAIAQQJ0akEANgIAIAlBAWohCSALQQFqIgsgDEcNAAsLAkACQAJAIA0gAWtBAnUiAA4CAgABCyABKAIAIQAMAQsgASAAQQFrIglBAnRqKAIAIQQgCUUEQCAEIQAMAQsgCCgCkAEhCiAJQQNxIQ1BACELAkAgAEECa0EDSQRAQQAhCSAEIQAMAQsgCUF8cSEOQQAhCSAEIQBBACEDA0AgASAJQQJ0IgRBDHIiDGooAgAgCiAMaigCAGwgASAEQQhyIgxqKAIAIAogDGooAgBsIAEgBGooAgAgBCAKaigCAGwgAGogASAEQQRyIgxqKAIAIAogDGooAgBsampqIQAgCUEEaiEJIANBBGoiAyAORw0ACwsgDUUNAANAIAEgCUECdCIEaigCACAEIApqKAIAbCAAaiEAIAlBAWohCSALQQFqIgsgDUcNAAsLAkAgE0UEQEEAIQ9BACEJDAELIBNBAEgNAyATEIAEIQ8gBkUEQCAPIQkMAQsgDyAVIBtqIBMQ0gMiCiEJIAogE2ohDwsCQCAIKAIkIAgoAiAiBGsiCkUNACAKQQJ1IgpBASAKQQFLGyILQQNxIQ1BACEDQQAhCiALQQFrQQNPBEAgC0F8cSEOQQAhDANAIAkgBCAKQQJ0IgtqKAIAQQJ0akEANgIAIAkgBCALQQRyaigCAEECdGpBADYCACAJIAQgC0EIcmooAgBBAnRqQQA2AgAgCSAEIAtBDHJqKAIAQQJ0akEANgIAIApBBGohCiAMQQRqIgwgDkcNAAsLIA1FDQADQCAJIAQgCkECdGooAgBBAnRqQQA2AgAgCkEBaiEKIANBAWoiAyANRw0ACwsCQAJAAkAgDyAJa0ECdSIEDgICAAELIAkoAgAhBAwBCyAJIARBAWsiCkECdGooAgAhAyAKRQRAIAMhBAwBCyAIKAJwIQsgCkEDcSEPQQAhDAJAIARBAmtBA0kEQEEAIQogAyEEDAELIApBfHEhFUEAIQogAyEEQQAhDQNAIAkgCkECdCIDQQxyIg5qKAIAIAsgDmooAgBsIAkgA0EIciIOaigCACALIA5qKAIAbCADIAlqKAIAIAMgC2ooAgBsIARqIAkgA0EEciIOaigCACALIA5qKAIAbGpqaiEEIApBBGohCiANQQRqIg0gFUcNAAsLIA9FDQADQCAJIApBAnQiA2ooAgAgAyALaigCAGwgBGohBCAKQQFqIQogDEEBaiIMIA9HDQALCyAFIBlqIAAgF2otAAAgBCAYai0AACAHEQQAOgAAIAkEQCAJELwDCyABBEAgARC8AwsgFgRAIBYQvAMLIAVBAWoiBSAURw0ACwsgCCgCICIBBEAgCCABNgIkIAEQvAMLIAgoAlAiAQRAIAggATYCVCABELwDCyAIKAJwIgEEQCAIIAE2AnQgARC8AwsgCCgCkAEiAQRAIAggATYClAEgARC8AwsgCCgCsAEiAQRAIAggATYCtAEgARC8AwsgCCgC4AEiAQRAIAggATYC5AEgARC8AwsgEQRAIBEQvAMLIBAEQCAQELwDCyAIQfABaiQADAELEAAACwumGAEUfyAAEAshACADEAshAyAGEAshBiAAKAIAIRcgACgCBCELIAMoAgAhGCADKAIEIQMgBigCACEZIAEhCiAFIQZBACEBQQAhBSMAQfABayIIJAAgAkECdCESAkACQCACBEAgAkEASA0BIBIQgAQiECAKIBIQ0gMgAkECdGohCQsgBkECdCETIAYEQCAGQQBIDQEgExCABCIRIAQgExDSAyAGQQJ0aiEBCyAIQQA2AtgBIAhCADcD0AEgCSAQayIKQQJ1IQwgCgRAIApBAEgNASAIIAoQgAQiCTYC0AEgCCAJIAxBAnRqNgLYASAIIAkgECAKENIDIApqNgLUAQsgCEEANgLIASAIQgA3A8ABIAEgEWsiBEECdSEAIAQEQCAEQQBIDQEgCCAEEIAEIgE2AsABIAggASAAQQJ0ajYCyAEgCCABIBEgBBDSAyAEajYCxAELIAhB4AFqIAhB0AFqIAhBwAFqEOQBIAgoAsABIgEEQCAIIAE2AsQBIAEQvAMLIAgoAtABIgEEQCAIIAE2AtQBIAEQvAMLIAhBADYCqAEgCEIANwOgASAIKALkASAIKALgASINayIBBEAgAUEASA0BIAggARCABCIJNgKgASAIIAk2AqQBIAggCSABQQJ1QQJ0ajYCqAEgCCAJIA0gARDSAyABajYCpAELIAhBsAFqIAhBoAFqEOMBIAgoAqABIgEEQCAIIAE2AqQBIAEQvAMLQQEhFCAIKALgASIBIAgoAuQBIglHBEADQCABKAIAIBRsIRQgAUEEaiIBIAlHDQALCyAIQQA2AogBIAhCADcDgAEgCgRAIApBAEgNASAIIAoQgAQiATYCgAEgCCABIAxBAnRqNgKIASAIIAEgECAKENIDIApqNgKEAQsgCEGQAWogCEGAAWoQ4wEgCCgCgAEiAQRAIAggATYChAEgARC8AwsgCEEANgJoIAhCADcDYCAEBEAgBEEASA0BIAggBBCABCIBNgJgIAggASAAQQJ0ajYCaCAIIAEgESAEENIDIARqNgJkCyAIQfAAaiAIQeAAahDjASAIKAJgIgEEQCAIIAE2AmQgARC8AwsgCEEANgJIIAhCADcDQCAKBEAgCCAKEIAEIgE2AkAgCCABIAxBAnRqNgJIIAggASAQIAoQ0gMgCmo2AkQLIAhBADYCOCAIQgA3AzAgCCgC5AEgCCgC4AEiCmsiAQRAIAFBAEgNASAIIAEQgAQiCTYCMCAIIAk2AjQgCCAJIAFBAnVBAnRqNgI4IAggCSAKIAEQ0gMgAWo2AjQLIAhB0ABqIAhBQGsgCEEwahDlASAIKAIwIgEEQCAIIAE2AjQgARC8AwsgCCgCQCIBBEAgCCABNgJEIAEQvAMLIAhBADYCGCAIQgA3AxAgBARAIAggBBCABCIBNgIQIAggASAAQQJ0ajYCGCAIIAEgESAEENIDIARqNgIUCyAIQQA2AgggCEIANwMAIAgoAuQBIAgoAuABIgprIgEEQCABQQBIDQEgCCABEIAEIgk2AgAgCCAJNgIEIAggCSABQQJ1QQJ0ajYCCCAIIAkgCiABENIDIAFqNgIECyAIQSBqIAhBEGogCBDlASAIKAIAIgEEQCAIIAE2AgQgARC8AwsgCCgCECIBBEAgCCABNgIUIAEQvAMLAkACQCAIKAJUIAgoAlBHDQAgCCgCJCAIKAIgRw0AIBRFDQFBACEBA0AgASAZaiAXIAEgC3BBAnRqKgIAIBggASADcEECdGoqAgAgBxESADoAACABQQFqIgEgFEcNAAsMAQsgFEUNAEEAIAJrQQJ0IRpBACAGa0ECdCEbA0BBACEVQQAhFgJAIAgoArQBIAgoArABIgRrIgpBAnUiAUEBaiIJIAFJDQAgCUGAgICABE8NAyAJQQJ0EIAEIhZBACABQQJ0IgNBBGoQ1AMiCyADaiIOQQRqIRUgCgRAIAFBASABQQFLGyIDQQFxIQ9BACEJIAUhASAKQQhPBEAgA0F+cSENQQAhAwNAIAsgCUECdCIKaiABIAQgCmooAgAiDG4iADYCACALIApBBHIiCmogASAAIAxsayIBIAQgCmooAgAiCm4iDDYCACABIAogDGxrIQEgCUECaiEJIANBAmoiAyANRw0ACwsgDiAPBH8gCyAJQQJ0IglqIAEgBCAJaigCACIJbiIKNgIAIAEgCSAKbGsFIAELNgIADAELIAsgBTYCAAsCQCASRQRAQQAhDUEAIQEMAQsgEkEASA0DIBIQgAQhDSACRQRAIA0hAQwBCyANIBUgGmogEhDSAyIJIQEgCSASaiENCwJAIAgoAlQgCCgCUCIKayIJRQ0AIAlBAnUiCUEBIAlBAUsbIgRBA3EhDEEAIQtBACEJIARBAWtBA08EQCAEQXxxIQBBACEDA0AgASAKIAlBAnQiBGooAgBBAnRqQQA2AgAgASAKIARBBHJqKAIAQQJ0akEANgIAIAEgCiAEQQhyaigCAEECdGpBADYCACABIAogBEEMcmooAgBBAnRqQQA2AgAgCUEEaiEJIANBBGoiAyAARw0ACwsgDEUNAANAIAEgCiAJQQJ0aigCAEECdGpBADYCACAJQQFqIQkgC0EBaiILIAxHDQALCwJAAkACQCANIAFrQQJ1IgAOAgIAAQsgASgCACEADAELIAEgAEEBayIJQQJ0aigCACEEIAlFBEAgBCEADAELIAgoApABIQogCUEDcSENQQAhCwJAIABBAmtBA0kEQEEAIQkgBCEADAELIAlBfHEhDkEAIQkgBCEAQQAhAwNAIAEgCUECdCIEQQxyIgxqKAIAIAogDGooAgBsIAEgBEEIciIMaigCACAKIAxqKAIAbCABIARqKAIAIAQgCmooAgBsIABqIAEgBEEEciIMaigCACAKIAxqKAIAbGpqaiEAIAlBBGohCSADQQRqIgMgDkcNAAsLIA1FDQADQCABIAlBAnQiBGooAgAgBCAKaigCAGwgAGohACAJQQFqIQkgC0EBaiILIA1HDQALCwJAIBNFBEBBACEPQQAhCQwBCyATQQBIDQMgExCABCEPIAZFBEAgDyEJDAELIA8gFSAbaiATENIDIgohCSAKIBNqIQ8LAkAgCCgCJCAIKAIgIgRrIgpFDQAgCkECdSIKQQEgCkEBSxsiC0EDcSENQQAhA0EAIQogC0EBa0EDTwRAIAtBfHEhDkEAIQwDQCAJIAQgCkECdCILaigCAEECdGpBADYCACAJIAQgC0EEcmooAgBBAnRqQQA2AgAgCSAEIAtBCHJqKAIAQQJ0akEANgIAIAkgBCALQQxyaigCAEECdGpBADYCACAKQQRqIQogDEEEaiIMIA5HDQALCyANRQ0AA0AgCSAEIApBAnRqKAIAQQJ0akEANgIAIApBAWohCiADQQFqIgMgDUcNAAsLAkACQAJAIA8gCWtBAnUiBA4CAgABCyAJKAIAIQQMAQsgCSAEQQFrIgpBAnRqKAIAIQMgCkUEQCADIQQMAQsgCCgCcCELIApBA3EhD0EAIQwCQCAEQQJrQQNJBEBBACEKIAMhBAwBCyAKQXxxIRVBACEKIAMhBEEAIQ0DQCAJIApBAnQiA0EMciIOaigCACALIA5qKAIAbCAJIANBCHIiDmooAgAgCyAOaigCAGwgAyAJaigCACADIAtqKAIAbCAEaiAJIANBBHIiDmooAgAgCyAOaigCAGxqamohBCAKQQRqIQogDUEEaiINIBVHDQALCyAPRQ0AA0AgCSAKQQJ0IgNqKAIAIAMgC2ooAgBsIARqIQQgCkEBaiEKIAxBAWoiDCAPRw0ACwsgBSAZaiAXIABBAnRqKgIAIBggBEECdGoqAgAgBxESADoAACAJBEAgCRC8AwsgAQRAIAEQvAMLIBYEQCAWELwDCyAFQQFqIgUgFEcNAAsLIAgoAiAiAQRAIAggATYCJCABELwDCyAIKAJQIgEEQCAIIAE2AlQgARC8AwsgCCgCcCIBBEAgCCABNgJ0IAEQvAMLIAgoApABIgEEQCAIIAE2ApQBIAEQvAMLIAgoArABIgEEQCAIIAE2ArQBIAEQvAMLIAgoAuABIgEEQCAIIAE2AuQBIAEQvAMLIBEEQCARELwDCyAQBEAgEBC8AwsgCEHwAWokAAwBCxAAAAsLphgBFH8gABALIQAgAxALIQMgBhALIQYgACgCACEXIAAoAgQhCyADKAIAIRggAygCBCEDIAYoAgAhGSABIQogBSEGQQAhAUEAIQUjAEHwAWsiCCQAIAJBAnQhEgJAAkAgAgRAIAJBAEgNASASEIAEIhAgCiASENIDIAJBAnRqIQkLIAZBAnQhEyAGBEAgBkEASA0BIBMQgAQiESAEIBMQ0gMgBkECdGohAQsgCEEANgLYASAIQgA3A9ABIAkgEGsiCkECdSEMIAoEQCAKQQBIDQEgCCAKEIAEIgk2AtABIAggCSAMQQJ0ajYC2AEgCCAJIBAgChDSAyAKajYC1AELIAhBADYCyAEgCEIANwPAASABIBFrIgRBAnUhACAEBEAgBEEASA0BIAggBBCABCIBNgLAASAIIAEgAEECdGo2AsgBIAggASARIAQQ0gMgBGo2AsQBCyAIQeABaiAIQdABaiAIQcABahDkASAIKALAASIBBEAgCCABNgLEASABELwDCyAIKALQASIBBEAgCCABNgLUASABELwDCyAIQQA2AqgBIAhCADcDoAEgCCgC5AEgCCgC4AEiDWsiAQRAIAFBAEgNASAIIAEQgAQiCTYCoAEgCCAJNgKkASAIIAkgAUECdUECdGo2AqgBIAggCSANIAEQ0gMgAWo2AqQBCyAIQbABaiAIQaABahDjASAIKAKgASIBBEAgCCABNgKkASABELwDC0EBIRQgCCgC4AEiASAIKALkASIJRwRAA0AgASgCACAUbCEUIAFBBGoiASAJRw0ACwsgCEEANgKIASAIQgA3A4ABIAoEQCAKQQBIDQEgCCAKEIAEIgE2AoABIAggASAMQQJ0ajYCiAEgCCABIBAgChDSAyAKajYChAELIAhBkAFqIAhBgAFqEOMBIAgoAoABIgEEQCAIIAE2AoQBIAEQvAMLIAhBADYCaCAIQgA3A2AgBARAIARBAEgNASAIIAQQgAQiATYCYCAIIAEgAEECdGo2AmggCCABIBEgBBDSAyAEajYCZAsgCEHwAGogCEHgAGoQ4wEgCCgCYCIBBEAgCCABNgJkIAEQvAMLIAhBADYCSCAIQgA3A0AgCgRAIAggChCABCIBNgJAIAggASAMQQJ0ajYCSCAIIAEgECAKENIDIApqNgJECyAIQQA2AjggCEIANwMwIAgoAuQBIAgoAuABIgprIgEEQCABQQBIDQEgCCABEIAEIgk2AjAgCCAJNgI0IAggCSABQQJ1QQJ0ajYCOCAIIAkgCiABENIDIAFqNgI0CyAIQdAAaiAIQUBrIAhBMGoQ5QEgCCgCMCIBBEAgCCABNgI0IAEQvAMLIAgoAkAiAQRAIAggATYCRCABELwDCyAIQQA2AhggCEIANwMQIAQEQCAIIAQQgAQiATYCECAIIAEgAEECdGo2AhggCCABIBEgBBDSAyAEajYCFAsgCEEANgIIIAhCADcDACAIKALkASAIKALgASIKayIBBEAgAUEASA0BIAggARCABCIJNgIAIAggCTYCBCAIIAkgAUECdUECdGo2AgggCCAJIAogARDSAyABajYCBAsgCEEgaiAIQRBqIAgQ5QEgCCgCACIBBEAgCCABNgIEIAEQvAMLIAgoAhAiAQRAIAggATYCFCABELwDCwJAAkAgCCgCVCAIKAJQRw0AIAgoAiQgCCgCIEcNACAURQ0BQQAhAQNAIAEgGWogFyABIAtwQQJ0aigCACAYIAEgA3BBAnRqKAIAIAcRBAA6AAAgAUEBaiIBIBRHDQALDAELIBRFDQBBACACa0ECdCEaQQAgBmtBAnQhGwNAQQAhFUEAIRYCQCAIKAK0ASAIKAKwASIEayIKQQJ1IgFBAWoiCSABSQ0AIAlBgICAgARPDQMgCUECdBCABCIWQQAgAUECdCIDQQRqENQDIgsgA2oiDkEEaiEVIAoEQCABQQEgAUEBSxsiA0EBcSEPQQAhCSAFIQEgCkEITwRAIANBfnEhDUEAIQMDQCALIAlBAnQiCmogASAEIApqKAIAIgxuIgA2AgAgCyAKQQRyIgpqIAEgACAMbGsiASAEIApqKAIAIgpuIgw2AgAgASAKIAxsayEBIAlBAmohCSADQQJqIgMgDUcNAAsLIA4gDwR/IAsgCUECdCIJaiABIAQgCWooAgAiCW4iCjYCACABIAkgCmxrBSABCzYCAAwBCyALIAU2AgALAkAgEkUEQEEAIQ1BACEBDAELIBJBAEgNAyASEIAEIQ0gAkUEQCANIQEMAQsgDSAVIBpqIBIQ0gMiCSEBIAkgEmohDQsCQCAIKAJUIAgoAlAiCmsiCUUNACAJQQJ1IglBASAJQQFLGyIEQQNxIQxBACELQQAhCSAEQQFrQQNPBEAgBEF8cSEAQQAhAwNAIAEgCiAJQQJ0IgRqKAIAQQJ0akEANgIAIAEgCiAEQQRyaigCAEECdGpBADYCACABIAogBEEIcmooAgBBAnRqQQA2AgAgASAKIARBDHJqKAIAQQJ0akEANgIAIAlBBGohCSADQQRqIgMgAEcNAAsLIAxFDQADQCABIAogCUECdGooAgBBAnRqQQA2AgAgCUEBaiEJIAtBAWoiCyAMRw0ACwsCQAJAAkAgDSABa0ECdSIADgICAAELIAEoAgAhAAwBCyABIABBAWsiCUECdGooAgAhBCAJRQRAIAQhAAwBCyAIKAKQASEKIAlBA3EhDUEAIQsCQCAAQQJrQQNJBEBBACEJIAQhAAwBCyAJQXxxIQ5BACEJIAQhAEEAIQMDQCABIAlBAnQiBEEMciIMaigCACAKIAxqKAIAbCABIARBCHIiDGooAgAgCiAMaigCAGwgASAEaigCACAEIApqKAIAbCAAaiABIARBBHIiDGooAgAgCiAMaigCAGxqamohACAJQQRqIQkgA0EEaiIDIA5HDQALCyANRQ0AA0AgASAJQQJ0IgRqKAIAIAQgCmooAgBsIABqIQAgCUEBaiEJIAtBAWoiCyANRw0ACwsCQCATRQRAQQAhD0EAIQkMAQsgE0EASA0DIBMQgAQhDyAGRQRAIA8hCQwBCyAPIBUgG2ogExDSAyIKIQkgCiATaiEPCwJAIAgoAiQgCCgCICIEayIKRQ0AIApBAnUiCkEBIApBAUsbIgtBA3EhDUEAIQNBACEKIAtBAWtBA08EQCALQXxxIQ5BACEMA0AgCSAEIApBAnQiC2ooAgBBAnRqQQA2AgAgCSAEIAtBBHJqKAIAQQJ0akEANgIAIAkgBCALQQhyaigCAEECdGpBADYCACAJIAQgC0EMcmooAgBBAnRqQQA2AgAgCkEEaiEKIAxBBGoiDCAORw0ACwsgDUUNAANAIAkgBCAKQQJ0aigCAEECdGpBADYCACAKQQFqIQogA0EBaiIDIA1HDQALCwJAAkACQCAPIAlrQQJ1IgQOAgIAAQsgCSgCACEEDAELIAkgBEEBayIKQQJ0aigCACEDIApFBEAgAyEEDAELIAgoAnAhCyAKQQNxIQ9BACEMAkAgBEECa0EDSQRAQQAhCiADIQQMAQsgCkF8cSEVQQAhCiADIQRBACENA0AgCSAKQQJ0IgNBDHIiDmooAgAgCyAOaigCAGwgCSADQQhyIg5qKAIAIAsgDmooAgBsIAMgCWooAgAgAyALaigCAGwgBGogCSADQQRyIg5qKAIAIAsgDmooAgBsampqIQQgCkEEaiEKIA1BBGoiDSAVRw0ACwsgD0UNAANAIAkgCkECdCIDaigCACADIAtqKAIAbCAEaiEEIApBAWohCiAMQQFqIgwgD0cNAAsLIAUgGWogFyAAQQJ0aigCACAYIARBAnRqKAIAIAcRBAA6AAAgCQRAIAkQvAMLIAEEQCABELwDCyAWBEAgFhC8AwsgBUEBaiIFIBRHDQALCyAIKAIgIgEEQCAIIAE2AiQgARC8AwsgCCgCUCIBBEAgCCABNgJUIAEQvAMLIAgoAnAiAQRAIAggATYCdCABELwDCyAIKAKQASIBBEAgCCABNgKUASABELwDCyAIKAKwASIBBEAgCCABNgK0ASABELwDCyAIKALgASIBBEAgCCABNgLkASABELwDCyARBEAgERC8AwsgEARAIBAQvAMLIAhB8AFqJAAMAQsQAAALC98DAQh/IwBBIGsiCSQAIAAQCyEAIAMQCyEDIAYQCygCACELIAMoAgAhDCAAKAIAIQ0gCUEANgIUAkACQAJAAkBBvK4BKAIAIgpFDQAgB0GV08feBWwiAEEYdiAAc0GV08feBWxB1Mye+gZzIgBBDXYgAHNBldPH3gVsIgBBD3YgAHMhBkG4rgEoAgACfyAKQQFrIAZxIAppIgNBAU0NABogBiAGIApJDQAaIAYgCnALIg5BAnRqKAIAIgBFDQAgACgCACIARQ0AIApBAWshDyADQQFLIRADQAJAIAYgACgCBCIDRwRAAkAgEEUEQCADIA9xIQMMAQsgAyAKSQ0AIAMgCnAhAwsgAyAORg0BDAMLIAAoAgggB0YNAwsgACgCACIADQALC0MAAID/QwAAgH9BACAJQRRqIAcRFgBFBEAgCSAHNgIIIAkgCSgCFDYCDCAJQRhqQbiuASAJQQhqIAlBCGoQzQFBqK0BQaitASgCAEEBajYCACAJKAIUIQAMAgtBsxxBABAYDAILIAkgACgCDCIANgIUCyAAIAIgASAFIAQgDSAMIAtBrK0BKAIAIAgRFAAiAARAIAkgADYCAEHTGyAJEBgMAQsgCSgCFEGsrQEoAgAQrwILIAlBIGokAAvWBAMHfwJ9AX4gAigCACIIQZXTx94FbCICQRh2IAJzQZXTx94FbEHUzJ76BnMiAkENdiACc0GV08feBWwiAkEPdiACcyEGIAACfwJAIAEoAgQiBEUNACABKAIAAn8gBiAEQQFrcSAEaSIFQQFNDQAaIAYgBCAGSw0AGiAGIARwCyIHQQJ0aigCACICRQ0AIARBAWshCSAFQQFLIQoDQCACKAIAIgJFDQEgBiACKAIEIgVHBEACQCAKRQRAIAUgCXEhBQwBCyAEIAVLDQAgBSAEcCEFCyAFIAdHDQILIAIoAgggCEcNAAtBAAwBC0EQEIAEIQIgAykCACENIAIgBjYCBCACIA03AgggAkEANgIAAkBBACAEIAEoAgxBAWqzIgwgASoCECILIASzlF4bDQAgBCAEQQFrcUEARyAEQQNJciAEQQF0ciEFIAECfyAMIAuVjSILQwAAgE9dIAtDAAAAAGBxBEAgC6kMAQtBAAsiBCAFIAQgBUsbEBUgASgCBCIEIARBAWtxRQRAIARBAWsgBnEhBwwBCyAEIAZLBEAgBiEHDAELIAYgBHAhBwsCQCABKAIAIAdBAnRqIgYoAgAiBUUEQCACIAEoAgg2AgAgASACNgIIIAYgAUEIajYCACACKAIAIgVFDQEgBSgCBCEFAkAgBCAEQQFrIgZxRQRAIAUgBnEhBQwBCyAEIAVLDQAgBSAEcCEFCyABKAIAIAVBAnRqIAI2AgAMAQsgAiAFKAIANgIAIAUgAjYCAAsgASABKAIMQQFqNgIMQQELOgAEIAAgAjYCAAutBAIBfAJ/AkAgACAAWwRAA0AgALsQ4ANEGC1EVPshGUCgEOADIgFEGC1EVPsh6T9jBEAjAEEQayICJAACQCABvUIgiKdB/////wdxIgNB+8Ok/wNNBEAgA0GAgMDyA0kNASABRAAAAAAAAAAAQQAQzgMhAQwBCyADQYCAwP8HTwRAIAEgAaEhAQwBCwJAAkACQAJAIAEgAhDNA0EDcQ4DAAECAwsgAisDACACKwMIQQEQzgMhAQwDCyACKwMAIAIrAwgQywMhAQwCCyACKwMAIAIrAwhBARDOA5ohAQwBCyACKwMAIAIrAwgQywOaIQELIAJBEGokACABtg8LIAFEGC1EVPsh+T9jBEAjAEEQayICJAACfEQYLURU+yHpPyABRBgtRFT7Iem/oKEiAb1CIIinQf////8HcSIDQfvDpP8DTQRARAAAAAAAAPA/IANBnsGa8gNJDQEaIAFEAAAAAAAAAAAQywMMAQsgASABoSADQYCAwP8HTw0AGgJAAkACQAJAIAEgAhDNA0EDcQ4DAAECAwsgAisDACACKwMIEMsDDAMLIAIrAwAgAisDCEEBEM4DmgwCCyACKwMAIAIrAwgQywOaDAELIAIrAwAgAisDCEEBEM4DCyEBIAJBEGokACABtg8LIAFEGC1EVPshCUBjRQ0CRBgtRFT7Ifk/IAFEGC1EVPsh+b+gobYiACAAWw0ACwtDAADAfw8LRBgtRFT7IRlAIAGhthDOAYwLQQEBf0HUrgEoAgAiAARAA0AgACgCACEBIAAQ9wMgASIADQALC0HMrgEoAgAhAEHMrgFBADYCACAABEAgABD3AwsLywMBCX8jAEEgayIEJAAgABALIQAgARALIgcoAgAhCCAAKAIAIQkgBEEANgIUAkACQAJAAkBB0K4BKAIAIgVFDQAgAkGV08feBWwiAEEYdiAAc0GV08feBWxB1Mye+gZzIgBBDXYgAHNBldPH3gVsIgBBD3YgAHMhBkHMrgEoAgACfyAFQQFrIAZxIAVpIgFBAU0NABogBiAFIAZLDQAaIAYgBXALIgpBAnRqKAIAIgBFDQAgACgCACIARQ0AIAVBAWshCyABQQFLIQwDQAJAIAYgACgCBCIBRwRAAkAgDEUEQCABIAtxIQEMAQsgASAFSQ0AIAEgBXAhAQsgASAKRg0BDAMLIAAoAgggAkYNAwsgACgCACIADQALC0EBQQFBAUEBIARBFGogAhELAEUEQCAEIAI2AgggBCAEKAIUNgIMIARBGGpBzK4BIARBCGogBEEIahDNAUGorQFBqK0BKAIAQQFqNgIAIAQoAhQhAAwCC0GzHEEAEBgMAgsgBCAAKAIMIgA2AhQLIAAgBygCBCAJIAhBrK0BKAIAIAMRCwAiAARAIAQgADYCAEHTGyAEEBgMAQsgBCgCFEGsrQEoAgAQrwILIARBIGokAAsQAEHgrgFB5K4BKAIAENIBCyAAIAEEQCAAIAEoAgAQ0gEgACABKAIEENIBIAEQ9wMLC1cBAn9B9K4BKAIAIgAEQANAIAAoAgAhAiAAKAIMIgEEQCAAIAE2AhAgARD3AwsgABD3AyACIgANAAsLQeyuASgCACEAQeyuAUEANgIAIAAEQCAAEPcDCwtXAQJ/QYivASgCACIABEADQCAAKAIAIQIgACgCDCIBBEAgACABNgIQIAEQ9wMLIAAQ9wMgAiIADQALC0GArwEoAgAhAEGArwFBADYCACAABEAgABD3AwsLwRkDKn8EfQJ+IwBB4ABrIg0kAEMAAIB/QwAAwEBDAACAfyAIQQJGGyAIQQFGGyE4QwAAAABDAACA/yAIQQFrQQJJGyE5IAEoAgAhGgJAAkAgBg0AIAcNACAaQQFHDQBBASEaIAQoAgBBAUcNAEEAIAggCEEDa0ECSRshBSAAEAshBiADEAshByAMEAsoAgAhEyAHKAIAIREgBigCACEPQQAhACAJBEAgCRALKAIAIQALIA1BADYCMCANIAU2AlggDSAJNgJUIA0gAzYCUAJAAkACQEHkrgEoAgAiBkUNAEHkrgEhAgNAAkACQCAGKAIQIgcgA0kNAAJAIAMgB0kNACAGKAIUIgcgCUkNASAHIAlLDQAgBigCGCAFTw0AIAZBBGohBgwCCyAGIQIMAQsgBkEEaiEGCyAGKAIAIgYNAAsgAkHkrgFGDQAgAigCECIGIANLDQAgAyAGSw0BIAIoAhQiBiAJSw0AIAYgCUkNASACKAIYIAVNDQELIAQoAgQhBiAEKAIIIQcgDUEwaiEQIwBBEGsiBSQAQQIhBAJAIDm8Qf////8HcUGAgID8B0sNACA4vCECIDggOV8NACACQf////8HcUGAgID8B0sNAEGktgFBhLYBQaS2ASgCABtBhLYBIDiMIDlbG0GEtgEgOEMAAIB/WxshAkG0tgEoAgAiBARAIAVBCGogOSA4IAQREQALAn8gBUEIaiEhQQAhBEEBIQ4CQEHArwEoAgAiEkEBcUUNAEEFIQ4gEkECcUECRw0AQQIhDgJAIAZBAWsgBk8NACAHQQFrIAdPDQFBBiEOEPABIgRFDQBBu7YBLQAAIRcgBCAHQbm2AS0AACISEOoBIAZBAUG6tgEtAAB0IhQQ/AFBAnRBBGpsIhsQ/QEiGDYCdCAYRQ0BIBhBACAbENQDGiAHIAYgEiAUQQEgF3QgESAAIAQoAnRBAEHnAREMACAEIAc2AmwgBCAGNgJUIAQgBzYCOCAEIAY2AjQgBEHQAWogIUEIENIDGiAEQQQ2ApQCIARBATYCyAEgBEEoNgKQAiACNQIAITsgAjUCCCE8Qbi2AS0AACEOIARBADYCgAQgBCAUOgCiAiAEIBI6AKECIAQgDjoAoAIgBCA7IDxCIIaENwKYAiAQIAQ2AgBBAAwCC0EAIQQLIAQQlQIgDgshBAsgBUEQaiQAIAQiBkUEQCANIA0oAlg2AiggDSANKQNQNwMgIA0gDSgCMDYCLCANQUBrIRAgDUEgaiEEIA1BIGohDgJAAkBB5K4BKAIAIgAEQEHkrgEhAiAEKAIIIQUgBCgCBCEGIAQoAgAhBwNAAkACQAJAAkAgByAAKAIQIgRJDQAgBCAHSQ0CIAYgACgCFCIESQ0AIAQgBkkNAiAFIAAoAhgiBE8NAQsgACgCACIEDQIMBQsgBCAFTw0FCyAAQQRqIQIgACgCBCIERQ0EIAIhAAsgACECIAQhAAwACwALQeSuASEACyAAIQILIBAgAigCACIEBH9BAAVBIBCABCEEIA4pAgghOyAOKQIAITwgBCAANgIIIARCADcCACAEIDs3AhggBCA8NwIQIAIgBDYCAEHgrgEoAgAoAgAiAAR/QeCuASAANgIAIAIoAgAFIAQLIQBB5K4BKAIAIAAQJUHorgFB6K4BKAIAQQFqNgIAQQELOgAEIBAgBDYCACADIA1B0ABqQeyuARDWASAJBEAgCSANQdAAakGArwEQ1gELQaitAUGorQEoAgBBAWo2AgAgDSgCMCEGDAILIA0gBjYCEEGVKyANQRBqEBgMAwsgDSACKAIcIgY2AjALIAEoAgQhAEGsrQEoAgAhASAGKAKQAkEoRgR/IAZB0AFqIREgARCvAyEHIAZBADYCgARBwK8BLQAAQQFxBH8gBiAABH8gBiATNgJwIAZBATYCaCAGIAA2AmQgBiAPNgJYIAZBATYCUCAGIAA2AkwgBkEBNgIAIAYoApgCIQIgBi0AoQIhAyAGLQCgAiEEIAYoAjQhBSAAQQFGBEBBASAEIAYoApwCIgEbIQQgASACIAEbIQILIAYoAjghASAGKAJUIQkgBigCdCEQIAYtAKICIQ4gBkGwA2oiEkIANwMAIAYgAjYCrAMgBkECNgKoAyAGQQA2AqQDIAYgA0ECdDYCoAMgBiATNgKYAyAGQQA2ApQDIAYgEDYCjAMgBiAJQQJ0NgKIAyAGIA82AoQDIAYgBUECdDYCgAMgBkIANwO4AyAGQgA3A8ADIAYgBigCbEECdDYCnAMgBiAFIA4Q/AFBAnRBBGo2ApADIBIgEUEIENIDGiAEQf8BcSETAn8gASAHQQJJDQAaIAEgACATEOsBIAFsIAdBBWwQ6wEiDyABTw0AGiABIAEgAyAPbBDrASADbBDuAQshDyAGQQU2AqgCIAYgDzYCzAIgBiATNgLIAiAGIAE2ArQCIAYgADYCsAIgBkHfATYCrAJBAQVBAgs2AoAEQQAFQQELBUECCyIGBEAgDSAGNgIAQacqIA0QGAwCCyANKAIwQaytASgCABCvAgwBCyAEQQRBCCAHG2ooAgAhFSABQQhBBCAGG2ooAgAhFiABQQRBCCAGG2ooAgAhGQJAIAIEQCACQQBIDQEgAkECdCIREIAEIhwgASARENIDIAJBAnRqIRELIAUEfyAFQQBIDQEgBUECdCIBEIAEIh0gBCABENIDIAVBAnRqBUEACyECIA1BADYCWCANQgA3A1AgESAcayIBBEAgAUEASA0BIA0gARCABCIFNgJQIA0gBSABQQJ1QQJ0ajYCWCANIAUgHCABENIDIAFqNgJUCyANQSBqIA1B0ABqEOMBIA0oAlAiAQRAIA0gATYCVCABEPcDCyANQQA2AjggDUIANwMwIAIgHWsiAQRAIAFBAEgNASANIAEQgAQiAjYCMCANIAIgAUECdUECdGo2AjggDSACIB0gARDSAyABajYCNAsgDUFAayANQTBqEOMBIA0oAjAiAQRAIA0gATYCNCABEPcDCyANKAJAIgEoAgQhBSANKAIgIgIoAgQhBCABKAIAISUgAigCACEmIAAQCyECIAMQCyEDIAwQCygCACEkIAMoAgAhASACKAIAIQICfyAJRQRAQX8hIkEADAELIAkQCyIDKAIEQQFrISIgAygCAAshJyAaIBUgFmwiKGwiA0EASgRAICRBACADIANB/////wNxQQBHa0ECdEEEahDUAxoLIBoEQCAFQQEgBxshKUEBIAUgBxshBUEBIAQgBhshKiAEQQEgBhshBANAIBYEQCAPIChsIStBACEOQTAhHgNAIA5BMGohGyAVBEAgFiAbIBYgG0kbISwgFiAeIBYgHkkbIS1BMCEfQQAhEgNAIBJBMGohGCAZBEAgFSAYIBUgGEkbIS4gFSAfIBUgH0kbIS9BACEjQTAhIEEAIRQDQCAUIhBBMGohFCAOICxJBEAgGSAUIBQgGUsbITAgI0EwbEEBciExIBBBAXIhISAFIBBsITIgBCAQbCEzIBkgICAZICBJGyIRQQFxITQgDiEXA0AgEiAuSQRAIBUgF2whNSAXICpsITYgEiETA0BDAAAAACE3AkAgECAwTw0AIB0oAgBBAWsiBiAPIAYgD0kbICVsIBMgKWxqIQMgHCgCAEEBayIGIA8gBiAPSRsgJmwgNmohByAQIQYgNARAIAIgByAzakECdGoqAgAgASADIDJqQQJ0aioCAJRDAAAAAJIhNyAhIQYLIBEgMUYNAANAIAIgByAGQQFqIgAgBGxqQQJ0aioCACABIAMgACAFbGpBAnRqKgIAlCACIAcgBCAGbGpBAnRqKgIAIAEgAyAFIAZsakECdGoqAgCUIDeSkiE3IAZBAmoiBiARRw0ACwsgJCATIDVqIgYgK2pBAnRqIgMqAgAhOiADIDkgOCA3IDqSIAkEfSAnICIgBiAGICJLG0ECdGoqAgAFQwAAAAALkiI3IDcgOF4bIjcgNyA5XRs4AgAgE0EBaiITIC9HDQALCyAXQQFqIhcgLUcNAAsLICNBAWohIyAgQTBqISAgFCAZSQ0ACwsgH0EwaiEfIBgiEiAVSQ0ACwsgHkEwaiEeIBsiDiAWSQ0ACwsgD0EBaiIPIBpHDQALCyANKAJAIgYEQCANIAY2AkQgBhD3AwsgDSgCICIGBEAgDSAGNgIkIAYQ9wMLIB0EQCAdEPcDCyAcRQ0BIBwQ9wMMAQsQAAALIAwQCyIGKAIAIQMCQAJAAkACQAJAIAhBA2sOBAABAgMECyADIAYoAgQgCiAMEN0BDAMLIAMgBigCBCALIAwQ2wEMAgsgAyAGKAIEIAwQ4AEMAQsgAyAGKAIEIAwQ2gELIA1B4ABqJAAL1gUBCX8jAEEgayIGJAAgBiAANgIUAkACQAJAAkAgAigCBCIFRQ0AIAIoAgAiCgJ/IAVBAWsgAHEgBWkiCUEBTQ0AGiAAIAAgBUkNABogACAFcAsiB0ECdGooAgAiA0UNACADKAIAIgNFDQAgBUEBayEIIAlBAUshCwNAAkAgACADKAIEIgRHBEACQCALRQRAIAQgCHEhBAwBCyAEIAVJDQAgBCAFcCEECyAEIAdGDQEMAwsgAygCCCAARg0DCyADKAIAIgMNAAsLIAZBDBCABCIANgIIIAYgAEEMaiIDNgIQIAAgASgCCDYCCCAAIAEpAgA3AgAgBiADNgIMIAZBGGogAiAGQRRqIAZBFGogBkEIahC8ASAGKAIUQcwAEAwgBigCCCIARQ0BIAYgADYCDCAAEPcDDAELIAoCfyAAIAhxIAlBAU0NABogACAAIAVJDQAaIAAgBXALIgJBAnRqKAIAIgNFDQEgAygCACIDRQ0BIAlBAUshBwNAAkACQCAAIAMoAgQiBEcEQAJAIAdFBEAgBCAIcSEEDAELIAQgBUkNACAEIAVwIQQLIAIgBEYNAQwFCyADKAIIIABGDQELIAMoAgAiAw0BDAMLCyADKAIQIgAgAygCFCICSQRAIAAgASkCADcCACAAIAEoAgg2AgggAyAAQQxqNgIQDAELIAAgAygCDCIEayIFQQxtIghBAWoiAEHWqtWqAU8NASAAIAIgBGtBDG0iAkEBdCIHIAAgB0sbQdWq1aoBIAJBqtWq1QBJGyICBH8gAkHWqtWqAU8NAiACQQxsEIAEBUEACyIHIAhBDGxqIgAgASkCADcCACAAIAEoAgg2AgggACAFQXRtQQxsaiEBIAcgAkEMbGohAiAAQQxqIQAgBUEASgRAIAEgBCAFENIDGgsgAyACNgIUIAMgADYCECADIAE2AgwgBEUNACAEEPcDCyAGQSBqJAAPCxAAAAsUACAAQeyuARDYASAAQYCvARDYAQu6BgEJfyMAQRBrIgkkACAJIAA2AgwCQCABKAIEIgNFDQAgASgCAAJ/IANBAWsgAHEgA2kiBEEBTQ0AGiAAIAAgA0kNABogACADcAsiBUECdGooAgAiAkUNACACKAIAIgJFDQAgA0EBayEGIARBAUshBwNAAkACQCAAIAIoAgQiBEcEQAJAIAdFBEAgBCAGcSEEDAELIAMgBEsNACAEIANwIQQLIAQgBUYNAQwECyACKAIIIABGDQELIAIoAgAiAg0BDAILCyACKAIMIgcgAigCECIKRwRAQeSuASgCACECA0ACf0EAIAIiBkUNABogBygCCCEIIAcoAgQhBSAHKAIAIQRB5K4BIQMDQAJAAkAgAigCECIAIARJDQACQCAAIARLDQAgAigCFCIAIAVJDQEgACAFSw0AIAIoAhggCE8NACACQQRqIQIMAgsgAiEDDAELIAJBBGohAgsgAigCACICDQALIAYgA0HkrgFGDQAaIAYgAygCECICIARLDQAaAkAgAiAESQ0AIAYgAygCFCICIAVLDQEaIAIgBUkNACAGIAggAygCGEkNARoLIAMoAhwQlQJBqK0BQaitASgCAEEBazYCACAHIQACQEHkrgEoAgAiBkUNACAAKAIIIQggACgCBCEFIAAoAgAhA0HkrgEhAiAGIQADQAJAAkAgACgCECIEIANJDQACQCADIARJDQAgACgCFCIEIAVJDQEgBCAFSw0AIAAoAhggCE8NACAAQQRqIQAMAgsgACECDAELIABBBGohAAsgACgCACIADQALIAJB5K4BRg0AIAMgAigCECIASQ0AAkAgACADSQ0AIAUgAigCFCIASQ0BIAAgBUkNACAIIAIoAhhJDQELAkAgAigCBCIARQRAIAIoAggiAygCACACRg0BIAJBCGohBANAIAQoAgAiAEEIaiEEIAAgACgCCCIDKAIARw0ACwwBCwNAIAAiAygCACIADQALCyACQeCuASgCAEYEQEHgrgEgAzYCAAtB6K4BQeiuASgCAEEBazYCACAGIAIQvwEgAhC8AwtB5K4BKAIACyECIAdBDGoiByAKRw0ACwsgASAJQQxqEBMLIAlBEGokAAsQAEGUrwFBmK8BKAIAEJEBC8kEAQV/IwBBIGsiBSQAIAIQCygCACEGIAVBADYCHAJAAkACQAJAAkBBmK8B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IAAoAhwiBCACbGogAyAAKAIodGogACgCJCABbGogBCAAKAIgIABBMGogACgCLBEFAAtYACADIAQgACgCACAAKAIEIAAoAggiAyABbGogAyAAKAIMIAAoAhAgAmxqIAAoAhggASAAKAIcIgFsaiACIAAoAih0aiABIAAoAiAgAEEwaiAAKAIsEQUAC5QBACAFIAYgACgCCCAAKAIEIAAoAhAgAyAAKAIAbEECdGogACgCHCAAKAIMIARsaiAAKAIwIAJsaiAAKAIgIAMgACgCJCIDbGogACgCNCACbGogACgCPCABbGogBCAAKAJAdGogAyAAKAIoIAAoAhQgACgCLCACbGogACgCOCABbGogACgCGCAAQcgAaiAAKAJEEQgAC4IBACAEIAUgACgCCCAAKAIEIAAoAhAgAiAAKAIAbEECdGogACgCHCAAKAIMIANsaiAAKAIwIAFsaiAAKAIgIAIgACgCJCICbGogACgCNCABbGogAyAAKAJAdGogAiAAKAIoIAAoAhQgACgCLCABbGogACgCGCAAQcgAaiAAKAJEEQgAC3kAIAQgBSAAKAIIIAAoAgQgACgCECACIAAoAgBsQQJ0aiAAKAIcIAAoAgwgA2xqIAAoAiAgAiAAKAIkIgJsaiAAKAI8IAFsaiADIAAoAkB0aiACIAAoAiggACgCFCAAKAI4IAFsaiAAKAIYIABByABqIAAoAkQRCAALZwAgAyAEIAAoAgggACgCBCAAKAIQIAEgACgCAGxBAnRqIAAoAhwgACgCDCACbGogACgCICABIAAoAiQiAWxqIAIgACgCQHRqIAEgACgCKCAAKAIUIAAoAhggAEHIAGogACgCRBEIAAtgACAAKAIoIAAoAiQgACgCACAAKAIIIAJsaiAAKAIUIAAoAhggACgCHCABbGogACgCICACbGogACgCBCAAKAIwIAAoAgwgACgCECABbGogACgCLCAAQTRqIAAoAkwRBQALWwAgACgCHCAAKAIgIAAoAiQgACgCACAAKAIEIAJsaiAAKAIIIAAoAgwgAWxqIAAoAhAgACgCFCABbGogACgCGCACbGogACgCKCAAKAIsIABBMGogACgCOBEMAAtgACAAKAIcIAAoAiAgACgCJCAAKAIAIAAoAgQgAmxqIAAoAgggACgCDCABbGogACgCKCAAKAIQIAAoAhQgAWxq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KgIAOAIAIARBAWohBCAGQQRqIQYgCUEBaiIJIAtHDQALCyAFIAFrIQUgBiAOQQJ0aiEEIAEgB2oiByAASQ0ACwsLMQAgAEGAgIDaBDYCCCAAQYCAgNoEIAFrNgIMIAAgAyABa7I4AgQgACACIAFrsjgCAAs9ACAAQYCAgNoENgIAIABBgICA2gQgAWs2AgwgACADIAFrskMAAEBLkjgCCCAAIAIgAWuyQwAAQEuSOAIECwkAIAAgATgCAAsXACAAIAM4AgggACACOAIEIAAgATgCAAsQACAAIAI4AgQgACABOAIACx0AIABBgICAhgQ2AgggAEKr1arxg4CAoMAANwIACzwAIABBz9i6lQQ2AhggAEKF///3g4CAwD83AhAgAEKAgMb5s5Cgr7l/NwIIIABCgICAwrTHqty/fzcCAAtVACAAQvaBgPiDgIDAPzcCJCAAQo79/q3r4aqVPjcCHCAAQrvU4v2DwNyYv383AhQgAEKjwqqMjICAoMkANwIMIAAgAzgCCCAAIAI4AgQgACABOAIAC28AIABBgICA/AM2AjQgAELY1Krx8////z43AiwgAELHp6Tgs/GqlT03AiQgAELjhYKow7Pu2jo3AhwgAEK71OL9g8TcmL9/NwIUIABCo8KqjPyPgKDLADcCDCAAIAM4AgggACACOAIEIAAgATgCAAtPACAAQvv///vziavXQjcCICAAQsDaqvGz3P//PjcCGCAAQs6fn+DToeeVPTcCECAAQoDkxfnr0e/ftX83AgggAEK71OL984+AoMsANwIACzAAIABCgICA+IOAgIAINwIQIABCgICAvICAgIA/NwIIIABCgICAgIiAgIDwADcCAAtFACAAQYD8ATsBHCAAQYD4/f8ANgIYIABCgICAxICAgIDAADcCECAAQoCAgLyHgIDA/wA3AgggAEL/////h4CAwAc3AgALOAAgAEGAgIDaBDYCDCAAIAE4AgAgAEGAgIDaBCACazYCECAAIAQgAmuyOAIIIAAgAyACa7I4AgQLRAAgAEGAgIDaBDYCBCAAIAE4AgAgAEGAgIDaBCACazYCECAAIAQgAmuyQwAAQEuSOAIMIAAgAyACa7JDAABAS5I4AggLEAAgACABOAIEIAAgAjYCAAsMACACIAEgABDSAxoLgwECBH8CfSADKAIUIQQgAyoCECEIIAMoAgwh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AygCACAEaiIBIAMoAiAgBGogEhshCSABIAMoAhwgBGogExshCiABIAMoAhggBGogFBshCyABIAMoAhQgBGogFRshDCABIAMoAhAgBGogFhshDSABIAMoAgwgBGogFxshDiABIAMoAgggBGogGBshDyABIAMoAgQgBGogGRshECACIREDQCAFIAkqAgAiKSAKKgIAIiIgCyoCACIjIAwqAgAiJCANKgIAIiUgDioCACImIA8qAgAiJyAQKgIAIiggASoCACIqICggKl4iGhsiKCAnICheIhsbIicgJiAnXiIcGyImICUgJl4iHRsiJSAkICVeIh4bIiQgIyAkXiIfGyIjICIgI14iIBsiIiAiICldIiEbOAIAIAZBCEEHQQZBBUEEQQNBAiAaIBsbIBwbIB0bIB4bIB8bICAbICEbNgIAIAZBBGohBiAFQQRqIQUgCUEEaiEJIApBBGohCiALQQRqIQsgDEEEaiEMIA1BBGohDSAOQQRqIQ4gD0EEaiEPIBBBBGohECABQQRqIQEgEUEBayIRDQALIAUgCGohBSADIAdqIQMgAEEBayIADQALC4sEAgx/An0gAy8BHCEJIAMvARohCiADLwEYIQsgAygCFCEFIAMqAhAhECADKAIMIQYgAyoCCCERIAMoAgQhDCADKAIAIQMgAEEQTwRAA0AgASgCACEOIAEoAgQhByABKAIIIQggAiAJIAsgECARIAEoAgwiDSADcSIEvpSUIAQgDGogBnEiDyAFIAUgD0kbvpK8Ig9BDXZxIAogD3FqIAQgBksbIAQgDXNBEHZyOwEGIAIgCSALIBAgESADIAhxIgS+lJQgBCAMaiAGcSINIAUgBSANSRu+krwiDUENdnEgCiANcWogBCAGSxsgBCAIc0EQdnI7AQQgAiAJIAsgECARIAMgB3EiBL6UlCAEIAxqIAZxIgggBSAFIAhJG76SvCIIQQ12cSAIIApxaiAEIAZLGyAEIAdzQRB2cjsBAiACIAkgCyAQIBEgAyAOcSIEvpSUIAQgDGogBnEiByAFIAUgB0kbvpK8IgdBDXZxIAcgCnFqIAQgBksbIAQgDnNBEHZyOwEAIAJBCGohAiABQRBqIQEgAEEQayIAQQ9LDQALCyAABEADQCACIAkgCyAQIBEgASgCACIOIANxIgS+lJQgBCAMaiAGcSIHIAUgBSAHSRu+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CCAJRhshFCAAIRcgAyEJIBlFBEADQCAJKgAaIS0gCSwAGCEVIAksABYhGiAJLAAUIRsgCSwAEiEcIAksABAhHSAJLAAOIR4gCSwADCEfIAksAAghICAJLAAKISEgDCwAACEiIA0sAAAhIyAOLAAAISQgDywAACElIBAsAAAhJiARLAAAIScgEiwAACEoIAkoAgAhKSAULAAAISogEywAACErIAQgLCAJKgAeIAkoAgQgCSwACSAULAABbGogCSwACyATLAABbGogCSwADSASLAABbGogCSwADyARLAABbGogCSwAESAQLAABbGogCSwAEyAPLAABbGogCSwAFSAOLAABbGogCSwAFyANLAABbGogCSwAGSAMLAABbGqylJK8IhggCyALIBhIGyIYIAogCiAYShsgFms6AAEgBCAsIC0gKSAgICpsaiAhICtsaiAfIChsaiAeICdsaiAdICZsaiAcICVsaiAbICRsaiAaICNsaiAVICJsarKUkrwiFSALIAsgFUgbIhUgCiAKIBVKGyAWazoAACAEQQJqIQQgCUEiaiEJIAxBAmohDCANQQJqIQ0gDkECaiEOIA9BAmohDyAQQQJqIRAgEUECaiERIBJBAmohEiATQQJqIRMgFEECaiEUIBdBAmsiF0EBSw0ACwsgAiAFaiECIBcEfyAEICwgCSoAGiAJKAIAIAksAAggFCwAAGxqIAksAAogEywAAGxqIAksAAwgEiwAAGxqIAksAA4gESwAAGxqIAksABAgECwAAGxqIAksABIgDywAAGxqIAksABQgDiwAAGxqIAksABYgDSwAAGxqIAksABggDCwAAGxqspSSvCIJIAsgCSALShsiCSAKIAkgCkgbIBZrOgAAIARBAWoFIAQLIAZqIQQgAUEBayIBDQALC5ADAgp/An0gAkEBayEHIAJBAXEhDyACQQF0IgRBCGohECAEQQZqIREgCSgCDCEOIAkoAgghDCAJKAIEIQ0gCSoCACEUA0AgBSgCBCEKIAUoAgAhCwJ/IA9FBEAgBUEIaiEJIAMhBCACDAELIAVBCmohCSADQQFqIQQgAywAACIAIAUsAAlsIApqIQogBSwACCAAbCALaiELIAcLIQAgAkEBRwRAA0AgBCwAACISIAksAAFsIApqIAQsAAEiEyAJLAADbGohCiAJLAAAIBJsIAtqIAksAAIg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IAIqAhghESABKgIYIRIgAyABKgIcIAIqAhyWOAIcIAMgEiARljgCGCADIBAgD5Y4AhQgAyAOIA2WOAIQIAMgDCALljgCDCADIAogCZY4AgggAyAIIAeWOAIEIAMgBiAFljgCACADQSBqIQMgAkEgaiECIAFBIGohASAAQSBrIgBBH0sNAAsLIAAEQANAIAMgASoCACACKgIAljgCACADQQRqIQMgAkEEaiECIAFBBGohASAAQQRrIgANAAsLC+ABAQh9IAIqAgAhBSAAQSBPBEADQCABKgIAIQYgASoCBCEHIAEqAgghCCABKgIMIQkgASoCECEKIAEqAhQhCyABKgIYIQwgAyABKgIcIAWWOAIcIAMgDCAFljgCGCADIAsgBZY4AhQgAyAKIAWWOAIQIAMgCSAFljgCDCADIAggBZY4AgggAyAHIAWWOAIEIAMgBiAFljgCACADQSBqIQMgAUEgaiEBIABBIGsiAEEfSw0ACwsgAARAA0AgAyABKgIAIAWWOAIAIANBBGohAyABQQRqIQEgAEEEayIADQALCwviAgEQfSAEKgIEIQUgBCoCACEGIABBIE8EQANAIAIqAgAhByABKgIAIQggAioCBCEJIAEqAgQhCiACKgIIIQsgASoCCCEMIAIqAgwhDSABKgIMIQ4gAioCECEPIAEqAhAhECACKgIUIREgASoCFCESIAIqAhghEyABKgIYIRQgAyABKgIcIAIqAhyUIAaXIAWWOAIcIAMgFCATlCAGlyAFljgCGCADIBIgEZQgBpcgBZY4AhQgAyAQIA+UIAaXIAWWOAIQIAMgDiANlCAGlyAFljgCDCADIAwgC5QgBpcgBZY4AgggAyAKIAmUIAaXIAWWOAIEIAMgCCAHlCAGlyAFljgCACADQSBqIQMgAkEgaiECIAFBIGohASAAQSBrIgBBH0sNAAsLIAAEQANAIAMgASoCACACKgIAlCAGlyAFljgCACADQQRqIQMgAkEEaiECIAFBBGohASAAQQRrIgANAAsLC6QCAQp9IAIqAgAhBSAEKgIEIQYgBCoCACEHIABBIE8EQANAIAEqAgAhCCABKgIEIQkgASoCCCEKIAEqAgwhCyABKgIQIQwgASoCFCENIAEqAhghDiADIAUgASoCHJQgB5cgBpY4AhwgAyAFIA6UIAeXIAaWOAIYIAMgBSANlCAH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IAcgCWogCCAJRhshEiAAIRQgAyEJIBVFBEADQCAJKgAaISwgCSwAGCEWIAksABYhFyAJLAAUIRggCSwAEiEZIAksABAhGiAJLAAOIRsgCSwADCEcIAksAAghHSAJLAAKIR4gCiwAACEfIAssAAAhICAMLAAAISEgDSwAACEiIA4sAAAhIyAPLAAAISQgECwAACElIAkoAgAhJiASLAAAIScgESwAACEoIAQgKSAJKgAeIAkoAgQgCSwACSASLAABbGogCSwACyARLAABbGogCSwADSAQLAABbGogCSwADyAPLAABbGogCSwAESAOLAABbGogCSwAEyANLAABbGogCSwAFSAMLAABbGogCSwAFyALLAABbGogCSwAGSAKLAABbGqylCArlyAqlpK8IBNrOgABIAQgKSAsICYgHSAnbGogHiAobGogHCAlbGogGyAkbGogGiAjbGogGSAibGogGCAhbGogFyAgbGogFiAfbGqylCArlyAqlpK8IBNrOgAAIARBAmohBCAJQSJqIQkgCkECaiEKIAtBAmohCyAMQQJqIQwgDUECaiENIA5BAmohDiAPQQJqIQ8gEEECaiEQIBFBAmohESASQQJqIRIgFEECayIUQQFLDQALCyACIAVqIQIgFAR/IAQgKSAJKgAaIAkoAgAgCSwACCASLAAAbGogCSwACiARLAAAbGogCSwADCAQLAAAbGogCSwADiAPLAAAbGogCSwAECAOLAAAbGogCSwAEiANLAAAbGogCSwAFCAMLAAAbGogCSwAFiALLAAAbGogCSwAGCAKLAAAbGqylCArlyAqlpK8IBNrOgAAIARBAWoFIAQLIAZqIQQgAUEBayIBDQALC8sPAk9/BH0gCSgCDCEjIAkqAgghWSAJKgIEIVogCSoCACFbIABBAkkhJQNAIAIoAmAiCSAHIAlqIAggCUYbIQogAigCXCIJIAcgCWogCCAJRhshCyACKAJYIgkgByAJaiAIIAlGGyEMIAIoAlQiCSAHIAlqIAggCUYbIQ0gAigCUCIJIAcgCWogCCAJRhshDiACKAJMIgkgByAJaiAIIAlGGyEPIAIoAkgiCSAHIAlqIAggCUYbIRAgAigCRCIJIAcgCWogCCAJRhshESACKAJAIgkgByAJaiAIIAlGGyESIAIoAjwiCSAHIAlqIAggCUYbIRMgAigCOCIJIAcgCWogCCAJRhshFCACKAI0IgkgByAJaiAIIAlGGyEVIAIoAjAiCSAHIAlqIAggCUYbIRYgAigCLCIJIAcgCWogCCAJRhshFyACKAIoIgkgByAJaiAIIAlGGyEYIAIoAiQiCSAHIAlqIAggCUYbIRkgAigCICIJIAcgCWogCCAJRhshGiACKAIcIgkgByAJaiAIIAlGGyEbIAIoAhgiCSAHIAlqIAggCUYbIRwgAigCFCIJIAcgCWogCCAJRhshHSACKAIQIgkgByAJaiAIIAlGGyEeIAIoAgwiCSAHIAlqIAggCUYbIR8gAigCCCIJIAcgCWogCCAJRhshICACKAIEIgkgByAJaiAIIAlGGyEhIAIoAgAiCSAHIAlqIAggCUYbISIgACEkIAMhCSAlRQRAA0AgCSoAOiFcIAksADghJiAJLAA2IScgCSwANCEoIAksADIhKSAJLAAwISogCSwALiErIAksACwhLCAJLAAqIS0gCSwAKCEuIAksACYhLyAJLAAkITAgCSwAIiExIAksACAhMiAJLAAeITMgCSwAHCE0IAksABohNSAJLAAYITYgCSwAFiE3IAksABQhOCAJLAASITkgCSwAECE6IAksAA4hOyAJLAAMITwgCSwACCE9IAksAAohPiAKLAAAIT8gCywAACFAIAwsAAAhQSANLAAAIUIgDiwAACFDIA8sAAAhRCAQLAAAIUUgESwAACFGIBIsAAAhRyATLAAAIUggFCwAACFJIBUsAAAhSiAWLAAAIUsgFywAACFMIBgsAAAhTSAZLAAAIU4gGiwAACFPIBssAAAhUCAcLAAAIVEgHSwAACFSIB4sAAAhUyAfLAAAIVQgICwAACFVIAkoAgAhViAiLAAAIVcgISwAACFYIAQgWSAJKgA+IAkoAgQgCSwACSAiLAABbGogCSwACyAhLAABbGogCSwADSAgLAABbGogCSwADyAfLAABbGogCSwAESAeLAABbGogCSwAEyAdLAABbGogCSwAFSAcLAABbGogCSwAFyAbLAABbGogCSwAGSAaLAABbGogCSwAGyAZLAABbGogCSwAHSAYLAABbGogCSwAHyAXLAABbGogCSwAISAWLAABbGogCSwAIyAVLAABbGogCSwAJSAULAABbGogCSwAJyATLAABbGogCSwAKSASLAABbGogCSwAKyARLAABbGogCSwALSAQLAABbGogCSwALyAPLAABbGogCSwAMSAOLAABbGogCSwAMyANLAABbGogCSwANSAMLAABbGogCSwANyALLAABbGogCSwAOSAKLAABbGqylCBblyBalpK8ICNrOgABIAQgWSBcIFYgPSBXbGogPiBYbGogPCBVbGogOyBUbGogOiBTbGogOSBSbGogOCBRbGogNyBQbGogNiBPbGogNSBObGogNCBNbGogMyBMbGogMiBLbGogMSBKbGogMCBJbGogLyBIbGogLiBHbGogLSBGbGogLCBFbGogKyBEbGogKiBDbGogKSBCbGogKCBBbGogJyBAbGogJiA/bGqylCBblyBalpK8ICNrOgAAIARBAmohBCAJQcIAaiEJIApBAmohCiALQQJqIQsgDEECaiEMIA1BAmohDSAOQQJqIQ4gD0ECaiEPIBBBAmohECARQQJqIREgEkECaiESIBNBAmohEyAUQQJqIRQgFUECaiEVIBZBAmohFiAXQQJqIRcgGEECaiEYIBlBAmohGSAaQQJqIRogG0ECaiEbIBxBAmohHCAdQQJqIR0gHkECaiEeIB9BAmohHyAgQQJqISAgIUECaiEhICJBAmohIiAkQQJrIiRBAUsNAAsLIAIgBWohAiAkBH8gBCBZIAkqADogCSgCACAJLAAIICIsAABsaiAJLAAKICEsAABsaiAJLAAMICAsAABsaiAJLAAOIB8sAABsaiAJLAAQIB4sAABsaiAJLAASIB0sAABsaiAJLAAUIBwsAABsaiAJLAAWIBssAABsaiAJLAAYIBosAABsaiAJLAAaIBksAABsaiAJLAAcIBgsAABsaiAJLAAeIBcsAABsaiAJLAAgIBYsAABsaiAJLAAiIBUsAABsaiAJLAAkIBQsAABsaiAJLAAmIBMsAABsaiAJLAAoIBIsAABsaiAJLAAqIBEsAABsaiAJLAAsIBAsAABsaiAJLAAuIA8sAABsaiAJLAAwIA4sAABsaiAJLAAyIA0sAABsaiAJLAA0IAwsAABsaiAJLAA2IAssAABsaiAJLAA4IAosAABsarKUIFuXIFqWkrwgI2s6AAAgBEEBagUgBAsgBmohBCABQQFrIgENAAsLsAQCCn8EfSACQQFrIQcgAkEBcSERIAJBAnQiBEEQaiESIARBDGohEyAJKAIMIRAgCSoCCCEU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ISIgCyAXLAAAIgdsICNqISMgACAHbCAkaiEkIAcgFWwgJWohJSAHIBZsICZqISYgEkEBaiESIBNBAWohEyAUQQFqIRQgF0EBaiEXIAVBBGohBSAaQQFrIhoNAAsgKCApaiELIARBEGohBCAnQRBrIicNAAsgCyoCACIuIBmylCAtlyAsliArkrwgDGshCyAuIB6ylCAtlyAsliArkrwgDGshByAuICKylCAtlyAsliArkrwgDGshACAuICaylCAtlyAsliArkrwgDGshFSAoICpqIgUqAgwiLiAQspQgLZcgLJYgK5K8IAxrIRYgBSoCCCIvIBGylCAtlyAsliArkrwgDGshFyAuIByylCAtlyAsliArkrwgDGshEiAvIB2ylCAtlyAsliArkrwgDGshGiAuICCylCAtlyAsliArkrwgDGshEyAvICGylCAtlyAsliArkrwgDGshECAuICSylCAtlyAsliArkrwgDGshFCAvICWylCAtlyAsliArkrwgDGshEQJAIAFBA00EQAJAIAFBAnFFBEAgFSEUIAAhEyAHIRIgCyEWDAELIA8gFzoAASAPIAs6AAAgDiAaOgABIA4gBzoAACANIBA6AAEgDSAAOgAAIAYgEToAASAGIBU6AAAgBkECaiEGIA1BAmohDSAOQQJqIQ4gD0ECaiEPCyABQQFxRQ0BIA8gFjoAACAOIBI6AAAgDSATOgAAIAYgFDoAAA8LIAUqAhAhLiAPIBY6AAIgDyAXOgABIA8gCzoAACAPIC4gGLKUIC2XICyWICuSvCAMazoAAyAOIC4gG7KUIC2XICyWICuSvCAMazoAAyAOIBI6AAIgDiAaOgABIA4gBzoAACANIC4gH7KUIC2XICyWICuSvCAMazoAAyANIBM6AAIgDSAQOgABIA0gADoAACAGIC4gI7KUIC2XICyWICuSvCAMazoAAyAGIBQ6AAIgBiAROgABIAYgFToAACAEIANrIQQgBiAIaiEGIAggDWohDSAIIA5qIQ4gCCAPaiEPIAVBFGohBSABQQRrIgENAQsLCxEAIABFBEBBAQ8LIAAoAoQBC4QCAQl/IAEoAgAhAyAAKAIUIQcgACgCECEIA0AgASgCCCECAkADQCACRQ0BIAEgAkEBayABKAIIIgQgAiAERhs2AgggAiAERyEFIAQhAiAFDQALIAcgAyAIEQIA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ByACa0obIQELIAAgA0EBajYCACABIQIgAywAARDiAw0ACyABC+EGAwN+AX8BfCMAQRBrIgYkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAFBCWsOEgABAgUDBAYHCAkKCwwNDg8QERILIAIgAigCACIBQQRqNgIAIAAgASgCADYCAAwRCyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAMEAsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADA8LIAIgAigCACIBQQRqNgIAIAAgATQCADcDAAwOCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAMDQsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMADAwLIAIgAigCACIBQQRqNgIAIAAgATIBADcDAAwLCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAMCgsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADAkLIAIgAigCACIBQQRqNgIAIAAgATEAADcDAAwICyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwAMBwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADAYLIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAwFCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwAMBAsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADAMLIAIgAigCACIBQQRqNgIAIAAgATUCADcDAAwCCyACIAIoAgBBB2pBeHEiAUEIajYCACABKwMAIQcjAEEQayIBJAACfiAHvSIFQv///////////wCDIgNCgICAgICAgAh9Qv/////////v/wBYBEAgA0I8hiEEIANCBIhCgICAgICAgIA8fAwBCyADQoCAgICAgID4/wBaBEAgBUI8hiEEIAVCBIhCgICAgICAwP//AIQMAQtCACADUA0AGiABIANCACAFp2dBIGogA0IgiKdnIANCgICAgBBUGyICQTFqEPkDIAEpAwAhBCABKQMIQoCAgICAgMAAhUGM+AAgAmutQjCGhAshAyAGIAQ3AwAgBiADIAVCgICAgICAgICAf4OENwMIIAFBEGokACAAIAYpAwg3AwggACAGKQMANwMADAELIAAgAkGCAhECAAsgBkEQaiQAC4MBAgN/AX4CQCAAQoCAgIAQVARAIAAhBQwBCwNAIAFBAWsiASAAIABCCoAiBUIKfn2nQTByOgAAIABC/////58BViECIAUhACACDQALCyAFpyICBEADQCABQQFrIgEgAiACQQpuIgNBCmxrQTByOgAAIAJBCUshBCADIQIgBA0ACwsgAQtyAQF/IwBBgAJrIgUkAAJAIAIgA0wNACAEQYDABHENACAFIAFB/wFxIAIgA2siAkGAAiACQYACSSIDGxDUAxogA0UEQANAIAAgBUGAAhDBAyACQYACayICQf8BSw0ACwsgACAFIAIQwQMLIAVBgAJqJAALuAIBBH8jAEGgAmsiAyQAIAMgAjYCnAIgA0HwAWpBAEEoENQDGiADIAMoApwCNgKYAgJAQQAgASADQZgCaiADQdAAaiADQfABahDAA0EASA0AIAAoAkxBAE4hBiAAKAIAIQUgACgCSEEATARAIAAgBUFfcTYCAAsCfwJAAkAgACgCMEUEQCAAQdAANgIwIABBADYCHCAAQgA3AxAgACgCLCEEIAAgAzYCLAwBCyAAKAIQDQELQX8gABDKAw0BGgsgACABIANBmAJqIANB0ABqIANB8AFqEMADCyECIAVBIHEhASAEBH8gAEEAQQAgACgCJBENABogAEEANgIwIAAgBDYCLCAAQQA2AhwgACgCFBogAEIANwMQQQAFIAILGiAAIAAoAgAgAXI2AgAgBkUNAAsgA0GgAmokAAv0HwISfwJ+IwBBgDxrIggkACAIQQA2AqwCAkAgAkI/iKcEQCACQoCAgICAgICAgH+FIQJBASESQYsIIRQMAQsgBUGAEHEEQEEBIRJBjgghFAwBC0GRCEGMCCAFQQFxIhIbIRQgEkUhGAsCQAJ/IAJC////////P4MhGgJ/IAJCMIinQf//AXEiB0H//wFHBEBBBCAHDQEaQQJBAyABIBqEUBsMAgsgASAahFALC0EBTARAIABBICADIBJBA2oiByAFQf//e3EQxQMgACAUIBIQwQMgAEG0CEH0GSAGQSBxIgkbQbgIQfgZIAkbIAFCAFIgAkL///////////8AgyIZQoCAgICAgMD//wBWIBlCgICAgICAwP//AFEbIAFCAFIgAkL///////////8AgyIZQoCAgICAgMD//wBWIBlCgICAgICAwP//AFEbchtB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AkL///////////8AgyIFQoCAgICAgMD//wB9QoCAgICAgMCAgH9UIAVQG0UEQCADQgBSIAZCgICAgICAwP//AH0iB0KAgICAgIDAgIB/ViAHQoCAgICAgMCAgH9RGw0BCyAJIAVCgICAgICAwP//AFQgBUKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEEIAEhAwwCCyADUCAGQoCAgICAgMD//wBUIAZCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhBAwCCyABIAVCgICAgICAwP//AIWEUARAQoCAgICAgOD//wAgAiABIAOFIAIgBIVCgICAgICAgICAf4WEUCIJGyEEQgAgASAJGyEDDAILIAMgBkKAgICAgIDA//8AhYRQDQEgASAFhFAEQCADIAaEQgBSDQIgASADgyEDIAIgBIMhBAwCCyADIAaEUEUNACABIQMgAiEEDAELIAMgASABIANUIAUgBlQgBSAGURsiChshBSAEIAIgChsiBkL///////8/gyEHIAIgBCAKGyICQjCIp0H//wFxIQsgBkIwiKdB//8BcSIJRQRAIAhB4ABqIAUgByAFIAcgB1AiCRt5IAlBBnStfKciCUEPaxD5A0EQIAlrIQkgCCkDaCEHIAgpA2AhBQsgASADIAobIQMgAkL///////8/gyEEIAtFBEAgCEHQAGogAyAEIAMgBCAEUCIKG3kgCkEGdK18pyIKQQ9rEPkDQRAgCmshCyAIKQNYIQQgCCkDUCEDCyAEQgOGIANCPYiEQoCAgICAgIAEhCEEIAdCA4YgBUI9iIQhASACIAaFIQICfiADQgOGIgMgCSALayIKRQ0AGiAKQf8ASwRAQgAhBEIBDAELIAhBQGsgAyAEQYABIAprEPkDIAhBMGogAyAEIAoQ+wMgCCkDOCEEIAgpAzAgCCkDQCAIKQNIhEIAUq2ECyEDIAFCgICAgICAgASEIQcgBUIDhiEBAkAgAkIAUwRAIAEgA30iBSAHIAR9IAEgA1StfSIEhFAEQEIAIQNCACEEDAMLIARC/////////wNWDQEgCEEgaiAFIAQgBSAEIARQIgobeSAKQQZ0rXynQQxrIgoQ+QMgCSAKayEJIAgpAyghBCAIKQMgIQUMAQsgASADfCIFIANUrSAEIAd8fCIEQoCAgICAgIAIg1ANACAFQgGDIARCP4YgBUIBiISEIQUgCUEBaiEJIARCAYghBAsgBkKAgICAgICAgIB/gyEBIAlB//8BTgRAIAFCgICAgICAwP//AIQhBEIAIQMMAQtBACEKAkAgCUEASgRAIAkhCgwBCyAIQRBqIAUgBCAJQf8AahD5AyAIIAUgBEEBIAlrEPsDIAgpAwAgCCkDECAIKQMYhEIAUq2EIQUgCCkDCCEECyAEQj2GIAVCA4iEIgMgAyAFp0EHcSIJQQRLrXwiBVatIARCA4hC////////P4MgCq1CMIaEIAGEfCEEAkACQCAJQQRHBEAgBSEDDAELIAQgBUIBgyIBIAV8IgMgAVStfCEEDAELIAlFDQELCyAAIAM3AwAgACAENwMIIAhB8ABqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgL2wECAX8CfkEBIQQCQCAAQgBSIAFC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBRGw0AIAJCAFIgA0L///////////8AgyIGQoCAgICAgMD//wBWIAZCgICAgICAwP//AFEbDQAgACAChCAFIAaEhFAEQEEADwsgASADg0IAWQRAQX8hBCAAIAJUIAEgA1MgASADURsNASAAIAKFIAEgA4WEQgBSDwtBfyEEIAAgAlYgASADVSABIANRGw0AIAAgAoUgASADhYRCAFIhBAsgBAtQAQF+AkAgA0HAAHEEQCACIANBQGqtiCEBQgAhAgwBCyADRQ0AIAJBwAAgA2uthiABIAOtIgSIhCEBIAIgBIghAgsgACABNwMAIAAgAjcDCAu5CgIFfxB+IwBB4ABrIgQkACADQv///////z+DIQ0gAiADhUKAgICAgICAgIB/gyEJIAJC////////P4MiDEIgiCEQAkACQCADQjCIp0H//wFxIgVB//8Ba0GBgH5LIAJCMIinQf//AXEiB0H//wFrQYKAfk9xDQAgAVAgAkL///////////8AgyIKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCQwCCyADQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AUXJFBEAgA0KAgICAgIAghCEJQgAhAQwCCyABIApCgICAgICAwP//AIWEUARAIAJQBEBCgICAgICA4P//ACEJQgAhAQwDCyAJQoCAgICAgMD//wCEIQlCACEBDAILIAJCgICAgICAwP//AIVQBEAgASAKhCECQgAhASACUARAQoCAgICAgOD//wAhCQwDCyAJQoCAgICAgMD//wCEIQkMAgsgASAKhFAEQEIAIQEMAgsgAlAEQEIAIQEMAgsgCkL///////8/WARAIARB0ABqIAEgDCABIAwgDFAiBht5IAZBBnStfKciBkEPaxD5A0EQIAZrIQYgBCkDWCIMQiCIIRAgBCkDUCEBCyACQv///////z9WDQAgBEFAa0IAIA1CACANIA1QIggbeSAIQQZ0rXynIghBD2sQ+QMgBiAIa0EQaiEGIAQpA0ghDSAEKQNAIQsLIAtCD4YiCkKAgP7/D4MiAiABQiCIIgN+IhEgCkIgiCIKIAFC/////w+DIgF+fCIPQiCGIhIgASACfnwiDiASVK0gAiAMQv////8PgyIMfiIVIAMgCn58IhIgDUIPhiALQjGIhCITQv////8PgyILIAF+fCINIA8gEVStQiCGIA9CIIiEfCIRIAIgEEKAgASEIg9+IhYgCiAMfnwiECATQiCIQoCAgIAIhCICIAF+fCITIAMgC358IhRCIIZ8Ihd8IQEgBSAHaiAGakH//wBrIQUCQCACIAN+IhggCiAPfnwiAyAYVK0gAyALIAx+fCIKIANUrXwgAiAPfnwgCiASIBVUrSANIBJUrXx8IgMgClStfCALIA9+IgsgAiAMfnwiAiALVK1CIIYgAkIgiIR8IAMgAkIghnwiAiADVK18IAIgEyAUVq0gECAWVK0gECATVq18fEIghiAUQiCIhHwiAyACVK18IAMgDSARVq0gESAXVq18fCICIANUrXwiA0KAgICAgIDAAINQRQRAIAVBAWohBQwBCyAOQj+IIQsgA0IBhiACQj+IhCEDIAJCAYYgAUI/iIQhAiAOQgGGIQ4gCyABQgGGhCEBCyAFQf//AU4EQCAJQoCAgICAgMD//wCEIQlCACEBDAELAn4gBUEATARAQQEgBWsiB0GAAU8EQEIAIQEMAwsgBEEwaiAOIAEgBUH/AGoiBRD5AyAEQSBqIAIgAyAFEPkDIARBEGogDiABIAcQ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ciBpZHMgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFJvdW5kIGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABSZWx1NiBmb3IgdGVuc29yIGlkcyAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAUG93IGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQARGl2IGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQATXVsIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3F1YXJlZERpZmZlcmVuY2UgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABBZGQgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTdWIgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTY2F0dGVyIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAEdhdGhlciBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABUcmFuc3Bvc2UgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAVGlsZSBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABHYXRoZXJOZCBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABBZGROIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABGbG9vckRpdiBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABNYXhpbXVtIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGR0eXBlICVkAE1pbmltdW0gZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQAQ3Vtc3VtIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABDdW1wcm9kIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABUb3BLIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABOb3RFcXVhbCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLlVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQATGVzc0VxdWFsIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABHcmVhdGVyRXF1YWwgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC5VbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExvZ2ljYWxOb3QgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExlc3MgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMb2dpY2FsWG9yIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQAR3JlYXRlciBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExvZ2ljYWxPciBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAEVxdWFsIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQATG9naWNhbEFuZCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAE5BTgBJTkYAWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2NvbnN0YW50X3BhZF9uZF94MzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX2NvbnN0YW50X3BhZF9uZF94MzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfKl9uZF9mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlXypfbmRfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3Jlc2l6ZV9iaWxpbmVhcjJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9yZXNpemVfYmlsaW5lYXIyZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9jb252b2x1dGlvbjJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9jb252b2x1dGlvbjJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX21heF9wb29saW5nMmRfbmh3Y19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfYXZlcmFnZV9wb29saW5nMmRfbmh3Y19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfc29mdG1heF9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX3NvZnRtYXhfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3ByZWx1X25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfcHJlbHVfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2VsdV9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX2VsdV9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfY2xhbXBfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9jbGFtcF9uY19mMzIg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jGDuPz31JJ/KOLM/oGoCH7Ok7D+6kThUqXbEP+b8alc2IOs/0uTESguEzj8tqqFj0cLpPxxlxvBFBtQ/7UF4A+aG6D/4nxssnI7YP2JIU/XcZ+c/zHuxTqTg3D8LbknJFnbSP3rGdaBpGde/3bqnbArH3j/I9r5IRxXnvyu4KmVHFfc/4FUAAAAAAAAC/wAEZAAgAAAE//8GAAEAAQABAP//Af8B//////8B/wH/Af8B/wH/Af8B/wH//////wr/IAD//wP/Af8E/x4AAAEF//////9jAAAIYwDoAwIAAAD//////wAAAAH/Af//////////////AEHJpQELAQQAQdalAQtEAf8B//////8AASAABACAAAAI//8B/wH/////////Af8G/wf/CP8J//////+8ArwCAQD//wEAAQD//wAA//////////8AQaqmAQsBFABByqYBCx7//wEACv///////////wH/Af8AAAAAAAAB/wH/Af8AQfqmAQtIAf8AAAAAAAAB/wH/AQAAAAEAAAAB//////8AAAAAAf///wAAAAD/////////////KAAK//////8BAAr/////AP//////////AEGmqAELHAH/Af///wEA//////////////////8K//////8AQdSoAQv5AgIAAAADAAAABQAAAAcAAAALAAAADQAAABEAAAATAAAAFwAAAB0AAAAfAAAAJQAAACkAAAArAAAALwAAADUAAAA7AAAAPQAAAEMAAABHAAAASQAAAE8AAABTAAAAWQAAAGEAAABlAAAAZwAAAGsAAABtAAAAcQAAAH8AAACDAAAAiQAAAIsAAACVAAAAlwAAAJ0AAACjAAAApwAAAK0AAACzAAAAtQAAAL8AAADBAAAAxQAAAMcAAADTAAAAAQAAAAsAAAANAAAAEQAAABMAAAAXAAAAHQAAAB8AAAAlAAAAKQAAACsAAAAvAAAANQAAADsAAAA9AAAAQwAAAEcAAABJAAAATwAAAFMAAABZAAAAYQAAAGUAAABnAAAAawAAAG0AAABxAAAAeQAAAH8AAACDAAAAiQAAAIsAAACPAAAAlQAAAJcAAACdAAAAowAAAKcAAACpAAAArQAAALMAAAC1AAAAuwAAAL8AAADBAAAAxQAAAMcAAADRAEHQqwELEQEAAAABAAAACAAAAAAAAAAFAEHsqwELAgMBAEGErAELCgQBAAAFAQAAkF4AQZysAQsBAgBBrKwBCwj//////////wBB8KwBCwNgY1A="); + } + }); + + // src/main.ts + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/base_side_effects.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/engine.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/backend.js + init_define_BUILD_VERSION(); + var EPSILON_FLOAT32 = 1e-7; + var EPSILON_FLOAT16 = 1e-4; + var DataStorage = class { + constructor(backend2, dataMover) { + this.backend = backend2; + this.dataMover = dataMover; + this.data = /* @__PURE__ */ new WeakMap(); + this.dataIdsCount = 0; + } + get(dataId) { + if (!this.data.has(dataId)) { + this.dataMover.moveData(this.backend, dataId); + } + return this.data.get(dataId); + } + set(dataId, value) { + this.dataIdsCount++; + this.data.set(dataId, value); + } + has(dataId) { + return this.data.has(dataId); + } + delete(dataId) { + this.dataIdsCount--; + return this.data.delete(dataId); + } + numDataIds() { + return this.dataIdsCount; + } + }; + var KernelBackend = class { + refCount(dataId) { + return notYetImplemented("refCount"); + } + incRef(dataId) { + return notYetImplemented("incRef"); + } + timerAvailable() { + return true; + } + time(f) { + return notYetImplemented("time"); + } + read(dataId) { + return notYetImplemented("read"); + } + readSync(dataId) { + return notYetImplemented("readSync"); + } + readToGPU(dataId, options) { + return notYetImplemented("readToGPU"); + } + numDataIds() { + return notYetImplemented("numDataIds"); + } + disposeData(dataId, force) { + return notYetImplemented("disposeData"); + } + write(values, shape, dtype) { + return notYetImplemented("write"); + } + move(dataId, values, shape, dtype, refCount) { + return notYetImplemented("move"); + } + memory() { + return notYetImplemented("memory"); + } + floatPrecision() { + return notYetImplemented("floatPrecision"); + } + epsilon() { + return this.floatPrecision() === 32 ? EPSILON_FLOAT32 : EPSILON_FLOAT16; + } + dispose() { + return notYetImplemented("dispose"); + } + }; + function notYetImplemented(kernelName) { + throw new Error(`'${kernelName}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/environment.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/util_base.js + init_define_BUILD_VERSION(); + function shuffle(array2) { + let counter = array2.length; + let index = 0; + while (counter > 0) { + index = Math.random() * counter | 0; + counter--; + swap(array2, counter, index); + } + } + function shuffleCombo(array2, array22) { + if (array2.length !== array22.length) { + throw new Error(`Array sizes must match to be shuffled together First array length was ${array2.length}Second array length was ${array22.length}`); + } + let counter = array2.length; + let index = 0; + while (counter > 0) { + index = Math.random() * counter | 0; + counter--; + swap(array2, counter, index); + swap(array22, counter, index); + } + } + function clamp(min6, x, max6) { + return Math.max(min6, Math.min(x, max6)); + } + function nearestLargerEven(val) { + return val % 2 === 0 ? val : val + 1; + } + function swap(object, left, right) { + const temp = object[left]; + object[left] = object[right]; + object[right] = temp; + } + function sum(arr) { + let sum6 = 0; + for (let i = 0; i < arr.length; i++) { + sum6 += arr[i]; + } + return sum6; + } + function randUniform(a, b) { + const r = Math.random(); + return b * r + (1 - r) * a; + } + function distSquared(a, b) { + let result = 0; + for (let i = 0; i < a.length; i++) { + const diff = Number(a[i]) - Number(b[i]); + result += diff * diff; + } + return result; + } + function assert(expr, msg) { + if (!expr) { + throw new Error(typeof msg === "string" ? msg : msg()); + } + } + function assertShapesMatch(shapeA, shapeB, errorMessagePrefix = "") { + assert(arraysEqual(shapeA, shapeB), () => errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`); + } + function assertNonNull(a) { + assert(a != null, () => `The input to the tensor constructor must be a non-null value.`); + } + function flatten(arr, result = [], skipTypedArray = false) { + if (result == null) { + result = []; + } + if (Array.isArray(arr) || isTypedArray(arr) && !skipTypedArray) { + for (let i = 0; i < arr.length; ++i) { + flatten(arr[i], result, skipTypedArray); + } + } else { + result.push(arr); + } + return result; + } + function sizeFromShape(shape) { + if (shape.length === 0) { + return 1; + } + let size = shape[0]; + for (let i = 1; i < shape.length; i++) { + size *= shape[i]; + } + return size; + } + function isScalarShape(shape) { + return shape.length === 0; + } + function arraysEqual(n1, n2) { + if (n1 === n2) { + return true; + } + if (n1 == null || n2 == null) { + return false; + } + if (n1.length !== n2.length) { + return false; + } + for (let i = 0; i < n1.length; i++) { + if (n1[i] !== n2[i]) { + return false; + } + } + return true; + } + function isInt(a) { + return a % 1 === 0; + } + function tanh(x) { + if (Math.tanh != null) { + return Math.tanh(x); + } + if (x === Infinity) { + return 1; + } else if (x === -Infinity) { + return -1; + } else { + const e2x = Math.exp(2 * x); + return (e2x - 1) / (e2x + 1); + } + } + function sizeToSquarishShape(size) { + const width = Math.ceil(Math.sqrt(size)); + return [width, Math.ceil(size / width)]; + } + function createShuffledIndices(n) { + const shuffledIndices = new Uint32Array(n); + for (let i = 0; i < n; ++i) { + shuffledIndices[i] = i; + } + shuffle(shuffledIndices); + return shuffledIndices; + } + function rightPad(a, size) { + if (size <= a.length) { + return a; + } + return a + " ".repeat(size - a.length); + } + function repeatedTry(checkFn, delayFn = (counter) => 0, maxCounter) { + return new Promise((resolve, reject) => { + let tryCount = 0; + const tryFn = () => { + if (checkFn()) { + resolve(); + return; + } + tryCount++; + const nextBackoff = delayFn(tryCount); + if (maxCounter != null && tryCount >= maxCounter) { + reject(); + return; + } + setTimeout(tryFn, nextBackoff); + }; + tryFn(); + }); + } + function inferFromImplicitShape(shape, size) { + let shapeProd = 1; + let implicitIdx = -1; + for (let i = 0; i < shape.length; ++i) { + if (shape[i] >= 0) { + shapeProd *= shape[i]; + } else if (shape[i] === -1) { + if (implicitIdx !== -1) { + throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${implicitIdx} and dim ${i}`); + } + implicitIdx = i; + } else if (shape[i] < 0) { + throw Error(`Shapes can not be < 0. Found ${shape[i]} at dim ${i}`); + } + } + if (implicitIdx === -1) { + if (size > 0 && size !== shapeProd) { + throw Error(`Size(${size}) must match the product of shape ${shape}`); + } + return shape; + } + if (shapeProd === 0) { + throw Error(`Cannot infer the missing size in [${shape}] when there are 0 elements`); + } + if (size % shapeProd !== 0) { + throw Error(`The implicit shape can't be a fractional number. Got ${size} / ${shapeProd}`); + } + const newShape = shape.slice(); + newShape[implicitIdx] = size / shapeProd; + return newShape; + } + function parseAxisParam(axis, shape) { + const rank = shape.length; + axis = axis == null ? shape.map((s, i) => i) : [].concat(axis); + assert(axis.every((ax) => ax >= -rank && ax < rank), () => `All values in axis param must be in range [-${rank}, ${rank}) but got axis ${axis}`); + assert(axis.every((ax) => isInt(ax)), () => `All values in axis param must be integers but got axis ${axis}`); + return axis.map((a) => a < 0 ? rank + a : a); + } + function squeezeShape(shape, axis) { + const newShape = []; + const keptDims = []; + const isEmptyArray = axis != null && Array.isArray(axis) && axis.length === 0; + const axes = axis == null || isEmptyArray ? null : parseAxisParam(axis, shape).sort(); + let j = 0; + for (let i = 0; i < shape.length; ++i) { + if (axes != null) { + if (axes[j] === i && shape[i] !== 1) { + throw new Error(`Can't squeeze axis ${i} since its dim '${shape[i]}' is not 1`); + } + if ((axes[j] == null || axes[j] > i) && shape[i] === 1) { + newShape.push(shape[i]); + keptDims.push(i); + } + if (axes[j] <= i) { + j++; + } + } + if (shape[i] !== 1) { + newShape.push(shape[i]); + keptDims.push(i); + } + } + return { newShape, keptDims }; + } + function getTypedArrayFromDType(dtype, size) { + let values = null; + if (dtype == null || dtype === "float32") { + values = new Float32Array(size); + } else if (dtype === "int32") { + values = new Int32Array(size); + } else if (dtype === "bool") { + values = new Uint8Array(size); + } else { + throw new Error(`Unknown data type ${dtype}`); + } + return values; + } + function getArrayFromDType(dtype, size) { + let values = null; + if (dtype == null || dtype === "float32") { + values = new Float32Array(size); + } else if (dtype === "int32") { + values = new Int32Array(size); + } else if (dtype === "bool") { + values = new Uint8Array(size); + } else if (dtype === "string") { + values = new Array(size); + } else { + throw new Error(`Unknown data type ${dtype}`); + } + return values; + } + function checkConversionForErrors(vals, dtype) { + for (let i = 0; i < vals.length; i++) { + const num = vals[i]; + if (isNaN(num) || !isFinite(num)) { + throw Error(`A tensor of type ${dtype} being uploaded contains ${num}.`); + } + } + } + function isValidDtype(dtype) { + return dtype === "bool" || dtype === "complex64" || dtype === "float32" || dtype === "int32" || dtype === "string"; + } + function hasEncodingLoss(oldType, newType) { + if (newType === "complex64") { + return false; + } + if (newType === "float32" && oldType !== "complex64") { + return false; + } + if (newType === "int32" && oldType !== "float32" && oldType !== "complex64") { + return false; + } + if (newType === "bool" && oldType === "bool") { + return false; + } + return true; + } + function isTypedArray(a) { + return a instanceof Float32Array || a instanceof Int32Array || a instanceof Uint8Array || a instanceof Uint8ClampedArray; + } + function bytesPerElement(dtype) { + if (dtype === "float32" || dtype === "int32") { + return 4; + } else if (dtype === "complex64") { + return 8; + } else if (dtype === "bool") { + return 1; + } else { + throw new Error(`Unknown dtype ${dtype}`); + } + } + function bytesFromStringArray(arr) { + if (arr == null) { + return 0; + } + let bytes = 0; + arr.forEach((x) => bytes += x.length); + return bytes; + } + function isString(value) { + return typeof value === "string" || value instanceof String; + } + function isBoolean(value) { + return typeof value === "boolean"; + } + function isNumber(value) { + return typeof value === "number"; + } + function inferDtype(values) { + if (Array.isArray(values)) { + return inferDtype(values[0]); + } + if (values instanceof Float32Array) { + return "float32"; + } else if (values instanceof Int32Array || values instanceof Uint8Array || values instanceof Uint8ClampedArray) { + return "int32"; + } else if (isNumber(values)) { + return "float32"; + } else if (isString(values)) { + return "string"; + } else if (isBoolean(values)) { + return "bool"; + } + return "float32"; + } + function isFunction(f) { + return !!(f && f.constructor && f.call && f.apply); + } + function nearestDivisor(size, start) { + for (let i = start; i < size; ++i) { + if (size % i === 0) { + return i; + } + } + return size; + } + function computeStrides(shape) { + const rank = shape.length; + if (rank < 2) { + return []; + } + const strides = new Array(rank - 1); + strides[rank - 2] = shape[rank - 1]; + for (let i = rank - 3; i >= 0; --i) { + strides[i] = strides[i + 1] * shape[i + 1]; + } + return strides; + } + function createNestedArray(offset, shape, a, isComplex = false) { + const ret = new Array(); + if (shape.length === 1) { + const d = shape[0] * (isComplex ? 2 : 1); + for (let i = 0; i < d; i++) { + ret[i] = a[offset + i]; + } + } else { + const d = shape[0]; + const rest = shape.slice(1); + const len = rest.reduce((acc, c) => acc * c) * (isComplex ? 2 : 1); + for (let i = 0; i < d; i++) { + ret[i] = createNestedArray(offset + i * len, rest, a, isComplex); + } + } + return ret; + } + function toNestedArray(shape, a, isComplex = false) { + if (shape.length === 0) { + return a[0]; + } + const size = shape.reduce((acc, c) => acc * c) * (isComplex ? 2 : 1); + if (size === 0) { + return []; + } + if (size !== a.length) { + throw new Error(`[${shape}] does not match the input size ${a.length}${isComplex ? " for a complex tensor" : ""}.`); + } + return createNestedArray(0, shape, a, isComplex); + } + function makeOnesTypedArray(size, dtype) { + const array2 = makeZerosTypedArray(size, dtype); + for (let i = 0; i < array2.length; i++) { + array2[i] = 1; + } + return array2; + } + function makeZerosTypedArray(size, dtype) { + if (dtype == null || dtype === "float32" || dtype === "complex64") { + return new Float32Array(size); + } else if (dtype === "int32") { + return new Int32Array(size); + } else if (dtype === "bool") { + return new Uint8Array(size); + } else { + throw new Error(`Unknown data type ${dtype}`); + } + } + function makeZerosNestedTypedArray(shape, dtype) { + const size = shape.reduce((prev, curr) => prev * curr, 1); + if (dtype == null || dtype === "float32") { + return toNestedArray(shape, new Float32Array(size)); + } else if (dtype === "int32") { + return toNestedArray(shape, new Int32Array(size)); + } else if (dtype === "bool") { + return toNestedArray(shape, new Uint8Array(size)); + } else { + throw new Error(`Unknown data type ${dtype}`); + } + } + function assertNonNegativeIntegerDimensions(shape) { + shape.forEach((dimSize) => { + assert(Number.isInteger(dimSize) && dimSize >= 0, () => `Tensor must have a shape comprised of positive integers but got shape [${shape}].`); + }); + } + function locToIndex(locs, rank, strides) { + if (rank === 0) { + return 0; + } else if (rank === 1) { + return locs[0]; + } + let index = locs[locs.length - 1]; + for (let i = 0; i < locs.length - 1; ++i) { + index += strides[i] * locs[i]; + } + return index; + } + function indexToLoc(index, rank, strides) { + if (rank === 0) { + return []; + } else if (rank === 1) { + return [index]; + } + const locs = new Array(rank); + for (let i = 0; i < locs.length - 1; ++i) { + locs[i] = Math.floor(index / strides[i]); + index -= locs[i] * strides[i]; + } + locs[locs.length - 1] = index; + return locs; + } + function isPromise(object) { + return object && object.then && typeof object.then === "function"; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/environment.js + var TENSORFLOWJS_FLAGS_PREFIX = "tfjsflags"; + var Environment = class { + constructor(global2) { + this.global = global2; + this.flags = {}; + this.flagRegistry = {}; + this.urlFlags = {}; + this.getQueryParams = getQueryParams; + this.populateURLFlags(); + } + setPlatform(platformName, platform) { + if (this.platform != null) { + if (!(env().getBool("IS_TEST") || env().getBool("PROD"))) { + console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${platformName}.`); + } + } + this.platformName = platformName; + this.platform = platform; + } + registerFlag(flagName, evaluationFn, setHook) { + this.flagRegistry[flagName] = { evaluationFn, setHook }; + if (this.urlFlags[flagName] != null) { + const flagValue = this.urlFlags[flagName]; + if (!(env().getBool("IS_TEST") || env().getBool("PROD"))) { + console.warn(`Setting feature override from URL ${flagName}: ${flagValue}.`); + } + this.set(flagName, flagValue); + } + } + async getAsync(flagName) { + if (flagName in this.flags) { + return this.flags[flagName]; + } + this.flags[flagName] = await this.evaluateFlag(flagName); + return this.flags[flagName]; + } + get(flagName) { + if (flagName in this.flags) { + return this.flags[flagName]; + } + const flagValue = this.evaluateFlag(flagName); + if (isPromise(flagValue)) { + throw new Error(`Flag ${flagName} cannot be synchronously evaluated. Please use getAsync() instead.`); + } + this.flags[flagName] = flagValue; + return this.flags[flagName]; + } + getNumber(flagName) { + return this.get(flagName); + } + getBool(flagName) { + return this.get(flagName); + } + getFlags() { + return this.flags; + } + get features() { + return this.flags; + } + set(flagName, value) { + if (this.flagRegistry[flagName] == null) { + throw new Error(`Cannot set flag ${flagName} as it has not been registered.`); + } + this.flags[flagName] = value; + if (this.flagRegistry[flagName].setHook != null) { + this.flagRegistry[flagName].setHook(value); + } + } + evaluateFlag(flagName) { + if (this.flagRegistry[flagName] == null) { + throw new Error(`Cannot evaluate flag '${flagName}': no evaluation function found.`); + } + return this.flagRegistry[flagName].evaluationFn(); + } + setFlags(flags) { + this.flags = Object.assign({}, flags); + } + reset() { + this.flags = {}; + this.urlFlags = {}; + this.populateURLFlags(); + } + populateURLFlags() { + if (typeof this.global === "undefined" || typeof this.global.location === "undefined" || typeof this.global.location.search === "undefined") { + return; + } + const urlParams = this.getQueryParams(this.global.location.search); + if (TENSORFLOWJS_FLAGS_PREFIX in urlParams) { + const keyValues = urlParams[TENSORFLOWJS_FLAGS_PREFIX].split(","); + keyValues.forEach((keyValue) => { + const [key, value] = keyValue.split(":"); + this.urlFlags[key] = parseValue(key, value); + }); + } + } + }; + function getQueryParams(queryString) { + const params = {}; + queryString.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (s, ...t) => { + decodeParam(params, t[0], t[1]); + return t.join("="); + }); + return params; + } + function decodeParam(params, name, value) { + params[decodeURIComponent(name)] = decodeURIComponent(value || ""); + } + function parseValue(flagName, value) { + value = value.toLowerCase(); + if (value === "true" || value === "false") { + return value === "true"; + } else if (`${+value}` === value) { + return +value; + } + throw new Error(`Could not parse value flag value ${value} for flag ${flagName}.`); + } + function env() { + return ENV; + } + var ENV = null; + function setEnvironmentGlobal(environment) { + ENV = environment; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/global_util.js + init_define_BUILD_VERSION(); + var globalNameSpace; + function getGlobalNamespace() { + if (globalNameSpace == null) { + let ns; + if (typeof window !== "undefined") { + ns = window; + } else if (typeof window !== "undefined") { + ns = window; + } else if (typeof process !== "undefined") { + ns = process; + } else if (typeof self !== "undefined") { + ns = self; + } else { + throw new Error("Could not find a global object"); + } + globalNameSpace = ns; + } + return globalNameSpace; + } + function getGlobalMap() { + const ns = getGlobalNamespace(); + if (ns._tfGlobals == null) { + ns._tfGlobals = /* @__PURE__ */ new Map(); + } + return ns._tfGlobals; + } + function getGlobal(key, init2) { + const globalMap = getGlobalMap(); + if (globalMap.has(key)) { + return globalMap.get(key); + } else { + const singleton = init2(); + globalMap.set(key, singleton); + return globalMap.get(key); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/kernel_names.js + init_define_BUILD_VERSION(); + var Abs = "Abs"; + var Acos = "Acos"; + var Acosh = "Acosh"; + var Add = "Add"; + var AddN = "AddN"; + var All = "All"; + var Any = "Any"; + var ArgMax = "ArgMax"; + var ArgMin = "ArgMin"; + var Asin = "Asin"; + var Asinh = "Asinh"; + var Atan = "Atan"; + var Atanh = "Atanh"; + var Atan2 = "Atan2"; + var AvgPool = "AvgPool"; + var AvgPoolGrad = "AvgPoolGrad"; + var AvgPool3D = "AvgPool3D"; + var AvgPool3DGrad = "AvgPool3DGrad"; + var BatchMatMul = "BatchMatMul"; + var BatchToSpaceND = "BatchToSpaceND"; + var Bincount = "Bincount"; + var BroadcastTo = "BroadcastTo"; + var BroadcastArgs = "BroadcastArgs"; + var Cast = "Cast"; + var Ceil = "Ceil"; + var ClipByValue = "ClipByValue"; + var Complex = "Complex"; + var ComplexAbs = "ComplexAbs"; + var Concat = "Concat"; + var Conv2D = "Conv2D"; + var Conv2DBackpropFilter = "Conv2DBackpropFilter"; + var Conv2DBackpropInput = "Conv2DBackpropInput"; + var Conv3D = "Conv3D"; + var Conv3DBackpropFilterV2 = "Conv3DBackpropFilterV2"; + var Conv3DBackpropInputV2 = "Conv3DBackpropInputV2"; + var Cos = "Cos"; + var Cosh = "Cosh"; + var Cumprod = "Cumprod"; + var Cumsum = "Cumsum"; + var CropAndResize = "CropAndResize"; + var DenseBincount = "DenseBincount"; + var DepthToSpace = "DepthToSpace"; + var DepthwiseConv2dNative = "DepthwiseConv2dNative"; + var DepthwiseConv2dNativeBackpropFilter = "DepthwiseConv2dNativeBackpropFilter"; + var DepthwiseConv2dNativeBackpropInput = "DepthwiseConv2dNativeBackpropInput"; + var Diag = "Diag"; + var Dilation2D = "Dilation2D"; + var Dilation2DBackpropInput = "Dilation2DBackpropInput"; + var Dilation2DBackpropFilter = "Dilation2DBackpropFilter"; + var RealDiv = "RealDiv"; + var Einsum = "Einsum"; + var Elu = "Elu"; + var EluGrad = "EluGrad"; + var Erf = "Erf"; + var Equal = "Equal"; + var Exp = "Exp"; + var ExpandDims = "ExpandDims"; + var Expm1 = "Expm1"; + var FFT = "FFT"; + var Fill = "Fill"; + var FlipLeftRight = "FlipLeftRight"; + var Floor = "Floor"; + var FloorDiv = "FloorDiv"; + var FusedBatchNorm = "FusedBatchNorm"; + var GatherV2 = "GatherV2"; + var GatherNd = "GatherNd"; + var Greater = "Greater"; + var GreaterEqual = "GreaterEqual"; + var Identity = "Identity"; + var IFFT = "IFFT"; + var Imag = "Imag"; + var IsFinite = "IsFinite"; + var IsInf = "IsInf"; + var IsNan = "IsNan"; + var LeakyRelu = "LeakyRelu"; + var Less = "Less"; + var LessEqual = "LessEqual"; + var LinSpace = "LinSpace"; + var Log = "Log"; + var Log1p = "Log1p"; + var LogicalAnd = "LogicalAnd"; + var LogicalNot = "LogicalNot"; + var LogicalOr = "LogicalOr"; + var LogicalXor = "LogicalXor"; + var LogSoftmax = "LogSoftmax"; + var LRN = "LRN"; + var LRNGrad = "LRNGrad"; + var Max = "Max"; + var Maximum = "Maximum"; + var MaxPool = "MaxPool"; + var MaxPoolGrad = "MaxPoolGrad"; + var MaxPool3D = "MaxPool3D"; + var MaxPool3DGrad = "MaxPool3DGrad"; + var MaxPoolWithArgmax = "MaxPoolWithArgmax"; + var Mean = "Mean"; + var Min = "Min"; + var Minimum = "Minimum"; + var MirrorPad = "MirrorPad"; + var Mod = "Mod"; + var Multinomial = "Multinomial"; + var Multiply = "Multiply"; + var Neg = "Neg"; + var NotEqual = "NotEqual"; + var NonMaxSuppressionV3 = "NonMaxSuppressionV3"; + var NonMaxSuppressionV4 = "NonMaxSuppressionV4"; + var NonMaxSuppressionV5 = "NonMaxSuppressionV5"; + var OnesLike = "OnesLike"; + var OneHot = "OneHot"; + var Pack = "Pack"; + var PadV2 = "PadV2"; + var Pow = "Pow"; + var Prelu = "Prelu"; + var Prod = "Prod"; + var Range = "Range"; + var Real = "Real"; + var Reciprocal = "Reciprocal"; + var Relu = "Relu"; + var Reshape = "Reshape"; + var ResizeNearestNeighbor = "ResizeNearestNeighbor"; + var ResizeNearestNeighborGrad = "ResizeNearestNeighborGrad"; + var ResizeBilinear = "ResizeBilinear"; + var ResizeBilinearGrad = "ResizeBilinearGrad"; + var Relu6 = "Relu6"; + var Reverse = "Reverse"; + var Round = "Round"; + var Rsqrt = "Rsqrt"; + var ScatterNd = "ScatterNd"; + var SearchSorted = "SearchSorted"; + var Select = "Select"; + var Selu = "Selu"; + var Slice = "Slice"; + var Sin = "Sin"; + var Sinh = "Sinh"; + var Sign = "Sign"; + var Sigmoid = "Sigmoid"; + var Softplus = "Softplus"; + var Sqrt = "Sqrt"; + var Sum = "Sum"; + var SpaceToBatchND = "SpaceToBatchND"; + var SplitV = "SplitV"; + var Softmax = "Softmax"; + var SparseFillEmptyRows = "SparseFillEmptyRows"; + var SparseReshape = "SparseReshape"; + var SparseSegmentMean = "SparseSegmentMean"; + var SparseSegmentSum = "SparseSegmentSum"; + var SparseToDense = "SparseToDense"; + var SquaredDifference = "SquaredDifference"; + var Square = "Square"; + var StridedSlice = "StridedSlice"; + var StringNGrams = "StringNGrams"; + var StringSplit = "StringSplit"; + var StringToHashBucketFast = "StringToHashBucketFast"; + var Sub = "Sub"; + var Tan = "Tan"; + var Tanh = "Tanh"; + var Tile = "Tile"; + var TopK = "TopK"; + var Transform = "Transform"; + var Transpose = "Transpose"; + var Unique = "Unique"; + var Unpack = "Unpack"; + var UnsortedSegmentSum = "UnsortedSegmentSum"; + var ZerosLike = "ZerosLike"; + var Step = "Step"; + var FromPixels = "FromPixels"; + var RotateWithOffset = "RotateWithOffset"; + var _FusedMatMul = "_FusedMatMul"; + var FusedConv2D = "FusedConv2D"; + var FusedDepthwiseConv2D = "FusedDepthwiseConv2D"; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/kernel_registry.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/log.js + init_define_BUILD_VERSION(); + function warn(...msg) { + if (!(env().getBool("IS_TEST") || env().getBool("PROD"))) { + console.warn(...msg); + } + } + function log(...msg) { + if (!(env().getBool("IS_TEST") || env().getBool("PROD"))) { + console.log(...msg); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/kernel_registry.js + var kernelRegistry = getGlobal("kernelRegistry", () => /* @__PURE__ */ new Map()); + var gradRegistry = getGlobal("gradRegistry", () => /* @__PURE__ */ new Map()); + function getKernel(kernelName, backendName) { + const key = makeKey(kernelName, backendName); + return kernelRegistry.get(key); + } + function getGradient(kernelName) { + return gradRegistry.get(kernelName); + } + function getKernelsForBackend(backendName) { + const it = kernelRegistry.entries(); + const result = []; + while (true) { + const { done, value } = it.next(); + if (done) { + break; + } + const [key, config] = value; + const [backend2] = key.split("_"); + if (backend2 === backendName) { + result.push(config); + } + } + return result; + } + function registerKernel(config) { + const { kernelName, backendName } = config; + const key = makeKey(kernelName, backendName); + if (kernelRegistry.has(key)) { + warn(`The kernel '${kernelName}' for backend '${backendName}' is already registered`); + } + kernelRegistry.set(key, config); + } + function registerGradient(config) { + const { kernelName } = config; + if (gradRegistry.has(kernelName)) { + if (env().getBool("DEBUG")) { + warn(`Overriding the gradient for '${kernelName}'`); + } + } + gradRegistry.set(kernelName, config); + } + function makeKey(kernelName, backendName) { + return `${backendName}_${kernelName}`; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/profiler.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/util.js + var util_exports = {}; + __export(util_exports, { + arraysEqual: () => arraysEqual, + assert: () => assert, + assertNonNegativeIntegerDimensions: () => assertNonNegativeIntegerDimensions, + assertNonNull: () => assertNonNull, + assertShapesMatch: () => assertShapesMatch, + bytesFromStringArray: () => bytesFromStringArray, + bytesPerElement: () => bytesPerElement, + checkConversionForErrors: () => checkConversionForErrors, + clamp: () => clamp, + computeStrides: () => computeStrides, + createScalarValue: () => createScalarValue, + createShuffledIndices: () => createShuffledIndices, + decodeString: () => decodeString, + distSquared: () => distSquared, + encodeString: () => encodeString, + fetch: () => fetch3, + fingerPrint64: () => fingerPrint64, + flatten: () => flatten, + getArrayFromDType: () => getArrayFromDType, + getTypedArrayFromDType: () => getTypedArrayFromDType, + hasEncodingLoss: () => hasEncodingLoss, + hexToLong: () => hexToLong, + indexToLoc: () => indexToLoc, + inferDtype: () => inferDtype, + inferFromImplicitShape: () => inferFromImplicitShape, + isBoolean: () => isBoolean, + isFunction: () => isFunction, + isInt: () => isInt, + isNumber: () => isNumber, + isPromise: () => isPromise, + isScalarShape: () => isScalarShape, + isString: () => isString, + isTypedArray: () => isTypedArray, + isValidDtype: () => isValidDtype, + locToIndex: () => locToIndex, + makeOnesTypedArray: () => makeOnesTypedArray, + makeZerosNestedTypedArray: () => makeZerosNestedTypedArray, + makeZerosTypedArray: () => makeZerosTypedArray, + nearestDivisor: () => nearestDivisor, + nearestLargerEven: () => nearestLargerEven, + now: () => now, + parseAxisParam: () => parseAxisParam, + randUniform: () => randUniform, + repeatedTry: () => repeatedTry, + rightPad: () => rightPad, + shuffle: () => shuffle, + shuffleCombo: () => shuffleCombo, + sizeFromShape: () => sizeFromShape, + sizeToSquarishShape: () => sizeToSquarishShape, + squeezeShape: () => squeezeShape, + sum: () => sum, + swap: () => swap, + tanh: () => tanh, + toNestedArray: () => toNestedArray, + toTypedArray: () => toTypedArray + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/hash_util.js + init_define_BUILD_VERSION(); + var LongExports = __toESM(require_long()); + var Long = LongExports.default || LongExports; + function hexToLong(hex) { + return Long.fromString(hex, true, 16); + } + var k0 = hexToLong("c3a5c85c97cb3127"); + var k1 = hexToLong("b492b66fbe98f273"); + var k2 = hexToLong("9ae16a3b2f90404f"); + function shiftMix(val) { + return val.xor(val.shru(47)); + } + function fetch2(s, offset, numBytes) { + const bytes = s.slice(offset, offset + numBytes); + return Long.fromBytes(Array.from(bytes), true, true); + } + function fetch64(s, offset) { + return fetch2(s, offset, 8); + } + function fetch32(s, offset) { + return fetch2(s, offset, 4); + } + function rotate64(val, shift) { + return shift === 0 ? val : val.shru(shift).or(val.shl(64 - shift)); + } + function hashLen16(u, v, mul2 = hexToLong("9ddfea08eb382d69")) { + let a = u.xor(v).mul(mul2); + a = a.xor(a.shru(47)); + let b = v.xor(a).mul(mul2); + b = b.xor(b.shru(47)); + b = b.mul(mul2); + return b; + } + function weakHashLen32WithSeeds(w, x, y, z, a, b) { + a = a.add(w); + b = rotate64(b.add(a).add(z), 21); + const c = a; + a = a.add(x); + a = a.add(y); + b = b.add(rotate64(a, 44)); + return [a.add(z), b.add(c)]; + } + function weakHashLen32WithSeedsStr(s, offset, a, b) { + return weakHashLen32WithSeeds(fetch64(s, offset), fetch64(s, offset + 8), fetch64(s, offset + 16), fetch64(s, offset + 24), a, b); + } + function hashLen0to16(s, len = s.length) { + if (len >= 8) { + const mul2 = k2.add(len * 2); + const a = fetch64(s, 0).add(k2); + const b = fetch64(s, len - 8); + const c = rotate64(b, 37).mul(mul2).add(a); + const d = rotate64(a, 25).add(b).mul(mul2); + return hashLen16(c, d, mul2); + } + if (len >= 4) { + const mul2 = k2.add(len * 2); + const a = fetch32(s, 0); + return hashLen16(a.shl(3).add(len), fetch32(s, len - 4), mul2); + } + if (len > 0) { + const a = s[0]; + const b = s[len >> 1]; + const c = s[len - 1]; + const y = a + (b << 8); + const z = len + (c << 2); + return shiftMix(k2.mul(y).xor(k0.mul(z))).mul(k2); + } + return k2; + } + function hashLen17to32(s, len = s.length) { + const mul2 = k2.add(len * 2); + const a = fetch64(s, 0).mul(k1); + const b = fetch64(s, 8); + const c = fetch64(s, len - 8).mul(mul2); + const d = fetch64(s, len - 16).mul(k2); + return hashLen16(rotate64(a.add(b), 43).add(rotate64(c, 30)).add(d), a.add(rotate64(b.add(k2), 18)).add(c), mul2); + } + function hashLen33to64(s, len = s.length) { + const mul2 = k2.add(len * 2); + const a = fetch64(s, 0).mul(k2); + const b = fetch64(s, 8); + const c = fetch64(s, len - 8).mul(mul2); + const d = fetch64(s, len - 16).mul(k2); + const y = rotate64(a.add(b), 43).add(rotate64(c, 30)).add(d); + const z = hashLen16(y, a.add(rotate64(b.add(k2), 18)).add(c), mul2); + const e = fetch64(s, 16).mul(mul2); + const f = fetch64(s, 24); + const g = y.add(fetch64(s, len - 32)).mul(mul2); + const h = z.add(fetch64(s, len - 24)).mul(mul2); + return hashLen16(rotate64(e.add(f), 43).add(rotate64(g, 30)).add(h), e.add(rotate64(f.add(a), 18)).add(g), mul2); + } + function fingerPrint64(s, len = s.length) { + const seed = Long.fromNumber(81, true); + if (len <= 32) { + if (len <= 16) { + return hashLen0to16(s, len); + } else { + return hashLen17to32(s, len); + } + } else if (len <= 64) { + return hashLen33to64(s, len); + } + let x = seed; + let y = seed.mul(k1).add(113); + let z = shiftMix(y.mul(k2).add(113)).mul(k2); + let v = [Long.UZERO, Long.UZERO]; + let w = [Long.UZERO, Long.UZERO]; + x = x.mul(k2).add(fetch64(s, 0)); + let offset = 0; + const end = (len - 1 >> 6) * 64; + const last64 = end + (len - 1 & 63) - 63; + do { + x = rotate64(x.add(y).add(v[0]).add(fetch64(s, offset + 8)), 37).mul(k1); + y = rotate64(y.add(v[1]).add(fetch64(s, offset + 48)), 42).mul(k1); + x = x.xor(w[1]); + y = y.add(v[0]).add(fetch64(s, offset + 40)); + z = rotate64(z.add(w[0]), 33).mul(k1); + v = weakHashLen32WithSeedsStr(s, offset, v[1].mul(k1), x.add(w[0])); + w = weakHashLen32WithSeedsStr(s, offset + 32, z.add(w[1]), y.add(fetch64(s, offset + 16))); + [z, x] = [x, z]; + offset += 64; + } while (offset !== end); + const mul2 = k1.add(z.and(255).shl(1)); + offset = last64; + w[0] = w[0].add(len - 1 & 63); + v[0] = v[0].add(w[0]); + w[0] = w[0].add(v[0]); + x = rotate64(x.add(y).add(v[0]).add(fetch64(s, offset + 8)), 37).mul(mul2); + y = rotate64(y.add(v[1]).add(fetch64(s, offset + 48)), 42).mul(mul2); + x = x.xor(w[1].mul(9)); + y = y.add(v[0].mul(9).add(fetch64(s, offset + 40))); + z = rotate64(z.add(w[0]), 33).mul(mul2); + v = weakHashLen32WithSeedsStr(s, offset, v[1].mul(mul2), x.add(w[0])); + w = weakHashLen32WithSeedsStr(s, offset + 32, z.add(w[1]), y.add(fetch64(s, offset + 16))); + [z, x] = [x, z]; + return hashLen16(hashLen16(v[0], w[0], mul2).add(shiftMix(y).mul(k0)).add(z), hashLen16(v[1], w[1], mul2).add(x), mul2); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/util.js + function createScalarValue(value, dtype) { + if (dtype === "string") { + return encodeString(value); + } + return toTypedArray([value], dtype); + } + function noConversionNeeded(a, dtype) { + return a instanceof Float32Array && dtype === "float32" || a instanceof Int32Array && dtype === "int32" || a instanceof Uint8Array && dtype === "bool"; + } + function toTypedArray(a, dtype) { + if (dtype === "string") { + throw new Error("Cannot convert a string[] to a TypedArray"); + } + if (Array.isArray(a)) { + a = flatten(a); + } + if (env().getBool("DEBUG")) { + checkConversionForErrors(a, dtype); + } + if (noConversionNeeded(a, dtype)) { + return a; + } + if (dtype == null || dtype === "float32" || dtype === "complex64") { + return new Float32Array(a); + } else if (dtype === "int32") { + return new Int32Array(a); + } else if (dtype === "bool") { + const bool = new Uint8Array(a.length); + for (let i = 0; i < bool.length; ++i) { + if (Math.round(a[i]) !== 0) { + bool[i] = 1; + } + } + return bool; + } else { + throw new Error(`Unknown data type ${dtype}`); + } + } + function now() { + return env().platform.now(); + } + function fetch3(path, requestInits) { + return env().platform.fetch(path, requestInits); + } + function encodeString(s, encoding = "utf-8") { + encoding = encoding || "utf-8"; + return env().platform.encode(s, encoding); + } + function decodeString(bytes, encoding = "utf-8") { + encoding = encoding || "utf-8"; + return env().platform.decode(bytes, encoding); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/profiler.js + var Profiler = class { + constructor(backendTimer, logger) { + this.backendTimer = backendTimer; + this.logger = logger; + if (logger == null) { + this.logger = new Logger(); + } + } + profileKernel(kernelName, inputs, f) { + let outputs; + const holdResultWrapperFn = () => { + outputs = f(); + }; + let timer; + const start = now(); + if (this.backendTimer.timerAvailable()) { + timer = this.backendTimer.time(holdResultWrapperFn); + } else { + holdResultWrapperFn(); + for (const output of outputs) { + output.dataSync(); + } + timer = Promise.resolve({ kernelMs: now() - start }); + } + if (env().getBool("CHECK_COMPUTATION_FOR_ERRORS")) { + for (let i = 0; i < outputs.length; i++) { + const output = outputs[i]; + output.data().then((tensorVals) => { + checkComputationForErrors(tensorVals, output.dtype, kernelName); + }); + } + } + const kernelProfile = { + kernelName, + outputs, + inputs, + timeMs: timer.then((timing) => timing.kernelMs), + extraInfo: timer.then((timing) => timing.getExtraProfileInfo != null ? timing.getExtraProfileInfo() : "") + }; + return kernelProfile; + } + logKernelProfile(kernelProfile) { + const { kernelName, outputs, timeMs, inputs, extraInfo } = kernelProfile; + outputs.forEach((result) => { + Promise.all([result.data(), timeMs, extraInfo]).then((valueContainer) => { + this.logger.logKernelProfile(kernelName, result, valueContainer[0], valueContainer[1], inputs, valueContainer[2]); + }); + }); + } + }; + function checkComputationForErrors(vals, dtype, kernelName) { + if (dtype !== "float32") { + return false; + } + for (let i = 0; i < vals.length; i++) { + const num = vals[i]; + if (isNaN(num) || !isFinite(num)) { + console.warn(`Found ${num} in the result of '${kernelName}'`); + return true; + } + } + return false; + } + var Logger = class { + logKernelProfile(name, result, vals, timeMs, inputs, extraInfo) { + const time = typeof timeMs === "number" ? rightPad(`${timeMs}ms`, 9) : timeMs["error"]; + const paddedName = rightPad(name, 25); + const rank = result.rank; + const size = result.size; + const shape = rightPad(result.shape.toString(), 14); + let inputShapesDescription = ""; + for (const name2 in inputs) { + const input2 = inputs[name2]; + if (input2 != null) { + const inputShape = input2.shape || result.shape; + const inputRank = inputShape.length; + inputShapesDescription += `${name2}: ${inputRank}D ${inputRank > 0 ? inputShape : ""} `; + } + } + console.log(`%c${paddedName} %c${time} %c${rank}D ${shape} %c${size} %c${inputShapesDescription} %c${extraInfo}`, "font-weight:bold", "color:red", "color:blue", "color: orange", "color: green", "color: steelblue"); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tape.js + init_define_BUILD_VERSION(); + function getFilteredNodesXToY(tape, xs, y) { + const tensorsFromX = {}; + const nodesFromX = {}; + for (let i = 0; i < xs.length; i++) { + tensorsFromX[xs[i].id] = true; + } + for (let i = 0; i < tape.length; i++) { + const node = tape[i]; + const nodeInputs = node.inputs; + for (const inputName in nodeInputs) { + const input2 = nodeInputs[inputName]; + let anyInputFromX = false; + for (let j = 0; j < xs.length; j++) { + if (tensorsFromX[input2.id]) { + node.outputs.forEach((output) => tensorsFromX[output.id] = true); + anyInputFromX = true; + nodesFromX[node.id] = true; + break; + } + } + if (anyInputFromX) { + break; + } + } + } + const tensorsLeadToY = {}; + tensorsLeadToY[y.id] = true; + const nodesToY = {}; + for (let i = tape.length - 1; i >= 0; i--) { + const node = tape[i]; + const nodeInputs = node.inputs; + for (let j = 0; j < node.outputs.length; j++) { + if (tensorsLeadToY[node.outputs[j].id]) { + for (const inputName in nodeInputs) { + tensorsLeadToY[nodeInputs[inputName].id] = true; + nodesToY[node.id] = true; + } + break; + } + } + } + const filteredTape = []; + for (let i = 0; i < tape.length; i++) { + const node = tape[i]; + if (nodesFromX[node.id] && nodesToY[node.id]) { + const prunedInputs = {}; + for (const inputName in node.inputs) { + const nodeInput = node.inputs[inputName]; + if (tensorsFromX[nodeInput.id]) { + prunedInputs[inputName] = nodeInput; + } + } + const prunedNode = Object.assign({}, node); + prunedNode.inputs = prunedInputs; + prunedNode.outputs = node.outputs; + filteredTape.push(prunedNode); + } + } + return filteredTape; + } + function backpropagateGradients(tensorAccumulatedGradientMap, filteredTape, tidy2, add4) { + for (let i = filteredTape.length - 1; i >= 0; i--) { + const node = filteredTape[i]; + const dys = []; + node.outputs.forEach((o) => { + const gradTensor = tensorAccumulatedGradientMap[o.id]; + if (gradTensor != null) { + dys.push(gradTensor); + } else { + dys.push(null); + } + }); + if (node.gradient == null) { + throw new Error(`Cannot compute gradient: gradient function not found for ${node.kernelName}.`); + } + const inputGradients = node.gradient(dys); + for (const inputName in node.inputs) { + if (!(inputName in inputGradients)) { + throw new Error(`Cannot backprop through input ${inputName}. Available gradients found: ${Object.keys(inputGradients)}.`); + } + const dx = tidy2(() => inputGradients[inputName]()); + if (dx.dtype !== "float32") { + throw new Error(`Error in gradient for op ${node.kernelName}. The gradient of input ${inputName} must have 'float32' dtype, but has '${dx.dtype}'`); + } + const x = node.inputs[inputName]; + if (!arraysEqual(dx.shape, x.shape)) { + throw new Error(`Error in gradient for op ${node.kernelName}. The gradient of input '${inputName}' has shape '${dx.shape}', which does not match the shape of the input '${x.shape}'`); + } + if (tensorAccumulatedGradientMap[x.id] == null) { + tensorAccumulatedGradientMap[x.id] = dx; + } else { + const curGradient = tensorAccumulatedGradientMap[x.id]; + tensorAccumulatedGradientMap[x.id] = add4(curGradient, dx); + curGradient.dispose(); + } + } + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor_format.js + init_define_BUILD_VERSION(); + var FORMAT_LIMIT_NUM_VALS = 20; + var FORMAT_NUM_FIRST_LAST_VALS = 3; + var FORMAT_NUM_SIG_DIGITS = 7; + function tensorToString(vals, shape, dtype, verbose) { + const strides = computeStrides(shape); + const padPerCol = computeMaxSizePerColumn(vals, shape, dtype, strides); + const rank = shape.length; + const valsLines = subTensorToString(vals, shape, dtype, strides, padPerCol); + const lines = ["Tensor"]; + if (verbose) { + lines.push(` dtype: ${dtype}`); + lines.push(` rank: ${rank}`); + lines.push(` shape: [${shape}]`); + lines.push(` values:`); + } + lines.push(valsLines.map((l) => " " + l).join("\n")); + return lines.join("\n"); + } + function computeMaxSizePerColumn(vals, shape, dtype, strides) { + const n = sizeFromShape(shape); + const numCols = strides[strides.length - 1]; + const padPerCol = new Array(numCols).fill(0); + const rank = shape.length; + const valuesOrTuples = dtype === "complex64" ? createComplexTuples(vals) : vals; + if (rank > 1) { + for (let row = 0; row < n / numCols; row++) { + const offset = row * numCols; + for (let j = 0; j < numCols; j++) { + padPerCol[j] = Math.max(padPerCol[j], valToString(valuesOrTuples[offset + j], 0, dtype).length); + } + } + } + return padPerCol; + } + function valToString(val, pad3, dtype) { + let valStr; + if (Array.isArray(val)) { + valStr = `${parseFloat(val[0].toFixed(FORMAT_NUM_SIG_DIGITS))} + ${parseFloat(val[1].toFixed(FORMAT_NUM_SIG_DIGITS))}j`; + } else if (isString(val)) { + valStr = `'${val}'`; + } else if (dtype === "bool") { + valStr = boolNumToString(val); + } else { + valStr = parseFloat(val.toFixed(FORMAT_NUM_SIG_DIGITS)).toString(); + } + return rightPad(valStr, pad3); + } + function boolNumToString(v) { + return v === 0 ? "false" : "true"; + } + function subTensorToString(vals, shape, dtype, strides, padPerCol, isLast = true) { + const storagePerElement = dtype === "complex64" ? 2 : 1; + const size = shape[0]; + const rank = shape.length; + if (rank === 0) { + if (dtype === "complex64") { + const complexTuple = createComplexTuples(vals); + return [valToString(complexTuple[0], 0, dtype)]; + } + if (dtype === "bool") { + return [boolNumToString(vals[0])]; + } + return [vals[0].toString()]; + } + if (rank === 1) { + if (size > FORMAT_LIMIT_NUM_VALS) { + const firstValsSize = FORMAT_NUM_FIRST_LAST_VALS * storagePerElement; + let firstVals = Array.from(vals.slice(0, firstValsSize)); + let lastVals = Array.from(vals.slice((size - FORMAT_NUM_FIRST_LAST_VALS) * storagePerElement, size * storagePerElement)); + if (dtype === "complex64") { + firstVals = createComplexTuples(firstVals); + lastVals = createComplexTuples(lastVals); + } + return [ + "[" + firstVals.map((x, i) => valToString(x, padPerCol[i], dtype)).join(", ") + ", ..., " + lastVals.map((x, i) => valToString(x, padPerCol[size - FORMAT_NUM_FIRST_LAST_VALS + i], dtype)).join(", ") + "]" + ]; + } + const displayVals = dtype === "complex64" ? createComplexTuples(vals) : Array.from(vals); + return [ + "[" + displayVals.map((x, i) => valToString(x, padPerCol[i], dtype)).join(", ") + "]" + ]; + } + const subshape = shape.slice(1); + const substrides = strides.slice(1); + const stride = strides[0] * storagePerElement; + const lines = []; + if (size > FORMAT_LIMIT_NUM_VALS) { + for (let i = 0; i < FORMAT_NUM_FIRST_LAST_VALS; i++) { + const start = i * stride; + const end = start + stride; + lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, false)); + } + lines.push("..."); + for (let i = size - FORMAT_NUM_FIRST_LAST_VALS; i < size; i++) { + const start = i * stride; + const end = start + stride; + lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, i === size - 1)); + } + } else { + for (let i = 0; i < size; i++) { + const start = i * stride; + const end = start + stride; + lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, i === size - 1)); + } + } + const sep = rank === 2 ? "," : ""; + lines[0] = "[" + lines[0] + sep; + for (let i = 1; i < lines.length - 1; i++) { + lines[i] = " " + lines[i] + sep; + } + let newLineSep = ",\n"; + for (let i = 2; i < rank; i++) { + newLineSep += "\n"; + } + lines[lines.length - 1] = " " + lines[lines.length - 1] + "]" + (isLast ? "" : newLineSep); + return lines; + } + function createComplexTuples(vals) { + const complexTuples = []; + for (let i = 0; i < vals.length; i += 2) { + complexTuples.push([vals[i], vals[i + 1]]); + } + return complexTuples; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor.js + var TensorBuffer = class { + constructor(shape, dtype, values) { + this.dtype = dtype; + this.shape = shape.slice(); + this.size = sizeFromShape(shape); + if (values != null) { + const n = values.length; + assert(n === this.size, () => `Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`); + } + if (dtype === "complex64") { + throw new Error(`complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).`); + } + this.values = values || getArrayFromDType(dtype, this.size); + this.strides = computeStrides(shape); + } + set(value, ...locs) { + if (locs.length === 0) { + locs = [0]; + } + assert(locs.length === this.rank, () => `The number of provided coordinates (${locs.length}) must match the rank (${this.rank})`); + const index = this.locToIndex(locs); + this.values[index] = value; + } + get(...locs) { + if (locs.length === 0) { + locs = [0]; + } + let i = 0; + for (const loc of locs) { + if (loc < 0 || loc >= this.shape[i]) { + const msg = `Requested out of range element at ${locs}. Buffer shape=${this.shape}`; + throw new Error(msg); + } + i++; + } + let index = locs[locs.length - 1]; + for (let i2 = 0; i2 < locs.length - 1; ++i2) { + index += this.strides[i2] * locs[i2]; + } + return this.values[index]; + } + locToIndex(locs) { + if (this.rank === 0) { + return 0; + } else if (this.rank === 1) { + return locs[0]; + } + let index = locs[locs.length - 1]; + for (let i = 0; i < locs.length - 1; ++i) { + index += this.strides[i] * locs[i]; + } + return index; + } + indexToLoc(index) { + if (this.rank === 0) { + return []; + } else if (this.rank === 1) { + return [index]; + } + const locs = new Array(this.shape.length); + for (let i = 0; i < locs.length - 1; ++i) { + locs[i] = Math.floor(index / this.strides[i]); + index -= locs[i] * this.strides[i]; + } + locs[locs.length - 1] = index; + return locs; + } + get rank() { + return this.shape.length; + } + toTensor() { + return trackerFn().makeTensor(this.values, this.shape, this.dtype); + } + }; + var trackerFn = null; + var opHandler = null; + var deprecationWarningFn = null; + function setTensorTracker(fn) { + trackerFn = fn; + } + function setOpHandler(handler) { + opHandler = handler; + } + function setDeprecationWarningFn(fn) { + deprecationWarningFn = fn; + } + var Tensor = class { + constructor(shape, dtype, dataId, id) { + this.kept = false; + this.isDisposedInternal = false; + this.shape = shape.slice(); + this.dtype = dtype || "float32"; + this.size = sizeFromShape(shape); + this.strides = computeStrides(shape); + this.dataId = dataId; + this.id = id; + this.rankType = this.rank < 5 ? this.rank.toString() : "higher"; + } + get rank() { + return this.shape.length; + } + async buffer() { + const vals = await this.data(); + return opHandler.buffer(this.shape, this.dtype, vals); + } + bufferSync() { + return opHandler.buffer(this.shape, this.dtype, this.dataSync()); + } + async array() { + const vals = await this.data(); + return toNestedArray(this.shape, vals, this.dtype === "complex64"); + } + arraySync() { + return toNestedArray(this.shape, this.dataSync(), this.dtype === "complex64"); + } + async data() { + this.throwIfDisposed(); + const data = trackerFn().read(this.dataId); + if (this.dtype === "string") { + const bytes = await data; + try { + return bytes.map((b) => decodeString(b)); + } catch (_a) { + throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); + } + } + return data; + } + dataToGPU(options) { + this.throwIfDisposed(); + return trackerFn().readToGPU(this.dataId, options); + } + dataSync() { + this.throwIfDisposed(); + const data = trackerFn().readSync(this.dataId); + if (this.dtype === "string") { + try { + return data.map((b) => decodeString(b)); + } catch (_a) { + throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); + } + } + return data; + } + async bytes() { + this.throwIfDisposed(); + const data = await trackerFn().read(this.dataId); + if (this.dtype === "string") { + return data; + } else { + return new Uint8Array(data.buffer); + } + } + dispose() { + if (this.isDisposed) { + return; + } + trackerFn().disposeTensor(this); + this.isDisposedInternal = true; + } + get isDisposed() { + return this.isDisposedInternal; + } + throwIfDisposed() { + if (this.isDisposed) { + throw new Error(`Tensor is disposed.`); + } + } + print(verbose = false) { + return opHandler.print(this, verbose); + } + clone() { + this.throwIfDisposed(); + return opHandler.clone(this); + } + toString(verbose = false) { + const vals = this.dataSync(); + return tensorToString(vals, this.shape, this.dtype, verbose); + } + cast(dtype) { + this.throwIfDisposed(); + return opHandler.cast(this, dtype); + } + variable(trainable = true, name, dtype) { + this.throwIfDisposed(); + return trackerFn().makeVariable(this, trainable, name, dtype); + } + }; + Object.defineProperty(Tensor, Symbol.hasInstance, { + value: (instance) => { + return !!instance && instance.data != null && instance.dataSync != null && instance.throwIfDisposed != null; + } + }); + function getGlobalTensorClass() { + return getGlobal("Tensor", () => { + return Tensor; + }); + } + getGlobalTensorClass(); + var Variable = class extends Tensor { + constructor(initialValue, trainable, name, tensorId) { + super(initialValue.shape, initialValue.dtype, initialValue.dataId, tensorId); + this.trainable = trainable; + this.name = name; + } + assign(newValue) { + if (newValue.dtype !== this.dtype) { + throw new Error(`dtype of the new value (${newValue.dtype}) and previous value (${this.dtype}) must match`); + } + if (!arraysEqual(newValue.shape, this.shape)) { + throw new Error(`shape of the new value (${newValue.shape}) and previous value (${this.shape}) must match`); + } + trackerFn().disposeTensor(this); + this.dataId = newValue.dataId; + trackerFn().incRef(this, null); + } + dispose() { + trackerFn().disposeVariable(this); + this.isDisposedInternal = true; + } + }; + Object.defineProperty(Variable, Symbol.hasInstance, { + value: (instance) => { + return instance instanceof Tensor && instance.assign != null && instance.assign instanceof Function; + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor_util.js + var tensor_util_exports = {}; + __export(tensor_util_exports, { + assertTypesMatch: () => assertTypesMatch, + getTensorsInContainer: () => getTensorsInContainer, + isTensorInList: () => isTensorInList, + makeTypesMatch: () => makeTypesMatch + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/types.js + init_define_BUILD_VERSION(); + var Rank; + (function(Rank2) { + Rank2["R0"] = "R0"; + Rank2["R1"] = "R1"; + Rank2["R2"] = "R2"; + Rank2["R3"] = "R3"; + Rank2["R4"] = "R4"; + Rank2["R5"] = "R5"; + Rank2["R6"] = "R6"; + })(Rank || (Rank = {})); + var UpcastInt32AndMap; + (function(UpcastInt32AndMap2) { + UpcastInt32AndMap2["float32"] = "float32"; + UpcastInt32AndMap2["int32"] = "int32"; + UpcastInt32AndMap2["bool"] = "int32"; + UpcastInt32AndMap2["complex64"] = "complex64"; + })(UpcastInt32AndMap || (UpcastInt32AndMap = {})); + var UpcastBoolAndMap; + (function(UpcastBoolAndMap2) { + UpcastBoolAndMap2["float32"] = "float32"; + UpcastBoolAndMap2["int32"] = "int32"; + UpcastBoolAndMap2["bool"] = "bool"; + UpcastBoolAndMap2["complex64"] = "complex64"; + })(UpcastBoolAndMap || (UpcastBoolAndMap = {})); + var UpcastFloat32AndMap; + (function(UpcastFloat32AndMap2) { + UpcastFloat32AndMap2["float32"] = "float32"; + UpcastFloat32AndMap2["int32"] = "float32"; + UpcastFloat32AndMap2["bool"] = "float32"; + UpcastFloat32AndMap2["complex64"] = "complex64"; + })(UpcastFloat32AndMap || (UpcastFloat32AndMap = {})); + var UpcastComplex64AndMap; + (function(UpcastComplex64AndMap2) { + UpcastComplex64AndMap2["float32"] = "complex64"; + UpcastComplex64AndMap2["int32"] = "complex64"; + UpcastComplex64AndMap2["bool"] = "complex64"; + UpcastComplex64AndMap2["complex64"] = "complex64"; + })(UpcastComplex64AndMap || (UpcastComplex64AndMap = {})); + var upcastTypeMap = { + "float32": UpcastFloat32AndMap, + "int32": UpcastInt32AndMap, + "bool": UpcastBoolAndMap, + "complex64": UpcastComplex64AndMap + }; + function upcastType(typeA, typeB) { + if (typeA === "string" || typeB === "string") { + if (typeA === "string" && typeB === "string") { + return "string"; + } + throw new Error(`Can not upcast ${typeA} with ${typeB}`); + } + return upcastTypeMap[typeA][typeB]; + } + function sumOutType(type) { + return upcastType(type, "int32"); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor_util.js + function makeTypesMatch(a, b) { + if (a.dtype === b.dtype) { + return [a, b]; + } + const dtype = upcastType(a.dtype, b.dtype); + return [a.cast(dtype), b.cast(dtype)]; + } + function assertTypesMatch(a, b) { + assert(a.dtype === b.dtype, () => `The dtypes of the first(${a.dtype}) and second(${b.dtype}) input must match`); + } + function isTensorInList(tensor2, tensorList) { + return tensorList.some((x) => x.id === tensor2.id); + } + function getTensorsInContainer(result) { + const list = []; + const seen = /* @__PURE__ */ new Set(); + walkTensorContainer(result, list, seen); + return list; + } + function walkTensorContainer(container, list, seen) { + if (container == null) { + return; + } + if (container instanceof Tensor) { + list.push(container); + return; + } + if (!isIterable(container)) { + return; + } + const iterable = container; + for (const k in iterable) { + const val = iterable[k]; + if (!seen.has(val)) { + seen.add(val); + walkTensorContainer(val, list, seen); + } + } + } + function isIterable(obj) { + return Array.isArray(obj) || typeof obj === "object"; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/engine.js + function isRegisteredKernelInvocation(kernelInvocation) { + return kernelInvocation.kernelName != null; + } + var EngineState = class { + constructor() { + this.registeredVariables = {}; + this.nextTapeNodeId = 0; + this.numBytes = 0; + this.numTensors = 0; + this.numStringTensors = 0; + this.numDataBuffers = 0; + this.gradientDepth = 0; + this.kernelDepth = 0; + this.scopeStack = []; + this.numDataMovesStack = []; + this.nextScopeId = 0; + this.tensorInfo = /* @__PURE__ */ new WeakMap(); + this.profiling = false; + this.activeProfile = { + newBytes: 0, + newTensors: 0, + peakBytes: 0, + kernels: [], + result: null, + get kernelNames() { + return Array.from(new Set(this.kernels.map((k) => k.name))); + } + }; + } + dispose() { + for (const variableName in this.registeredVariables) { + this.registeredVariables[variableName].dispose(); + } + } + }; + var Engine = class { + constructor(ENV7) { + this.ENV = ENV7; + this.registry = {}; + this.registryFactory = {}; + this.pendingBackendInitId = 0; + this.state = new EngineState(); + } + async ready() { + if (this.pendingBackendInit != null) { + return this.pendingBackendInit.then(() => { + }); + } + if (this.backendInstance != null) { + return; + } + const sortedBackends = this.getSortedBackends(); + for (let i = 0; i < sortedBackends.length; i++) { + const backendName = sortedBackends[i]; + const success = await this.initializeBackend(backendName).success; + if (success) { + await this.setBackend(backendName); + return; + } + } + throw new Error(`Could not initialize any backends, all backend initializations failed.`); + } + get backend() { + if (this.pendingBackendInit != null) { + throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`); + } + if (this.backendInstance == null) { + const { name, asyncInit } = this.initializeBackendsAndReturnBest(); + if (asyncInit) { + throw new Error(`The highest priority backend '${name}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`); + } + this.setBackend(name); + } + return this.backendInstance; + } + backendNames() { + return Object.keys(this.registryFactory); + } + findBackend(backendName) { + if (!(backendName in this.registry)) { + if (backendName in this.registryFactory) { + const { asyncInit } = this.initializeBackend(backendName); + if (asyncInit) { + return null; + } + } else { + return null; + } + } + return this.registry[backendName]; + } + findBackendFactory(backendName) { + if (!(backendName in this.registryFactory)) { + return null; + } + return this.registryFactory[backendName].factory; + } + registerBackend(backendName, factory, priority = 1) { + if (backendName in this.registryFactory) { + warn(`${backendName} backend was already registered. Reusing existing backend factory.`); + return false; + } + this.registryFactory[backendName] = { factory, priority }; + return true; + } + async setBackend(backendName) { + if (this.registryFactory[backendName] == null) { + throw new Error(`Backend name '${backendName}' not found in registry`); + } + this.backendName = backendName; + if (this.registry[backendName] == null) { + this.backendInstance = null; + const { success, asyncInit } = this.initializeBackend(backendName); + const result = asyncInit ? await success : success; + if (!result) { + return false; + } + } + this.backendInstance = this.registry[backendName]; + this.setupRegisteredKernels(); + this.profiler = new Profiler(this.backendInstance); + return true; + } + setupRegisteredKernels() { + const kernels = getKernelsForBackend(this.backendName); + kernels.forEach((kernel) => { + if (kernel.setupFunc != null) { + kernel.setupFunc(this.backendInstance); + } + }); + } + disposeRegisteredKernels(backendName) { + const kernels = getKernelsForBackend(backendName); + kernels.forEach((kernel) => { + if (kernel.disposeFunc != null) { + kernel.disposeFunc(this.registry[backendName]); + } + }); + } + initializeBackend(backendName) { + const registryFactoryEntry = this.registryFactory[backendName]; + if (registryFactoryEntry == null) { + throw new Error(`Cannot initialize backend ${backendName}, no registration found.`); + } + try { + const backend2 = registryFactoryEntry.factory(); + if (backend2 && !(backend2 instanceof KernelBackend) && typeof backend2.then === "function") { + const promiseId = ++this.pendingBackendInitId; + const success = backend2.then((backendInstance) => { + if (promiseId < this.pendingBackendInitId) { + return false; + } + this.registry[backendName] = backendInstance; + this.pendingBackendInit = null; + return true; + }).catch((err) => { + if (promiseId < this.pendingBackendInitId) { + return false; + } + this.pendingBackendInit = null; + warn(`Initialization of backend ${backendName} failed`); + warn(err.stack || err.message); + return false; + }); + this.pendingBackendInit = success; + return { success, asyncInit: true }; + } else { + this.registry[backendName] = backend2; + return { success: true, asyncInit: false }; + } + } catch (err) { + warn(`Initialization of backend ${backendName} failed`); + warn(err.stack || err.message); + return { success: false, asyncInit: false }; + } + } + removeBackend(backendName) { + if (!(backendName in this.registryFactory)) { + throw new Error(`${backendName} backend not found in registry`); + } + if (this.backendName === backendName && this.pendingBackendInit != null) { + this.pendingBackendInitId++; + } + if (backendName in this.registry) { + this.disposeRegisteredKernels(backendName); + this.registry[backendName].dispose(); + delete this.registry[backendName]; + } + delete this.registryFactory[backendName]; + if (this.backendName === backendName) { + this.pendingBackendInit = null; + this.backendName = null; + this.backendInstance = null; + } + } + getSortedBackends() { + if (Object.keys(this.registryFactory).length === 0) { + throw new Error("No backend found in registry."); + } + return Object.keys(this.registryFactory).sort((a, b) => { + return this.registryFactory[b].priority - this.registryFactory[a].priority; + }); + } + initializeBackendsAndReturnBest() { + const sortedBackends = this.getSortedBackends(); + for (let i = 0; i < sortedBackends.length; i++) { + const backendName = sortedBackends[i]; + const { success, asyncInit } = this.initializeBackend(backendName); + if (asyncInit || success) { + return { name: backendName, asyncInit }; + } + } + throw new Error(`Could not initialize any backends, all backend initializations failed.`); + } + moveData(backend2, dataId) { + const info = this.state.tensorInfo.get(dataId); + const srcBackend = info.backend; + const values = this.readSync(dataId); + const refCount = srcBackend.refCount(dataId); + srcBackend.disposeData(dataId, true); + info.backend = backend2; + backend2.move(dataId, values, info.shape, info.dtype, refCount); + if (this.shouldCheckForMemLeaks()) { + this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1]++; + } + } + tidy(nameOrFn, fn) { + let name = null; + if (fn == null) { + if (typeof nameOrFn !== "function") { + throw new Error("Please provide a function to tidy()"); + } + fn = nameOrFn; + } else { + if (typeof nameOrFn !== "string" && !(nameOrFn instanceof String)) { + throw new Error("When calling with two arguments, the first argument to tidy() must be a string"); + } + if (typeof fn !== "function") { + throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function"); + } + name = nameOrFn; + } + let result; + return this.scopedRun(() => this.startScope(name), () => this.endScope(result), () => { + result = fn(); + if (result instanceof Promise) { + console.error("Cannot return a Promise inside of tidy."); + } + return result; + }); + } + scopedRun(start, end, f) { + start(); + try { + const res = f(); + end(); + return res; + } catch (ex) { + end(); + throw ex; + } + } + nextTensorId() { + return Engine.nextTensorId++; + } + nextVariableId() { + return Engine.nextVariableId++; + } + clone(x) { + const y = ENGINE.runKernel(Identity, { x }); + const inputs = { x }; + const grad = (dy) => ({ + x: () => { + const dtype = "float32"; + const gradInputs = { x: dy }; + const attrs = { dtype }; + return ENGINE.runKernel( + Cast, + gradInputs, + attrs + ); + } + }); + const saved = []; + this.addTapeNode(this.state.activeScope.name, inputs, [y], grad, saved, {}); + return y; + } + runKernel(kernelName, inputs, attrs) { + if (this.backendName == null) { + this.backend; + } + const hasKernel = getKernel(kernelName, this.backendName) != null; + if (!hasKernel) { + throw new Error(`Kernel '${kernelName}' not registered for backend '${this.backendName}'`); + } + return this.runKernelFunc({ kernelName, inputs, attrs }); + } + shouldCheckForMemLeaks() { + return this.ENV.getBool("IS_TEST"); + } + checkKernelForMemLeak(kernelName, numDataIdsBefore, outInfos) { + const numDataIdsAfter = this.backend.numDataIds(); + let numOutputDataIds = 0; + outInfos.forEach((info) => { + numOutputDataIds += info.dtype === "complex64" ? 3 : 1; + }); + const numMoves = this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1]; + const dataIdsLeaked = numDataIdsAfter - numDataIdsBefore - numOutputDataIds - numMoves; + if (dataIdsLeaked > 0) { + throw new Error(`Backend '${this.backendName}' has an internal memory leak (${dataIdsLeaked} data ids) after running '${kernelName}'`); + } + } + runKernelFunc(kernelParams) { + let outputs; + let saved = []; + const isTapeOn = this.isTapeOn(); + const startingBytecount = this.state.numBytes; + const startingNumTensors = this.state.numTensors; + if (this.shouldCheckForMemLeaks()) { + this.state.numDataMovesStack.push(0); + } + let kernelFunc3; + if (this.backendName == null) { + this.backend; + } + let out; + const kernelOrScopeName = isRegisteredKernelInvocation(kernelParams) ? kernelParams.kernelName : this.state.activeScope != null ? this.state.activeScope.name : ""; + if (isRegisteredKernelInvocation(kernelParams)) { + const { kernelName, inputs: inputs2, attrs: attrs2 } = kernelParams; + if (this.backendName == null) { + this.backend; + } + const kernel = getKernel(kernelName, this.backendName); + assert(kernel != null, () => `Cannot find registered kernel '${kernelName}' for backend '${this.backendName}'`); + kernelFunc3 = () => { + const numDataIdsBefore = this.backend.numDataIds(); + out = kernel.kernelFunc({ inputs: inputs2, attrs: attrs2, backend: this.backend }); + const outInfos = Array.isArray(out) ? out : [out]; + if (this.shouldCheckForMemLeaks()) { + this.checkKernelForMemLeak(kernelName, numDataIdsBefore, outInfos); + } + const outTensors = outInfos.map((outInfo) => { + if (outInfo.rank != null) { + return outInfo; + } + return this.makeTensorFromTensorInfo(outInfo); + }); + if (isTapeOn) { + const tensorsToSave = this.getTensorsForGradient(kernelName, inputs2, outTensors); + saved = this.saveTensorsForBackwardMode(tensorsToSave); + } + return outTensors; + }; + } else { + const { forwardFunc } = kernelParams; + const saveFunc = (tensors) => { + if (!isTapeOn) { + return; + } + saved = tensors.map((tensor2) => this.keep(this.clone(tensor2))); + }; + kernelFunc3 = () => { + const numDataIdsBefore = this.backend.numDataIds(); + out = this.tidy(() => forwardFunc(this.backend, saveFunc)); + const outs = Array.isArray(out) ? out : [out]; + if (this.shouldCheckForMemLeaks()) { + this.checkKernelForMemLeak(kernelOrScopeName, numDataIdsBefore, outs); + } + return outs; + }; + } + const { inputs, attrs } = kernelParams; + const backwardsFunc = isRegisteredKernelInvocation(kernelParams) ? null : kernelParams.backwardsFunc; + let kernelProfile; + this.scopedRun( + () => this.state.kernelDepth++, + () => this.state.kernelDepth--, + () => { + if (!this.ENV.getBool("DEBUG") && !this.state.profiling) { + outputs = kernelFunc3(); + } else { + kernelProfile = this.profiler.profileKernel(kernelOrScopeName, inputs, () => kernelFunc3()); + if (this.ENV.getBool("DEBUG")) { + this.profiler.logKernelProfile(kernelProfile); + } + outputs = kernelProfile.outputs; + } + } + ); + if (isTapeOn) { + this.addTapeNode(kernelOrScopeName, inputs, outputs, backwardsFunc, saved, attrs); + } + if (this.state.profiling) { + this.state.activeProfile.kernels.push({ + name: kernelOrScopeName, + bytesAdded: this.state.numBytes - startingBytecount, + totalBytesSnapshot: this.state.numBytes, + tensorsAdded: this.state.numTensors - startingNumTensors, + totalTensorsSnapshot: this.state.numTensors, + inputShapes: Object.keys(inputs).map((key) => inputs[key] != null ? inputs[key].shape : null), + outputShapes: outputs.map((item) => item.shape), + kernelTimeMs: kernelProfile.timeMs, + extraInfo: kernelProfile.extraInfo + }); + } + return Array.isArray(out) ? outputs : outputs[0]; + } + saveTensorsForBackwardMode(tensors) { + const saved = tensors.map((tensor2) => this.keep(this.clone(tensor2))); + return saved; + } + getTensorsForGradient(kernelName, inputs, outputs) { + const gradConfig = getGradient(kernelName); + if (gradConfig != null) { + const inputsToSave = gradConfig.inputsToSave || []; + const outputsToSave = gradConfig.outputsToSave || []; + let inputTensorsToSave; + if (gradConfig.saveAllInputs) { + assert(Array.isArray(inputs), () => "saveAllInputs is true, expected inputs to be an array."); + inputTensorsToSave = Object.keys(inputs).map((key) => inputs[key]); + } else { + inputTensorsToSave = inputsToSave.map((inputName) => inputs[inputName]); + } + const outputTensorsToSave = outputs.filter((_, i) => outputsToSave[i]); + return inputTensorsToSave.concat(outputTensorsToSave); + } + return []; + } + makeTensor(values, shape, dtype, backend2) { + if (values == null) { + throw new Error("Values passed to engine.makeTensor() are null"); + } + dtype = dtype || "float32"; + backend2 = backend2 || this.backend; + let backendVals = values; + if (dtype === "string" && isString(values[0])) { + backendVals = values.map((d) => encodeString(d)); + } + const dataId = backend2.write(backendVals, shape, dtype); + const t = new Tensor(shape, dtype, dataId, this.nextTensorId()); + this.trackTensor(t, backend2); + if (dtype === "string") { + const info = this.state.tensorInfo.get(dataId); + const newBytes = bytesFromStringArray(backendVals); + this.state.numBytes += newBytes - info.bytes; + info.bytes = newBytes; + } + return t; + } + makeTensorFromDataId(dataId, shape, dtype, backend2) { + dtype = dtype || "float32"; + const tensorInfo = { dataId, shape, dtype }; + return this.makeTensorFromTensorInfo(tensorInfo, backend2); + } + makeTensorFromTensorInfo(tensorInfo, backend2) { + const { dataId, shape, dtype } = tensorInfo; + const t = new Tensor(shape, dtype, dataId, this.nextTensorId()); + this.trackTensor(t, backend2); + return t; + } + makeVariable(initialValue, trainable = true, name, dtype) { + name = name || this.nextVariableId().toString(); + if (dtype != null && dtype !== initialValue.dtype) { + initialValue = initialValue.cast(dtype); + } + const v = new Variable(initialValue, trainable, name, this.nextTensorId()); + if (this.state.registeredVariables[v.name] != null) { + throw new Error(`Variable with name ${v.name} was already registered`); + } + this.state.registeredVariables[v.name] = v; + this.incRef(v, this.backend); + return v; + } + trackTensor(a, backend2) { + this.state.numTensors++; + if (a.dtype === "string") { + this.state.numStringTensors++; + } + let bytes = 0; + if (a.dtype !== "complex64" && a.dtype !== "string") { + bytes = a.size * bytesPerElement(a.dtype); + } + this.state.numBytes += bytes; + if (!this.state.tensorInfo.has(a.dataId)) { + this.state.numDataBuffers++; + this.state.tensorInfo.set(a.dataId, { + backend: backend2 || this.backend, + dtype: a.dtype, + shape: a.shape, + bytes + }); + } + if (!(a instanceof Variable)) { + this.track(a); + } + } + incRef(a, backend2) { + this.trackTensor(a, backend2); + this.backend.incRef(a.dataId); + } + removeDataId(dataId, backend2) { + if (this.state.tensorInfo.has(dataId) && this.state.tensorInfo.get(dataId).backend === backend2) { + this.state.tensorInfo.delete(dataId); + this.state.numDataBuffers--; + } + } + disposeTensor(a) { + if (!this.state.tensorInfo.has(a.dataId)) { + return; + } + const info = this.state.tensorInfo.get(a.dataId); + this.state.numTensors--; + if (a.dtype === "string") { + this.state.numStringTensors--; + this.state.numBytes -= info.bytes; + } + if (a.dtype !== "complex64" && a.dtype !== "string") { + const bytes = a.size * bytesPerElement(a.dtype); + this.state.numBytes -= bytes; + } + if (info.backend.disposeData(a.dataId)) { + this.removeDataId(a.dataId, info.backend); + } + } + disposeVariables() { + for (const varName in this.state.registeredVariables) { + const v = this.state.registeredVariables[varName]; + this.disposeVariable(v); + } + } + disposeVariable(v) { + this.disposeTensor(v); + if (this.state.registeredVariables[v.name] != null) { + delete this.state.registeredVariables[v.name]; + } + } + memory() { + const info = this.backend.memory(); + info.numTensors = this.state.numTensors; + info.numDataBuffers = this.state.numDataBuffers; + info.numBytes = this.state.numBytes; + if (this.state.numStringTensors > 0) { + info.unreliable = true; + if (info.reasons == null) { + info.reasons = []; + } + info.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)"); + } + return info; + } + async profile(query) { + this.state.profiling = true; + const startBytes = this.state.numBytes; + const startNumTensors = this.state.numTensors; + this.state.activeProfile.kernels = []; + this.state.activeProfile.result = await query(); + this.state.profiling = false; + this.state.activeProfile.peakBytes = Math.max(...this.state.activeProfile.kernels.map((d) => d.totalBytesSnapshot)); + this.state.activeProfile.newBytes = this.state.numBytes - startBytes; + this.state.activeProfile.newTensors = this.state.numTensors - startNumTensors; + for (const kernel of this.state.activeProfile.kernels) { + kernel.kernelTimeMs = await kernel.kernelTimeMs; + kernel.extraInfo = await kernel.extraInfo; + } + return this.state.activeProfile; + } + isTapeOn() { + return this.state.gradientDepth > 0 && this.state.kernelDepth === 0; + } + addTapeNode(kernelName, inputs, outputs, gradientsFunc, saved, attrs) { + const tapeNode = { id: this.state.nextTapeNodeId++, kernelName, inputs, outputs, saved }; + const gradConfig = getGradient(kernelName); + if (gradConfig != null) { + gradientsFunc = gradConfig.gradFunc; + } + if (gradientsFunc != null) { + tapeNode.gradient = (dys) => { + dys = dys.map((dy, i) => { + if (dy == null) { + const output = outputs[i]; + const vals = makeZerosTypedArray(output.size, output.dtype); + return this.makeTensor(vals, output.shape, output.dtype); + } + return dy; + }); + return gradientsFunc(dys.length > 1 ? dys : dys[0], saved, attrs); + }; + } + this.state.activeTape.push(tapeNode); + } + keep(result) { + result.kept = true; + return result; + } + startTape() { + if (this.state.gradientDepth === 0) { + this.state.activeTape = []; + } + this.state.gradientDepth++; + } + endTape() { + this.state.gradientDepth--; + } + startScope(name) { + const scopeInfo = { + track: [], + name: "unnamed scope", + id: this.state.nextScopeId++ + }; + if (name) { + scopeInfo.name = name; + } + this.state.scopeStack.push(scopeInfo); + this.state.activeScope = scopeInfo; + } + endScope(result) { + const tensorsToTrackInParent = getTensorsInContainer(result); + const tensorsToTrackInParentSet = new Set(tensorsToTrackInParent.map((t) => t.id)); + for (let i = 0; i < this.state.activeScope.track.length; i++) { + const tensor2 = this.state.activeScope.track[i]; + if (!tensor2.kept && !tensorsToTrackInParentSet.has(tensor2.id)) { + tensor2.dispose(); + } + } + const oldScope = this.state.scopeStack.pop(); + this.state.activeScope = this.state.scopeStack.length === 0 ? null : this.state.scopeStack[this.state.scopeStack.length - 1]; + tensorsToTrackInParent.forEach((tensor2) => { + if (!tensor2.kept && tensor2.scopeId === oldScope.id) { + this.track(tensor2); + } + }); + } + gradients(f, xs, dy, allowNoGradients = false) { + assert(xs.length > 0, () => "gradients() received an empty list of xs."); + if (dy != null && dy.dtype !== "float32") { + throw new Error(`dy must have 'float32' dtype, but has '${dy.dtype}'`); + } + const y = this.scopedRun(() => this.startTape(), () => this.endTape(), () => this.tidy("forward", f)); + assert(y instanceof Tensor, () => "The result y returned by f() must be a tensor."); + const filteredTape = getFilteredNodesXToY(this.state.activeTape, xs, y); + if (!allowNoGradients && filteredTape.length === 0 && xs.length > 0) { + throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y."); + } + return this.tidy("backward", () => { + const accumulatedGradientMap = {}; + accumulatedGradientMap[y.id] = dy == null ? ones(y.shape) : dy; + backpropagateGradients( + accumulatedGradientMap, + filteredTape, + (f2) => this.tidy(f2), + add + ); + const grads = xs.map((x) => accumulatedGradientMap[x.id]); + if (this.state.gradientDepth === 0) { + this.state.activeTape.forEach((node) => { + for (const tensor2 of node.saved) { + tensor2.dispose(); + } + }); + this.state.activeTape = null; + } + return { value: y, grads }; + }); + } + customGrad(f) { + assert(isFunction(f), () => "The f passed in customGrad(f) must be a function."); + return (...inputs) => { + assert(inputs.every((t) => t instanceof Tensor), () => "The args passed in customGrad(f)(x1, x2,...) must all be tensors"); + let res; + const inputMap = {}; + inputs.forEach((input2, i) => { + inputMap[i] = input2; + }); + const forwardFunc = (_, save) => { + res = f(...[...inputs, save]); + assert(res.value instanceof Tensor, () => "The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"); + assert(isFunction(res.gradFunc), () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."); + return res.value; + }; + const backwardsFunc = (dy, saved) => { + const gradRes = res.gradFunc(dy, saved); + const grads = Array.isArray(gradRes) ? gradRes : [gradRes]; + assert(grads.length === inputs.length, () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."); + assert(grads.every((t) => t instanceof Tensor), () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors."); + const gradMap = {}; + grads.forEach((grad, i) => { + gradMap[i] = () => grad; + }); + return gradMap; + }; + return this.runKernelFunc({ + forwardFunc, + backwardsFunc, + inputs: inputMap + }); + }; + } + readSync(dataId) { + const info = this.state.tensorInfo.get(dataId); + return info.backend.readSync(dataId); + } + read(dataId) { + const info = this.state.tensorInfo.get(dataId); + return info.backend.read(dataId); + } + readToGPU(dataId, options) { + const info = this.state.tensorInfo.get(dataId); + return info.backend.readToGPU(dataId, options); + } + async time(query) { + const start = now(); + const timingInfo = await this.backend.time(query); + timingInfo.wallMs = now() - start; + return timingInfo; + } + track(result) { + if (this.state.activeScope != null) { + result.scopeId = this.state.activeScope.id; + this.state.activeScope.track.push(result); + } + return result; + } + get registeredVariables() { + return this.state.registeredVariables; + } + reset() { + this.pendingBackendInitId++; + this.state.dispose(); + this.ENV.reset(); + this.state = new EngineState(); + for (const backendName in this.registry) { + this.disposeRegisteredKernels(backendName); + this.registry[backendName].dispose(); + delete this.registry[backendName]; + } + this.backendName = null; + this.backendInstance = null; + this.pendingBackendInit = null; + } + }; + Engine.nextTensorId = 0; + Engine.nextVariableId = 0; + function ones(shape) { + const values = makeOnesTypedArray(sizeFromShape(shape), "float32"); + return ENGINE.makeTensor(values, shape, "float32"); + } + function getOrMakeEngine() { + const ns = getGlobalNamespace(); + if (ns._tfengine == null) { + const environment = new Environment(ns); + ns._tfengine = new Engine(environment); + } + setEnvironmentGlobal(ns._tfengine.ENV); + setTensorTracker(() => ns._tfengine); + return ns._tfengine; + } + var ENGINE = getOrMakeEngine(); + function add(a, b) { + const inputs = { a, b }; + return ENGINE.runKernel(Add, inputs); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/flags.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/device_util.js + var device_util_exports = {}; + __export(device_util_exports, { + isBrowser: () => isBrowser, + isMobile: () => isMobile, + mockIsMobile: () => mockIsMobile + }); + init_define_BUILD_VERSION(); + function _isNavigatorDefined() { + return typeof navigator !== "undefined" && navigator != null; + } + var isMobileMockValue; + function mockIsMobile(value) { + isMobileMockValue = value; + } + function isMobile(nav) { + if (isMobileMockValue !== void 0) { + return isMobileMockValue; + } + if (nav || _isNavigatorDefined()) { + if (!nav) { + nav = navigator; + } + if (nav.product === "ReactNative") { + return true; + } + const a = nav.userAgent || nav.vendor || (typeof window !== "undefined" ? window.opera : ""); + if (!a) { + const navAny = nav; + return navAny.userAgentData && navAny.userAgentData.mobile; + } + return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)); + } + return false; + } + function isBrowser() { + return typeof window !== "undefined" && window.document != null || typeof WorkerGlobalScope !== "undefined"; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/flags.js + var ENV2 = env(); + ENV2.registerFlag("DEBUG", () => false, (debugValue) => { + if (debugValue) { + console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance."); + } + }); + ENV2.registerFlag("IS_BROWSER", () => isBrowser()); + ENV2.registerFlag("IS_NODE", () => typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined"); + ENV2.registerFlag("IS_CHROME", () => typeof navigator !== "undefined" && navigator != null && navigator.userAgent != null && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor)); + ENV2.registerFlag("PROD", () => false); + ENV2.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY", () => ENV2.getBool("DEBUG")); + ENV2.registerFlag("DEPRECATION_WARNINGS_ENABLED", () => true); + ENV2.registerFlag("IS_TEST", () => false); + ENV2.registerFlag("CHECK_COMPUTATION_FOR_ERRORS", () => true); + ENV2.registerFlag("WRAP_TO_IMAGEBITMAP", () => false); + ENV2.registerFlag("ENGINE_COMPILE_ONLY", () => false); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/platforms/platform_browser.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/indexed_db.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/io_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/complex.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor_util_env.js + init_define_BUILD_VERSION(); + function inferShape(val, dtype) { + let firstElem = val; + if (isTypedArray(val)) { + return dtype === "string" ? [] : [val.length]; + } + if (!Array.isArray(val)) { + return []; + } + const shape = []; + while (Array.isArray(firstElem) || isTypedArray(firstElem) && dtype !== "string") { + shape.push(firstElem.length); + firstElem = firstElem[0]; + } + if (Array.isArray(val) && env().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")) { + deepAssertShapeConsistency(val, shape, []); + } + return shape; + } + function deepAssertShapeConsistency(val, shape, indices) { + indices = indices || []; + if (!Array.isArray(val) && !isTypedArray(val)) { + assert(shape.length === 0, () => `Element arr[${indices.join("][")}] is a primitive, but should be an array/TypedArray of ${shape[0]} elements`); + return; + } + assert(shape.length > 0, () => `Element arr[${indices.join("][")}] should be a primitive, but is an array of ${val.length} elements`); + assert(val.length === shape[0], () => `Element arr[${indices.join("][")}] should have ${shape[0]} elements, but has ${val.length} elements`); + const subShape = shape.slice(1); + for (let i = 0; i < val.length; ++i) { + deepAssertShapeConsistency(val[i], subShape, indices.concat(i)); + } + } + function assertDtype(expectedDtype, actualDType, argName, functionName) { + if (expectedDtype === "string_or_numeric") { + return; + } + if (expectedDtype == null) { + throw new Error(`Expected dtype cannot be null.`); + } + if (expectedDtype !== "numeric" && expectedDtype !== actualDType || expectedDtype === "numeric" && actualDType === "string") { + throw new Error(`Argument '${argName}' passed to '${functionName}' must be ${expectedDtype} tensor, but got ${actualDType} tensor`); + } + } + function convertToTensor(x, argName, functionName, parseAsDtype = "numeric") { + if (x instanceof Tensor) { + assertDtype(parseAsDtype, x.dtype, argName, functionName); + return x; + } + let inferredDtype = inferDtype(x); + if (inferredDtype !== "string" && ["bool", "int32", "float32"].indexOf(parseAsDtype) >= 0) { + inferredDtype = parseAsDtype; + } + assertDtype(parseAsDtype, inferredDtype, argName, functionName); + if (x == null || !isTypedArray(x) && !Array.isArray(x) && typeof x !== "number" && typeof x !== "boolean" && typeof x !== "string") { + const type = x == null ? "null" : x.constructor.name; + throw new Error(`Argument '${argName}' passed to '${functionName}' must be a Tensor or TensorLike, but got '${type}'`); + } + const inferredShape = inferShape(x, inferredDtype); + if (!isTypedArray(x) && !Array.isArray(x)) { + x = [x]; + } + const skipTypedArray = true; + const values = inferredDtype !== "string" ? toTypedArray(x, inferredDtype) : flatten(x, [], skipTypedArray); + return ENGINE.makeTensor(values, inferredShape, inferredDtype); + } + function convertToTensorArray(arg, argName, functionName, parseAsDtype = "numeric") { + if (!Array.isArray(arg)) { + throw new Error(`Argument ${argName} passed to ${functionName} must be a \`Tensor[]\` or \`TensorLike[]\``); + } + const tensors = arg; + return tensors.map((t, i) => convertToTensor(t, `${argName}[${i}]`, functionName, parseAsDtype)); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/operation.js + init_define_BUILD_VERSION(); + var OP_SCOPE_SUFFIX = "__op"; + function op(f) { + const keys = Object.keys(f); + if (keys.length !== 1) { + throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${keys.length} keys.`); + } + let opName = keys[0]; + const fn = f[opName]; + if (opName.endsWith("_")) { + opName = opName.substring(0, opName.length - 1); + } + opName = opName + OP_SCOPE_SUFFIX; + const f2 = (...args) => { + ENGINE.startScope(opName); + try { + const result = fn(...args); + if (isPromise(result)) { + console.error("Cannot return a Promise inside of tidy."); + } + ENGINE.endScope(result); + return result; + } catch (ex) { + ENGINE.endScope(null); + throw ex; + } + }; + Object.defineProperty(f2, "name", { value: opName, configurable: true }); + return f2; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/complex.js + function complex_(real4, imag4) { + const $real = convertToTensor(real4, "real", "complex"); + const $imag = convertToTensor(imag4, "imag", "complex"); + assertShapesMatch($real.shape, $imag.shape, `real and imag shapes, ${$real.shape} and ${$imag.shape}, must match in call to tf.complex().`); + const inputs = { real: $real, imag: $imag }; + return ENGINE.runKernel(Complex, inputs); + } + var complex = op({ complex_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor_ops_util.js + init_define_BUILD_VERSION(); + function makeTensor(values, shape, inferredShape, dtype) { + if (dtype == null) { + dtype = inferDtype(values); + } + if (dtype === "complex64") { + throw new Error(`Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).`); + } + if (!isTypedArray(values) && !Array.isArray(values) && typeof values !== "number" && typeof values !== "boolean" && typeof values !== "string") { + throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray"); + } + if (shape != null) { + assertNonNegativeIntegerDimensions(shape); + const providedSize = sizeFromShape(shape); + const inferredSize = sizeFromShape(inferredShape); + assert(providedSize === inferredSize, () => `Based on the provided shape, [${shape}], the tensor should have ${providedSize} values but has ${inferredSize}`); + for (let i = 0; i < inferredShape.length; ++i) { + const inferred = inferredShape[i]; + const flatDimsDontMatch = i === inferredShape.length - 1 ? inferred !== sizeFromShape(shape.slice(i)) : true; + assert(inferredShape[i] === shape[i] || !flatDimsDontMatch, () => `Error creating a new Tensor. Inferred shape (${inferredShape}) does not match the provided shape (${shape}). `); + } + } + if (!isTypedArray(values) && !Array.isArray(values)) { + values = [values]; + } + shape = shape || inferredShape; + values = dtype !== "string" ? toTypedArray(values, dtype) : flatten(values, [], true); + return ENGINE.makeTensor(values, shape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor.js + function tensor(values, shape, dtype) { + const inferredShape = inferShape(values, dtype); + return makeTensor(values, shape, inferredShape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/types.js + init_define_BUILD_VERSION(); + var DTYPE_VALUE_SIZE_MAP = { + "float32": 4, + "float16": 2, + "int32": 4, + "uint16": 2, + "uint8": 1, + "bool": 1, + "complex64": 8 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/io_utils.js + var NUM_BYTES_STRING_LENGTH = 4; + async function encodeWeights(tensors, group) { + const specs = []; + const dataPromises = []; + const names = Array.isArray(tensors) ? tensors.map((tensor2) => tensor2.name) : Object.keys(tensors); + for (let i = 0; i < names.length; ++i) { + const name = names[i]; + const t = Array.isArray(tensors) ? tensors[i].tensor : tensors[name]; + if (t.dtype !== "float32" && t.dtype !== "int32" && t.dtype !== "bool" && t.dtype !== "string" && t.dtype !== "complex64") { + throw new Error(`Unsupported dtype in weight '${name}': ${t.dtype}`); + } + const spec = { name, shape: t.shape, dtype: t.dtype }; + if (t.dtype === "string") { + const utf8bytes = new Promise(async (resolve) => { + const vals = await t.bytes(); + const totalNumBytes = vals.reduce((p2, c) => p2 + c.length, 0) + NUM_BYTES_STRING_LENGTH * vals.length; + const bytes = new Uint8Array(totalNumBytes); + let offset = 0; + for (let i2 = 0; i2 < vals.length; i2++) { + const val = vals[i2]; + const bytesOfLength = new Uint8Array(new Uint32Array([val.length]).buffer); + bytes.set(bytesOfLength, offset); + offset += NUM_BYTES_STRING_LENGTH; + bytes.set(val, offset); + offset += val.length; + } + resolve(bytes); + }); + dataPromises.push(utf8bytes); + } else { + dataPromises.push(t.data()); + } + if (group != null) { + spec.group = group; + } + specs.push(spec); + } + const tensorValues = await Promise.all(dataPromises); + return { data: concatenateTypedArrays(tensorValues), specs }; + } + function decodeWeights(buffer2, specs) { + const out = {}; + let float16Decode; + let offset = 0; + for (const spec of specs) { + const name = spec.name; + const dtype = spec.dtype; + const shape = spec.shape; + const size = sizeFromShape(shape); + let values; + if ("quantization" in spec) { + const quantization = spec.quantization; + if (quantization.dtype === "uint8" || quantization.dtype === "uint16") { + if (!("min" in quantization && "scale" in quantization)) { + throw new Error(`Weight ${spec.name} with quantization ${quantization.dtype} doesn't have corresponding metadata min and scale.`); + } + } else if (quantization.dtype === "float16") { + if (dtype !== "float32") { + throw new Error(`Weight ${spec.name} is quantized with ${quantization.dtype} which only supports weights of type float32 not ${dtype}.`); + } + } else { + throw new Error(`Weight ${spec.name} has unknown quantization dtype ${quantization.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`); + } + const quantizationSizeFactor = DTYPE_VALUE_SIZE_MAP[quantization.dtype]; + const byteBuffer = buffer2.slice(offset, offset + size * quantizationSizeFactor); + const quantizedArray = quantization.dtype === "uint8" ? new Uint8Array(byteBuffer) : new Uint16Array(byteBuffer); + if (dtype === "float32") { + if (quantization.dtype === "uint8" || quantization.dtype === "uint16") { + values = new Float32Array(quantizedArray.length); + for (let i = 0; i < quantizedArray.length; i++) { + const v = quantizedArray[i]; + values[i] = v * quantization.scale + quantization.min; + } + } else if (quantization.dtype === "float16") { + if (float16Decode === void 0) { + float16Decode = getFloat16Decoder(); + } + values = float16Decode(quantizedArray); + } else { + throw new Error(`Unsupported quantization type ${quantization.dtype} for weight type float32.`); + } + } else if (dtype === "int32") { + if (quantization.dtype !== "uint8" && quantization.dtype !== "uint16") { + throw new Error(`Unsupported quantization type ${quantization.dtype} for weight type int32.`); + } + values = new Int32Array(quantizedArray.length); + for (let i = 0; i < quantizedArray.length; i++) { + const v = quantizedArray[i]; + values[i] = Math.round(v * quantization.scale + quantization.min); + } + } else { + throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`); + } + offset += size * quantizationSizeFactor; + } else if (dtype === "string") { + const size2 = sizeFromShape(spec.shape); + values = []; + for (let i = 0; i < size2; i++) { + const byteLength = new Uint32Array(buffer2.slice(offset, offset + NUM_BYTES_STRING_LENGTH))[0]; + offset += NUM_BYTES_STRING_LENGTH; + const bytes = new Uint8Array(buffer2.slice(offset, offset + byteLength)); + values.push(bytes); + offset += byteLength; + } + } else { + const dtypeFactor = DTYPE_VALUE_SIZE_MAP[dtype]; + const byteBuffer = buffer2.slice(offset, offset + size * dtypeFactor); + if (dtype === "float32") { + values = new Float32Array(byteBuffer); + } else if (dtype === "int32") { + values = new Int32Array(byteBuffer); + } else if (dtype === "bool") { + values = new Uint8Array(byteBuffer); + } else if (dtype === "complex64") { + values = new Float32Array(byteBuffer); + const real4 = new Float32Array(values.length / 2); + const image2 = new Float32Array(values.length / 2); + for (let i = 0; i < real4.length; i++) { + real4[i] = values[i * 2]; + image2[i] = values[i * 2 + 1]; + } + const realTensor = tensor(real4, shape, "float32"); + const imageTensor = tensor(image2, shape, "float32"); + out[name] = complex(realTensor, imageTensor); + realTensor.dispose(); + imageTensor.dispose(); + } else { + throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`); + } + offset += size * dtypeFactor; + } + if (dtype !== "complex64") { + out[name] = tensor(values, shape, dtype); + } + } + return out; + } + function concatenateTypedArrays(xs) { + if (xs === null) { + throw new Error(`Invalid input value: ${JSON.stringify(xs)}`); + } + let totalByteLength = 0; + const normalizedXs = []; + xs.forEach((x) => { + totalByteLength += x.byteLength; + normalizedXs.push(x.byteLength === x.buffer.byteLength ? x : new x.constructor(x)); + if (!(x instanceof Float32Array || x instanceof Int32Array || x instanceof Uint8Array)) { + throw new Error(`Unsupported TypedArray subtype: ${x.constructor.name}`); + } + }); + const y = new Uint8Array(totalByteLength); + let offset = 0; + normalizedXs.forEach((x) => { + y.set(new Uint8Array(x.buffer), offset); + offset += x.byteLength; + }); + return y.buffer; + } + var useNodeBuffer = typeof Buffer !== "undefined" && (typeof Blob === "undefined" || typeof atob === "undefined" || typeof btoa === "undefined"); + function stringByteLength(str) { + if (useNodeBuffer) { + return Buffer.byteLength(str); + } + return new Blob([str]).size; + } + function arrayBufferToBase64String(buffer2) { + if (useNodeBuffer) { + return Buffer.from(buffer2).toString("base64"); + } + const buf = new Uint8Array(buffer2); + let s = ""; + for (let i = 0, l = buf.length; i < l; i++) { + s += String.fromCharCode(buf[i]); + } + return btoa(s); + } + function base64StringToArrayBuffer(str) { + if (useNodeBuffer) { + const buf = Buffer.from(str, "base64"); + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + } + const s = atob(str); + const buffer2 = new Uint8Array(s.length); + for (let i = 0; i < s.length; ++i) { + buffer2.set([s.charCodeAt(i)], i); + } + return buffer2.buffer; + } + function concatenateArrayBuffers(buffers) { + if (buffers.length === 1) { + return buffers[0]; + } + let totalByteLength = 0; + buffers.forEach((buffer2) => { + totalByteLength += buffer2.byteLength; + }); + const temp = new Uint8Array(totalByteLength); + let offset = 0; + buffers.forEach((buffer2) => { + temp.set(new Uint8Array(buffer2), offset); + offset += buffer2.byteLength; + }); + return temp.buffer; + } + function basename(path) { + const SEPARATOR = "/"; + path = path.trim(); + while (path.endsWith(SEPARATOR)) { + path = path.slice(0, path.length - 1); + } + const items = path.split(SEPARATOR); + return items[items.length - 1]; + } + function getModelJSONForModelArtifacts(artifacts, manifest) { + const result = { + modelTopology: artifacts.modelTopology, + format: artifacts.format, + generatedBy: artifacts.generatedBy, + convertedBy: artifacts.convertedBy, + weightsManifest: manifest + }; + if (artifacts.signature != null) { + result.signature = artifacts.signature; + } + if (artifacts.userDefinedMetadata != null) { + result.userDefinedMetadata = artifacts.userDefinedMetadata; + } + if (artifacts.modelInitializer != null) { + result.modelInitializer = artifacts.modelInitializer; + } + if (artifacts.trainingConfig != null) { + result.trainingConfig = artifacts.trainingConfig; + } + return result; + } + async function getModelArtifactsForJSON(modelJSON, loadWeights2) { + const modelArtifacts = { + modelTopology: modelJSON.modelTopology, + format: modelJSON.format, + generatedBy: modelJSON.generatedBy, + convertedBy: modelJSON.convertedBy + }; + if (modelJSON.trainingConfig != null) { + modelArtifacts.trainingConfig = modelJSON.trainingConfig; + } + if (modelJSON.weightsManifest != null) { + const [weightSpecs, weightData] = await loadWeights2(modelJSON.weightsManifest); + modelArtifacts.weightSpecs = weightSpecs; + modelArtifacts.weightData = weightData; + } + if (modelJSON.signature != null) { + modelArtifacts.signature = modelJSON.signature; + } + if (modelJSON.userDefinedMetadata != null) { + modelArtifacts.userDefinedMetadata = modelJSON.userDefinedMetadata; + } + if (modelJSON.modelInitializer != null) { + modelArtifacts.modelInitializer = modelJSON.modelInitializer; + } + return modelArtifacts; + } + function getModelArtifactsInfoForJSON(modelArtifacts) { + if (modelArtifacts.modelTopology instanceof ArrayBuffer) { + throw new Error("Expected JSON model topology, received ArrayBuffer."); + } + return { + dateSaved: new Date(), + modelTopologyType: "JSON", + modelTopologyBytes: modelArtifacts.modelTopology == null ? 0 : stringByteLength(JSON.stringify(modelArtifacts.modelTopology)), + weightSpecsBytes: modelArtifacts.weightSpecs == null ? 0 : stringByteLength(JSON.stringify(modelArtifacts.weightSpecs)), + weightDataBytes: modelArtifacts.weightData == null ? 0 : modelArtifacts.weightData.byteLength + }; + } + function computeFloat16MantisaTable() { + const convertMantissa = (i) => { + let m = i << 13; + let e = 0; + while ((m & 8388608) === 0) { + e -= 8388608; + m <<= 1; + } + m &= ~8388608; + e += 947912704; + return m | e; + }; + const mantisaTable = new Uint32Array(2048); + mantisaTable[0] = 0; + for (let i = 1; i < 1024; i++) { + mantisaTable[i] = convertMantissa(i); + } + for (let i = 1024; i < 2048; i++) { + mantisaTable[i] = 939524096 + (i - 1024 << 13); + } + return mantisaTable; + } + function computeFloat16ExponentTable() { + const exponentTable = new Uint32Array(64); + exponentTable[0] = 0; + exponentTable[31] = 1199570944; + exponentTable[32] = 2147483648; + exponentTable[63] = 3347054592; + for (let i = 1; i < 31; i++) { + exponentTable[i] = i << 23; + } + for (let i = 33; i < 63; i++) { + exponentTable[i] = 2147483648 + (i - 32 << 23); + } + return exponentTable; + } + function computeFloat16OffsetTable() { + const offsetTable = new Uint32Array(64); + for (let i = 0; i < 64; i++) { + offsetTable[i] = 1024; + } + offsetTable[0] = offsetTable[32] = 0; + return offsetTable; + } + function getFloat16Decoder() { + const mantisaTable = computeFloat16MantisaTable(); + const exponentTable = computeFloat16ExponentTable(); + const offsetTable = computeFloat16OffsetTable(); + return (quantizedArray) => { + const buffer2 = new ArrayBuffer(4 * quantizedArray.length); + const bufferUint32View = new Uint32Array(buffer2); + for (let index = 0; index < quantizedArray.length; index++) { + const float16Bits = quantizedArray[index]; + const float32Bits = mantisaTable[offsetTable[float16Bits >> 10] + (float16Bits & 1023)] + exponentTable[float16Bits >> 10]; + bufferUint32View[index] = float32Bits; + } + return new Float32Array(buffer2); + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/router_registry.js + init_define_BUILD_VERSION(); + var IORouterRegistry = class { + constructor() { + this.saveRouters = []; + this.loadRouters = []; + } + static getInstance() { + if (IORouterRegistry.instance == null) { + IORouterRegistry.instance = new IORouterRegistry(); + } + return IORouterRegistry.instance; + } + static registerSaveRouter(saveRouter) { + IORouterRegistry.getInstance().saveRouters.push(saveRouter); + } + static registerLoadRouter(loadRouter) { + IORouterRegistry.getInstance().loadRouters.push(loadRouter); + } + static getSaveHandlers(url) { + return IORouterRegistry.getHandlers(url, "save"); + } + static getLoadHandlers(url, loadOptions) { + return IORouterRegistry.getHandlers(url, "load", loadOptions); + } + static getHandlers(url, handlerType, loadOptions) { + const validHandlers = []; + const routers = handlerType === "load" ? IORouterRegistry.getInstance().loadRouters : IORouterRegistry.getInstance().saveRouters; + routers.forEach((router) => { + const handler = router(url, loadOptions); + if (handler !== null) { + validHandlers.push(handler); + } + }); + return validHandlers; + } + }; + var registerSaveRouter = (loudRouter) => IORouterRegistry.registerSaveRouter(loudRouter); + var registerLoadRouter = (loudRouter) => IORouterRegistry.registerLoadRouter(loudRouter); + var getSaveHandlers = (url) => IORouterRegistry.getSaveHandlers(url); + var getLoadHandlers = (url, loadOptions) => IORouterRegistry.getLoadHandlers(url, loadOptions); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/indexed_db.js + var DATABASE_NAME = "tensorflowjs"; + var DATABASE_VERSION = 1; + var MODEL_STORE_NAME = "models_store"; + var INFO_STORE_NAME = "model_info_store"; + function getIndexedDBFactory() { + if (!env().getBool("IS_BROWSER")) { + throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser."); + } + const theWindow = typeof window === "undefined" ? self : window; + const factory = theWindow.indexedDB || theWindow.mozIndexedDB || theWindow.webkitIndexedDB || theWindow.msIndexedDB || theWindow.shimIndexedDB; + if (factory == null) { + throw new Error("The current browser does not appear to support IndexedDB."); + } + return factory; + } + function setUpDatabase(openRequest) { + const db = openRequest.result; + db.createObjectStore(MODEL_STORE_NAME, { keyPath: "modelPath" }); + db.createObjectStore(INFO_STORE_NAME, { keyPath: "modelPath" }); + } + var BrowserIndexedDB = class { + constructor(modelPath) { + this.indexedDB = getIndexedDBFactory(); + if (modelPath == null || !modelPath) { + throw new Error("For IndexedDB, modelPath must not be null, undefined or empty."); + } + this.modelPath = modelPath; + } + async save(modelArtifacts) { + if (modelArtifacts.modelTopology instanceof ArrayBuffer) { + throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet."); + } + return this.databaseAction(this.modelPath, modelArtifacts); + } + async load() { + return this.databaseAction(this.modelPath); + } + databaseAction(modelPath, modelArtifacts) { + return new Promise((resolve, reject) => { + const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION); + openRequest.onupgradeneeded = () => setUpDatabase(openRequest); + openRequest.onsuccess = () => { + const db = openRequest.result; + if (modelArtifacts == null) { + const modelTx = db.transaction(MODEL_STORE_NAME, "readonly"); + const modelStore = modelTx.objectStore(MODEL_STORE_NAME); + const getRequest = modelStore.get(this.modelPath); + getRequest.onsuccess = () => { + if (getRequest.result == null) { + db.close(); + return reject(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`)); + } else { + resolve(getRequest.result.modelArtifacts); + } + }; + getRequest.onerror = (error) => { + db.close(); + return reject(getRequest.error); + }; + modelTx.oncomplete = () => db.close(); + } else { + const modelArtifactsInfo = getModelArtifactsInfoForJSON(modelArtifacts); + const infoTx = db.transaction(INFO_STORE_NAME, "readwrite"); + let infoStore = infoTx.objectStore(INFO_STORE_NAME); + const putInfoRequest = infoStore.put({ modelPath: this.modelPath, modelArtifactsInfo }); + let modelTx; + putInfoRequest.onsuccess = () => { + modelTx = db.transaction(MODEL_STORE_NAME, "readwrite"); + const modelStore = modelTx.objectStore(MODEL_STORE_NAME); + const putModelRequest = modelStore.put({ + modelPath: this.modelPath, + modelArtifacts, + modelArtifactsInfo + }); + putModelRequest.onsuccess = () => resolve({ modelArtifactsInfo }); + putModelRequest.onerror = (error) => { + infoStore = infoTx.objectStore(INFO_STORE_NAME); + const deleteInfoRequest = infoStore.delete(this.modelPath); + deleteInfoRequest.onsuccess = () => { + db.close(); + return reject(putModelRequest.error); + }; + deleteInfoRequest.onerror = (error2) => { + db.close(); + return reject(putModelRequest.error); + }; + }; + }; + putInfoRequest.onerror = (error) => { + db.close(); + return reject(putInfoRequest.error); + }; + infoTx.oncomplete = () => { + if (modelTx == null) { + db.close(); + } else { + modelTx.oncomplete = () => db.close(); + } + }; + } + }; + openRequest.onerror = (error) => reject(openRequest.error); + }); + } + }; + BrowserIndexedDB.URL_SCHEME = "indexeddb://"; + var indexedDBRouter = (url) => { + if (!env().getBool("IS_BROWSER")) { + return null; + } else { + if (!Array.isArray(url) && url.startsWith(BrowserIndexedDB.URL_SCHEME)) { + return browserIndexedDB(url.slice(BrowserIndexedDB.URL_SCHEME.length)); + } else { + return null; + } + } + }; + IORouterRegistry.registerSaveRouter(indexedDBRouter); + IORouterRegistry.registerLoadRouter(indexedDBRouter); + function browserIndexedDB(modelPath) { + return new BrowserIndexedDB(modelPath); + } + function maybeStripScheme(key) { + return key.startsWith(BrowserIndexedDB.URL_SCHEME) ? key.slice(BrowserIndexedDB.URL_SCHEME.length) : key; + } + var BrowserIndexedDBManager = class { + constructor() { + this.indexedDB = getIndexedDBFactory(); + } + async listModels() { + return new Promise((resolve, reject) => { + const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION); + openRequest.onupgradeneeded = () => setUpDatabase(openRequest); + openRequest.onsuccess = () => { + const db = openRequest.result; + const tx = db.transaction(INFO_STORE_NAME, "readonly"); + const store = tx.objectStore(INFO_STORE_NAME); + const getAllInfoRequest = store.getAll(); + getAllInfoRequest.onsuccess = () => { + const out = {}; + for (const item of getAllInfoRequest.result) { + out[item.modelPath] = item.modelArtifactsInfo; + } + resolve(out); + }; + getAllInfoRequest.onerror = (error) => { + db.close(); + return reject(getAllInfoRequest.error); + }; + tx.oncomplete = () => db.close(); + }; + openRequest.onerror = (error) => reject(openRequest.error); + }); + } + async removeModel(path) { + path = maybeStripScheme(path); + return new Promise((resolve, reject) => { + const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION); + openRequest.onupgradeneeded = () => setUpDatabase(openRequest); + openRequest.onsuccess = () => { + const db = openRequest.result; + const infoTx = db.transaction(INFO_STORE_NAME, "readwrite"); + const infoStore = infoTx.objectStore(INFO_STORE_NAME); + const getInfoRequest = infoStore.get(path); + let modelTx; + getInfoRequest.onsuccess = () => { + if (getInfoRequest.result == null) { + db.close(); + return reject(new Error(`Cannot find model with path '${path}' in IndexedDB.`)); + } else { + const deleteInfoRequest = infoStore.delete(path); + const deleteModelData = () => { + modelTx = db.transaction(MODEL_STORE_NAME, "readwrite"); + const modelStore = modelTx.objectStore(MODEL_STORE_NAME); + const deleteModelRequest = modelStore.delete(path); + deleteModelRequest.onsuccess = () => resolve(getInfoRequest.result.modelArtifactsInfo); + deleteModelRequest.onerror = (error) => reject(getInfoRequest.error); + }; + deleteInfoRequest.onsuccess = deleteModelData; + deleteInfoRequest.onerror = (error) => { + deleteModelData(); + db.close(); + return reject(getInfoRequest.error); + }; + } + }; + getInfoRequest.onerror = (error) => { + db.close(); + return reject(getInfoRequest.error); + }; + infoTx.oncomplete = () => { + if (modelTx == null) { + db.close(); + } else { + modelTx.oncomplete = () => db.close(); + } + }; + }; + openRequest.onerror = (error) => reject(openRequest.error); + }); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/local_storage.js + init_define_BUILD_VERSION(); + var PATH_SEPARATOR = "/"; + var PATH_PREFIX = "tensorflowjs_models"; + var INFO_SUFFIX = "info"; + var MODEL_TOPOLOGY_SUFFIX = "model_topology"; + var WEIGHT_SPECS_SUFFIX = "weight_specs"; + var WEIGHT_DATA_SUFFIX = "weight_data"; + var MODEL_METADATA_SUFFIX = "model_metadata"; + function getModelKeys(path) { + return { + info: [PATH_PREFIX, path, INFO_SUFFIX].join(PATH_SEPARATOR), + topology: [PATH_PREFIX, path, MODEL_TOPOLOGY_SUFFIX].join(PATH_SEPARATOR), + weightSpecs: [PATH_PREFIX, path, WEIGHT_SPECS_SUFFIX].join(PATH_SEPARATOR), + weightData: [PATH_PREFIX, path, WEIGHT_DATA_SUFFIX].join(PATH_SEPARATOR), + modelMetadata: [PATH_PREFIX, path, MODEL_METADATA_SUFFIX].join(PATH_SEPARATOR) + }; + } + function removeItems(keys) { + for (const key of Object.values(keys)) { + window.localStorage.removeItem(key); + } + } + function getModelPathFromKey(key) { + const items = key.split(PATH_SEPARATOR); + if (items.length < 3) { + throw new Error(`Invalid key format: ${key}`); + } + return items.slice(1, items.length - 1).join(PATH_SEPARATOR); + } + function maybeStripScheme2(key) { + return key.startsWith(BrowserLocalStorage.URL_SCHEME) ? key.slice(BrowserLocalStorage.URL_SCHEME.length) : key; + } + var BrowserLocalStorage = class { + constructor(modelPath) { + if (!env().getBool("IS_BROWSER") || typeof window === "undefined" || typeof window.localStorage === "undefined") { + throw new Error("The current environment does not support local storage."); + } + this.LS = window.localStorage; + if (modelPath == null || !modelPath) { + throw new Error("For local storage, modelPath must not be null, undefined or empty."); + } + this.modelPath = modelPath; + this.keys = getModelKeys(this.modelPath); + } + async save(modelArtifacts) { + if (modelArtifacts.modelTopology instanceof ArrayBuffer) { + throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet."); + } else { + const topology = JSON.stringify(modelArtifacts.modelTopology); + const weightSpecs = JSON.stringify(modelArtifacts.weightSpecs); + const modelArtifactsInfo = getModelArtifactsInfoForJSON(modelArtifacts); + try { + this.LS.setItem(this.keys.info, JSON.stringify(modelArtifactsInfo)); + this.LS.setItem(this.keys.topology, topology); + this.LS.setItem(this.keys.weightSpecs, weightSpecs); + this.LS.setItem(this.keys.weightData, arrayBufferToBase64String(modelArtifacts.weightData)); + const metadata = { + format: modelArtifacts.format, + generatedBy: modelArtifacts.generatedBy, + convertedBy: modelArtifacts.convertedBy, + signature: modelArtifacts.signature != null ? modelArtifacts.signature : void 0, + userDefinedMetadata: modelArtifacts.userDefinedMetadata != null ? modelArtifacts.userDefinedMetadata : void 0, + modelInitializer: modelArtifacts.modelInitializer != null ? modelArtifacts.modelInitializer : void 0, + trainingConfig: modelArtifacts.trainingConfig != null ? modelArtifacts.trainingConfig : void 0 + }; + this.LS.setItem(this.keys.modelMetadata, JSON.stringify(metadata)); + return { modelArtifactsInfo }; + } catch (err) { + removeItems(this.keys); + throw new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${modelArtifactsInfo.modelTopologyBytes}, weightSpecsBytes=${modelArtifactsInfo.weightSpecsBytes}, weightDataBytes=${modelArtifactsInfo.weightDataBytes}.`); + } + } + } + async load() { + const info = JSON.parse(this.LS.getItem(this.keys.info)); + if (info == null) { + throw new Error(`In local storage, there is no model with name '${this.modelPath}'`); + } + if (info.modelTopologyType !== "JSON") { + throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet."); + } + const out = {}; + const topology = JSON.parse(this.LS.getItem(this.keys.topology)); + if (topology == null) { + throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`); + } + out.modelTopology = topology; + const weightSpecs = JSON.parse(this.LS.getItem(this.keys.weightSpecs)); + if (weightSpecs == null) { + throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`); + } + out.weightSpecs = weightSpecs; + const metadataString = this.LS.getItem(this.keys.modelMetadata); + if (metadataString != null) { + const metadata = JSON.parse(metadataString); + out.format = metadata.format; + out.generatedBy = metadata.generatedBy; + out.convertedBy = metadata.convertedBy; + if (metadata.signature != null) { + out.signature = metadata.signature; + } + if (metadata.userDefinedMetadata != null) { + out.userDefinedMetadata = metadata.userDefinedMetadata; + } + if (metadata.modelInitializer != null) { + out.modelInitializer = metadata.modelInitializer; + } + if (metadata.trainingConfig != null) { + out.trainingConfig = metadata.trainingConfig; + } + } + const weightDataBase64 = this.LS.getItem(this.keys.weightData); + if (weightDataBase64 == null) { + throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`); + } + out.weightData = base64StringToArrayBuffer(weightDataBase64); + return out; + } + }; + BrowserLocalStorage.URL_SCHEME = "localstorage://"; + var localStorageRouter = (url) => { + if (!env().getBool("IS_BROWSER")) { + return null; + } else { + if (!Array.isArray(url) && url.startsWith(BrowserLocalStorage.URL_SCHEME)) { + return browserLocalStorage(url.slice(BrowserLocalStorage.URL_SCHEME.length)); + } else { + return null; + } + } + }; + IORouterRegistry.registerSaveRouter(localStorageRouter); + IORouterRegistry.registerLoadRouter(localStorageRouter); + function browserLocalStorage(modelPath) { + return new BrowserLocalStorage(modelPath); + } + var BrowserLocalStorageManager = class { + constructor() { + assert(env().getBool("IS_BROWSER"), () => "Current environment is not a web browser"); + assert(typeof window === "undefined" || typeof window.localStorage !== "undefined", () => "Current browser does not appear to support localStorage"); + this.LS = window.localStorage; + } + async listModels() { + const out = {}; + const prefix = PATH_PREFIX + PATH_SEPARATOR; + const suffix = PATH_SEPARATOR + INFO_SUFFIX; + for (let i = 0; i < this.LS.length; ++i) { + const key = this.LS.key(i); + if (key.startsWith(prefix) && key.endsWith(suffix)) { + const modelPath = getModelPathFromKey(key); + out[modelPath] = JSON.parse(this.LS.getItem(key)); + } + } + return out; + } + async removeModel(path) { + path = maybeStripScheme2(path); + const keys = getModelKeys(path); + if (this.LS.getItem(keys.info) == null) { + throw new Error(`Cannot find model at path '${path}'`); + } + const info = JSON.parse(this.LS.getItem(keys.info)); + removeItems(keys); + return info; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/model_management.js + init_define_BUILD_VERSION(); + var URL_SCHEME_SUFFIX = "://"; + var ModelStoreManagerRegistry = class { + constructor() { + this.managers = {}; + } + static getInstance() { + if (ModelStoreManagerRegistry.instance == null) { + ModelStoreManagerRegistry.instance = new ModelStoreManagerRegistry(); + } + return ModelStoreManagerRegistry.instance; + } + static registerManager(scheme, manager) { + assert(scheme != null, () => "scheme must not be undefined or null."); + if (scheme.endsWith(URL_SCHEME_SUFFIX)) { + scheme = scheme.slice(0, scheme.indexOf(URL_SCHEME_SUFFIX)); + } + assert(scheme.length > 0, () => "scheme must not be an empty string."); + const registry = ModelStoreManagerRegistry.getInstance(); + assert(registry.managers[scheme] == null, () => `A model store manager is already registered for scheme '${scheme}'.`); + registry.managers[scheme] = manager; + } + static getManager(scheme) { + const manager = ModelStoreManagerRegistry.getInstance().managers[scheme]; + if (manager == null) { + throw new Error(`Cannot find model manager for scheme '${scheme}'`); + } + return manager; + } + static getSchemes() { + return Object.keys(ModelStoreManagerRegistry.getInstance().managers); + } + }; + function parseURL(url) { + if (url.indexOf(URL_SCHEME_SUFFIX) === -1) { + throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${ModelStoreManagerRegistry.getSchemes().join(",")}`); + } + return { + scheme: url.split(URL_SCHEME_SUFFIX)[0], + path: url.split(URL_SCHEME_SUFFIX)[1] + }; + } + async function cloneModelInternal(sourceURL, destURL, deleteSource = false) { + assert(sourceURL !== destURL, () => `Old path and new path are the same: '${sourceURL}'`); + const loadHandlers = IORouterRegistry.getLoadHandlers(sourceURL); + assert(loadHandlers.length > 0, () => `Copying failed because no load handler is found for source URL ${sourceURL}.`); + assert(loadHandlers.length < 2, () => `Copying failed because more than one (${loadHandlers.length}) load handlers for source URL ${sourceURL}.`); + const loadHandler = loadHandlers[0]; + const saveHandlers = IORouterRegistry.getSaveHandlers(destURL); + assert(saveHandlers.length > 0, () => `Copying failed because no save handler is found for destination URL ${destURL}.`); + assert(saveHandlers.length < 2, () => `Copying failed because more than one (${loadHandlers.length}) save handlers for destination URL ${destURL}.`); + const saveHandler = saveHandlers[0]; + const sourceScheme = parseURL(sourceURL).scheme; + const sourcePath = parseURL(sourceURL).path; + const sameMedium = sourceScheme === parseURL(sourceURL).scheme; + const modelArtifacts = await loadHandler.load(); + if (deleteSource && sameMedium) { + await ModelStoreManagerRegistry.getManager(sourceScheme).removeModel(sourcePath); + } + const saveResult = await saveHandler.save(modelArtifacts); + if (deleteSource && !sameMedium) { + await ModelStoreManagerRegistry.getManager(sourceScheme).removeModel(sourcePath); + } + return saveResult.modelArtifactsInfo; + } + async function listModels() { + const schemes = ModelStoreManagerRegistry.getSchemes(); + const out = {}; + for (const scheme of schemes) { + const schemeOut = await ModelStoreManagerRegistry.getManager(scheme).listModels(); + for (const path in schemeOut) { + const url = scheme + URL_SCHEME_SUFFIX + path; + out[url] = schemeOut[path]; + } + } + return out; + } + async function removeModel(url) { + const schemeAndPath = parseURL(url); + const manager = ModelStoreManagerRegistry.getManager(schemeAndPath.scheme); + return manager.removeModel(schemeAndPath.path); + } + async function copyModel(sourceURL, destURL) { + const deleteSource = false; + return cloneModelInternal(sourceURL, destURL, deleteSource); + } + async function moveModel(sourceURL, destURL) { + const deleteSource = true; + return cloneModelInternal(sourceURL, destURL, deleteSource); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/platforms/platform_browser.js + var PlatformBrowser = class { + fetch(path, init2) { + return fetch(path, init2); + } + now() { + return performance.now(); + } + encode(text, encoding) { + if (encoding !== "utf-8" && encoding !== "utf8") { + throw new Error(`Browser's encoder only supports utf-8, but got ${encoding}`); + } + if (this.textEncoder == null) { + this.textEncoder = new TextEncoder(); + } + return this.textEncoder.encode(text); + } + decode(bytes, encoding) { + return new TextDecoder(encoding).decode(bytes); + } + }; + if (env().get("IS_BROWSER")) { + env().setPlatform("browser", new PlatformBrowser()); + try { + ModelStoreManagerRegistry.registerManager(BrowserLocalStorage.URL_SCHEME, new BrowserLocalStorageManager()); + } catch (err) { + } + try { + ModelStoreManagerRegistry.registerManager(BrowserIndexedDB.URL_SCHEME, new BrowserIndexedDBManager()); + } catch (err) { + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/platforms/platform_node.js + init_define_BUILD_VERSION(); + var getNodeFetch = { + importFetch: () => require_browser() + }; + var systemFetch; + var PlatformNode = class { + constructor() { + this.util = require_util(); + this.textEncoder = new this.util.TextEncoder(); + } + fetch(path, requestInits) { + if (env().global.fetch != null) { + return env().global.fetch(path, requestInits); + } + if (systemFetch == null) { + systemFetch = getNodeFetch.importFetch(); + } + return systemFetch(path, requestInits); + } + now() { + const time = process.hrtime(); + return time[0] * 1e3 + time[1] / 1e6; + } + encode(text, encoding) { + if (encoding !== "utf-8" && encoding !== "utf8") { + throw new Error(`Node built-in encoder only supports utf-8, but got ${encoding}`); + } + return this.textEncoder.encode(text); + } + decode(bytes, encoding) { + if (bytes.length === 0) { + return ""; + } + return new this.util.TextDecoder(encoding).decode(bytes); + } + }; + if (env().get("IS_NODE") && !env().get("IS_BROWSER")) { + env().setPlatform("node", new PlatformNode()); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/buffer.js + init_define_BUILD_VERSION(); + function buffer(shape, dtype = "float32", values) { + dtype = dtype || "float32"; + assertNonNegativeIntegerDimensions(shape); + return new TensorBuffer(shape, dtype, values); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/cast.js + init_define_BUILD_VERSION(); + function cast_(x, dtype) { + const $x = convertToTensor(x, "x", "cast"); + if (!isValidDtype(dtype)) { + throw new Error(`Failed to cast to unknown dtype ${dtype}`); + } + if (dtype === "string" && $x.dtype !== "string" || dtype !== "string" && $x.dtype === "string") { + throw new Error("Only strings can be casted to strings"); + } + const inputs = { x: $x }; + const attrs = { dtype }; + return ENGINE.runKernel(Cast, inputs, attrs); + } + var cast = op({ cast_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/clone.js + init_define_BUILD_VERSION(); + function clone_(x) { + const $x = convertToTensor(x, "x", "clone", "string_or_numeric"); + const inputs = { x: $x }; + return ENGINE.runKernel(Identity, inputs); + } + var clone = op({ clone_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/print.js + init_define_BUILD_VERSION(); + function print(x, verbose = false) { + console.log(x.toString(verbose)); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/base_side_effects.js + getOrMakeEngine(); + var opHandler2 = { + buffer, + cast, + clone, + print + }; + setOpHandler(opHandler2); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/base.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/io.js + var io_exports = {}; + __export(io_exports, { + browserFiles: () => browserFiles, + browserHTTPRequest: () => browserHTTPRequest, + concatenateArrayBuffers: () => concatenateArrayBuffers, + copyModel: () => copyModel, + decodeWeights: () => decodeWeights, + encodeWeights: () => encodeWeights, + fromMemory: () => fromMemory, + fromMemorySync: () => fromMemorySync, + getLoadHandlers: () => getLoadHandlers, + getModelArtifactsForJSON: () => getModelArtifactsForJSON, + getModelArtifactsInfoForJSON: () => getModelArtifactsInfoForJSON, + getSaveHandlers: () => getSaveHandlers, + http: () => http, + isHTTPScheme: () => isHTTPScheme, + listModels: () => listModels, + loadWeights: () => loadWeights, + moveModel: () => moveModel, + registerLoadRouter: () => registerLoadRouter, + registerSaveRouter: () => registerSaveRouter, + removeModel: () => removeModel, + weightsLoaderFactory: () => weightsLoaderFactory, + withSaveHandler: () => withSaveHandler, + withSaveHandlerSync: () => withSaveHandlerSync + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/browser_files.js + init_define_BUILD_VERSION(); + var DEFAULT_FILE_NAME_PREFIX = "model"; + var DEFAULT_JSON_EXTENSION_NAME = ".json"; + var DEFAULT_WEIGHT_DATA_EXTENSION_NAME = ".weights.bin"; + function defer(f) { + return new Promise((resolve) => setTimeout(resolve)).then(f); + } + var BrowserDownloads = class { + constructor(fileNamePrefix) { + if (!env().getBool("IS_BROWSER")) { + throw new Error("browserDownloads() cannot proceed because the current environment is not a browser."); + } + if (fileNamePrefix.startsWith(BrowserDownloads.URL_SCHEME)) { + fileNamePrefix = fileNamePrefix.slice(BrowserDownloads.URL_SCHEME.length); + } + if (fileNamePrefix == null || fileNamePrefix.length === 0) { + fileNamePrefix = DEFAULT_FILE_NAME_PREFIX; + } + this.modelJsonFileName = fileNamePrefix + DEFAULT_JSON_EXTENSION_NAME; + this.weightDataFileName = fileNamePrefix + DEFAULT_WEIGHT_DATA_EXTENSION_NAME; + } + async save(modelArtifacts) { + if (typeof document === "undefined") { + throw new Error("Browser downloads are not supported in this environment since `document` is not present"); + } + const weightsURL = window.URL.createObjectURL(new Blob([modelArtifacts.weightData], { type: "application/octet-stream" })); + if (modelArtifacts.modelTopology instanceof ArrayBuffer) { + throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet."); + } else { + const weightsManifest = [{ + paths: ["./" + this.weightDataFileName], + weights: modelArtifacts.weightSpecs + }]; + const modelJSON = getModelJSONForModelArtifacts(modelArtifacts, weightsManifest); + const modelJsonURL = window.URL.createObjectURL(new Blob([JSON.stringify(modelJSON)], { type: "application/json" })); + const jsonAnchor = this.modelJsonAnchor == null ? document.createElement("a") : this.modelJsonAnchor; + jsonAnchor.download = this.modelJsonFileName; + jsonAnchor.href = modelJsonURL; + await defer(() => jsonAnchor.dispatchEvent(new MouseEvent("click"))); + if (modelArtifacts.weightData != null) { + const weightDataAnchor = this.weightDataAnchor == null ? document.createElement("a") : this.weightDataAnchor; + weightDataAnchor.download = this.weightDataFileName; + weightDataAnchor.href = weightsURL; + await defer(() => weightDataAnchor.dispatchEvent(new MouseEvent("click"))); + } + return { modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts) }; + } + } + }; + BrowserDownloads.URL_SCHEME = "downloads://"; + var BrowserFiles = class { + constructor(files) { + if (files == null || files.length < 1) { + throw new Error(`When calling browserFiles, at least 1 file is required, but received ${files}`); + } + this.jsonFile = files[0]; + this.weightsFiles = files.slice(1); + } + async load() { + return new Promise((resolve, reject) => { + const jsonReader = new FileReader(); + jsonReader.onload = (event) => { + const modelJSON = JSON.parse(event.target.result); + const modelTopology = modelJSON.modelTopology; + if (modelTopology == null) { + reject(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`)); + return; + } + const weightsManifest = modelJSON.weightsManifest; + if (weightsManifest == null) { + reject(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`)); + return; + } + if (this.weightsFiles.length === 0) { + resolve({ modelTopology }); + return; + } + const modelArtifactsPromise = getModelArtifactsForJSON(modelJSON, (weightsManifest2) => this.loadWeights(weightsManifest2)); + resolve(modelArtifactsPromise); + }; + jsonReader.onerror = (error) => reject(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`); + jsonReader.readAsText(this.jsonFile); + }); + } + loadWeights(weightsManifest) { + const weightSpecs = []; + const paths = []; + for (const entry of weightsManifest) { + weightSpecs.push(...entry.weights); + paths.push(...entry.paths); + } + const pathToFile = this.checkManifestAndWeightFiles(weightsManifest); + const promises = paths.map((path) => this.loadWeightsFile(path, pathToFile[path])); + return Promise.all(promises).then((buffers) => [weightSpecs, concatenateArrayBuffers(buffers)]); + } + loadWeightsFile(path, file) { + return new Promise((resolve, reject) => { + const weightFileReader = new FileReader(); + weightFileReader.onload = (event) => { + const weightData = event.target.result; + resolve(weightData); + }; + weightFileReader.onerror = (error) => reject(`Failed to weights data from file of path '${path}'.`); + weightFileReader.readAsArrayBuffer(file); + }); + } + checkManifestAndWeightFiles(manifest) { + const basenames = []; + const fileNames = this.weightsFiles.map((file) => basename(file.name)); + const pathToFile = {}; + for (const group of manifest) { + group.paths.forEach((path) => { + const pathBasename = basename(path); + if (basenames.indexOf(pathBasename) !== -1) { + throw new Error(`Duplicate file basename found in weights manifest: '${pathBasename}'`); + } + basenames.push(pathBasename); + if (fileNames.indexOf(pathBasename) === -1) { + throw new Error(`Weight file with basename '${pathBasename}' is not provided.`); + } else { + pathToFile[path] = this.weightsFiles[fileNames.indexOf(pathBasename)]; + } + }); + } + if (basenames.length !== this.weightsFiles.length) { + throw new Error(`Mismatch in the number of files in weights manifest (${basenames.length}) and the number of weight files provided (${this.weightsFiles.length}).`); + } + return pathToFile; + } + }; + var browserDownloadsRouter = (url) => { + if (!env().getBool("IS_BROWSER")) { + return null; + } else { + if (!Array.isArray(url) && url.startsWith(BrowserDownloads.URL_SCHEME)) { + return browserDownloads(url.slice(BrowserDownloads.URL_SCHEME.length)); + } else { + return null; + } + } + }; + IORouterRegistry.registerSaveRouter(browserDownloadsRouter); + function browserDownloads(fileNamePrefix = "model") { + return new BrowserDownloads(fileNamePrefix); + } + function browserFiles(files) { + return new BrowserFiles(files); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/http.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/weights_loader.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/progress.js + init_define_BUILD_VERSION(); + function monitorPromisesProgress(promises, onProgress, startFraction, endFraction) { + checkPromises(promises); + startFraction = startFraction == null ? 0 : startFraction; + endFraction = endFraction == null ? 1 : endFraction; + checkFraction(startFraction, endFraction); + let resolvedPromise = 0; + const registerMonitor = (promise) => { + promise.then((value) => { + const fraction = startFraction + ++resolvedPromise / promises.length * (endFraction - startFraction); + onProgress(fraction); + return value; + }); + return promise; + }; + function checkPromises(promises2) { + assert(promises2 != null && Array.isArray(promises2) && promises2.length > 0, () => "promises must be a none empty array"); + } + function checkFraction(startFraction2, endFraction2) { + assert(startFraction2 >= 0 && startFraction2 <= 1, () => `Progress fraction must be in range [0, 1], but got startFraction ${startFraction2}`); + assert(endFraction2 >= 0 && endFraction2 <= 1, () => `Progress fraction must be in range [0, 1], but got endFraction ${endFraction2}`); + assert(endFraction2 >= startFraction2, () => `startFraction must be no more than endFraction, but got startFraction ${startFraction2} and endFraction ${endFraction2}`); + } + return Promise.all(promises.map(registerMonitor)); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/weights_loader.js + async function loadWeightsAsArrayBuffer(fetchURLs, loadOptions) { + if (loadOptions == null) { + loadOptions = {}; + } + const fetchFunc = loadOptions.fetchFunc == null ? env().platform.fetch : loadOptions.fetchFunc; + const requests = fetchURLs.map((fetchURL) => fetchFunc(fetchURL, loadOptions.requestInit, { isBinary: true })); + const fetchStartFraction = 0; + const fetchEndFraction = 0.5; + const responses = loadOptions.onProgress == null ? await Promise.all(requests) : await monitorPromisesProgress(requests, loadOptions.onProgress, fetchStartFraction, fetchEndFraction); + const bufferPromises = responses.map((response) => response.arrayBuffer()); + const bufferStartFraction = 0.5; + const bufferEndFraction = 1; + const buffers = loadOptions.onProgress == null ? await Promise.all(bufferPromises) : await monitorPromisesProgress(bufferPromises, loadOptions.onProgress, bufferStartFraction, bufferEndFraction); + return buffers; + } + async function loadWeights(manifest, filePathPrefix = "", weightNames, requestInit) { + const fetchWeights = (fetchUrls) => loadWeightsAsArrayBuffer(fetchUrls, { requestInit }); + const loadWeights2 = weightsLoaderFactory(fetchWeights); + return loadWeights2(manifest, filePathPrefix, weightNames); + } + function weightsLoaderFactory(fetchWeightsFunction) { + return async (manifest, filePathPrefix = "", weightNames) => { + const groupIndicesToFetchMap = manifest.map(() => false); + const groupWeightsToFetch = {}; + const weightsFound = weightNames != null ? weightNames.map(() => false) : []; + const allManifestWeightNames = []; + manifest.forEach((manifestGroupConfig, groupIndex) => { + let groupOffset = 0; + manifestGroupConfig.weights.forEach((weightsEntry) => { + const rawDtype = "quantization" in weightsEntry ? weightsEntry.quantization.dtype : weightsEntry.dtype; + const weightsBytes = DTYPE_VALUE_SIZE_MAP[rawDtype] * sizeFromShape(weightsEntry.shape); + const enqueueWeightsForFetchingFn = () => { + groupIndicesToFetchMap[groupIndex] = true; + if (groupWeightsToFetch[groupIndex] == null) { + groupWeightsToFetch[groupIndex] = []; + } + groupWeightsToFetch[groupIndex].push({ + manifestEntry: weightsEntry, + groupOffset, + sizeBytes: weightsBytes + }); + }; + if (weightNames != null) { + weightNames.forEach((weightName, weightIndex) => { + if (weightName === weightsEntry.name) { + enqueueWeightsForFetchingFn(); + weightsFound[weightIndex] = true; + } + }); + } else { + enqueueWeightsForFetchingFn(); + } + allManifestWeightNames.push(weightsEntry.name); + groupOffset += weightsBytes; + }); + }); + if (!weightsFound.every((found) => found)) { + const weightsNotFound = weightNames.filter((_, i) => !weightsFound[i]); + throw new Error(`Could not find weights in manifest with names: ${weightsNotFound.join(", ")}. +Manifest JSON has weights with names: ${allManifestWeightNames.join(", ")}.`); + } + const groupIndicesToFetch = groupIndicesToFetchMap.reduce((accumulator, shouldFetch, i) => { + if (shouldFetch) { + accumulator.push(i); + } + return accumulator; + }, []); + const fetchUrls = []; + groupIndicesToFetch.forEach((i) => { + manifest[i].paths.forEach((filepath) => { + const fetchUrl = filePathPrefix + (!filePathPrefix.endsWith("/") ? "/" : "") + filepath; + fetchUrls.push(fetchUrl); + }); + }); + const buffers = await fetchWeightsFunction(fetchUrls); + const weightsTensorMap = {}; + let bufferIndexOffset = 0; + groupIndicesToFetch.forEach((i) => { + const numBuffers = manifest[i].paths.length; + let groupBytes = 0; + for (let i2 = 0; i2 < numBuffers; i2++) { + groupBytes += buffers[bufferIndexOffset + i2].byteLength; + } + const groupBuffer = new ArrayBuffer(groupBytes); + const groupByteBuffer = new Uint8Array(groupBuffer); + let groupBufferOffset = 0; + for (let i2 = 0; i2 < numBuffers; i2++) { + const buffer2 = new Uint8Array(buffers[bufferIndexOffset + i2]); + groupByteBuffer.set(buffer2, groupBufferOffset); + groupBufferOffset += buffer2.byteLength; + } + const weightsEntries = groupWeightsToFetch[i]; + weightsEntries.forEach((weightsEntry) => { + const byteBuffer = groupBuffer.slice(weightsEntry.groupOffset, weightsEntry.groupOffset + weightsEntry.sizeBytes); + const nameToTensorMap = decodeWeights(byteBuffer, [weightsEntry.manifestEntry]); + for (const name in nameToTensorMap) { + weightsTensorMap[name] = nameToTensorMap[name]; + } + }); + bufferIndexOffset += numBuffers; + }); + return weightsTensorMap; + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/http.js + var OCTET_STREAM_MIME_TYPE = "application/octet-stream"; + var JSON_TYPE = "application/json"; + var HTTPRequest = class { + constructor(path, loadOptions) { + this.DEFAULT_METHOD = "POST"; + if (loadOptions == null) { + loadOptions = {}; + } + this.weightPathPrefix = loadOptions.weightPathPrefix; + this.onProgress = loadOptions.onProgress; + this.weightUrlConverter = loadOptions.weightUrlConverter; + if (loadOptions.fetchFunc != null) { + assert(typeof loadOptions.fetchFunc === "function", () => "Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"); + this.fetch = loadOptions.fetchFunc; + } else { + this.fetch = env().platform.fetch; + } + assert(path != null && path.length > 0, () => "URL path for http must not be null, undefined or empty."); + if (Array.isArray(path)) { + assert(path.length === 2, () => `URL paths for http must have a length of 2, (actual length is ${path.length}).`); + } + this.path = path; + if (loadOptions.requestInit != null && loadOptions.requestInit.body != null) { + throw new Error("requestInit is expected to have no pre-existing body, but has one."); + } + this.requestInit = loadOptions.requestInit || {}; + } + async save(modelArtifacts) { + if (modelArtifacts.modelTopology instanceof ArrayBuffer) { + throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet."); + } + const init2 = Object.assign({ method: this.DEFAULT_METHOD }, this.requestInit); + init2.body = new FormData(); + const weightsManifest = [{ + paths: ["./model.weights.bin"], + weights: modelArtifacts.weightSpecs + }]; + const modelTopologyAndWeightManifest = getModelJSONForModelArtifacts(modelArtifacts, weightsManifest); + init2.body.append("model.json", new Blob([JSON.stringify(modelTopologyAndWeightManifest)], { type: JSON_TYPE }), "model.json"); + if (modelArtifacts.weightData != null) { + init2.body.append("model.weights.bin", new Blob([modelArtifacts.weightData], { type: OCTET_STREAM_MIME_TYPE }), "model.weights.bin"); + } + const response = await this.fetch(this.path, init2); + if (response.ok) { + return { + modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts), + responses: [response] + }; + } else { + throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${response.status}.`); + } + } + async load() { + const modelConfigRequest = await this.fetch(this.path, this.requestInit); + if (!modelConfigRequest.ok) { + throw new Error(`Request to ${this.path} failed with status code ${modelConfigRequest.status}. Please verify this URL points to the model JSON of the model to load.`); + } + let modelJSON; + try { + modelJSON = await modelConfigRequest.json(); + } catch (e) { + let message = `Failed to parse model JSON of response from ${this.path}.`; + if (this.path.endsWith(".pb")) { + message += " Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository."; + } else { + message += " Please make sure the server is serving valid JSON for this request."; + } + throw new Error(message); + } + const modelTopology = modelJSON.modelTopology; + const weightsManifest = modelJSON.weightsManifest; + if (modelTopology == null && weightsManifest == null) { + throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`); + } + return getModelArtifactsForJSON(modelJSON, (weightsManifest2) => this.loadWeights(weightsManifest2)); + } + async loadWeights(weightsManifest) { + const weightPath = Array.isArray(this.path) ? this.path[1] : this.path; + const [prefix, suffix] = parseUrl(weightPath); + const pathPrefix = this.weightPathPrefix || prefix; + const weightSpecs = []; + for (const entry of weightsManifest) { + weightSpecs.push(...entry.weights); + } + const fetchURLs = []; + const urlPromises = []; + for (const weightsGroup of weightsManifest) { + for (const path of weightsGroup.paths) { + if (this.weightUrlConverter != null) { + urlPromises.push(this.weightUrlConverter(path)); + } else { + fetchURLs.push(pathPrefix + path + suffix); + } + } + } + if (this.weightUrlConverter) { + fetchURLs.push(...await Promise.all(urlPromises)); + } + const buffers = await loadWeightsAsArrayBuffer(fetchURLs, { + requestInit: this.requestInit, + fetchFunc: this.fetch, + onProgress: this.onProgress + }); + return [weightSpecs, concatenateArrayBuffers(buffers)]; + } + }; + HTTPRequest.URL_SCHEME_REGEX = /^https?:\/\//; + function parseUrl(url) { + const lastSlash = url.lastIndexOf("/"); + const lastSearchParam = url.lastIndexOf("?"); + const prefix = url.substring(0, lastSlash); + const suffix = lastSearchParam > lastSlash ? url.substring(lastSearchParam) : ""; + return [prefix + "/", suffix]; + } + function isHTTPScheme(url) { + return url.match(HTTPRequest.URL_SCHEME_REGEX) != null; + } + var httpRouter = (url, loadOptions) => { + if (typeof fetch === "undefined" && (loadOptions == null || loadOptions.fetchFunc == null)) { + return null; + } else { + let isHTTP = true; + if (Array.isArray(url)) { + isHTTP = url.every((urlItem) => isHTTPScheme(urlItem)); + } else { + isHTTP = isHTTPScheme(url); + } + if (isHTTP) { + return http(url, loadOptions); + } + } + return null; + }; + IORouterRegistry.registerSaveRouter(httpRouter); + IORouterRegistry.registerLoadRouter(httpRouter); + function http(path, loadOptions) { + return new HTTPRequest(path, loadOptions); + } + function browserHTTPRequest(path, loadOptions) { + return http(path, loadOptions); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/passthrough.js + init_define_BUILD_VERSION(); + var PassthroughLoader = class { + constructor(modelArtifacts) { + this.modelArtifacts = modelArtifacts; + } + load() { + return this.modelArtifacts; + } + }; + var PassthroughSaver = class { + constructor(saveHandler) { + this.saveHandler = saveHandler; + } + save(modelArtifacts) { + return this.saveHandler(modelArtifacts); + } + }; + var PassthroughAsync = class { + constructor(handler) { + if (handler.load) { + this.load = () => Promise.resolve(handler.load()); + } + if (handler.save) { + this.save = (modelArtifacts) => Promise.resolve(handler.save(modelArtifacts)); + } + } + }; + function fromMemory(modelArtifacts, weightSpecs, weightData, trainingConfig) { + const args = arguments; + return new PassthroughAsync(fromMemorySync(...args)); + } + function fromMemorySync(modelArtifacts, weightSpecs, weightData, trainingConfig) { + if (arguments.length === 1) { + const isModelArtifacts = modelArtifacts.modelTopology != null || modelArtifacts.weightSpecs != null; + if (isModelArtifacts) { + return new PassthroughLoader(modelArtifacts); + } else { + console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."); + return new PassthroughLoader({ modelTopology: modelArtifacts }); + } + } else { + console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."); + return new PassthroughLoader({ + modelTopology: modelArtifacts, + weightSpecs, + weightData, + trainingConfig + }); + } + } + function withSaveHandler(saveHandler) { + return new PassthroughSaver(saveHandler); + } + function withSaveHandlerSync(saveHandler) { + return new PassthroughSaver(saveHandler); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/mat_mul.js + init_define_BUILD_VERSION(); + function matMul_(a, b, transposeA = false, transposeB = false) { + let $a = convertToTensor(a, "a", "matMul"); + let $b = convertToTensor(b, "b", "matMul"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + const attrs = { transposeA, transposeB }; + return ENGINE.runKernel(BatchMatMul, inputs, attrs); + } + var matMul = op({ matMul_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/one_hot.js + init_define_BUILD_VERSION(); + function oneHot_(indices, depth, onValue = 1, offValue = 0) { + if (depth < 2) { + throw new Error(`Error in oneHot: depth must be >=2, but it is ${depth}`); + } + const $indices = convertToTensor(indices, "indices", "oneHot", "int32"); + const inputs = { indices: $indices }; + const attrs = { depth, onValue, offValue }; + return ENGINE.runKernel(OneHot, inputs, attrs); + } + var oneHot = op({ oneHot_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/transpose.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/globals.js + init_define_BUILD_VERSION(); + function enableProdMode() { + env().set("PROD", true); + } + function deprecationWarn(msg) { + if (env().getBool("DEPRECATION_WARNINGS_ENABLED")) { + console.warn(msg + " You can disable deprecation warnings with tf.disableDeprecationWarnings()."); + } + } + setDeprecationWarningFn(deprecationWarn); + function engine() { + return ENGINE; + } + function memory() { + return ENGINE.memory(); + } + function tidy(nameOrFn, fn) { + return ENGINE.tidy(nameOrFn, fn); + } + function dispose(container) { + const tensors = getTensorsInContainer(container); + tensors.forEach((tensor2) => tensor2.dispose()); + } + function keep(result) { + return ENGINE.keep(result); + } + function setBackend(backendName) { + return ENGINE.setBackend(backendName); + } + function registerBackend(name, factory, priority = 1) { + return ENGINE.registerBackend(name, factory, priority); + } + function backend() { + return ENGINE.backend; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/imag.js + init_define_BUILD_VERSION(); + function imag_(input2) { + const $input = convertToTensor(input2, "input", "imag"); + const inputs = { input: $input }; + return ENGINE.runKernel(Imag, inputs); + } + var imag = op({ imag_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/neg.js + init_define_BUILD_VERSION(); + function neg_(x) { + const $x = convertToTensor(x, "x", "neg"); + const inputs = { x: $x }; + return ENGINE.runKernel(Neg, inputs); + } + var neg = op({ neg_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/real.js + init_define_BUILD_VERSION(); + function real_(input2) { + const $input = convertToTensor(input2, "input", "real"); + const inputs = { input: $input }; + return ENGINE.runKernel(Real, inputs); + } + var real = op({ real_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/transpose.js + function transpose_(x, perm, conjugate) { + const $x = convertToTensor(x, "x", "transpose"); + if (perm == null) { + perm = $x.shape.map((s, i) => i).reverse(); + } + assert($x.rank === perm.length, () => `Error in transpose: rank of input ${$x.rank} must match length of perm ${perm}.`); + perm.forEach((axis) => { + assert(axis >= 0 && axis < $x.rank, () => `All entries in 'perm' must be between 0 and ${$x.rank - 1} but got ${perm}`); + }); + if ($x.rank <= 1) { + return $x.clone(); + } + const inputs = { x: $x }; + const attrs = { perm }; + if ($x.dtype === "complex64") { + return tidy(() => { + let $real = real($x); + let $imag = imag($x); + $real = ENGINE.runKernel(Transpose, { x: $real }, attrs); + $imag = ENGINE.runKernel(Transpose, { x: $imag }, attrs); + if (conjugate) { + $imag = neg($imag); + } + return complex($real, $imag); + }); + } + return ENGINE.runKernel(Transpose, inputs, attrs); + } + var transpose = op({ transpose_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_util.js + var broadcast_util_exports = {}; + __export(broadcast_util_exports, { + assertAndGetBroadcastShape: () => assertAndGetBroadcastShape, + getBroadcastDims: () => getBroadcastDims, + getReductionAxes: () => getReductionAxes + }); + init_define_BUILD_VERSION(); + function getBroadcastDims(inShape, outShape) { + const inRank = inShape.length; + const dims = []; + for (let i = 0; i < inRank; i++) { + const dim = inRank - 1 - i; + const a = inShape[dim] || 1; + const b = outShape[outShape.length - 1 - i] || 1; + if (b > 1 && a === 1) { + dims.unshift(dim); + } + } + return dims; + } + function getReductionAxes(inShape, outShape) { + const result = []; + for (let i = 0; i < outShape.length; i++) { + const inDim = inShape[inShape.length - i - 1]; + const outAxis = outShape.length - i - 1; + const outDim = outShape[outAxis]; + if (inDim == null || inDim === 1 && outDim > 1) { + result.unshift(outAxis); + } + } + return result; + } + function assertAndGetBroadcastShape(shapeA, shapeB) { + const result = []; + const l = Math.max(shapeA.length, shapeB.length); + for (let i = 0; i < l; i++) { + let a = shapeA[shapeA.length - i - 1]; + if (a == null) { + a = 1; + } + let b = shapeB[shapeB.length - i - 1]; + if (b == null) { + b = 1; + } + if (a === 1) { + result.unshift(b); + } else if (b === 1) { + result.unshift(a); + } else if (a !== b) { + const errMsg = `Operands could not be broadcast together with shapes ${shapeA} and ${shapeB}.`; + throw Error(errMsg); + } else { + result.unshift(a); + } + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor3d.js + init_define_BUILD_VERSION(); + function tensor3d(values, shape, dtype) { + assertNonNull(values); + if (shape != null && shape.length !== 3) { + throw new Error("tensor3d() requires shape to have three numbers"); + } + const inferredShape = inferShape(values, dtype); + if (inferredShape.length !== 3 && inferredShape.length !== 1) { + throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray"); + } + if (inferredShape.length === 1 && shape == null) { + throw new Error("tensor3d() requires shape to be provided when `values` are a flat array"); + } + return makeTensor(values, shape, inferredShape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd_util.js + var gather_nd_util_exports = {}; + __export(gather_nd_util_exports, { + prepareAndValidate: () => prepareAndValidate + }); + init_define_BUILD_VERSION(); + function prepareAndValidate(tensor2, indices) { + const tensorRank = tensor2.shape.length; + const indicesRank = indices.shape.length; + if (tensorRank < 1) { + throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${tensorRank}.`); + } + if (indicesRank < 1) { + throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${indicesRank}.`); + } + if (indices.dtype !== "int32") { + throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${indices.dtype}.`); + } + if (indices.shape[indicesRank - 1] > tensorRank) { + throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${indices.shape[indicesRank - 1]} vs. ${tensorRank}`); + } + if (sizeFromShape(tensor2.shape) === 0) { + throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${tensor2.shape}.`); + } + const indicesShape = indices.shape; + const sliceRank = indicesShape[indicesShape.length - 1]; + let nResult = 1; + for (let i = 0; i < indicesShape.length - 1; ++i) { + nResult *= indicesShape[i]; + } + const inputShape = tensor2.shape; + const resultShape = indicesShape.slice(); + resultShape.pop(); + let sliceSize = 1; + for (let i = sliceRank; i < tensorRank; ++i) { + sliceSize *= inputShape[i]; + resultShape.push(inputShape[i]); + } + const strides = [ + ...computeStrides(tensor2.shape).map((stride) => stride / sliceSize), + 1 + ].slice(0, sliceRank); + return [resultShape, nResult, sliceSize, strides]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd_util.js + var scatter_nd_util_exports = {}; + __export(scatter_nd_util_exports, { + calculateShapes: () => calculateShapes, + validateInput: () => validateInput, + validateUpdateShape: () => validateUpdateShape + }); + init_define_BUILD_VERSION(); + function validateUpdateShape(shape, indices, updates) { + const sliceDim = indices.rank > 1 ? indices.shape[indices.rank - 1] : 1; + const batchDim = indices.rank > 1 ? indices.rank - 1 : 1; + const shapeError = `Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${updates.shape}, indices.shape: ${indices.shape}, shape: ${shape}, sliceDim: ${sliceDim}, and batchDim: ${batchDim}.`; + if (updates.rank < batchDim) { + throw new Error(shapeError + ` update.rank < ${batchDim}. `); + } + if (shape.length < sliceDim + (updates.rank - batchDim)) { + throw new Error(shapeError + ` Output shape length < ${sliceDim + (updates.rank - batchDim)}`); + } + if (updates.rank !== batchDim + shape.length - sliceDim) { + throw new Error(shapeError + ` update.rank != ${batchDim + shape.length - sliceDim}`); + } + for (let d = 0; d < batchDim; ++d) { + if (updates.shape[d] !== indices.shape[d]) { + throw new Error(shapeError + ` updates.shape[${d}] (${updates.shape[d]}) != indices.shape[${d}] (${indices.shape[d]}).`); + } + } + for (let d = 0; d < updates.rank - batchDim; ++d) { + if (updates.shape[d + batchDim] !== shape[d + sliceDim]) { + throw new Error(shapeError + ` updates.shape[${d + batchDim}] (${updates.shape[d + batchDim]}) != shape[${d + batchDim}] (${shape[d + batchDim]})`); + } + } + } + function validateInput(updates, indices, shape) { + if (indices.rank < 1) { + throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${indices.rank}.`); + } + if (updates.rank < 1) { + throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${updates.rank}.`); + } + if (indices.dtype !== "int32") { + throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${indices.dtype}`); + } + if (shape.length < 1) { + throw new Error(`Output rank must be greater or equal to 1, but got shape: ${shape}`); + } + if (shape.length === 0) { + if (indices.size === 0) { + throw new Error(`Indices specified for empty output. indices shape: ${indices.shape}`); + } + if (updates.size === 0) { + throw new Error(`Updates specified for empty output. updates shape: ${updates.shape}`); + } + } + validateUpdateShape(shape, indices, updates); + } + function calculateShapes(updates, indices, shape) { + const indicesRank = indices.shape.length; + const sliceRank = indicesRank > 1 ? indices.shape[indicesRank - 1] : 1; + const totalNd = shape.length; + let sliceSize = 1; + for (let i = sliceRank; i < totalNd; ++i) { + sliceSize *= shape[i]; + } + const safeSliceDim = sliceRank < 1 ? 1 : sliceRank; + const numUpdates = sizeFromShape(indices.shape) / safeSliceDim; + const strides = [...computeStrides(shape.slice(0, sliceRank)), 1]; + const outputSize = sizeFromShape(shape); + return { sliceRank, numUpdates, sliceSize, strides, outputSize }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice_util.js + var slice_util_exports = {}; + __export(slice_util_exports, { + assertParamsValid: () => assertParamsValid, + computeFlatOffset: () => computeFlatOffset, + computeOutShape: () => computeOutShape, + getNormalizedAxes: () => getNormalizedAxes, + isSliceContinous: () => isSliceContinous, + maskToAxes: () => maskToAxes, + parseSliceParams: () => parseSliceParams, + sliceInfo: () => sliceInfo, + startForAxis: () => startForAxis, + startIndicesWithElidedDims: () => startIndicesWithElidedDims, + stopForAxis: () => stopForAxis, + stopIndicesWithElidedDims: () => stopIndicesWithElidedDims, + stridesForAxis: () => stridesForAxis, + stridesWithElidedDims: () => stridesWithElidedDims + }); + init_define_BUILD_VERSION(); + var NEW_AXIS = -2; + var SHRINK_AXIS = -1; + function assertParamsValid(input2, begin, size) { + const inputRank = input2.shape.length; + assert(inputRank === begin.length, () => `Error in slice${inputRank}D: Length of begin ${begin} must match the rank of the array (${inputRank}).`); + assert(inputRank === size.length, () => `Error in slice${inputRank}D: Length of size ${size} must match the rank of the array (${inputRank}).`); + for (let i = 0; i < inputRank; ++i) { + assert(begin[i] + size[i] <= input2.shape[i], () => `Error in slice${inputRank}D: begin[${i}] + size[${i}] (${begin[i] + size[i]}) would overflow input.shape[${i}] (${input2.shape[i]})`); + } + } + function maskToAxes(mask) { + const axes = []; + let axis = 0; + while (mask > 0) { + if (mask & 1) { + axes.push(axis); + } + mask /= 2; + axis++; + } + return axes; + } + function computeOutShape(begin, end, strides) { + const size = []; + for (let axis = 0; axis < begin.length; axis++) { + size[axis] = Math.ceil((end[axis] - begin[axis]) / strides[axis]); + } + return size; + } + function stridesWithElidedDims(strides, ellipsisInsertionIndex, numElidedAxes, inputShape) { + const newStrides = [...strides]; + for (let i = newStrides.length; i < inputShape.length; i++) { + newStrides.push(1); + } + for (let i = 0; i < numElidedAxes; i++) { + if (i === 0) { + newStrides[ellipsisInsertionIndex] = 1; + } else { + newStrides.splice(ellipsisInsertionIndex, 0, 1); + newStrides.pop(); + } + } + return newStrides; + } + function unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, normalizedAxis) { + if (normalizedAxis <= ellipsisInsertionIndex) { + return normalizedAxis; + } + return normalizedAxis - (numElidedAxes - 1); + } + function getElidedAxes(numElidedAxes, ellipsisInsertionIndex) { + const elidedAxes = []; + for (let i = 0; i < numElidedAxes; i++) { + elidedAxes.push(ellipsisInsertionIndex + i); + } + return elidedAxes; + } + function getNormalizedAxes(inputShape, ellipsisAxes, numInterpolatedAxes, begin, end, strides, beginMask, endMask, ellipsisMask) { + const inputRank = inputShape.length; + let normalizedBegin = new Array(inputRank), normalizedEnd = new Array(inputRank), normalizedStrides = new Array(inputRank); + if (ellipsisAxes.length && numInterpolatedAxes > 0) { + const fullIndex = ellipsisAxes[0]; + const numElidedAxes = numInterpolatedAxes + 1; + normalizedBegin = startIndicesWithElidedDims(beginMask, fullIndex, numElidedAxes, begin, inputShape); + normalizedEnd = stopIndicesWithElidedDims(endMask, fullIndex, numElidedAxes, end, inputShape); + normalizedStrides = stridesWithElidedDims(strides, fullIndex, numElidedAxes, inputShape); + } else { + for (let axis = 0; axis < inputRank; axis++) { + normalizedBegin[axis] = startForAxis(beginMask, begin, strides, inputShape, axis, ellipsisMask); + normalizedEnd[axis] = stopForAxis(endMask, end, strides, inputShape, axis, ellipsisMask); + normalizedStrides[axis] = stridesForAxis(strides, axis, ellipsisMask); + } + } + return { + begin: normalizedBegin, + end: normalizedEnd, + strides: normalizedStrides + }; + } + function startIndicesWithElidedDims(beginMask, ellipsisInsertionIndex, numElidedAxes, originalBegin, inputShape) { + const newIndices = [...inputShape]; + const elidedAxes = getElidedAxes(numElidedAxes, ellipsisInsertionIndex); + for (let axis = 0; axis < newIndices.length; axis++) { + if (elidedAxes.indexOf(axis) > -1) { + newIndices[axis] = 0; + } else { + const originalAxis = unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, axis); + let originalValue = originalBegin[originalAxis]; + if (beginMask & 1 << originalAxis) { + originalValue = 0; + } + newIndices[axis] = originalValue; + } + } + return newIndices; + } + function stopIndicesWithElidedDims(endMask, ellipsisInsertionIndex, numElidedAxes, originalEnd, inputShape) { + const newIndices = [...inputShape]; + const elidedAxes = getElidedAxes(numElidedAxes, ellipsisInsertionIndex); + for (let axis = 0; axis < newIndices.length; axis++) { + if (elidedAxes.indexOf(axis) > -1) { + newIndices[axis] = Number.MAX_SAFE_INTEGER; + } else { + const originalAxis = unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, axis); + let originalValue = originalEnd[originalAxis]; + if (endMask & 1 << originalAxis) { + originalValue = Number.MAX_SAFE_INTEGER; + } + newIndices[axis] = originalValue; + } + } + for (let i = 0; i < newIndices.length; i++) { + const axisSize = inputShape[i]; + if (newIndices[i] < 0) { + newIndices[i] += axisSize; + } + newIndices[i] = clamp(0, newIndices[i], inputShape[i]); + } + return newIndices; + } + function stridesForAxis(strides, axis, ellipsisMask) { + let stride = strides[axis]; + if (ellipsisMask & 1 << axis || stride == null) { + stride = 1; + } + return stride; + } + function startForAxis(beginMask, startIndices, strides, inputShape, axis, ellipsisMask) { + let start = startIndices[axis]; + const stride = strides[axis] || 1; + if (beginMask & 1 << axis || ellipsisMask & 1 << axis || start == null) { + if (stride > 0) { + start = Number.MIN_SAFE_INTEGER; + } else { + start = Number.MAX_SAFE_INTEGER; + } + } + const axisSize = inputShape[axis]; + if (start < 0) { + start += axisSize; + } + start = clamp(0, start, axisSize - 1); + return start; + } + function stopForAxis(endMask, stopIndices, strides, inputShape, axis, ellipsisMask) { + let stop = stopIndices[axis]; + const stride = strides[axis] || 1; + if (endMask & 1 << axis || ellipsisMask & 1 << axis || stop == null) { + if (stride > 0) { + stop = Number.MAX_SAFE_INTEGER; + } else { + stop = Number.MIN_SAFE_INTEGER; + } + } + const axisSize = inputShape[axis]; + if (stop < 0) { + stop += axisSize; + } + if (stride > 0) { + stop = clamp(0, stop, axisSize); + } else { + stop = clamp(-1, stop, axisSize - 1); + } + return stop; + } + function isSliceContinous(shape, begin, size) { + let firstNonOneAxis = size.length; + for (let i = 0; i < size.length; i++) { + if (size[i] > 1) { + firstNonOneAxis = i; + break; + } + } + for (let i = firstNonOneAxis + 1; i < size.length; i++) { + if (begin[i] > 0 || size[i] !== shape[i]) { + return false; + } + } + return true; + } + function computeFlatOffset(begin, strides) { + let flatOffset = begin.length > 0 ? begin[begin.length - 1] : 1; + for (let i = 0; i < begin.length - 1; i++) { + flatOffset += begin[i] * strides[i]; + } + return flatOffset; + } + function parseSliceParams(x, begin, size) { + let begin_; + const xRank = x.shape.length; + if (typeof begin === "number") { + begin_ = [begin, ...new Array(xRank - 1).fill(0)]; + } else if (begin.length < xRank) { + begin_ = begin.concat(new Array(xRank - begin.length).fill(0)); + } else { + begin_ = begin.slice(); + } + begin_.forEach((d) => { + assert(d !== -1, () => "slice() does not support negative begin indexing."); + }); + let size_; + if (size == null) { + size_ = new Array(xRank).fill(-1); + } else if (typeof size === "number") { + size_ = [size, ...new Array(xRank - 1).fill(-1)]; + } else if (size.length < xRank) { + size_ = size.concat(new Array(xRank - size.length).fill(-1)); + } else { + size_ = size; + } + size_ = size_.map((d, i) => { + if (d >= 0) { + return d; + } else { + assert(d === -1, () => `Negative size values should be exactly -1 but got ${d} for the slice() size at index ${i}.`); + return x.shape[i] - begin_[i]; + } + }); + return [begin_, size_]; + } + function sliceInfo(xShape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask) { + let stridesNonNull; + if (strides == null) { + stridesNonNull = new Array(begin.length); + stridesNonNull.fill(1); + } else { + stridesNonNull = strides; + } + if (ellipsisMask != null && (ellipsisMask & ellipsisMask - 1) !== 0) { + throw new Error("Multiple ellipses in slice is not allowed."); + } + let ellipsisSeen = false; + const sparseSpec = { + dims: stridesNonNull.length, + numAddAxisAfterEllipsis: 0, + begin: begin.slice(), + end: end.slice(), + strides: stridesNonNull.slice(), + beginMask, + endMask, + ellipsisMask, + newAxisMask, + shrinkAxisMask + }; + for (let i = 0; i < sparseSpec.dims; i++) { + if (ellipsisSeen && (1 << i & newAxisMask) !== 0) { + sparseSpec.numAddAxisAfterEllipsis++; + } + if (1 << i & ellipsisMask) { + ellipsisSeen = true; + } + } + if (!ellipsisSeen) { + sparseSpec.ellipsisMask |= 1 << sparseSpec.dims; + sparseSpec.dims++; + } + const denseSpec = { + dims: xShape.length, + beginMask: 0, + endMask: 0, + beginValid: false, + endValid: false + }; + buildDenseSpec(sparseSpec, denseSpec); + let isIdentity = true; + let sliceDim0 = true; + let isSimpleSlice = true; + const processingShape = []; + const finalShape = []; + for (let i = 0; i < xShape.length; ++i) { + if (denseSpec.strides[i] === 0) { + throw Error(`strides[${i}] must be non-zero`); + } + const shrinkI = !!(denseSpec.shrinkAxisMask & 1 << i); + const dimI = xShape[i]; + if (dimI === -1) { + processingShape.push(shrinkI ? 1 : -1); + continue; + } + const masks = [denseSpec.beginMask & 1 << i, denseSpec.endMask & 1 << i]; + const validRange = [ + denseSpec.strides[i] > 0 ? 0 : -1, + denseSpec.strides[i] > 0 ? dimI : dimI - 1 + ]; + if (shrinkI && denseSpec.strides[i] <= 0) { + throw Error("only stride 1 allowed on non-range indexing."); + } + isSimpleSlice = isSimpleSlice && denseSpec.strides[i] === 1; + const beginAndEndMasked = !!(denseSpec.beginMask & 1 << i && denseSpec.endMask & 1 << i); + if (denseSpec.beginValid && denseSpec.endValid) { + if (shrinkI) { + const xFwd = denseSpec.begin[i] < 0 ? dimI + denseSpec.begin[i] : denseSpec.begin[i]; + denseSpec.begin[i] = xFwd; + denseSpec.end[i] = denseSpec.begin[i] + 1; + if (xFwd < 0 || xFwd >= dimI) { + throw Error(`slice index ${denseSpec.begin[i]} of dimension ${i} out of bounds.`); + } + } else { + denseSpec.begin[i] = canonical(denseSpec.begin[i], 0, denseSpec.strides[i], dimI, masks, validRange); + denseSpec.end[i] = canonical(denseSpec.end[i], 1, denseSpec.strides[i], dimI, masks, validRange); + } + const takeAllInDimension = denseSpec.strides[i] === 1 && denseSpec.begin[i] === 0 && denseSpec.end[i] === dimI; + isIdentity = isIdentity && takeAllInDimension; + sliceDim0 = sliceDim0 && (i === 0 && denseSpec.strides[i] === 1 || takeAllInDimension); + } else { + isIdentity = isIdentity && (denseSpec.strides[i] === 1 && beginAndEndMasked); + sliceDim0 = sliceDim0 && (i === 0 && denseSpec.strides[i] === 1 || beginAndEndMasked); + } + let intervalLength; + let knownInterval = false; + if (denseSpec.beginValid && denseSpec.endValid) { + intervalLength = denseSpec.end[i] - denseSpec.begin[i]; + knownInterval = true; + } else if (shrinkI) { + intervalLength = 1; + knownInterval = true; + } else if (beginAndEndMasked) { + if (dimI >= 0) { + if (denseSpec.strides[i] < 0) { + intervalLength = -dimI; + } else { + intervalLength = dimI; + } + knownInterval = true; + } + } + if (knownInterval) { + let sizeI; + if (intervalLength === 0 || intervalLength < 0 !== denseSpec.strides[i] < 0) { + sizeI = 0; + } else { + sizeI = Math.trunc(intervalLength / denseSpec.strides[i]) + (intervalLength % denseSpec.strides[i] !== 0 ? 1 : 0); + } + processingShape.push(sizeI); + } else { + processingShape.push(-1); + } + } + for (let denseDim = 0; denseDim < denseSpec.finalShapeGatherIndices.length; ++denseDim) { + const gatherIndex = denseSpec.finalShapeGatherIndices[denseDim]; + if (gatherIndex >= 0) { + finalShape.push(processingShape[gatherIndex]); + } else if (gatherIndex === NEW_AXIS) { + finalShape.push(1); + } + } + const finalShapeSparse = finalShape.filter((dim, i) => denseSpec.finalShapeGatherIndices[i] !== NEW_AXIS); + return { + finalShapeSparse, + finalShape, + isIdentity, + sliceDim0, + isSimpleSlice, + begin: denseSpec.begin, + end: denseSpec.end, + strides: denseSpec.strides + }; + } + function buildDenseSpec(sparse, dense) { + dense.beginMask = 0; + dense.endMask = 0; + dense.shrinkAxisMask = 0; + let fullIndex = 0; + dense.beginValid = sparse.begin != null; + dense.endValid = sparse.end != null; + dense.begin = new Array(dense.dims); + dense.end = new Array(dense.dims); + dense.strides = new Array(dense.dims); + dense.finalShapeGatherIndices = []; + dense.finalShapeGatherIndicesSparse = []; + dense.inputShapeGatherIndicesSparse = new Array(dense.dims); + for (let i = 0; i < sparse.dims; i++) { + if (1 << i & sparse.ellipsisMask) { + const nextIndex = Math.min(dense.dims - (sparse.dims - i) + 1 + sparse.numAddAxisAfterEllipsis, dense.dims); + for (; fullIndex < nextIndex; fullIndex++) { + dense.begin[fullIndex] = 0; + dense.end[fullIndex] = 0; + dense.strides[fullIndex] = 1; + dense.beginMask |= 1 << fullIndex; + dense.endMask |= 1 << fullIndex; + dense.finalShapeGatherIndices.push(fullIndex); + dense.finalShapeGatherIndicesSparse.push(-1); + dense.inputShapeGatherIndicesSparse[fullIndex] = i; + } + } else if (1 << i & sparse.newAxisMask) { + dense.finalShapeGatherIndices.push(NEW_AXIS); + dense.finalShapeGatherIndicesSparse.push(-1); + } else { + if (fullIndex === dense.begin.length) { + throw Error(`Index out of range using input dim ${fullIndex}; input has only ${dense.dims} dims, ${dense.begin.length}.`); + } + if (sparse.begin != null) { + dense.begin[fullIndex] = sparse.begin[i]; + } + if (sparse.end != null) { + dense.end[fullIndex] = sparse.end[i]; + } + dense.strides[fullIndex] = sparse.strides[i]; + if (sparse.beginMask & 1 << i) { + dense.beginMask |= 1 << fullIndex; + } + if (sparse.endMask & 1 << i) { + dense.endMask |= 1 << fullIndex; + } + if (sparse.shrinkAxisMask & 1 << i) { + dense.finalShapeGatherIndices.push(SHRINK_AXIS); + dense.finalShapeGatherIndicesSparse.push(-1); + dense.shrinkAxisMask |= 1 << fullIndex; + } else { + dense.finalShapeGatherIndices.push(fullIndex); + dense.finalShapeGatherIndicesSparse.push(i); + } + dense.inputShapeGatherIndicesSparse[fullIndex] = i; + fullIndex++; + } + } + } + function canonical(x, c, strideI, dimI, masks, validRange) { + if (masks[c]) { + return strideI > 0 ? validRange[c] : validRange[c + 1 & 1]; + } else { + const xFwd = x < 0 ? dimI + x : x; + return xFwd < validRange[0] ? validRange[0] : xFwd > validRange[1] ? validRange[1] : xFwd; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/serialization.js + var serialization_exports = {}; + __export(serialization_exports, { + Serializable: () => Serializable, + SerializationMap: () => SerializationMap, + registerClass: () => registerClass + }); + init_define_BUILD_VERSION(); + var Serializable = class { + getClassName() { + return this.constructor.className; + } + static fromConfig(cls, config) { + return new cls(config); + } + }; + var SerializationMap = class { + constructor() { + this.classNameMap = {}; + } + static getMap() { + if (SerializationMap.instance == null) { + SerializationMap.instance = new SerializationMap(); + } + return SerializationMap.instance; + } + static register(cls) { + SerializationMap.getMap().classNameMap[cls.className] = [cls, cls.fromConfig]; + } + }; + function registerClass(cls) { + assert(cls.className != null, () => `Class being registered does not have the static className property defined.`); + assert(typeof cls.className === "string", () => `className is required to be a string, but got type ` + typeof cls.className); + assert(cls.className.length > 0, () => `Class being registered has an empty-string as its className, which is disallowed.`); + SerializationMap.register(cls); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adadelta_optimizer.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/add.js + init_define_BUILD_VERSION(); + function add_(a, b) { + let $a = convertToTensor(a, "a", "add"); + let $b = convertToTensor(b, "b", "add"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Add, inputs); + } + var add2 = op({ add_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/div.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/floorDiv.js + init_define_BUILD_VERSION(); + function floorDiv_(a, b) { + let $a = convertToTensor(a, "a", "floorDiv"); + let $b = convertToTensor(b, "b", "floorDiv"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(FloorDiv, inputs); + } + var floorDiv = op({ floorDiv_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/div.js + function div_(a, b) { + let $a = convertToTensor(a, "a", "div"); + let $b = convertToTensor(b, "b", "div"); + [$a, $b] = makeTypesMatch($a, $b); + if ($a.dtype === "int32" && $b.dtype === "int32") { + return floorDiv($a, $b); + } + const inputs = { a: $a, b: $b }; + const attrs = {}; + return ENGINE.runKernel(RealDiv, inputs, attrs); + } + var div = op({ div_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/mul.js + init_define_BUILD_VERSION(); + function mul_(a, b) { + let $a = convertToTensor(a, "a", "mul"); + let $b = convertToTensor(b, "b", "mul"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Multiply, inputs); + } + var mul = op({ mul_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ops.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/abs.js + init_define_BUILD_VERSION(); + function abs_(x) { + const $x = convertToTensor(x, "x", "abs"); + if ($x.dtype === "complex64") { + const inputs = { x: $x }; + return ENGINE.runKernel(ComplexAbs, inputs); + } else { + const inputs = { x: $x }; + return ENGINE.runKernel(Abs, inputs); + } + } + var abs = op({ abs_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/acos.js + init_define_BUILD_VERSION(); + function acos_(x) { + const $x = convertToTensor(x, "x", "acos"); + const inputs = { x: $x }; + return ENGINE.runKernel(Acos, inputs); + } + var acos = op({ acos_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/acosh.js + init_define_BUILD_VERSION(); + function acosh_(x) { + const $x = convertToTensor(x, "x", "acosh"); + const inputs = { x: $x }; + return ENGINE.runKernel(Acosh, inputs); + } + var acosh = op({ acosh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/all.js + init_define_BUILD_VERSION(); + function all_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "all", "bool"); + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(All, inputs, attrs); + } + var all = op({ all_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/any.js + init_define_BUILD_VERSION(); + function any_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "any", "bool"); + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(Any, inputs, attrs); + } + var any = op({ any_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/arg_max.js + init_define_BUILD_VERSION(); + function argMax_(x, axis = 0) { + const $x = convertToTensor(x, "x", "argMax"); + const inputs = { x: $x }; + const attrs = { axis }; + return ENGINE.runKernel(ArgMax, inputs, attrs); + } + var argMax = op({ argMax_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/arg_min.js + init_define_BUILD_VERSION(); + function argMin_(x, axis = 0) { + const $x = convertToTensor(x, "x", "argMin"); + const inputs = { x: $x }; + const attrs = { axis }; + return ENGINE.runKernel(ArgMin, inputs, attrs); + } + var argMin = op({ argMin_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/asin.js + init_define_BUILD_VERSION(); + function asin_(x) { + const $x = convertToTensor(x, "x", "asin"); + const inputs = { x: $x }; + return ENGINE.runKernel(Asin, inputs); + } + var asin = op({ asin_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/asinh.js + init_define_BUILD_VERSION(); + function asinh_(x) { + const $x = convertToTensor(x, "x", "asinh"); + const inputs = { x: $x }; + return ENGINE.runKernel(Asinh, inputs); + } + var asinh = op({ asinh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/atan.js + init_define_BUILD_VERSION(); + function atan_(x) { + const $x = convertToTensor(x, "x", "atan"); + const inputs = { x: $x }; + return ENGINE.runKernel(Atan, inputs); + } + var atan = op({ atan_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/atan2.js + init_define_BUILD_VERSION(); + function atan2_(a, b) { + let $a = convertToTensor(a, "a", "atan2"); + let $b = convertToTensor(b, "b", "atan2"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Atan2, inputs); + } + var atan2 = op({ atan2_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/atanh.js + init_define_BUILD_VERSION(); + function atanh_(x) { + const $x = convertToTensor(x, "x", "atanh"); + const inputs = { x: $x }; + return ENGINE.runKernel(Atanh, inputs); + } + var atanh = op({ atanh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv_util.js + init_define_BUILD_VERSION(); + function computeDilation2DInfo(inputShape, filterShape, strides, pad3, dataFormat = "NHWC", dilations) { + const inputChannels = inputShape[3]; + const $filterShape = [...filterShape, inputChannels]; + const $dataFormat = convertConv2DDataFormat(dataFormat); + return computeConv2DInfo(inputShape, $filterShape, strides, dilations, pad3, null, null, $dataFormat); + } + function computePool2DInfo(inShape, filterSize, strides, dilations, pad3, roundingMode, dataFormat = "channelsLast") { + const [filterHeight, filterWidth] = parseTupleParam(filterSize); + let filterShape; + if (dataFormat === "channelsLast") { + filterShape = [filterHeight, filterWidth, inShape[3], inShape[3]]; + } else if (dataFormat === "channelsFirst") { + filterShape = [filterHeight, filterWidth, inShape[1], inShape[1]]; + } else { + throw new Error(`Unknown dataFormat ${dataFormat}`); + } + return computeConv2DInfo(inShape, filterShape, strides, dilations, pad3, roundingMode, false, dataFormat); + } + function computePool3DInfo(inShape, filterSize, strides, dilations, pad3, roundingMode, dataFormat = "NDHWC") { + const [filterDepth, filterHeight, filterWidth] = parse3TupleParam(filterSize); + let filterShape; + let $dataFormat; + if (dataFormat === "NDHWC") { + $dataFormat = "channelsLast"; + filterShape = [filterDepth, filterHeight, filterWidth, inShape[4], inShape[4]]; + } else if (dataFormat === "NCDHW") { + $dataFormat = "channelsFirst"; + filterShape = [filterDepth, filterHeight, filterWidth, inShape[1], inShape[1]]; + } else { + throw new Error(`Unknown dataFormat ${dataFormat}`); + } + return computeConv3DInfo(inShape, filterShape, strides, dilations, pad3, false, $dataFormat, roundingMode); + } + function computeConv2DInfo(inShape, filterShape, strides, dilations, pad3, roundingMode, depthwise = false, dataFormat = "channelsLast") { + let [batchSize, inHeight, inWidth, inChannels] = [-1, -1, -1, -1]; + if (dataFormat === "channelsLast") { + [batchSize, inHeight, inWidth, inChannels] = inShape; + } else if (dataFormat === "channelsFirst") { + [batchSize, inChannels, inHeight, inWidth] = inShape; + } else { + throw new Error(`Unknown dataFormat ${dataFormat}`); + } + const [filterHeight, filterWidth, , filterChannels] = filterShape; + const [strideHeight, strideWidth] = parseTupleParam(strides); + const [dilationHeight, dilationWidth] = parseTupleParam(dilations); + const effectiveFilterHeight = getEffectiveFilterSize(filterHeight, dilationHeight); + const effectiveFilterWidth = getEffectiveFilterSize(filterWidth, dilationWidth); + const { padInfo, outHeight, outWidth } = getPadAndOutInfo(pad3, inHeight, inWidth, strideHeight, strideWidth, effectiveFilterHeight, effectiveFilterWidth, roundingMode, dataFormat); + const outChannels = depthwise ? filterChannels * inChannels : filterChannels; + let outShape; + if (dataFormat === "channelsFirst") { + outShape = [batchSize, outChannels, outHeight, outWidth]; + } else if (dataFormat === "channelsLast") { + outShape = [batchSize, outHeight, outWidth, outChannels]; + } + return { + batchSize, + dataFormat, + inHeight, + inWidth, + inChannels, + outHeight, + outWidth, + outChannels, + padInfo, + strideHeight, + strideWidth, + filterHeight, + filterWidth, + effectiveFilterHeight, + effectiveFilterWidth, + dilationHeight, + dilationWidth, + inShape, + outShape, + filterShape + }; + } + function computeConv3DInfo(inShape, filterShape, strides, dilations, pad3, depthwise = false, dataFormat = "channelsLast", roundingMode) { + let [batchSize, inDepth, inHeight, inWidth, inChannels] = [-1, -1, -1, -1, -1]; + if (dataFormat === "channelsLast") { + [batchSize, inDepth, inHeight, inWidth, inChannels] = inShape; + } else if (dataFormat === "channelsFirst") { + [batchSize, inChannels, inDepth, inHeight, inWidth] = inShape; + } else { + throw new Error(`Unknown dataFormat ${dataFormat}`); + } + const [filterDepth, filterHeight, filterWidth, , filterChannels] = filterShape; + const [strideDepth, strideHeight, strideWidth] = parse3TupleParam(strides); + const [dilationDepth, dilationHeight, dilationWidth] = parse3TupleParam(dilations); + const effectiveFilterDepth = getEffectiveFilterSize(filterDepth, dilationDepth); + const effectiveFilterHeight = getEffectiveFilterSize(filterHeight, dilationHeight); + const effectiveFilterWidth = getEffectiveFilterSize(filterWidth, dilationWidth); + const { padInfo, outDepth, outHeight, outWidth } = get3DPadAndOutInfo(pad3, inDepth, inHeight, inWidth, strideDepth, strideHeight, strideWidth, effectiveFilterDepth, effectiveFilterHeight, effectiveFilterWidth, roundingMode); + const outChannels = depthwise ? filterChannels * inChannels : filterChannels; + let outShape; + if (dataFormat === "channelsFirst") { + outShape = [batchSize, outChannels, outDepth, outHeight, outWidth]; + } else if (dataFormat === "channelsLast") { + outShape = [batchSize, outDepth, outHeight, outWidth, outChannels]; + } + return { + batchSize, + dataFormat, + inDepth, + inHeight, + inWidth, + inChannels, + outDepth, + outHeight, + outWidth, + outChannels, + padInfo, + strideDepth, + strideHeight, + strideWidth, + filterDepth, + filterHeight, + filterWidth, + effectiveFilterDepth, + effectiveFilterHeight, + effectiveFilterWidth, + dilationDepth, + dilationHeight, + dilationWidth, + inShape, + outShape, + filterShape + }; + } + function computeOutputShape2D(inShape, fieldSize, stride, zeroPad, roundingMode) { + if (zeroPad == null) { + zeroPad = computeDefaultPad(inShape, fieldSize, stride); + } + const inputRows = inShape[0]; + const inputCols = inShape[1]; + const outputRows = round((inputRows - fieldSize + 2 * zeroPad) / stride + 1, roundingMode); + const outputCols = round((inputCols - fieldSize + 2 * zeroPad) / stride + 1, roundingMode); + return [outputRows, outputCols]; + } + function computeOutputShape4D(inShape, fieldSize, outChannels, stride, zeroPad, roundingMode) { + if (zeroPad == null) { + zeroPad = computeDefaultPad(inShape, fieldSize, stride); + } + const inputDepth = inShape[0]; + const inputRows = inShape[1]; + const inputCols = inShape[2]; + const outputDepths = round((inputDepth - fieldSize + 2 * zeroPad) / stride + 1, roundingMode); + const outputRows = round((inputRows - fieldSize + 2 * zeroPad) / stride + 1, roundingMode); + const outputCols = round((inputCols - fieldSize + 2 * zeroPad) / stride + 1, roundingMode); + return [outputDepths, outputRows, outputCols, outChannels]; + } + function computeDefaultPad(inputShape, fieldSize, stride, dilation = 1) { + const effectiveFieldSize = getEffectiveFilterSize(fieldSize, dilation); + return Math.floor((inputShape[0] * (stride - 1) - stride + effectiveFieldSize) / 2); + } + function parseTupleParam(param) { + if (typeof param === "number") { + return [param, param, param]; + } + if (param.length === 2) { + return [param[0], param[1], 1]; + } + return param; + } + function parse3TupleParam(param) { + return typeof param === "number" ? [param, param, param] : param; + } + function getEffectiveFilterSize(filterSize, dilation) { + if (dilation <= 1) { + return filterSize; + } + return filterSize + (filterSize - 1) * (dilation - 1); + } + function getPadAndOutInfo(pad3, inHeight, inWidth, strideHeight, strideWidth, filterHeight, filterWidth, roundingMode, dataFormat) { + let padInfo; + let outHeight; + let outWidth; + if (typeof pad3 === "number") { + const padType = pad3 === 0 ? "VALID" : "NUMBER"; + padInfo = { top: pad3, bottom: pad3, left: pad3, right: pad3, type: padType }; + const outShape = computeOutputShape2D([inHeight, inWidth], filterHeight, strideHeight, pad3, roundingMode); + outHeight = outShape[0]; + outWidth = outShape[1]; + } else if (pad3 === "same") { + outHeight = Math.ceil(inHeight / strideHeight); + outWidth = Math.ceil(inWidth / strideWidth); + const padAlongHeight = Math.max(0, (outHeight - 1) * strideHeight + filterHeight - inHeight); + const padAlongWidth = Math.max(0, (outWidth - 1) * strideWidth + filterWidth - inWidth); + const top = Math.floor(padAlongHeight / 2); + const bottom = padAlongHeight - top; + const left = Math.floor(padAlongWidth / 2); + const right = padAlongWidth - left; + padInfo = { top, bottom, left, right, type: "SAME" }; + } else if (pad3 === "valid") { + padInfo = { top: 0, bottom: 0, left: 0, right: 0, type: "VALID" }; + outHeight = Math.ceil((inHeight - filterHeight + 1) / strideHeight); + outWidth = Math.ceil((inWidth - filterWidth + 1) / strideWidth); + } else if (typeof pad3 === "object") { + const top = dataFormat === "channelsLast" ? pad3[1][0] : pad3[2][0]; + const bottom = dataFormat === "channelsLast" ? pad3[1][1] : pad3[2][1]; + const left = dataFormat === "channelsLast" ? pad3[2][0] : pad3[3][0]; + const right = dataFormat === "channelsLast" ? pad3[2][1] : pad3[3][1]; + const padType = top === 0 && bottom === 0 && left === 0 && right === 0 ? "VALID" : "EXPLICIT"; + padInfo = { top, bottom, left, right, type: padType }; + outHeight = round((inHeight - filterHeight + top + bottom) / strideHeight + 1, roundingMode); + outWidth = round((inWidth - filterWidth + left + right) / strideWidth + 1, roundingMode); + } else { + throw Error(`Unknown padding parameter: ${pad3}`); + } + return { padInfo, outHeight, outWidth }; + } + function get3DPadAndOutInfo(pad3, inDepth, inHeight, inWidth, strideDepth, strideHeight, strideWidth, filterDepth, filterHeight, filterWidth, roundingMode) { + let padInfo; + let outDepth; + let outHeight; + let outWidth; + if (typeof pad3 === "number") { + const padType = pad3 === 0 ? "VALID" : "NUMBER"; + padInfo = { + top: pad3, + bottom: pad3, + left: pad3, + right: pad3, + front: pad3, + back: pad3, + type: padType + }; + const outShape = computeOutputShape4D([inDepth, inHeight, inWidth, 1], filterDepth, 1, strideDepth, pad3, roundingMode); + outDepth = outShape[0]; + outHeight = outShape[1]; + outWidth = outShape[2]; + } else if (pad3 === "same") { + outDepth = Math.ceil(inDepth / strideDepth); + outHeight = Math.ceil(inHeight / strideHeight); + outWidth = Math.ceil(inWidth / strideWidth); + const padAlongDepth = (outDepth - 1) * strideDepth + filterDepth - inDepth; + const padAlongHeight = (outHeight - 1) * strideHeight + filterHeight - inHeight; + const padAlongWidth = (outWidth - 1) * strideWidth + filterWidth - inWidth; + const front = Math.floor(padAlongDepth / 2); + const back = padAlongDepth - front; + const top = Math.floor(padAlongHeight / 2); + const bottom = padAlongHeight - top; + const left = Math.floor(padAlongWidth / 2); + const right = padAlongWidth - left; + padInfo = { top, bottom, left, right, front, back, type: "SAME" }; + } else if (pad3 === "valid") { + padInfo = { + top: 0, + bottom: 0, + left: 0, + right: 0, + front: 0, + back: 0, + type: "VALID" + }; + outDepth = Math.ceil((inDepth - filterDepth + 1) / strideDepth); + outHeight = Math.ceil((inHeight - filterHeight + 1) / strideHeight); + outWidth = Math.ceil((inWidth - filterWidth + 1) / strideWidth); + } else { + throw Error(`Unknown padding parameter: ${pad3}`); + } + return { padInfo, outDepth, outHeight, outWidth }; + } + function round(value, roundingMode) { + if (!roundingMode) { + return Math.trunc(value); + } + switch (roundingMode) { + case "round": + return Math.round(value); + case "ceil": + return Math.ceil(value); + case "floor": + return Math.floor(value); + default: + throw new Error(`Unknown roundingMode ${roundingMode}`); + } + } + function tupleValuesAreOne(param) { + const [dimA, dimB, dimC] = parseTupleParam(param); + return dimA === 1 && dimB === 1 && dimC === 1; + } + function eitherStridesOrDilationsAreOne(strides, dilations) { + return tupleValuesAreOne(strides) || tupleValuesAreOne(dilations); + } + function convertConv2DDataFormat(dataFormat) { + if (dataFormat === "NHWC") { + return "channelsLast"; + } else if (dataFormat === "NCHW") { + return "channelsFirst"; + } else { + throw new Error(`Unknown dataFormat ${dataFormat}`); + } + } + function checkPadOnDimRoundingMode(opDesc, pad3, dimRoundingMode) { + if (dimRoundingMode != null) { + if (typeof pad3 === "string") { + throw Error(`Error in ${opDesc}: pad must be an integer when using dimRoundingMode ${dimRoundingMode} but got pad ${pad3}.`); + } else if (typeof pad3 === "number") { + assert(isInt(pad3), () => `Error in ${opDesc}: pad must be an integer when using dimRoundingMode ${dimRoundingMode} but got pad ${pad3}.`); + } else if (typeof pad3 === "object") { + pad3.forEach((p2) => { + p2.forEach((v) => { + assert(isInt(v), () => `Error in ${opDesc}: pad must be an integer when using dimRoundingMode ${dimRoundingMode} but got pad ${v}.`); + }); + }); + } else { + throw Error(`Error in ${opDesc}: Unknown padding parameter: ${pad3}`); + } + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/reshape.js + init_define_BUILD_VERSION(); + function reshape_(x, shape) { + const $x = convertToTensor(x, "x", "reshape", "string_or_numeric"); + const inputs = { x: $x }; + const attrs = { shape }; + return ENGINE.runKernel(Reshape, inputs, attrs); + } + var reshape = op({ reshape_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool.js + function avgPool_(x, filterSize, strides, pad3, dimRoundingMode) { + const $x = convertToTensor(x, "x", "avgPool", "float32"); + const dilations = 1; + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in avgPool: x must be rank 4 but got rank ${x4D.rank}.`); + checkPadOnDimRoundingMode("avgPool", pad3, dimRoundingMode); + const inputs = { x: x4D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode }; + let res = ENGINE.runKernel(AvgPool, inputs, attrs); + res = cast(res, $x.dtype); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var avgPool = op({ avgPool_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_3d.js + init_define_BUILD_VERSION(); + function avgPool3d_(x, filterSize, strides, pad3, dimRoundingMode, dataFormat = "NDHWC") { + const $x = convertToTensor(x, "x", "avgPool3d", "float32"); + let x5D = $x; + let reshapedTo5D = false; + if ($x.rank === 4) { + reshapedTo5D = true; + x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]); + } + assert(x5D.rank === 5, () => `Error in avgPool3d: x must be rank 5 but got rank ${x5D.rank}.`); + assert(dataFormat === "NDHWC", () => `Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${dataFormat}`); + checkPadOnDimRoundingMode("avgPool3d", pad3, dimRoundingMode); + const inputs = { x: x5D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode, dataFormat }; + let res = ENGINE.runKernel(AvgPool3D, inputs, attrs); + res = cast(res, x5D.dtype); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var avgPool3d = op({ avgPool3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat.js + init_define_BUILD_VERSION(); + function concat_(tensors, axis = 0) { + assert(tensors.length >= 1, () => "Pass at least one tensor to concat"); + const $tensors = convertToTensorArray(tensors, "tensors", "concat", "string_or_numeric"); + if ($tensors[0].dtype === "complex64") { + $tensors.forEach((tensor2) => { + if (tensor2.dtype !== "complex64") { + throw new Error(`Cannot concatenate complex64 tensors with a tensor + with dtype ${tensor2.dtype}. `); + } + }); + } + if ($tensors.length === 1) { + return clone($tensors[0]); + } + const inputs = $tensors; + const attr = { axis }; + return ENGINE.runKernel(Concat, inputs, attr); + } + var concat = op({ concat_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sigmoid.js + init_define_BUILD_VERSION(); + function sigmoid_(x) { + const $x = convertToTensor(x, "x", "sigmoid", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Sigmoid, inputs); + } + var sigmoid = op({ sigmoid_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice.js + init_define_BUILD_VERSION(); + function slice_(x, begin, size) { + const $x = convertToTensor(x, "x", "slice", "string_or_numeric"); + if ($x.rank === 0) { + throw new Error("Slicing scalar is not possible"); + } + const inputs = { x: $x }; + const attrs = { begin, size }; + return ENGINE.runKernel(Slice, inputs, attrs); + } + var slice = op({ slice_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tanh.js + init_define_BUILD_VERSION(); + function tanh_(x) { + const $x = convertToTensor(x, "x", "tanh", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Tanh, inputs); + } + var tanh2 = op({ tanh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batch_to_space_nd.js + init_define_BUILD_VERSION(); + function batchToSpaceND_(x, blockShape, crops) { + const $x = convertToTensor(x, "x", "batchToSpaceND"); + const prod5 = blockShape.reduce((a, b) => a * b); + assert($x.rank >= 1 + blockShape.length, () => `input rank is ${$x.rank} but should be > than blockShape.length ${blockShape.length}`); + assert(crops.length === blockShape.length, () => `crops.length is ${crops.length} but should be equal to blockShape.length ${blockShape.length}`); + assert($x.shape[0] % prod5 === 0, () => `input tensor batch is ${$x.shape[0]} but is not divisible by the product of the elements of blockShape ${blockShape.join(" * ")} === ${prod5}`); + const inputs = { x: $x }; + const attrs = { blockShape, crops }; + return ENGINE.runKernel(BatchToSpaceND, inputs, attrs); + } + var batchToSpaceND = op({ batchToSpaceND_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm_util.js + init_define_BUILD_VERSION(); + function xAs4D(x) { + let x4D; + if (x.rank === 0 || x.rank === 1) { + x4D = reshape(x, [1, 1, 1, x.size]); + } else if (x.rank === 2) { + x4D = reshape(x, [1, 1, x.shape[0], x.shape[1]]); + } else if (x.rank === 3) { + x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]); + } else { + x4D = x; + } + return x4D; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm.js + function batchNorm_(x, mean4, variance, offset, scale2, varianceEpsilon) { + if (varianceEpsilon == null) { + varianceEpsilon = 1e-3; + } + const $x = convertToTensor(x, "x", "batchNorm"); + const $mean = convertToTensor(mean4, "mean", "batchNorm"); + const $variance = convertToTensor(variance, "variance", "batchNorm"); + let $scale; + if (scale2 != null) { + $scale = convertToTensor(scale2, "scale", "batchNorm"); + } + let $offset; + if (offset != null) { + $offset = convertToTensor(offset, "offset", "batchNorm"); + } + assert($mean.rank === $variance.rank, () => "Batch normalization gradient requires mean and variance to have equal ranks."); + assert($offset == null || $mean.rank === $offset.rank, () => "Batch normalization gradient requires mean and offset to have equal ranks."); + assert($scale == null || $mean.rank === $scale.rank, () => "Batch normalization gradient requires mean and scale to have equal ranks."); + const x4D = xAs4D($x); + const inputs = { + x: x4D, + scale: $scale, + offset: $offset, + mean: $mean, + variance: $variance + }; + const attrs = { varianceEpsilon }; + const res = ENGINE.runKernel(FusedBatchNorm, inputs, attrs); + return reshape(res, $x.shape); + } + var batchNorm = op({ batchNorm_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm2d.js + init_define_BUILD_VERSION(); + function batchNorm2d_(x, mean4, variance, offset, scale2, varianceEpsilon) { + const $x = convertToTensor(x, "x", "batchNorm"); + const $mean = convertToTensor(mean4, "mean", "batchNorm"); + const $variance = convertToTensor(variance, "variance", "batchNorm"); + let $scale; + if (scale2 != null) { + $scale = convertToTensor(scale2, "scale", "batchNorm"); + } + let $offset; + if (offset != null) { + $offset = convertToTensor(offset, "offset", "batchNorm"); + } + assert($x.rank === 2, () => `Error in batchNorm2D: x must be rank 2 but got rank ${$x.rank}.`); + assert($mean.rank === 2 || $mean.rank === 1, () => `Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${$mean.rank}.`); + assert($variance.rank === 2 || $variance.rank === 1, () => `Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${$variance.rank}.`); + if ($scale != null) { + assert($scale.rank === 2 || $scale.rank === 1, () => `Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${$scale.rank}.`); + } + if ($offset != null) { + assert($offset.rank === 2 || $offset.rank === 1, () => `Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${$offset.rank}.`); + } + return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon); + } + var batchNorm2d = op({ batchNorm2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm3d.js + init_define_BUILD_VERSION(); + function batchNorm3d_(x, mean4, variance, offset, scale2, varianceEpsilon) { + const $x = convertToTensor(x, "x", "batchNorm"); + const $mean = convertToTensor(mean4, "mean", "batchNorm"); + const $variance = convertToTensor(variance, "variance", "batchNorm"); + let $scale; + if (scale2 != null) { + $scale = convertToTensor(scale2, "scale", "batchNorm"); + } + let $offset; + if (offset != null) { + $offset = convertToTensor(offset, "offset", "batchNorm"); + } + assert($x.rank === 3, () => `Error in batchNorm3D: x must be rank 3 but got rank ${$x.rank}.`); + assert($mean.rank === 3 || $mean.rank === 1, () => `Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${$mean.rank}.`); + assert($variance.rank === 3 || $variance.rank === 1, () => `Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${$variance.rank}.`); + if ($scale != null) { + assert($scale.rank === 3 || $scale.rank === 1, () => `Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${$scale.rank}.`); + } + if ($offset != null) { + assert($offset.rank === 3 || $offset.rank === 1, () => `Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${$offset.rank}.`); + } + return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon); + } + var batchNorm3d = op({ batchNorm3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm4d.js + init_define_BUILD_VERSION(); + function batchNorm4d_(x, mean4, variance, offset, scale2, varianceEpsilon) { + const $x = convertToTensor(x, "x", "batchNorm"); + const $mean = convertToTensor(mean4, "mean", "batchNorm"); + const $variance = convertToTensor(variance, "variance", "batchNorm"); + let $scale; + if (scale2 != null) { + $scale = convertToTensor(scale2, "scale", "batchNorm"); + } + let $offset; + if (offset != null) { + $offset = convertToTensor(offset, "offset", "batchNorm"); + } + assert($x.rank === 4, () => `Error in batchNorm4D: x must be rank 4 but got rank ${$x.rank}.`); + assert($mean.rank === 4 || $mean.rank === 1, () => `Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${$mean.rank}.`); + assert($variance.rank === 4 || $variance.rank === 1, () => `Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${$variance.rank}.`); + if ($scale != null) { + assert($scale.rank === 4 || $scale.rank === 1, () => `Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${$scale.rank}.`); + } + if ($offset != null) { + assert($offset.rank === 4 || $offset.rank === 1, () => `Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${$offset.rank}.`); + } + return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon); + } + var batchNorm4d = op({ batchNorm4d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/bincount.js + init_define_BUILD_VERSION(); + function bincount_(x, weights, size) { + const $x = convertToTensor(x, "x", "bincount"); + const $weights = convertToTensor(weights, "weights", "bincount"); + assert($x.dtype === "int32", () => `Error in bincount: input dtype must be int32, but got ${$x.dtype}`); + assert(size >= 0, () => `size must be non-negative, but got ${size}.`); + assert($weights.size === $x.size || $weights.size === 0, () => `Error in bincount: weights must have the same size as input or0-length, but got input shape: ${$x.shape}, weights shape: ${$weights.shape}.`); + const inputs = { x: $x, weights: $weights }; + const attrs = { size }; + return ENGINE.runKernel(Bincount, inputs, attrs); + } + var bincount = op({ bincount_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_to.js + init_define_BUILD_VERSION(); + function broadcastTo_(x, shape) { + let input2 = convertToTensor(x, "broadcastTo", "x"); + const xShape = input2.shape; + if (shape.some((d) => !(d > 0) || d % 1 !== 0)) { + throw new Error(`broadcastTo(): Invalid broadcast shape [${shape}].`); + } + if (shape.length < input2.rank) { + throw new Error(`broadcastTo(): shape.length=${shape.length} < input.rank=${input2.rank}.`); + } + if (shape.length > input2.rank) { + const newShape = input2.shape.slice(); + while (newShape.length < shape.length) { + newShape.unshift(1); + } + input2 = reshape(input2, newShape); + } + const inputShape = input2.shape; + const reps = Array.from(shape); + for (let i = shape.length - 1; i >= 0; i--) { + if (inputShape[i] === shape[i]) { + reps[i] = 1; + } else if (input2.shape[i] !== 1) { + throw new Error(`broadcastTo(): [${xShape}] cannot be broadcast to [${shape}].`); + } + } + const axes = reps.map((n, i) => n > 1 ? i : -1).filter((i) => i >= 0); + if (axes.length === 0) { + return clone(input2); + } + const inputs = { x: input2 }; + const attrs = { reps }; + return ENGINE.runKernel(Tile, inputs, attrs); + } + var broadcastTo = op({ broadcastTo_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ceil.js + init_define_BUILD_VERSION(); + function ceil_(x) { + const $x = convertToTensor(x, "x", "ceil", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Ceil, inputs); + } + var ceil = op({ ceil_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/clip_by_value.js + init_define_BUILD_VERSION(); + function clipByValue_(x, clipValueMin, clipValueMax) { + const $x = convertToTensor(x, "x", "clipByValue"); + assert(clipValueMin <= clipValueMax, () => `Error in clip: min (${clipValueMin}) must be less than or equal to max (${clipValueMax}).`); + const inputs = { x: $x }; + const attrs = { clipValueMin, clipValueMax }; + return ENGINE.runKernel(ClipByValue, inputs, attrs); + } + var clipByValue = op({ clipByValue_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_1d.js + init_define_BUILD_VERSION(); + function concat1d_(tensors) { + return concat(tensors, 0); + } + var concat1d = op({ concat1d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_2d.js + init_define_BUILD_VERSION(); + function concat2d_(tensors, axis) { + return concat(tensors, axis); + } + var concat2d = op({ concat2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_3d.js + init_define_BUILD_VERSION(); + function concat3d_(tensors, axis) { + return concat(tensors, axis); + } + var concat3d = op({ concat3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_4d.js + init_define_BUILD_VERSION(); + function concat4d_(tensors, axis) { + return concat(tensors, axis); + } + var concat4d = op({ concat4d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv1d.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d.js + init_define_BUILD_VERSION(); + function conv2d_(x, filter, strides, pad3, dataFormat = "NHWC", dilations = [1, 1], dimRoundingMode) { + const $x = convertToTensor(x, "x", "conv2d", "float32"); + const $filter = convertToTensor(filter, "filter", "conv2d", "float32"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in conv2d: input must be rank 4, but got rank ${x4D.rank}.`); + assert($filter.rank === 4, () => `Error in conv2d: filter must be rank 4, but got rank ${$filter.rank}.`); + checkPadOnDimRoundingMode("conv2d", pad3, dimRoundingMode); + const inDepth = dataFormat === "NHWC" ? x4D.shape[3] : x4D.shape[1]; + assert(inDepth === $filter.shape[2], () => `Error in conv2d: depth of input (${inDepth}) must match input depth for filter ${$filter.shape[2]}.`); + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const inputs = { x: x4D, filter: $filter }; + const attrs = { strides, pad: pad3, dataFormat, dilations, dimRoundingMode }; + const res = ENGINE.runKernel(Conv2D, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var conv2d = op({ conv2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv1d.js + function conv1d_(x, filter, stride, pad3, dataFormat = "NWC", dilation = 1, dimRoundingMode) { + const $x = convertToTensor(x, "x", "conv1d"); + const $filter = convertToTensor(filter, "filter", "conv1d"); + let x3D = $x; + let reshapedTo3D = false; + if ($x.rank === 2) { + reshapedTo3D = true; + x3D = reshape($x, [1, $x.shape[0], $x.shape[1]]); + } + assert(x3D.rank === 3, () => `Error in conv1d: input must be rank 3, but got rank ${x3D.rank}.`); + assert($filter.rank === 3, () => `Error in conv1d: filter must be rank 3, but got rank ${$filter.rank}.`); + checkPadOnDimRoundingMode("conv1d", pad3, dimRoundingMode); + assert(x3D.shape[2] === $filter.shape[1], () => `Error in conv1d: depth of input (${x3D.shape[2]}) must match input depth for filter ${$filter.shape[1]}.`); + assert(eitherStridesOrDilationsAreOne(stride, dilation), () => `Error in conv1D: Either stride or dilation must be 1. Got stride ${stride} and dilation '${dilation}'`); + assert(dataFormat === "NWC", () => `Error in conv1d: got dataFormat of ${dataFormat} but only NWC is currently supported.`); + const filter4D = reshape($filter, [1, $filter.shape[0], $filter.shape[1], $filter.shape[2]]); + const input4D = reshape(x3D, [x3D.shape[0], 1, x3D.shape[1], x3D.shape[2]]); + const strides = [1, stride]; + const dilations = [1, dilation]; + const conv2dDataFormat = "NHWC"; + const res = conv2d(input4D, filter4D, strides, pad3, conv2dDataFormat, dilations, dimRoundingMode); + if (reshapedTo3D) { + return reshape(res, [res.shape[2], res.shape[3]]); + } + return reshape(res, [res.shape[0], res.shape[2], res.shape[3]]); + } + var conv1d = op({ conv1d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_transpose.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_backprop_input.js + init_define_BUILD_VERSION(); + function conv2DBackpropInput_(xShape, dy, filter, strides, pad3, dataFormat = "NHWC", dimRoundingMode) { + assert(xShape.length === dy.rank, () => `Length of inShape (${xShape.length}) and rank of dy (${dy.rank}) must match`); + let xShape4D = xShape; + let dy4D = dy; + let reshapedTo4D = false; + if (dy.rank === 3) { + reshapedTo4D = true; + dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]); + xShape4D = [1, xShape[0], xShape[1], xShape[2]]; + } + assert(xShape4D.length === 4, () => `Error in conv2dDerInput: inShape must be length 4, but got length ${xShape4D.length}.`); + assert(dy4D.rank === 4, () => `Error in conv2dDerInput: dy must be rank 4, but got rank ${dy4D.rank}`); + assert(filter.rank === 4, () => `Error in conv2dDerInput: filter must be rank 4, but got rank ${filter.rank}`); + const inDepth = dataFormat === "NHWC" ? xShape4D[3] : xShape4D[1]; + const outDepth = dataFormat === "NHWC" ? dy4D.shape[3] : dy4D.shape[1]; + assert(inDepth === filter.shape[2], () => `Error in conv2dDerInput: depth of input (${inDepth}) must match input depth for filter ${filter.shape[2]}.`); + assert(outDepth === filter.shape[3], () => `Error in conv2dDerInput: depth of output (${outDepth}) must match output depth for filter ${filter.shape[3]}.`); + checkPadOnDimRoundingMode("conv2dDerInput", pad3, dimRoundingMode); + const inputs = { dy: dy4D, filter }; + const attrs = { strides, pad: pad3, dataFormat, dimRoundingMode, inputShape: xShape4D }; + const res = ENGINE.runKernel(Conv2DBackpropInput, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var conv2DBackpropInput = op({ conv2DBackpropInput_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_transpose.js + function conv2dTranspose_(x, filter, outputShape, strides, pad3, dimRoundingMode) { + const $x = convertToTensor(x, "x", "conv2dTranspose"); + const $filter = convertToTensor(filter, "filter", "conv2dTranspose"); + return conv2DBackpropInput(outputShape, $x, $filter, strides, pad3, "NHWC", dimRoundingMode); + } + var conv2dTranspose = op({ conv2dTranspose_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d.js + init_define_BUILD_VERSION(); + function conv3d_(x, filter, strides, pad3, dataFormat = "NDHWC", dilations = [1, 1, 1]) { + const $x = convertToTensor(x, "x", "conv3d"); + const $filter = convertToTensor(filter, "filter", "conv3d"); + let x5D = $x; + let reshapedTo5D = false; + if ($x.rank === 4) { + reshapedTo5D = true; + x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]); + } + assert(x5D.rank === 5, () => `Error in conv3d: input must be rank 5, but got rank ${x5D.rank}.`); + assert($filter.rank === 5, () => `Error in conv3d: filter must be rank 5, but got rank ${$filter.rank}.`); + assert(x5D.shape[4] === $filter.shape[3], () => `Error in conv3d: depth of input (${x5D.shape[4]}) must match input depth for filter ${$filter.shape[3]}.`); + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in conv3D: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + assert(dataFormat === "NDHWC", () => `Error in conv3d: got dataFormat of ${dataFormat} but only NDHWC is currently supported.`); + const inputs = { x: x5D, filter: $filter }; + const attrs = { strides, pad: pad3, dataFormat, dilations }; + const res = ENGINE.runKernel(Conv3D, inputs, attrs); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var conv3d = op({ conv3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_transpose.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_backprop_input.js + init_define_BUILD_VERSION(); + function conv3DBackpropInput_(xShape, dy, filter, strides, pad3) { + assert(xShape.length === dy.rank, () => `Length of inShape (${xShape.length}) and rank of dy (${dy.rank}) must match`); + let xShape5D = xShape; + let dy5D = dy; + let reshapedTo5D = false; + if (dy.rank === 4) { + reshapedTo5D = true; + dy5D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2], dy.shape[3]]); + xShape5D = [1, xShape[0], xShape[1], xShape[2], xShape[3]]; + } + const inDepth = xShape5D[4]; + const outDepth = dy5D.shape[4]; + assert(xShape5D.length === 5, () => `Error in conv3dDerInput: inShape must be length 5, but got length ${xShape5D.length}.`); + assert(dy5D.rank === 5, () => `Error in conv3dDerInput: dy must be rank 5, but got rank ${dy5D.rank}`); + assert(filter.rank === 5, () => `Error in conv3dDerInput: filter must be rank 5, but got rank ${filter.rank}`); + assert(inDepth === filter.shape[3], () => `Error in conv3dDerInput: depth of input (${inDepth}) must match input depth for filter ${filter.shape[3]}.`); + assert(outDepth === filter.shape[4], () => `Error in conv3dDerInput: depth of output (${outDepth}) must match output depth for filter ${filter.shape[4]}.`); + const inputs = { dy: dy5D, filter }; + const attrs = { pad: pad3, strides, inputShape: xShape5D }; + const res = ENGINE.runKernel(Conv3DBackpropInputV2, inputs, attrs); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var conv3DBackpropInput = op({ conv3DBackpropInput_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_transpose.js + function conv3dTranspose_(x, filter, outputShape, strides, pad3) { + const $x = convertToTensor(x, "x", "conv3dTranspose"); + const $filter = convertToTensor(filter, "filter", "conv3dTranspose"); + return conv3DBackpropInput(outputShape, $x, $filter, strides, pad3); + } + var conv3dTranspose = op({ conv3dTranspose_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/cos.js + init_define_BUILD_VERSION(); + function cos_(x) { + const $x = convertToTensor(x, "x", "cos", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Cos, inputs); + } + var cos = op({ cos_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/cosh.js + init_define_BUILD_VERSION(); + function cosh_(x) { + const $x = convertToTensor(x, "x", "cosh", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Cosh, inputs); + } + var cosh = op({ cosh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/cumprod.js + init_define_BUILD_VERSION(); + function cumprod_(x, axis = 0, exclusive = false, reverse5 = false) { + const $x = convertToTensor(x, "x", "cumprod"); + const inputs = { x: $x }; + const attrs = { axis, exclusive, reverse: reverse5 }; + return ENGINE.runKernel(Cumprod, inputs, attrs); + } + var cumprod = op({ cumprod_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/cumsum.js + init_define_BUILD_VERSION(); + function cumsum_(x, axis = 0, exclusive = false, reverse5 = false) { + const $x = convertToTensor(x, "x", "cumsum"); + const inputs = { x: $x }; + const attrs = { axis, exclusive, reverse: reverse5 }; + return ENGINE.runKernel(Cumsum, inputs, attrs); + } + var cumsum = op({ cumsum_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/depth_to_space.js + init_define_BUILD_VERSION(); + function depthToSpace_(x, blockSize, dataFormat = "NHWC") { + const $x = convertToTensor(x, "x", "depthToSpace", "float32"); + const inputHeight = dataFormat === "NHWC" ? $x.shape[1] : $x.shape[2]; + const inputWidth = dataFormat === "NHWC" ? $x.shape[2] : $x.shape[3]; + const inputDepth = dataFormat === "NHWC" ? $x.shape[3] : $x.shape[1]; + assert(blockSize > 1, () => `blockSize should be > 1 for depthToSpace, but was: ${blockSize}`); + assert(inputHeight * blockSize >= 0, () => `Negative dimension size caused by overflow when multiplying + ${inputHeight} and ${blockSize} for depthToSpace with input shape + ${$x.shape}`); + assert(inputWidth * blockSize >= 0, () => `Negative dimension size caused by overflow when multiplying + ${inputWidth} and ${blockSize} for depthToSpace with input shape + ${$x.shape}`); + assert(inputDepth % (blockSize * blockSize) === 0, () => `Dimension size must be evenly divisible by ${blockSize * blockSize} but is ${inputDepth} for depthToSpace with input shape ${$x.shape}`); + const inputs = { x: $x }; + const attrs = { blockSize, dataFormat }; + return ENGINE.runKernel(DepthToSpace, inputs, attrs); + } + var depthToSpace = op({ depthToSpace_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d.js + init_define_BUILD_VERSION(); + function depthwiseConv2d_(x, filter, strides, pad3, dataFormat = "NHWC", dilations = [1, 1], dimRoundingMode) { + const $x = convertToTensor(x, "x", "depthwiseConv2d", "float32"); + const $filter = convertToTensor(filter, "filter", "depthwiseConv2d", "float32"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in depthwiseConv2d: input must be rank 4, but got rank ${x4D.rank}.`); + assert($filter.rank === 4, () => `Error in depthwiseConv2d: filter must be rank 4, but got rank ${$filter.rank}.`); + const inChannels = dataFormat === "NHWC" ? x4D.shape[3] : x4D.shape[1]; + assert(inChannels === $filter.shape[2], () => `Error in depthwiseConv2d: number of input channels (${inChannels}) must match the inChannels dimension in filter ${$filter.shape[2]}.`); + checkPadOnDimRoundingMode("depthwiseConv2d", pad3, dimRoundingMode); + const inputs = { x: x4D, filter: $filter }; + const attrs = { strides, pad: pad3, dataFormat, dilations, dimRoundingMode }; + const res = ENGINE.runKernel(DepthwiseConv2dNative, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var depthwiseConv2d = op({ depthwiseConv2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/dilation2d.js + init_define_BUILD_VERSION(); + function dilation2d_(x, filter, strides, pad3, dilations = [1, 1], dataFormat = "NHWC") { + const $x = convertToTensor(x, "x", "dilation2d"); + const $filter = convertToTensor(filter, "filter", "dilation2d"); + assert($x.rank === 3 || $x.rank === 4, () => `Error in dilation2d: input must be rank 3 or 4, but got rank ${$x.rank}.`); + assert($filter.rank === 3, () => `Error in dilation2d: filter must be rank 3, but got rank ${$filter.rank}.`); + assert(dataFormat === "NHWC", () => `Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${dataFormat}`); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + reshapedTo4D = true; + } + const inputs = { x: x4D, filter: $filter }; + const attrs = { strides, pad: pad3, dilations }; + const res = ENGINE.runKernel(Dilation2D, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var dilation2d = op({ dilation2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/div_no_nan.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/equal.js + init_define_BUILD_VERSION(); + function equal_(a, b) { + let $a = convertToTensor(a, "a", "equal", "string_or_numeric"); + let $b = convertToTensor(b, "b", "equal", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Equal, inputs); + } + var equal = op({ equal_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/where.js + init_define_BUILD_VERSION(); + function where_(condition, a, b) { + const $a = convertToTensor(a, "a", "where"); + const $b = convertToTensor(b, "b", "where"); + const $condition = convertToTensor(condition, "condition", "where", "bool"); + const broadcastShape = assertAndGetBroadcastShape(assertAndGetBroadcastShape($condition.shape, $a.shape), $b.shape); + const $broadcastedCondition = broadcastTo($condition, broadcastShape); + const $broadcastedA = broadcastTo($a, broadcastShape); + const $broadcastedB = broadcastTo($b, broadcastShape); + const inputs = { + condition: $broadcastedCondition, + t: $broadcastedA, + e: $broadcastedB + }; + return ENGINE.runKernel(Select, inputs); + } + var where = op({ where_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/zeros_like.js + init_define_BUILD_VERSION(); + function zerosLike_(x) { + const $x = convertToTensor(x, "x", "zerosLike"); + const inputs = { x: $x }; + return ENGINE.runKernel(ZerosLike, inputs); + } + var zerosLike = op({ zerosLike_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/div_no_nan.js + function divNoNan_(a, b) { + let $a = convertToTensor(a, "a", "div"); + let $b = convertToTensor(b, "b", "div"); + [$a, $b] = makeTypesMatch($a, $b); + const divResult = div($a, $b); + const zeros3 = zerosLike(divResult); + const bEqualsZero = equal($b, zeros3); + return where(bEqualsZero, zeros3, divResult); + } + var divNoNan = op({ divNoNan_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/dot.js + init_define_BUILD_VERSION(); + function dot_(t1, t2) { + const $t1 = convertToTensor(t1, "t1", "dot"); + const $t2 = convertToTensor(t2, "t2", "dot"); + assert(($t1.rank === 1 || $t1.rank === 2) && ($t2.rank === 1 || $t2.rank === 2), () => `Error in dot: inputs must all be rank 1 or 2, but got ranks ${$t1.rank} and ${$t2.rank}.`); + const t1Inner = $t1.rank === 1 ? $t1.size : $t1.shape[1]; + const t2Inner = $t2.rank === 1 ? $t2.size : $t2.shape[0]; + assert(t1Inner === t2Inner, () => `Error in dot: inner dimensions of inputs must match, but got ${t1Inner} and ${t2Inner}.`); + if ($t1.rank === 1 && $t2.rank === 1) { + const t12D = reshape($t1, [1, -1]); + const t22D = reshape($t2, [-1, 1]); + const t1t2 = matMul(t12D, t22D); + return reshape(t1t2, []); + } else if ($t1.rank === 1 && $t2.rank === 2) { + const t12D = reshape($t1, [1, -1]); + const t22D = reshape($t2, [$t2.shape[0], $t2.shape[1]]); + const t1t2 = matMul(t12D, t22D); + return reshape(t1t2, [t1t2.size]); + } else if ($t1.rank === 2 && $t2.rank === 1) { + const t22D = reshape($t2, [-1, 1]); + const t1t2 = matMul($t1, t22D); + return reshape(t1t2, [t1t2.size]); + } else { + const t22D = reshape($t2, [$t2.shape[0], $t2.shape[1]]); + const t1t2 = matMul($t1, t22D); + return t1t2; + } + } + var dot = op({ dot_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/elu.js + init_define_BUILD_VERSION(); + function elu_(x) { + const $x = convertToTensor(x, "x", "elu", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Elu, inputs); + } + var elu = op({ elu_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/erf.js + init_define_BUILD_VERSION(); + function erf_(x) { + let $x = convertToTensor(x, "x", "erf"); + assert($x.dtype === "int32" || $x.dtype === "float32", () => "Input dtype must be `int32` or `float32`."); + if ($x.dtype === "int32") { + $x = cast($x, "float32"); + } + const inputs = { x: $x }; + return ENGINE.runKernel(Erf, inputs); + } + var erf = op({ erf_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/euclidean_norm.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/norm.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/axis_util.js + init_define_BUILD_VERSION(); + function axesAreInnerMostDims(axes, rank) { + for (let i = 0; i < axes.length; ++i) { + if (axes[axes.length - i - 1] !== rank - 1 - i) { + return false; + } + } + return true; + } + function combineLocations(outputLoc, reduceLoc, axes) { + const rank = outputLoc.length + reduceLoc.length; + const loc = []; + let outIdx = 0; + let reduceIdx = 0; + for (let dim = 0; dim < rank; dim++) { + if (axes.indexOf(dim) === -1) { + loc.push(outputLoc[outIdx++]); + } else { + loc.push(reduceLoc[reduceIdx++]); + } + } + return loc; + } + function computeOutAndReduceShapes(aShape, axes) { + const outShape = []; + const rank = aShape.length; + for (let dim = 0; dim < rank; dim++) { + if (axes.indexOf(dim) === -1) { + outShape.push(aShape[dim]); + } + } + const reduceShape = axes.map((dim) => aShape[dim]); + return [outShape, reduceShape]; + } + function expandShapeToKeepDim(shape, axes) { + const reduceSubShape = axes.map((x) => 1); + return combineLocations(shape, reduceSubShape, axes); + } + function assertAxesAreInnerMostDims(msg, axes, rank) { + assert(axesAreInnerMostDims(axes, rank), () => `${msg} supports only inner-most axes for now. Got axes ${axes} and rank-${rank} input.`); + } + function getAxesPermutation(axes, rank) { + if (axesAreInnerMostDims(axes, rank)) { + return null; + } + const result = []; + for (let i = 0; i < rank; ++i) { + if (axes.indexOf(i) === -1) { + result.push(i); + } + } + axes.forEach((axis) => result.push(axis)); + return result; + } + function getUndoAxesPermutation(axes) { + return axes.map((axis, i) => [i, axis]).sort((a, b) => a[1] - b[1]).map((x) => x[0]); + } + function getInnerMostAxes(numAxes, rank) { + const res = []; + for (let i = rank - numAxes; i < rank; ++i) { + res.push(i); + } + return res; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/max.js + init_define_BUILD_VERSION(); + function max_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "max"); + const inputs = { x: $x }; + const attrs = { reductionIndices: axis, keepDims }; + return ENGINE.runKernel(Max, inputs, attrs); + } + var max = op({ max_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/min.js + init_define_BUILD_VERSION(); + function min_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "min"); + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(Min, inputs, attrs); + } + var min = op({ min_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/pow.js + init_define_BUILD_VERSION(); + function pow_(base, exp4) { + let $base = convertToTensor(base, "base", "pow"); + let $exp = convertToTensor(exp4, "exp", "pow"); + [$base, $exp] = makeTypesMatch($base, $exp); + const inputs = { a: $base, b: $exp }; + return ENGINE.runKernel(Pow, inputs); + } + var pow = op({ pow_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/scalar.js + init_define_BUILD_VERSION(); + function scalar(value, dtype) { + if ((isTypedArray(value) && dtype !== "string" || Array.isArray(value)) && dtype !== "complex64") { + throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)"); + } + if (dtype === "string" && isTypedArray(value) && !(value instanceof Uint8Array)) { + throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`."); + } + const shape = []; + const inferredShape = []; + return makeTensor(value, shape, inferredShape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sqrt.js + init_define_BUILD_VERSION(); + function sqrt_(x) { + const $x = convertToTensor(x, "x", "sqrt", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Sqrt, inputs); + } + var sqrt = op({ sqrt_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/square.js + init_define_BUILD_VERSION(); + function square_(x) { + const $x = convertToTensor(x, "x", "square"); + const attrs = {}; + return ENGINE.runKernel("Square", { x: $x }, attrs); + } + var square = op({ square_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sum.js + init_define_BUILD_VERSION(); + function sum_(x, axis = null, keepDims = false) { + let $x = convertToTensor(x, "x", "sum"); + if ($x.dtype === "bool") { + $x = cast($x, "int32"); + } + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(Sum, inputs, attrs); + } + var sum2 = op({ sum_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/norm.js + function norm_(x, ord = "euclidean", axis = null, keepDims = false) { + x = convertToTensor(x, "x", "norm"); + const norm2 = normImpl(x, ord, axis); + let keepDimsShape = norm2.shape; + if (keepDims) { + const axes = parseAxisParam(axis, x.shape); + keepDimsShape = expandShapeToKeepDim(norm2.shape, axes); + } + return reshape(norm2, keepDimsShape); + } + function normImpl(x, p2, axis = null) { + if (x.rank === 0) { + return abs(x); + } + if (x.rank !== 1 && axis === null) { + return normImpl(reshape(x, [-1]), p2, axis); + } + if (x.rank === 1 || typeof axis === "number" || Array.isArray(axis) && axis.length === 1) { + if (p2 === 1) { + return sum2(abs(x), axis); + } + if (p2 === Infinity) { + return max(abs(x), axis); + } + if (p2 === -Infinity) { + return min(abs(x), axis); + } + if (p2 === "euclidean" || p2 === 2) { + return sqrt(sum2(pow(abs(x), scalar(2, "int32")), axis)); + } + throw new Error(`Error in norm: invalid ord value: ${p2}`); + } + if (Array.isArray(axis) && axis.length === 2) { + if (p2 === 1) { + return max(sum2(abs(x), axis[0]), axis[1] - 1); + } + if (p2 === Infinity) { + return max(sum2(abs(x), axis[1]), axis[0]); + } + if (p2 === -Infinity) { + return min(sum2(abs(x), axis[1]), axis[0]); + } + if (p2 === "fro" || p2 === "euclidean") { + return sqrt(sum2(square(x), axis)); + } + throw new Error(`Error in norm: invalid ord value: ${p2}`); + } + throw new Error(`Error in norm: invalid axis: ${axis}`); + } + var norm = op({ norm_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/euclidean_norm.js + function euclideanNorm_(x, axis = null, keepDims = false) { + return norm(x, "euclidean", axis, keepDims); + } + var euclideanNorm = op({ euclideanNorm_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/exp.js + init_define_BUILD_VERSION(); + function exp_(x) { + const $x = convertToTensor(x, "x", "exp"); + const inputs = { x: $x }; + return ENGINE.runKernel(Exp, inputs); + } + var exp = op({ exp_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/expand_dims.js + init_define_BUILD_VERSION(); + function expandDims_(x, axis = 0) { + const $x = convertToTensor(x, "x", "expandDims", "string_or_numeric"); + assert(axis <= $x.rank, () => "Axis must be <= rank of the tensor"); + const inputs = { input: $x }; + const attrs = { dim: axis }; + return ENGINE.runKernel(ExpandDims, inputs, attrs); + } + var expandDims = op({ expandDims_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/expm1.js + init_define_BUILD_VERSION(); + function expm1_(x) { + const $x = convertToTensor(x, "x", "expm1"); + const inputs = { x: $x }; + return ENGINE.runKernel(Expm1, inputs); + } + var expm1 = op({ expm1_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/eye.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tile.js + init_define_BUILD_VERSION(); + function tile_(x, reps) { + const $x = convertToTensor(x, "x", "tile", "string_or_numeric"); + assert($x.rank === reps.length, () => `Error in transpose: rank of input ${$x.rank} must match length of reps ${reps}.`); + const inputs = { x: $x }; + const attrs = { reps }; + return ENGINE.runKernel(Tile, inputs, attrs); + } + var tile = op({ tile_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/eye.js + function eye_(numRows, numColumns, batchShape, dtype = "float32") { + if (numColumns == null) { + numColumns = numRows; + } + const buff = buffer([numRows, numColumns], dtype); + const n = numRows <= numColumns ? numRows : numColumns; + for (let i = 0; i < n; ++i) { + buff.set(1, i, i); + } + const out = reshape(buff.toTensor(), [numRows, numColumns]); + if (batchShape == null) { + return out; + } else { + if (batchShape.length === 1) { + return tile(expandDims(out, 0), [batchShape[0], 1, 1]); + } else if (batchShape.length === 2) { + return tile(expandDims(expandDims(out, 0), 0), [batchShape[0], batchShape[1], 1, 1]); + } else if (batchShape.length === 3) { + return tile(expandDims(expandDims(expandDims(out, 0), 0), 0), [ + batchShape[0], + batchShape[1], + batchShape[2], + 1, + 1 + ]); + } else { + throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${batchShape.length}D.`); + } + } + } + var eye = op({ eye_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fill.js + init_define_BUILD_VERSION(); + function fill(shape, value, dtype) { + const attrs = { shape, value, dtype }; + return ENGINE.runKernel(Fill, {}, attrs); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/floor.js + init_define_BUILD_VERSION(); + function floor_(x) { + const $x = convertToTensor(x, "x", "floor", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Floor, inputs); + } + var floor = op({ floor_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/gather.js + init_define_BUILD_VERSION(); + function gather_(x, indices, axis = 0, batchDims = 0) { + const $x = convertToTensor(x, "x", "gather"); + const $indices = convertToTensor(indices, "indices", "gather", "int32"); + const inputs = { x: $x, indices: $indices }; + const attrs = { axis, batchDims }; + return ENGINE.runKernel(GatherV2, inputs, attrs); + } + var gather = op({ gather_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/greater.js + init_define_BUILD_VERSION(); + function greater_(a, b) { + let $a = convertToTensor(a, "a", "greater", "string_or_numeric"); + let $b = convertToTensor(b, "b", "greater", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Greater, inputs); + } + var greater = op({ greater_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/greater_equal.js + init_define_BUILD_VERSION(); + function greaterEqual_(a, b) { + let $a = convertToTensor(a, "a", "greaterEqual", "string_or_numeric"); + let $b = convertToTensor(b, "b", "greaterEqual", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(GreaterEqual, inputs); + } + var greaterEqual = op({ greaterEqual_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/is_finite.js + init_define_BUILD_VERSION(); + function isFinite_(x) { + const $x = convertToTensor(x, "x", "isFinite"); + const inputs = { x: $x }; + return ENGINE.runKernel(IsFinite, inputs); + } + var isFinite2 = op({ isFinite_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/is_inf.js + init_define_BUILD_VERSION(); + function isInf_(x) { + const $x = convertToTensor(x, "x", "isInf"); + const inputs = { x: $x }; + return ENGINE.runKernel(IsInf, inputs); + } + var isInf = op({ isInf_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/is_nan.js + init_define_BUILD_VERSION(); + function isNaN_(x) { + const $x = convertToTensor(x, "x", "isNaN"); + const inputs = { x: $x }; + return ENGINE.runKernel(IsNan, inputs); + } + var isNaN2 = op({ isNaN_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/leaky_relu.js + init_define_BUILD_VERSION(); + function leakyRelu_(x, alpha = 0.2) { + const $x = convertToTensor(x, "x", "leakyRelu"); + const inputs = { x: $x }; + const attrs = { alpha }; + return ENGINE.runKernel(LeakyRelu, inputs, attrs); + } + var leakyRelu = op({ leakyRelu_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/less.js + init_define_BUILD_VERSION(); + function less_(a, b) { + let $a = convertToTensor(a, "a", "less", "string_or_numeric"); + let $b = convertToTensor(b, "b", "less", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Less, inputs); + } + var less = op({ less_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/less_equal.js + init_define_BUILD_VERSION(); + function lessEqual_(a, b) { + let $a = convertToTensor(a, "a", "lessEqual", "string_or_numeric"); + let $b = convertToTensor(b, "b", "lessEqual", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(LessEqual, inputs); + } + var lessEqual = op({ lessEqual_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/local_response_normalization.js + init_define_BUILD_VERSION(); + function localResponseNormalization_(x, depthRadius = 5, bias = 1, alpha = 1, beta = 0.5) { + const $x = convertToTensor(x, "x", "localResponseNormalization"); + assert($x.rank === 4 || $x.rank === 3, () => `Error in localResponseNormalization: x must be rank 3 or 4 but got + rank ${$x.rank}.`); + assert(isInt(depthRadius), () => `Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${depthRadius}.`); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + const inputs = { x: x4D }; + const attrs = { depthRadius, bias, alpha, beta }; + const res = ENGINE.runKernel(LRN, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } else { + return res; + } + } + var localResponseNormalization = op({ localResponseNormalization_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log.js + init_define_BUILD_VERSION(); + function log_(x) { + const $x = convertToTensor(x, "x", "log", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Log, inputs); + } + var log2 = op({ log_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log1p.js + init_define_BUILD_VERSION(); + function log1p_(x) { + const $x = convertToTensor(x, "x", "log1p"); + const inputs = { x: $x }; + return ENGINE.runKernel(Log1p, inputs); + } + var log1p = op({ log1p_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_sigmoid.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients.js + init_define_BUILD_VERSION(); + function variableGrads(f, varList) { + assert(isFunction(f), () => "The f passed in variableGrads(f) must be a function"); + assert(varList == null || Array.isArray(varList) && varList.every((v) => v instanceof Variable), () => "The varList passed in variableGrads(f, varList) must be an array of variables"); + const specifiedVarList = varList != null; + if (!specifiedVarList) { + varList = []; + for (const varName in ENGINE.registeredVariables) { + varList.push(ENGINE.registeredVariables[varName]); + } + } + const specifiedNonTrainable = specifiedVarList ? varList.filter((variable2) => !variable2.trainable) : null; + const originalVarCount = varList.length; + varList = varList.filter((variable2) => variable2.trainable); + assert(varList.length > 0, () => `variableGrads() expects at least one of the input variables to be trainable, but none of the ${originalVarCount} variables is trainable.`); + const allowNoGradients = true; + const { value, grads } = ENGINE.gradients(f, varList, null, allowNoGradients); + assert(grads.some((g) => g != null), () => "Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."); + assert(value.rank === 0, () => `The f passed in variableGrads(f) must return a scalar, but it returned a rank-${value.rank} tensor`); + const namedGrads = {}; + varList.forEach((v, i) => { + if (grads[i] != null) { + namedGrads[v.name] = grads[i]; + } + }); + if (specifiedNonTrainable != null) { + specifiedNonTrainable.forEach((v) => namedGrads[v.name] = null); + } + return { value, grads: namedGrads }; + } + function customGrad(f) { + return ENGINE.customGrad(f); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/softplus.js + init_define_BUILD_VERSION(); + function softplus_(x) { + const $x = convertToTensor(x, "x", "softplus"); + const inputs = { x: $x }; + return ENGINE.runKernel(Softplus, inputs); + } + var softplus = op({ softplus_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_sigmoid.js + function logSigmoid_(x) { + const $x = convertToTensor(x, "x", "logSigmoid"); + const customOp = customGrad((x2) => { + const value = neg(softplus(neg(x2))); + const gradFunc = (dy) => { + const derX = mul(dy, sigmoid(neg(x2))); + return derX; + }; + return { value, gradFunc }; + }); + return customOp($x); + } + var logSigmoid = op({ logSigmoid_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_softmax.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sub.js + init_define_BUILD_VERSION(); + function sub_(a, b) { + let $a = convertToTensor(a, "a", "sub"); + let $b = convertToTensor(b, "b", "sub"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Sub, inputs); + } + var sub = op({ sub_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_softmax.js + function logSoftmax_(logits, axis = -1) { + const $logits = convertToTensor(logits, "logits", "logSoftmax"); + if (axis === -1) { + axis = $logits.rank - 1; + } + if (axis !== $logits.rank - 1) { + throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${$logits.rank} and axis was ${axis}`); + } + const customOp = customGrad((logits2, save) => { + const keepDims = true; + const xMax = max(logits2, axis, true); + const shifted = sub(logits2, xMax); + const value = sub(cast(shifted, "float32"), log2(sum2(exp(shifted), axis, keepDims))); + save([value]); + const gradFunc = (dy, saved) => { + const [value2] = saved; + const keepDims2 = true; + const softmax5 = exp(value2); + return sub(dy, mul(sum2(dy, axis, keepDims2), softmax5)); + }; + return { value, gradFunc }; + }); + return customOp($logits); + } + var logSoftmax = op({ logSoftmax_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_sum_exp.js + init_define_BUILD_VERSION(); + function logSumExp_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "logSumExp"); + const axes = parseAxisParam(axis, $x.shape); + const xMax = max($x, axes, true); + const a = sub($x, xMax); + const b = exp(a); + const c = sum2(b, axes); + const d = log2(c); + const res = add2(reshape(xMax, d.shape), d); + if (keepDims) { + const newShape = expandShapeToKeepDim(res.shape, axes); + return reshape(res, newShape); + } + return res; + } + var logSumExp = op({ logSumExp_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_and.js + init_define_BUILD_VERSION(); + function logicalAnd_(a, b) { + const $a = convertToTensor(a, "a", "logicalAnd", "bool"); + const $b = convertToTensor(b, "b", "logicalAnd", "bool"); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(LogicalAnd, inputs); + } + var logicalAnd = op({ logicalAnd_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_not.js + init_define_BUILD_VERSION(); + function logicalNot_(x) { + const $x = convertToTensor(x, "x", "logicalNot", "bool"); + const inputs = { x: $x }; + return ENGINE.runKernel(LogicalNot, inputs); + } + var logicalNot = op({ logicalNot_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_or.js + init_define_BUILD_VERSION(); + function logicalOr_(a, b) { + const $a = convertToTensor(a, "a", "logicalOr", "bool"); + const $b = convertToTensor(b, "b", "logicalOr", "bool"); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(LogicalOr, inputs); + } + var logicalOr = op({ logicalOr_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_xor.js + init_define_BUILD_VERSION(); + function logicalXor_(a, b) { + const $a = convertToTensor(a, "a", "logicalXor", "bool"); + const $b = convertToTensor(b, "b", "logicalXor", "bool"); + assertAndGetBroadcastShape($a.shape, $b.shape); + return logicalAnd(logicalOr(a, b), logicalNot(logicalAnd(a, b))); + } + var logicalXor = op({ logicalXor_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/max_pool.js + init_define_BUILD_VERSION(); + function maxPool_(x, filterSize, strides, pad3, dimRoundingMode) { + const $x = convertToTensor(x, "x", "maxPool"); + const dilations = 1; + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in maxPool: input must be rank 4 but got rank ${x4D.rank}.`); + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + checkPadOnDimRoundingMode("maxPool", pad3, dimRoundingMode); + const inputs = { x: x4D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode }; + const res = ENGINE.runKernel(MaxPool, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var maxPool = op({ maxPool_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_3d.js + init_define_BUILD_VERSION(); + function maxPool3d_(x, filterSize = [1, 1, 1], strides, pad3, dimRoundingMode, dataFormat = "NDHWC") { + const $x = convertToTensor(x, "x", "maxPool3d"); + let x5D = $x; + let reshapedTo5D = false; + if ($x.rank === 4) { + reshapedTo5D = true; + x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]); + } + assert(x5D.rank === 5, () => `Error in maxPool3d: x must be rank 5 but got rank ${x5D.rank}.`); + assert(dataFormat === "NDHWC", () => `Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${dataFormat}`); + checkPadOnDimRoundingMode("maxPool3d", pad3, dimRoundingMode); + const inputs = { x: x5D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode, dataFormat }; + const res = ENGINE.runKernel(MaxPool3D, inputs, attrs); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var maxPool3d = op({ maxPool3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/maximum.js + init_define_BUILD_VERSION(); + function maximum_(a, b) { + let $a = convertToTensor(a, "a", "maximum"); + let $b = convertToTensor(b, "b", "maximum"); + [$a, $b] = makeTypesMatch($a, $b); + if ($a.dtype === "bool") { + $a = cast($a, "int32"); + $b = cast($b, "int32"); + } + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Maximum, inputs); + } + var maximum = op({ maximum_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/mean.js + init_define_BUILD_VERSION(); + function mean_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "mean"); + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(Mean, inputs, attrs); + } + var mean = op({ mean_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ones.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/zeros.js + init_define_BUILD_VERSION(); + function zeros(shape, dtype = "float32") { + if (dtype === "complex64") { + const real4 = zeros(shape, "float32"); + const imag4 = zeros(shape, "float32"); + return complex(real4, imag4); + } + const values = makeZerosTypedArray(sizeFromShape(shape), dtype); + return ENGINE.makeTensor(values, shape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ones.js + function ones2(shape, dtype = "float32") { + if (dtype === "complex64") { + const real4 = ones2(shape, "float32"); + const imag4 = zeros(shape, "float32"); + return complex(real4, imag4); + } + const values = makeOnesTypedArray(sizeFromShape(shape), dtype); + return ENGINE.makeTensor(values, shape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/minimum.js + init_define_BUILD_VERSION(); + function minimum_(a, b) { + let $a = convertToTensor(a, "a", "minimum"); + let $b = convertToTensor(b, "b", "minimum"); + [$a, $b] = makeTypesMatch($a, $b); + if ($a.dtype === "bool") { + $a = cast($a, "int32"); + $b = cast($b, "int32"); + } + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Minimum, inputs); + } + var minimum = op({ minimum_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/mirror_pad.js + init_define_BUILD_VERSION(); + function mirrorPad_(x, paddings, mode) { + assert(mode === "reflect" || mode === "symmetric", () => `Invalid mode. Mode must be either reflect or symmetric. Got ${mode}.`); + const $x = convertToTensor(x, "x", "mirrorPad"); + if ($x.rank === 0) { + throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad"); + } + assert(paddings.length === $x.rank, () => `Padding doesn't match input. Must be ${$x.rank}. Got ${paddings.length}.`); + const shapeOffset = mode === "reflect" ? 1 : 0; + for (let i = 0; i < $x.rank; i++) { + assert(paddings[i].length === 2, () => `Invalid number of paddings. Must be length of 2 each.`); + assert(paddings[i][0] >= 0 && paddings[i][0] <= $x.shape[i] - shapeOffset && paddings[i][1] >= 0 && paddings[i][1] <= $x.shape[i] - shapeOffset, () => `Padding in dimension ${i} cannot be greater than or equal to ${$x.shape[i] - shapeOffset} or less than 0 for input of shape ${$x.shape}`); + } + const attrs = { paddings, mode }; + const inputs = { x: $x }; + return ENGINE.runKernel(MirrorPad, inputs, attrs); + } + var mirrorPad = op({ mirrorPad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/mod.js + init_define_BUILD_VERSION(); + function mod_(a, b) { + let $a = convertToTensor(a, "a", "mod"); + let $b = convertToTensor(b, "b", "mod"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Mod, inputs); + } + var mod = op({ mod_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/moments.js + init_define_BUILD_VERSION(); + function moments_(x, axis = null, keepDims = false) { + x = convertToTensor(x, "x", "moments"); + const axes = parseAxisParam(axis, x.shape); + const xMean = mean(x, axes, keepDims); + let keepDimsShape = xMean.shape; + if (!keepDims) { + keepDimsShape = expandShapeToKeepDim(xMean.shape, axes); + } + const devSquared = square(sub(cast(x, "float32"), reshape(xMean, keepDimsShape))); + const variance = mean(devSquared, axes, keepDims); + return { mean: xMean, variance }; + } + var moments = op({ moments_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/not_equal.js + init_define_BUILD_VERSION(); + function notEqual_(a, b) { + let $a = convertToTensor(a, "a", "notEqual", "string_or_numeric"); + let $b = convertToTensor(b, "b", "notEqual", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(NotEqual, inputs); + } + var notEqual = op({ notEqual_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ones_like.js + init_define_BUILD_VERSION(); + function onesLike_(x) { + const $x = convertToTensor(x, "x", "onesLike"); + const inputs = { x: $x }; + return ENGINE.runKernel(OnesLike, inputs); + } + var onesLike = op({ onesLike_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/pad.js + init_define_BUILD_VERSION(); + function pad_(x, paddings, constantValue = 0) { + const $x = convertToTensor(x, "x", "pad"); + if ($x.rank === 0) { + throw new Error("pad(scalar) is not defined. Pass non-scalar to pad"); + } + const attrs = { paddings, constantValue }; + const inputs = { x: $x }; + return ENGINE.runKernel(PadV2, inputs, attrs); + } + var pad = op({ pad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/pool.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/space_to_batch_nd.js + init_define_BUILD_VERSION(); + function spaceToBatchND_(x, blockShape, paddings) { + const $x = convertToTensor(x, "x", "spaceToBatchND"); + assert($x.rank >= 1 + blockShape.length, () => `input rank ${$x.rank} should be > than [blockShape] ${blockShape.length}`); + assert(paddings.length === blockShape.length, () => `paddings.shape[0] ${paddings.length} must be equal to [blockShape] ${blockShape.length}`); + assert($x.shape.reduce((a, b, i) => { + if (i > 0 && i <= blockShape.length) { + return a && (b + paddings[i - 1][0] + paddings[i - 1][1]) % blockShape[i - 1] === 0; + } + return a; + }, true), () => `input spatial dimensions ${$x.shape.slice(1)} with paddings ${paddings.toString()} must be divisible by blockShapes ${blockShape.toString()}`); + const inputs = { x: $x }; + const attrs = { blockShape, paddings }; + return ENGINE.runKernel(SpaceToBatchND, inputs, attrs); + } + var spaceToBatchND = op({ spaceToBatchND_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/pool.js + function pool_(input2, windowShape, poolingType, pad3, dilations, strides, dimRoundingMode) { + if (dilations == null) { + dilations = [1, 1]; + } + if (strides == null) { + strides = 1; + } + if (pad3 === 0) { + pad3 = "valid"; + } + const $x = convertToTensor(input2, "x", "maxPool"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in pool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = computePool2DInfo(x4D.shape, windowShape, strides, dilations, pad3); + const dilation = [convInfo.dilationHeight, convInfo.dilationWidth]; + let basePadding; + if (pad3 === "same") { + basePadding = withSpaceToBatchBasePaddings([convInfo.filterHeight, convInfo.filterWidth], dilation); + } else { + basePadding = [[0, 0], [0, 0]]; + } + const isDilationOne = dilation[0] === 1 && dilation[1] === 1; + const [adjustedPadding, adjustedCrops] = requiredSpaceToBatchPaddings([convInfo.inHeight, convInfo.inWidth], dilation, basePadding); + const convertedPad = isDilationOne ? pad3 : "valid"; + const convertedX = isDilationOne ? x4D : spaceToBatchND(x4D, dilation, adjustedPadding); + const forwardOp = poolingType === "avg" ? () => avgPool(convertedX, windowShape, strides, convertedPad, dimRoundingMode) : () => maxPool(convertedX, windowShape, strides, convertedPad, dimRoundingMode); + const y = forwardOp(); + const res = isDilationOne ? y : batchToSpaceND(y, dilation, adjustedCrops); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + function requiredSpaceToBatchPaddings(inputShape, blockShape, basePadding) { + const padStart = basePadding.map((b) => b[0]); + const origPadEnd = basePadding.map((b) => b[1]); + const fullInputShape = inputShape.concat(padStart, origPadEnd); + const padEndExtra = blockShape.map((b, i) => (b - fullInputShape[i] % b) % b); + const padEnd = origPadEnd.map((s, i) => s + padEndExtra[i]); + const paddings = blockShape.map((_, i) => [padStart[i], padEnd[i]]); + const crops = blockShape.map((_, i) => [0, padEndExtra[i]]); + return [paddings, crops]; + } + function withSpaceToBatchBasePaddings(filterShape, dilation) { + const dilatedFilterShape = filterShape.map((s, i) => { + return s + (s - 1) * (dilation[i] - 1); + }); + const padExtraShape = dilatedFilterShape.map((s) => s - 1); + const padExtraStart = padExtraShape.map((s) => Math.floor(s / 2)); + const padExtraEnd = padExtraShape.map((s, i) => s - padExtraStart[i]); + return padExtraShape.map((_, i) => { + return [padExtraStart[i], padExtraEnd[i]]; + }); + } + var pool = op({ pool_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/prelu.js + init_define_BUILD_VERSION(); + function prelu_(x, alpha) { + const $x = convertToTensor(x, "x", "prelu"); + const $alpha = convertToTensor(alpha, "alpha", "prelu"); + const inputs = { x: $x, alpha: $alpha }; + return ENGINE.runKernel(Prelu, inputs); + } + var prelu = op({ prelu_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/prod.js + init_define_BUILD_VERSION(); + function prod_(x, axis = null, keepDims = false) { + let $x = convertToTensor(x, "x", "prod"); + if ($x.dtype === "bool") { + $x = cast($x, "int32"); + } + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(Prod, inputs, attrs); + } + var prod = op({ prod_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/rand_util.js + init_define_BUILD_VERSION(); + var seedrandom = __toESM(require_seedrandom2()); + var MPRandGauss = class { + constructor(mean4, stdDeviation, dtype, truncated, seed) { + this.mean = mean4; + this.stdDev = stdDeviation; + this.dtype = dtype; + this.nextVal = NaN; + this.truncated = truncated; + if (this.truncated) { + this.upper = this.mean + this.stdDev * 2; + this.lower = this.mean - this.stdDev * 2; + } + const seedValue = seed ? seed : Math.random(); + this.random = seedrandom.alea(seedValue.toString()); + } + nextValue() { + if (!isNaN(this.nextVal)) { + const value = this.nextVal; + this.nextVal = NaN; + return value; + } + let resultX, resultY; + let isValid = false; + while (!isValid) { + let v1, v2, s; + do { + v1 = 2 * this.random() - 1; + v2 = 2 * this.random() - 1; + s = v1 * v1 + v2 * v2; + } while (s >= 1 || s === 0); + const mul2 = Math.sqrt(-2 * Math.log(s) / s); + resultX = this.mean + this.stdDev * v1 * mul2; + resultY = this.mean + this.stdDev * v2 * mul2; + if (!this.truncated || this.isValidTruncated(resultX)) { + isValid = true; + } + } + if (!this.truncated || this.isValidTruncated(resultY)) { + this.nextVal = this.convertValue(resultY); + } + return this.convertValue(resultX); + } + convertValue(value) { + if (this.dtype == null || this.dtype === "float32") { + return value; + } + return Math.round(value); + } + isValidTruncated(value) { + return value <= this.upper && value >= this.lower; + } + }; + var UniformRandom = class { + constructor(min6 = 0, max6 = 1, dtype, seed) { + this.canReturnFloat = () => this.dtype == null || this.dtype === "float32"; + this.min = min6; + this.range = max6 - min6; + this.dtype = dtype; + if (seed == null) { + seed = Math.random(); + } + if (typeof seed === "number") { + seed = seed.toString(); + } + if (!this.canReturnFloat() && this.range <= 1) { + throw new Error(`The difference between ${min6} - ${max6} <= 1 and dtype is not float`); + } + this.random = seedrandom.alea(seed); + } + convertValue(value) { + if (this.canReturnFloat()) { + return value; + } + return Math.round(value); + } + nextValue() { + return this.convertValue(this.min + this.range * this.random()); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/random_normal.js + init_define_BUILD_VERSION(); + function randomNormal_(shape, mean4 = 0, stdDev = 1, dtype, seed) { + if (dtype != null && dtype === "bool") { + throw new Error(`Unsupported data type ${dtype}`); + } + const randGauss = new MPRandGauss(mean4, stdDev, dtype, false, seed); + const res = buffer(shape, dtype); + for (let i = 0; i < res.values.length; i++) { + res.values[i] = randGauss.nextValue(); + } + return res.toTensor(); + } + var randomNormal = op({ randomNormal_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/random_uniform.js + init_define_BUILD_VERSION(); + function randomUniform_(shape, minval = 0, maxval = 1, dtype = "float32", seed) { + const res = buffer(shape, dtype); + const random = new UniformRandom(minval, maxval, null, seed); + for (let i = 0; i < res.values.length; i++) { + res.values[i] = random.nextValue(); + } + return res.toTensor(); + } + var randomUniform = op({ randomUniform_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/range.js + init_define_BUILD_VERSION(); + function range(start, stop, step5 = 1, dtype = "float32") { + if (step5 === 0) { + throw new Error("Cannot have a step of zero"); + } + const attrs = { start, stop, step: step5, dtype }; + return ENGINE.runKernel(Range, {}, attrs); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/reciprocal.js + init_define_BUILD_VERSION(); + function reciprocal_(x) { + const $x = convertToTensor(x, "x", "reciprocal"); + const inputs = { x: $x }; + return ENGINE.runKernel(Reciprocal, inputs); + } + var reciprocal = op({ reciprocal_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/relu.js + init_define_BUILD_VERSION(); + function relu_(x) { + const $x = convertToTensor(x, "x", "relu"); + const inputs = { x: $x }; + return ENGINE.runKernel(Relu, inputs); + } + var relu = op({ relu_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/relu6.js + init_define_BUILD_VERSION(); + function relu6_(x) { + const $x = convertToTensor(x, "x", "relu6"); + const inputs = { x: $x }; + return ENGINE.runKernel(Relu6, inputs); + } + var relu6 = op({ relu6_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/reverse.js + init_define_BUILD_VERSION(); + function reverse_(x, axis) { + const $x = convertToTensor(x, "x", "reverse"); + const inputs = { x: $x }; + const attrs = { dims: axis }; + return ENGINE.runKernel(Reverse, inputs, attrs); + } + var reverse = op({ reverse_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/round.js + init_define_BUILD_VERSION(); + function round_(x) { + const $x = convertToTensor(x, "x", "round"); + const inputs = { x: $x }; + return ENGINE.runKernel(Round, inputs); + } + var round2 = op({ round_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/rsqrt.js + init_define_BUILD_VERSION(); + function rsqrt_(x) { + const $x = convertToTensor(x, "x", "rsqrt", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Rsqrt, inputs); + } + var rsqrt = op({ rsqrt_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/selu.js + init_define_BUILD_VERSION(); + function selu_(x) { + const $x = convertToTensor(x, "x", "selu"); + const inputs = { x: $x }; + return ENGINE.runKernel(Selu, inputs); + } + var selu = op({ selu_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/separable_conv2d.js + init_define_BUILD_VERSION(); + function separableConv2d_(x, depthwiseFilter, pointwiseFilter, strides, pad3, dilation = [1, 1], dataFormat = "NHWC") { + const $x = convertToTensor(x, "x", "separableConv2d"); + const $depthwiseFilter = convertToTensor(depthwiseFilter, "depthwiseFilter", "separableConv2d"); + const $pointwiseFilter = convertToTensor(pointwiseFilter, "pointwiseFilter", "separableConv2d"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + if (dataFormat === "NCHW") { + throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported"); + } + assert(x4D.rank === 4, () => `Error in separableConv2d: input must be rank 4, but got rank ${x4D.rank}.`); + assert($depthwiseFilter.rank === 4, () => `Error in separableConv2d: depthwise filter must be rank 4, but got rank ${$depthwiseFilter.rank}.`); + assert($pointwiseFilter.rank === 4, () => `Error in separableConv2d: pointwise filter must be rank 4, but got rank ${$depthwiseFilter.rank}.`); + assert($pointwiseFilter.shape[0] === 1, () => `Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${$pointwiseFilter.shape[0]}.`); + assert($pointwiseFilter.shape[1] === 1, () => `Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${$pointwiseFilter.shape[1]}.`); + const inChannels = $depthwiseFilter.shape[2]; + const channelMultiplier = $depthwiseFilter.shape[3]; + assert($pointwiseFilter.shape[2] === inChannels * channelMultiplier, () => `Error in separableConv2d: the third dimension of pointwise filter must be ${inChannels * channelMultiplier}, but got ${$pointwiseFilter.shape[2]}.`); + const depthwise = depthwiseConv2d(x4D, $depthwiseFilter, strides, pad3, dataFormat, dilation); + const pointwiseStride = 1; + const res = conv2d(depthwise, $pointwiseFilter, pointwiseStride, "valid", dataFormat); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var separableConv2d = op({ separableConv2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sign.js + init_define_BUILD_VERSION(); + function sign_(x) { + const $x = convertToTensor(x, "x", "sign"); + const inputs = { x: $x }; + return ENGINE.runKernel(Sign, inputs); + } + var sign = op({ sign_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sin.js + init_define_BUILD_VERSION(); + function sin_(x) { + const $x = convertToTensor(x, "x", "sin", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Sin, inputs); + } + var sin = op({ sin_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sinh.js + init_define_BUILD_VERSION(); + function sinh_(x) { + const $x = convertToTensor(x, "x", "sinh"); + const inputs = { x: $x }; + return ENGINE.runKernel(Sinh, inputs); + } + var sinh = op({ sinh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice1d.js + init_define_BUILD_VERSION(); + function slice1d_(x, begin, size) { + const $x = convertToTensor(x, "x", "slice1d"); + assert($x.rank === 1, () => `slice1d expects a rank-1 tensor, but got a rank-${$x.rank} tensor`); + return slice($x, [begin], [size]); + } + var slice1d = op({ slice1d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice2d.js + init_define_BUILD_VERSION(); + function slice2d_(x, begin, size) { + const $x = convertToTensor(x, "x", "slice2d"); + assert($x.rank === 2, () => `slice2d expects a rank-2 tensor, but got a rank-${$x.rank} tensor`); + return slice($x, begin, size); + } + var slice2d = op({ slice2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice3d.js + init_define_BUILD_VERSION(); + function slice3d_(x, begin, size) { + const $x = convertToTensor(x, "x", "slice3d"); + assert($x.rank === 3, () => `slice3d expects a rank-3 tensor, but got a rank-${$x.rank} tensor`); + return slice($x, begin, size); + } + var slice3d = op({ slice3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice4d.js + init_define_BUILD_VERSION(); + function slice4d_(x, begin, size) { + const $x = convertToTensor(x, "x", "slice4d"); + assert($x.rank === 4, () => `slice4d expects a rank-4 tensor, but got a rank-${$x.rank} tensor`); + return slice($x, begin, size); + } + var slice4d = op({ slice4d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/softmax.js + init_define_BUILD_VERSION(); + function softmax_(logits, dim = -1) { + const $logits = convertToTensor(logits, "logits", "softmax", "float32"); + if (dim === -1) { + dim = $logits.rank - 1; + } + if (dim !== $logits.rank - 1) { + throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${$logits.rank} and dim was ${dim}`); + } + const inputs = { logits: $logits }; + const attrs = { dim }; + return ENGINE.runKernel(Softmax, inputs, attrs); + } + var softmax = op({ softmax_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/fft.js + init_define_BUILD_VERSION(); + function fft_(input2) { + assert(input2.dtype === "complex64", () => `The dtype for tf.spectral.fft() must be complex64 but got ${input2.dtype}.`); + const inputs = { input: input2 }; + return ENGINE.runKernel(FFT, inputs); + } + var fft = op({ fft_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/ifft.js + init_define_BUILD_VERSION(); + function ifft_(input2) { + assert(input2.dtype === "complex64", () => `The dtype for tf.spectral.ifft() must be complex64 but got ${input2.dtype}.`); + const inputs = { input: input2 }; + return ENGINE.runKernel(IFFT, inputs); + } + var ifft = op({ ifft_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/irfft.js + init_define_BUILD_VERSION(); + function irfft_(input2) { + const innerDimensionSize = input2.shape[input2.shape.length - 1]; + const batch = input2.size / innerDimensionSize; + let ret; + if (innerDimensionSize <= 2) { + const complexInput = reshape(input2, [batch, innerDimensionSize]); + ret = ifft(complexInput); + } else { + const outputShape = [batch, 2 * (innerDimensionSize - 1)]; + const realInput = reshape(real(input2), [batch, innerDimensionSize]); + const imagInput = reshape(imag(input2), [batch, innerDimensionSize]); + const realConjugate = reverse(slice(realInput, [0, 1], [batch, innerDimensionSize - 2]), 1); + const imagConjugate = mul(reverse(slice(imagInput, [0, 1], [batch, innerDimensionSize - 2]), 1), scalar(-1)); + const r = concat([realInput, realConjugate], 1); + const i = concat([imagInput, imagConjugate], 1); + const complexInput = reshape(complex(r, i), [outputShape[0], outputShape[1]]); + ret = ifft(complexInput); + } + ret = real(ret); + if (input2.rank === 3 && input2.shape[0] !== 0) { + const temp = ret; + const batch2 = input2.shape[0]; + ret = reshape(ret, [batch2, ret.shape[0] / batch2, ret.shape[1]]); + temp.dispose(); + } + return ret; + } + var irfft = op({ irfft_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/rfft.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/split.js + init_define_BUILD_VERSION(); + function split_(x, numOrSizeSplits, axis = 0) { + const $x = convertToTensor(x, "x", "split"); + const inputs = { x: $x }; + const attr = { numOrSizeSplits, axis }; + return ENGINE.runKernel(SplitV, inputs, attr); + } + var split = op({ split_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/rfft.js + function rfft_(input2, fftLength) { + assert(input2.dtype === "float32", () => `The dtype for rfft() must be real value but got ${input2.dtype}`); + let innerDimensionSize = input2.shape[input2.shape.length - 1]; + const batch = input2.size / innerDimensionSize; + let adjustedInput; + if (fftLength != null && fftLength < innerDimensionSize) { + const begin = input2.shape.map((v) => 0); + const size = input2.shape.map((v) => v); + size[input2.shape.length - 1] = fftLength; + adjustedInput = slice(input2, begin, size); + innerDimensionSize = fftLength; + } else if (fftLength != null && fftLength > innerDimensionSize) { + const zerosShape = input2.shape.map((v) => v); + zerosShape[input2.shape.length - 1] = fftLength - innerDimensionSize; + adjustedInput = concat([input2, zeros(zerosShape)], input2.shape.length - 1); + innerDimensionSize = fftLength; + } else { + adjustedInput = input2; + } + const zerosInput = zerosLike(adjustedInput); + const complexInput = reshape(complex(adjustedInput, zerosInput), [batch, innerDimensionSize]); + const ret = fft(complexInput); + const half = Math.floor(innerDimensionSize / 2) + 1; + const realValues = real(ret); + const imagValues = imag(ret); + const realComplexConjugate = split(realValues, [half, innerDimensionSize - half], realValues.shape.length - 1); + const imagComplexConjugate = split(imagValues, [half, innerDimensionSize - half], imagValues.shape.length - 1); + const outputShape = adjustedInput.shape.slice(); + outputShape[adjustedInput.shape.length - 1] = half; + return reshape(complex(realComplexConjugate[0], imagComplexConjugate[0]), outputShape); + } + var rfft = op({ rfft_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/squared_difference.js + init_define_BUILD_VERSION(); + function squaredDifference_(a, b) { + let $a = convertToTensor(a, "a", "squaredDifference"); + let $b = convertToTensor(b, "b", "squaredDifference"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + const attrs = {}; + return ENGINE.runKernel(SquaredDifference, inputs, attrs); + } + var squaredDifference = op({ squaredDifference_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/squeeze.js + init_define_BUILD_VERSION(); + function squeeze_(x, axis) { + const $x = convertToTensor(x, "x", "squeeze", "string_or_numeric"); + return reshape($x, squeezeShape($x.shape, axis).newShape); + } + var squeeze = op({ squeeze_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/stack.js + init_define_BUILD_VERSION(); + function stack_(tensors, axis = 0) { + const $tensors = convertToTensorArray(tensors, "tensors", "stack", "string_or_numeric"); + assert($tensors.length >= 1, () => "Pass at least one tensor to tf.stack"); + if ($tensors.length > 0) { + assert(axis <= $tensors[0].rank, () => "Axis must be <= rank of the tensor"); + } + const inputs = $tensors; + const attrs = { axis }; + return ENGINE.runKernel(Pack, inputs, attrs); + } + var stack = op({ stack_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/step.js + init_define_BUILD_VERSION(); + function step_(x, alpha = 0) { + const $x = convertToTensor(x, "x", "step"); + const inputs = { x: $x }; + const attrs = { alpha }; + return ENGINE.runKernel(Step, inputs, attrs); + } + var step = op({ step_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/strided_slice.js + init_define_BUILD_VERSION(); + function stridedSlice_(x, begin, end, strides, beginMask = 0, endMask = 0, ellipsisMask = 0, newAxisMask = 0, shrinkAxisMask = 0) { + const $x = convertToTensor(x, "x", "stridedSlice", "string_or_numeric"); + const inputs = { x: $x }; + const attrs = { + begin, + end, + strides, + beginMask, + endMask, + ellipsisMask, + newAxisMask, + shrinkAxisMask + }; + return ENGINE.runKernel(StridedSlice, inputs, attrs); + } + var stridedSlice = op({ stridedSlice_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tan.js + init_define_BUILD_VERSION(); + function tan_(x) { + const $x = convertToTensor(x, "x", "tan", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Tan, inputs); + } + var tan = op({ tan_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor1d.js + init_define_BUILD_VERSION(); + function tensor1d(values, dtype) { + assertNonNull(values); + const inferredShape = inferShape(values, dtype); + if (inferredShape.length !== 1) { + throw new Error("tensor1d() requires values to be a flat/TypedArray"); + } + const shape = null; + return makeTensor(values, shape, inferredShape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor2d.js + init_define_BUILD_VERSION(); + function tensor2d(values, shape, dtype) { + assertNonNull(values); + if (shape != null && shape.length !== 2) { + throw new Error("tensor2d() requires shape to have two numbers"); + } + const inferredShape = inferShape(values, dtype); + if (inferredShape.length !== 2 && inferredShape.length !== 1) { + throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray"); + } + if (inferredShape.length === 1 && shape == null) { + throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray"); + } + return makeTensor(values, shape, inferredShape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/topk.js + init_define_BUILD_VERSION(); + function topk_(x, k = 1, sorted = true) { + const $x = convertToTensor(x, "x", "topk"); + if ($x.rank === 0) { + throw new Error("topk() expects the input to be of rank 1 or higher"); + } + const lastDim = $x.shape[$x.shape.length - 1]; + if (k < 0) { + throw new Error(`'k' passed to topk() must be >= 0 but got ${k}`); + } + if (k > lastDim) { + throw new Error(`'k' passed to topk() must be <= the last dimension (${lastDim}) but got ${k}`); + } + const inputs = { x: $x }; + const attrs = { k, sorted }; + const [values, indices] = ENGINE.runKernel(TopK, inputs, attrs); + return { values, indices }; + } + var topk = op({ topk_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/truncated_normal.js + init_define_BUILD_VERSION(); + function truncatedNormal_(shape, mean4 = 0, stdDev = 1, dtype, seed) { + if (dtype != null && dtype === "bool") { + throw new Error(`Unsupported data type $ { dtype }`); + } + const randGauss = new MPRandGauss(mean4, stdDev, dtype, true, seed); + const res = buffer(shape, dtype); + for (let i = 0; i < res.values.length; i++) { + res.values[i] = randGauss.nextValue(); + } + return res.toTensor(); + } + var truncatedNormal = op({ truncatedNormal_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/unique.js + init_define_BUILD_VERSION(); + function unique_(x, axis = 0) { + const $x = convertToTensor(x, "x", "unique", "string_or_numeric"); + assert($x.rank > 0, () => "The input tensor must be at least 1D"); + const inputs = { x: $x }; + const attrs = { axis }; + const [values, indices] = ENGINE.runKernel(Unique, inputs, attrs); + return { values, indices }; + } + var unique = op({ unique_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/unsorted_segment_sum.js + init_define_BUILD_VERSION(); + function unsortedSegmentSum_(x, segmentIds, numSegments) { + const $x = convertToTensor(x, "x", "unsortedSegmentSum"); + const $segmentIds = convertToTensor(segmentIds, "segmentIds", "unsortedSegmentSum", "int32"); + assert(isInt(numSegments), () => "numSegments must be of dtype int"); + const inputs = { x: $x, segmentIds: $segmentIds }; + const attrs = { numSegments }; + return ENGINE.runKernel(UnsortedSegmentSum, inputs, attrs); + } + var unsortedSegmentSum = op({ unsortedSegmentSum_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/unstack.js + init_define_BUILD_VERSION(); + function unstack_(x, axis = 0) { + const $x = convertToTensor(x, "x", "unstack", "string_or_numeric"); + assert(axis >= -$x.shape.length && axis < $x.shape.length, () => `Axis = ${axis} is not in [-${$x.shape.length}, ${$x.shape.length})`); + const inputs = { value: $x }; + const attrs = { axis }; + return ENGINE.runKernel(Unpack, inputs, attrs); + } + var unstack = op({ unstack_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/variable.js + init_define_BUILD_VERSION(); + function variable(initialValue, trainable = true, name, dtype) { + return ENGINE.makeVariable(initialValue, trainable, name, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/where_impl.js + init_define_BUILD_VERSION(); + function whereImpl(condShape, condVals) { + const indices = []; + for (let i = 0; i < condVals.length; i++) { + if (condVals[i]) { + indices.push(i); + } + } + const inBuffer = buffer(condShape, "int32"); + const out = buffer([indices.length, condShape.length], "int32"); + for (let i = 0; i < indices.length; i++) { + const loc = inBuffer.indexToLoc(indices[i]); + const offset = i * condShape.length; + out.values.set(loc, offset); + } + return out.toTensor(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/dropout.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/dropout_util.js + init_define_BUILD_VERSION(); + function getNoiseShape(x, noiseShape) { + if (noiseShape == null) { + return x.shape.slice(); + } + if (arraysEqual(x.shape, noiseShape)) { + return noiseShape; + } + if (x.shape.length === noiseShape.length) { + const newDimension = []; + for (let i = 0; i < x.shape.length; i++) { + if (noiseShape[i] == null && x.shape[i] != null) { + newDimension.push(x.shape[i]); + } else { + newDimension.push(noiseShape[i]); + } + } + return newDimension; + } + return noiseShape; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/dropout.js + function dropout_(x, rate, noiseShape, seed) { + const $x = convertToTensor(x, "x", "dropout"); + assert($x.dtype === "float32", () => `x has to be a floating point tensor since it's going to be scaled, but got a ${$x.dtype} tensor instead.`); + assert(rate >= 0 && rate < 1, () => `rate must be a float in the range [0, 1), but got ${rate}.`); + if (rate === 0) { + return x instanceof Tensor ? $x.clone() : $x; + } + const $noiseShape = getNoiseShape($x, noiseShape); + const keepProb = 1 - rate; + const multiplier = div(floor(add2(randomUniform($noiseShape, 0, 1, "float32", seed), keepProb)), keepProb); + return mul($x, multiplier); + } + var dropout = op({ dropout_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused_ops.js + var fused_ops_exports = {}; + __export(fused_ops_exports, { + conv2d: () => conv2d2, + depthwiseConv2d: () => depthwiseConv2d2, + matMul: () => matMul2 + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/conv2d.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_backprop_filter.js + init_define_BUILD_VERSION(); + function conv2DBackpropFilter_(x, dy, filterShape, strides, pad3, dataFormat = "NHWC", dimRoundingMode) { + let x4D = x; + if (x.rank === 3) { + x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]); + } + let dy4D = dy; + if (dy4D.rank === 3) { + dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in conv2dDerFilter: input must be rank 4, but got shape ${x4D.shape}.`); + assert(dy4D.rank === 4, () => `Error in conv2dDerFilter: dy must be rank 4, but got shape ${dy4D.shape}.`); + assert(filterShape.length === 4, () => `Error in conv2dDerFilter: filterShape must be length 4, but got ${filterShape}.`); + const inDepth = dataFormat === "NHWC" ? x4D.shape[3] : x4D.shape[1]; + const outDepth = dataFormat === "NHWC" ? dy4D.shape[3] : dy4D.shape[1]; + assert(inDepth === filterShape[2], () => `Error in conv2dDerFilter: depth of input ${inDepth}) must match input depth in filter (${filterShape[2]}.`); + assert(outDepth === filterShape[3], () => `Error in conv2dDerFilter: depth of dy (${outDepth}) must match output depth for filter (${filterShape[3]}).`); + checkPadOnDimRoundingMode("conv2dDerFilter", pad3, dimRoundingMode); + const inputs = { x: x4D, dy: dy4D }; + const attrs = { strides, pad: pad3, dataFormat, dimRoundingMode, filterShape }; + return ENGINE.runKernel(Conv2DBackpropFilter, inputs, attrs); + } + var conv2DBackpropFilter = op({ conv2DBackpropFilter_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused_util.js + init_define_BUILD_VERSION(); + function getFusedDyActivation(dy, y, activation) { + if (activation == null || activation === "linear") { + return dy; + } + if (activation === "relu") { + return mul(dy, step(y)); + } + throw new Error(`Cannot compute gradient for fused activation ${activation}.`); + } + function getFusedBiasGradient(bias, dyActivation) { + let res = dyActivation; + const reduceAxes = getReductionAxes(bias.shape, dyActivation.shape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, bias.shape); + } + function applyActivation(x, activation, preluActivationWeights, leakyreluAlpha) { + if (activation === "linear") { + return x; + } else if (activation === "relu") { + return relu(x); + } else if (activation === "elu") { + return elu(x); + } else if (activation === "relu6") { + return relu6(x); + } else if (activation === "prelu") { + return prelu(x, preluActivationWeights); + } else if (activation === "leakyrelu") { + return leakyRelu(x, leakyreluAlpha); + } else if (activation === "sigmoid") { + return sigmoid(x); + } + throw new Error(`Unknown fused activation ${activation}.`); + } + var shouldFuse = (gradientDepth, activation) => { + const gradientMode = gradientDepth > 0; + return !gradientMode || activation === "linear"; + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/conv2d.js + function fusedConv2d_({ x, filter, strides, pad: pad3, dataFormat = "NHWC", dilations = [1, 1], dimRoundingMode, bias, activation = "linear", preluActivationWeights, leakyreluAlpha }) { + activation = activation || "linear"; + if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) { + assert(dataFormat === "NHWC", () => `Error in fused conv2d: got dataFormat of ${dataFormat} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`); + let result = conv2d(x, filter, strides, pad3, dataFormat, dilations, dimRoundingMode); + if (bias != null) { + result = add2(result, bias); + } + return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha); + } + const $x = convertToTensor(x, "x", "conv2d", "float32"); + const $filter = convertToTensor(filter, "filter", "conv2d", "float32"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in fused conv2d: input must be rank 4, but got rank ${x4D.rank}.`); + assert($filter.rank === 4, () => `Error in fused conv2d: filter must be rank 4, but got rank ${$filter.rank}.`); + checkPadOnDimRoundingMode("fused conv2d", pad3, dimRoundingMode); + const inputChannels = dataFormat === "NHWC" ? x4D.shape[3] : x4D.shape[1]; + assert($filter.shape[2] === inputChannels, () => `Error in conv2d: depth of input (${inputChannels}) must match input depth for filter ${$filter.shape[2]}.`); + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = computeConv2DInfo(x4D.shape, $filter.shape, strides, dilations, pad3, dimRoundingMode); + let $bias; + if (bias != null) { + $bias = convertToTensor(bias, "bias", "fused conv2d"); + [$bias] = makeTypesMatch($bias, $x); + if (dataFormat === "NHWC") { + assertAndGetBroadcastShape(convInfo.outShape, $bias.shape); + } else { + assert($bias.shape.length <= 1, () => `Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${$bias.shape.length}.`); + assert($bias.shape.length === 0 || $bias.shape[0] === convInfo.outChannels || $bias.shape[0] === 1, () => `Error in fused conv2d: bias shape (${$bias.shape}) is not compatible with the number of output channels (${convInfo.outChannels})`); + } + } + let $preluActivationWeights; + if (preluActivationWeights != null) { + const alphaShape = preluActivationWeights.shape; + assert(alphaShape.length <= 1 || alphaShape.length === 3, () => `Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${alphaShape.length}.`); + if (alphaShape.length === 1) { + assert(alphaShape[0] === 1 || alphaShape[0] === convInfo.outChannels, () => `Error in fused conv2d: PReLU activation weights (${alphaShape}) is not compatible with the number of output channels (${convInfo.outChannels}).`); + } else if (alphaShape.length === 3) { + try { + assertAndGetBroadcastShape(alphaShape, convInfo.outShape); + } catch (e) { + const errMsg = `Error in fused conv2d: PReLU activation weights (${alphaShape}) is not compatible with the output shape of the conv2d (${convInfo.outShape}).`; + throw Error(errMsg); + } + } + $preluActivationWeights = convertToTensor(preluActivationWeights, "prelu weights", "fused conv2d"); + } + const grad = (dy, saved) => { + assert(dataFormat === "NHWC", () => `Error in gradient of fused conv2D: got dataFormat of ${dataFormat} but only NHWC is currently supported.`); + const [$filter2, x4D2, y, $bias2] = saved; + const dyActivation = getFusedDyActivation(dy, y, activation); + assert(tupleValuesAreOne(dilations), () => `Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${dilations}'`); + const xDer = conv2DBackpropInput(x4D2.shape, dyActivation, $filter2, strides, pad3); + const filterDer = conv2DBackpropFilter(x4D2, dyActivation, $filter2.shape, strides, pad3); + const der = [xDer, filterDer]; + if ($bias2 != null) { + const biasDer = getFusedBiasGradient($bias2, dyActivation); + der.push(biasDer); + } + return der; + }; + const inputs = { + x: x4D, + filter: $filter, + bias: $bias, + preluActivationWeights: $preluActivationWeights + }; + const attrs = { + strides, + pad: pad3, + dataFormat, + dilations, + dimRoundingMode, + activation, + leakyreluAlpha + }; + if (bias == null) { + const customOp = customGrad((x4D2, filter2, save) => { + let res = ENGINE.runKernel(FusedConv2D, inputs, attrs); + save([filter2, x4D2, res]); + if (reshapedTo4D) { + res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return { value: res, gradFunc: grad }; + }); + return customOp(x4D, $filter); + } else { + const customOpWithBias = customGrad((x4D2, filter2, bias2, save) => { + let res = ENGINE.runKernel(FusedConv2D, inputs, attrs); + save([filter2, x4D2, res, bias2]); + if (reshapedTo4D) { + res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return { value: res, gradFunc: grad }; + }); + return customOpWithBias(x4D, $filter, $bias); + } + } + var conv2d2 = op({ fusedConv2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/depthwise_conv2d.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d_native_backprop_filter.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNativeBackpropFilter_(x, dy, filterShape, strides, pad3, dilations = [1, 1], dimRoundingMode) { + let x4D = x; + if (x.rank === 3) { + x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]); + } + let dy4D = dy; + if (dy4D.rank === 3) { + dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]); + } + const inputs = { x: x4D, dy: dy4D }; + const attrs = { strides, pad: pad3, dimRoundingMode, dilations, filterShape }; + return ENGINE.runKernel(DepthwiseConv2dNativeBackpropFilter, inputs, attrs); + } + var depthwiseConv2dNativeBackpropFilter = op({ depthwiseConv2dNativeBackpropFilter_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d_native_backprop_input.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNativeBackpropInput_(xShape, dy, filter, strides, pad3, dilations = [1, 1], dimRoundingMode) { + let dy4D = dy; + let reshapedTo4D = false; + if (dy.rank === 3) { + reshapedTo4D = true; + dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]); + } + const inputs = { dy: dy4D, filter }; + const attrs = { strides, pad: pad3, dimRoundingMode, dilations, inputShape: xShape }; + const res = ENGINE.runKernel(DepthwiseConv2dNativeBackpropInput, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var depthwiseConv2dNativeBackpropInput = op({ depthwiseConv2dNativeBackpropInput_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/depthwise_conv2d.js + function fusedDepthwiseConv2d_({ x, filter, strides, pad: pad3, dataFormat = "NHWC", dilations = [1, 1], dimRoundingMode, bias, activation = "linear", preluActivationWeights, leakyreluAlpha }) { + if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) { + let result = depthwiseConv2d(x, filter, strides, pad3, dataFormat, dilations, dimRoundingMode); + if (bias != null) { + result = add2(result, bias); + } + return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha); + } + const $x = convertToTensor(x, "x", "depthwiseConv2d", "float32"); + const $filter = convertToTensor(filter, "filter", "depthwiseConv2d", "float32"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in fused depthwiseConv2d: input must be rank 4, but got rank ${x4D.rank}.`); + assert($filter.rank === 4, () => `Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${$filter.rank}.`); + assert(x4D.shape[3] === $filter.shape[2], () => `Error in fused depthwiseConv2d: number of input channels (${x4D.shape[3]}) must match the inChannels dimension in filter ${$filter.shape[2]}.`); + if (dilations == null) { + dilations = [1, 1]; + } + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + checkPadOnDimRoundingMode("fused depthwiseConv2d", pad3, dimRoundingMode); + const convInfo = computeConv2DInfo(x4D.shape, $filter.shape, strides, dilations, pad3, dimRoundingMode, true); + let $bias; + if (bias != null) { + $bias = convertToTensor(bias, "bias", "fused conv2d"); + [$bias] = makeTypesMatch($bias, $x); + assertAndGetBroadcastShape(convInfo.outShape, $bias.shape); + } + let $preluActivationWeights; + if (preluActivationWeights != null) { + $preluActivationWeights = convertToTensor(preluActivationWeights, "prelu weights", "fused depthwiseConv2d"); + } + const grad = (dy, saved) => { + assert(tupleValuesAreOne(dilations), () => `Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${dilations}'`); + const [$filter2, x4D2, y, bias2] = saved; + const dyActivation = getFusedDyActivation(dy, y, activation); + const xDer = depthwiseConv2dNativeBackpropInput(x4D2.shape, dyActivation, $filter2, strides, pad3, dilations, dimRoundingMode); + const filterDer = depthwiseConv2dNativeBackpropFilter(x4D2, dyActivation, $filter2.shape, strides, pad3, dilations, dimRoundingMode); + if (bias2 != null) { + const biasDer = getFusedBiasGradient($bias, dyActivation); + return [xDer, filterDer, biasDer]; + } + return [xDer, filterDer]; + }; + const inputs = { + x: x4D, + filter: $filter, + bias: $bias, + preluActivationWeights: $preluActivationWeights + }; + const attrs = { + strides, + pad: pad3, + dataFormat, + dilations, + dimRoundingMode, + activation, + leakyreluAlpha + }; + if (bias == null) { + const customOp = customGrad((x4D2, filter2, save) => { + let res = ENGINE.runKernel(FusedDepthwiseConv2D, inputs, attrs); + save([filter2, x4D2, res]); + if (reshapedTo4D) { + res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return { value: res, gradFunc: grad }; + }); + return customOp(x4D, $filter); + } else { + const customOpWithBias = customGrad((x4D2, filter2, bias2, save) => { + let res = ENGINE.runKernel(FusedDepthwiseConv2D, inputs, attrs); + save([filter2, x4D2, res, bias2]); + if (reshapedTo4D) { + res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return { value: res, gradFunc: grad }; + }); + return customOpWithBias(x4D, $filter, $bias); + } + } + var depthwiseConv2d2 = op({ fusedDepthwiseConv2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/mat_mul.js + init_define_BUILD_VERSION(); + function fusedMatMul_({ a, b, transposeA = false, transposeB = false, bias, activation = "linear", preluActivationWeights, leakyreluAlpha = 0.2 }) { + if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) { + let result = matMul(a, b, transposeA, transposeB); + if (bias != null) { + result = add2(result, bias); + } + return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha); + } + let $a = convertToTensor(a, "a", "fused matMul"); + let $b = convertToTensor(b, "b", "fused matMul"); + [$a, $b] = makeTypesMatch($a, $b); + const innerShapeA = transposeA ? $a.shape[$a.rank - 2] : $a.shape[$a.rank - 1]; + const innerShapeB = transposeB ? $b.shape[$b.rank - 1] : $b.shape[$b.rank - 2]; + const outerShapeA = transposeA ? $a.shape[$a.rank - 1] : $a.shape[$a.rank - 2]; + const outerShapeB = transposeB ? $b.shape[$b.rank - 2] : $b.shape[$b.rank - 1]; + const outerDimsA = $a.shape.slice(0, -2); + const outerDimsB = $b.shape.slice(0, -2); + const batchDimA = sizeFromShape(outerDimsA); + const batchDimB = sizeFromShape(outerDimsB); + assert(innerShapeA === innerShapeB, () => `Error in fused matMul: inner shapes (${innerShapeA}) and (${innerShapeB}) of Tensors with shapes ${$a.shape} and ${$b.shape} and transposeA=${transposeA} and transposeB=${transposeB} must match.`); + const outShapeOuterDims = assertAndGetBroadcastShape($a.shape.slice(0, -2), $b.shape.slice(0, -2)); + const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]); + const a3D = transposeA ? reshape($a, [batchDimA, innerShapeA, outerShapeA]) : reshape($a, [batchDimA, outerShapeA, innerShapeA]); + const b3D = transposeB ? reshape($b, [batchDimB, outerShapeB, innerShapeB]) : reshape($b, [batchDimB, innerShapeB, outerShapeB]); + let $bias; + if (bias != null) { + $bias = convertToTensor(bias, "bias", "fused matMul"); + [$bias] = makeTypesMatch($bias, $a); + assertAndGetBroadcastShape(outShape, $bias.shape); + } + let $preluActivationWeights; + if (preluActivationWeights != null) { + $preluActivationWeights = convertToTensor(preluActivationWeights, "prelu weights", "fused matMul"); + } + const grad = (dy, saved) => { + const [a3D2, b3D2, y, $bias2] = saved; + const dyActivation = getFusedDyActivation(reshape(dy, y.shape), y, activation); + let aDer; + let bDer; + if (!transposeA && !transposeB) { + aDer = matMul(dyActivation, b3D2, false, true); + bDer = matMul(a3D2, dyActivation, true, false); + } else if (!transposeA && transposeB) { + aDer = matMul(dyActivation, b3D2, false, false); + bDer = matMul(dyActivation, a3D2, true, false); + } else if (transposeA && !transposeB) { + aDer = matMul(b3D2, dyActivation, false, true); + bDer = matMul(a3D2, dyActivation, false, false); + } else { + aDer = matMul(b3D2, dyActivation, true, true); + bDer = matMul(dyActivation, a3D2, true, true); + } + if (bias != null) { + const biasDer = getFusedBiasGradient($bias2, dyActivation); + return [aDer, bDer, biasDer]; + } else { + return [aDer, bDer]; + } + }; + const inputs = { + a: a3D, + b: b3D, + bias: $bias, + preluActivationWeights: $preluActivationWeights + }; + const attrs = { transposeA, transposeB, activation, leakyreluAlpha }; + if (bias == null) { + const customOp = customGrad((a3D2, b3D2, save) => { + const res = ENGINE.runKernel(_FusedMatMul, inputs, attrs); + save([a3D2, b3D2, res]); + return { value: reshape(res, outShape), gradFunc: grad }; + }); + return customOp(a3D, b3D); + } else { + const customOpWithBias = customGrad((a3D2, b3D2, $bias2, save) => { + const res = ENGINE.runKernel(_FusedMatMul, inputs, attrs); + save([a3D2, b3D2, res, $bias2]); + return { value: reshape(res, outShape), gradFunc: grad }; + }); + return customOpWithBias(a3D, b3D, $bias); + } + } + var matMul2 = op({ fusedMatMul_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/crop_and_resize.js + init_define_BUILD_VERSION(); + function cropAndResize_(image2, boxes, boxInd, cropSize, method = "bilinear", extrapolationValue = 0) { + const $image = convertToTensor(image2, "image", "cropAndResize"); + const $boxes = convertToTensor(boxes, "boxes", "cropAndResize", "float32"); + const $boxInd = convertToTensor(boxInd, "boxInd", "cropAndResize", "int32"); + const numBoxes = $boxes.shape[0]; + assert($image.rank === 4, () => `Error in cropAndResize: image must be rank 4,but got rank ${$image.rank}.`); + assert($boxes.rank === 2 && $boxes.shape[1] === 4, () => `Error in cropAndResize: boxes must be have size [${numBoxes},4] but had shape ${$boxes.shape}.`); + assert($boxInd.rank === 1 && $boxInd.shape[0] === numBoxes, () => `Error in cropAndResize: boxInd must be have size [${numBoxes}] but had shape ${$boxes.shape}.`); + assert(cropSize.length === 2, () => `Error in cropAndResize: cropSize must be of length 2, but got length ${cropSize.length}.`); + assert(cropSize[0] >= 1 && cropSize[1] >= 1, () => `cropSize must be atleast [1,1], but was ${cropSize}`); + assert(method === "bilinear" || method === "nearest", () => `method must be bilinear or nearest, but was ${method}`); + const inputs = { image: $image, boxes: $boxes, boxInd: $boxInd }; + const attrs = { method, extrapolationValue, cropSize }; + const res = ENGINE.runKernel(CropAndResize, inputs, attrs); + return res; + } + var cropAndResize = op({ cropAndResize_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/flip_left_right.js + init_define_BUILD_VERSION(); + function flipLeftRight_(image2) { + const $image = convertToTensor(image2, "image", "flipLeftRight", "float32"); + assert($image.rank === 4, () => `Error in flipLeftRight: image must be rank 4,but got rank ${$image.rank}.`); + const inputs = { image: $image }; + const res = ENGINE.runKernel(FlipLeftRight, inputs, {}); + return res; + } + var flipLeftRight = op({ flipLeftRight_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/grayscale_to_rgb.js + init_define_BUILD_VERSION(); + function grayscaleToRGB_(image2) { + const $image = convertToTensor(image2, "image", "grayscaleToRGB"); + const lastDimsIdx = $image.rank - 1; + const lastDims = $image.shape[lastDimsIdx]; + assert($image.rank >= 2, () => `Error in grayscaleToRGB: images must be at least rank 2, but got rank ${$image.rank}.`); + assert(lastDims === 1, () => `Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${lastDims}.`); + const reps = new Array($image.rank); + reps.fill(1, 0, lastDimsIdx); + reps[lastDimsIdx] = 3; + return tile($image, reps); + } + var grayscaleToRGB = op({ grayscaleToRGB_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/rotate_with_offset.js + init_define_BUILD_VERSION(); + function rotateWithOffset_(image2, radians, fillValue = 0, center = 0.5) { + const $image = convertToTensor(image2, "image", "rotateWithOffset", "float32"); + assert($image.rank === 4, () => `Error in rotateWithOffset: image must be rank 4,but got rank ${$image.rank}.`); + const inputs = { image: $image }; + const attrs = { radians, fillValue, center }; + const res = ENGINE.runKernel(RotateWithOffset, inputs, attrs); + return res; + } + var rotateWithOffset = op({ rotateWithOffset_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/nonmax_util.js + init_define_BUILD_VERSION(); + function nonMaxSuppSanityCheck(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma) { + if (iouThreshold == null) { + iouThreshold = 0.5; + } + if (scoreThreshold == null) { + scoreThreshold = Number.NEGATIVE_INFINITY; + } + if (softNmsSigma == null) { + softNmsSigma = 0; + } + const numBoxes = boxes.shape[0]; + maxOutputSize = Math.min(maxOutputSize, numBoxes); + assert(0 <= iouThreshold && iouThreshold <= 1, () => `iouThreshold must be in [0, 1], but was '${iouThreshold}'`); + assert(boxes.rank === 2, () => `boxes must be a 2D tensor, but was of rank '${boxes.rank}'`); + assert(boxes.shape[1] === 4, () => `boxes must have 4 columns, but 2nd dimension was ${boxes.shape[1]}`); + assert(scores.rank === 1, () => "scores must be a 1D tensor"); + assert(scores.shape[0] === numBoxes, () => `scores has incompatible shape with boxes. Expected ${numBoxes}, but was ${scores.shape[0]}`); + assert(0 <= softNmsSigma && softNmsSigma <= 1, () => `softNmsSigma must be in [0, 1], but was '${softNmsSigma}'`); + return { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression.js + function nonMaxSuppression_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppression", "float32"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppression", "float32"); + const inputs = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold); + maxOutputSize = inputs.maxOutputSize; + iouThreshold = inputs.iouThreshold; + scoreThreshold = inputs.scoreThreshold; + const attrs = { maxOutputSize, iouThreshold, scoreThreshold }; + return ENGINE.runKernel(NonMaxSuppressionV3, { boxes: $boxes, scores: $scores }, attrs); + } + var nonMaxSuppression = op({ nonMaxSuppression_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_async.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_util.js + init_define_BUILD_VERSION(); + function binaryInsert(arr, element, comparator) { + const index = binarySearch(arr, element, comparator); + const insertionPoint = index < 0 ? -(index + 1) : index; + arr.splice(insertionPoint, 0, element); + } + function binarySearch(arr, target, comparator) { + return binarySearch_(arr, target, comparator || defaultComparator); + } + function defaultComparator(a, b) { + return a > b ? 1 : a < b ? -1 : 0; + } + function binarySearch_(arr, target, comparator) { + let left = 0; + let right = arr.length; + let middle = 0; + let found = false; + while (left < right) { + middle = left + (right - left >>> 1); + const compareResult = comparator(target, arr[middle]); + if (compareResult > 0) { + left = middle + 1; + } else { + right = middle; + found = !compareResult; + } + } + return found ? left : -left - 1; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_impl.js + function nonMaxSuppressionV3Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold) { + return nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, 0); + } + function nonMaxSuppressionV4Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize) { + return nonMaxSuppressionImpl_( + boxes, + scores, + maxOutputSize, + iouThreshold, + scoreThreshold, + 0, + false, + padToMaxOutputSize, + true + ); + } + function nonMaxSuppressionV5Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma) { + return nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma, true); + } + function nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma, returnScoresTensor = false, padToMaxOutputSize = false, returnValidOutputs = false) { + const candidates = []; + for (let i = 0; i < scores.length; i++) { + if (scores[i] > scoreThreshold) { + candidates.push({ score: scores[i], boxIndex: i, suppressBeginIndex: 0 }); + } + } + candidates.sort(ascendingComparator); + const scale2 = softNmsSigma > 0 ? -0.5 / softNmsSigma : 0; + const selectedIndices = []; + const selectedScores = []; + while (selectedIndices.length < maxOutputSize && candidates.length > 0) { + const candidate = candidates.pop(); + const { score: originalScore, boxIndex, suppressBeginIndex } = candidate; + if (originalScore < scoreThreshold) { + break; + } + let ignoreCandidate = false; + for (let j = selectedIndices.length - 1; j >= suppressBeginIndex; --j) { + const iou = intersectionOverUnion(boxes, boxIndex, selectedIndices[j]); + if (iou >= iouThreshold) { + ignoreCandidate = true; + break; + } + candidate.score = candidate.score * suppressWeight(iouThreshold, scale2, iou); + if (candidate.score <= scoreThreshold) { + break; + } + } + candidate.suppressBeginIndex = selectedIndices.length; + if (!ignoreCandidate) { + if (candidate.score === originalScore) { + selectedIndices.push(boxIndex); + selectedScores.push(candidate.score); + } else if (candidate.score > scoreThreshold) { + binaryInsert(candidates, candidate, ascendingComparator); + } + } + } + const validOutputs = selectedIndices.length; + const elemsToPad = maxOutputSize - validOutputs; + if (padToMaxOutputSize && elemsToPad > 0) { + selectedIndices.push(...new Array(elemsToPad).fill(0)); + selectedScores.push(...new Array(elemsToPad).fill(0)); + } + const result = { selectedIndices }; + if (returnScoresTensor) { + result["selectedScores"] = selectedScores; + } + if (returnValidOutputs) { + result["validOutputs"] = validOutputs; + } + return result; + } + function intersectionOverUnion(boxes, i, j) { + const iCoord = boxes.subarray(i * 4, i * 4 + 4); + const jCoord = boxes.subarray(j * 4, j * 4 + 4); + const yminI = Math.min(iCoord[0], iCoord[2]); + const xminI = Math.min(iCoord[1], iCoord[3]); + const ymaxI = Math.max(iCoord[0], iCoord[2]); + const xmaxI = Math.max(iCoord[1], iCoord[3]); + const yminJ = Math.min(jCoord[0], jCoord[2]); + const xminJ = Math.min(jCoord[1], jCoord[3]); + const ymaxJ = Math.max(jCoord[0], jCoord[2]); + const xmaxJ = Math.max(jCoord[1], jCoord[3]); + const areaI = (ymaxI - yminI) * (xmaxI - xminI); + const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ); + if (areaI <= 0 || areaJ <= 0) { + return 0; + } + const intersectionYmin = Math.max(yminI, yminJ); + const intersectionXmin = Math.max(xminI, xminJ); + const intersectionYmax = Math.min(ymaxI, ymaxJ); + const intersectionXmax = Math.min(xmaxI, xmaxJ); + const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0) * Math.max(intersectionXmax - intersectionXmin, 0); + return intersectionArea / (areaI + areaJ - intersectionArea); + } + function suppressWeight(iouThreshold, scale2, iou) { + const weight = Math.exp(scale2 * iou * iou); + return iou <= iouThreshold ? weight : 0; + } + function ascendingComparator(c1, c2) { + return c1.score - c2.score || c1.score === c2.score && c2.boxIndex - c1.boxIndex; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_async.js + async function nonMaxSuppressionAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppressionAsync"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppressionAsync"); + const inputs = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold); + maxOutputSize = inputs.maxOutputSize; + iouThreshold = inputs.iouThreshold; + scoreThreshold = inputs.scoreThreshold; + const boxesAndScores = await Promise.all([$boxes.data(), $scores.data()]); + const boxesVals = boxesAndScores[0]; + const scoresVals = boxesAndScores[1]; + const { selectedIndices } = nonMaxSuppressionV3Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold); + if ($boxes !== boxes) { + $boxes.dispose(); + } + if ($scores !== scores) { + $scores.dispose(); + } + return tensor1d(selectedIndices, "int32"); + } + var nonMaxSuppressionAsync = nonMaxSuppressionAsync_; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_with_score.js + init_define_BUILD_VERSION(); + function nonMaxSuppressionWithScore_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, softNmsSigma = 0) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppression"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppression"); + const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma); + maxOutputSize = params.maxOutputSize; + iouThreshold = params.iouThreshold; + scoreThreshold = params.scoreThreshold; + softNmsSigma = params.softNmsSigma; + const inputs = { boxes: $boxes, scores: $scores }; + const attrs = { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma }; + const result = ENGINE.runKernel(NonMaxSuppressionV5, inputs, attrs); + return { selectedIndices: result[0], selectedScores: result[1] }; + } + var nonMaxSuppressionWithScore = op({ nonMaxSuppressionWithScore_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_with_score_async.js + init_define_BUILD_VERSION(); + async function nonMaxSuppressionWithScoreAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, softNmsSigma = 0) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppressionAsync"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppressionAsync"); + const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma); + maxOutputSize = params.maxOutputSize; + iouThreshold = params.iouThreshold; + scoreThreshold = params.scoreThreshold; + softNmsSigma = params.softNmsSigma; + const boxesAndScores = await Promise.all([$boxes.data(), $scores.data()]); + const boxesVals = boxesAndScores[0]; + const scoresVals = boxesAndScores[1]; + const { selectedIndices, selectedScores } = nonMaxSuppressionV5Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma); + if ($boxes !== boxes) { + $boxes.dispose(); + } + if ($scores !== scores) { + $scores.dispose(); + } + return { + selectedIndices: tensor1d(selectedIndices, "int32"), + selectedScores: tensor1d(selectedScores) + }; + } + var nonMaxSuppressionWithScoreAsync = nonMaxSuppressionWithScoreAsync_; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_padded.js + init_define_BUILD_VERSION(); + function nonMaxSuppressionPadded_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, padToMaxOutputSize = false) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppression"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppression"); + const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, null); + const $maxOutputSize = params.maxOutputSize; + const $iouThreshold = params.iouThreshold; + const $scoreThreshold = params.scoreThreshold; + const inputs = { boxes: $boxes, scores: $scores }; + const attrs = { + maxOutputSize: $maxOutputSize, + iouThreshold: $iouThreshold, + scoreThreshold: $scoreThreshold, + padToMaxOutputSize + }; + const result = ENGINE.runKernel(NonMaxSuppressionV4, inputs, attrs); + return { selectedIndices: result[0], validOutputs: result[1] }; + } + var nonMaxSuppressionPadded = op({ nonMaxSuppressionPadded_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_padded_async.js + init_define_BUILD_VERSION(); + async function nonMaxSuppressionPaddedAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, padToMaxOutputSize = false) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppressionAsync"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppressionAsync"); + const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, null); + const $maxOutputSize = params.maxOutputSize; + const $iouThreshold = params.iouThreshold; + const $scoreThreshold = params.scoreThreshold; + const [boxesVals, scoresVals] = await Promise.all([$boxes.data(), $scores.data()]); + const { selectedIndices, validOutputs } = nonMaxSuppressionV4Impl(boxesVals, scoresVals, $maxOutputSize, $iouThreshold, $scoreThreshold, padToMaxOutputSize); + if ($boxes !== boxes) { + $boxes.dispose(); + } + if ($scores !== scores) { + $scores.dispose(); + } + return { + selectedIndices: tensor1d(selectedIndices, "int32"), + validOutputs: scalar(validOutputs, "int32") + }; + } + var nonMaxSuppressionPaddedAsync = nonMaxSuppressionPaddedAsync_; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/resize_bilinear.js + init_define_BUILD_VERSION(); + function resizeBilinear_(images, size, alignCorners = false, halfPixelCenters = false) { + const $images = convertToTensor(images, "images", "resizeBilinear"); + assert($images.rank === 3 || $images.rank === 4, () => `Error in resizeBilinear: x must be rank 3 or 4, but got rank ${$images.rank}.`); + assert(size.length === 2, () => `Error in resizeBilinear: new shape must 2D, but got shape ${size}.`); + assert(halfPixelCenters === false || alignCorners === false, () => `Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.`); + let batchImages = $images; + let reshapedTo4D = false; + if ($images.rank === 3) { + reshapedTo4D = true; + batchImages = reshape($images, [1, $images.shape[0], $images.shape[1], $images.shape[2]]); + } + const [] = size; + const inputs = { images: batchImages }; + const attrs = { alignCorners, halfPixelCenters, size }; + const res = ENGINE.runKernel(ResizeBilinear, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var resizeBilinear = op({ resizeBilinear_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/resize_nearest_neighbor.js + init_define_BUILD_VERSION(); + function resizeNearestNeighbor_(images, size, alignCorners = false, halfPixelCenters = false) { + const $images = convertToTensor(images, "images", "resizeNearestNeighbor"); + assert($images.rank === 3 || $images.rank === 4, () => `Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${$images.rank}.`); + assert(size.length === 2, () => `Error in resizeNearestNeighbor: new shape must 2D, but got shape ${size}.`); + assert($images.dtype === "float32" || $images.dtype === "int32", () => "`images` must have `int32` or `float32` as dtype"); + assert(halfPixelCenters === false || alignCorners === false, () => `Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.`); + let batchImages = $images; + let reshapedTo4D = false; + if ($images.rank === 3) { + reshapedTo4D = true; + batchImages = reshape($images, [1, $images.shape[0], $images.shape[1], $images.shape[2]]); + } + const [] = size; + const inputs = { images: batchImages }; + const attrs = { alignCorners, halfPixelCenters, size }; + const res = ENGINE.runKernel(ResizeNearestNeighbor, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var resizeNearestNeighbor = op({ resizeNearestNeighbor_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/threshold.js + init_define_BUILD_VERSION(); + function threshold_(image2, method = "binary", inverted = false, threshValue = 0.5) { + const $image = convertToTensor(image2, "image", "threshold"); + const RED_INTENCITY_COEF = 0.2989; + const GREEN_INTENCITY_COEF = 0.587; + const BLUE_INTENCITY_COEF = 0.114; + const totalPixelsInImage = $image.shape[0] * $image.shape[1]; + let $threshold = mul(tensor1d([threshValue]), 255); + let r, g, b, grayscale; + assert($image.rank === 3, () => `Error in threshold: image must be rank 3,but got rank ${$image.rank}.`); + assert($image.shape[2] === 3 || $image.shape[2] === 1, () => `Error in threshold: image color channel must be equal to 3 or 1but got ${$image.shape[2]}.`); + assert($image.dtype === "int32" || $image.dtype === "float32", () => `Error in dtype: image dtype must be int32 or float32,but got dtype ${$image.dtype}.`); + assert(method === "otsu" || method === "binary", () => `Method must be binary or otsu, but was ${method}`); + if ($image.shape[2] === 3) { + [r, g, b] = split($image, [1, 1, 1], -1); + const $r = mul(r, RED_INTENCITY_COEF); + const $g = mul(g, GREEN_INTENCITY_COEF); + const $b = mul(b, BLUE_INTENCITY_COEF); + grayscale = add2(add2($r, $g), $b); + } else { + grayscale = image2; + } + if (method === "otsu") { + const $histogram = bincount(cast(round2(grayscale), "int32"), tensor([]), 256); + $threshold = otsu($histogram, totalPixelsInImage); + } + const invCondition = inverted ? lessEqual(grayscale, $threshold) : greater(grayscale, $threshold); + const result = cast(mul(invCondition, 255), "int32"); + return result; + } + function otsu(histogram, total) { + let bestThresh = tensor1d([-1]); + let bestInBetVar = tensor1d([0]); + let cInBetVar = tensor1d([0]); + let classFirst, classSecond, meanFirst, meanSec, weightForeground, weightBack; + for (let index = 0; index < histogram.size - 1; index++) { + classFirst = slice(histogram, 0, index + 1); + classSecond = slice(histogram, index + 1); + weightForeground = div(sum2(classFirst), total); + weightBack = div(sum2(classSecond), total); + const meanFirstDivA = sum2(mul(classFirst, range(0, classFirst.size))); + meanFirst = div(meanFirstDivA, sum2(classFirst)); + const meanSecFill = fill(classSecond.shape, classFirst.size); + const meanSecAdd = add2(range(0, classSecond.size), meanSecFill); + const meanSecMul = mul(classSecond, meanSecAdd); + meanSec = div(sum2(meanSecMul), sum2(classSecond)); + const cInBetVarSubA = sub(meanFirst, meanSec); + const cInBetVarSubB = sub(meanFirst, meanSec); + const cInBetVarMul = mul(weightForeground, weightBack); + cInBetVar = mul(mul(cInBetVarMul, cInBetVarSubA), cInBetVarSubB); + const condition = greater(cInBetVar, bestInBetVar); + bestInBetVar = where(condition, cInBetVar, bestInBetVar); + bestThresh = where(condition, tensor1d([index]), bestThresh); + } + return bestThresh; + } + var threshold = op({ threshold_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/transform.js + init_define_BUILD_VERSION(); + function transform_(image2, transforms, interpolation = "nearest", fillMode = "constant", fillValue = 0, outputShape) { + const $image = convertToTensor(image2, "image", "transform", "float32"); + const $transforms = convertToTensor(transforms, "transforms", "transform", "float32"); + assert($image.rank === 4, () => `Error in transform: image must be rank 4,but got rank ${$image.rank}.`); + assert($transforms.rank === 2 && ($transforms.shape[0] === $image.shape[0] || $transforms.shape[0] === 1) && $transforms.shape[1] === 8, () => `Error in transform: Input transform should be batch x 8 or 1 x 8`); + assert(outputShape == null || outputShape.length === 2, () => `Error in transform: outputShape must be [height, width] or null, but got ${outputShape}.`); + const inputs = { image: $image, transforms: $transforms }; + const attrs = { interpolation, fillMode, fillValue, outputShape }; + return ENGINE.runKernel(Transform, inputs, attrs); + } + var transform = op({ transform_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/linalg/band_part.js + init_define_BUILD_VERSION(); + function bandPart_(a, numLower, numUpper) { + assert(numLower % 1 === 0, () => `bandPart(): numLower must be an integer, got ${numLower}.`); + assert(numUpper % 1 === 0, () => `bandPart(): numUpper must be an integer, got ${numUpper}.`); + const $a = convertToTensor(a, "a", "bandPart"); + assert($a.rank >= 2, () => `bandPart(): Rank must be at least 2, got ${$a.rank}.`); + const shape = $a.shape; + const [M, N] = $a.shape.slice(-2); + if (!(numLower <= M)) { + throw new Error(`bandPart(): numLower (${numLower}) must not be greater than the number of rows (${M}).`); + } + if (!(numUpper <= N)) { + throw new Error(`bandPart(): numUpper (${numUpper}) must not be greater than the number of columns (${N}).`); + } + if (numLower < 0) { + numLower = M; + } + if (numUpper < 0) { + numUpper = N; + } + const i = reshape(range(0, M, 1, "int32"), [-1, 1]); + const j = range(0, N, 1, "int32"); + const ij = sub(i, j); + const inBand = logicalAnd(lessEqual(ij, scalar(+numLower, "int32")), greaterEqual(ij, scalar(-numUpper, "int32"))); + const zero = zeros([M, N], $a.dtype); + return reshape(stack(unstack(reshape($a, [-1, M, N])).map((mat) => where(inBand, mat, zero))), shape); + } + var bandPart = op({ bandPart_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/linalg/gram_schmidt.js + init_define_BUILD_VERSION(); + function gramSchmidt_(xs) { + let inputIsTensor2D; + if (Array.isArray(xs)) { + inputIsTensor2D = false; + assert(xs != null && xs.length > 0, () => "Gram-Schmidt process: input must not be null, undefined, or empty"); + const dim = xs[0].shape[0]; + for (let i = 1; i < xs.length; ++i) { + assert(xs[i].shape[0] === dim, () => `Gram-Schmidt: Non-unique lengths found in the input vectors: (${xs[i].shape[0]} vs. ${dim})`); + } + } else { + inputIsTensor2D = true; + xs = split(xs, xs.shape[0], 0).map((x) => squeeze(x, [0])); + } + assert(xs.length <= xs[0].shape[0], () => `Gram-Schmidt: Number of vectors (${xs.length}) exceeds number of dimensions (${xs[0].shape[0]}).`); + const ys = []; + const xs1d = xs; + for (let i = 0; i < xs.length; ++i) { + ys.push(ENGINE.tidy(() => { + let x = xs1d[i]; + if (i > 0) { + for (let j = 0; j < i; ++j) { + const proj = mul(sum2(mul(ys[j], x)), ys[j]); + x = sub(x, proj); + } + } + return div(x, norm(x, "euclidean")); + })); + } + if (inputIsTensor2D) { + return stack(ys, 0); + } else { + return ys; + } + } + var gramSchmidt = op({ gramSchmidt_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/linalg/qr.js + init_define_BUILD_VERSION(); + function qr_(x, fullMatrices = false) { + assert(x.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${x.rank}`); + if (x.rank === 2) { + return qr2d(x, fullMatrices); + } else { + const outerDimsProd = x.shape.slice(0, x.shape.length - 2).reduce((value, prev) => value * prev); + const x2ds = unstack(reshape(x, [ + outerDimsProd, + x.shape[x.shape.length - 2], + x.shape[x.shape.length - 1] + ]), 0); + const q2ds = []; + const r2ds = []; + x2ds.forEach((x2d) => { + const [q2d, r2d] = qr2d(x2d, fullMatrices); + q2ds.push(q2d); + r2ds.push(r2d); + }); + const q = reshape(stack(q2ds, 0), x.shape); + const r = reshape(stack(r2ds, 0), x.shape); + return [q, r]; + } + } + function qr2d(x, fullMatrices = false) { + return ENGINE.tidy(() => { + assert(x.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${x.shape.length}D Tensor.`); + const m = x.shape[0]; + const n = x.shape[1]; + let q = eye(m); + let r = clone(x); + const one2D = tensor2d([[1]], [1, 1]); + let w = clone(one2D); + const iters = m >= n ? n : m; + for (let j = 0; j < iters; ++j) { + const rTemp = r; + const wTemp = w; + const qTemp = q; + [w, r, q] = ENGINE.tidy(() => { + const rjEnd1 = slice(r, [j, j], [m - j, 1]); + const normX = norm(rjEnd1); + const rjj = slice(r, [j, j], [1, 1]); + const s = where(greater(rjj, 0), tensor2d([[-1]]), tensor2d([[1]])); + const u1 = sub(rjj, mul(s, normX)); + const wPre = div(rjEnd1, u1); + if (wPre.shape[0] === 1) { + w = clone(one2D); + } else { + w = concat([ + one2D, + slice(wPre, [1, 0], [wPre.shape[0] - 1, wPre.shape[1]]) + ], 0); + } + const tau = neg(div(matMul(s, u1), normX)); + const rjEndAll = slice(r, [j, 0], [m - j, n]); + const tauTimesW = mul(tau, w); + const wT = transpose(w); + if (j === 0) { + r = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll))); + } else { + const rTimesTau = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll))); + r = concat([slice(r, [0, 0], [j, n]), rTimesTau], 0); + } + const tawTimesWT = transpose(tauTimesW); + const qAllJEnd = slice(q, [0, j], [m, q.shape[1] - j]); + if (j === 0) { + q = sub(qAllJEnd, matMul(matMul(qAllJEnd, w), tawTimesWT)); + } else { + const qTimesTau = sub(qAllJEnd, matMul(matMul(qAllJEnd, w), tawTimesWT)); + q = concat([slice(q, [0, 0], [m, j]), qTimesTau], 1); + } + return [w, r, q]; + }); + dispose([rTemp, wTemp, qTemp]); + } + if (!fullMatrices && m > n) { + q = slice(q, [0, 0], [m, n]); + r = slice(r, [0, 0], [n, n]); + } + return [q, r]; + }); + } + var qr = op({ qr_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ops.js + var image = { + flipLeftRight, + grayscaleToRGB, + resizeNearestNeighbor, + resizeBilinear, + rotateWithOffset, + cropAndResize, + nonMaxSuppression, + nonMaxSuppressionAsync, + nonMaxSuppressionWithScore, + nonMaxSuppressionWithScoreAsync, + nonMaxSuppressionPadded, + nonMaxSuppressionPaddedAsync, + threshold, + transform + }; + var linalg = { + bandPart, + gramSchmidt, + qr + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer.js + init_define_BUILD_VERSION(); + var Optimizer = class extends Serializable { + minimize(f, returnCost = false, varList) { + const { value, grads } = this.computeGradients(f, varList); + if (varList != null) { + const gradArray = varList.map((v) => ({ name: v.name, tensor: grads[v.name] })); + this.applyGradients(gradArray); + } else { + this.applyGradients(grads); + } + dispose(grads); + if (returnCost) { + return value; + } else { + value.dispose(); + return null; + } + } + get iterations() { + if (this.iterations_ == null) { + this.iterations_ = 0; + } + return this.iterations_; + } + incrementIterations() { + this.iterations_ = this.iterations + 1; + } + computeGradients(f, varList) { + return variableGrads(f, varList); + } + dispose() { + if (this.iterations_ != null) { + dispose(this.iterations_); + } + } + async saveIterations() { + if (this.iterations_ == null) { + this.iterations_ = 0; + } + return { + name: "iter", + tensor: scalar(this.iterations_, "int32") + }; + } + async getWeights() { + throw new Error("getWeights() is not implemented for this optimizer yet."); + } + async setWeights(weightValues) { + throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`); + } + async extractIterations(weightValues) { + this.iterations_ = (await weightValues[0].tensor.data())[0]; + return weightValues.slice(1); + } + }; + Object.defineProperty(Optimizer, Symbol.hasInstance, { + value: (instance) => { + return instance.minimize != null && instance.computeGradients != null && instance.applyGradients != null; + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adadelta_optimizer.js + var AdadeltaOptimizer = class extends Optimizer { + constructor(learningRate, rho, epsilon3 = null) { + super(); + this.learningRate = learningRate; + this.rho = rho; + this.epsilon = epsilon3; + this.accumulatedGrads = []; + this.accumulatedUpdates = []; + if (epsilon3 == null) { + this.epsilon = ENGINE.backend.epsilon(); + } + } + applyGradients(variableGradients) { + const variableNames = Array.isArray(variableGradients) ? variableGradients.map((item) => item.name) : Object.keys(variableGradients); + variableNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + const trainable = false; + if (this.accumulatedGrads[i] == null) { + this.accumulatedGrads[i] = { + originalName: `${name}/accum_grad`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + if (this.accumulatedUpdates[i] == null) { + this.accumulatedUpdates[i] = { + originalName: `${name}/accum_var`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const accumulatedGrad = this.accumulatedGrads[i].variable; + const accumulatedUpdate = this.accumulatedUpdates[i].variable; + tidy(() => { + const newAccumulatedGrad = add2(mul(accumulatedGrad, this.rho), mul(square(gradient), 1 - this.rho)); + const updates = mul(div(sqrt(add2(accumulatedUpdate, this.epsilon)), sqrt(add2(accumulatedGrad, this.epsilon))), gradient); + const newAccumulatedUpdate = add2(mul(accumulatedUpdate, this.rho), mul(square(updates), 1 - this.rho)); + accumulatedGrad.assign(newAccumulatedGrad); + accumulatedUpdate.assign(newAccumulatedUpdate); + const newValue = add2(mul(updates, -this.learningRate), value); + value.assign(newValue); + }); + }); + this.incrementIterations(); + } + dispose() { + if (this.accumulatedUpdates != null) { + dispose(this.accumulatedGrads.map((v) => v.variable)); + dispose(this.accumulatedUpdates.map((v) => v.variable)); + } + } + async getWeights() { + const variables = [...this.accumulatedGrads, ...this.accumulatedUpdates]; + return [await this.saveIterations()].concat(variables.map((v) => ({ name: v.originalName, tensor: v.variable }))); + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + const variableCount = weightValues.length / 2; + const trainable = false; + this.accumulatedGrads = weightValues.slice(0, variableCount).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + this.accumulatedUpdates = weightValues.slice(variableCount, variableCount * 2).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + } + getConfig() { + return { + "learningRate": this.learningRate, + "rho": this.rho, + "epsilon": this.epsilon + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["rho"], config["epsilon"]); + } + }; + AdadeltaOptimizer.className = "Adadelta"; + registerClass(AdadeltaOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adagrad_optimizer.js + init_define_BUILD_VERSION(); + var AdagradOptimizer = class extends Optimizer { + constructor(learningRate, initialAccumulatorValue = 0.1) { + super(); + this.learningRate = learningRate; + this.initialAccumulatorValue = initialAccumulatorValue; + this.accumulatedGrads = []; + } + applyGradients(variableGradients) { + const variableNames = Array.isArray(variableGradients) ? variableGradients.map((item) => item.name) : Object.keys(variableGradients); + variableNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + if (this.accumulatedGrads[i] == null) { + const trainable = false; + this.accumulatedGrads[i] = { + originalName: `${name}/accumulator`, + variable: tidy(() => fill(value.shape, this.initialAccumulatorValue).variable(trainable)) + }; + } + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const accumulatedGrad = this.accumulatedGrads[i].variable; + tidy(() => { + const newAccumulatedGrad = add2(accumulatedGrad, square(gradient)); + accumulatedGrad.assign(newAccumulatedGrad); + const newValue = add2(mul(div(gradient, sqrt(add2(newAccumulatedGrad, ENGINE.backend.epsilon()))), -this.learningRate), value); + value.assign(newValue); + }); + }); + this.incrementIterations(); + } + dispose() { + if (this.accumulatedGrads != null) { + dispose(this.accumulatedGrads.map((v) => v.variable)); + } + } + async getWeights() { + return [await this.saveIterations()].concat(this.accumulatedGrads.map((v) => ({ name: v.originalName, tensor: v.variable }))); + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + const trainable = false; + this.accumulatedGrads = weightValues.map((v) => ({ originalName: v.name, variable: v.tensor.variable(trainable) })); + } + getConfig() { + return { + "learningRate": this.learningRate, + "initialAccumulatorValue": this.initialAccumulatorValue + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["initialAccumulatorValue"]); + } + }; + AdagradOptimizer.className = "Adagrad"; + registerClass(AdagradOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adam_optimizer.js + init_define_BUILD_VERSION(); + var AdamOptimizer = class extends Optimizer { + constructor(learningRate, beta1, beta2, epsilon3 = null) { + super(); + this.learningRate = learningRate; + this.beta1 = beta1; + this.beta2 = beta2; + this.epsilon = epsilon3; + this.accumulatedFirstMoment = []; + this.accumulatedSecondMoment = []; + tidy(() => { + this.accBeta1 = scalar(beta1).variable(); + this.accBeta2 = scalar(beta2).variable(); + }); + if (epsilon3 == null) { + this.epsilon = ENGINE.backend.epsilon(); + } + } + applyGradients(variableGradients) { + const varNames = Array.isArray(variableGradients) ? variableGradients.map((v) => v.name) : Object.keys(variableGradients); + tidy(() => { + const oneMinusAccBeta1 = sub(1, this.accBeta1); + const oneMinusAccBeta2 = sub(1, this.accBeta2); + varNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + const trainable = false; + if (this.accumulatedFirstMoment[i] == null) { + this.accumulatedFirstMoment[i] = { + originalName: `${name}/m`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + if (this.accumulatedSecondMoment[i] == null) { + this.accumulatedSecondMoment[i] = { + originalName: `${name}/v`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const firstMoment = this.accumulatedFirstMoment[i].variable; + const secondMoment = this.accumulatedSecondMoment[i].variable; + const newFirstMoment = add2(mul(firstMoment, this.beta1), mul(gradient, 1 - this.beta1)); + const newSecondMoment = add2(mul(secondMoment, this.beta2), mul(square(gradient), 1 - this.beta2)); + const biasCorrectedFirstMoment = div(newFirstMoment, oneMinusAccBeta1); + const biasCorrectedSecondMoment = div(newSecondMoment, oneMinusAccBeta2); + firstMoment.assign(newFirstMoment); + secondMoment.assign(newSecondMoment); + const newValue = add2(mul(div(biasCorrectedFirstMoment, add2(sqrt(biasCorrectedSecondMoment), this.epsilon)), -this.learningRate), value); + value.assign(newValue); + }); + this.accBeta1.assign(mul(this.accBeta1, this.beta1)); + this.accBeta2.assign(mul(this.accBeta2, this.beta2)); + }); + this.incrementIterations(); + } + dispose() { + this.accBeta1.dispose(); + this.accBeta2.dispose(); + if (this.accumulatedFirstMoment != null) { + dispose(this.accumulatedFirstMoment.map((v) => v.variable)); + } + if (this.accumulatedSecondMoment != null) { + dispose(this.accumulatedSecondMoment.map((v) => v.variable)); + } + } + async getWeights() { + const variables = [...this.accumulatedFirstMoment, ...this.accumulatedSecondMoment]; + return [await this.saveIterations()].concat(variables.map((v) => ({ name: v.originalName, tensor: v.variable }))); + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + tidy(() => { + this.accBeta1.assign(pow(this.beta1, this.iterations_ + 1)); + this.accBeta2.assign(pow(this.beta2, this.iterations_ + 1)); + }); + const variableCount = weightValues.length / 2; + const trainable = false; + this.accumulatedFirstMoment = weightValues.slice(0, variableCount).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + this.accumulatedSecondMoment = weightValues.slice(variableCount, variableCount * 2).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + } + getConfig() { + return { + "learningRate": this.learningRate, + "beta1": this.beta1, + "beta2": this.beta2, + "epsilon": this.epsilon + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["beta1"], config["beta2"], config["epsilon"]); + } + }; + AdamOptimizer.className = "Adam"; + registerClass(AdamOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adamax_optimizer.js + init_define_BUILD_VERSION(); + var AdamaxOptimizer = class extends Optimizer { + constructor(learningRate, beta1, beta2, epsilon3 = null, decay = 0) { + super(); + this.learningRate = learningRate; + this.beta1 = beta1; + this.beta2 = beta2; + this.epsilon = epsilon3; + this.decay = decay; + this.accumulatedFirstMoment = []; + this.accumulatedWeightedInfNorm = []; + tidy(() => { + this.iteration = scalar(0).variable(); + this.accBeta1 = scalar(beta1).variable(); + }); + if (epsilon3 == null) { + this.epsilon = ENGINE.backend.epsilon(); + } + } + applyGradients(variableGradients) { + const variableNames = Array.isArray(variableGradients) ? variableGradients.map((item) => item.name) : Object.keys(variableGradients); + tidy(() => { + const oneMinusAccBeta1 = sub(1, this.accBeta1); + const lr = div(-this.learningRate, add2(mul(this.iteration, this.decay), 1)); + variableNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + const trainable = false; + if (this.accumulatedFirstMoment[i] == null) { + this.accumulatedFirstMoment[i] = { + originalName: `${name}/m`, + variable: zerosLike(value).variable(trainable) + }; + } + if (this.accumulatedWeightedInfNorm[i] == null) { + this.accumulatedWeightedInfNorm[i] = { + originalName: `${name}/v`, + variable: zerosLike(value).variable(trainable) + }; + } + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const firstMoment = this.accumulatedFirstMoment[i].variable; + const weightedInfNorm = this.accumulatedWeightedInfNorm[i].variable; + const newFirstMoment = add2(mul(firstMoment, this.beta1), mul(gradient, 1 - this.beta1)); + const ut0 = mul(weightedInfNorm, this.beta2); + const ut1 = abs(gradient); + const newWeightedInfNorm = maximum(ut0, ut1); + firstMoment.assign(newFirstMoment); + weightedInfNorm.assign(newWeightedInfNorm); + const newValue = add2(mul(div(lr, oneMinusAccBeta1), div(newFirstMoment, add2(newWeightedInfNorm, this.epsilon))), value); + value.assign(newValue); + }); + this.iteration.assign(add2(this.iteration, 1)); + this.accBeta1.assign(mul(this.accBeta1, this.beta1)); + }); + this.incrementIterations(); + } + dispose() { + this.accBeta1.dispose(); + this.iteration.dispose(); + if (this.accumulatedFirstMoment != null) { + dispose(this.accumulatedFirstMoment.map((v) => v.variable)); + } + if (this.accumulatedWeightedInfNorm != null) { + dispose(this.accumulatedWeightedInfNorm.map((v) => v.variable)); + } + } + async getWeights() { + throw new Error("getWeights() is not implemented for Adamax yet."); + } + async setWeights(weightValues) { + throw new Error("setWeights() is not implemented for Adamax yet."); + } + getConfig() { + return { + "learningRate": this.learningRate, + "beta1": this.beta1, + "beta2": this.beta2, + "epsilon": this.epsilon, + "decay": this.decay + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["beta1"], config["beta2"], config["epsilon"], config["decay"]); + } + }; + AdamaxOptimizer.className = "Adamax"; + registerClass(AdamaxOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/momentum_optimizer.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/sgd_optimizer.js + init_define_BUILD_VERSION(); + var SGDOptimizer = class extends Optimizer { + constructor(learningRate) { + super(); + this.learningRate = learningRate; + this.setLearningRate(learningRate); + } + applyGradients(variableGradients) { + const varNames = Array.isArray(variableGradients) ? variableGradients.map((v) => v.name) : Object.keys(variableGradients); + varNames.forEach((name, i) => { + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const value = ENGINE.registeredVariables[name]; + tidy(() => { + const newValue = add2(mul(this.c, gradient), value); + value.assign(newValue); + }); + }); + this.incrementIterations(); + } + setLearningRate(learningRate) { + this.learningRate = learningRate; + if (this.c != null) { + this.c.dispose(); + } + this.c = keep(scalar(-learningRate)); + } + dispose() { + this.c.dispose(); + } + async getWeights() { + return [await this.saveIterations()]; + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + if (weightValues.length !== 0) { + throw new Error("SGD optimizer does not have settable weights."); + } + } + getConfig() { + return { "learningRate": this.learningRate }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"]); + } + }; + SGDOptimizer.className = "SGD"; + registerClass(SGDOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/momentum_optimizer.js + var MomentumOptimizer = class extends SGDOptimizer { + constructor(learningRate, momentum, useNesterov = false) { + super(learningRate); + this.learningRate = learningRate; + this.momentum = momentum; + this.useNesterov = useNesterov; + this.accumulations = []; + this.m = scalar(this.momentum); + } + applyGradients(variableGradients) { + const variableNames = Array.isArray(variableGradients) ? variableGradients.map((item) => item.name) : Object.keys(variableGradients); + variableNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + if (this.accumulations[i] == null) { + const trainable = false; + this.accumulations[i] = { + originalName: `${name}/momentum`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + const accumulation = this.accumulations[i].variable; + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + tidy(() => { + let newValue; + const newAccumulation = add2(mul(this.m, accumulation), gradient); + if (this.useNesterov) { + newValue = add2(mul(this.c, add2(gradient, mul(newAccumulation, this.m))), value); + } else { + newValue = add2(mul(this.c, newAccumulation), value); + } + accumulation.assign(newAccumulation); + value.assign(newValue); + }); + }); + this.incrementIterations(); + } + dispose() { + this.m.dispose(); + if (this.accumulations != null) { + dispose(this.accumulations.map((v) => v.variable)); + } + } + setMomentum(momentum) { + this.momentum = momentum; + } + async getWeights() { + return [await this.saveIterations()].concat(this.accumulations.map((v) => ({ name: v.originalName, tensor: v.variable }))); + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + const trainable = false; + this.accumulations = weightValues.map((v) => ({ originalName: v.name, variable: v.tensor.variable(trainable) })); + } + getConfig() { + return { + "learningRate": this.learningRate, + "momentum": this.momentum, + "useNesterov": this.useNesterov + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["momentum"], config["useNesterov"]); + } + }; + MomentumOptimizer.className = "Momentum"; + registerClass(MomentumOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer_constructors.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/rmsprop_optimizer.js + init_define_BUILD_VERSION(); + var RMSPropOptimizer = class extends Optimizer { + constructor(learningRate, decay = 0.9, momentum = 0, epsilon3 = null, centered = false) { + super(); + this.learningRate = learningRate; + this.decay = decay; + this.momentum = momentum; + this.epsilon = epsilon3; + this.accumulatedMeanSquares = []; + this.accumulatedMoments = []; + this.accumulatedMeanGrads = []; + this.centered = centered; + if (epsilon3 == null) { + this.epsilon = ENGINE.backend.epsilon(); + } + if (learningRate == null) { + throw new Error(`learningRate for RMSPropOptimizer must be defined.`); + } + } + applyGradients(variableGradients) { + const variableNames = Array.isArray(variableGradients) ? variableGradients.map((item) => item.name) : Object.keys(variableGradients); + variableNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + const trainable = false; + if (this.accumulatedMeanSquares[i] == null) { + this.accumulatedMeanSquares[i] = { + originalName: `${name}/rms`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + if (this.accumulatedMoments[i] == null) { + this.accumulatedMoments[i] = { + originalName: `${name}/momentum`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + if (this.accumulatedMeanGrads[i] == null && this.centered) { + this.accumulatedMeanGrads[i] = { + originalName: `${name}/mg`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const accumulatedMeanSquare = this.accumulatedMeanSquares[i].variable; + const accumulatedMoments = this.accumulatedMoments[i].variable; + tidy(() => { + const newAccumulatedMeanSquare = add2(mul(accumulatedMeanSquare, this.decay), mul(square(gradient), 1 - this.decay)); + if (this.centered) { + const accumulatedMeanGrad = this.accumulatedMeanGrads[i].variable; + const newAccumulatedMeanGrad = add2(mul(accumulatedMeanGrad, this.decay), mul(gradient, 1 - this.decay)); + const gradContribution = div(mul(gradient, this.learningRate), sqrt(sub(newAccumulatedMeanSquare, add2(square(newAccumulatedMeanGrad), this.epsilon)))); + const newAccumulatedMoments = add2(mul(accumulatedMoments, this.momentum), gradContribution); + accumulatedMeanSquare.assign(newAccumulatedMeanSquare); + accumulatedMeanGrad.assign(newAccumulatedMeanGrad); + accumulatedMoments.assign(newAccumulatedMoments); + const newValue = sub(value, newAccumulatedMoments); + value.assign(newValue); + } else { + const newAccumulatedMeanSquare2 = add2(mul(accumulatedMeanSquare, this.decay), mul(square(gradient), 1 - this.decay)); + const newAccumulatedMoments = add2(mul(accumulatedMoments, this.momentum), div(mul(gradient, this.learningRate), sqrt(add2(newAccumulatedMeanSquare2, this.epsilon)))); + accumulatedMeanSquare.assign(newAccumulatedMeanSquare2); + accumulatedMoments.assign(newAccumulatedMoments); + const newValue = sub(value, newAccumulatedMoments); + value.assign(newValue); + } + }); + }); + this.incrementIterations(); + } + dispose() { + if (this.accumulatedMeanSquares != null) { + dispose(this.accumulatedMeanSquares.map((v) => v.variable)); + } + if (this.accumulatedMeanGrads != null && this.centered) { + dispose(this.accumulatedMeanGrads.map((v) => v.variable)); + } + if (this.accumulatedMoments != null) { + dispose(this.accumulatedMoments.map((v) => v.variable)); + } + } + async getWeights() { + const variables = [...this.accumulatedMeanSquares, ...this.accumulatedMoments]; + if (this.centered) { + variables.push(...this.accumulatedMeanGrads); + } + return [await this.saveIterations()].concat(variables.map((v) => ({ name: v.originalName, tensor: v.variable }))); + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + const variableCount = this.centered ? weightValues.length / 3 : weightValues.length / 2; + const trainable = false; + this.accumulatedMeanSquares = weightValues.slice(0, variableCount).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + this.accumulatedMoments = weightValues.slice(variableCount, variableCount * 2).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + if (this.centered) { + this.accumulatedMeanGrads = weightValues.slice(variableCount * 2, variableCount * 3).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + } + } + getConfig() { + return { + "learningRate": this.learningRate, + "decay": this.decay, + "momentum": this.momentum, + "epsilon": this.epsilon, + "centered": this.centered + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["decay"], config["momentum"], config["epsilon"], config["centered"]); + } + }; + RMSPropOptimizer.className = "RMSProp"; + registerClass(RMSPropOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer_constructors.js + var OptimizerConstructors = class { + static sgd(learningRate) { + return new SGDOptimizer(learningRate); + } + static momentum(learningRate, momentum, useNesterov = false) { + return new MomentumOptimizer(learningRate, momentum, useNesterov); + } + static rmsprop(learningRate, decay = 0.9, momentum = 0, epsilon3 = null, centered = false) { + return new RMSPropOptimizer(learningRate, decay, momentum, epsilon3, centered); + } + static adam(learningRate = 1e-3, beta1 = 0.9, beta2 = 0.999, epsilon3 = null) { + return new AdamOptimizer(learningRate, beta1, beta2, epsilon3); + } + static adadelta(learningRate = 1e-3, rho = 0.95, epsilon3 = null) { + return new AdadeltaOptimizer(learningRate, rho, epsilon3); + } + static adamax(learningRate = 2e-3, beta1 = 0.9, beta2 = 0.999, epsilon3 = null, decay = 0) { + return new AdamaxOptimizer(learningRate, beta1, beta2, epsilon3, decay); + } + static adagrad(learningRate, initialAccumulatorValue = 0.1) { + return new AdagradOptimizer(learningRate, initialAccumulatorValue); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/train.js + init_define_BUILD_VERSION(); + var train = { + sgd: OptimizerConstructors.sgd, + momentum: OptimizerConstructors.momentum, + adadelta: OptimizerConstructors.adadelta, + adagrad: OptimizerConstructors.adagrad, + rmsprop: OptimizerConstructors.rmsprop, + adamax: OptimizerConstructors.adamax, + adam: OptimizerConstructors.adam + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/browser_util.js + init_define_BUILD_VERSION(); + var delayCallback = (() => { + if (typeof requestAnimationFrame !== "undefined") { + return requestAnimationFrame; + } else if (typeof setImmediate !== "undefined") { + return setImmediate; + } + return (f) => f(); + })(); + function nextFrame() { + return new Promise((resolve) => delayCallback(() => resolve())); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/backend_util.js + var backend_util_exports = {}; + __export(backend_util_exports, { + ERF_A1: () => ERF_A1, + ERF_A2: () => ERF_A2, + ERF_A3: () => ERF_A3, + ERF_A4: () => ERF_A4, + ERF_A5: () => ERF_A5, + ERF_P: () => ERF_P, + PARALLELIZE_THRESHOLD: () => PARALLELIZE_THRESHOLD, + SELU_SCALE: () => SELU_SCALE, + SELU_SCALEALPHA: () => SELU_SCALEALPHA, + applyActivation: () => applyActivation, + assertAndGetBroadcastShape: () => assertAndGetBroadcastShape, + assertAxesAreInnerMostDims: () => assertAxesAreInnerMostDims, + assertParamsConsistent: () => assertParamsConsistent, + assignToTypedArray: () => assignToTypedArray, + axesAreInnerMostDims: () => axesAreInnerMostDims, + calculateShapes: () => calculateShapes, + checkEinsumDimSizes: () => checkEinsumDimSizes, + checkPadOnDimRoundingMode: () => checkPadOnDimRoundingMode, + combineLocations: () => combineLocations, + complexWithEvenIndex: () => complexWithEvenIndex, + complexWithOddIndex: () => complexWithOddIndex, + computeConv2DInfo: () => computeConv2DInfo, + computeConv3DInfo: () => computeConv3DInfo, + computeDefaultPad: () => computeDefaultPad, + computeDilation2DInfo: () => computeDilation2DInfo, + computeOptimalWindowSize: () => computeOptimalWindowSize, + computeOutAndReduceShapes: () => computeOutAndReduceShapes, + computeOutShape: () => computeOutShape2, + computePool2DInfo: () => computePool2DInfo, + computePool3DInfo: () => computePool3DInfo, + convertConv2DDataFormat: () => convertConv2DDataFormat, + decodeEinsumEquation: () => decodeEinsumEquation, + eitherStridesOrDilationsAreOne: () => eitherStridesOrDilationsAreOne, + expandShapeToKeepDim: () => expandShapeToKeepDim, + exponent: () => exponent, + exponents: () => exponents, + fromStringArrayToUint8: () => fromStringArrayToUint8, + fromUint8ToStringArray: () => fromUint8ToStringArray, + getAxesPermutation: () => getAxesPermutation, + getBroadcastDims: () => getBroadcastDims, + getComplexWithIndex: () => getComplexWithIndex, + getEinsumComputePath: () => getEinsumComputePath, + getEinsumPermutation: () => getEinsumPermutation, + getFusedBiasGradient: () => getFusedBiasGradient, + getFusedDyActivation: () => getFusedDyActivation, + getImageCenter: () => getImageCenter, + getInnerMostAxes: () => getInnerMostAxes, + getPermuted: () => getPermuted, + getReductionAxes: () => getReductionAxes, + getReshaped: () => getReshaped, + getReshapedPermuted: () => getReshapedPermuted, + getSliceBeginCoords: () => getSliceBeginCoords, + getSliceSize: () => getSliceSize, + getSparseFillEmptyRowsIndicesDenseShapeMismatch: () => getSparseFillEmptyRowsIndicesDenseShapeMismatch, + getSparseFillEmptyRowsNegativeIndexErrorMessage: () => getSparseFillEmptyRowsNegativeIndexErrorMessage, + getSparseFillEmptyRowsOutOfRangeIndexErrorMessage: () => getSparseFillEmptyRowsOutOfRangeIndexErrorMessage, + getSparseReshapeEmptyTensorZeroOutputDimErrorMessage: () => getSparseReshapeEmptyTensorZeroOutputDimErrorMessage, + getSparseReshapeInputOutputMismatchErrorMessage: () => getSparseReshapeInputOutputMismatchErrorMessage, + getSparseReshapeInputOutputMultipleErrorMessage: () => getSparseReshapeInputOutputMultipleErrorMessage, + getSparseReshapeMultipleNegativeOneOutputDimErrorMessage: () => getSparseReshapeMultipleNegativeOneOutputDimErrorMessage, + getSparseReshapeNegativeOutputDimErrorMessage: () => getSparseReshapeNegativeOutputDimErrorMessage, + getSparseSegmentReductionIndicesOutOfRangeErrorMessage: () => getSparseSegmentReductionIndicesOutOfRangeErrorMessage, + getSparseSegmentReductionNegativeSegmentIdsErrorMessage: () => getSparseSegmentReductionNegativeSegmentIdsErrorMessage, + getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage: () => getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage, + getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage: () => getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage, + getUndoAxesPermutation: () => getUndoAxesPermutation, + isIdentityPermutation: () => isIdentityPermutation, + log: () => log, + mergeRealAndImagArrays: () => mergeRealAndImagArrays, + prepareAndValidate: () => prepareAndValidate, + prepareSplitSize: () => prepareSplitSize, + segment_util: () => segment_util_exports, + shouldFuse: () => shouldFuse, + slice_util: () => slice_util_exports, + splitRealAndImagArrays: () => splitRealAndImagArrays, + tupleValuesAreOne: () => tupleValuesAreOne, + upcastType: () => upcastType, + validateInput: () => validateInput, + validateUpdateShape: () => validateUpdateShape, + warn: () => warn + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_util.js + init_define_BUILD_VERSION(); + function assertParamsConsistent(shapes, axis) { + const rank = shapes[0].length; + shapes.forEach((shape, i) => { + assert(shape.length === rank, () => `Error in concat${rank}D: rank of tensors[${i}] must be the same as the rank of the rest (${rank})`); + }); + assert(axis >= 0 && axis < rank, () => `Error in concat${rank}D: axis must be between 0 and ${rank - 1}.`); + const firstShape = shapes[0]; + shapes.forEach((shape, i) => { + for (let r = 0; r < rank; r++) { + assert(r === axis || shape[r] === firstShape[r], () => `Error in concat${rank}D: Shape of tensors[${i}] (${shape}) does not match the shape of the rest (${firstShape}) along the non-concatenated axis ${i}.`); + } + }); + } + function computeOutShape2(shapes, axis) { + const outputShape = shapes[0].slice(); + for (let i = 1; i < shapes.length; i++) { + outputShape[axis] += shapes[i][axis]; + } + return outputShape; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/reduce_util.js + init_define_BUILD_VERSION(); + var PARALLELIZE_THRESHOLD = 30; + function computeOptimalWindowSize(inSize) { + if (inSize <= PARALLELIZE_THRESHOLD) { + return inSize; + } + return nearestDivisor(inSize, Math.floor(Math.sqrt(inSize))); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/rotate_util.js + init_define_BUILD_VERSION(); + function getImageCenter(center, imageHeight, imageWidth) { + const centerX = imageWidth * (typeof center === "number" ? center : center[0]); + const centerY = imageHeight * (typeof center === "number" ? center : center[1]); + return [centerX, centerY]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/array_ops_util.js + init_define_BUILD_VERSION(); + function getReshaped(inputShape, blockShape, prod5, batchToSpace = true) { + let reshaped = []; + if (batchToSpace) { + reshaped = reshaped.concat(blockShape.slice(0)); + reshaped.push(inputShape[0] / prod5); + reshaped = reshaped.concat(inputShape.slice(1)); + } else { + reshaped = reshaped.concat(inputShape[0]); + const spatialLength = blockShape.length; + for (let i = 0; i < spatialLength; ++i) { + reshaped = reshaped.concat([inputShape[i + 1] / blockShape[i], blockShape[i]]); + } + reshaped = reshaped.concat(inputShape.slice(spatialLength + 1)); + } + return reshaped; + } + function getPermuted(reshapedRank, blockShapeRank, batchToSpace = true) { + const permuted = []; + if (batchToSpace) { + permuted.push(blockShapeRank); + for (let i = blockShapeRank + 1; i < reshapedRank; ++i) { + if (i <= 2 * blockShapeRank) { + permuted.push(i); + permuted.push(i - (blockShapeRank + 1)); + } else { + permuted.push(i); + } + } + } else { + const permutedBeforeBatch = []; + const permutedAfterBatch = []; + for (let i = 1; i < reshapedRank; ++i) { + if (i >= blockShapeRank * 2 + 1 || i % 2 === 1) { + permutedAfterBatch.push(i); + } else { + permutedBeforeBatch.push(i); + } + } + permuted.push(...permutedBeforeBatch); + permuted.push(0); + permuted.push(...permutedAfterBatch); + } + return permuted; + } + function getReshapedPermuted(inputShape, blockShape, prod5, batchToSpace = true) { + const reshapedPermuted = []; + if (batchToSpace) { + reshapedPermuted.push(inputShape[0] / prod5); + } else { + reshapedPermuted.push(inputShape[0] * prod5); + } + for (let i = 1; i < inputShape.length; ++i) { + if (i <= blockShape.length) { + if (batchToSpace) { + reshapedPermuted.push(blockShape[i - 1] * inputShape[i]); + } else { + reshapedPermuted.push(inputShape[i] / blockShape[i - 1]); + } + } else { + reshapedPermuted.push(inputShape[i]); + } + } + return reshapedPermuted; + } + function getSliceBeginCoords(crops, blockShape) { + const sliceBeginCoords = [0]; + for (let i = 0; i < blockShape; ++i) { + sliceBeginCoords.push(crops[i][0]); + } + return sliceBeginCoords; + } + function getSliceSize(uncroppedShape, crops, blockShape) { + const sliceSize = uncroppedShape.slice(0, 1); + for (let i = 0; i < blockShape; ++i) { + sliceSize.push(uncroppedShape[i + 1] - crops[i][0] - crops[i][1]); + } + return sliceSize; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/selu_util.js + init_define_BUILD_VERSION(); + var SELU_SCALEALPHA = 1.7580993408473768; + var SELU_SCALE = 1.0507009873554805; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/erf_util.js + init_define_BUILD_VERSION(); + var ERF_P = 0.3275911; + var ERF_A1 = 0.254829592; + var ERF_A2 = -0.284496736; + var ERF_A3 = 1.421413741; + var ERF_A4 = -1.453152027; + var ERF_A5 = 1.061405429; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/complex_util.js + init_define_BUILD_VERSION(); + function mergeRealAndImagArrays(real4, imag4) { + if (real4.length !== imag4.length) { + throw new Error(`Cannot merge real and imag arrays of different lengths. real:${real4.length}, imag: ${imag4.length}.`); + } + const result = new Float32Array(real4.length * 2); + for (let i = 0; i < result.length; i += 2) { + result[i] = real4[i / 2]; + result[i + 1] = imag4[i / 2]; + } + return result; + } + function splitRealAndImagArrays(complex4) { + const real4 = new Float32Array(complex4.length / 2); + const imag4 = new Float32Array(complex4.length / 2); + for (let i = 0; i < complex4.length; i += 2) { + real4[i / 2] = complex4[i]; + imag4[i / 2] = complex4[i + 1]; + } + return { real: real4, imag: imag4 }; + } + function complexWithEvenIndex(complex4) { + const len = Math.ceil(complex4.length / 4); + const real4 = new Float32Array(len); + const imag4 = new Float32Array(len); + for (let i = 0; i < complex4.length; i += 4) { + real4[Math.floor(i / 4)] = complex4[i]; + imag4[Math.floor(i / 4)] = complex4[i + 1]; + } + return { real: real4, imag: imag4 }; + } + function complexWithOddIndex(complex4) { + const len = Math.floor(complex4.length / 4); + const real4 = new Float32Array(len); + const imag4 = new Float32Array(len); + for (let i = 2; i < complex4.length; i += 4) { + real4[Math.floor(i / 4)] = complex4[i]; + imag4[Math.floor(i / 4)] = complex4[i + 1]; + } + return { real: real4, imag: imag4 }; + } + function getComplexWithIndex(complex4, index) { + const real4 = complex4[index * 2]; + const imag4 = complex4[index * 2 + 1]; + return { real: real4, imag: imag4 }; + } + function assignToTypedArray(data, real4, imag4, index) { + data[index * 2] = real4; + data[index * 2 + 1] = imag4; + } + function exponents(n, inverse) { + const real4 = new Float32Array(n / 2); + const imag4 = new Float32Array(n / 2); + for (let i = 0; i < Math.ceil(n / 2); i++) { + const x = (inverse ? 2 : -2) * Math.PI * (i / n); + real4[i] = Math.cos(x); + imag4[i] = Math.sin(x); + } + return { real: real4, imag: imag4 }; + } + function exponent(k, n, inverse) { + const x = (inverse ? 2 : -2) * Math.PI * (k / n); + const real4 = Math.cos(x); + const imag4 = Math.sin(x); + return { real: real4, imag: imag4 }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/einsum_util.js + init_define_BUILD_VERSION(); + var ARROW = "->"; + var ARROW_REGEX = /->/g; + var COMMA = ","; + var ELLIPSIS = "..."; + function decodeEinsumEquation(equation, numTensors) { + equation = equation.replace(/\s/g, ""); + const numArrows = (equation.length - equation.replace(ARROW_REGEX, "").length) / ARROW.length; + if (numArrows < 1) { + throw new Error("Equations without an arrow are not supported."); + } else if (numArrows > 1) { + throw new Error(`Equation must contain exactly one arrow ("${ARROW}").`); + } + const [inputString, outputString] = equation.split(ARROW); + assert(inputString.indexOf(ELLIPSIS) === -1, () => `The ellipsis notation ("${ELLIPSIS}") is not supported yet.`); + const inputTerms = inputString.split(COMMA); + const numInputs = inputTerms.length; + if (numTensors !== numInputs) { + throw new Error(`Expected ${numInputs} input tensors, received ${numTensors}`); + } + if (numInputs > 2) { + throw new Error("Support for more than 2 input tensors is not implemented yet."); + } + const allDims = []; + for (let i = 0; i < outputString.length; ++i) { + const dimName = outputString[i]; + if (!inputTerms.some((inputTerm) => inputTerm.indexOf(dimName) !== -1)) { + throw new Error(`Output subscripts contain the label ${dimName} not present in the input subscripts.`); + } + if (allDims.indexOf(dimName) === -1) { + allDims.push(dimName); + } + } + for (let i = 0; i < inputString.length; ++i) { + const dimName = inputString[i]; + if (allDims.indexOf(dimName) === -1 && dimName !== COMMA) { + allDims.push(dimName); + } + } + const idDims = new Array(inputTerms.length); + for (let i = 0; i < numInputs; ++i) { + if (new Set(inputTerms[i].split("")).size !== inputTerms[i].length) { + throw new Error(`Found duplicate axes in input component ${inputTerms[i]}. Support for duplicate axes in input is not implemented yet.`); + } + idDims[i] = []; + for (let j = 0; j < inputTerms[i].length; ++j) { + idDims[i].push(allDims.indexOf(inputTerms[i][j])); + } + } + const numDims = allDims.length; + const numOutDims = outputString.length; + const summedDims = []; + for (let i = numOutDims; i < numDims; ++i) { + summedDims.push(i); + } + return { allDims, summedDims, idDims }; + } + function getEinsumPermutation(nDims, idDims) { + let permutationIndices = new Array(nDims); + permutationIndices.fill(-1); + for (let i = 0; i < idDims.length; ++i) { + permutationIndices[idDims[i]] = i; + } + const expandDims6 = []; + for (let i = 0; i < nDims; ++i) { + if (permutationIndices[i] === -1) { + expandDims6.push(i); + } + } + permutationIndices = permutationIndices.filter((d) => d !== -1); + return { permutationIndices, expandDims: expandDims6 }; + } + function checkEinsumDimSizes(nDims, idDims, tensors) { + const dimSizes = new Array(nDims); + for (let i = 0; i < tensors.length; ++i) { + const shape = tensors[i].shape; + for (let j = 0; j < idDims[i].length; ++j) { + if (dimSizes[idDims[i][j]] === void 0) { + dimSizes[idDims[i][j]] = shape[j]; + } else { + assert(dimSizes[idDims[i][j]] === shape[j], () => `Expected dimension ${dimSizes[idDims[i][j]]} at axis ${j} of input shaped ${JSON.stringify(shape)}, but got dimension ${shape[j]}`); + } + } + } + } + function getEinsumComputePath(summedDims, idDims) { + const path = summedDims; + const steps = []; + let nSteps = 0; + if (summedDims.length === 0) { + path.push(-1); + } + nSteps = summedDims.length + 1; + for (let i = 0; i < nSteps; ++i) { + steps.push([]); + } + const computedTermIndices = []; + for (let i = 0; i < path.length; ++i) { + const summedDim = path[i]; + const termIndices = findTermsWithDim(idDims, summedDim); + for (const termIndex of termIndices) { + if (computedTermIndices.indexOf(termIndex) === -1) { + steps[i].push(termIndex); + computedTermIndices.push(termIndex); + } + } + } + return { path, steps }; + } + function isIdentityPermutation(perm) { + return perm.every((dim, index) => dim === index); + } + function findTermsWithDim(idDims, dim) { + const termIndices = []; + for (let i = 0; i < idDims.length; ++i) { + if (idDims[i].length === 0 || idDims[i].indexOf(dim) !== -1 || dim === -1) { + termIndices.push(i); + } + } + return termIndices; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/split_util.js + init_define_BUILD_VERSION(); + function prepareSplitSize(x, numOrSizeSplits, axis = 0) { + let splitSizes = []; + if (typeof numOrSizeSplits === "number") { + assert(x.shape[axis] % numOrSizeSplits === 0, () => "Number of splits must evenly divide the axis."); + splitSizes = new Array(numOrSizeSplits).fill(x.shape[axis] / numOrSizeSplits); + } else { + const numOfNegs = numOrSizeSplits.reduce((count2, value) => { + if (value === -1) { + count2 += 1; + } + return count2; + }, 0); + assert(numOfNegs <= 1, () => "There should be only one negative value in split array."); + const negIndex = numOrSizeSplits.indexOf(-1); + if (negIndex !== -1) { + const total = numOrSizeSplits.reduce((a, b) => b > 0 ? a + b : a); + numOrSizeSplits[negIndex] = x.shape[axis] - total; + } + assert(x.shape[axis] === numOrSizeSplits.reduce((a, b) => a + b), () => "The sum of sizes must match the size of the axis dimension."); + splitSizes = numOrSizeSplits; + } + return splitSizes; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_fill_empty_rows_util.js + init_define_BUILD_VERSION(); + function getSparseFillEmptyRowsIndicesDenseShapeMismatch(indicesLength) { + return `Received SparseTensor with denseShape[0] = 0 but + indices.shape[0] = ${indicesLength}`; + } + function getSparseFillEmptyRowsNegativeIndexErrorMessage(index, value) { + return `indices(${index}, 0) is invalid: ${value} < 0`; + } + function getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(index, value, limit) { + return `indices(${index}, 0) is invalid: ${value} >= ${limit}`; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_reshape_util.js + init_define_BUILD_VERSION(); + function getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(dim1, dim2) { + return `only one output dimension may be -1, not both ${dim1} and ${dim2}`; + } + function getSparseReshapeNegativeOutputDimErrorMessage(dim, value) { + return `size ${dim} must be non-negative, not ${value}`; + } + function getSparseReshapeEmptyTensorZeroOutputDimErrorMessage() { + return "reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"; + } + function getSparseReshapeInputOutputMultipleErrorMessage(inputShape, outputShape) { + const inputSize = sizeFromShape(inputShape); + const outputSize = sizeFromShape(outputShape); + return `Input to reshape is a SparseTensor with ${inputSize} + dense values, but the requested shape requires a multiple of ${outputSize}. inputShape=${inputShape} outputShape= ${outputShape}`; + } + function getSparseReshapeInputOutputMismatchErrorMessage(inputShape, outputShape) { + const inputSize = sizeFromShape(inputShape); + const outputSize = sizeFromShape(outputShape); + return `Input to reshape is a tensor with ${inputSize} dense values, but the requested shape has ${outputSize}. inputShape=${inputShape} outputShape=${outputShape}`; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_segment_reduction_util.js + init_define_BUILD_VERSION(); + function getSparseSegmentReductionNegativeSegmentIdsErrorMessage() { + return `segment ids must be >= 0`; + } + function getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage() { + return `segment ids are not increasing`; + } + function getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(segmentId, outputRows) { + return `Segment id ${segmentId} out of range [0, ${outputRows}), possibly because segmentIds input is not sorted.`; + } + function getSparseSegmentReductionIndicesOutOfRangeErrorMessage(index, indexValue, inputRows) { + return `Bad: indices[${index}] == ${indexValue} out of range [0, ${inputRows})`; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/segment_util.js + var segment_util_exports = {}; + __export(segment_util_exports, { + collectGatherOpShapeInfo: () => collectGatherOpShapeInfo, + computeOutShape: () => computeOutShape3, + segOpComputeOptimalWindowSize: () => segOpComputeOptimalWindowSize + }); + init_define_BUILD_VERSION(); + function segOpComputeOptimalWindowSize(inSize, numSegments) { + let done = false; + let res; + if (inSize <= PARALLELIZE_THRESHOLD) { + res = inSize; + done = true; + } else { + res = nearestDivisor(inSize, Math.floor(Math.sqrt(inSize))); + } + while (!done) { + if (res > numSegments || res === inSize) { + done = true; + } else { + res = nearestDivisor(inSize, res + 1); + } + } + return res; + } + function computeOutShape3(aShape, axis, numSegments) { + const outShape = []; + const rank = aShape.length; + for (let dim = 0; dim < rank; dim++) { + if (dim !== axis) { + outShape.push(aShape[dim]); + } else { + outShape.push(numSegments); + } + } + return outShape; + } + function collectGatherOpShapeInfo(x, indices, axis, batchDims) { + const indicesRank = indices.shape.length; + const xRank = x.shape.length; + if (batchDims !== 0) { + if (batchDims < -indicesRank || batchDims > indicesRank) { + throw new Error(`Expect batchDims in the range of [-${indicesRank}, ${indicesRank}], but got ${batchDims}`); + } + } + if (batchDims < 0) { + batchDims += indicesRank; + } + if (batchDims > xRank) { + throw new Error(`batchDims (${batchDims}) must be less than rank(x) ( + ${xRank}).`); + } + if (axis < batchDims) { + throw new Error(`batchDims (${batchDims}) must be less than or equal to axis (${axis}).`); + } + for (let i = 0; i < batchDims; ++i) { + if (x.shape[i] !== indices.shape[i]) { + throw new Error(`x.shape[${i}]: ${x.shape[i]} should be equal to indices.shape[${i}]: ${indices.shape[i]}.`); + } + } + const dimSize = x.shape[axis]; + const outputShape = []; + let batchSize = 1; + let outerSize = 1; + let sliceSize = 1; + for (let i = 0; i < batchDims; ++i) { + outputShape.push(x.shape[i]); + batchSize *= x.shape[i]; + } + for (let i = batchDims; i < axis; i++) { + outputShape.push(x.shape[i]); + outerSize *= x.shape[i]; + } + for (let i = batchDims; i < indicesRank; i++) { + outputShape.push(indices.shape[i]); + } + for (let i = axis + 1; i < xRank; i++) { + outputShape.push(x.shape[i]); + sliceSize *= x.shape[i]; + } + return { batchSize, sliceSize, outerSize, dimSize, outputShape }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/backend_util.js + function fromUint8ToStringArray(vals) { + try { + return vals.map((val) => decodeString(val)); + } catch (err) { + throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${err}`); + } + } + function fromStringArrayToUint8(strings) { + return strings.map((s) => encodeString(s)); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/kernel_impls.js + var kernel_impls_exports = {}; + __export(kernel_impls_exports, { + nonMaxSuppressionV3Impl: () => nonMaxSuppressionV3Impl, + nonMaxSuppressionV4Impl: () => nonMaxSuppressionV4Impl, + nonMaxSuppressionV5Impl: () => nonMaxSuppressionV5Impl, + whereImpl: () => whereImpl + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/register_all_gradients.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Abs_grad.js + init_define_BUILD_VERSION(); + var absGradConfig = { + kernelName: Abs, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(dy, step(cast(x, "float32"), -1)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Acos_grad.js + init_define_BUILD_VERSION(); + var acosGradConfig = { + kernelName: Acos, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { + x: () => { + const a = square(cast(x, "float32")); + const b = sqrt(sub(scalar(1), a)); + return neg(div(dy, b)); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Acosh_grad.js + init_define_BUILD_VERSION(); + var acoshGradConfig = { + kernelName: Acosh, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { + x: () => { + const a = sqrt(sub(square(cast(x, "float32")), 1)); + return div(dy, a); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Add_grad.js + init_define_BUILD_VERSION(); + var addGradConfig = { + kernelName: Add, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + let res = dy; + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, a.shape); + }; + const derB = () => { + let res = dy; + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, b.shape); + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/AddN_grad.js + init_define_BUILD_VERSION(); + var addNGradConfig = { + kernelName: AddN, + saveAllInputs: true, + gradFunc: (dy, saved) => { + const ders = {}; + saved.forEach((_, i) => { + ders[i] = () => dy.clone(); + }); + return ders; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ArgMax_grad.js + init_define_BUILD_VERSION(); + var argMaxGradConfig = { + kernelName: ArgMax, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => zerosLike(x) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ArgMin_grad.js + init_define_BUILD_VERSION(); + var argMinGradConfig = { + kernelName: ArgMin, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => zerosLike(x) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Asin_grad.js + init_define_BUILD_VERSION(); + var asinGradConfig = { + kernelName: Asin, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, sqrt(sub(scalar(1), square(cast(x, "float32"))))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Asinh_grad.js + init_define_BUILD_VERSION(); + var asinhGradConfig = { + kernelName: Asinh, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { + x: () => { + const a = sqrt(add2(scalar(1), square(cast(x, "float32")))); + return div(dy, a); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Atan2_grad.js + init_define_BUILD_VERSION(); + var atan2GradConfig = { + kernelName: Atan2, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + const d = add2(square(a), square(b)); + let res = mul(dy, div(b, d)); + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, a.shape); + }; + const derB = () => { + const d = add2(square(a), square(b)); + let res = neg(mul(dy, div(a, d))); + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, b.shape); + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Atan_grad.js + init_define_BUILD_VERSION(); + var atanGradConfig = { + kernelName: Atan, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, add2(square(cast(x, "float32")), 1)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Atanh_grad.js + init_define_BUILD_VERSION(); + var atanhGradConfig = { + kernelName: Atanh, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, sub(scalar(1), square(cast(x, "float32")))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/AvgPool3D_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_3d_grad.js + init_define_BUILD_VERSION(); + function avgPool3dGrad_(dy, input2, filterSize, strides, pad3, dimRoundingMode) { + const $dy = convertToTensor(dy, "dy", "avgPool3dGrad"); + const $input = convertToTensor(input2, "input", "avgPool3dGrad"); + let dy5D = $dy; + let input5D = $input; + let reshapedTo5D = false; + if ($input.rank === 4) { + reshapedTo5D = true; + dy5D = reshape($dy, [1, $dy.shape[0], $dy.shape[1], $dy.shape[2], $dy.shape[3]]); + input5D = reshape($input, [ + 1, + $input.shape[0], + $input.shape[1], + $input.shape[2], + $input.shape[3] + ]); + } + assert(dy5D.rank === 5, () => `Error in avgPool3dGrad: dy must be rank 5 but got rank ${dy5D.rank}.`); + assert(input5D.rank === 5, () => `Error in avgPool3dGrad: input must be rank 5 but got rank ${input5D.rank}.`); + checkPadOnDimRoundingMode("avgPool3dGrad", pad3, dimRoundingMode); + const inputs = { dy: dy5D, input: input5D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode }; + const res = ENGINE.runKernel(AvgPool3DGrad, inputs, attrs); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var avgPool3dGrad = op({ avgPool3dGrad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/AvgPool3D_grad.js + var avgPool3DGradConfig = { + kernelName: AvgPool3D, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + return { + x: () => avgPool3dGrad(dy, x, filterSize, strides, pad3, dimRoundingMode) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/AvgPool_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_grad.js + init_define_BUILD_VERSION(); + function avgPoolGrad_(dy, input2, filterSize, strides, pad3) { + const $dy = convertToTensor(dy, "dy", "avgPoolGrad"); + const $input = convertToTensor(input2, "input", "avgPoolGrad"); + assert($input.rank === $dy.rank, () => `Rank of input (${$input.rank}) does not match rank of dy (${$dy.rank})`); + let input4D = $input; + let dy4D = $dy; + let reshapedTo4D = false; + if ($input.rank === 3) { + reshapedTo4D = true; + input4D = reshape($input, [1, $input.shape[0], $input.shape[1], $input.shape[2]]); + dy4D = reshape($dy, [1, $dy.shape[0], $dy.shape[1], $dy.shape[2]]); + } + assert(dy4D.rank === 4, () => `Error in avgPoolGrad: dy must be rank 4 but got rank ${dy4D.rank}.`); + assert(input4D.rank === 4, () => `Error in avgPoolGrad: input must be rank 4 but got rank ${input4D.rank}.`); + const inputs = { dy: dy4D, input: input4D }; + const attrs = { filterSize, strides, pad: pad3 }; + const res = ENGINE.runKernel(AvgPoolGrad, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var avgPoolGrad = op({ avgPoolGrad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/AvgPool_grad.js + var avgPoolGradConfig = { + kernelName: AvgPool, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { filterSize, strides, pad: pad3 } = attrs; + return { x: () => avgPoolGrad(dy, x, filterSize, strides, pad3) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/BatchMatMul_grad.js + init_define_BUILD_VERSION(); + var batchMatMulGradConfig = { + kernelName: BatchMatMul, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved, attrs) => { + const [a, b] = saved; + const { transposeA, transposeB } = attrs; + if (!transposeA && !transposeB) { + return { + a: () => matMul(dy, b, false, true), + b: () => matMul(a, dy, true, false) + }; + } else if (!transposeA && transposeB) { + return { + a: () => matMul(dy, b, false, false), + b: () => matMul(dy, a, true, false) + }; + } else if (transposeA && !transposeB) { + return { + a: () => matMul(b, dy, false, true), + b: () => matMul(a, dy, false, false) + }; + } else { + return { + a: () => matMul(b, dy, true, true), + b: () => matMul(dy, a, true, true) + }; + } + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/BatchToSpaceND_grad.js + init_define_BUILD_VERSION(); + var batchToSpaceNDGradConfig = { + kernelName: BatchToSpaceND, + gradFunc: (dy, saved, attrs) => { + const { blockShape, crops } = attrs; + return { x: () => spaceToBatchND(dy, blockShape, crops) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/BroadcastTo_grad.js + init_define_BUILD_VERSION(); + var broadcastToGradConfig = { + kernelName: BroadcastTo, + gradFunc: (dy, saved, attrs) => { + const broadCastToAttrs = attrs; + const inputShape = broadCastToAttrs.inputShape; + const outputShape = broadCastToAttrs.shape; + const reps = Array.from(outputShape); + for (let i = inputShape.length - 1; i >= 0; i--) { + if (inputShape[i] === outputShape[i]) { + reps[i] = 1; + } else if (inputShape[i] !== 1) { + throw new Error(`broadcastTo(): [${inputShape}] cannot be broadcast to [${outputShape}].`); + } + } + const axes = []; + for (let i = 0; i < reps.length; i++) { + if (reps[i] > 1) { + axes.push(i); + } + } + return { x: () => sum2(dy, axes, true) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Cast_grad.js + init_define_BUILD_VERSION(); + var castGradConfig = { + kernelName: Cast, + gradFunc: (dy) => { + return { x: () => dy.clone() }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Ceil_grad.js + init_define_BUILD_VERSION(); + var ceilGradConfig = { + kernelName: Ceil, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ClipByValue_grad.js + init_define_BUILD_VERSION(); + var clipByValueGradConfig = { + kernelName: ClipByValue, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { clipValueMin, clipValueMax } = attrs; + return { + x: () => where(logicalAnd(greaterEqual(x, clipValueMin), lessEqual(x, clipValueMax)), dy, zerosLike(dy)) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ComplexAbs_grad.js + init_define_BUILD_VERSION(); + var complexAbsGradConfig = { + kernelName: ComplexAbs, + inputsToSave: ["x"], + gradFunc: absGradConfig.gradFunc + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Concat_grad.js + init_define_BUILD_VERSION(); + var concatGradConfig = { + kernelName: Concat, + saveAllInputs: true, + gradFunc: (dy, saved, attrs) => { + const shapes = saved.map((t) => t.shape); + const { axis } = attrs; + const $axis = parseAxisParam(axis, saved[0].shape)[0]; + const sizeSplits = shapes.map((s) => s[$axis]); + const derTensors = split(dy, sizeSplits, $axis); + return derTensors.map((t) => () => t); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Conv2D_grad.js + init_define_BUILD_VERSION(); + var conv2DGradConfig = { + kernelName: Conv2D, + inputsToSave: ["x", "filter"], + gradFunc: (dy, saved, attrs) => { + const [x4D, $filter] = saved; + const { dilations, strides, pad: pad3, dataFormat } = attrs; + assert(tupleValuesAreOne(dilations), () => `Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${dilations}'`); + return { + x: () => conv2DBackpropInput(x4D.shape, dy, $filter, strides, pad3, dataFormat), + filter: () => conv2DBackpropFilter(x4D, dy, $filter.shape, strides, pad3, dataFormat) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Conv2DBackpropInput_grad.js + init_define_BUILD_VERSION(); + var conv2DBackpropInputGradConfig = { + kernelName: Conv2DBackpropInput, + inputsToSave: ["dy", "filter"], + gradFunc: (ddx, saved, attrs) => { + const [dy, filter] = saved; + const { strides, pad: pad3, dataFormat, dimRoundingMode } = attrs; + return { + dy: () => conv2d(ddx, filter, strides, pad3, dataFormat, 1, dimRoundingMode), + filter: () => conv2DBackpropFilter(ddx, dy, filter.shape, strides, pad3, dataFormat, dimRoundingMode) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Conv3D_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_backprop_filter.js + init_define_BUILD_VERSION(); + function conv3DBackpropFilter_(x, dy, filterShape, strides, pad3) { + let x5D = x; + if (x.rank === 4) { + x5D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2], x.shape[3]]); + } + let dy5D = dy; + if (dy5D.rank === 4) { + dy5D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2], dy.shape[3]]); + } + assert(x5D.rank === 5, () => `Error in conv3dDerFilter: input must be rank 5, but got shape ${x5D.shape}.`); + assert(dy5D.rank === 5, () => `Error in conv3dDerFilter: dy must be rank 5, but got shape ${dy5D.shape}.`); + assert(filterShape.length === 5, () => `Error in conv3dDerFilter: filterShape must be length 5, but got ${filterShape}.`); + assert(x5D.shape[4] === filterShape[3], () => `Error in conv3dDerFilter: depth of input ${x5D.shape[4]}) must match input depth in filter (${filterShape[3]}.`); + assert(dy5D.shape[4] === filterShape[4], () => `Error in conv3dDerFilter: depth of dy (${dy5D.shape[4]}) must match output depth for filter (${filterShape[4]}).`); + const inputs = { x: x5D, dy: dy5D }; + const attrs = { strides, pad: pad3, filterShape }; + return ENGINE.runKernel(Conv3DBackpropFilterV2, inputs, attrs); + } + var conv3DBackpropFilter = op({ conv3DBackpropFilter_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Conv3D_grad.js + var conv3DGradConfig = { + kernelName: Conv3D, + inputsToSave: ["x", "filter"], + gradFunc: (dy, saved, attrs) => { + const { dilations, strides, pad: pad3 } = attrs; + assert(tupleValuesAreOne(dilations), () => `Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${dilations}'`); + const [x5D, $filter] = saved; + return { + x: () => conv3DBackpropInput(x5D.shape, dy, $filter, strides, pad3), + filter: () => conv3DBackpropFilter(x5D, dy, $filter.shape, strides, pad3) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Cos_grad.js + init_define_BUILD_VERSION(); + var cosGradConfig = { + kernelName: Cos, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(neg(sin(cast(x, "float32"))), dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Cosh_grad.js + init_define_BUILD_VERSION(); + var coshGradConfig = { + kernelName: Cosh, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(sinh(cast(x, "float32")), dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Cumsum_grad.js + init_define_BUILD_VERSION(); + var cumsumGradConfig = { + kernelName: Cumsum, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { axis, exclusive, reverse: reverse5 } = attrs; + return { + x: () => { + const permutation = getAxesPermutation([axis], x.rank); + let out = cumsum(dy, axis, exclusive, !reverse5); + if (permutation != null) { + out = transpose(out, permutation); + } + return out; + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/DepthwiseConv2dNative_grad.js + init_define_BUILD_VERSION(); + var depthwiseConv2dNativeGradConfig = { + kernelName: DepthwiseConv2dNative, + inputsToSave: ["x", "filter"], + gradFunc: (dy, saved, attrs) => { + const { dilations, strides, pad: pad3, dimRoundingMode } = attrs; + const $dilations = dilations == null ? [1, 1] : dilations; + assert(tupleValuesAreOne($dilations), () => `Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${$dilations}'`); + const [x, filter] = saved; + assert(x.rank === 4, () => `Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${x.rank}.`); + assert(filter.rank === 4, () => `Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${filter.rank}.`); + assert(x.shape[3] === filter.shape[2], () => `Error in gradient of depthwiseConv2d: number of input channels (${x.shape[3]}) must match the inChannels dimension in filter ${filter.shape[2]}.`); + assert(eitherStridesOrDilationsAreOne(strides, $dilations), () => `Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${strides} and dilations '${$dilations}'.`); + checkPadOnDimRoundingMode("depthwiseConv2d", pad3, dimRoundingMode); + return { + x: () => depthwiseConv2dNativeBackpropInput(x.shape, dy, filter, strides, pad3, $dilations, dimRoundingMode), + filter: () => depthwiseConv2dNativeBackpropFilter(x, dy, filter.shape, strides, pad3, $dilations, dimRoundingMode) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Dilation2D_grad.js + init_define_BUILD_VERSION(); + var dilation2dGradConfig = { + kernelName: Dilation2D, + inputsToSave: ["x", "filter"], + gradFunc: (dy, saved, attrs) => { + const [x, filter] = saved; + const inputInputs = { x, filter, dy }; + const filterInputs = { x, filter, dy }; + return { + x: () => ENGINE.runKernel(Dilation2DBackpropInput, inputInputs, attrs), + filter: () => ENGINE.runKernel(Dilation2DBackpropFilter, filterInputs, attrs) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Elu_grad.js + init_define_BUILD_VERSION(); + var eluGradConfig = { + kernelName: Elu, + outputsToSave: [true], + gradFunc: (dy, saved) => { + const [y] = saved; + const inputs = { dy, y }; + return { x: () => ENGINE.runKernel(EluGrad, inputs) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Erf_grad.js + init_define_BUILD_VERSION(); + var erfGradConfig = { + kernelName: Erf, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + const a = mul(exp(neg(square(x))), 2 / Math.sqrt(Math.PI)); + return { x: () => mul(dy, a) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Exp_grad.js + init_define_BUILD_VERSION(); + var expGradConfig = { + kernelName: Exp, + outputsToSave: [true], + gradFunc: (dy, saved) => { + const [y] = saved; + return { x: () => mul(dy, y) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ExpandDims_grad.js + init_define_BUILD_VERSION(); + var expandDimsGradConfig = { + kernelName: ExpandDims, + inputsToSave: ["input"], + gradFunc: (dy, saved) => { + const [input2] = saved; + return { input: () => reshape(dy, input2.shape) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Expm1_grad.js + init_define_BUILD_VERSION(); + var expm1GradConfig = { + kernelName: Expm1, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(dy, exp(x)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Floor_grad.js + init_define_BUILD_VERSION(); + var floorGradConfig = { + kernelName: Floor, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/FloorDiv_grad.js + init_define_BUILD_VERSION(); + var floorDivGradConfig = { + kernelName: FloorDiv, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + const res = div(dy, cast(b, "float32")); + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(res, reduceAxes), a.shape); + } + return res; + }; + const derB = () => { + let res = mul(dy, cast(a, "float32")); + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + res = reshape(sum2(res, reduceAxes), b.shape); + } + const tmp = square(b); + return neg(div(res, cast(tmp, "float32"))); + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/FusedBatchNorm_grad.js + init_define_BUILD_VERSION(); + var fusedBatchNormGradConfig = { + kernelName: FusedBatchNorm, + inputsToSave: ["x", "mean", "variance", "scale"], + gradFunc: (dy, saved, attrs) => { + const { varianceEpsilon } = attrs; + const [x, mean4, variance, scale2] = saved; + const scaleValue = scale2 == null ? scalar(1) : scale2; + const reductionAxes = getReductionAxes(mean4.shape, x.shape); + const tileShape = []; + if (mean4.rank === 1) { + for (let i = 0; i < x.shape.length - 1; ++i) { + tileShape.push(x.shape[i]); + } + tileShape.push(1); + } + const xMinusMean = sub(x, mean4); + const dyTimesScaleValue = mul(dy, scaleValue); + const oneOverSqrtVariance = rsqrt(add2(variance, scalar(varianceEpsilon))); + const minusHalfRCube = mul(mul(mul(oneOverSqrtVariance, oneOverSqrtVariance), oneOverSqrtVariance), scalar(-0.5)); + const derX = () => { + if (mean4.rank === 1) { + return reshape(mul(mul(dy, tile(reshape(oneOverSqrtVariance, [1, 1, 1, mean4.shape[0]]), tileShape)), scaleValue), x.shape); + } else { + return reshape(mul(mul(dy, oneOverSqrtVariance), scaleValue), x.shape); + } + }; + const derMean = () => { + let meanDer = mul(mul(oneOverSqrtVariance, scalar(-1)), dyTimesScaleValue); + if (mean4.rank === 1) { + meanDer = sum2(meanDer, reductionAxes); + } + return reshape(meanDer, mean4.shape); + }; + const derVariance = () => { + let varianceDer = mul(mul(minusHalfRCube, xMinusMean), dyTimesScaleValue); + if (mean4.rank === 1) { + varianceDer = sum2(varianceDer, reductionAxes); + } + return reshape(varianceDer, mean4.shape); + }; + const derScale = () => { + const xMinusMean2TimesRsqrt = mul(xMinusMean, oneOverSqrtVariance); + let scaleDer = mul(dy, xMinusMean2TimesRsqrt); + if (mean4.rank === 1) { + scaleDer = sum2(scaleDer, reductionAxes); + } + return reshape(scaleDer, mean4.shape); + }; + const derOffset = () => { + let offsetDer = dy; + if (mean4.rank === 1) { + offsetDer = sum2(offsetDer, reductionAxes); + } + return reshape(offsetDer, mean4.shape); + }; + return { + x: derX, + mean: derMean, + variance: derVariance, + scale: derScale, + offset: derOffset + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/GatherV2_grad.js + init_define_BUILD_VERSION(); + var gatherGradConfig = { + kernelName: GatherV2, + inputsToSave: ["x", "indices"], + gradFunc: (dy, saved, attrs) => { + const [x, indices] = saved; + const { axis } = attrs; + const parsedAxis = parseAxisParam(axis, x.shape)[0]; + const derX = () => { + const paramsShape = x.shape; + const indicesSize = indices.size; + const outerShape = paramsShape.slice(0, parsedAxis); + const outerDims = outerShape.length; + const innerShape = paramsShape.slice(axis, paramsShape.length).slice(1); + const innerDims = innerShape.length; + const outerAxesIndices = arrayRange(0, outerDims); + const innerAxesIndices = arrayRange(outerDims + 1, outerDims + 1 + innerDims); + const valuesShape = arrayConcat([outerShape, [indicesSize], innerShape]); + const values = reshape(dy, valuesShape); + const reshapedIndices = reshape(indices, [indicesSize]); + const transposeDims = arrayConcat([[outerDims], outerAxesIndices, innerAxesIndices]); + const valuesTranspose = transpose(values, transposeDims); + let paramsGrad = unsortedSegmentSum(valuesTranspose, reshapedIndices, x.shape[parsedAxis]); + const invertTransposeDims = getUndoAxesPermutation(transposeDims); + paramsGrad = transpose(paramsGrad, invertTransposeDims); + return paramsGrad; + }; + return { x: derX, indices: () => indices }; + } + }; + function arrayRange(start, stop) { + const result = []; + for (let i = start; i < stop; ++i) { + result.push(i); + } + return result; + } + function arrayConcat(arrays) { + const result = []; + for (let i = 0; i < arrays.length; ++i) { + for (let j = 0; j < arrays[i].length; ++j) { + result.push(arrays[i][j]); + } + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/GreaterEqual_grad.js + init_define_BUILD_VERSION(); + var greaterEqualGradConfig = { + kernelName: GreaterEqual, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + return { a: () => zerosLike(a), b: () => zerosLike(b) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Identity_grad.js + init_define_BUILD_VERSION(); + var identityGradConfig = { + kernelName: Identity, + gradFunc: (dy) => { + return { x: () => cast(dy, "float32") }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/IsFinite_grad.js + init_define_BUILD_VERSION(); + var isFiniteGradConfig = { + kernelName: IsFinite, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/IsInf_grad.js + init_define_BUILD_VERSION(); + var isInfGradConfig = { + kernelName: IsInf, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/IsNan_grad.js + init_define_BUILD_VERSION(); + var isNanGradConfig = { + kernelName: IsNan, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/LeakyRelu_grad.js + init_define_BUILD_VERSION(); + var leakyReluGradConfig = { + kernelName: LeakyRelu, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { alpha } = attrs; + const mask = greater(x, 0); + return { x: () => where(mask, dy, mul(dy, alpha)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Log1p_grad.js + init_define_BUILD_VERSION(); + var log1pGradConfig = { + kernelName: Log1p, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, add2(x, 1)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Log_grad.js + init_define_BUILD_VERSION(); + var logGradConfig = { + kernelName: Log, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, cast(x, "float32")) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/LogSoftmax_grad.js + init_define_BUILD_VERSION(); + var logSoftmaxGradConfig = { + kernelName: LogSoftmax, + inputsToSave: [], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const [value] = saved; + const { axis } = attrs; + return { + logits: () => { + const keepDims = true; + const softmax5 = exp(value); + return sub(dy, mul(sum2(dy, axis, keepDims), softmax5)); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/LRN_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/local_response_normalization_backprop.js + init_define_BUILD_VERSION(); + function localResponseNormalizationBackprop_(x, y, dy, depthRadius = 5, bias = 1, alpha = 1, beta = 0.5) { + const inputs = { x, y, dy }; + const attrs = { depthRadius, bias, alpha, beta }; + return ENGINE.runKernel(LRNGrad, inputs, attrs); + } + var localResponseNormalizationBackprop = op({ localResponseNormalizationBackprop_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/LRN_grad.js + var lrnGradConfig = { + kernelName: LRN, + inputsToSave: ["x"], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const [x, y] = saved; + const { depthRadius, bias, alpha, beta } = attrs; + return { + x: () => localResponseNormalizationBackprop(x, y, dy, depthRadius, bias, alpha, beta) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Max_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/min_max_grad_util.js + init_define_BUILD_VERSION(); + function gradForMinAndMax(dy, y, xOrig, origAxes) { + if (y.rank < xOrig.rank) { + y = reshape(y, expandShapeToKeepDim(y.shape, origAxes)); + } + if (dy.rank < xOrig.rank) { + dy = reshape(dy, expandShapeToKeepDim(dy.shape, origAxes)); + } + return { + x: () => { + const dx = mul(dy, cast(equal(xOrig, y), dy.dtype)); + return dx; + } + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Max_grad.js + var maxGradConfig = { + kernelName: Max, + inputsToSave: ["x"], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const maxAttrs = attrs; + const { reductionIndices } = maxAttrs; + const x = saved[0]; + const y = saved[1]; + const origAxes = parseAxisParam(reductionIndices, x.shape); + const maxGrad = gradForMinAndMax(dy, y, x, origAxes); + return { + x: () => { + return maxGrad["x"](); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Maximum_grad.js + init_define_BUILD_VERSION(); + var maximumGradConfig = { + kernelName: Maximum, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const derA = () => mul(dy, cast(greaterEqual(a, b), "float32")); + const derB = () => mul(dy, cast(less(a, b), "float32")); + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/MaxPool3D_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_3d_grad.js + init_define_BUILD_VERSION(); + function maxPool3dGrad_(dy, input2, output, filterSize, strides, pad3, dimRoundingMode) { + const $dy = convertToTensor(dy, "dy", "maxPool3dGrad"); + const $input = convertToTensor(input2, "input", "maxPool3dGrad"); + const $output = convertToTensor(output, "output", "maxPool3dGrad"); + let dy5D = $dy; + let input5D = $input; + let output5D = $output; + let reshapedTo5D = false; + if ($input.rank === 4) { + reshapedTo5D = true; + dy5D = reshape($dy, [1, $dy.shape[0], $dy.shape[1], $dy.shape[2], $dy.shape[3]]); + input5D = reshape($input, [ + 1, + $input.shape[0], + $input.shape[1], + $input.shape[2], + $input.shape[3] + ]); + output5D = reshape($output, [ + 1, + $output.shape[0], + $output.shape[1], + $output.shape[2], + $output.shape[3] + ]); + } + assert(dy5D.rank === 5, () => `Error in maxPool3dGrad: dy must be rank 5 but got rank ${dy5D.rank}.`); + assert(input5D.rank === 5, () => `Error in maxPool3dGrad: input must be rank 5 but got rank ${input5D.rank}.`); + assert(output5D.rank === 5, () => `Error in maxPool3dGrad: output must be rank 5 but got rank ${output5D.rank}.`); + checkPadOnDimRoundingMode("maxPool3dGrad", pad3, dimRoundingMode); + const inputs = { dy: dy5D, input: input5D, output: output5D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode }; + const res = ENGINE.runKernel(MaxPool3DGrad, inputs, attrs); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var maxPool3dGrad = op({ maxPool3dGrad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/MaxPool3D_grad.js + var maxPool3DGradConfig = { + kernelName: MaxPool3D, + inputsToSave: ["x"], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const [x, y] = saved; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + return { + x: () => maxPool3dGrad(dy, x, y, filterSize, strides, pad3, dimRoundingMode) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/MaxPool_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_grad.js + init_define_BUILD_VERSION(); + function maxPoolGrad_(dy, input2, output, filterSize, strides, pad3, dimRoundingMode) { + const $dy = convertToTensor(dy, "dy", "maxPoolGrad"); + const $input = convertToTensor(input2, "input", "maxPoolGrad"); + const $output = convertToTensor(output, "output", "maxPoolGrad"); + assert($input.rank === $dy.rank, () => `Rank of input (${$input.rank}) does not match rank of dy (${$dy.rank})`); + assert($dy.rank === 4, () => `Error in maxPoolGrad: dy must be rank 4 but got rank ${$dy.rank}.`); + assert($input.rank === 4, () => `Error in maxPoolGrad: input must be rank 4 but got rank ${$input.rank}.`); + checkPadOnDimRoundingMode("maxPoolGrad", pad3, dimRoundingMode); + const inputs = { dy: $dy, input: $input, output: $output }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode }; + return ENGINE.runKernel(MaxPoolGrad, inputs, attrs); + } + var maxPoolGrad = op({ maxPoolGrad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/MaxPool_grad.js + var maxPoolGradConfig = { + kernelName: MaxPool, + inputsToSave: ["x"], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const [x, y] = saved; + const { filterSize, strides, pad: pad3 } = attrs; + return { + x: () => maxPoolGrad(dy, x, y, filterSize, strides, pad3) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Mean_grad.js + init_define_BUILD_VERSION(); + var meanGradConfig = { + kernelName: Mean, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { axis } = attrs; + const axes = parseAxisParam(axis, x.shape); + const shapes = computeOutAndReduceShapes(x.shape, axes); + const reduceShape = shapes[1]; + const reduceSize = sizeFromShape(reduceShape); + const derX = () => { + const expandedDyShape = x.shape.slice(); + axes.forEach((axis2) => { + expandedDyShape[axis2] = 1; + }); + const expandedDy = reshape(dy, expandedDyShape); + const res = div(mul(expandedDy, ones2(x.shape, "float32")), reduceSize); + return res; + }; + return { x: derX }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Min_grad.js + init_define_BUILD_VERSION(); + var minGradConfig = { + kernelName: Min, + inputsToSave: ["x"], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const minAttrs = attrs; + const { axis } = minAttrs; + const [x, y] = saved; + const origAxes = parseAxisParam(axis, x.shape); + const minGrad = gradForMinAndMax(dy, y, x, origAxes); + return { + x: () => { + return minGrad["x"](); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Minimum_grad.js + init_define_BUILD_VERSION(); + var minimumGradConfig = { + kernelName: Minimum, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const derA = () => mul(dy, cast(lessEqual(a, b), "float32")); + const derB = () => mul(dy, cast(greater(a, b), "float32")); + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/MirrorPad_grad.js + init_define_BUILD_VERSION(); + var mirrorPadGradConfig = { + kernelName: MirrorPad, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const x = saved[0]; + const { paddings } = attrs; + const begin = paddings.map((p2) => p2[0]); + return { x: () => slice(dy, begin, x.shape) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Mod_grad.js + init_define_BUILD_VERSION(); + var modGradConfig = { + kernelName: Mod, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(dy, reduceAxes), a.shape); + } + return dy; + }; + const derB = () => { + const res = mul(dy, neg(floor(div(a, b)))); + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(res, reduceAxes), b.shape); + } + return res; + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Multiply_grad.js + init_define_BUILD_VERSION(); + var multiplyGradConfig = { + kernelName: Multiply, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + const res = mul(dy, cast(b, "float32")); + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(res, reduceAxes), a.shape); + } + return res; + }; + const derB = () => { + const res = mul(dy, cast(a, "float32")); + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(res, reduceAxes), b.shape); + } + return res; + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Neg_grad.js + init_define_BUILD_VERSION(); + var negGradConfig = { + kernelName: Neg, + gradFunc: (dy) => { + return { x: () => neg(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/OneHot_grad.js + init_define_BUILD_VERSION(); + var oneHotGradConfig = { + kernelName: OneHot, + inputsToSave: ["indices"], + gradFunc: (dy, saved) => { + const indices = saved[0]; + return { indices: () => zeros(indices.shape, "float32") }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/OnesLike_grad.js + init_define_BUILD_VERSION(); + var onesLikeGradConfig = { + kernelName: OnesLike, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Pack_grad.js + init_define_BUILD_VERSION(); + var packGradConfig = { + kernelName: Pack, + saveAllInputs: true, + gradFunc: (dy, saved, attrs) => { + const { axis } = attrs; + const derTensors = unstack(dy, axis); + return derTensors.map((t) => () => t); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/PadV2_grad.js + init_define_BUILD_VERSION(); + var padV2GradConfig = { + kernelName: PadV2, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const x = saved[0]; + const { paddings } = attrs; + const begin = paddings.map((p2) => p2[0]); + return { x: () => slice(dy, begin, x.shape) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Pow_grad.js + init_define_BUILD_VERSION(); + var powGradConfig = { + kernelName: Pow, + inputsToSave: ["a", "b"], + outputsToSave: [true], + gradFunc: (dy, saved) => { + const [a, b, y] = saved; + const base = a; + const exp4 = b; + const outShape = assertAndGetBroadcastShape(base.shape, exp4.shape); + const derBase = () => { + const expFloat = cast(exp4, "float32"); + let res = mul(dy, mul(expFloat, pow(base, sub(expFloat, scalar(1))))); + const reduceAxes = getReductionAxes(base.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, base.shape); + }; + const derExp = () => { + const condition = greater(base, 0); + const logBase = where(condition, log2(base), zerosLike(base)); + let res = mul(dy, mul(y, logBase)); + const reduceAxes = getReductionAxes(exp4.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, exp4.shape); + }; + return { a: derBase, b: derExp }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Prelu_grad.js + init_define_BUILD_VERSION(); + var preluGradConfig = { + kernelName: Prelu, + inputsToSave: ["x", "alpha"], + gradFunc: (dy, saved) => { + const [x, alpha] = saved; + const mask = greater(x, 0); + return { + x: () => where(mask, dy, mul(dy, alpha)), + alpha: () => { + let res = where(mask, zerosLike(dy), mul(dy, x)); + const reduceAxes = getReductionAxes(alpha.shape, dy.shape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, alpha.shape); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Prod_grad.js + init_define_BUILD_VERSION(); + function prodGradFn_(x, dy, axis) { + const expandedYShape = x.shape.slice(); + expandedYShape[axis] = 1; + const expandedDy = reshape(dy, expandedYShape); + const xCumProd = cumprod(x, axis, true, false); + const xCumRevProd = cumprod(x, axis, true, true); + const dx = mul(xCumProd, xCumRevProd); + return mul(expandedDy, dx); + } + function prodsGradFn_(x, dy, axis) { + const xRank = x.shape.length; + const finalProdAxis = xRank - axis.length; + const xPermutation = backend_util_exports.getAxesPermutation(axis, xRank); + let permutedX = x; + if (xPermutation != null) { + permutedX = transpose(x, xPermutation); + } + const newShape = permutedX.shape.slice(); + const removedShape = newShape.splice(xRank - axis.length, axis.length); + const endPartShape = removedShape.reduce((p2, c) => p2 * c, 1); + newShape.push(endPartShape); + const reshapedPermutedX = permutedX.reshape(newShape); + let prodGrad = prodGradFn_(reshapedPermutedX, dy, finalProdAxis); + prodGrad = prodGrad.reshape(permutedX.shape); + if (xPermutation != null) { + const undoPermutation = backend_util_exports.getUndoAxesPermutation(xPermutation); + prodGrad = transpose(prodGrad, undoPermutation); + } + return prodGrad; + } + var prodGradConfig = { + kernelName: Prod, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { axis } = attrs; + let axisArr = []; + if (axis === void 0 || axis === null) { + axisArr = x.shape.map((_, i) => i); + } else if (typeof axis === "number") { + axisArr = [axis]; + } else { + axisArr = axis; + } + return { x: () => prodsGradFn_(x, dy, axisArr) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/RealDiv_grad.js + init_define_BUILD_VERSION(); + var divGradConfig = { + kernelName: RealDiv, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + const res = div(dy, cast(b, "float32")); + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(res, reduceAxes), a.shape); + } + return res; + }; + const derB = () => { + let res = mul(dy, cast(a, "float32")); + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + res = reshape(sum2(res, reduceAxes), b.shape); + } + const tmp = square(b); + return neg(div(res, cast(tmp, "float32"))); + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Reciprocal_grad.js + init_define_BUILD_VERSION(); + var reciprocalGradConfig = { + kernelName: Reciprocal, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, neg(square(x))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Relu6_grad.js + init_define_BUILD_VERSION(); + var relu6GradConfig = { + kernelName: Relu6, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + const mask = mul(lessEqual(x, 6), step(x)); + return { x: () => mul(dy, cast(mask, "float32")) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Relu_grad.js + init_define_BUILD_VERSION(); + var reluGradConfig = { + kernelName: Relu, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(dy, cast(step(x), "float32")) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Reshape_grad.js + init_define_BUILD_VERSION(); + var reshapeGradConfig = { + kernelName: Reshape, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => reshape(dy, x.shape) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ResizeBilinear_grad.js + init_define_BUILD_VERSION(); + var resizeBilinearGradConfig = { + kernelName: ResizeBilinear, + inputsToSave: ["images"], + gradFunc: (dy, saved, attrs) => { + const [images] = saved; + const inputs = { dy, images }; + const imagesDer = () => ENGINE.runKernel(ResizeBilinearGrad, inputs, attrs); + return { images: imagesDer }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ResizeNearestNeighbor_grad.js + init_define_BUILD_VERSION(); + var resizeNearestNeighborGradConfig = { + kernelName: ResizeNearestNeighbor, + inputsToSave: ["images"], + gradFunc: (dy, saved, attrs) => { + const [images] = saved; + const inputs = { dy, images }; + const imagesDer = () => ENGINE.runKernel(ResizeNearestNeighborGrad, inputs, attrs); + return { images: imagesDer }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Reverse_grad.js + init_define_BUILD_VERSION(); + var reverseGradConfig = { + kernelName: Reverse, + gradFunc: (dy, saved, attrs) => { + const { dims } = attrs; + const axes = parseAxisParam(dims, dy.shape); + return { x: () => reverse(dy, axes) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Round_grad.js + init_define_BUILD_VERSION(); + var roundGradConfig = { + kernelName: Round, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Rsqrt_grad.js + init_define_BUILD_VERSION(); + var rsqrtGradConfig = { + kernelName: Rsqrt, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => neg(div(dy, mul(pow(x, 1.5), 2))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Select_grad.js + init_define_BUILD_VERSION(); + var selectGradConfig = { + kernelName: Select, + inputsToSave: ["condition"], + gradFunc: (dy, saved) => { + const [condition] = saved; + return { + condition: () => cast(zerosLike(condition), "float32"), + t: () => mul(dy, cast(condition, dy.dtype)), + e: () => mul(dy, cast(logicalNot(condition), dy.dtype)) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Selu_grad.js + init_define_BUILD_VERSION(); + var seluGradConfig = { + kernelName: Selu, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { + x: () => { + const mask = greater(x, scalar(0)); + const scaleAlpha2 = scalar(SELU_SCALEALPHA); + const scale2 = scalar(SELU_SCALE); + const greaterThanZeroDer = mul(dy, scale2); + const lessEqualZeroDer = mul(mul(dy, scaleAlpha2), exp(cast(x, "float32"))); + return where(mask, greaterThanZeroDer, lessEqualZeroDer); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sigmoid_grad.js + init_define_BUILD_VERSION(); + var sigmoidGradConfig = { + kernelName: Sigmoid, + outputsToSave: [true], + gradFunc: (dy, saved) => { + const [y] = saved; + return { x: () => mul(dy, mul(y, sub(scalar(1), y))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sign_grad.js + init_define_BUILD_VERSION(); + var signGradConfig = { + kernelName: Sign, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sin_grad.js + init_define_BUILD_VERSION(); + var sinGradConfig = { + kernelName: Sin, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(cos(cast(x, "float32")), dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sinh_grad.js + init_define_BUILD_VERSION(); + var sinhGradConfig = { + kernelName: Sinh, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(cosh(cast(x, "float32")), dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Slice_grad.js + init_define_BUILD_VERSION(); + var sliceGradConfig = { + kernelName: Slice, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { begin, size } = attrs; + const inputShape = x.shape; + const [begin_, size_] = parseSliceParams(x, begin, size); + const paddings = []; + for (let i = 0; i < dy.rank; i++) { + paddings.push([begin_[i], inputShape[i] - begin_[i] - size_[i]]); + } + return { x: () => pad(dy, paddings) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Softmax_grad.js + init_define_BUILD_VERSION(); + var softmaxGradConfig = { + kernelName: Softmax, + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const [y] = saved; + const { dim } = attrs; + const keepDims = true; + const dyTimesY = mul(dy, y); + return { + logits: () => sub(dyTimesY, mul(sum2(dyTimesY, [dim], keepDims), y)) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Softplus_grad.js + init_define_BUILD_VERSION(); + var softplusGradConfig = { + kernelName: Softplus, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(dy, sigmoid(x)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/SpaceToBatchND_grad.js + init_define_BUILD_VERSION(); + var spaceToBatchNDGradConfig = { + kernelName: SpaceToBatchND, + gradFunc: (dy, saved, attrs) => { + const { blockShape, paddings } = attrs; + return { x: () => batchToSpaceND(dy, blockShape, paddings) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/SplitV_grad.js + init_define_BUILD_VERSION(); + var splitVGradConfig = { + kernelName: SplitV, + gradFunc: (dy, saved, attrs) => { + const { axis } = attrs; + return { x: () => concat(dy, axis) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sqrt_grad.js + init_define_BUILD_VERSION(); + var sqrtGradConfig = { + kernelName: Sqrt, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, mul(sqrt(cast(x, "float32")), 2)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Square_grad.js + init_define_BUILD_VERSION(); + var squareGradConfig = { + kernelName: Square, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(dy, mul(cast(x, "float32"), 2)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/SquaredDifference_grad.js + init_define_BUILD_VERSION(); + var squaredDifferenceGradConfig = { + kernelName: SquaredDifference, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const two = scalar(2); + const derA = () => mul(dy, mul(two, sub(a, b))); + const derB = () => mul(dy, mul(two, sub(b, a))); + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Step_grad.js + init_define_BUILD_VERSION(); + var stepGradConfig = { + kernelName: Step, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sub_grad.js + init_define_BUILD_VERSION(); + var subGradConfig = { + kernelName: Sub, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + let res = dy; + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, a.shape); + }; + const derB = () => { + let res = dy; + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(neg(res), b.shape); + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sum_grad.js + init_define_BUILD_VERSION(); + var sumGradConfig = { + kernelName: Sum, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const expandedDyShape = x.shape.slice(); + const { axis } = attrs; + const axes = parseAxisParam(axis, x.shape); + axes.forEach((axis2) => { + expandedDyShape[axis2] = 1; + }); + const expandedDy = reshape(dy, expandedDyShape); + const derX = mul(expandedDy, ones2(x.shape, "float32")); + return { x: () => derX }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Tan_grad.js + init_define_BUILD_VERSION(); + var tanGradConfig = { + kernelName: Tan, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, square(cos(x))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Tanh_grad.js + init_define_BUILD_VERSION(); + var tanhGradConfig = { + kernelName: Tanh, + outputsToSave: [true], + gradFunc: (dy, saved) => { + const [y] = saved; + return { x: () => mul(sub(scalar(1), square(y)), dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Tile_grad.js + init_define_BUILD_VERSION(); + var tileGradConfig = { + kernelName: Tile, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { reps } = attrs; + const derX = () => { + let xGrad = zerosLike(x); + if (x.rank === 1) { + for (let i = 0; i < reps[0]; ++i) { + xGrad = add2(xGrad, slice(dy, [i * x.shape[0]], [x.shape[0]])); + } + } else if (x.rank === 2) { + for (let i = 0; i < reps[0]; ++i) { + for (let j = 0; j < reps[1]; ++j) { + xGrad = add2(xGrad, slice(dy, [i * x.shape[0], j * x.shape[1]], [ + x.shape[0], + x.shape[1] + ])); + } + } + } else if (x.rank === 3) { + for (let i = 0; i < reps[0]; ++i) { + for (let j = 0; j < reps[1]; ++j) { + for (let k = 0; k < reps[2]; ++k) { + xGrad = add2(xGrad, slice(dy, [i * x.shape[0], j * x.shape[1], k * x.shape[2]], [x.shape[0], x.shape[1], x.shape[2]])); + } + } + } + } else if (x.rank === 4) { + for (let i = 0; i < reps[0]; ++i) { + for (let j = 0; j < reps[1]; ++j) { + for (let k = 0; k < reps[2]; ++k) { + for (let l = 0; l < reps[3]; ++l) { + xGrad = add2(xGrad, slice(dy, [ + i * x.shape[0], + j * x.shape[1], + k * x.shape[2], + l * x.shape[3] + ], [x.shape[0], x.shape[1], x.shape[2], x.shape[3]])); + } + } + } + } + } else { + throw new Error(`Gradient for tile operation is not implemented for rank-${x.rank} tensors yet.`); + } + return xGrad; + }; + return { x: derX }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Transpose_grad.js + init_define_BUILD_VERSION(); + var transposeGradConfig = { + kernelName: Transpose, + gradFunc: (dy, saved, attrs) => { + const transposeAttrs = attrs; + const { perm } = transposeAttrs; + const undoPerm = getUndoAxesPermutation(perm); + return { x: () => transpose(dy, undoPerm) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Unpack_grad.js + init_define_BUILD_VERSION(); + var unpackGradConfig = { + kernelName: Unpack, + gradFunc: (dy, saved, attrs) => { + const unpackAttrs = attrs; + const { axis } = unpackAttrs; + return { value: () => stack(dy, axis) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/UnsortedSegmentSum_grad.js + init_define_BUILD_VERSION(); + var unsortedSegmentSumGradConfig = { + kernelName: UnsortedSegmentSum, + inputsToSave: ["segmentIds"], + gradFunc: (dy, saved) => { + const [segmentIds] = saved; + const derX = () => { + return gatherDropNegatives(dy, segmentIds); + }; + return { x: derX }; + } + }; + function gatherDropNegatives(x, indices) { + const zeroClippedIndices = maximum(indices, zerosLike(indices)); + const gathered = gather(x, zeroClippedIndices); + let isPositive = greaterEqual(indices, scalar(0, "int32")); + const numIters = gathered.rank - isPositive.rank; + for (let i = 0; i < numIters; ++i) { + isPositive = expandDims(isPositive, i + 1); + } + isPositive = logicalAnd(isPositive, ones2(gathered.shape, "bool")); + const zeroSlice = zerosLike(gathered); + return where(isPositive, gathered, zeroSlice); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ZerosLike_grad.js + init_define_BUILD_VERSION(); + var zerosLikeGradConfig = { + kernelName: ZerosLike, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/register_all_gradients.js + var gradConfigs = [ + absGradConfig, + acosGradConfig, + acoshGradConfig, + addGradConfig, + addNGradConfig, + argMaxGradConfig, + argMinGradConfig, + asinGradConfig, + asinhGradConfig, + atan2GradConfig, + atanGradConfig, + atanhGradConfig, + avgPool3DGradConfig, + avgPoolGradConfig, + batchMatMulGradConfig, + batchToSpaceNDGradConfig, + broadcastToGradConfig, + castGradConfig, + ceilGradConfig, + clipByValueGradConfig, + complexAbsGradConfig, + concatGradConfig, + conv2DBackpropInputGradConfig, + conv2DGradConfig, + conv3DGradConfig, + cosGradConfig, + coshGradConfig, + cumsumGradConfig, + depthwiseConv2dNativeGradConfig, + dilation2dGradConfig, + divGradConfig, + eluGradConfig, + erfGradConfig, + expGradConfig, + expandDimsGradConfig, + expm1GradConfig, + floorDivGradConfig, + floorGradConfig, + fusedBatchNormGradConfig, + gatherGradConfig, + greaterEqualGradConfig, + identityGradConfig, + isFiniteGradConfig, + isInfGradConfig, + isNanGradConfig, + leakyReluGradConfig, + log1pGradConfig, + logGradConfig, + logSoftmaxGradConfig, + lrnGradConfig, + maxGradConfig, + maxGradConfig, + maximumGradConfig, + maxPool3DGradConfig, + maxPoolGradConfig, + meanGradConfig, + minGradConfig, + minimumGradConfig, + mirrorPadGradConfig, + modGradConfig, + multiplyGradConfig, + negGradConfig, + oneHotGradConfig, + onesLikeGradConfig, + packGradConfig, + padV2GradConfig, + padV2GradConfig, + powGradConfig, + preluGradConfig, + prodGradConfig, + reciprocalGradConfig, + relu6GradConfig, + reluGradConfig, + reshapeGradConfig, + resizeBilinearGradConfig, + resizeNearestNeighborGradConfig, + reverseGradConfig, + roundGradConfig, + rsqrtGradConfig, + selectGradConfig, + seluGradConfig, + sigmoidGradConfig, + signGradConfig, + sinGradConfig, + sinhGradConfig, + sliceGradConfig, + softmaxGradConfig, + softplusGradConfig, + spaceToBatchNDGradConfig, + spaceToBatchNDGradConfig, + splitVGradConfig, + splitVGradConfig, + sqrtGradConfig, + squaredDifferenceGradConfig, + squareGradConfig, + stepGradConfig, + subGradConfig, + sumGradConfig, + tanGradConfig, + tanhGradConfig, + tileGradConfig, + transposeGradConfig, + unpackGradConfig, + unsortedSegmentSumGradConfig, + zerosLikeGradConfig + ]; + for (const gradientConfig of gradConfigs) { + registerGradient(gradientConfig); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/abs.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.abs = function() { + this.throwIfDisposed(); + return abs(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/acos.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.acos = function() { + this.throwIfDisposed(); + return acos(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/acosh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.acosh = function() { + this.throwIfDisposed(); + return acosh(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/add.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.add = function(b) { + this.throwIfDisposed(); + return add2(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/all.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.all = function(axis, keepDims) { + this.throwIfDisposed(); + return all(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/any.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.any = function(axis, keepDims) { + this.throwIfDisposed(); + return any(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/arg_max.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.argMax = function(axis) { + this.throwIfDisposed(); + return argMax(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/arg_min.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.argMin = function(axis) { + this.throwIfDisposed(); + return argMin(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as_scalar.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.asScalar = function() { + this.throwIfDisposed(); + assert(this.size === 1, () => "The array must have only 1 element."); + return reshape(this, []); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as_type.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.asType = function(dtype) { + this.throwIfDisposed(); + return cast(this, dtype); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as1d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.as1D = function() { + this.throwIfDisposed(); + return reshape(this, [this.size]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as2d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.as2D = function(rows, columns) { + this.throwIfDisposed(); + return reshape(this, [rows, columns]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as3d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.as3D = function(rows, columns, depth) { + this.throwIfDisposed(); + return reshape(this, [rows, columns, depth]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as4d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.as4D = function(rows, columns, depth, depth2) { + this.throwIfDisposed(); + return reshape(this, [rows, columns, depth, depth2]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as5d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.as5D = function(rows, columns, depth, depth2, depth3) { + this.throwIfDisposed(); + return reshape(this, [rows, columns, depth, depth2, depth3]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/asin.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.asin = function() { + this.throwIfDisposed(); + return asin(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/asinh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.asinh = function() { + this.throwIfDisposed(); + return asinh(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atan.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.atan = function() { + this.throwIfDisposed(); + return atan(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atan2.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.atan2 = function(b) { + this.throwIfDisposed(); + return atan2(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atanh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.atanh = function() { + this.throwIfDisposed(); + return atanh(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/avg_pool.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.avgPool = function(filterSize, strides, pad3, dimRoundingMode) { + this.throwIfDisposed(); + return avgPool(this, filterSize, strides, pad3, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/batch_to_space_nd.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.batchToSpaceND = function(blockShape, crops) { + this.throwIfDisposed(); + return batchToSpaceND(this, blockShape, crops); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/batchnorm.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.batchNorm = function(mean4, variance, offset, scale2, varianceEpsilon) { + this.throwIfDisposed(); + return batchNorm(this, mean4, variance, offset, scale2, varianceEpsilon); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/broadcast_to.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.broadcastTo = function(shape) { + this.throwIfDisposed(); + return broadcastTo(this, shape); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cast.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.cast = function(dtype) { + this.throwIfDisposed(); + return cast(this, dtype); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ceil.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.ceil = function() { + this.throwIfDisposed(); + return ceil(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/clip_by_value.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.clipByValue = function(min6, max6) { + this.throwIfDisposed(); + return clipByValue(this, min6, max6); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/concat.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.concat = function(x, axis) { + this.throwIfDisposed(); + if (x instanceof Tensor) { + x = [x]; + } + return concat([this, ...x], axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv1d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.conv1d = function(filter, stride, pad3, dataFormat, dilation, dimRoundingMode) { + this.throwIfDisposed(); + return conv1d(this, filter, stride, pad3, dataFormat, dilation, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv2d_transpose.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.conv2dTranspose = function(filter, outputShape, strides, pad3, dimRoundingMode) { + this.throwIfDisposed(); + return conv2dTranspose(this, filter, outputShape, strides, pad3, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv2d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.conv2d = function(filter, strides, pad3, dataFormat, dilations, dimRoundingMode) { + this.throwIfDisposed(); + return conv2d(this, filter, strides, pad3, dataFormat, dilations, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cos.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.cos = function() { + this.throwIfDisposed(); + return cos(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cosh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.cosh = function() { + this.throwIfDisposed(); + return cosh(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cumprod.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.cumprod = function(axis, exclusive, reverse5) { + this.throwIfDisposed(); + return cumprod(this, axis, exclusive, reverse5); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cumsum.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.cumsum = function(axis, exclusive, reverse5) { + this.throwIfDisposed(); + return cumsum(this, axis, exclusive, reverse5); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/depth_to_space.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.depthToSpace = function(blockSize, dataFormat) { + this.throwIfDisposed(); + return depthToSpace(this, blockSize, dataFormat); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/depthwise_conv2d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.depthwiseConv2d = function(filter, strides, pad3, dataFormat, dilations, dimRoundingMode) { + this.throwIfDisposed(); + return depthwiseConv2d(this, filter, strides, pad3, dataFormat, dilations, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/dilation2d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.dilation2d = function(filter, strides, pad3, dilations, dataFormat) { + this.throwIfDisposed(); + return dilation2d(this, filter, strides, pad3, dilations, dataFormat); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/div_no_nan.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.divNoNan = function(b) { + this.throwIfDisposed(); + return divNoNan(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/div.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.div = function(b) { + this.throwIfDisposed(); + return div(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/dot.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.dot = function(b) { + this.throwIfDisposed(); + return dot(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/elu.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.elu = function() { + this.throwIfDisposed(); + return elu(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/equal.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.equal = function(b) { + this.throwIfDisposed(); + return equal(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/erf.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.erf = function() { + this.throwIfDisposed(); + return erf(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/euclidean_norm.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.euclideanNorm = function(axis, keepDims) { + this.throwIfDisposed(); + return euclideanNorm(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/exp.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.exp = function() { + this.throwIfDisposed(); + return exp(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/expand_dims.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.expandDims = function(axis) { + this.throwIfDisposed(); + return expandDims(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/expm1.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.expm1 = function() { + this.throwIfDisposed(); + return expm1(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/fft.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.fft = function() { + this.throwIfDisposed(); + return fft(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/flatten.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.flatten = function() { + this.throwIfDisposed(); + return reshape(this, [this.size]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/floor.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.floor = function() { + this.throwIfDisposed(); + return floor(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/floorDiv.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.floorDiv = function(b) { + this.throwIfDisposed(); + return floorDiv(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/gather.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.gather = function(indices, axis) { + this.throwIfDisposed(); + return gather(this, indices, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/greater_equal.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.greaterEqual = function(b) { + this.throwIfDisposed(); + return greaterEqual(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/greater.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.greater = function(b) { + this.throwIfDisposed(); + return greater(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ifft.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.ifft = function() { + this.throwIfDisposed(); + return ifft(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/irfft.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.irfft = function() { + this.throwIfDisposed(); + return irfft(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_finite.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.isFinite = function() { + this.throwIfDisposed(); + return isFinite2(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_inf.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.isInf = function() { + this.throwIfDisposed(); + return isInf(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_nan.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.isNaN = function() { + this.throwIfDisposed(); + return isNaN2(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/leaky_relu.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.leakyRelu = function(alpha) { + this.throwIfDisposed(); + return leakyRelu(this, alpha); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/less_equal.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.lessEqual = function(b) { + this.throwIfDisposed(); + return lessEqual(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/less.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.less = function(b) { + this.throwIfDisposed(); + return less(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/local_response_normalization.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.localResponseNormalization = function(depthRadius, bias, alpha, beta) { + this.throwIfDisposed(); + return localResponseNormalization(this, depthRadius, bias, alpha, beta); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_sigmoid.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logSigmoid = function() { + this.throwIfDisposed(); + return logSigmoid(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_softmax.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logSoftmax = function(axis) { + this.throwIfDisposed(); + return logSoftmax(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_sum_exp.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logSumExp = function(axis, keepDims) { + this.throwIfDisposed(); + return logSumExp(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.log = function() { + this.throwIfDisposed(); + return log2(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log1p.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.log1p = function() { + this.throwIfDisposed(); + return log1p(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_and.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logicalAnd = function(b) { + this.throwIfDisposed(); + return logicalAnd(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_not.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logicalNot = function() { + this.throwIfDisposed(); + return logicalNot(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_or.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logicalOr = function(b) { + this.throwIfDisposed(); + return logicalOr(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_xor.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logicalXor = function(b) { + this.throwIfDisposed(); + return logicalXor(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mat_mul.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.matMul = function(b, transposeA, transposeB) { + this.throwIfDisposed(); + return matMul(this, b, transposeA, transposeB); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/max_pool.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.maxPool = function(filterSize, strides, pad3, dimRoundingMode) { + this.throwIfDisposed(); + return maxPool(this, filterSize, strides, pad3, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/max.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.max = function(axis, keepDims) { + this.throwIfDisposed(); + return max(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/maximum.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.maximum = function(b) { + this.throwIfDisposed(); + return maximum(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mean.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.mean = function(axis, keepDims) { + this.throwIfDisposed(); + return mean(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/min.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.min = function(axis, keepDims) { + this.throwIfDisposed(); + return min(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/minimum.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.minimum = function(b) { + this.throwIfDisposed(); + return minimum(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mirror_pad.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.mirrorPad = function(paddings, mode) { + this.throwIfDisposed(); + return mirrorPad(this, paddings, mode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mod.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.mod = function(b) { + this.throwIfDisposed(); + return mod(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mul.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.mul = function(b) { + this.throwIfDisposed(); + return mul(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/neg.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.neg = function() { + this.throwIfDisposed(); + return neg(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/norm.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.norm = function(ord, axis, keepDims) { + this.throwIfDisposed(); + return norm(this, ord, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/not_equal.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.notEqual = function(b) { + this.throwIfDisposed(); + return notEqual(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/one_hot.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.oneHot = function(depth, onValue = 1, offValue = 0) { + this.throwIfDisposed(); + return oneHot(this, depth, onValue, offValue); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ones_like.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.onesLike = function() { + this.throwIfDisposed(); + return onesLike(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pad.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.pad = function(paddings, constantValue) { + this.throwIfDisposed(); + return pad(this, paddings, constantValue); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pool.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.pool = function(windowShape, poolingType, padding, dilationRate, strides, dimRoundingMode) { + this.throwIfDisposed(); + return pool(this, windowShape, poolingType, padding, dilationRate, strides, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pow.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.pow = function(exp4) { + this.throwIfDisposed(); + return pow(this, exp4); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/prelu.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.prelu = function(alpha) { + this.throwIfDisposed(); + return prelu(this, alpha); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/prod.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.prod = function(axis, keepDims) { + this.throwIfDisposed(); + return prod(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reciprocal.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.reciprocal = function() { + this.throwIfDisposed(); + return reciprocal(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/relu.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.relu = function() { + this.throwIfDisposed(); + return relu(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/relu6.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.relu6 = function() { + this.throwIfDisposed(); + return relu6(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reshape_as.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.reshapeAs = function(x) { + this.throwIfDisposed(); + return reshape(this, x.shape); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reshape.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.reshape = function(shape) { + this.throwIfDisposed(); + return reshape(this, shape); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/resize_bilinear.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.resizeBilinear = function(newShape2D, alignCorners, halfPixelCenters) { + this.throwIfDisposed(); + return resizeBilinear(this, newShape2D, alignCorners, halfPixelCenters); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/resize_nearest_neighbor.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.resizeNearestNeighbor = function(newShape2D, alignCorners, halfFloatCenters) { + this.throwIfDisposed(); + return resizeNearestNeighbor(this, newShape2D, alignCorners, halfFloatCenters); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reverse.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.reverse = function(axis) { + this.throwIfDisposed(); + return reverse(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/rfft.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.rfft = function() { + this.throwIfDisposed(); + return rfft(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/round.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.round = function() { + this.throwIfDisposed(); + return round2(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/rsqrt.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.rsqrt = function() { + this.throwIfDisposed(); + return rsqrt(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/selu.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.selu = function() { + this.throwIfDisposed(); + return selu(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/separable_conv2d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.separableConv2d = function(depthwiseFilter, pointwiseFilter, strides, pad3, dilation, dataFormat) { + this.throwIfDisposed(); + return separableConv2d(this, depthwiseFilter, pointwiseFilter, strides, pad3, dilation, dataFormat); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sigmoid.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sigmoid = function() { + this.throwIfDisposed(); + return sigmoid(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sign.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sign = function() { + this.throwIfDisposed(); + return sign(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sin.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sin = function() { + this.throwIfDisposed(); + return sin(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sinh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sinh = function() { + this.throwIfDisposed(); + return sinh(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/slice.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.slice = function(begin, size) { + this.throwIfDisposed(); + return slice(this, begin, size); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/softmax.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.softmax = function(dim) { + this.throwIfDisposed(); + return softmax(this, dim); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/softplus.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.softplus = function() { + this.throwIfDisposed(); + return softplus(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/space_to_batch_nd.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.spaceToBatchND = function(blockShape, paddings) { + this.throwIfDisposed(); + return spaceToBatchND(this, blockShape, paddings); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/split.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.split = function(numOrSizeSplits, axis) { + this.throwIfDisposed(); + return split(this, numOrSizeSplits, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sqrt.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sqrt = function() { + this.throwIfDisposed(); + return sqrt(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/square.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.square = function() { + this.throwIfDisposed(); + return square(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/squared_difference.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.squaredDifference = function(b) { + this.throwIfDisposed(); + return squaredDifference(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/squeeze.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.squeeze = function(axis) { + this.throwIfDisposed(); + return squeeze(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/stack.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.stack = function(x, axis) { + this.throwIfDisposed(); + const tensorsToBeStacked = x instanceof Tensor ? [this, x] : [this, ...x]; + return stack(tensorsToBeStacked, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/step.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.step = function(alpha) { + this.throwIfDisposed(); + return step(this, alpha); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/strided_slice.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.stridedSlice = function(begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask) { + this.throwIfDisposed(); + return stridedSlice(this, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sub.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sub = function(b) { + this.throwIfDisposed(); + return sub(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sum.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sum = function(axis, keepDims) { + this.throwIfDisposed(); + return sum2(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tan.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.tan = function() { + this.throwIfDisposed(); + return tan(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tanh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.tanh = function() { + this.throwIfDisposed(); + return tanh2(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tile.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.tile = function(reps) { + this.throwIfDisposed(); + return tile(this, reps); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_bool.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.toBool = function() { + this.throwIfDisposed(); + return cast(this, "bool"); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_float.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.toFloat = function() { + this.throwIfDisposed(); + return cast(this, "float32"); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_int.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.toInt = function() { + this.throwIfDisposed(); + return cast(this, "int32"); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/topk.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.topk = function(k, sorted) { + this.throwIfDisposed(); + return topk(this, k, sorted); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/transpose.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.transpose = function(perm) { + this.throwIfDisposed(); + return transpose(this, perm); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unique.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.unique = function(axis) { + this.throwIfDisposed(); + return unique(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unsorted_segment_sum.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.unsortedSegmentSum = function(segmentIds, numSegments) { + this.throwIfDisposed(); + return unsortedSegmentSum(this, segmentIds, numSegments); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unstack.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.unstack = function(axis) { + this.throwIfDisposed(); + return unstack(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/where.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.where = function(condition, x) { + this.throwIfDisposed(); + return where(condition, this, x); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/zeros_like.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.zerosLike = function() { + this.throwIfDisposed(); + return zerosLike(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/flags_layers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/errors.js + init_define_BUILD_VERSION(); + var AttributeError = class extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, AttributeError.prototype); + } + }; + var RuntimeError = class extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, RuntimeError.prototype); + } + }; + var ValueError = class extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, ValueError.prototype); + } + }; + var NotImplementedError = class extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, NotImplementedError.prototype); + } + }; + var AssertionError = class extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, AssertionError.prototype); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/executor_utils.js + init_define_BUILD_VERSION(); + var LruCache = class { + constructor(maxEntries) { + this.maxEntries = maxEntries || 100; + this.cache = /* @__PURE__ */ new Map(); + } + get(key) { + let entry; + if (this.cache.has(key)) { + entry = this.cache.get(key); + this.cache.delete(key); + this.cache.set(key, entry); + } + return entry; + } + put(key, value) { + if (this.cache.has(key)) { + this.cache.delete(key); + } else if (this.cache.size >= this.maxEntries) { + const keyToDelete = this.cache.keys().next().value; + this.cache.delete(keyToDelete); + } + this.cache.set(key, value); + } + getMaxEntries() { + return this.maxEntries; + } + setMaxEntries(maxEntries) { + if (maxEntries < 0) { + throw new Error(`The maxEntries of LRU caches must be at least 0, but got ${maxEntries}.`); + } + if (this.maxEntries > maxEntries) { + for (let i = 0; i < this.maxEntries - maxEntries; i++) { + const keyToDelete = this.cache.keys().next().value; + this.cache.delete(keyToDelete); + } + } + this.maxEntries = maxEntries; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/generic_utils.js + init_define_BUILD_VERSION(); + function pyListRepeat(value, numValues) { + if (Array.isArray(value)) { + let newArray = []; + for (let i = 0; i < numValues; i++) { + newArray = newArray.concat(value); + } + return newArray; + } else { + const newArray = new Array(numValues); + newArray.fill(value); + return newArray; + } + } + function assert2(val, message) { + if (!val) { + throw new AssertionError(message); + } + } + function count(array2, refernce) { + let counter = 0; + for (const item of array2) { + if (item === refernce) { + counter++; + } + } + return counter; + } + function singletonOrArray(xs) { + if (xs.length === 1) { + return xs[0]; + } + return xs; + } + function toList(x) { + if (Array.isArray(x)) { + return x; + } + return [x]; + } + function toSnakeCase(name) { + const intermediate = name.replace(/(.)([A-Z][a-z0-9]+)/g, "$1_$2"); + const insecure = intermediate.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase(); + if (insecure[0] !== "_") { + return insecure; + } + return "private" + insecure; + } + function toCamelCase(identifier) { + if (identifier.length <= 1) { + return identifier; + } + if (identifier.indexOf("_") === -1) { + return identifier; + } + return identifier.replace(/[_]+(\w|$)/g, (m, p1) => p1.toUpperCase()); + } + var _GLOBAL_CUSTOM_OBJECTS = {}; + function serializeKerasObject(instance) { + if (instance === null || instance === void 0) { + return null; + } + const dict = {}; + dict["className"] = instance.getClassName(); + dict["config"] = instance.getConfig(); + return dict; + } + function convertNDArrayScalarsInConfig(config) { + if (config == null || typeof config !== "object") { + return; + } else if (Array.isArray(config)) { + config.forEach((configItem) => convertNDArrayScalarsInConfig(configItem)); + } else { + const fields = Object.keys(config); + for (const field of fields) { + const value = config[field]; + if (value != null && typeof value === "object") { + if (!Array.isArray(value) && value["type"] === "ndarray" && typeof value["value"] === "number") { + config[field] = value["value"]; + } else { + convertNDArrayScalarsInConfig(value); + } + } + } + } + } + function deserializeKerasObject(identifier, moduleObjects = {}, customObjects = {}, printableModuleName = "object", fastWeightInit = false) { + if (typeof identifier === "string") { + const functionName = identifier; + let fn; + if (functionName in customObjects) { + fn = customObjects[functionName]; + } else if (functionName in _GLOBAL_CUSTOM_OBJECTS) { + fn = _GLOBAL_CUSTOM_OBJECTS[functionName]; + } else { + fn = moduleObjects[functionName]; + if (fn == null) { + throw new ValueError(`Unknown ${printableModuleName}: ${identifier}. This may be due to one of the following reasons: +1. The ${printableModuleName} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code. +2. The custom ${printableModuleName} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`); + } + } + return fn; + } else { + const config = identifier; + if (config["className"] == null || config["config"] == null) { + throw new ValueError(`${printableModuleName}: Improper config format: ${JSON.stringify(config)}. +'className' and 'config' must set.`); + } + const className = config["className"]; + let cls, fromConfig; + if (className in customObjects) { + [cls, fromConfig] = customObjects[className]; + } else if (className in _GLOBAL_CUSTOM_OBJECTS) { + [cls, fromConfig] = _GLOBAL_CUSTOM_OBJECTS["className"]; + } else if (className in moduleObjects) { + [cls, fromConfig] = moduleObjects[className]; + } + if (cls == null) { + throw new ValueError(`Unknown ${printableModuleName}: ${className}. This may be due to one of the following reasons: +1. The ${printableModuleName} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code. +2. The custom ${printableModuleName} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`); + } + if (fromConfig != null) { + const customObjectsCombined = {}; + for (const key of Object.keys(_GLOBAL_CUSTOM_OBJECTS)) { + customObjectsCombined[key] = _GLOBAL_CUSTOM_OBJECTS[key]; + } + for (const key of Object.keys(customObjects)) { + customObjectsCombined[key] = customObjects[key]; + } + const nestedConfig = config["config"]; + nestedConfig["customObjects"] = customObjectsCombined; + const backupCustomObjects = Object.assign({}, _GLOBAL_CUSTOM_OBJECTS); + for (const key of Object.keys(customObjects)) { + _GLOBAL_CUSTOM_OBJECTS[key] = customObjects[key]; + } + convertNDArrayScalarsInConfig(config["config"]); + const returnObj = fromConfig(cls, config["config"], customObjects, fastWeightInit); + _GLOBAL_CUSTOM_OBJECTS = Object.assign({}, backupCustomObjects); + return returnObj; + } else { + const backupCustomObjects = Object.assign({}, _GLOBAL_CUSTOM_OBJECTS); + for (const key of Object.keys(customObjects)) { + _GLOBAL_CUSTOM_OBJECTS[key] = customObjects[key]; + } + const returnObj = new cls(config["config"]); + _GLOBAL_CUSTOM_OBJECTS = Object.assign({}, backupCustomObjects); + return returnObj; + } + } + } + function numberCompare(a, b) { + return a < b ? -1 : a > b ? 1 : 0; + } + function reverseNumberCompare(a, b) { + return -1 * numberCompare(a, b); + } + function unique2(xs) { + if (xs == null) { + return xs; + } + const out = []; + for (const x of xs) { + if (out.indexOf(x) === -1) { + out.push(x); + } + } + return out; + } + function isObjectEmpty(obj) { + if (obj == null) { + throw new ValueError(`Invalid value in obj: ${JSON.stringify(obj)}`); + } + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + return false; + } + } + return true; + } + function checkStringTypeUnionValue(values, label, value) { + if (value == null) { + return; + } + if (values.indexOf(value) < 0) { + throw new ValueError(`${value} is not a valid ${label}. Valid values are ${values} or null/undefined.`); + } + } + function checkArrayTypeAndLength(x, expectedType, minLength = 0, maxLength = Infinity) { + assert2(minLength >= 0); + assert2(maxLength >= minLength); + return Array.isArray(x) && x.length >= minLength && x.length <= maxLength && x.every((e) => typeof e === expectedType); + } + function assertPositiveInteger(value, name) { + if (Array.isArray(value)) { + util_exports.assert(value.length > 0, () => `${name} is unexpectedly an empty array.`); + value.forEach((v, i) => assertPositiveInteger(v, `element ${i + 1} of ${name}`)); + } else { + util_exports.assert(Number.isInteger(value) && value > 0, () => `Expected ${name} to be a positive integer, but got ${formatAsFriendlyString(value)}.`); + } + } + function formatAsFriendlyString(value) { + if (value === null) { + return "null"; + } else if (Array.isArray(value)) { + return "[" + value.map((v) => formatAsFriendlyString(v)).join(",") + "]"; + } else if (typeof value === "string") { + return `"${value}"`; + } else { + return `${value}`; + } + } + function debounce(f, waitMs, nowFunc) { + let lastTime = nowFunc != null ? nowFunc() : util_exports.now(); + let lastResult; + const f2 = (...args) => { + const now2 = nowFunc != null ? nowFunc() : util_exports.now(); + if (now2 - lastTime < waitMs) { + return lastResult; + } + lastTime = now2; + lastResult = f(...args); + return lastResult; + }; + return f2; + } + function mapActivationToFusedKernel(activationName) { + if (activationName === "relu") { + return "relu"; + } + if (activationName === "linear") { + return "linear"; + } + if (activationName === "elu") { + return "elu"; + } + return null; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/input_layer.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/backend/state.js + init_define_BUILD_VERSION(); + var _nextUniqueTensorId = 0; + function getNextUniqueTensorId() { + return _nextUniqueTensorId++; + } + var _uidPrefixes = {}; + function getUid(prefix = "") { + if (!(prefix in _uidPrefixes)) { + _uidPrefixes[prefix] = 0; + } + _uidPrefixes[prefix] += 1; + return prefix + _uidPrefixes[prefix].toString(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/topology.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/common.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/common.js + init_define_BUILD_VERSION(); + var VALID_DATA_FORMAT_VALUES = ["channelsFirst", "channelsLast"]; + var VALID_INTERPOLATION_FORMAT_VALUES = ["nearest", "bilinear"]; + var VALID_PADDING_MODE_VALUES = ["valid", "same", "causal"]; + var VALID_POOL_MODE_VALUES = ["max", "avg"]; + var VALID_BIDIRECTIONAL_MERGE_MODES = ["sum", "mul", "concat", "ave"]; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/common.js + var nameMap = /* @__PURE__ */ new Map(); + function checkDataFormat(value) { + checkStringTypeUnionValue(VALID_DATA_FORMAT_VALUES, "DataFormat", value); + } + function checkInterpolationFormat(value) { + checkStringTypeUnionValue(VALID_INTERPOLATION_FORMAT_VALUES, "InterpolationFormat", value); + } + function checkPaddingMode(value) { + checkStringTypeUnionValue(VALID_PADDING_MODE_VALUES, "PaddingMode", value); + } + function checkPoolMode(value) { + checkStringTypeUnionValue(VALID_POOL_MODE_VALUES, "PoolMode", value); + } + var _nameScopeStack = []; + var _nameScopeDivider = "/"; + function nameScope(name, fn) { + _nameScopeStack.push(name); + try { + const val = fn(); + _nameScopeStack.pop(); + return val; + } catch (e) { + _nameScopeStack.pop(); + throw e; + } + } + function currentNameScopePrefix() { + if (_nameScopeStack.length === 0) { + return ""; + } else { + return _nameScopeStack.join(_nameScopeDivider) + _nameScopeDivider; + } + } + function getScopedTensorName(tensorName) { + if (!isValidTensorName(tensorName)) { + throw new Error("Not a valid tensor name: '" + tensorName + "'"); + } + return currentNameScopePrefix() + tensorName; + } + function getUniqueTensorName(scopedName) { + if (!isValidTensorName(scopedName)) { + throw new Error("Not a valid tensor name: '" + scopedName + "'"); + } + if (!nameMap.has(scopedName)) { + nameMap.set(scopedName, 0); + } + const index = nameMap.get(scopedName); + nameMap.set(scopedName, nameMap.get(scopedName) + 1); + if (index > 0) { + const result = `${scopedName}_${index}`; + nameMap.set(result, 1); + return result; + } else { + return scopedName; + } + } + var tensorNameRegex = new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/); + function isValidTensorName(name) { + return !!name.match(tensorNameRegex); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/initializers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/backend/tfjs_backend.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/math_utils.js + init_define_BUILD_VERSION(); + function isInteger(x) { + return x === parseInt(x.toString(), 10); + } + function arrayProd(array2, begin, end) { + if (begin == null) { + begin = 0; + } + if (end == null) { + end = array2.length; + } + let prod5 = 1; + for (let i = begin; i < end; ++i) { + prod5 *= array2[i]; + } + return prod5; + } + function min2(array2) { + if (array2.length === 0) { + return Number.NaN; + } + let min6 = Number.POSITIVE_INFINITY; + for (let i = 0; i < array2.length; i++) { + const value = array2[i]; + if (value < min6) { + min6 = value; + } + } + return min6; + } + function max2(array2) { + if (array2.length === 0) { + return Number.NaN; + } + let max6 = Number.NEGATIVE_INFINITY; + for (let i = 0; i < array2.length; i++) { + const value = array2[i]; + if (value > max6) { + max6 = value; + } + } + return max6; + } + function range2(begin, end) { + if (end < begin) { + throw new ValueError(`end (${end}) < begin (${begin}) is forbidden.`); + } + const out = []; + for (let i = begin; i < end; ++i) { + out.push(i); + } + return out; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/backend/common.js + init_define_BUILD_VERSION(); + var _epsilon; + function epsilon() { + if (_epsilon == null) { + _epsilon = backend().epsilon(); + } + return _epsilon; + } + function imageDataFormat() { + return "channelsLast"; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/backend/tfjs_backend.js + function cast2(x, dtype) { + return cast(x, dtype); + } + function expandDims2(x, axis = -1) { + const outShape = x.shape.slice(); + if (axis < 0) { + axis = outShape.length + axis + 1; + } + outShape.splice(axis, 0, 1); + return reshape(x, outShape); + } + function repeat(x, n) { + return tidy(() => { + if (x.shape.length !== 2) { + throw new ValueError(`repeat() expects a rank-2 tensor, but received a rank-${x.shape.length} tensor.`); + } + const y = expandDims2(x, 1); + return tile2(y, [1, n, 1]); + }); + } + function flatten2(x) { + const newShape = [arrayProd(x.shape)]; + return reshape(x, newShape); + } + function batchFlatten(x) { + if (x.rank <= 1) { + throw new ValueError(`batchFlatten requires a minimum rank of 2. Got rank: ${x.rank}.`); + } + const newShape = [x.shape[0], arrayProd(x.shape, 1)]; + return reshape(x, newShape); + } + function sliceAlongFirstAxis(array2, start, size) { + return tidy(() => { + switch (array2.rank) { + case 1: + return slice1d(array2, start, size); + case 2: + return slice2d(array2, [start, 0], [size, array2.shape[1]]); + case 3: + return slice3d(array2, [start, 0, 0], [size, array2.shape[1], array2.shape[2]]); + case 4: + return slice4d(array2, [start, 0, 0, 0], [size, array2.shape[1], array2.shape[2], array2.shape[3]]); + case 5: + return slice(array2, [start, 0, 0, 0, 0], [ + size, + array2.shape[1], + array2.shape[2], + array2.shape[3], + array2.shape[4] + ]); + case 6: + return slice(array2, [start, 0, 0, 0, 0, 0], [ + size, + array2.shape[1], + array2.shape[2], + array2.shape[3], + array2.shape[4], + array2.shape[5] + ]); + default: + throw new ValueError(`sliceAlongFirstAxis() received an unsupported tensor rank: ${array2.rank}`); + } + }); + } + function sliceAlongLastAxis(array2, start, size) { + return tidy(() => { + switch (array2.rank) { + case 1: + return slice1d(array2, start, size); + case 2: + return slice2d(array2, [0, start], [array2.shape[0], size]); + case 3: + return slice3d(array2, [0, 0, start], [array2.shape[0], array2.shape[1], size]); + case 4: + return slice4d(array2, [0, 0, 0, start], [array2.shape[0], array2.shape[1], array2.shape[2], size]); + default: + throw new ValueError(`sliceAlongLastAxis() received an unsupported tensor rank: ${array2.rank}`); + } + }); + } + function sliceAlongAxis(array2, start, size, axis) { + return tidy(() => { + switch (array2.rank) { + case 1: + return slice1d(array2, start, size); + case 2: + switch (axis) { + case 1: + return sliceAlongFirstAxis(array2, start, size); + case 2: + return sliceAlongLastAxis(array2, start, size); + default: + throw new ValueError(`The axis is not within the rank of the tensor ${axis}`); + } + case 3: + switch (axis) { + case 1: + return sliceAlongFirstAxis(array2, start, size); + case 2: + return slice3d(array2, [0, start, 0], [array2.shape[0], size, array2.shape[2]]); + case 3: + return sliceAlongLastAxis(array2, start, size); + default: + throw new ValueError(`The axis is not within the rank of the tensor ${axis}`); + } + case 4: + switch (axis) { + case 1: + return sliceAlongFirstAxis(array2, start, size); + case 2: + return slice4d(array2, [0, start, 0, 0], [array2.shape[0], size, array2.shape[2], array2.shape[3]]); + case 3: + return slice4d(array2, [0, 0, start, 0], [array2.shape[0], array2.shape[1], size, array2.shape[3]]); + case 4: + return sliceAlongLastAxis(array2, start, size); + default: + throw new ValueError(`The axis is not within the rank of the tensor ${axis}`); + } + default: + throw new ValueError(`sliceAlongLastAxis() received an unsupported tensor rank: ${array2.rank}`); + } + }); + } + function concatenate(tensors, axis = -1) { + let rank; + if (axis < 0) { + rank = tensors[0].rank; + if (rank !== 0) { + axis = rank; + } else { + axis = 0; + } + } + if (axis === tensors[0].rank) { + axis = -1; + } + return concat(tensors, axis); + } + function concatAlongFirstAxis(a, b) { + switch (a.rank) { + case 1: + return concat1d([a, b]); + case 2: + return concat2d([a, b], 0); + case 3: + return concat3d([a, b], 0); + case 4: + return concat4d([a, b], 0); + default: + throw new ValueError(`concatAlongFirstAxis() received an unsupported tensor rank: ${a.rank}`); + } + } + function tile2(x, n) { + if (!Array.isArray(n)) { + n = [n]; + } + if (x.rank !== n.length) { + throw new ValueError(`The length of input n (${n.length}) does not match the number of dimensions in input x (${x.rank})`); + } + return tile(x, n); + } + function randomNormal2(shape, mean4 = 0, stddev = 1, dtype, seed) { + return randomNormal(shape, mean4, stddev, dtype, seed); + } + function dot2(a, b, activation, bias) { + if (a.rank < 2 || b.rank < 2) { + throw new NotImplementedError(`dot requires both inputs to be rank >= 2 but got x shape = ${a.shape} and y shape = ${b.shape}`); + } + if (b.rank >= 3) { + const xLastDim = a.shape.slice(-1)[0]; + const ySecondLastDim = b.shape.slice(-2)[0]; + if (xLastDim !== ySecondLastDim) { + throw new NotImplementedError(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${a.shape} and y shape = ${b.shape}`); + } + } + if (a.rank === 2 && b.rank === 2) { + const transposeA = false; + const transposeB = false; + return fused_ops_exports.matMul({ + a, + b, + transposeA, + transposeB, + bias: bias ? reshapeBias(a.rank, bias, imageDataFormat()) : null, + activation + }); + } else { + const aFirstDims = a.shape.slice(); + const aLastDim = aFirstDims.pop(); + a = reshape(a, [-1, aLastDim]); + const bShape = b.shape.slice(); + const bLastDim = bShape.pop(); + const ySecondLastDim = bShape.pop(); + const yOtherDims = [...bShape, bLastDim]; + const perm = Array.from({ length: b.rank }, (_, i) => { + if (i === 0) { + return b.rank - 2; + } else if (i <= b.rank - 2) { + return i - 1; + } + return i; + }); + b = reshape(transpose(b, perm), [ySecondLastDim, -1]); + const outputShape = [...aFirstDims, ...yOtherDims]; + const transposeA = false; + const transposeB = false; + return reshape(fused_ops_exports.matMul({ + a, + b, + transposeA, + transposeB, + bias: bias ? reshapeBias(a.rank, bias, imageDataFormat()) : null, + activation + }), outputShape); + } + } + function gather2(reference, indices, axis) { + return tidy(() => { + if (Array.isArray(indices)) { + indices = tensor1d(indices, "int32"); + } else { + indices = cast(indices, "int32"); + } + return gather(reference, indices, axis); + }); + } + function square2(x) { + return mul(x, x); + } + function reshapeBias(xRank, bias, dataFormat) { + const biasShape = bias.shape; + if (bias.rank !== 1 && bias.rank !== xRank) { + throw new ValueError(`Unexpected bias dimensions: ${bias.rank}; expected it to be 1 or ${xRank}`); + } + if (xRank === 5) { + if (dataFormat === "channelsFirst") { + if (biasShape.length === 1) { + return reshape(bias, [1, biasShape[0], 1, 1, 1]); + } else { + return reshape(bias, [1, biasShape[3], biasShape[0], biasShape[1], biasShape[2]]); + } + } else if (dataFormat === "channelsLast") { + if (biasShape.length === 1) { + return reshape(bias, [1, 1, 1, 1, biasShape[0]]); + } else { + return reshape(bias, [1].concat(biasShape)); + } + } + } else if (xRank === 4) { + if (dataFormat === "channelsFirst") { + if (biasShape.length === 1) { + return reshape(bias, [1, biasShape[0], 1, 1]); + } else { + return reshape(bias, [1, biasShape[2], biasShape[0], biasShape[1]]); + } + } else if (dataFormat === "channelsLast") { + if (biasShape.length === 1) { + return reshape(bias, [1, 1, 1, biasShape[0]]); + } else { + return reshape(bias, [1].concat(biasShape)); + } + } + } else if (xRank === 3) { + if (dataFormat === "channelsFirst") { + if (biasShape.length === 1) { + return reshape(bias, [1, biasShape[0], 1]); + } else { + return reshape(bias, [1, biasShape[1], biasShape[0]]); + } + } else if (dataFormat === "channelsLast") { + if (biasShape.length === 1) { + return reshape(bias, [1, 1, biasShape[0]]); + } else { + return reshape(bias, [1].concat(biasShape)); + } + } + } else if (xRank < 3) { + return bias; + } + throw new ValueError(`Unsupported input rank by biasAdd: ${bias.rank}`); + } + function biasAdd(x, bias, dataFormat) { + return tidy(() => { + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + checkDataFormat(dataFormat); + return add2(x, reshapeBias(x.rank, bias, dataFormat)); + }); + } + function elu2(x, alpha = 1) { + if (alpha !== 1) { + throw new NotImplementedError(`Support for alpha values other than 1 (${alpha}) is not implemented yet.`); + } + return elu(x); + } + function softsign(x) { + return tidy(() => div(x, add2(abs(x), 1))); + } + function dropout2(x, level, noiseShape, seed) { + return tidy(() => dropout(x, level, noiseShape, seed)); + } + function hardSigmoid(x) { + return tidy(() => { + const y = add2(0.5, mul(0.2, x)); + return clipByValue(y, 0, 1); + }); + } + function inTrainPhase(x, alt, training = false) { + return training ? x() : alt(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/initializer_config.js + init_define_BUILD_VERSION(); + var VALID_FAN_MODE_VALUES = ["fanIn", "fanOut", "fanAvg"]; + var VALID_DISTRIBUTION_VALUES = ["normal", "uniform", "truncatedNormal"]; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/initializers.js + function checkFanMode(value) { + checkStringTypeUnionValue(VALID_FAN_MODE_VALUES, "FanMode", value); + } + function checkDistribution(value) { + checkStringTypeUnionValue(VALID_DISTRIBUTION_VALUES, "Distribution", value); + } + var Initializer = class extends serialization_exports.Serializable { + fromConfigUsesCustomObjects() { + return false; + } + getConfig() { + return {}; + } + }; + var Zeros = class extends Initializer { + apply(shape, dtype) { + return zeros(shape, dtype); + } + }; + Zeros.className = "Zeros"; + serialization_exports.registerClass(Zeros); + var Ones = class extends Initializer { + apply(shape, dtype) { + return ones2(shape, dtype); + } + }; + Ones.className = "Ones"; + serialization_exports.registerClass(Ones); + var Constant = class extends Initializer { + constructor(args) { + super(); + if (typeof args !== "object") { + throw new ValueError(`Expected argument of type ConstantConfig but got ${args}`); + } + if (args.value === void 0) { + throw new ValueError(`config must have value set but got ${args}`); + } + this.value = args.value; + } + apply(shape, dtype) { + return tidy(() => mul(scalar(this.value), ones2(shape, dtype))); + } + getConfig() { + return { + value: this.value + }; + } + }; + Constant.className = "Constant"; + serialization_exports.registerClass(Constant); + var RandomUniform = class extends Initializer { + constructor(args) { + super(); + this.DEFAULT_MINVAL = -0.05; + this.DEFAULT_MAXVAL = 0.05; + this.minval = args.minval || this.DEFAULT_MINVAL; + this.maxval = args.maxval || this.DEFAULT_MAXVAL; + this.seed = args.seed; + } + apply(shape, dtype) { + return randomUniform(shape, this.minval, this.maxval, dtype); + } + getConfig() { + return { minval: this.minval, maxval: this.maxval, seed: this.seed }; + } + }; + RandomUniform.className = "RandomUniform"; + serialization_exports.registerClass(RandomUniform); + var RandomNormal = class extends Initializer { + constructor(args) { + super(); + this.DEFAULT_MEAN = 0; + this.DEFAULT_STDDEV = 0.05; + this.mean = args.mean || this.DEFAULT_MEAN; + this.stddev = args.stddev || this.DEFAULT_STDDEV; + this.seed = args.seed; + } + apply(shape, dtype) { + dtype = dtype || "float32"; + if (dtype !== "float32" && dtype !== "int32") { + throw new NotImplementedError(`randomNormal does not support dType ${dtype}.`); + } + return randomNormal2(shape, this.mean, this.stddev, dtype, this.seed); + } + getConfig() { + return { mean: this.mean, stddev: this.stddev, seed: this.seed }; + } + }; + RandomNormal.className = "RandomNormal"; + serialization_exports.registerClass(RandomNormal); + var TruncatedNormal = class extends Initializer { + constructor(args) { + super(); + this.DEFAULT_MEAN = 0; + this.DEFAULT_STDDEV = 0.05; + this.mean = args.mean || this.DEFAULT_MEAN; + this.stddev = args.stddev || this.DEFAULT_STDDEV; + this.seed = args.seed; + } + apply(shape, dtype) { + dtype = dtype || "float32"; + if (dtype !== "float32" && dtype !== "int32") { + throw new NotImplementedError(`truncatedNormal does not support dType ${dtype}.`); + } + return truncatedNormal(shape, this.mean, this.stddev, dtype, this.seed); + } + getConfig() { + return { mean: this.mean, stddev: this.stddev, seed: this.seed }; + } + }; + TruncatedNormal.className = "TruncatedNormal"; + serialization_exports.registerClass(TruncatedNormal); + var Identity2 = class extends Initializer { + constructor(args) { + super(); + this.gain = args.gain != null ? args.gain : 1; + } + apply(shape, dtype) { + return tidy(() => { + if (shape.length !== 2 || shape[0] !== shape[1]) { + throw new ValueError("Identity matrix initializer can only be used for 2D square matrices."); + } else { + return mul(this.gain, eye(shape[0])); + } + }); + } + getConfig() { + return { gain: this.gain }; + } + }; + Identity2.className = "Identity"; + serialization_exports.registerClass(Identity2); + function computeFans(shape, dataFormat = "channelsLast") { + let fanIn; + let fanOut; + checkDataFormat(dataFormat); + if (shape.length === 2) { + fanIn = shape[0]; + fanOut = shape[1]; + } else if ([3, 4, 5].indexOf(shape.length) !== -1) { + if (dataFormat === "channelsFirst") { + const receptiveFieldSize = arrayProd(shape, 2); + fanIn = shape[1] * receptiveFieldSize; + fanOut = shape[0] * receptiveFieldSize; + } else if (dataFormat === "channelsLast") { + const receptiveFieldSize = arrayProd(shape, 0, shape.length - 2); + fanIn = shape[shape.length - 2] * receptiveFieldSize; + fanOut = shape[shape.length - 1] * receptiveFieldSize; + } + } else { + const shapeProd = arrayProd(shape); + fanIn = Math.sqrt(shapeProd); + fanOut = Math.sqrt(shapeProd); + } + return [fanIn, fanOut]; + } + var VarianceScaling = class extends Initializer { + constructor(args) { + super(); + if (args.scale < 0) { + throw new ValueError(`scale must be a positive float. Got: ${args.scale}`); + } + this.scale = args.scale == null ? 1 : args.scale; + this.mode = args.mode == null ? "fanIn" : args.mode; + checkFanMode(this.mode); + this.distribution = args.distribution == null ? "normal" : args.distribution; + checkDistribution(this.distribution); + this.seed = args.seed; + } + apply(shape, dtype) { + const fans = computeFans(shape); + const fanIn = fans[0]; + const fanOut = fans[1]; + let scale2 = this.scale; + if (this.mode === "fanIn") { + scale2 /= Math.max(1, fanIn); + } else if (this.mode === "fanOut") { + scale2 /= Math.max(1, fanOut); + } else { + scale2 /= Math.max(1, (fanIn + fanOut) / 2); + } + if (this.distribution === "normal") { + const stddev = Math.sqrt(scale2); + dtype = dtype || "float32"; + if (dtype !== "float32" && dtype !== "int32") { + throw new NotImplementedError(`${this.getClassName()} does not support dType ${dtype}.`); + } + return truncatedNormal(shape, 0, stddev, dtype, this.seed); + } else { + const limit = Math.sqrt(3 * scale2); + return randomUniform(shape, -limit, limit, dtype); + } + } + getConfig() { + return { + scale: this.scale, + mode: this.mode, + distribution: this.distribution, + seed: this.seed + }; + } + }; + VarianceScaling.className = "VarianceScaling"; + serialization_exports.registerClass(VarianceScaling); + var GlorotUniform = class extends VarianceScaling { + constructor(args) { + super({ + scale: 1, + mode: "fanAvg", + distribution: "uniform", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + GlorotUniform.className = "GlorotUniform"; + serialization_exports.registerClass(GlorotUniform); + var GlorotNormal = class extends VarianceScaling { + constructor(args) { + super({ + scale: 1, + mode: "fanAvg", + distribution: "normal", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + GlorotNormal.className = "GlorotNormal"; + serialization_exports.registerClass(GlorotNormal); + var HeNormal = class extends VarianceScaling { + constructor(args) { + super({ + scale: 2, + mode: "fanIn", + distribution: "normal", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + HeNormal.className = "HeNormal"; + serialization_exports.registerClass(HeNormal); + var HeUniform = class extends VarianceScaling { + constructor(args) { + super({ + scale: 2, + mode: "fanIn", + distribution: "uniform", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + HeUniform.className = "HeUniform"; + serialization_exports.registerClass(HeUniform); + var LeCunNormal = class extends VarianceScaling { + constructor(args) { + super({ + scale: 1, + mode: "fanIn", + distribution: "normal", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + LeCunNormal.className = "LeCunNormal"; + serialization_exports.registerClass(LeCunNormal); + var LeCunUniform = class extends VarianceScaling { + constructor(args) { + super({ + scale: 1, + mode: "fanIn", + distribution: "uniform", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + LeCunUniform.className = "LeCunNormal"; + serialization_exports.registerClass(LeCunUniform); + var Orthogonal = class extends Initializer { + constructor(args) { + super(); + this.DEFAULT_GAIN = 1; + this.gain = args.gain == null ? this.DEFAULT_GAIN : args.gain; + this.seed = args.seed; + if (this.seed != null) { + throw new NotImplementedError("Random seed is not implemented for Orthogonal Initializer yet."); + } + } + apply(shape, dtype) { + return tidy(() => { + if (shape.length < 2) { + throw new NotImplementedError("Shape must be at least 2D."); + } + if (shape[0] * shape[1] > 2e3) { + console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${shape[0] * shape[1]}) elements: Slowness may result.`); + } + const normalizedShape = shape[0] > shape[1] ? [shape[1], shape[0]] : shape; + const a = randomNormal2(normalizedShape, 0, 1, "float32"); + let q = linalg.gramSchmidt(a); + if (shape[0] > shape[1]) { + q = transpose(q); + } + return mul(this.gain, q); + }); + } + getConfig() { + return { + gain: this.gain, + seed: this.seed + }; + } + }; + Orthogonal.className = "Orthogonal"; + serialization_exports.registerClass(Orthogonal); + var INITIALIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP = { + "constant": "Constant", + "glorotNormal": "GlorotNormal", + "glorotUniform": "GlorotUniform", + "heNormal": "HeNormal", + "heUniform": "HeUniform", + "identity": "Identity", + "leCunNormal": "LeCunNormal", + "leCunUniform": "LeCunUniform", + "ones": "Ones", + "orthogonal": "Orthogonal", + "randomNormal": "RandomNormal", + "randomUniform": "RandomUniform", + "truncatedNormal": "TruncatedNormal", + "varianceScaling": "VarianceScaling", + "zeros": "Zeros" + }; + function deserializeInitializer(config, customObjects = {}) { + return deserializeKerasObject(config, serialization_exports.SerializationMap.getMap().classNameMap, customObjects, "initializer"); + } + function serializeInitializer(initializer) { + return serializeKerasObject(initializer); + } + function getInitializer(identifier) { + if (typeof identifier === "string") { + const className = identifier in INITIALIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP ? INITIALIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP[identifier] : identifier; + if (className === "GlorotNormal") { + return new GlorotNormal(); + } else if (className === "GlorotUniform") { + return new GlorotUniform(); + } else if (className === "HeNormal") { + return new HeNormal(); + } else if (className === "HeUniform") { + return new HeUniform(); + } else if (className === "LeCunNormal") { + return new LeCunNormal(); + } else if (className === "LeCunUniform") { + return new LeCunUniform(); + } else { + const config = {}; + config["className"] = className; + config["config"] = {}; + return deserializeInitializer(config); + } + } else if (identifier instanceof Initializer) { + return identifier; + } else { + return deserializeInitializer(identifier); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/types_utils.js + init_define_BUILD_VERSION(); + function isArrayOfShapes(x) { + return Array.isArray(x) && Array.isArray(x[0]); + } + function normalizeShapeList(x) { + if (x.length === 0) { + return []; + } + if (!Array.isArray(x[0])) { + return [x]; + } + return x; + } + function getExactlyOneTensor(xs) { + let x; + if (Array.isArray(xs)) { + if (xs.length !== 1) { + throw new ValueError(`Expected Tensor length to be 1; got ${xs.length}`); + } + x = xs[0]; + } else { + x = xs; + } + return x; + } + function getExactlyOneShape(shapes) { + if (Array.isArray(shapes) && Array.isArray(shapes[0])) { + if (shapes.length === 1) { + shapes = shapes; + return shapes[0]; + } else { + throw new ValueError(`Expected exactly 1 Shape; got ${shapes.length}`); + } + } else { + return shapes; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/variable_utils.js + init_define_BUILD_VERSION(); + function countParamsInWeights(weights) { + let count2 = 0; + for (const weight of weights) { + if (weight.shape.length === 0) { + count2 += 1; + } else { + count2 += weight.shape.reduce((a, b) => a * b); + } + } + return count2; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/variables.js + init_define_BUILD_VERSION(); + var DEFAULT_VARIABLE_NAME_PREFIX = "Variable"; + var LayerVariable = class { + constructor(val, dtype = "float32", name = DEFAULT_VARIABLE_NAME_PREFIX, trainable = true, constraint = null) { + this.dtype = dtype == null ? "float32" : dtype; + this.shape = val.shape; + this.id = getNextUniqueTensorId(); + name = name == null ? DEFAULT_VARIABLE_NAME_PREFIX : name; + this.originalName = getScopedTensorName(name); + this.name = getUniqueTensorName(this.originalName); + this.trainable_ = trainable; + this.constraint = constraint; + this.val = variable(val, this.trainable_, this.name, this.dtype); + } + read() { + this.assertNotDisposed(); + return this.val; + } + write(newVal) { + this.assertNotDisposed(); + checkShapesMatch(this.val, newVal); + if (this.val.id !== newVal.id) { + this.val.assign(newVal); + if (this.constraint != null) { + this.val.assign(this.constraint.apply(this.val)); + } + } + return this; + } + dispose() { + this.assertNotDisposed(); + this.val.dispose(); + } + assertNotDisposed() { + if (this.val.isDisposed) { + throw new Error(`LayersVariable ${this.name} is already disposed.`); + } + } + get trainable() { + return this.trainable_; + } + set trainable(trainable) { + this.trainable_ = trainable; + this.val.trainable = trainable; + } + }; + function checkShapesMatch(x, y) { + if (x.shape.toString() !== y.shape.toString()) { + throw new Error("Shape mismatch: " + JSON.stringify(x.shape) + " vs. " + JSON.stringify(y.shape)); + } + } + function batchGetValue(xs) { + return xs.map((x) => x.read()); + } + function batchSetValue(variablesAndValues) { + variablesAndValues.forEach((variableAndValue) => { + const variable2 = variableAndValue[0]; + variable2.write(variableAndValue[1]); + }); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/topology.js + var InputSpec = class { + constructor(args) { + this.dtype = args.dtype; + this.shape = args.shape; + if (args.shape != null) { + this.ndim = args.shape.length; + } else { + this.ndim = args.ndim; + } + this.maxNDim = args.maxNDim; + this.minNDim = args.minNDim; + this.axes = args.axes || {}; + } + }; + var SymbolicTensor = class { + constructor(dtype, shape, sourceLayer, inputs, callArgs, name, outputTensorIndex) { + this.dtype = dtype; + this.shape = shape; + this.sourceLayer = sourceLayer; + this.inputs = inputs; + this.callArgs = callArgs; + this.outputTensorIndex = outputTensorIndex; + this.id = getNextUniqueTensorId(); + if (name != null) { + this.originalName = getScopedTensorName(name); + this.name = getUniqueTensorName(this.originalName); + } + this.rank = shape.length; + } + }; + var _nextNodeID = 0; + var Node = class { + constructor(args, callArgs) { + this.callArgs = callArgs; + this.id = _nextNodeID++; + this.outboundLayer = args.outboundLayer; + this.inboundLayers = args.inboundLayers; + this.nodeIndices = args.nodeIndices; + this.tensorIndices = args.tensorIndices; + this.inputTensors = args.inputTensors; + this.outputTensors = args.outputTensors; + this.inputMasks = args.inputMasks; + this.outputMasks = args.outputMasks; + this.inputShapes = args.inputShapes; + this.outputShapes = args.outputShapes; + for (const layer of args.inboundLayers) { + if (layer != null) { + layer.outboundNodes.push(this); + } + } + args.outboundLayer.inboundNodes.push(this); + } + getConfig() { + const inboundNames = []; + for (const layer of this.inboundLayers) { + if (layer != null) { + inboundNames.push(layer.name); + } else { + inboundNames.push(null); + } + } + return { + outboundLayer: this.outboundLayer ? this.outboundLayer.name : null, + inboundLayers: inboundNames, + nodeIndices: this.nodeIndices, + tensorIndices: this.tensorIndices + }; + } + }; + var _nextLayerID = 0; + var Layer = class extends serialization_exports.Serializable { + constructor(args = {}) { + super(); + this._callHook = null; + this._addedWeightNames = []; + this._stateful = false; + this.id = _nextLayerID++; + this.activityRegularizer = null; + this.inputSpec = null; + this.supportsMasking = false; + this._trainableWeights = []; + this._nonTrainableWeights = []; + this._losses = []; + this._updates = []; + this._built = false; + this.inboundNodes = []; + this.outboundNodes = []; + let name = args.name; + if (!name) { + const prefix = this.getClassName(); + name = toSnakeCase(prefix) + "_" + getUid(prefix); + } + this.name = name; + this.trainable_ = args.trainable == null ? true : args.trainable; + if (args.inputShape != null || args.batchInputShape != null) { + let batchInputShape; + if (args.batchInputShape != null) { + batchInputShape = args.batchInputShape; + } else if (args.inputShape != null) { + let batchSize = null; + if (args.batchSize != null) { + batchSize = args.batchSize; + } + batchInputShape = [batchSize].concat(args.inputShape); + } + this.batchInputShape = batchInputShape; + let dtype = args.dtype; + if (dtype == null) { + dtype = args.inputDType; + } + if (dtype == null) { + dtype = "float32"; + } + this.dtype = dtype; + } + if (args.weights != null) { + this.initialWeights = args.weights; + } else { + this.initialWeights = null; + } + this._refCount = null; + this.fastWeightInitDuringBuild = false; + } + static nodeKey(layer, nodeIndex) { + return layer.name + "_ib-" + nodeIndex.toString(); + } + getNodeAtIndex(nodeIndex, attrName) { + if (this.inboundNodes.length === 0) { + throw new RuntimeError(`The layer has never been called and thus has no defined ${attrName}.`); + } + if (this.inboundNodes.length <= nodeIndex) { + throw new ValueError(`Asked to get ${attrName} at node ${nodeIndex}, but the layer has only ${this.inboundNodes.length} inbound nodes.`); + } + return this.inboundNodes[nodeIndex]; + } + getInputAt(nodeIndex) { + return singletonOrArray(this.getNodeAtIndex(nodeIndex, "input").inputTensors); + } + getOutputAt(nodeIndex) { + return singletonOrArray(this.getNodeAtIndex(nodeIndex, "output").outputTensors); + } + get input() { + if (this.inboundNodes.length > 1) { + throw new AttributeError(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use \`getInputAt(nodeIndex)\` instead.`); + } else if (this.inboundNodes.length === 0) { + throw new AttributeError(`Layer ${this.name} is not connected, no input to return.`); + } + return singletonOrArray(this.getNodeAtIndex(0, "input").inputTensors); + } + get output() { + if (this.inboundNodes.length === 0) { + throw new AttributeError(`Layer ${this.name} has no inbound nodes.`); + } + if (this.inboundNodes.length > 1) { + throw new AttributeError(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`); + } + return singletonOrArray(this.getNodeAtIndex(0, "output").outputTensors); + } + get losses() { + return this._losses; + } + calculateLosses() { + return this.losses.map((lossFn) => lossFn()); + } + get updates() { + return this._updates; + } + get built() { + return this._built; + } + set built(built) { + this._built = built; + } + get trainable() { + return this.trainable_; + } + set trainable(trainable) { + this._trainableWeights.forEach((w) => w.trainable = trainable); + this.trainable_ = trainable; + } + get trainableWeights() { + if (this.trainable_) { + return this._trainableWeights.filter((w) => w.trainable); + } else { + return []; + } + } + set trainableWeights(weights) { + this._trainableWeights = weights; + } + get nonTrainableWeights() { + if (this.trainable) { + return this._trainableWeights.filter((w) => !w.trainable).concat(this._nonTrainableWeights); + } else { + return this._trainableWeights.concat(this._nonTrainableWeights); + } + } + set nonTrainableWeights(weights) { + this._nonTrainableWeights = weights; + } + get weights() { + return this.trainableWeights.concat(this.nonTrainableWeights); + } + get stateful() { + return this._stateful; + } + resetStates() { + if (!this.stateful) { + throw new Error("Cannot call the resetStates() method of a non-stateful Layer object."); + } + } + assertInputCompatibility(inputs) { + inputs = toList(inputs); + if (this.inputSpec == null || this.inputSpec.length === 0) { + return; + } + const inputSpec = toList(this.inputSpec); + if (inputs.length !== inputSpec.length) { + throw new ValueError(`Layer ${this.name} expects ${inputSpec.length} inputs, but it received ${inputs.length} input tensors. Input received: ${inputs}`); + } + for (let inputIndex = 0; inputIndex < inputs.length; inputIndex++) { + const x = inputs[inputIndex]; + const spec = inputSpec[inputIndex]; + if (spec == null) { + continue; + } + const ndim = x.rank; + if (spec.ndim != null) { + if (ndim !== spec.ndim) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name}: expected ndim=${spec.ndim}, found ndim=${ndim}`); + } + } + if (spec.maxNDim != null) { + if (ndim > spec.maxNDim) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name}: expected max_ndim=${spec.maxNDim}, found ndim=${ndim}`); + } + } + if (spec.minNDim != null) { + if (ndim < spec.minNDim) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name}: expected min_ndim=${spec.minNDim}, found ndim=${ndim}.`); + } + } + if (spec.dtype != null) { + if (x.dtype !== spec.dtype) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name} : expected dtype=${spec.dtype}, found dtype=${x.dtype}.`); + } + } + if (spec.axes) { + const xShape = x.shape; + for (const key in spec.axes) { + const axis = Number(key); + const value = spec.axes[key]; + const xShapeAtAxis = axis >= 0 ? xShape[axis] : xShape[xShape.length + axis]; + if (value != null && [value, null].indexOf(xShapeAtAxis) === -1) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name}: expected axis ${axis} of input shape to have value ${value} but got shape ${xShape}.`); + } + } + } + if (spec.shape != null) { + for (let i = 0; i < spec.shape.length; ++i) { + const specDim = spec.shape[i]; + const dim = x.shape[i]; + if (specDim != null && dim != null) { + if (specDim !== dim) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name}: expected shape=${spec.shape}, found shape=${x.shape}.`); + } + } + } + } + } + } + call(inputs, kwargs) { + return inputs; + } + invokeCallHook(inputs, kwargs) { + if (this._callHook != null) { + this._callHook(inputs, kwargs); + } + } + setCallHook(callHook) { + this._callHook = callHook; + } + clearCallHook() { + this._callHook = null; + } + apply(inputs, kwargs) { + kwargs = kwargs || {}; + this.assertNotDisposed(); + const inputsList = toList(inputs); + let allAreSymbolic = true; + for (const input2 of inputsList) { + if (!(input2 instanceof SymbolicTensor)) { + allAreSymbolic = false; + break; + } + } + let noneAreSymbolic = true; + for (const input2 of inputsList) { + if (input2 instanceof SymbolicTensor) { + noneAreSymbolic = false; + break; + } + } + if (allAreSymbolic === noneAreSymbolic) { + throw new ValueError("Arguments to apply() must be all SymbolicTensors or all Tensors"); + } + return nameScope(this.name, () => { + if (!this.built) { + this.assertInputCompatibility(inputs); + const inputShapes = []; + for (const xElem of toList(inputs)) { + inputShapes.push(xElem.shape); + } + this.build(singletonOrArray(inputShapes)); + this.built = true; + if (this.initialWeights) { + this.setWeights(this.initialWeights); + } + if (this._refCount === null && noneAreSymbolic) { + this._refCount = 1; + } + } + this.assertInputCompatibility(inputs); + if (noneAreSymbolic) { + let output = this.call(inputs, kwargs); + const outputList = toList(output); + const outputListCopy = []; + for (let x of outputList) { + if (inputsList.indexOf(x) !== -1) { + x = x.clone(); + } + outputListCopy.push(x); + } + output = singletonOrArray(outputListCopy); + if (this.activityRegularizer != null) { + throw new NotImplementedError("Layer invocation in the presence of activity regularizer(s) is not supported yet."); + } + return output; + } else { + const inputShape = collectInputShape(inputs); + const outputShape = this.computeOutputShape(inputShape); + let output; + const outputDType = guessOutputDType(inputs); + this.warnOnIncompatibleInputShape(Array.isArray(inputs) ? inputShape[0] : inputShape); + if (outputShape != null && outputShape.length > 0 && Array.isArray(outputShape[0])) { + output = outputShape.map((shape, index) => new SymbolicTensor(outputDType, shape, this, toList(inputs), kwargs, this.name, index)); + } else { + output = new SymbolicTensor(outputDType, outputShape, this, toList(inputs), kwargs, this.name); + } + this.addInboundNode(inputs, output, null, null, inputShape, outputShape, kwargs); + this._refCount++; + if (this.activityRegularizer != null) { + throw new NotImplementedError("Layer invocation in the presence of activity regularizer(s) is not supported yet."); + } + return output; + } + }); + } + warnOnIncompatibleInputShape(inputShape) { + if (this.batchInputShape == null) { + return; + } else if (inputShape.length !== this.batchInputShape.length) { + console.warn(`The rank of the input tensor provided (shape: ${JSON.stringify(inputShape)}) does not match that of the batchInputShape (${JSON.stringify(this.batchInputShape)}) of the layer ${this.name}`); + } else { + let dimMismatch = false; + this.batchInputShape.forEach((dimension, i) => { + if (dimension != null && inputShape[i] != null && inputShape[i] !== dimension) { + dimMismatch = true; + } + }); + if (dimMismatch) { + console.warn(`The shape of the input tensor (${JSON.stringify(inputShape)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`); + } + } + } + get outputShape() { + if (this.inboundNodes == null || this.inboundNodes.length === 0) { + throw new AttributeError(`The layer ${this.name} has never been called and thus has no defined output shape.`); + } + const allOutputShapes = []; + for (const node of this.inboundNodes) { + const shapeString = JSON.stringify(node.outputShapes); + if (allOutputShapes.indexOf(shapeString) === -1) { + allOutputShapes.push(shapeString); + } + } + if (allOutputShapes.length === 1) { + const outputShapes = this.inboundNodes[0].outputShapes; + if (Array.isArray(outputShapes) && Array.isArray(outputShapes[0]) && outputShapes.length === 1) { + return outputShapes[0]; + } else { + return outputShapes; + } + } else { + throw new AttributeError(`The layer ${this.name} has multiple inbound nodes with different output shapes. Hence the notion of "output shape" is ill-defined for the layer.`); + } + } + countParams() { + if (!this.built) { + throw new RuntimeError(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`); + } + return countParamsInWeights(this.weights); + } + build(inputShape) { + this.built = true; + } + getWeights(trainableOnly = false) { + return batchGetValue(trainableOnly ? this.trainableWeights : this.weights); + } + setWeights(weights) { + tidy(() => { + const params = this.weights; + if (params.length !== weights.length) { + throw new ValueError(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${weights.length}, but the layer was expecting ${params.length} weights. Provided weights: ${weights}...`); + } + if (params.length === 0) { + return; + } + const weightValueTuples = []; + const paramValues = batchGetValue(params); + for (let i = 0; i < paramValues.length; ++i) { + const pv = paramValues[i]; + const p2 = params[i]; + const w = weights[i]; + if (!util_exports.arraysEqual(pv.shape, w.shape)) { + throw new ValueError(`Layer weight shape ${pv.shape} not compatible with provided weight shape ${w.shape}`); + } + weightValueTuples.push([p2, w]); + } + batchSetValue(weightValueTuples); + }); + } + addWeight(name, shape, dtype, initializer, regularizer, trainable, constraint, getInitializerFunc) { + if (this._addedWeightNames.indexOf(name) !== -1) { + throw new ValueError(`Duplicate weight name ${name} for layer ${this.name}`); + } + this._addedWeightNames.push(name); + if (dtype == null) { + dtype = "float32"; + } + if (this.fastWeightInitDuringBuild) { + initializer = getInitializerFunc != null ? getInitializerFunc() : getInitializer("zeros"); + } + const initValue = initializer.apply(shape, dtype); + const weight = new LayerVariable(initValue, dtype, name, trainable, constraint); + initValue.dispose(); + if (regularizer != null) { + this.addLoss(() => regularizer.apply(weight.read())); + } + if (trainable == null) { + trainable = true; + } + if (trainable) { + this._trainableWeights.push(weight); + } else { + this._nonTrainableWeights.push(weight); + } + return weight; + } + setFastWeightInitDuringBuild(value) { + this.fastWeightInitDuringBuild = value; + } + addLoss(losses) { + if (losses == null || Array.isArray(losses) && losses.length === 0) { + return; + } + losses = toList(losses); + if (this._losses !== void 0 && this._losses !== null) { + this.losses.push(...losses); + } + } + computeOutputShape(inputShape) { + return inputShape; + } + computeMask(inputs, mask) { + if (!this.supportsMasking) { + if (mask != null) { + if (Array.isArray(mask)) { + mask.forEach((maskElement) => { + if (maskElement != null) { + throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`); + } + }); + } else { + throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`); + } + } + return null; + } + return mask; + } + addInboundNode(inputTensors, outputTensors, inputMasks, outputMasks, inputShapes, outputShapes, kwargs = null) { + const inputTensorList = toList(inputTensors); + outputTensors = toList(outputTensors); + inputMasks = toList(inputMasks); + outputMasks = toList(outputMasks); + inputShapes = normalizeShapeList(inputShapes); + outputShapes = normalizeShapeList(outputShapes); + const inboundLayers = []; + const nodeIndices = []; + const tensorIndices = []; + for (const x of inputTensorList) { + inboundLayers.push(x.sourceLayer); + nodeIndices.push(x.nodeIndex); + tensorIndices.push(x.tensorIndex); + } + new Node({ + outboundLayer: this, + inboundLayers, + nodeIndices, + tensorIndices, + inputTensors: inputTensorList, + outputTensors, + inputMasks, + outputMasks, + inputShapes, + outputShapes + }, kwargs); + for (let i = 0; i < outputTensors.length; i++) { + outputTensors[i].sourceLayer = this; + outputTensors[i].nodeIndex = this.inboundNodes.length - 1; + outputTensors[i].tensorIndex = i; + } + } + getConfig() { + const config = { name: this.name, trainable: this.trainable }; + if (this.batchInputShape != null) { + config["batchInputShape"] = this.batchInputShape; + } + if (this.dtype != null) { + config["dtype"] = this.dtype; + } + return config; + } + disposeWeights() { + this.weights.forEach((weight) => weight.dispose()); + return this.weights.length; + } + assertNotDisposed() { + if (this._refCount === 0) { + throw new Error(`Layer '${this.name}' is already disposed.`); + } + } + dispose() { + if (!this.built) { + throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`); + } + if (this._refCount === null) { + throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`); + } + this.assertNotDisposed(); + let numDisposedVariables = 0; + if (--this._refCount === 0) { + numDisposedVariables = this.disposeWeights(); + } + return { refCountAfterDispose: this._refCount, numDisposedVariables }; + } + }; + function collectInputShape(inputTensors) { + inputTensors = toList(inputTensors); + const shapes = []; + for (const x of inputTensors) { + shapes.push(x.shape); + } + return singletonOrArray(shapes); + } + function guessOutputDType(inputTensors) { + return "float32"; + } + function getSourceInputs(tensor2, layer, nodeIndex) { + if (layer == null || nodeIndex != null && nodeIndex > 0) { + layer = tensor2.sourceLayer; + nodeIndex = tensor2.nodeIndex; + } + if (layer.inboundNodes.length === 0) { + return [tensor2]; + } else { + const node = layer.inboundNodes[nodeIndex]; + if (node.inboundLayers.length === 0) { + return node.inputTensors; + } else { + const sourceTensors = []; + for (let i = 0; i < node.inboundLayers.length; i++) { + const x = node.inputTensors[i]; + const layer2 = node.inboundLayers[i]; + const nodeIndex2 = node.nodeIndices[i]; + const previousSources = getSourceInputs(x, layer2, nodeIndex2); + for (const x2 of previousSources) { + if (sourceTensors.indexOf(x2) === -1) { + sourceTensors.push(x2); + } + } + } + return sourceTensors; + } + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/input_layer.js + var InputLayer = class extends Layer { + constructor(args) { + super({ + dtype: args.dtype, + name: args.name != null ? args.name : getUid("input").toString() + }); + if (args.batchSize == null) { + args.batchSize = null; + } + if (args.sparse == null) { + args.sparse = false; + } + this.trainable = false; + this.built = true; + this.sparse = args.sparse; + if (args.inputShape != null && args.batchInputShape != null) { + throw new ValueError("Only provide the inputShape OR batchInputShape argument to inputLayer, not both at the same time."); + } + let batchInputShape = args.batchInputShape; + if (batchInputShape == null) { + if (args.inputShape == null) { + throw new ValueError("An InputLayer should be passed either a `batchInputShape` or an `inputShape`."); + } else { + batchInputShape = [args.batchSize].concat(args.inputShape); + } + } else { + if (args.batchSize != null) { + throw new ValueError("Cannot specify batchSize if batchInputShape is specified when creating an InputLayer."); + } + } + const dtype = args.dtype || "float32"; + this.batchInputShape = batchInputShape; + this.dtype = dtype; + this.inputSpec = [{ shape: batchInputShape }]; + const inputTensor = new SymbolicTensor(this.dtype, this.batchInputShape, this, [], {}, this.name); + inputTensor.nodeIndex = 0; + inputTensor.tensorIndex = 0; + new Node({ + outboundLayer: this, + inboundLayers: [], + nodeIndices: [], + tensorIndices: [], + inputTensors: [inputTensor], + outputTensors: [inputTensor], + inputMasks: [null], + outputMasks: [null], + inputShapes: [batchInputShape], + outputShapes: [batchInputShape] + }); + } + apply(inputs, kwargs) { + throw new ValueError(`Cannot pass any input to an InputLayer's apply() method. InputLayer name: ${this.name}`); + } + dispose() { + return { refCountAfterDispose: this._refCount, numDisposedVariables: 0 }; + } + getConfig() { + return { + batchInputShape: this.batchInputShape, + dtype: this.dtype, + sparse: this.sparse, + name: this.name + }; + } + }; + InputLayer.className = "InputLayer"; + serialization_exports.registerClass(InputLayer); + function Input(config) { + if (config.batchShape == null && config.shape == null) { + throw new Error("Please provide to Input either a `shape` or a `batchShape` argument. Note that `shape` does not include the batch dimension."); + } + if (config.batchShape != null && config.shape != null) { + throw new ValueError("Please provide either a `shape` or `batchShape` argument to Input, but not both."); + } + let batchShape = config.batchShape; + if (config.shape != null && batchShape == null) { + batchShape = [null].concat(config.shape); + } + let dtype = config.dtype; + if (dtype == null) { + dtype = "float32"; + } + const inputLayer = new InputLayer({ + batchInputShape: batchShape, + name: config.name, + dtype, + sparse: config.sparse + }); + const outputs = inputLayer.inboundNodes[0].outputTensors; + return outputs[0]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/executor.js + function assertFeedCompatibility(key, val) { + if (key.dtype == null || key.dtype === val.dtype) { + return val; + } + try { + return cast(val, key.dtype); + } catch (err) { + throw new ValueError(`The dtype of the feed (${val.dtype}) can not be cast to the dtype of the key '${key.name}' (${key.dtype}).`); + } + } + var FeedDict = class { + constructor(feeds) { + this.id2Value = {}; + this.id2Mask = {}; + this.name2Id = {}; + if (feeds instanceof FeedDict) { + for (const id in feeds.id2Value) { + this.id2Value[id] = feeds.id2Value[id]; + if (id in feeds.id2Mask) { + this.id2Mask[id] = feeds.id2Mask[id]; + } + } + } else { + if (feeds == null) { + return; + } + for (const feed of feeds) { + this.add(feed.key, feed.value); + } + } + } + add(key, value, mask) { + if (this.id2Value[key.id] == null) { + this.id2Value[key.id] = assertFeedCompatibility(key, value); + this.name2Id[key.name] = key.id; + if (mask != null) { + this.id2Mask[key.id] = mask; + } + } else { + throw new ValueError(`Duplicate key: name=${key.name}, id=${key.id}`); + } + return this; + } + addFeed(feed) { + this.add(feed.key, feed.value); + } + hasKey(key) { + return this.id2Value[key.id] != null; + } + names() { + return Object.keys(this.name2Id); + } + getValue(key) { + if (key instanceof SymbolicTensor) { + if (this.id2Value[key.id] == null) { + throw new ValueError(`Nonexistent key: ${key.name}`); + } else { + return this.id2Value[key.id]; + } + } else { + const id = this.name2Id[key]; + if (id == null) { + throw new ValueError(`Feed dict has no SymbolicTensor name: ${key}`); + } + return this.id2Value[id]; + } + } + getMask(key) { + if (key instanceof SymbolicTensor) { + if (this.id2Value[key.id] == null) { + throw new ValueError(`Nonexistent key: ${key.name}`); + } else { + return this.id2Mask[key.id]; + } + } else { + const id = this.name2Id[key]; + if (id == null) { + throw new ValueError(`Feed dict has no SymbolicTensor name: ${key}`); + } + return this.id2Mask[id]; + } + } + disposeMasks() { + if (this.id2Mask != null) { + dispose(this.id2Mask); + } + } + }; + var cachedSorted = new LruCache(); + var cachedRecipientCounts = new LruCache(); + function updateCacheMaxEntries(maxEntries) { + if (cachedSorted != null) { + cachedSorted.setMaxEntries(maxEntries); + } + if (cachedRecipientCounts != null) { + cachedRecipientCounts.setMaxEntries(maxEntries); + } + } + function execute(fetches, feedDict, kwargs, probe) { + const training = kwargs == null ? false : kwargs["training"]; + const arrayFetches = Array.isArray(fetches); + const fetchArray = arrayFetches ? fetches : [fetches]; + const outputNames = fetchArray.map((t) => t.name); + const finalOutputs = []; + const feedNames = feedDict.names(); + for (const outputName of outputNames) { + if (feedNames.indexOf(outputName) !== -1) { + finalOutputs.push(feedDict.getValue(outputName)); + } else { + finalOutputs.push(null); + } + } + if (probe != null) { + probe.maxNumTensors = -Infinity; + probe.minNumTensors = Infinity; + } + const fetchAndFeedKey = outputNames.join(",") + "|" + feedDict.names().sort().join(","); + let sorted = cachedSorted.get(fetchAndFeedKey); + let recipientCounts; + if (sorted == null) { + const out = getTopologicalSortAndRecipientCounts(fetchArray, feedDict); + sorted = out.sorted; + recipientCounts = out.recipientCounts; + cachedSorted.put(fetchAndFeedKey, sorted); + cachedRecipientCounts.put(fetchAndFeedKey, recipientCounts); + } + recipientCounts = {}; + if (!training) { + Object.assign(recipientCounts, cachedRecipientCounts.get(fetchAndFeedKey)); + } + const internalFeedDict = new FeedDict(feedDict); + for (let i = 0; i < sorted.length; ++i) { + if (probe != null) { + const numTensors = memory().numTensors; + if (numTensors > probe.maxNumTensors) { + probe.maxNumTensors = numTensors; + } + if (numTensors < probe.minNumTensors) { + probe.minNumTensors = numTensors; + } + } + const symbolic = sorted[i]; + const srcLayer = symbolic.sourceLayer; + if (srcLayer instanceof InputLayer) { + continue; + } + const inputValues = []; + const inputMasks = []; + const tensorsToDispose = []; + let maskExists = false; + for (const input2 of symbolic.inputs) { + const value = internalFeedDict.getValue(input2); + const mask = internalFeedDict.getMask(input2); + inputValues.push(value); + inputMasks.push(mask); + if (mask != null) { + maskExists = true; + } + if (!training) { + recipientCounts[input2.name]--; + if (recipientCounts[input2.name] === 0 && !feedDict.hasKey(input2) && outputNames.indexOf(input2.name) === -1 && !value.isDisposed && input2.sourceLayer.stateful !== true) { + tensorsToDispose.push(value); + } + } + } + if (maskExists) { + kwargs = kwargs || {}; + kwargs["mask"] = inputMasks[0]; + } + const outputTensors = toList(srcLayer.apply(inputValues, kwargs)); + let outputMask = null; + if (srcLayer.supportsMasking) { + outputMask = srcLayer.computeMask(inputValues, inputMasks); + } + const layerOutputs = getNodeOutputs(symbolic); + const outputSymbolicTensors = Array.isArray(layerOutputs) ? layerOutputs : [layerOutputs]; + for (let i2 = 0; i2 < outputSymbolicTensors.length; ++i2) { + if (!internalFeedDict.hasKey(outputSymbolicTensors[i2])) { + internalFeedDict.add(outputSymbolicTensors[i2], outputTensors[i2], Array.isArray(outputMask) ? outputMask[0] : outputMask); + } + const index = outputNames.indexOf(outputSymbolicTensors[i2].name); + if (index !== -1) { + finalOutputs[index] = outputTensors[i2]; + } + } + if (!training) { + dispose(tensorsToDispose); + } + } + internalFeedDict.disposeMasks(); + return arrayFetches ? finalOutputs : finalOutputs[0]; + } + function getTopologicalSortAndRecipientCounts(fetches, feedDict) { + util_exports.assert(fetches != null && fetches.length > 0, () => `Expected at least one fetch, got none`); + let finalSorted = []; + let finalRecipientMap = {}; + if (fetches.length === 1) { + const out = getTopologicalSortAndRecipientCountsForOneFetch(fetches[0], feedDict); + finalSorted = out.sorted; + finalRecipientMap = out.recipientMap; + } else { + const visited = /* @__PURE__ */ new Set(); + for (const fetch4 of fetches) { + const { sorted, recipientMap } = getTopologicalSortAndRecipientCountsForOneFetch(fetch4, feedDict); + for (const symbolicTensor of sorted) { + if (!visited.has(symbolicTensor.name)) { + finalSorted.push(symbolicTensor); + visited.add(symbolicTensor.name); + } + } + for (const name in recipientMap) { + if (finalRecipientMap[name] == null) { + finalRecipientMap[name] = /* @__PURE__ */ new Set(); + } + recipientMap[name].forEach((recipient) => finalRecipientMap[name].add(recipient)); + } + } + } + return { + sorted: finalSorted, + recipientCounts: recipientMap2Counts(finalRecipientMap) + }; + } + function recipientMap2Counts(recipientMap) { + const recipientCounts = {}; + for (const name in recipientMap) { + recipientCounts[name] = recipientMap[name].size; + } + return recipientCounts; + } + function getTopologicalSortAndRecipientCountsForOneFetch(fetch4, feedDict) { + const visited = /* @__PURE__ */ new Set(); + const sorted = []; + const recipientMap = {}; + for (const key of feedDict.names()) { + visited.add(key); + } + const stack2 = []; + const marks = []; + stack2.push(fetch4); + while (stack2.length > 0) { + const top = stack2[stack2.length - 1]; + if (visited.has(top.name)) { + stack2.pop(); + continue; + } + const topIsMarked = marks[marks.length - 1] === stack2.length - 1; + if (top.inputs.length === 0 || topIsMarked) { + stack2.pop(); + sorted.push(top); + visited.add(top.name); + if (topIsMarked) { + marks.pop(); + } + } else { + marks.push(stack2.length - 1); + for (const input2 of top.inputs) { + if (recipientMap[input2.name] == null) { + recipientMap[input2.name] = /* @__PURE__ */ new Set(); + } + recipientMap[input2.name].add(top.name); + if (visited.has(input2.name)) { + continue; + } + stack2.push(input2); + } + } + } + return { sorted, recipientMap }; + } + function getNodeOutputs(fetch4) { + let layerOutputs; + if (fetch4.sourceLayer.inboundNodes.length === 1) { + layerOutputs = fetch4.sourceLayer.output; + } else { + let nodeIndex = null; + for (let i = 0; i < fetch4.sourceLayer.inboundNodes.length; ++i) { + for (const outputTensor of fetch4.sourceLayer.inboundNodes[i].outputTensors) { + if (outputTensor.id === fetch4.id) { + nodeIndex = i; + break; + } + } + } + layerOutputs = fetch4.sourceLayer.getOutputAt(nodeIndex); + } + return layerOutputs; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/flags_layers.js + var ENV3 = env(); + ENV3.registerFlag("TOPOLOGICAL_SORT_CACHE_MAX_ENTRIES", () => 100, updateCacheMaxEntries); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_constraints.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/constraints.js + init_define_BUILD_VERSION(); + function calcL2Norms(w, axis) { + return tidy(() => sqrt(sum2(mul(w, w), axis, true))); + } + var Constraint = class extends serialization_exports.Serializable { + getConfig() { + return {}; + } + }; + var MaxNorm = class extends Constraint { + constructor(args) { + super(); + this.defaultMaxValue = 2; + this.defaultAxis = 0; + this.maxValue = args.maxValue != null ? args.maxValue : this.defaultMaxValue; + this.axis = args.axis != null ? args.axis : this.defaultAxis; + } + apply(w) { + return tidy(() => { + const norms = calcL2Norms(w, this.axis); + const desired = clipByValue(norms, 0, this.maxValue); + return mul(w, div(desired, add2(epsilon(), norms))); + }); + } + getConfig() { + return { maxValue: this.maxValue, axis: this.axis }; + } + }; + MaxNorm.className = "MaxNorm"; + serialization_exports.registerClass(MaxNorm); + var UnitNorm = class extends Constraint { + constructor(args) { + super(); + this.defaultAxis = 0; + this.axis = args.axis != null ? args.axis : this.defaultAxis; + } + apply(w) { + return tidy(() => div(w, add2(epsilon(), calcL2Norms(w, this.axis)))); + } + getConfig() { + return { axis: this.axis }; + } + }; + UnitNorm.className = "UnitNorm"; + serialization_exports.registerClass(UnitNorm); + var NonNeg = class extends Constraint { + apply(w) { + return relu(w); + } + }; + NonNeg.className = "NonNeg"; + serialization_exports.registerClass(NonNeg); + var MinMaxNorm = class extends Constraint { + constructor(args) { + super(); + this.defaultMinValue = 0; + this.defaultMaxValue = 1; + this.defaultRate = 1; + this.defaultAxis = 0; + this.minValue = args.minValue != null ? args.minValue : this.defaultMinValue; + this.maxValue = args.maxValue != null ? args.maxValue : this.defaultMaxValue; + this.rate = args.rate != null ? args.rate : this.defaultRate; + this.axis = args.axis != null ? args.axis : this.defaultAxis; + } + apply(w) { + return tidy(() => { + const norms = calcL2Norms(w, this.axis); + const desired = add2(mul(this.rate, clipByValue(norms, this.minValue, this.maxValue)), mul(1 - this.rate, norms)); + return mul(w, div(desired, add2(epsilon(), norms))); + }); + } + getConfig() { + return { + minValue: this.minValue, + maxValue: this.maxValue, + rate: this.rate, + axis: this.axis + }; + } + }; + MinMaxNorm.className = "MinMaxNorm"; + serialization_exports.registerClass(MinMaxNorm); + var CONSTRAINT_IDENTIFIER_REGISTRY_SYMBOL_MAP = { + "maxNorm": "MaxNorm", + "minMaxNorm": "MinMaxNorm", + "nonNeg": "NonNeg", + "unitNorm": "UnitNorm" + }; + function serializeConstraint(constraint) { + return serializeKerasObject(constraint); + } + function deserializeConstraint(config, customObjects = {}) { + return deserializeKerasObject(config, serialization_exports.SerializationMap.getMap().classNameMap, customObjects, "constraint"); + } + function getConstraint(identifier) { + if (identifier == null) { + return null; + } + if (typeof identifier === "string") { + const className = identifier in CONSTRAINT_IDENTIFIER_REGISTRY_SYMBOL_MAP ? CONSTRAINT_IDENTIFIER_REGISTRY_SYMBOL_MAP[identifier] : identifier; + const config = { className, config: {} }; + return deserializeConstraint(config); + } else if (identifier instanceof Constraint) { + return identifier; + } else { + return deserializeConstraint(identifier); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_initializers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_layers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/base_callbacks.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/logs.js + init_define_BUILD_VERSION(); + async function resolveScalarsInLogs(logs) { + if (logs == null) { + return; + } + const promises = []; + const keys = []; + const scalarsToDispose = []; + for (const key in logs) { + const value = logs[key]; + if (typeof value !== "number") { + const valueScalar = value; + promises.push(valueScalar.data()); + keys.push(key); + scalarsToDispose.push(valueScalar); + } + } + if (promises.length > 0) { + const values = await Promise.all(promises); + for (let i = 0; i < values.length; ++i) { + logs[keys[i]] = values[i][0]; + } + dispose(scalarsToDispose); + } + } + function disposeTensorsInLogs(logs) { + if (logs == null) { + return; + } + for (const key in logs) { + const value = logs[key]; + if (typeof value !== "number") { + value.dispose(); + } + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/base_callbacks.js + var ModelLoggingVerbosity; + (function(ModelLoggingVerbosity2) { + ModelLoggingVerbosity2[ModelLoggingVerbosity2["SILENT"] = 0] = "SILENT"; + ModelLoggingVerbosity2[ModelLoggingVerbosity2["VERBOSE"] = 1] = "VERBOSE"; + })(ModelLoggingVerbosity || (ModelLoggingVerbosity = {})); + var DEFAULT_YIELD_EVERY_MS = 125; + var BaseCallback = class { + constructor() { + this.validationData = null; + } + setParams(params) { + this.params = params; + } + async onEpochBegin(epoch, logs) { + } + async onEpochEnd(epoch, logs) { + } + async onBatchBegin(batch, logs) { + } + async onBatchEnd(batch, logs) { + } + async onTrainBegin(logs) { + } + async onTrainEnd(logs) { + } + setModel(model3) { + } + }; + var CallbackList = class { + constructor(callbacks2, queueLength = 10) { + if (callbacks2 == null) { + callbacks2 = []; + } + this.callbacks = callbacks2; + this.queueLength = queueLength; + } + append(callback) { + this.callbacks.push(callback); + } + setParams(params) { + for (const callback of this.callbacks) { + callback.setParams(params); + } + } + setModel(model3) { + for (const callback of this.callbacks) { + callback.setModel(model3); + } + } + async onEpochBegin(epoch, logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onEpochBegin(epoch, logs); + } + } + async onEpochEnd(epoch, logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onEpochEnd(epoch, logs); + } + } + async onBatchBegin(batch, logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onBatchBegin(batch, logs); + } + } + async onBatchEnd(batch, logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onBatchEnd(batch, logs); + } + } + async onTrainBegin(logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onTrainBegin(logs); + } + } + async onTrainEnd(logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onTrainEnd(logs); + } + } + }; + var BaseLogger = class extends BaseCallback { + constructor() { + super(); + } + async onEpochBegin(epoch) { + this.seen = 0; + this.totals = {}; + } + async onBatchEnd(batch, logs) { + if (logs == null) { + logs = {}; + } + const batchSize = logs["size"] == null ? 0 : logs["size"]; + this.seen += batchSize; + for (const key in logs) { + const value = logs[key]; + if (typeof value === "number") { + if (!this.totals.hasOwnProperty(key)) { + this.totals[key] = 0; + } + this.totals[key] = this.totals[key] + value * batchSize; + } else { + let oldTotalsToDispose; + if (key in this.totals) { + oldTotalsToDispose = this.totals[key]; + } else { + this.totals[key] = 0; + } + const total = tidy(() => add2(this.totals[key], mul(value, batchSize))); + this.totals[key] = total; + if (oldTotalsToDispose != null) { + oldTotalsToDispose.dispose(); + } + } + } + } + async onEpochEnd(epoch, logs) { + if (logs != null) { + for (const key of this.params["metrics"]) { + if (this.totals[key] == null) { + continue; + } + if (typeof this.totals[key] === "number") { + logs[key] = this.totals[key] / this.seen; + } else { + tidy(() => { + const log5 = mul(div(1, this.seen), this.totals[key]); + logs[key] = log5; + this.totals[key].dispose(); + keep(logs[key]); + }); + } + } + } + } + }; + var History = class extends BaseCallback { + async onTrainBegin(logs) { + this.epoch = []; + this.history = {}; + } + async onEpochEnd(epoch, logs) { + if (logs == null) { + logs = {}; + } + this.epoch.push(epoch); + for (const key in logs) { + if (this.history[key] == null) { + this.history[key] = []; + } + this.history[key].push(logs[key]); + } + } + async syncData() { + const promises = []; + const keys = []; + const indices = []; + for (const key in this.history) { + const valueArray = this.history[key]; + for (let i = 0; i < valueArray.length; ++i) { + if (typeof valueArray[i] !== "number") { + const valueScalar = valueArray[i]; + promises.push(valueScalar.data()); + keys.push(key); + indices.push(i); + } + } + } + const values = await Promise.all(promises); + for (let n = 0; n < values.length; ++n) { + const tensorToDispose = this.history[keys[n]][indices[n]]; + tensorToDispose.dispose(); + this.history[keys[n]][indices[n]] = values[n][0]; + } + } + }; + var CustomCallback = class extends BaseCallback { + constructor(args, yieldEvery) { + super(); + this.currentEpoch = 0; + this.nowFunc = args.nowFunc; + this.nextFrameFunc = args.nextFrameFunc || nextFrame; + this.yieldEvery = yieldEvery || "auto"; + if (this.yieldEvery === "auto") { + this.yieldEvery = DEFAULT_YIELD_EVERY_MS; + } + if (this.yieldEvery === "never" && args.onYield != null) { + throw new Error("yieldEvery is `never` but you provided an `onYield` callback. Either change `yieldEvery` or remove the callback"); + } + if (util_exports.isNumber(this.yieldEvery)) { + this.maybeWait = debounce(this.maybeWait.bind(this), this.yieldEvery, this.nowFunc); + } + this.trainBegin = args.onTrainBegin; + this.trainEnd = args.onTrainEnd; + this.epochBegin = args.onEpochBegin; + this.epochEnd = args.onEpochEnd; + this.batchBegin = args.onBatchBegin; + this.batchEnd = args.onBatchEnd; + this.yield = args.onYield; + } + async maybeWait(epoch, batch, logs) { + const ps = []; + if (this.yield != null) { + await resolveScalarsInLogs(logs); + ps.push(this.yield(epoch, batch, logs)); + } + ps.push(this.nextFrameFunc()); + await Promise.all(ps); + } + async onEpochBegin(epoch, logs) { + this.currentEpoch = epoch; + if (this.epochBegin != null) { + await resolveScalarsInLogs(logs); + await this.epochBegin(epoch, logs); + } + } + async onEpochEnd(epoch, logs) { + const ps = []; + if (this.epochEnd != null) { + await resolveScalarsInLogs(logs); + ps.push(this.epochEnd(epoch, logs)); + } + if (this.yieldEvery === "epoch") { + ps.push(this.nextFrameFunc()); + } + await Promise.all(ps); + } + async onBatchBegin(batch, logs) { + if (this.batchBegin != null) { + await resolveScalarsInLogs(logs); + await this.batchBegin(batch, logs); + } + } + async onBatchEnd(batch, logs) { + const ps = []; + if (this.batchEnd != null) { + await resolveScalarsInLogs(logs); + ps.push(this.batchEnd(batch, logs)); + } + if (this.yieldEvery === "batch") { + ps.push(this.nextFrameFunc()); + } else if (util_exports.isNumber(this.yieldEvery)) { + ps.push(this.maybeWait(this.currentEpoch, batch, logs)); + } + await Promise.all(ps); + } + async onTrainBegin(logs) { + if (this.trainBegin != null) { + await resolveScalarsInLogs(logs); + await this.trainBegin(logs); + } + } + async onTrainEnd(logs) { + if (this.trainEnd != null) { + await resolveScalarsInLogs(logs); + await this.trainEnd(logs); + } + } + }; + function standardizeCallbacks(callbacks2, yieldEvery) { + if (callbacks2 == null) { + callbacks2 = {}; + } + if (callbacks2 instanceof BaseCallback) { + return [callbacks2]; + } + if (Array.isArray(callbacks2) && callbacks2[0] instanceof BaseCallback) { + return callbacks2; + } + const callbackConfigs = toList(callbacks2); + return callbackConfigs.map((callbackConfig) => new CustomCallback(callbackConfig, yieldEvery)); + } + var CallbackConstructorRegistry = class { + constructor() { + } + static registerCallbackConstructor(verbosityLevel, callbackConstructor) { + util_exports.assert(verbosityLevel >= 0 && Number.isInteger(verbosityLevel), () => `Verbosity level is expected to be an integer >= 0, but got ${verbosityLevel}`); + CallbackConstructorRegistry.checkForDuplicate(callbackConstructor); + if (CallbackConstructorRegistry.constructors[verbosityLevel] == null) { + CallbackConstructorRegistry.constructors[verbosityLevel] = []; + } + CallbackConstructorRegistry.constructors[verbosityLevel].push(callbackConstructor); + } + static checkForDuplicate(callbackConstructor) { + for (const levelName in CallbackConstructorRegistry.constructors) { + const constructors = CallbackConstructorRegistry.constructors[+levelName]; + constructors.forEach((ctor) => { + if (ctor === callbackConstructor) { + throw new ValueError("Duplicate callback constructor."); + } + }); + } + } + static clear() { + CallbackConstructorRegistry.constructors = {}; + } + static createCallbacks(verbosityLevel) { + const constructors = []; + for (const levelName in CallbackConstructorRegistry.constructors) { + const level = +levelName; + if (verbosityLevel >= level) { + constructors.push(...CallbackConstructorRegistry.constructors[level]); + } + } + return constructors.map((ctor) => new ctor()); + } + }; + CallbackConstructorRegistry.constructors = {}; + function configureCallbacks(callbacks2, verbose, epochs, initialEpoch, numTrainSamples, stepsPerEpoch, batchSize, doValidation, callbackMetrics) { + const history = new History(); + const actualCallbacks = [ + new BaseLogger(), + ...CallbackConstructorRegistry.createCallbacks(verbose) + ]; + if (callbacks2 != null) { + actualCallbacks.push(...callbacks2); + } + actualCallbacks.push(history); + const callbackList = new CallbackList(actualCallbacks); + callbackList.setParams({ + epochs, + initialEpoch, + samples: numTrainSamples, + steps: stepsPerEpoch, + batchSize, + verbose, + doValidation, + metrics: callbackMetrics + }); + return { callbackList, history }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/serialization.js + init_define_BUILD_VERSION(); + function deserialize(config, customObjects = {}, fastWeightInit = false) { + return deserializeKerasObject(config, serialization_exports.SerializationMap.getMap().classNameMap, customObjects, "layer", fastWeightInit); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/losses.js + init_define_BUILD_VERSION(); + function l2Normalize(x, axis) { + return tidy(() => { + if (x.dtype !== "float32") { + x = cast(x, "float32"); + } + const squareSum = sum2(square2(x), axis, true); + const epsilonTensor = fill(squareSum.shape, epsilon()); + const norm2 = sqrt(maximum(squareSum, epsilonTensor)); + return div(x, norm2); + }); + } + function meanSquaredError(yTrue, yPred) { + return tidy(() => mean(square2(sub(yPred, yTrue)), -1)); + } + function meanAbsoluteError(yTrue, yPred) { + return tidy(() => mean(abs(sub(yPred, yTrue)), -1)); + } + function meanAbsolutePercentageError(yTrue, yPred) { + return tidy(() => { + const diff = sub(yTrue, yPred); + const clippedTrue = clipByValue(abs(yTrue), epsilon(), Number.MAX_VALUE); + const absResult = abs(div(diff, clippedTrue)); + return mul(100, mean(absResult, -1)); + }); + } + function meanSquaredLogarithmicError(yTrue, yPred) { + return tidy(() => { + const clippedPred = clipByValue(yPred, epsilon(), Number.MAX_VALUE); + const firstLog = log2(add2(1, clippedPred)); + const clippedTrue = clipByValue(yTrue, epsilon(), Number.MAX_VALUE); + const secondLog = log2(add2(1, clippedTrue)); + return mean(square2(sub(firstLog, secondLog)), -1); + }); + } + function squaredHinge(yTrue, yPred) { + return tidy(() => { + const maxResult = maximum(0, sub(1, mul(yTrue, yPred))); + return mean(square2(maxResult), -1); + }); + } + function hinge(yTrue, yPred) { + return tidy(() => { + const maxResult = maximum(0, sub(1, mul(yTrue, yPred))); + return mean(maxResult, -1); + }); + } + function categoricalHinge(yTrue, yPred) { + return tidy(() => { + const pos = sum2(mul(yTrue, yPred), -1); + const neg4 = max(mul(sub(1, yTrue), yPred), -1); + return maximum(0, add2(1, sub(neg4, pos))); + }); + } + function logcosh(yTrue, yPred) { + return tidy(() => { + const log22 = Math.log(2); + const predictionDiff = sub(yPred, yTrue); + const logcoshResult = sub(add2(predictionDiff, softplus(mul(-2, predictionDiff))), log22); + return mean(logcoshResult, -1); + }); + } + function categoricalCrossentropy(target, output, fromLogits = false) { + return tidy(() => { + if (fromLogits) { + output = softmax(output); + } else { + const outputSum = sum2(output, output.shape.length - 1, true); + output = div(output, outputSum); + } + output = clipByValue(output, epsilon(), 1 - epsilon()); + return neg(sum2(mul(cast(target, "float32"), log2(output)), output.shape.length - 1)); + }); + } + function sparseCategoricalCrossentropy(target, output, fromLogits = false) { + return tidy(() => { + const flatTarget = cast(floor(flatten2(target)), "int32"); + output = clipByValue(output, epsilon(), 1 - epsilon()); + const outputShape = output.shape; + const oneHotTarget = reshape(oneHot(flatTarget, outputShape[outputShape.length - 1]), outputShape); + return categoricalCrossentropy(oneHotTarget, output, fromLogits); + }); + } + function sigmoidCrossEntropyWithLogits(labels, logits) { + if (!util_exports.arraysEqual(labels.shape, logits.shape)) { + throw new ValueError(`logits and labels must have the same shape, but got shapes ${JSON.stringify(labels.shape)} and ${JSON.stringify(logits.shape)}`); + } + return tidy(() => { + const reluLogits = relu(logits); + const negAbsLogits = neg(abs(logits)); + return add2(sub(reluLogits, mul(logits, labels)), log1p(exp(negAbsLogits))); + }); + } + function binaryCrossentropy(yTrue, yPred) { + return tidy(() => { + let y; + y = clipByValue(yPred, epsilon(), 1 - epsilon()); + y = log2(div(y, sub(1, y))); + return mean(sigmoidCrossEntropyWithLogits(yTrue, y), -1); + }); + } + function kullbackLeiblerDivergence(yTrue, yPred) { + return tidy(() => { + const clippedTrue = clipByValue(yTrue, epsilon(), 1); + const clippedPred = clipByValue(yPred, epsilon(), 1); + return sum2(mul(yTrue, log2(div(clippedTrue, clippedPred))), -1); + }); + } + function poisson(yTrue, yPred) { + return tidy(() => { + const logPred = log2(add2(epsilon(), yPred)); + return mean(sub(yPred, mul(yTrue, logPred)), -1); + }); + } + function cosineProximity(yTrue, yPred) { + return tidy(() => { + const trueNormalized = l2Normalize(yTrue, -1); + const predNormalized = l2Normalize(yPred, -1); + const trueXPred = mul(trueNormalized, predNormalized); + return neg(sum2(trueXPred, -1)); + }); + } + var lossesMap = { + meanSquaredError, + meanAbsoluteError, + meanAbsolutePercentageError, + meanSquaredLogarithmicError, + squaredHinge, + hinge, + categoricalHinge, + logcosh, + categoricalCrossentropy, + sparseCategoricalCrossentropy, + binaryCrossentropy, + kullbackLeiblerDivergence, + poisson, + cosineProximity + }; + function get(identifierOrFn) { + if (typeof identifierOrFn === "string") { + if (identifierOrFn in lossesMap) { + return lossesMap[identifierOrFn]; + } + let errMsg = `Unknown loss ${identifierOrFn}`; + if (identifierOrFn.toLowerCase().includes("softmaxcrossentropy")) { + errMsg = `Unknown loss ${identifierOrFn}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`; + } + throw new ValueError(errMsg); + } else { + return identifierOrFn; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/metrics.js + init_define_BUILD_VERSION(); + function binaryAccuracy(yTrue, yPred) { + return tidy(() => { + const threshold3 = mul(0.5, onesLike(yPred)); + const yPredThresholded = cast2(greater(yPred, threshold3), yTrue.dtype); + return mean(equal(yTrue, yPredThresholded), -1); + }); + } + function categoricalAccuracy(yTrue, yPred) { + return tidy(() => cast2(equal(argMax(yTrue, -1), argMax(yPred, -1)), "float32")); + } + function truePositives(yTrue, yPred) { + return tidy(() => { + return cast(sum2(logicalAnd(equal(yTrue, 1), equal(yPred, 1))), "float32"); + }); + } + function falsePositives(yTrue, yPred) { + return tidy(() => { + return cast(sum2(logicalAnd(equal(yTrue, 0), equal(yPred, 1))), "float32"); + }); + } + function precision(yTrue, yPred) { + return tidy(() => { + const tp = truePositives(yTrue, yPred); + const fp = falsePositives(yTrue, yPred); + const denominator = add2(tp, fp); + return cast(where(greater(denominator, 0), div(tp, denominator), 0), "float32"); + }); + } + function binaryCrossentropy2(yTrue, yPred) { + return binaryCrossentropy(yTrue, yPred); + } + function sparseCategoricalAccuracy(yTrue, yPred) { + if (yTrue.rank === yPred.rank) { + yTrue = squeeze(yTrue, [yTrue.rank - 1]); + } + yPred = argMax(yPred, -1); + if (yPred.dtype !== yTrue.dtype) { + yPred = cast(yPred, yTrue.dtype); + } + return cast(equal(yTrue, yPred), "float32"); + } + var mse = meanSquaredError; + var MSE = meanSquaredError; + var mae = meanAbsoluteError; + var MAE = meanAbsoluteError; + var mape = meanAbsolutePercentageError; + var MAPE = meanAbsolutePercentageError; + var categoricalCrossentropy2 = categoricalCrossentropy; + var cosine = cosineProximity; + var sparseCategoricalCrossentropy2 = sparseCategoricalCrossentropy; + var metricsMap = { + binaryAccuracy, + categoricalAccuracy, + precision, + categoricalCrossentropy: categoricalCrossentropy2, + sparseCategoricalCrossentropy: sparseCategoricalCrossentropy2, + mse, + MSE, + mae, + MAE, + mape, + MAPE, + cosine + }; + function get2(identifier) { + if (typeof identifier === "string" && identifier in metricsMap) { + return metricsMap[identifier]; + } else if (typeof identifier !== "string" && identifier != null) { + return identifier; + } else { + throw new ValueError(`Unknown metric ${identifier}`); + } + } + function getLossOrMetricName(fn) { + assert2(fn !== null, `Unknown LossOrMetricFn ${fn}`); + if (typeof fn === "string") { + return fn; + } else { + let fnName; + for (const key of Object.keys(lossesMap)) { + if (lossesMap[key] === fn) { + fnName = key; + break; + } + } + if (fnName !== void 0) { + return fnName; + } + for (const key of Object.keys(metricsMap)) { + if (metricsMap[key] === fn) { + fnName = key; + break; + } + } + if (fnName !== void 0) { + return fnName; + } + return fn.name; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/optimizers.js + init_define_BUILD_VERSION(); + function getOptimizer(identifier) { + const optimizerMap = { + "Adagrad": () => train.adagrad(0.01), + "Adadelta": () => train.adadelta(1, 0.95, epsilon()), + "Adam": () => train.adam(1e-3, 0.9, 0.999, epsilon()), + "Adamax": () => train.adamax(2e-3, 0.9, 0.999, epsilon(), 0), + "RMSProp": () => train.rmsprop(1e-3, 0.9, 0, epsilon()), + "SGD": () => train.sgd(0.01) + }; + optimizerMap["adagrad"] = optimizerMap["Adagrad"]; + optimizerMap["adadelta"] = optimizerMap["Adadelta"]; + optimizerMap["adam"] = optimizerMap["Adam"]; + optimizerMap["adamax"] = optimizerMap["Adamax"]; + optimizerMap["rmsprop"] = optimizerMap["RMSProp"]; + optimizerMap["sgd"] = optimizerMap["SGD"]; + if (identifier in optimizerMap) { + return optimizerMap[identifier](); + } + throw new ValueError(`Unknown Optimizer ${identifier}`); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/user_defined_metadata.js + init_define_BUILD_VERSION(); + var MAX_USER_DEFINED_METADATA_SERIALIZED_LENGTH = 1 * 1024 * 1024; + function checkUserDefinedMetadata(userDefinedMetadata, modelName, checkSize = false) { + if (userDefinedMetadata == null || typeof userDefinedMetadata !== "object" || Object.getPrototypeOf(userDefinedMetadata) !== Object.prototype || !plainObjectCheck(userDefinedMetadata)) { + throw new Error("User-defined metadata is expected to be a JSON object, but is not."); + } + if (checkSize) { + const out = JSON.stringify(userDefinedMetadata); + if (out.length > MAX_USER_DEFINED_METADATA_SERIALIZED_LENGTH) { + console.warn(`User-defined metadata of model "${modelName}" is too large in size (length=${out.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= ${MAX_USER_DEFINED_METADATA_SERIALIZED_LENGTH}.`); + } + } + } + function plainObjectCheck(x) { + if (x === null) { + return true; + } else if (typeof x === "object") { + if (Object.getPrototypeOf(x) === Object.prototype) { + const keys = Object.keys(x); + for (const key of keys) { + if (typeof key !== "string") { + return false; + } + if (!plainObjectCheck(x[key])) { + return false; + } + } + return true; + } else { + if (Array.isArray(x)) { + for (const item of x) { + if (!plainObjectCheck(item)) { + return false; + } + } + return true; + } else { + return false; + } + } + } else { + const xType = typeof x; + return xType === "string" || xType === "number" || xType === "boolean"; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/layer_utils.js + init_define_BUILD_VERSION(); + function printSummary(model3, lineLength, positions, printFn = console.log) { + const sequentialLike = isModelSequentialLike(model3); + const toDisplay = ["Layer (type)", "Input Shape", "Output shape", "Param #"]; + if (sequentialLike) { + lineLength = lineLength || 90; + positions = positions || [0.32, 0.61, 0.89, 1]; + } else { + lineLength = lineLength || 115; + positions = positions || [0.24, 0.48, 0.7, 0.8, 1]; + } + if (positions[positions.length - 1] <= 1) { + positions = positions.map((p2) => Math.floor(lineLength * p2)); + } + let relevantNodes; + if (!sequentialLike) { + toDisplay.push("Receives inputs"); + relevantNodes = []; + for (const depth in model3.nodesByDepth) { + relevantNodes.push(...model3.nodesByDepth[depth]); + } + } + printFn("_".repeat(lineLength)); + printRow(toDisplay, positions, printFn); + printFn("=".repeat(lineLength)); + const layers = model3.layers; + for (let i = 0; i < layers.length; ++i) { + if (sequentialLike) { + printLayerSummary(layers[i], positions, printFn); + } else { + printLayerSummaryWithConnections(layers[i], positions, relevantNodes, printFn); + } + printFn((i === layers.length - 1 ? "=" : "_").repeat(lineLength)); + } + model3.checkTrainableWeightsConsistency(); + const trainableCount = countTrainableParams(model3); + const nonTrainableCount = countParamsInWeights(model3.nonTrainableWeights); + printFn(`Total params: ${trainableCount + nonTrainableCount}`); + printFn(`Trainable params: ${trainableCount}`); + printFn(`Non-trainable params: ${nonTrainableCount}`); + printFn("_".repeat(lineLength)); + } + function countTrainableParams(model3) { + let trainableCount; + if (model3.collectedTrainableWeights != null) { + trainableCount = countParamsInWeights(model3.collectedTrainableWeights); + } else { + trainableCount = countParamsInWeights(model3.trainableWeights); + } + return trainableCount; + } + function isModelSequentialLike(model3) { + let sequentialLike = true; + const nodesByDepth = []; + const nodes = []; + for (const depth in model3.nodesByDepth) { + nodesByDepth.push(model3.nodesByDepth[depth]); + } + for (const depthNodes of nodesByDepth) { + if (depthNodes.length > 1 || depthNodes.length === 1 && depthNodes[0].inboundLayers.length > 1) { + sequentialLike = false; + break; + } + nodes.push(...depthNodes); + } + if (sequentialLike) { + for (const layer of model3.layers) { + let flag = false; + for (const node of layer.inboundNodes) { + if (nodes.indexOf(node) !== -1) { + if (flag) { + sequentialLike = false; + break; + } else { + flag = true; + } + } + } + if (!sequentialLike) { + break; + } + } + } + return sequentialLike; + } + function printRow(fields, positions, printFn = console.log) { + let line = ""; + for (let i = 0; i < fields.length; ++i) { + if (i > 0) { + line = line.slice(0, line.length - 1) + " "; + } + line += fields[i]; + line = line.slice(0, positions[i]); + line += " ".repeat(positions[i] - line.length); + } + printFn(line); + } + function printLayerSummary(layer, positions, printFn) { + let outputShape; + let inputShape; + try { + inputShape = layer.inboundNodes.map((x) => JSON.stringify(x.inputShapes)).join(","); + } catch (err) { + inputShape = "multiple"; + } + try { + outputShape = JSON.stringify(layer.outputShape); + } catch (err) { + outputShape = "multiple"; + } + const name = layer.name; + const className = layer.getClassName(); + const fields = [ + `${name} (${className})`, + inputShape, + outputShape, + layer.countParams().toString() + ]; + printRow(fields, positions, printFn); + } + function printLayerSummaryWithConnections(layer, positions, relevantNodes, printFn) { + let outputShape; + let inputShape; + try { + inputShape = layer.inboundNodes.map((x) => JSON.stringify(x.inputShapes)).join(","); + } catch (err) { + inputShape = "multiple"; + } + try { + outputShape = JSON.stringify(layer.outputShape); + } catch (err) { + outputShape = "multiple"; + } + const connections = []; + for (const node of layer.inboundNodes) { + if (relevantNodes != null && relevantNodes.length > 0 && relevantNodes.indexOf(node) === -1) { + continue; + } + for (let i = 0; i < node.inboundLayers.length; ++i) { + const inboundLayer = node.inboundLayers[i].name; + const inboundLayerIndex = node.nodeIndices[i]; + const inboundTensorIndex = node.tensorIndices[i]; + connections.push(`${inboundLayer}[${inboundLayerIndex}][${inboundTensorIndex}]`); + } + } + const name = layer.name; + const className = layer.getClassName(); + const firstConnection = connections.length === 0 ? "" : connections[0]; + const fields = [ + `${name} (${className})`, + inputShape, + outputShape, + layer.countParams().toString(), + firstConnection + ]; + printRow(fields, positions, printFn); + for (let i = 1; i < connections.length; ++i) { + printRow(["", "", "", "", connections[i]], positions, printFn); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/serialization_utils.js + init_define_BUILD_VERSION(); + function isArrayItemInputOrOutputName(key, index, value) { + return (key === "inboundNodes" || key === "outputLayers" || key === "inputLayers") && index === 0 && typeof value === "string"; + } + function convertPythonicToTs(pythonicConfig, key) { + if (pythonicConfig === null) { + return null; + } else if (typeof pythonicConfig === "string") { + return toCamelCase(pythonicConfig); + } else if (typeof pythonicConfig === "number" || typeof pythonicConfig === "boolean") { + return pythonicConfig; + } else if (pythonicConfig instanceof Array) { + const tsArray = []; + const arrayLength = pythonicConfig.length; + for (let i = 0; i < arrayLength; ++i) { + const item = pythonicConfig[i]; + if (isArrayItemInputOrOutputName(key, i, item)) { + tsArray.push(item); + } else { + tsArray.push(convertPythonicToTs(item, key)); + } + } + return tsArray; + } else { + const tsDict = {}; + for (const pythonicKey of Object.keys(pythonicConfig)) { + const pythonicValue = pythonicConfig[pythonicKey]; + if (pythonicKey === "name" && typeof pythonicValue === "string") { + tsDict[pythonicKey] = pythonicValue; + } else { + const tsKey = toCamelCase(pythonicKey); + tsDict[tsKey] = convertPythonicToTs(pythonicValue, tsKey); + } + } + return tsDict; + } + } + function convertTsToPythonic(tsConfig, key) { + if (tsConfig === null || tsConfig === void 0) { + return null; + } else if (typeof tsConfig === "string") { + return toSnakeCase(tsConfig); + } else if (typeof tsConfig === "number" || typeof tsConfig === "boolean") { + return tsConfig; + } else if (tsConfig instanceof Array) { + const pyArray = []; + const arrayLength = tsConfig.length; + for (let i = 0; i < arrayLength; ++i) { + const item = tsConfig[i]; + if (isArrayItemInputOrOutputName(key, i, item)) { + pyArray.push(item); + } else { + pyArray.push(convertTsToPythonic(item, key)); + } + } + return pyArray; + } else { + const pyDict = {}; + for (const tsKey of Object.keys(tsConfig)) { + const tsValue = tsConfig[tsKey]; + const pyKey = toSnakeCase(tsKey); + if ((tsKey === "name" || tsKey === "className") && typeof tsValue === "string") { + pyDict[pyKey] = tsValue; + } else { + pyDict[pyKey] = convertTsToPythonic(tsValue, tsKey); + } + } + return pyDict; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/version.js + init_define_BUILD_VERSION(); + var version = "3.19.0"; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/container.js + init_define_BUILD_VERSION(); + var Container = class extends Layer { + constructor(args) { + super({}); + this.containerNodes = /* @__PURE__ */ new Set(); + this.name = args.name; + if (this.name == null) { + const prefix = this.getClassName().toLowerCase(); + this.name = getUid(prefix); + } + this.supportsMasking = false; + this.trainable_ = true; + if (Array.isArray(args.inputs)) { + this.inputs = args.inputs.slice(); + } else { + this.inputs = [args.inputs]; + } + if (Array.isArray(args.outputs)) { + this.outputs = args.outputs.slice(); + } else { + this.outputs = [args.outputs]; + } + if (unique2(this.inputs).length !== this.inputs.length) { + throw new ValueError(`The list of inputs passed to the model is redundant. All inputs should only appear once. Found: ${this.inputs.map((x) => x.name)}`); + } + if (unique2(this.outputs).length !== this.outputs.length) { + console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map((x) => x.name)}`); + } + this.inputLayers = []; + this.inputLayersNodeIndices = []; + this.inputLayersTensorIndices = []; + this.outputLayers = []; + this.outputLayersNodeIndices = []; + this.outputLayersTensorIndices = []; + this.layers = []; + this.internalContainerRefs = []; + for (const x of this.outputs) { + const layer = x.sourceLayer; + const nodeIndex = x.nodeIndex; + const tensorIndex = x.tensorIndex; + this.outputLayers.push(layer); + this.outputLayersNodeIndices.push(nodeIndex); + this.outputLayersTensorIndices.push(tensorIndex); + } + for (const x of this.inputs) { + const layer = x.sourceLayer; + const nodeIndex = x.nodeIndex; + const tensorIndex = x.tensorIndex; + assert2(nodeIndex === 0, "input layer has >1 nodes"); + assert2(tensorIndex === 0, "input layer has >1 tensors"); + this.inputLayers.push(layer); + this.inputLayersNodeIndices.push(nodeIndex); + this.inputLayersTensorIndices.push(tensorIndex); + } + this.inputNames = []; + this.outputNames = []; + this.feedInputShapes = []; + this.feedInputNames = []; + this.feedOutputNames = []; + for (let i = 0; i < this.inputLayers.length; i++) { + const layer = this.inputLayers[i]; + if (!(layer instanceof InputLayer)) { + throw new TypeError(`Input layers to a LayersModel must be InputLayer objects. Received inputs: ${args.inputs}. Input ${i} (0-based) originates from layer type ${layer.getClassName()}.`); + } + this.inputNames.push(layer.name); + this.feedInputShapes.push(layer.batchInputShape); + this.feedInputNames.push(layer.name); + } + for (const layer of this.outputLayers) { + this.outputNames.push(layer.name); + } + this.internalInputShapes = this.inputs.map((x) => x.shape); + this.internalOutputShapes = this.outputs.map((x) => x.shape); + const nodesDepths = {}; + const nodeIDToNode = {}; + const layersDepths = {}; + const layerIDToLayer = {}; + const layerIndices = {}; + const nodesInDecreasingDepth = []; + const buildMapOfGraph = (tensor2, finishedNodes2, nodesInProgress2, layer, nodeIndex, tensorIndex) => { + if (layer == null || nodeIndex == null || tensorIndex == null) { + layer = tensor2.sourceLayer; + nodeIndex = tensor2.nodeIndex; + tensorIndex = tensor2.tensorIndex; + } + const node = layer.inboundNodes[nodeIndex]; + if (nodesInProgress2.indexOf(node) !== -1) { + throw new RuntimeError(`The tensor ${tensor2.name} at layer "${layer.name}" is part of a cycle.`); + } + if (finishedNodes2.indexOf(node) !== -1) { + return; + } + this.containerNodes.add(Container.nodeKey(layer, nodeIndex)); + if (!(layer.id in layerIndices)) { + layerIndices[layer.id] = Object.keys(layerIndices).length; + } + if (nodesInProgress2.indexOf(node) === -1) { + nodesInProgress2.push(node); + } + const numInboundLayers = node.inboundLayers.length; + for (let i = 0; i < numInboundLayers; i++) { + const x = node.inputTensors[i]; + const layer2 = node.inboundLayers[i]; + const nodeIndex2 = node.nodeIndices[i]; + const tensorIndex2 = node.tensorIndices[i]; + buildMapOfGraph(x, finishedNodes2, nodesInProgress2, layer2, nodeIndex2, tensorIndex2); + } + finishedNodes2.push(node); + while (nodesInProgress2.indexOf(node) >= 0) { + nodesInProgress2.splice(nodesInProgress2.indexOf(node), 1); + } + nodesInDecreasingDepth.push(node); + }; + const finishedNodes = []; + const nodesInProgress = []; + for (const x of this.outputs) { + buildMapOfGraph(x, finishedNodes, nodesInProgress); + } + const reversedNodesInDecreasingDepth = nodesInDecreasingDepth.slice().reverse(); + for (const node of reversedNodesInDecreasingDepth) { + nodeIDToNode[node.id] = node; + if (!(node.id in nodesDepths)) { + nodesDepths[node.id] = 0; + } + let depth = nodesDepths[node.id]; + const previousDepth = layersDepths[node.outboundLayer.id] == null ? 0 : layersDepths[node.outboundLayer.id]; + depth = Math.max(depth, previousDepth); + layersDepths[node.outboundLayer.id] = depth; + layerIDToLayer[node.outboundLayer.id] = node.outboundLayer; + nodesDepths[node.id] = depth; + for (let i = 0; i < node.inboundLayers.length; i++) { + const inboundLayer = node.inboundLayers[i]; + const nodeIndex = node.nodeIndices[i]; + const inboundNode = inboundLayer.inboundNodes[nodeIndex]; + const previousDepth2 = nodesDepths[inboundNode.id] == null ? 0 : nodesDepths[inboundNode.id]; + nodesDepths[inboundNode.id] = Math.max(depth + 1, previousDepth2); + nodeIDToNode[inboundNode.id] = inboundNode; + } + } + const nodesByDepth = {}; + for (const nodeID in nodesDepths) { + const depth = nodesDepths[nodeID]; + if (!(depth in nodesByDepth)) { + nodesByDepth[depth] = []; + } + nodesByDepth[depth].push(nodeIDToNode[nodeID]); + } + const layersByDepth = {}; + for (const layerID in layersDepths) { + const depth = layersDepths[layerID]; + if (!(depth in layersByDepth)) { + layersByDepth[depth] = []; + } + layersByDepth[depth].push(layerIDToLayer[layerID]); + } + let depthKeys = Object.keys(layersByDepth).map((x) => parseInt(x, 10)).sort(reverseNumberCompare); + this.layers = []; + for (const depth of depthKeys) { + const layersForDepth = layersByDepth[depth]; + layersForDepth.sort((a, b) => { + const aIndex = layerIndices[a.id]; + const bIndex = layerIndices[b.id]; + if (aIndex < bIndex) { + return -1; + } + if (aIndex > bIndex) { + return 1; + } + return 0; + }); + for (const layer of layersForDepth) { + if (layer instanceof Container) { + this.internalContainerRefs.push(layer); + } + this.layers.push(layer); + } + } + this.layersByDepth = layersByDepth; + depthKeys = Object.keys(nodesByDepth).map((x) => parseInt(x, 10)).sort(reverseNumberCompare); + const computableTensors = this.inputs.slice(); + const layersWithCompleteInput = []; + for (const depth of depthKeys) { + for (const node of nodesByDepth[depth]) { + const layer = node.outboundLayer; + if (layer != null) { + for (const x of node.inputTensors) { + if (computableTensors.indexOf(x) === -1) { + throw new RuntimeError(`Graph disconnected: cannot obtain value for tensor ${x} at layer "${layer.name}". The following previous layers were accessed without issue: ${layersWithCompleteInput}`); + } + } + for (const x of node.outputTensors) { + computableTensors.push(x); + } + layersWithCompleteInput.push(layer.name); + } + } + } + this.nodesByDepth = nodesByDepth; + const allNames = this.layers.map((x) => x.name); + for (const name of allNames) { + const numOccurrences = allNames.filter((x) => x === name).length; + if (numOccurrences !== 1) { + throw new RuntimeError(`The name "${name}" is used ${numOccurrences} times in the model. All layer names should be unique. Layer names: ` + JSON.stringify(allNames)); + } + } + this.outboundNodes = []; + this.inboundNodes = []; + new Node({ + outboundLayer: this, + inboundLayers: [], + nodeIndices: [], + tensorIndices: [], + inputTensors: this.inputs, + outputTensors: this.outputs, + inputMasks: this.inputs.map((x) => null), + outputMasks: this.outputs.map((x) => null), + inputShapes: this.inputs.map((x) => x.shape), + outputShapes: this.outputs.map((x) => x.shape) + }); + this.built = true; + this._refCount = 1; + } + assertNotDisposed() { + if (this._refCount === 0) { + throw new Error(`Container '${this.name}' is already disposed.`); + } + } + dispose() { + this.assertNotDisposed(); + const result = { refCountAfterDispose: null, numDisposedVariables: 0 }; + if (--this._refCount === 0) { + for (const layer of this.layers) { + result.numDisposedVariables += layer.dispose().numDisposedVariables; + } + for (const container of this.internalContainerRefs) { + result.numDisposedVariables += container.dispose().numDisposedVariables; + } + } + result.refCountAfterDispose = this._refCount; + return result; + } + get trainable() { + return this.trainable_; + } + set trainable(trainable) { + this.layers.forEach((layer) => { + layer._trainableWeights.forEach((w) => w.trainable = trainable); + }); + this.trainable_ = trainable; + } + get trainableWeights() { + if (this._trainableWeights.length > 0) { + throw new ValueError("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array."); + } + if (!this.trainable) { + return []; + } + let weights = []; + for (const layer of this.layers) { + weights = weights.concat(layer.trainableWeights); + } + return weights; + } + get nonTrainableWeights() { + const weights = []; + for (const layer of this.layers) { + weights.push(...layer.nonTrainableWeights); + } + if (!this.trainable) { + const trainableWeights = []; + for (const layer of this.layers) { + trainableWeights.push(...layer.trainableWeights); + } + return trainableWeights.concat(weights); + } + return weights; + } + get weights() { + return this.trainableWeights.concat(this.nonTrainableWeights); + } + loadWeights(weights, strict = true) { + const nameToWeight = {}; + let totalWeightsCount = 0; + for (const layer of this.layers) { + for (const weight of layer.weights) { + if (nameToWeight[weight.originalName] != null) { + throw new ValueError(`Duplicate weight name: ${weight.originalName}`); + } + nameToWeight[weight.originalName] = weight; + totalWeightsCount++; + } + } + const weightValueTuples = []; + for (const name in weights) { + let validatedName = name; + if (nameToWeight[name] == null) { + const tokens = name.split("/"); + const shortenNameArray = tokens.slice(0, -2).concat([tokens[tokens.length - 1]]); + validatedName = shortenNameArray.join("/"); + } + if (nameToWeight[validatedName] != null) { + weightValueTuples.push([nameToWeight[validatedName], weights[name]]); + } else if (strict) { + throw new ValueError(`Provided weight data has no target variable: ${name}`); + } + delete nameToWeight[validatedName]; + } + if (strict) { + const unsetNames = []; + for (const name in nameToWeight) { + unsetNames.push(name); + } + if (unsetNames.length > 0) { + throw new ValueError(`${unsetNames.length} of ${totalWeightsCount} weights are not set: ${unsetNames}`); + } + } + batchSetValue(weightValueTuples); + } + updatedConfig() { + const theConfig = this.getConfig(); + const modelConfig = {}; + modelConfig["className"] = this.getClassName(); + modelConfig["config"] = theConfig; + modelConfig["kerasVersion"] = `tfjs-layers ${version}`; + modelConfig["backend"] = "TensorFlow.js"; + return modelConfig; + } + toJSON(unused, returnString = true) { + const modelConfig = convertTsToPythonic(this.updatedConfig()); + return returnString ? JSON.stringify(modelConfig) : modelConfig; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = toList(inputs); + const feedDict = new FeedDict(); + for (let i = 0; i < this.inputs.length; ++i) { + feedDict.add(this.inputs[i], inputs[i]); + } + return execute(this.outputs, feedDict, kwargs); + }); + } + computeMask(inputs, mask) { + return tidy(() => { + inputs = toList(inputs); + let masks; + if (mask == null) { + masks = pyListRepeat(null, inputs.length); + } else { + masks = toList(mask); + } + return this.runInternalGraph(inputs, masks)[1]; + }); + } + computeOutputShape(inputShape) { + const inputShapes = normalizeShapeList(inputShape); + if (inputShapes.length !== this.inputLayers.length) { + throw new ValueError(`Invalid inputShape argument ${inputShape}: model has ${this.inputLayers.length} tensor inputs.`); + } + const layersToOutputShapes = {}; + for (let i = 0; i < inputShapes.length; i++) { + const layer = this.inputLayers[i]; + const inputShape2 = inputShapes[i]; + const shapeKey = layer.name + "_0_0"; + layersToOutputShapes[shapeKey] = inputShape2; + } + const depthKeys = Object.keys(this.nodesByDepth).map((x) => parseInt(x, 10)).sort(reverseNumberCompare); + if (depthKeys.length > 1) { + for (const depth of depthKeys) { + const nodes = this.nodesByDepth[depth]; + for (const node of nodes) { + const layer = node.outboundLayer; + if (this.inputLayers.map((x) => x.id).indexOf(layer.id) !== -1) { + continue; + } + const inputShapes2 = []; + for (let j = 0; j < node.inboundLayers.length; j++) { + const inboundLayer = node.inboundLayers[j]; + const nodeIndex2 = node.nodeIndices[j]; + const tensorIndex = node.tensorIndices[j]; + const shapeKey = `${inboundLayer.name}_${nodeIndex2}_${tensorIndex}`; + const inputShape2 = layersToOutputShapes[shapeKey]; + inputShapes2.push(inputShape2); + } + const outputShape = layer.computeOutputShape(singletonOrArray(inputShapes2)); + const outputShapes2 = normalizeShapeList(outputShape); + const nodeIndex = layer.inboundNodes.indexOf(node); + for (let j = 0; j < outputShapes2.length; j++) { + const shapeKey = `${layer.name}_${nodeIndex}_${j}`; + layersToOutputShapes[shapeKey] = outputShapes2[j]; + } + } + } + } + const outputShapes = []; + const outputShapeKeys = []; + for (let i = 0; i < this.outputLayers.length; i++) { + const layer = this.outputLayers[i]; + const nodeIndex = this.outputLayersNodeIndices[i]; + const tensorIndex = this.outputLayersTensorIndices[i]; + const shapeKey = `${layer.name}_${nodeIndex}_${tensorIndex}`; + outputShapeKeys.push(shapeKey); + } + for (let i = 0; i < outputShapeKeys.length; i++) { + const key = outputShapeKeys[i]; + assert2(key in layersToOutputShapes); + outputShapes.push(layersToOutputShapes[key]); + } + return singletonOrArray(outputShapes); + } + runInternalGraph(inputs, masks) { + if (masks == null) { + masks = pyListRepeat(null, inputs.length); + } + const tensorMap = {}; + for (let i = 0; i < this.inputs.length; ++i) { + const x = this.inputs[i]; + const y = inputs[i]; + const mask = masks[i]; + tensorMap[x.id] = [y, mask]; + } + const depthKeys = Object.keys(this.nodesByDepth).map((x) => parseInt(x, 10)).sort(reverseNumberCompare); + for (const depth of depthKeys) { + const nodes = this.nodesByDepth[depth]; + for (const node of nodes) { + const layer = node.outboundLayer; + const referenceInputTensors = node.inputTensors; + const referenceOutputTensors = node.outputTensors; + const computedData = new Array(); + for (const x of referenceInputTensors) { + if (x.id in tensorMap) { + computedData.push(tensorMap[x.id]); + } + } + if (computedData.length === referenceInputTensors.length) { + let kwargs = {}; + let computedTensors; + let computedMasks; + let outputTensors2; + let outputMasks2; + if (node.callArgs != null) { + kwargs = node.callArgs; + } + if (computedData.length === 1) { + const [computedTensor, computedMask] = computedData[0]; + if (kwargs["mask"] == null) { + kwargs["mask"] = computedMask; + } + outputTensors2 = toList(layer.call(computedTensor, kwargs)); + outputMasks2 = toList(layer.computeMask(computedTensor, computedMask)); + computedTensors = [computedTensor]; + computedMasks = [computedMask]; + } else { + computedTensors = computedData.map((x) => x[0]); + computedMasks = computedData.map((x) => x[1]); + if (kwargs["mask"] == null) { + kwargs["mask"] = computedMasks; + } + outputTensors2 = toList(layer.call(computedTensors, kwargs)); + outputMasks2 = toList(layer.computeMask(computedTensors, computedMasks)); + } + if (layer.activityRegularizer) { + throw new NotImplementedError("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet."); + } + for (let i = 0; i < referenceOutputTensors.length; ++i) { + const x = referenceOutputTensors[i]; + const y = outputTensors2[i]; + const mask = outputMasks2[i]; + tensorMap[x.id] = [y, mask]; + } + } + } + } + const outputTensors = []; + const outputMasks = []; + const outputShapes = []; + for (const x of this.outputs) { + assert2(x.id in tensorMap, `Could not compute output ${x.name} : ${x.id}`); + const [tensor2, mask] = tensorMap[x.id]; + outputShapes.push(tensor2.shape); + outputTensors.push(tensor2); + outputMasks.push(mask); + } + return [outputTensors, outputMasks, outputShapes]; + } + buildNodeConversionMap(layers) { + const nodeConversionMap = {}; + let keptNodes; + for (const layer of this.layers) { + keptNodes = layer instanceof Container ? 1 : 0; + for (let originalNodeIndex = 0; originalNodeIndex < layer.inboundNodes.length; originalNodeIndex++) { + const nodeKey = Container.nodeKey(layer, originalNodeIndex); + if (this.containerNodes.has(nodeKey)) { + nodeConversionMap[nodeKey] = keptNodes; + keptNodes += 1; + } + } + } + return nodeConversionMap; + } + getLayer(name, index) { + if (index != null) { + if (this.layers.length <= index) { + throw new ValueError(`Was asked to retrieve layer at index ${index}, but model only has ${this.layers.length} layer(s).`); + } else { + return this.layers[index]; + } + } else { + if (name == null) { + throw new ValueError("Provide either a layer name or layer index"); + } + } + for (const layer of this.layers) { + if (layer.name === name) { + return layer; + } + } + throw new ValueError(`No such layer: ${name}`); + } + calculateLosses() { + return tidy(() => { + const losses = []; + for (const layer of this.layers) { + for (let nodeIndex = 0; nodeIndex < layer.inboundNodes.length; ++nodeIndex) { + const nodeKey = Container.nodeKey(layer, nodeIndex); + if (this.containerNodes.has(nodeKey)) { + losses.push(...layer.calculateLosses()); + } + } + } + return losses; + }); + } + getConfig() { + const config = { name: this.name }; + const nodeConversionMap = this.buildNodeConversionMap(this.layers); + const layerConfigs = []; + for (const layer of this.layers) { + const layerClassName = layer.getClassName(); + const layerConfig = layer.getConfig(); + const filteredInboundNodes = []; + for (let originalNodeIndex = 0; originalNodeIndex < layer.inboundNodes.length; originalNodeIndex++) { + const node = layer.inboundNodes[originalNodeIndex]; + const nodeKey = Container.nodeKey(layer, originalNodeIndex); + let kwargs = {}; + if (this.containerNodes.has(nodeKey)) { + if (node.callArgs) { + try { + JSON.stringify(node.callArgs); + kwargs = node.callArgs; + } catch (err) { + console.warn(`Layer ${layer.name} was passed non-serializable keyword arguments: ${node.callArgs}. They will not be included in the serialized model (and thus will be missing at deserialization time).`); + kwargs = {}; + } + } + if (node.inboundLayers.length > 0) { + const nodeData = []; + for (let i = 0; i < node.inboundLayers.length; i++) { + const inboundLayer = node.inboundLayers[i]; + const nodeIndex = node.nodeIndices[i]; + const tensorIndex = node.tensorIndices[i]; + const nodeKey2 = Container.nodeKey(inboundLayer, nodeIndex); + let newNodeIndex = nodeConversionMap[nodeKey2]; + if (newNodeIndex == null) { + newNodeIndex = 0; + } + nodeData.push([inboundLayer.name, newNodeIndex, tensorIndex, kwargs]); + } + filteredInboundNodes.push(nodeData); + } + } + } + const dict = {}; + dict["name"] = layer.name; + dict["className"] = layerClassName; + dict["config"] = layerConfig; + dict["inboundNodes"] = filteredInboundNodes; + layerConfigs.push(dict); + } + config["layers"] = layerConfigs; + const modelInputs = []; + for (let i = 0; i < this.inputLayers.length; i++) { + const layer = this.inputLayers[i]; + const nodeIndex = this.inputLayersNodeIndices[i]; + const nodeKey = Container.nodeKey(layer, nodeIndex); + if (!this.containerNodes.has(nodeKey)) { + continue; + } + let newNodeIndex = nodeConversionMap[nodeKey]; + if (newNodeIndex === null || newNodeIndex === void 0) { + newNodeIndex = 0; + } + const tensorIndex = this.inputLayersTensorIndices[i]; + modelInputs.push([layer.name, newNodeIndex, tensorIndex]); + } + config["inputLayers"] = modelInputs; + const modelOutputs = []; + for (let i = 0; i < this.outputLayers.length; i++) { + const layer = this.outputLayers[i]; + const nodeIndex = this.outputLayersNodeIndices[i]; + const nodeKey = Container.nodeKey(layer, nodeIndex); + if (!this.containerNodes.has(nodeKey)) { + continue; + } + let newNodeIndex = nodeConversionMap[nodeKey]; + if (newNodeIndex === null || newNodeIndex === void 0) { + newNodeIndex = 0; + } + const tensorIndex = this.outputLayersTensorIndices[i]; + modelOutputs.push([layer.name, newNodeIndex, tensorIndex]); + } + config["outputLayers"] = modelOutputs; + return config; + } + static fromConfig(cls, config, customObjects = {}, fastWeightInit = false) { + const createdLayers = {}; + const unprocessedNodes = {}; + function addUnprocessedNode(layer, nodeData) { + if (!(layer.name in unprocessedNodes)) { + unprocessedNodes[layer.name] = [nodeData]; + } else { + unprocessedNodes[layer.name].push(nodeData); + } + } + function processNode(layer, nodeData) { + const inputTensors2 = []; + let kwargs; + for (const inputData of nodeData) { + const inboundLayerName = inputData[0]; + const inboundNodeIndex = inputData[1]; + const inboundTensorIndex = inputData[2]; + kwargs = inputData[3] == null ? {} : inputData[3]; + if (!(inboundLayerName in createdLayers)) { + addUnprocessedNode(layer, nodeData); + return; + } + const inboundLayer = createdLayers[inboundLayerName]; + if (inboundLayer.inboundNodes.length <= inboundNodeIndex) { + addUnprocessedNode(layer, nodeData); + return; + } + const inboundNode = inboundLayer.inboundNodes[inboundNodeIndex]; + inputTensors2.push(inboundNode.outputTensors[inboundTensorIndex]); + } + if (inputTensors2.length > 0) { + layer.apply(singletonOrArray(inputTensors2), kwargs); + } + } + function processLayer(layerData) { + const layerName = layerData["name"]; + const layer = deserialize(layerData, config["customObjects"] != null ? config["customObjects"] : {}); + layer.setFastWeightInitDuringBuild(fastWeightInit); + createdLayers[layerName] = layer; + const inboundNodesData = layerData["inboundNodes"]; + inboundNodesData.forEach((nodeData) => { + if (!(nodeData instanceof Array)) { + throw new ValueError(`Corrupted configuration, expected array for nodeData: ${nodeData}`); + } + addUnprocessedNode(layer, nodeData); + }); + } + const name = config["name"]; + const layersFromConfig = config["layers"]; + for (const layerData of layersFromConfig) { + processLayer(layerData); + } + while (!isObjectEmpty(unprocessedNodes)) { + for (const layerData of layersFromConfig) { + const layer = createdLayers[layerData["name"]]; + if (layer.name in unprocessedNodes) { + const currentUnprocessedNodesForLayer = unprocessedNodes[layer.name]; + delete unprocessedNodes[layer.name]; + for (const nodeData of currentUnprocessedNodesForLayer) { + processNode(layer, nodeData); + } + } + } + } + const inputTensors = []; + const outputTensors = []; + const inputLayersFromConfig = config["inputLayers"]; + for (const layerData of inputLayersFromConfig) { + const layerName = layerData[0]; + const nodeIndex = layerData[1]; + const tensorIndex = layerData[2]; + assert2(layerName in createdLayers); + const layer = createdLayers[layerName]; + const layerOutputTensors = layer.inboundNodes[nodeIndex].outputTensors; + inputTensors.push(layerOutputTensors[tensorIndex]); + } + const outputLayersFromConfig = config["outputLayers"]; + for (const layerData of outputLayersFromConfig) { + const layerName = layerData[0]; + const nodeIndex = layerData[1]; + const tensorIndex = layerData[2]; + assert2(layerName in createdLayers); + const layer = createdLayers[layerName]; + const layerOutputTensors = layer.inboundNodes[nodeIndex].outputTensors; + outputTensors.push(layerOutputTensors[tensorIndex]); + } + return new cls({ inputs: inputTensors, outputs: outputTensors, name }); + } + get stateful() { + if (this._stateful) { + throw new ValueError("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false."); + } + for (const layer of this.layers) { + if (layer.stateful) { + return true; + } + } + return false; + } + resetStates() { + tidy(() => { + this.layers.forEach((layer) => { + if (layer.stateful) { + layer.resetStates(); + } + }); + }); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training_dataset.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training_utils.js + init_define_BUILD_VERSION(); + function standardizeSampleOrClassWeights(xWeight, outputNames, weightType) { + const numOutputs = outputNames.length; + if (xWeight == null || Array.isArray(xWeight) && xWeight.length === 0) { + return outputNames.map((name) => null); + } + if (numOutputs === 1) { + if (Array.isArray(xWeight) && xWeight.length === 1) { + return xWeight; + } else if (typeof xWeight === "object" && outputNames[0] in xWeight) { + return [xWeight[outputNames[0]]]; + } else { + return [xWeight]; + } + } + if (Array.isArray(xWeight)) { + if (xWeight.length !== numOutputs) { + throw new Error(`Provided ${weightType} is an array of ${xWeight.length} element(s), but the model has ${numOutputs} outputs. Make sure a set of weights is provided for each model output.`); + } + return xWeight; + } else if (typeof xWeight === "object" && Object.keys(xWeight).length > 0 && typeof xWeight[Object.keys(xWeight)[0]] === "object") { + const output = []; + outputNames.forEach((outputName) => { + if (outputName in xWeight) { + output.push(xWeight[outputName]); + } else { + output.push(null); + } + }); + return output; + } else { + throw new Error(`The model has multiple (${numOutputs}) outputs, so ${weightType} must be either an array with ${numOutputs} elements or an object with ${outputNames} keys. Provided ${weightType} not understood: ${JSON.stringify(xWeight)}`); + } + } + function standardizeClassWeights(classWeight, outputNames) { + return standardizeSampleOrClassWeights(classWeight, outputNames, "classWeight"); + } + async function standardizeWeights(y, sampleWeight, classWeight, sampleWeightMode) { + if (sampleWeight != null || sampleWeightMode != null) { + throw new Error("Support sampleWeight is not implemented yet"); + } + if (classWeight != null) { + const yClasses = tidy(() => { + if (y.shape.length === 1) { + return clone(y); + } else if (y.shape.length === 2) { + if (y.shape[1] > 1) { + const axis = 1; + return argMax(y, axis); + } else if (y.shape[1] === 1) { + return reshape(y, [y.shape[0]]); + } else { + throw new Error(`Encountered unexpected last-dimension size (${y.shape[1]}) during handling of class weights. The size is expected to be >= 1.`); + } + } else { + throw new Error(`Unexpected rank of target (y) tensor (${y.rank}) during handling of class weights. The rank is expected to be 1 or 2.`); + } + }); + const yClassIndices = Array.from(await yClasses.data()); + dispose(yClasses); + const classSampleWeight = []; + yClassIndices.forEach((classIndex) => { + if (classWeight[classIndex] == null) { + throw new Error(`classWeight must contain all classes in the training data. The class ${classIndex} exists in the data but not in classWeight`); + } else { + classSampleWeight.push(classWeight[classIndex]); + } + }); + return tensor1d(classSampleWeight, "float32"); + } else { + return null; + } + } + function computeWeightedLoss(losses, sampleWeights) { + return mul(losses, sampleWeights); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training_dataset.js + var DEFAULT_VALIDATION_BATCH_SIZE = 32; + function standardizeDataIteratorOutput(model3, iteratorOut) { + let xs; + let ys; + const iteratorOutObj = iteratorOut; + xs = iteratorOutObj["xs"]; + ys = iteratorOutObj["ys"]; + util_exports.assert(xs != null && ys != null, () => `A Dataset iterator for fitDataset() is expected to generate objects of the form \`{xs: xVal, ys: yVal}\`, where the two values may be \`tf.Tensor\`, an array of Tensors, or a map of string to Tensor. The provided Dataset instead generates ${iteratorOut}`); + const flattenedXs = flattenTensorOrArrayOrMap("input", model3.inputNames, xs); + const flattenedYs = flattenTensorOrArrayOrMap("output", model3.outputNames, ys); + const batchSize = flattenedXs[0].shape[0]; + util_exports.assert(flattenedXs.length === model3.inputs.length, () => `LayersModel has ${model3.inputs.length} inputs, but the dataset provides ${flattenedXs.length} inputs. (Expected input keys: ${JSON.stringify(model3.inputNames)})`); + util_exports.assert(flattenedYs.length === model3.outputs.length, () => `LayersModel has ${model3.outputs.length} outputs, but the dataset provides ${flattenedYs.length} outputs. (Expected output keys: ${JSON.stringify(model3.outputNames)})`); + for (let xIndex = 0; xIndex < flattenedXs.length; xIndex++) { + util_exports.assert(flattenedXs[xIndex].shape[0] === batchSize, () => `Batch size mismatch: input ${model3.inputNames[xIndex]} has ${flattenedXs[xIndex].shape[0]}; expected ${batchSize} based on input ${model3.inputNames[0]}.`); + } + for (let yIndex = 0; yIndex < flattenedYs.length; yIndex++) { + util_exports.assert(flattenedYs[yIndex].shape[0] === batchSize, () => `Batch size mismatch: output ${model3.outputNames[yIndex]} has ${flattenedYs[yIndex].shape[0]}; expected ${batchSize} based on input ${model3.inputNames[0]}.`); + } + return { xs: flattenedXs, ys: flattenedYs }; + } + function flattenTensorOrArrayOrMap(inputOrOutput, names, values) { + if (values instanceof Tensor) { + return [values]; + } else if (Array.isArray(values)) { + util_exports.assert(values.length === names.length, () => `Received an array of ${values.length} Tensors, but expected ${names.length} to match the ${inputOrOutput} keys ${names}.`); + return values; + } else { + const result = []; + for (const name of names) { + if (values[name] == null) { + throw new ValueError(`The feature data generated by the dataset lacks the required ${inputOrOutput} key '${name}'.`); + } + result.push(values[name]); + } + return result; + } + } + function standardizeTensorValidationData(data) { + if (data.length === 3) { + throw new NotImplementedError("Validation with sample weights is not implemented yet."); + } + return { xs: data[0], ys: data[1] }; + } + async function fitDataset(model3, dataset, args) { + const hasBatchesPerEpoch = args.batchesPerEpoch != null; + util_exports.assert(model3.optimizer != null, () => "You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."); + util_exports.assert(args != null, () => `For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call.`); + util_exports.assert(args.epochs != null && args.epochs > 0 && Number.isInteger(args.epochs), () => `For fitDataset(), config.epochs is expected to be a positive integer, but got ${args.epochs}`); + util_exports.assert(!hasBatchesPerEpoch || args.batchesPerEpoch > 0 && Number.isInteger(args.batchesPerEpoch), () => `For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${args.batchesPerEpoch}`); + util_exports.assert( + args["validationSplit"] == null, + () => "`validationSplit` is not supported by `fitDataset()`. Use validationData instead." + ); + if (model3.isTraining) { + throw new Error("Cannot start training because another fit() call is ongoing."); + } + model3.isTraining = true; + try { + const doValidation = args.validationData != null; + let valXs; + let valYs; + if (doValidation) { + if (isDatasetObject(args.validationData)) { + util_exports.assert(args.validationBatches == null || args.validationBatches > 0 && Number.isInteger(args.validationBatches), () => `For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, but got ${args.validationBatches}`); + } else { + const validationData = standardizeTensorValidationData(args.validationData); + valXs = validationData.xs; + valYs = validationData.ys; + } + } + const trainFunction = model3.makeTrainFunction(); + const outLabels = model3.getDedupedMetricsNames(); + let callbackMetrics; + if (doValidation) { + callbackMetrics = outLabels.slice().concat(outLabels.map((n) => "val_" + n)); + } else { + callbackMetrics = outLabels.slice(); + } + const callbacks2 = standardizeCallbacks(args.callbacks, args.yieldEvery); + const verbose = args.verbose == null ? 1 : args.verbose; + const { callbackList, history } = configureCallbacks( + callbacks2, + verbose, + args.epochs, + null, + null, + getStepsPerEpoch(dataset, args), + null, + doValidation, + callbackMetrics + ); + callbackList.setModel(model3); + model3.history = history; + await callbackList.onTrainBegin(); + model3.stopTraining_ = false; + let epoch = args.initialEpoch == null ? 0 : args.initialEpoch; + let dataIterator = await dataset.iterator(); + while (epoch < args.epochs) { + const epochLogs = {}; + await callbackList.onEpochBegin(epoch); + let stepsDone = 0; + let batchIndex = 0; + if (!hasBatchesPerEpoch) { + dataIterator = await dataset.iterator(); + } + while (hasBatchesPerEpoch ? stepsDone < args.batchesPerEpoch : true) { + const iteratorOut = await dataIterator.next(); + if (hasBatchesPerEpoch && iteratorOut.done) { + console.warn(`You provided \`batchesPerEpoch\` as ${args.batchesPerEpoch}, but your dataset iterator ran out of data after ${stepsDone} batches; interrupting training. Make sure that your dataset can generate at least \`batchesPerEpoch * epochs\` batches (in this case, ${args.batchesPerEpoch * args.epochs} batches). You may need to use the repeat() function when building your dataset.`); + break; + } + if (iteratorOut.value != null) { + const { xs, ys } = standardizeDataIteratorOutput(model3, iteratorOut.value); + const batchLogs = {}; + batchLogs["batch"] = batchIndex; + batchLogs["size"] = xs[0].shape[0]; + await callbackList.onBatchBegin(batchIndex, batchLogs); + const sampleWeights = []; + if (args.classWeight != null) { + const standardClassWeights = standardizeClassWeights(args.classWeight, model3.outputNames); + for (let i = 0; i < standardClassWeights.length; ++i) { + sampleWeights.push(await standardizeWeights(ys[i], null, standardClassWeights[i])); + } + } + const ins = xs.concat(ys).concat(sampleWeights); + const outs = trainFunction(ins); + dispose(ins); + for (let i = 0; i < outLabels.length; ++i) { + const label = outLabels[i]; + const out = outs[i]; + batchLogs[label] = out; + keep(out); + } + await callbackList.onBatchEnd(batchIndex, batchLogs); + disposeTensorsInLogs(batchLogs); + batchIndex++; + stepsDone++; + } + if (hasBatchesPerEpoch ? stepsDone >= args.batchesPerEpoch : iteratorOut.done) { + if (doValidation) { + let valOuts; + if (isDatasetObject(args.validationData)) { + valOuts = toList(await model3.evaluateDataset(args.validationData, { batches: args.validationBatches })); + } else { + valOuts = toList(model3.evaluate(valXs, valYs, { + batchSize: args.validationBatchSize == null ? DEFAULT_VALIDATION_BATCH_SIZE : args.validationBatchSize, + verbose: 0 + })); + } + for (let i = 0; i < model3.metricsNames.length; ++i) { + epochLogs[`val_${model3.metricsNames[i]}`] = valOuts[i]; + } + } + break; + } + if (model3.stopTraining_) { + break; + } + } + await callbackList.onEpochEnd(epoch, epochLogs); + epoch++; + if (model3.stopTraining_) { + break; + } + } + await callbackList.onTrainEnd(); + await model3.history.syncData(); + return model3.history; + } finally { + model3.isTraining = false; + } + } + function getStepsPerEpoch(dataset, args) { + let stepsPerEpoch = null; + if (args.batchesPerEpoch != null) { + stepsPerEpoch = args.batchesPerEpoch; + } else if (Number.isFinite(dataset.size)) { + stepsPerEpoch = dataset.size; + } + return stepsPerEpoch; + } + function isDatasetObject(dataset) { + return typeof dataset.iterator === "function"; + } + function isLazyIteratorObject(iterator) { + return typeof iterator.next === "function"; + } + async function evaluateDataset(model3, dataset, args) { + args = args || {}; + const hasBatches = args.batches != null; + const f = model3.testFunction; + let outs = []; + if (args.verbose > 0) { + throw new NotImplementedError("Verbose mode is not implemented yet."); + } + util_exports.assert(!hasBatches || args.batches > 0 && Number.isInteger(args.batches), () => `Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(args.batches)}`); + const dataIterator = isLazyIteratorObject(dataset) ? dataset : await dataset.iterator(); + let numExamples = 0; + let batch = 0; + while (hasBatches ? batch < args.batches : true) { + const iteratorOut = await dataIterator.next(); + outs = tidy(() => { + if (iteratorOut.value) { + const { xs, ys } = standardizeDataIteratorOutput(model3, iteratorOut.value); + const xsAndYs = xs.concat(ys); + const batchOuts = tidy(() => f(xsAndYs)); + dispose(xsAndYs); + if (batch === 0) { + for (let i = 0; i < batchOuts.length; ++i) { + outs.push(scalar(0)); + } + } + const batchSize = xsAndYs[0].shape[0]; + for (let i = 0; i < batchOuts.length; ++i) { + const batchOut = batchOuts[i]; + const oldScalar = outs[i]; + outs[i] = tidy(() => add2(outs[i], mul(batchSize, batchOut))); + if (batch > 0) { + dispose(oldScalar); + } + } + dispose(batchOuts); + numExamples += batchSize; + ++batch; + } + return outs; + }); + if (iteratorOut.done) { + if (hasBatches) { + console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${args.batches} batches). You may need to use the repeat() function when building your dataset.`); + } + break; + } + } + for (let i = 0; i < outs.length; ++i) { + const oldScalar = outs[i]; + outs[i] = div(outs[i], numExamples); + dispose(oldScalar); + } + return singletonOrArray(outs); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training_tensors.js + init_define_BUILD_VERSION(); + function checkBatchSize(batchSize) { + util_exports.assert(batchSize > 0 && Number.isInteger(batchSize), () => `batchSize is required to be a positive integer, but got ${batchSize}`); + } + function sliceArrays(arrays, start, stop) { + if (arrays == null) { + return [null]; + } else if (Array.isArray(arrays)) { + return arrays.map((array2) => sliceAlongFirstAxis(array2, start, stop - start)); + } else { + return sliceAlongFirstAxis(arrays, start, stop - start); + } + } + function sliceArraysByIndices(arrays, indices) { + return tidy(() => { + if (arrays == null) { + return null; + } else if (Array.isArray(arrays)) { + return arrays.map((array2) => sliceArraysByIndices(array2, indices)); + } else { + return gather2(arrays, indices.dtype === "int32" ? indices : cast(indices, "int32")); + } + }); + } + function makeBatches(size, batchSize) { + const output = []; + let batchStart = 0; + let batchEnd = null; + while (batchStart < size) { + batchEnd = batchStart + batchSize; + if (batchEnd >= size) { + batchEnd = size; + } + output.push([batchStart, batchEnd]); + batchStart = batchEnd; + } + return output; + } + async function fitLoop(model3, f, ins, outLabels, batchSize, epochs, verbose, callbacks2, valF, valIns, shuffle2, callbackMetrics, initialEpoch, stepsPerEpoch, validationSteps) { + if (batchSize == null) { + batchSize = 32; + } + if (epochs == null) { + epochs = 1; + } + if (shuffle2 == null) { + shuffle2 = true; + } + if (initialEpoch == null) { + initialEpoch = 0; + } + let doValidation = false; + if (valF != null && valIns != null) { + doValidation = true; + } + if (validationSteps != null) { + doValidation = true; + if (stepsPerEpoch == null) { + throw new ValueError("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set."); + } + } + const numTrainSamples = model3.checkNumSamples(ins, batchSize, stepsPerEpoch, "steps_per_epoch"); + let indexArray; + if (numTrainSamples != null) { + indexArray = range2(0, numTrainSamples); + } + if (verbose == null) { + verbose = 1; + } + const { callbackList, history } = configureCallbacks(callbacks2, verbose, epochs, initialEpoch, numTrainSamples, stepsPerEpoch, batchSize, doValidation, callbackMetrics); + callbackList.setModel(model3); + model3.history = history; + await callbackList.onTrainBegin(); + model3.stopTraining_ = false; + for (let epoch = initialEpoch; epoch < epochs; ++epoch) { + await callbackList.onEpochBegin(epoch); + const epochLogs = {}; + if (stepsPerEpoch != null) { + throw new NotImplementedError("stepsPerEpoch mode is not implemented yet."); + } else { + if (shuffle2 === "batch") { + throw new NotImplementedError("batch shuffling is not implemneted yet"); + } else if (shuffle2) { + util_exports.shuffle(indexArray); + } + const epochIndexArray1D = tensor1d(indexArray); + const batches = makeBatches(numTrainSamples, batchSize); + for (let batchIndex = 0; batchIndex < batches.length; ++batchIndex) { + const batchLogs = {}; + await callbackList.onBatchBegin(batchIndex, batchLogs); + tidy(() => { + const batchStart = batches[batchIndex][0]; + const batchEnd = batches[batchIndex][1]; + const batchIds = sliceAlongFirstAxis(epochIndexArray1D, batchStart, batchEnd - batchStart); + batchLogs["batch"] = batchIndex; + batchLogs["size"] = batchEnd - batchStart; + const insBatch = sliceArraysByIndices(ins, batchIds); + const outs = f(insBatch); + for (let i = 0; i < outLabels.length; ++i) { + const label = outLabels[i]; + const out = outs[i]; + batchLogs[label] = out; + keep(out); + } + if (batchIndex === batches.length - 1) { + if (doValidation) { + const valOuts = model3.testLoop(valF, valIns, batchSize); + for (let i = 0; i < outLabels.length; ++i) { + const label = outLabels[i]; + const out = valOuts[i]; + keep(out); + epochLogs["val_" + label] = out; + } + } + } + }); + await callbackList.onBatchEnd(batchIndex, batchLogs); + disposeTensorsInLogs(batchLogs); + if (model3.stopTraining_) { + break; + } + } + epochIndexArray1D.dispose(); + } + await callbackList.onEpochEnd(epoch, epochLogs); + if (model3.stopTraining_) { + break; + } + } + await callbackList.onTrainEnd(); + await model3.history.syncData(); + return model3.history; + } + async function fitTensors(model3, x, y, args = {}) { + if (model3.isTraining) { + throw new Error("Cannot start training because another fit() call is ongoing."); + } + model3.isTraining = true; + let inputs; + let targets; + let originalInputs; + let originalTargets; + let inputValX; + let inputValY; + let valX; + let valY; + let sampleWeights; + try { + const batchSize = args.batchSize == null ? 32 : args.batchSize; + checkBatchSize(batchSize); + const checkBatchAxis = false; + const standardizedOuts = await model3.standardizeUserData(x, y, args.sampleWeight, args.classWeight, checkBatchAxis, batchSize); + inputs = standardizedOuts[0]; + targets = standardizedOuts[1]; + sampleWeights = standardizedOuts[2]; + let doValidation = false; + let valIns; + if (args.validationData != null && args.validationData.length > 0) { + doValidation = true; + if (args.validationData.length === 2) { + inputValX = args.validationData[0]; + inputValY = args.validationData[1]; + } else if (args.validationData.length === 3) { + throw new NotImplementedError("validationData including sample weights is not supported yet."); + } else { + throw new ValueError(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${args.validationData} is invalid.`); + } + const checkBatchAxis2 = true; + const valStandardized = await model3.standardizeUserData(inputValX, inputValY, null, null, checkBatchAxis2, batchSize); + valX = valStandardized[0]; + valY = valStandardized[1]; + valIns = valX.concat(valY); + } else if (args.validationSplit != null && args.validationSplit > 0 && args.validationSplit < 1) { + doValidation = true; + const splitAt = Math.floor(inputs[0].shape[0] * (1 - args.validationSplit)); + const originalBatchSize = inputs[0].shape[0]; + valX = sliceArrays(inputs, splitAt, originalBatchSize); + originalInputs = inputs; + inputs = sliceArrays(inputs, 0, splitAt); + valY = sliceArrays(targets, splitAt, originalBatchSize); + originalTargets = targets; + targets = sliceArrays(targets, 0, splitAt); + valIns = valX.concat(valY); + } else if (args.validationSteps != null) { + doValidation = true; + } + const ins = inputs.concat(targets).concat(sampleWeights); + model3.checkTrainableWeightsConsistency(); + const trainFunction = model3.makeTrainFunction(); + const outLabels = model3.getDedupedMetricsNames(); + let valFunction; + let callbackMetrics; + if (doValidation) { + model3.makeTestFunction(); + valFunction = model3.testFunction; + callbackMetrics = outLabels.slice().concat(outLabels.map((n) => "val_" + n)); + } else { + valFunction = null; + valIns = []; + callbackMetrics = outLabels.slice(); + } + const callbacks2 = standardizeCallbacks(args.callbacks, args.yieldEvery); + const out = await fitLoop(model3, trainFunction, ins, outLabels, batchSize, args.epochs, args.verbose, callbacks2, valFunction, valIns, args.shuffle, callbackMetrics, args.initialEpoch, null, null); + return out; + } finally { + model3.isTraining = false; + disposeNewTensors(inputs, x); + disposeNewTensors(targets, y); + disposeNewTensors(originalInputs, x); + disposeNewTensors(originalTargets, y); + disposeNewTensors(valX, inputValX); + disposeNewTensors(valY, inputValY); + if (sampleWeights != null) { + dispose(sampleWeights); + } + } + } + function ensureTensorsRank2OrHigher(tensors) { + const outs = []; + if (tensors instanceof Tensor) { + tensors = [tensors]; + } + for (let i = 0; i < tensors.length; ++i) { + const tensor2 = tensors[i]; + if (tensor2.rank === 1) { + outs.push(expandDims2(tensor2, 1)); + } else if (tensor2.rank === 0) { + throw new Error("Expected tensor to be at least 1D, but received a 0D tensor (scalar)."); + } else { + outs.push(tensor2); + } + } + return outs; + } + function disposeNewTensors(tensors, refTensors) { + if (tensors == null) { + return; + } + const oldTensorIds = []; + if (refTensors instanceof Tensor) { + oldTensorIds.push(refTensors.id); + } else if (Array.isArray(refTensors)) { + refTensors.forEach((t) => oldTensorIds.push(t.id)); + } else if (refTensors != null) { + for (const name in refTensors) { + const oldTensor = refTensors[name]; + oldTensorIds.push(oldTensor.id); + } + } + const tensorsToDispose = []; + if (tensors instanceof Tensor) { + if (oldTensorIds.indexOf(tensors.id) === -1) { + tensorsToDispose.push(tensors); + } + } else if (Array.isArray(tensors)) { + tensors.forEach((t) => { + if (oldTensorIds.indexOf(t.id) === -1) { + tensorsToDispose.push(t); + } + }); + } else if (tensors != null) { + for (const name in tensors) { + const tensor2 = tensors[name]; + if (oldTensorIds.indexOf(tensor2.id) === -1) { + tensorsToDispose.push(tensor2); + } + } + } + tensorsToDispose.forEach((t) => { + if (!t.isDisposed) { + t.dispose(); + } + }); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training.js + function isDataTensor(x) { + return x instanceof Tensor; + } + function isDataArray(x) { + return Array.isArray(x); + } + function isDataDict(x) { + return !isDataTensor(x) && !isDataArray(x); + } + function standardizeInputData(data, names, shapes, checkBatchAxis = true, exceptionPrefix = "") { + if (names == null || names.length === 0) { + if (data != null) { + let gotUnexpectedData = false; + if (isDataArray(data) && data.length > 0) { + gotUnexpectedData = true; + } else if (isDataDict(data)) { + for (const key in data) { + if (data.hasOwnProperty(key)) { + gotUnexpectedData = true; + break; + } + } + } else { + gotUnexpectedData = true; + } + if (gotUnexpectedData) { + throw new ValueError(`Error when checking model ${exceptionPrefix} expected no data, but got ${data}`); + } + } + return []; + } + if (data == null) { + return names.map((name) => null); + } + let arrays; + if (isDataDict(data)) { + data = data; + arrays = []; + for (const name of names) { + if (data[name] == null) { + throw new ValueError(`No data provided for "${name}". Need data for each key in: ${names}`); + } + arrays.push(data[name]); + } + } else if (isDataArray(data)) { + data = data; + if (data.length !== names.length) { + throw new ValueError(`Error when checking model ${exceptionPrefix}: the Array of Tensors that you are passing to your model is not the size the model expected. Expected to see ${names.length} Tensor(s), but instead got the following list of Tensor(s): ${data}`); + } + arrays = data; + } else { + data = data; + if (names.length > 1) { + throw new ValueError(`The model ${exceptionPrefix} expects ${names.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${data.shape}`); + } + arrays = [data]; + } + arrays = ensureTensorsRank2OrHigher(arrays); + if (shapes != null) { + for (let i = 0; i < names.length; ++i) { + if (shapes[i] == null) { + continue; + } + const array2 = arrays[i]; + if (array2.shape.length !== shapes[i].length) { + throw new ValueError(`Error when checking ${exceptionPrefix}: expected ${names[i]} to have ${shapes[i].length} dimension(s). but got array with shape ${array2.shape}`); + } + for (let j = 0; j < shapes[i].length; ++j) { + if (j === 0 && !checkBatchAxis) { + continue; + } + const dim = array2.shape[j]; + const refDim = shapes[i][j]; + if (refDim != null && refDim >= 0 && dim !== refDim) { + throw new ValueError(`${exceptionPrefix} expected a batch of elements where each example has shape [${shapes[i].slice(1, shapes[i].length)}] (i.e.,tensor shape [*,${shapes[i].slice(1, shapes[i].length)}]) but the ${exceptionPrefix} received an input with ${array2.shape[0]} examples, each with shape [${array2.shape.slice(1, array2.shape.length)}] (tensor shape [${array2.shape}])`); + } + } + } + } + return arrays; + } + function checkArrayLengths(inputs, targets, weights) { + const setX = unique2(inputs.map((input2) => input2.shape[0])); + setX.sort(); + const setY = unique2(targets.map((target) => target.shape[0])); + setY.sort(); + if (setX.length > 1) { + throw new ValueError(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(inputs.map((input2) => input2.shape))}`); + } + if (setY.length > 1) { + throw new ValueError(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(targets.map((target) => target.shape))}`); + } + if (setX.length > 0 && setY.length > 0 && !util_exports.arraysEqual(setX, setY)) { + throw new ValueError(`Input Tensors should have the same number of samples as target Tensors. Found ${setX[0]} input sample(s) and ${setY[0]} target sample(s).`); + } + } + function checkLossAndTargetCompatibility(targets, lossFns, outputShapes) { + const keyLosses = [ + meanSquaredError, + binaryCrossentropy, + categoricalCrossentropy + ]; + for (let i = 0; i < targets.length; ++i) { + const y = targets[i]; + const loss = lossFns[i]; + const shape = outputShapes[i]; + if (loss == null) { + continue; + } + if (loss === categoricalCrossentropy) { + if (y.shape[y.shape.length - 1] === 1) { + throw new ValueError(`You are passing a target array of shape ${y.shape} while using a loss 'categorical_crossentropy'. 'categorical_crossentropy'expects targets to be binary matrices (1s and 0s) of shape [samples, classes].`); + } + } + if (keyLosses.indexOf(loss) !== -1) { + const slicedYShape = y.shape.slice(1); + const slicedShape = shape.slice(1); + for (let j = 0; j < slicedYShape.length; ++j) { + const targetDim = slicedYShape[j]; + const outDim = slicedShape[j]; + if (outDim != null && targetDim !== outDim) { + throw new ValueError(`A target Tensor with shape ${y.shape} was passed for an output of shape ${shape}, while using a loss function that expects targets to have the same shape as the output.`); + } + } + } + } + } + function checkInputData(data, names, shapes, checkBatchAxis = true, exceptionPrefix = "") { + let arrays; + if (Array.isArray(data)) { + if (data.length !== names.length) { + throw new ValueError(`Error when checking model ${exceptionPrefix}: the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see ${names.length} Tensor(s), but instead got ${data.length} Tensors(s).`); + } + arrays = data; + } else { + if (names.length > 1) { + throw new ValueError(`The model expects ${names.length} ${exceptionPrefix} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(data.shape)}.`); + } + arrays = [data]; + } + if (shapes != null) { + for (let i = 0; i < names.length; ++i) { + if (shapes[i] == null) { + continue; + } + const array2 = arrays[i]; + if (array2.shape.length !== shapes[i].length) { + throw new ValueError(`Error when checking ${exceptionPrefix}: expected ${names[i]} to have ${shapes[i].length} dimension(s), but got array with shape ${JSON.stringify(array2.shape)}`); + } + for (let j = 0; j < shapes[i].length; ++j) { + if (j === 0 && !checkBatchAxis) { + continue; + } + const dim = array2.shape[j]; + const refDim = shapes[i][j]; + if (refDim != null) { + if (refDim !== dim) { + throw new ValueError(`Error when checking ${exceptionPrefix}: expected ${names[i]} to have shape ${JSON.stringify(shapes[i])} but got array with shape ${JSON.stringify(array2.shape)}.`); + } + } + } + } + } + } + function collectMetrics(metrics, outputNames) { + if (metrics == null || Array.isArray(metrics) && metrics.length === 0) { + return outputNames.map((name) => []); + } + let wrappedMetrics; + if (typeof metrics === "string" || typeof metrics === "function") { + wrappedMetrics = [metrics]; + } else if (Array.isArray(metrics) || typeof metrics === "object") { + wrappedMetrics = metrics; + } else { + throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${metrics}`); + } + if (Array.isArray(wrappedMetrics)) { + return outputNames.map((name) => wrappedMetrics); + } else { + const nestedMetrics = []; + for (const name of outputNames) { + let outputMetrics = wrappedMetrics.hasOwnProperty(name) ? wrappedMetrics[name] : []; + if (!Array.isArray(outputMetrics)) { + outputMetrics = [outputMetrics]; + } + nestedMetrics.push(outputMetrics); + } + return nestedMetrics; + } + } + var LAYERS_MODEL_FORMAT_NAME = "layers-model"; + var LayersModel = class extends Container { + constructor(args) { + super(args); + this.isTraining = false; + } + summary(lineLength, positions, printFn = console.log) { + if (!this.built) { + throw new ValueError(`This model has never been called, thus its weights have not been created yet. So no summary can be displayed. Build the model first (e.g., by calling it on some test data).`); + } + printSummary(this, lineLength, positions, printFn); + } + compile(args) { + if (args.loss == null) { + args.loss = []; + } + this.loss = args.loss; + if (typeof args.optimizer === "string") { + this.optimizer_ = getOptimizer(args.optimizer); + this.isOptimizerOwned = true; + } else { + if (!(args.optimizer instanceof Optimizer)) { + throw new ValueError(`User-defined optimizer must be an instance of tf.Optimizer.`); + } + this.optimizer_ = args.optimizer; + this.isOptimizerOwned = false; + } + let lossFunctions = []; + if (!Array.isArray(args.loss) && typeof args.loss !== "string" && typeof args.loss !== "function") { + args.loss = args.loss; + for (const name in args.loss) { + if (this.outputNames.indexOf(name) === -1) { + throw new ValueError(`Unknown entry in loss dictionary: "${name}". Only expected the following keys: ${this.outputNames}`); + } + } + for (const name of this.outputNames) { + if (args.loss[name] == null) { + console.warn(`Output "${name}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${name} during training`); + } + lossFunctions.push(get(args.loss[name])); + } + } else if (Array.isArray(args.loss)) { + if (args.loss.length !== this.outputs.length) { + throw new ValueError(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${args.loss}.`); + } + const theLosses = args.loss; + lossFunctions = theLosses.map((l) => get(l)); + } else { + const lossFunction = get(args.loss); + this.outputs.forEach((_) => { + lossFunctions.push(lossFunction); + }); + } + this.lossFunctions = lossFunctions; + this.feedOutputNames = []; + this.feedOutputShapes = []; + this.feedLossFns = []; + for (let i = 0; i < this.outputs.length; ++i) { + const shape = this.internalOutputShapes[i]; + const name = this.outputNames[i]; + this.feedOutputNames.push(name); + this.feedOutputShapes.push(shape); + this.feedLossFns.push(this.lossFunctions[i]); + } + const skipTargetIndices = []; + this.metrics = args.metrics; + this.metricsNames = ["loss"]; + this.metricsTensors = []; + nameScope("loss", () => { + for (let i = 0; i < this.outputs.length; ++i) { + if (skipTargetIndices.indexOf(i) !== -1) { + continue; + } + const weightedLoss = this.lossFunctions[i]; + if (this.outputs.length > 1) { + this.metricsTensors.push([weightedLoss, i]); + this.metricsNames.push(this.outputNames[i] + "_loss"); + } + } + }); + const nestedMetrics = collectMetrics(args.metrics, this.outputNames); + const appendMetric = (outputIndex, metricName, metricTensor) => { + if (this.outputNames.length > 1) { + metricName = this.outputNames[outputIndex] + "_" + metricName; + } + this.metricsNames.push(metricName); + this.metricsTensors.push([metricTensor, outputIndex]); + }; + nameScope("metric", () => { + for (let i = 0; i < this.outputs.length; ++i) { + if (skipTargetIndices.indexOf(i) !== -1) { + continue; + } + const outputMetrics = nestedMetrics[i]; + const handleMetrics = (metrics) => { + const metricNamePrefix = ""; + let metricName; + let accFn; + let weightedMetricFn; + for (const metric of metrics) { + if (typeof metric === "string" && ["accuracy", "acc", "crossentropy", "ce"].indexOf(metric) !== -1) { + const outputShape = this.internalOutputShapes[i]; + if (outputShape[outputShape.length - 1] === 1 || this.lossFunctions[i] === binaryCrossentropy) { + if (["accuracy", "acc"].indexOf(metric) !== -1) { + accFn = binaryAccuracy; + } else if (["crossentropy", "ce"].indexOf(metric) !== -1) { + accFn = binaryCrossentropy2; + } + } else if (this.lossFunctions[i] === sparseCategoricalCrossentropy) { + if (["accuracy", "acc"].indexOf(metric) !== -1) { + accFn = sparseCategoricalAccuracy; + } else if (["crossentropy", "ce"].indexOf(metric) !== -1) { + accFn = sparseCategoricalCrossentropy2; + } + } else { + if (["accuracy", "acc"].indexOf(metric) !== -1) { + accFn = categoricalAccuracy; + } else if (["crossentropy", "ce"].indexOf(metric) !== -1) { + accFn = categoricalCrossentropy2; + } + } + let suffix; + if (["accuracy", "acc"].indexOf(metric) !== -1) { + suffix = "acc"; + } else if (["crossentropy", "ce"].indexOf(metric) !== -1) { + suffix = "ce"; + } + weightedMetricFn = accFn; + metricName = metricNamePrefix + suffix; + } else { + const metricFn = get2(metric); + weightedMetricFn = metricFn; + metricName = metricNamePrefix + getLossOrMetricName(metric); + } + let metricResult; + nameScope(metricName, () => { + metricResult = weightedMetricFn; + }); + appendMetric(i, metricName, metricResult); + } + }; + handleMetrics(outputMetrics); + } + }); + this.collectedTrainableWeights = this.trainableWeights; + } + checkTrainableWeightsConsistency() { + if (this.collectedTrainableWeights == null) { + return; + } + if (this.trainableWeights.length !== this.collectedTrainableWeights.length) { + console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?"); + } + } + evaluate(x, y, args = {}) { + const batchSize = args.batchSize == null ? 32 : args.batchSize; + checkBatchSize(batchSize); + const checkBatchAxis = true; + const standardizedOuts = this.standardizeUserDataXY(x, y, checkBatchAxis, batchSize); + try { + const ins = standardizedOuts[0].concat(standardizedOuts[1]); + this.makeTestFunction(); + const f = this.testFunction; + const testOuts = this.testLoop(f, ins, batchSize, args.verbose, args.steps); + return singletonOrArray(testOuts); + } finally { + disposeNewTensors(standardizedOuts[0], x); + disposeNewTensors(standardizedOuts[1], y); + } + } + async evaluateDataset(dataset, args) { + this.makeTestFunction(); + return evaluateDataset(this, dataset, args); + } + checkNumSamples(ins, batchSize, steps, stepsName = "steps") { + let numSamples; + if (steps != null) { + numSamples = null; + if (batchSize != null) { + throw new ValueError(`If ${stepsName} is set, batchSize must be null or undefined.Got batchSize = ${batchSize}`); + } + } else if (ins != null) { + if (Array.isArray(ins)) { + numSamples = ins[0].shape[0]; + } else { + numSamples = ins.shape[0]; + } + } else { + throw new ValueError(`Either the input data should have a defined shape, or ${stepsName} shoud be specified.`); + } + return numSamples; + } + execute(inputs, outputs) { + if (Array.isArray(outputs) && outputs.length === 0) { + throw new ValueError("`outputs` is an empty Array, which is not allowed."); + } + const outputsIsArray = Array.isArray(outputs); + const outputNames = outputsIsArray ? outputs : [outputs]; + const outputSymbolicTensors = this.retrieveSymbolicTensors(outputNames); + const feedDict = new FeedDict(); + if (inputs instanceof Tensor) { + inputs = [inputs]; + } + if (Array.isArray(inputs)) { + if (inputs.length !== this.inputs.length) { + throw new ValueError(`The number of inputs provided (${inputs.length}) does not match the number of inputs of this model (${this.inputs.length}).`); + } + for (let i = 0; i < this.inputs.length; ++i) { + feedDict.add(this.inputs[i], inputs[i]); + } + } else { + for (const input2 of this.inputs) { + const tensorValue = inputs[input2.name]; + if (tensorValue == null) { + throw new ValueError(`No value is provided for the model's input ${input2.name}`); + } + feedDict.add(input2, tensorValue); + } + } + const executeOutputs = execute(outputSymbolicTensors, feedDict); + return outputsIsArray ? executeOutputs : executeOutputs[0]; + } + retrieveSymbolicTensors(symbolicTensorNames) { + const outputSymbolicTensors = pyListRepeat(null, symbolicTensorNames.length); + let outputsRemaining = symbolicTensorNames.length; + for (const layer of this.layers) { + const layerOutputs = Array.isArray(layer.output) ? layer.output : [layer.output]; + const layerOutputNames = layerOutputs.map((output) => output.name); + for (let i = 0; i < symbolicTensorNames.length; ++i) { + const index = layerOutputNames.indexOf(symbolicTensorNames[i]); + if (index !== -1) { + outputSymbolicTensors[i] = layerOutputs[index]; + outputsRemaining--; + } + if (outputsRemaining === 0) { + break; + } + } + if (outputsRemaining === 0) { + break; + } + } + if (outputsRemaining > 0) { + const remainingNames = []; + outputSymbolicTensors.forEach((tensor2, i) => { + if (tensor2 == null) { + remainingNames.push(symbolicTensorNames[i]); + } + }); + throw new ValueError(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(remainingNames)}`); + } + return outputSymbolicTensors; + } + predictLoop(ins, batchSize = 32, verbose = false) { + return tidy(() => { + const numSamples = this.checkNumSamples(ins); + if (verbose) { + throw new NotImplementedError("Verbose predictLoop() is not implemented yet."); + } + const batches = makeBatches(numSamples, batchSize); + const outsBatches = this.outputs.map((output) => []); + for (let batchIndex = 0; batchIndex < batches.length; ++batchIndex) { + const batchOuts = tidy(() => { + const batchStart = batches[batchIndex][0]; + const batchEnd = batches[batchIndex][1]; + const insBatch = sliceArrays(ins, batchStart, batchEnd); + const feeds = []; + if (Array.isArray(insBatch)) { + for (let i = 0; i < insBatch.length; ++i) { + feeds.push({ key: this.inputs[i], value: insBatch[i] }); + } + } else { + feeds.push({ key: this.inputs[0], value: insBatch }); + } + const feedDict = new FeedDict(feeds); + return execute(this.outputs, feedDict); + }); + batchOuts.forEach((batchOut, i) => outsBatches[i].push(batchOut)); + } + return singletonOrArray(outsBatches.map((batches2) => concat(batches2, 0))); + }); + } + predict(x, args = {}) { + const xsRank2OrHigher = ensureTensorsRank2OrHigher(x); + checkInputData(xsRank2OrHigher, this.inputNames, this.feedInputShapes, false); + try { + const batchSize = args.batchSize == null ? 32 : args.batchSize; + checkBatchSize(batchSize); + return this.predictLoop(xsRank2OrHigher, batchSize); + } finally { + disposeNewTensors(xsRank2OrHigher, x); + } + } + predictOnBatch(x) { + checkInputData(x, this.inputNames, this.feedInputShapes, true); + const batchSize = (Array.isArray(x) ? x[0] : x).shape[0]; + return this.predictLoop(x, batchSize); + } + standardizeUserDataXY(x, y, checkBatchAxis = true, batchSize) { + if (this.optimizer_ == null) { + throw new RuntimeError("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs)."); + } + const outputShapes = []; + for (let i = 0; i < this.feedOutputShapes.length; ++i) { + const outputShape = this.feedOutputShapes[i]; + const lossFn = this.feedLossFns[i]; + if (lossFn === sparseCategoricalCrossentropy) { + outputShapes.push(outputShape.slice(0, outputShape.length - 1).concat([1])); + } else { + outputShapes.push(outputShape); + } + } + x = standardizeInputData(x, this.feedInputNames, this.feedInputShapes, false, "input"); + y = standardizeInputData(y, this.feedOutputNames, outputShapes, false, "target"); + checkArrayLengths(x, y, null); + checkLossAndTargetCompatibility(y, this.feedLossFns, this.feedOutputShapes); + if (this.stateful && batchSize != null && batchSize > 0) { + if (x[0].shape[0] % batchSize !== 0) { + throw new ValueError(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${batchSize}. Found: ${x[0].shape[0]} sample(s).`); + } + } + return [x, y]; + } + async standardizeUserData(x, y, sampleWeight, classWeight, checkBatchAxis = true, batchSize) { + const [standardXs, standardYs] = this.standardizeUserDataXY(x, y, checkBatchAxis, batchSize); + if (sampleWeight != null) { + throw new Error("sample weight is not supported yet."); + } + let standardSampleWeights = null; + if (classWeight != null) { + const classWeights = standardizeClassWeights(classWeight, this.outputNames); + standardSampleWeights = []; + for (let i = 0; i < classWeights.length; ++i) { + standardSampleWeights.push(await standardizeWeights(standardYs[i], null, classWeights[i])); + } + } + return [standardXs, standardYs, standardSampleWeights]; + } + testLoop(f, ins, batchSize, verbose = 0, steps) { + return tidy(() => { + const numSamples = this.checkNumSamples(ins, batchSize, steps, "steps"); + const outs = []; + if (verbose > 0) { + throw new NotImplementedError("Verbose mode is not implemented yet."); + } + if (steps != null) { + throw new NotImplementedError("steps mode in testLoop() is not implemented yet"); + } else { + const batches = makeBatches(numSamples, batchSize); + const indexArray = tensor1d(range2(0, numSamples)); + for (let batchIndex = 0; batchIndex < batches.length; ++batchIndex) { + const batchStart = batches[batchIndex][0]; + const batchEnd = batches[batchIndex][1]; + const batchIds = sliceAlongFirstAxis(indexArray, batchStart, batchEnd - batchStart); + const insBatch = sliceArraysByIndices(ins, batchIds); + const batchOuts = f(insBatch); + if (batchIndex === 0) { + for (let i = 0; i < batchOuts.length; ++i) { + outs.push(scalar(0)); + } + } + for (let i = 0; i < batchOuts.length; ++i) { + const batchOut = batchOuts[i]; + outs[i] = add2(outs[i], mul(batchEnd - batchStart, batchOut)); + } + } + for (let i = 0; i < outs.length; ++i) { + outs[i] = div(outs[i], numSamples); + } + } + return outs; + }); + } + getDedupedMetricsNames() { + const outLabels = this.metricsNames; + const dedupedOutLabels = []; + for (let i = 0; i < outLabels.length; ++i) { + const label = outLabels[i]; + let newLabel = label; + if (count(outLabels, label) > 1) { + const dupIndex = count(outLabels.slice(0, i), label); + newLabel += `_${dupIndex}`; + } + dedupedOutLabels.push(newLabel); + } + return dedupedOutLabels; + } + makeTrainFunction() { + return (data) => { + const lossValues = []; + const inputs = data.slice(0, this.inputs.length); + const targets = data.slice(this.inputs.length, this.inputs.length + this.outputs.length); + const sampleWeights = data.slice(this.inputs.length + this.outputs.length, this.inputs.length + this.outputs.length * 2); + const metricsValues = []; + const totalLossFunction = () => { + const feeds = []; + for (let i = 0; i < this.inputs.length; ++i) { + feeds.push({ key: this.inputs[i], value: inputs[i] }); + } + const feedDict = new FeedDict(feeds); + const outputs = execute(this.outputs, feedDict, { "training": true }); + let totalLoss; + for (let i = 0; i < this.lossFunctions.length; ++i) { + const lossFunction = this.lossFunctions[i]; + let loss = lossFunction(targets[i], outputs[i]); + if (sampleWeights[i] != null) { + loss = computeWeightedLoss(loss, sampleWeights[i]); + } + const meanLoss = mean(loss); + lossValues.push(meanLoss); + if (i === 0) { + totalLoss = loss; + } else { + totalLoss = add2(totalLoss, loss); + } + } + for (let i = 0; i < this.metricsTensors.length; ++i) { + let weightedMetric; + if (this.outputs.length > 1 && i < this.outputs.length) { + weightedMetric = lossValues[i]; + } else { + const metric = this.metricsTensors[i][0]; + const outputIndex = this.metricsTensors[i][1]; + weightedMetric = mean(metric(targets[outputIndex], outputs[outputIndex])); + } + keep(weightedMetric); + metricsValues.push(weightedMetric); + } + totalLoss = mean(totalLoss); + this.calculateLosses().forEach((regularizerLoss) => { + totalLoss = add2(totalLoss, regularizerLoss); + }); + return totalLoss; + }; + const variables = this.collectedTrainableWeights.map((param) => param.read()); + const returnCost = true; + const totalLossValue = this.optimizer_.minimize(totalLossFunction, returnCost, variables); + return [totalLossValue].concat(metricsValues); + }; + } + makeTestFunction() { + this.testFunction = (data) => { + return tidy(() => { + const valOutputs = []; + let totalLoss; + const inputs = data.slice(0, this.inputs.length); + const targets = data.slice(this.inputs.length, this.inputs.length + this.outputs.length); + const feeds = []; + for (let i = 0; i < this.inputs.length; ++i) { + feeds.push({ key: this.inputs[i], value: inputs[i] }); + } + const feedDict = new FeedDict(feeds); + const outputs = execute(this.outputs, feedDict); + for (let i = 0; i < this.lossFunctions.length; ++i) { + const lossFunction = this.lossFunctions[i]; + const loss = mean(lossFunction(targets[i], outputs[i])); + if (i === 0) { + totalLoss = loss; + } else { + totalLoss = add2(totalLoss, loss); + } + valOutputs.push(totalLoss); + } + for (let i = 0; i < this.metricsTensors.length; ++i) { + const metric = this.metricsTensors[i][0]; + const outputIndex = this.metricsTensors[i][1]; + const meanMetric = mean(metric(targets[outputIndex], outputs[outputIndex])); + valOutputs.push(meanMetric); + } + return valOutputs; + }); + }; + } + async fit(x, y, args = {}) { + return fitTensors(this, x, y, args); + } + async fitDataset(dataset, args) { + return fitDataset(this, dataset, args); + } + async trainOnBatch(x, y) { + const standardizeOut = await this.standardizeUserData(x, y); + const inputs = standardizeOut[0]; + const targets = standardizeOut[1]; + const trainFunction = this.makeTrainFunction(); + const losses = trainFunction(inputs.concat(targets)); + const lossValues = []; + for (const loss of losses) { + const v = await loss.data(); + lossValues.push(v[0]); + } + dispose(losses); + disposeNewTensors(standardizeOut[0], x); + disposeNewTensors(standardizeOut[1], y); + return singletonOrArray(lossValues); + } + getNamedWeights(config) { + const namedWeights = []; + const trainableOnly = config != null && config.trainableOnly; + const weights = trainableOnly ? this.trainableWeights : this.weights; + const weightValues = this.getWeights(trainableOnly); + for (let i = 0; i < weights.length; ++i) { + if (trainableOnly && !weights[i].trainable) { + continue; + } + namedWeights.push({ name: weights[i].originalName, tensor: weightValues[i] }); + } + return namedWeights; + } + set stopTraining(stop) { + this.stopTraining_ = stop; + } + get stopTraining() { + return this.stopTraining_; + } + get optimizer() { + return this.optimizer_; + } + set optimizer(optimizer) { + if (this.optimizer_ !== optimizer) { + this.optimizer_ = optimizer; + this.isOptimizerOwned = false; + } + } + dispose() { + const result = super.dispose(); + if (result.refCountAfterDispose === 0 && this.optimizer != null && this.isOptimizerOwned) { + const numTensorsBeforeOptmizerDisposal = memory().numTensors; + this.optimizer_.dispose(); + result.numDisposedVariables += numTensorsBeforeOptmizerDisposal - memory().numTensors; + } + return result; + } + getLossIdentifiers() { + let lossNames; + if (typeof this.loss === "string") { + lossNames = toSnakeCase(this.loss); + } else if (Array.isArray(this.loss)) { + for (const loss of this.loss) { + if (typeof loss !== "string") { + throw new Error("Serialization of non-string loss is not supported."); + } + } + lossNames = this.loss.map((name) => toSnakeCase(name)); + } else { + const outputNames = Object.keys(this.loss); + lossNames = {}; + const losses = this.loss; + for (const outputName of outputNames) { + if (typeof losses[outputName] === "string") { + lossNames[outputName] = toSnakeCase(losses[outputName]); + } else { + throw new Error("Serialization of non-string loss is not supported."); + } + } + } + return lossNames; + } + getMetricIdentifiers() { + if (typeof this.metrics === "string" || typeof this.metrics === "function") { + return [toSnakeCase(getLossOrMetricName(this.metrics))]; + } else if (Array.isArray(this.metrics)) { + return this.metrics.map((metric) => toSnakeCase(getLossOrMetricName(metric))); + } else { + const metricsIdentifiers = {}; + for (const key in this.metrics) { + metricsIdentifiers[key] = toSnakeCase(getLossOrMetricName(this.metrics[key])); + } + return metricsIdentifiers; + } + } + getTrainingConfig() { + return { + loss: this.getLossIdentifiers(), + metrics: this.getMetricIdentifiers(), + optimizer_config: { + class_name: this.optimizer.getClassName(), + config: this.optimizer.getConfig() + } + }; + } + loadTrainingConfig(trainingConfig) { + if (trainingConfig.weighted_metrics != null) { + throw new Error("Loading weight_metrics is not supported yet."); + } + if (trainingConfig.loss_weights != null) { + throw new Error("Loading loss_weights is not supported yet."); + } + if (trainingConfig.sample_weight_mode != null) { + throw new Error("Loading sample_weight_mode is not supported yet."); + } + const tsConfig = convertPythonicToTs(trainingConfig.optimizer_config); + const optimizer = deserialize(tsConfig); + let loss; + if (typeof trainingConfig.loss === "string") { + loss = toCamelCase(trainingConfig.loss); + } else if (Array.isArray(trainingConfig.loss)) { + loss = trainingConfig.loss.map((lossEntry) => toCamelCase(lossEntry)); + } else if (trainingConfig.loss != null) { + loss = {}; + for (const key in trainingConfig.loss) { + loss[key] = toCamelCase(trainingConfig.loss[key]); + } + } + let metrics; + if (Array.isArray(trainingConfig.metrics)) { + metrics = trainingConfig.metrics.map((metric) => toCamelCase(metric)); + } else if (trainingConfig.metrics != null) { + metrics = {}; + for (const key in trainingConfig.metrics) { + metrics[key] = toCamelCase(trainingConfig.metrics[key]); + } + } + this.compile({ loss, metrics, optimizer }); + } + async save(handlerOrURL, config) { + if (typeof handlerOrURL === "string") { + const handlers = io_exports.getSaveHandlers(handlerOrURL); + if (handlers.length === 0) { + throw new ValueError(`Cannot find any save handlers for URL '${handlerOrURL}'`); + } else if (handlers.length > 1) { + throw new ValueError(`Found more than one (${handlers.length}) save handlers for URL '${handlerOrURL}'`); + } + handlerOrURL = handlers[0]; + } + if (handlerOrURL.save == null) { + throw new ValueError("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined."); + } + const weightDataAndSpecs = await io_exports.encodeWeights(this.getNamedWeights(config)); + const returnString = false; + const unusedArg = null; + const modelConfig = this.toJSON(unusedArg, returnString); + const modelArtifacts = { + modelTopology: modelConfig, + format: LAYERS_MODEL_FORMAT_NAME, + generatedBy: `TensorFlow.js tfjs-layers v${version}`, + convertedBy: null + }; + const includeOptimizer = config == null ? false : config.includeOptimizer; + if (includeOptimizer && this.optimizer != null) { + modelArtifacts.trainingConfig = this.getTrainingConfig(); + const weightType = "optimizer"; + const { data: optimizerWeightData, specs: optimizerWeightSpecs } = await io_exports.encodeWeights(await this.optimizer.getWeights(), weightType); + weightDataAndSpecs.specs.push(...optimizerWeightSpecs); + weightDataAndSpecs.data = io_exports.concatenateArrayBuffers([weightDataAndSpecs.data, optimizerWeightData]); + } + if (this.userDefinedMetadata != null) { + const checkSize = true; + checkUserDefinedMetadata(this.userDefinedMetadata, this.name, checkSize); + modelArtifacts.userDefinedMetadata = this.userDefinedMetadata; + } + modelArtifacts.weightData = weightDataAndSpecs.data; + modelArtifacts.weightSpecs = weightDataAndSpecs.specs; + return handlerOrURL.save(modelArtifacts); + } + setUserDefinedMetadata(userDefinedMetadata) { + checkUserDefinedMetadata(userDefinedMetadata, this.name); + this.userDefinedMetadata = userDefinedMetadata; + } + getUserDefinedMetadata() { + return this.userDefinedMetadata; + } + }; + LayersModel.className = "Model"; + serialization_exports.registerClass(LayersModel); + var Functional = class extends LayersModel { + }; + Functional.className = "Functional"; + serialization_exports.registerClass(Functional); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/models.js + init_define_BUILD_VERSION(); + async function loadLayersModelInternal(pathOrIOHandler, options) { + if (options == null) { + options = {}; + } + if (typeof pathOrIOHandler === "string") { + const handlers = io_exports.getLoadHandlers(pathOrIOHandler, options); + if (handlers.length === 0) { + handlers.push(io_exports.browserHTTPRequest(pathOrIOHandler, options)); + } else if (handlers.length > 1) { + throw new ValueError(`Found more than one (${handlers.length}) load handlers for URL '${pathOrIOHandler}'`); + } + pathOrIOHandler = handlers[0]; + } + return loadLayersModelFromIOHandler(pathOrIOHandler, void 0, options); + } + async function loadLayersModelFromIOHandler(handler, customObjects, options) { + if (options == null) { + options = {}; + } + if (handler.load == null) { + throw new ValueError("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented."); + } + const artifacts = await handler.load(); + let modelTopology = artifacts.modelTopology; + if (modelTopology["model_config"] != null) { + modelTopology = modelTopology["model_config"]; + } + const strict = options.strict == null ? true : options.strict; + const fastWeightInit = artifacts.weightData != null && artifacts.weightSpecs != null && strict; + const model3 = deserialize(convertPythonicToTs(modelTopology), customObjects, fastWeightInit); + const trainingConfig = artifacts.trainingConfig; + if (trainingConfig != null) { + model3.loadTrainingConfig(trainingConfig); + } + if (artifacts.userDefinedMetadata != null) { + model3.setUserDefinedMetadata(artifacts.userDefinedMetadata); + } + if (artifacts.weightData != null) { + if (artifacts.weightSpecs == null) { + throw new ValueError("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed."); + } + const { modelWeights, optimizerWeights } = decodeModelAndOptimizerWeights(artifacts.weightData, artifacts.weightSpecs); + model3.loadWeights(modelWeights, strict); + if (model3.optimizer != null && optimizerWeights.length > 0) { + await model3.optimizer.setWeights(optimizerWeights); + } + dispose(modelWeights); + dispose(optimizerWeights.map((w) => w.tensor)); + } + return model3; + } + function decodeModelAndOptimizerWeights(buffer2, specs) { + const name2Tensor = io_exports.decodeWeights(buffer2, specs); + const modelWeights = {}; + const optimizerWeights = []; + specs.forEach((spec) => { + if (spec.group === "optimizer") { + optimizerWeights.push({ name: spec.name, tensor: name2Tensor[spec.name] }); + } else { + modelWeights[spec.name] = name2Tensor[spec.name]; + } + }); + return { modelWeights, optimizerWeights }; + } + var Sequential = class extends LayersModel { + constructor(args) { + super({ inputs: [], outputs: [] }); + args = args || {}; + this.trainable = true; + this.built = false; + this.name = args.name != null ? args.name : getUid("sequential_"); + if (args.layers != null) { + for (const layer of args.layers) { + this.add(layer); + } + } + } + checkShape(layer) { + const shape = layer.inboundNodes[0].outputTensors[0].shape; + if (shape.some((x) => x < 0)) { + throw new ValueError(`Negative dimension size caused by adding layer ${layer.name} with input shape [${layer.inboundNodes[0].inputTensors[0].shape}]`); + } + } + add(layer) { + const isLayerModelInstance = layer instanceof Sequential || layer instanceof LayersModel; + let modelLayer; + if (isLayerModelInstance) { + modelLayer = layer; + if (modelLayer.outputs.length !== 1) { + throw new ValueError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API."); + } + if (modelLayer.inputs.length !== 1) { + throw new ValueError("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API."); + } + } + if (this.outputs.length === 0) { + if (layer.inboundNodes.length === 0) { + if (layer.batchInputShape == null) { + throw new ValueError("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument."); + } + const x = Input({ + batchShape: layer.batchInputShape, + dtype: layer.dtype, + name: layer.name + "_input" + }); + layer.apply(x); + } + if (isLayerModelInstance) { + this.outputs = modelLayer.outputs; + this.inputs = modelLayer.inputs; + } else { + if (layer.inboundNodes.length !== 1) { + throw new ValueError(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${layer.name} which has ${layer.inboundNodes.length} pre-existing inbound connections.`); + } + if (layer.inboundNodes[0].outputTensors.length !== 1) { + throw new ValueError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API."); + } + this.checkShape(layer); + this.outputs = [layer.inboundNodes[0].outputTensors[0]]; + this.inputs = getSourceInputs(this.outputs[0]); + } + this.inboundNodes = []; + new Node({ + outboundLayer: this, + inboundLayers: [], + nodeIndices: [], + tensorIndices: [], + inputTensors: this.inputs, + outputTensors: this.outputs, + inputMasks: pyListRepeat(null, this.inputs.length), + outputMasks: [null], + inputShapes: this.inputs.map((x) => x.shape), + outputShapes: this.outputs[0].shape + }); + } else { + const outputTensor = layer.apply(this.outputs[0]); + if (Array.isArray(outputTensor)) { + throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API."); + } + this.checkShape(layer); + this.outputs = [outputTensor]; + this.inboundNodes[0].outputTensors = this.outputs; + this.inboundNodes[0].outputShapes = [this.outputs[0].shape]; + } + this.layers.push(layer); + this.built = false; + } + pop() { + if (this.layers.length === 0) { + throw new TypeError("There are no layers in the model."); + } + this.layers.pop(); + if (this.layers.length === 0) { + this.outputs = []; + this.inboundNodes = []; + this.outboundNodes = []; + } else { + const lastLayerIndex = this.layers.length - 1; + this.layers[lastLayerIndex].outboundNodes = []; + this.outputs = [this.layers[lastLayerIndex].output]; + this.inboundNodes[0].outputTensors = this.outputs; + this.inboundNodes[0].outputShapes = [this.outputs[0].shape]; + } + } + call(inputs, kwargs) { + if (this.model == null) { + this.build(); + } + return this.model.call(inputs, kwargs); + } + build(inputShape) { + getExactlyOneShape(inputShape); + if (this.inputs.length === 0 || this.outputs.length === 0) { + throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first."); + } + this.model = new LayersModel({ + inputs: this.inputs, + outputs: this.outputs[0], + name: this.name + "_model" + }); + this.model.trainable = this.trainable; + this.supportsMasking = this.model.supportsMasking; + this.inputLayers = this.model.inputLayers; + this.inputLayersNodeIndices = this.model.inputLayersNodeIndices; + this.inputLayersTensorIndices = this.model.inputLayersTensorIndices; + this.outputLayers = this.model.outputLayers; + this.outputLayersNodeIndices = this.model.outputLayersNodeIndices; + this.outputLayersTensorIndices = this.model.outputLayersTensorIndices; + this.nodesByDepth = this.model.nodesByDepth; + this.containerNodes = this.model.containerNodes; + this.outputNames = this.model.outputNames; + this.inputNames = this.model.inputNames; + this.built = true; + } + countParams() { + if (!this.built) { + this.build(); + } + return super.countParams(); + } + summary(lineLength, positions, printFn = console.log) { + if (!this.built) { + this.build(); + } + super.summary(lineLength, positions, printFn); + } + setWeights(weights) { + if (this.model == null) { + this.build(); + } + this.model.setWeights(weights); + } + evaluate(x, y, args = {}) { + if (!this.built) { + throw new RuntimeError("The model needs to be compiled before being used."); + } + return this.model.evaluate(x, y, args); + } + async evaluateDataset(dataset, args) { + if (!this.built) { + throw new RuntimeError("The model needs to be compiled before being used."); + } + return this.model.evaluateDataset(dataset, args); + } + predict(x, args = {}) { + if (this.model == null) { + this.build(); + } + return this.model.predict(x, args); + } + predictOnBatch(x) { + if (this.model == null) { + this.build(); + } + return this.model.predictOnBatch(x); + } + compile(args) { + this.build(); + this.model.compile(args); + this.optimizer_ = this.model.optimizer; + this.isOptimizerOwned = this.model.isOptimizerOwned; + this.loss = this.model.loss; + this.metrics = this.model.metrics; + this.metricsTensors = this.model.metricsTensors; + this.metricsNames = this.model.metricsNames; + } + get optimizer() { + return this.model == null ? void 0 : this.model.optimizer; + } + set optimizer(optimizer) { + this.model.optimizer = optimizer; + } + async fit(x, y, args = {}) { + if (!this.built) { + throw new RuntimeError("The model needs to be compiled before being used."); + } + return this.model.fit(x, y, args); + } + async fitDataset(dataset, args) { + if (!this.built) { + throw new RuntimeError("The model needs to be compiled before being used."); + } + return this.model.fitDataset(dataset, args); + } + async trainOnBatch(x, y) { + return this.model.trainOnBatch(x, y); + } + static fromConfig(cls, config, customObjects = {}, fastWeightInit = false) { + let configArray; + let extraModelConfig = {}; + if (config instanceof Array) { + if (!(config[0].className != null) || config[0]["className"] === "Merge") { + throw new ValueError("Legacy serialization format not supported yet."); + } + configArray = config; + } else { + util_exports.assert(config["layers"] != null, () => `When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field.`); + configArray = config["layers"]; + delete config["layers"]; + extraModelConfig = config; + } + const model3 = new cls(extraModelConfig); + if (!(model3 instanceof Sequential)) { + throw new NotImplementedError(`Sequential.fromConfig called on non-Sequential input: ${model3}`); + } + for (const conf of configArray) { + const customObjects2 = void 0; + const layer = deserialize(conf, customObjects2, fastWeightInit); + if (fastWeightInit) { + layer.setFastWeightInitDuringBuild(true); + } + model3.add(layer); + } + return model3; + } + set stopTraining(stop) { + if (this.model == null) { + throw new ValueError("Cannot set the stopTraining property of a sequential model before it is compiled."); + } + this.model.stopTraining = stop; + } + get stopTraining() { + if (this.model == null) { + throw new ValueError("Cannot get the stopTraining property of a sequential model before it is compiled."); + } + return this.model.stopTraining; + } + getConfig() { + const layers = []; + for (const layer of this.layers) { + const dict = {}; + dict["className"] = layer.getClassName(); + dict["config"] = layer.getConfig(); + layers.push(dict); + } + return { name: this.name, layers }; + } + }; + Sequential.className = "Sequential"; + serialization_exports.registerClass(Sequential); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports.js + function loadLayersModel(pathOrIOHandler, options) { + if (options == null) { + options = {}; + } + return loadLayersModelInternal(pathOrIOHandler, options); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/advanced_activations.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/activations.js + init_define_BUILD_VERSION(); + var Activation = class extends serialization_exports.Serializable { + getConfig() { + return {}; + } + }; + var Elu2 = class extends Activation { + apply(x, alpha = 1) { + return elu2(x, alpha); + } + }; + Elu2.className = "elu"; + serialization_exports.registerClass(Elu2); + var Selu2 = class extends Activation { + apply(x) { + return selu(x); + } + }; + Selu2.className = "selu"; + serialization_exports.registerClass(Selu2); + var Relu2 = class extends Activation { + apply(x) { + return relu(x); + } + }; + Relu2.className = "relu"; + serialization_exports.registerClass(Relu2); + var Relu62 = class extends Activation { + apply(x) { + return tidy(() => minimum(6, relu(x))); + } + }; + Relu62.className = "relu6"; + serialization_exports.registerClass(Relu62); + var Linear = class extends Activation { + apply(x) { + return x; + } + }; + Linear.className = "linear"; + serialization_exports.registerClass(Linear); + var Sigmoid2 = class extends Activation { + apply(x) { + return sigmoid(x); + } + }; + Sigmoid2.className = "sigmoid"; + serialization_exports.registerClass(Sigmoid2); + var HardSigmoid = class extends Activation { + apply(x) { + return hardSigmoid(x); + } + }; + HardSigmoid.className = "hardSigmoid"; + serialization_exports.registerClass(HardSigmoid); + var Softplus2 = class extends Activation { + apply(x) { + return softplus(x); + } + }; + Softplus2.className = "softplus"; + serialization_exports.registerClass(Softplus2); + var Softsign = class extends Activation { + apply(x) { + return softsign(x); + } + }; + Softsign.className = "softsign"; + serialization_exports.registerClass(Softsign); + var Tanh2 = class extends Activation { + apply(x) { + return tanh2(x); + } + }; + Tanh2.className = "tanh"; + serialization_exports.registerClass(Tanh2); + var Softmax2 = class extends Activation { + apply(x, axis = -1) { + return softmax(x, axis); + } + }; + Softmax2.className = "softmax"; + serialization_exports.registerClass(Softmax2); + var LogSoftmax2 = class extends Activation { + apply(x, axis = -1) { + return logSoftmax(x, axis); + } + }; + LogSoftmax2.className = "logSoftmax"; + serialization_exports.registerClass(LogSoftmax2); + var Swish = class extends Activation { + apply(x, alpha = 1) { + return tidy(() => mul(sigmoid(mul(x, alpha)), x)); + } + }; + Swish.className = "swish"; + serialization_exports.registerClass(Swish); + var Mish = class extends Activation { + apply(x) { + return tidy(() => mul(x, tanh2(softplus(x)))); + } + }; + Mish.className = "mish"; + serialization_exports.registerClass(Mish); + function serializeActivation(activation) { + return activation.getClassName(); + } + function deserializeActivation(config, customObjects = {}) { + return deserializeKerasObject(config, serialization_exports.SerializationMap.getMap().classNameMap, customObjects, "activation"); + } + function getActivation(identifier) { + if (identifier == null) { + const config = {}; + config["className"] = "linear"; + config["config"] = {}; + return deserializeActivation(config); + } + if (typeof identifier === "string") { + const config = {}; + config["className"] = identifier; + config["config"] = {}; + return deserializeActivation(config); + } else if (identifier instanceof Activation) { + return identifier; + } else { + return deserializeActivation(identifier); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/regularizers.js + init_define_BUILD_VERSION(); + function assertObjectArgs(args) { + if (args != null && typeof args !== "object") { + throw new Error(`Argument to L1L2 regularizer's constructor is expected to be an object, but received: ${args}`); + } + } + var Regularizer = class extends serialization_exports.Serializable { + }; + var L1L2 = class extends Regularizer { + constructor(args) { + super(); + assertObjectArgs(args); + this.l1 = args == null || args.l1 == null ? 0.01 : args.l1; + this.l2 = args == null || args.l2 == null ? 0.01 : args.l2; + this.hasL1 = this.l1 !== 0; + this.hasL2 = this.l2 !== 0; + } + apply(x) { + return tidy(() => { + let regularization = zeros([1]); + if (this.hasL1) { + regularization = add2(regularization, sum2(mul(this.l1, abs(x)))); + } + if (this.hasL2) { + regularization = add2(regularization, sum2(mul(this.l2, square2(x)))); + } + return reshape(regularization, []); + }); + } + getConfig() { + return { "l1": this.l1, "l2": this.l2 }; + } + static fromConfig(cls, config) { + return new cls({ l1: config["l1"], l2: config["l2"] }); + } + }; + L1L2.className = "L1L2"; + serialization_exports.registerClass(L1L2); + var REGULARIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP = { + "l1l2": "L1L2" + }; + function serializeRegularizer(constraint) { + return serializeKerasObject(constraint); + } + function deserializeRegularizer(config, customObjects = {}) { + return deserializeKerasObject(config, serialization_exports.SerializationMap.getMap().classNameMap, customObjects, "regularizer"); + } + function getRegularizer(identifier) { + if (identifier == null) { + return null; + } + if (typeof identifier === "string") { + const className = identifier in REGULARIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP ? REGULARIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP[identifier] : identifier; + const config = { className, config: {} }; + return deserializeRegularizer(config); + } else if (identifier instanceof Regularizer) { + return identifier; + } else { + return deserializeRegularizer(identifier); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/advanced_activations.js + var ReLU = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.supportsMasking = true; + if (args != null) { + this.maxValue = args.maxValue; + } + } + call(inputs, kwargs) { + inputs = getExactlyOneTensor(inputs); + let output = relu(inputs); + if (this.maxValue != null) { + output = clipByValue(output, 0, this.maxValue); + } + return output; + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const config = { maxValue: this.maxValue }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + ReLU.className = "ReLU"; + serialization_exports.registerClass(ReLU); + var LeakyReLU = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.DEFAULT_ALPHA = 0.3; + if (args == null) { + args = {}; + } + this.alpha = args.alpha == null ? this.DEFAULT_ALPHA : args.alpha; + } + call(inputs, kwargs) { + const x = getExactlyOneTensor(inputs); + return leakyRelu(x, this.alpha); + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const config = { alpha: this.alpha }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + LeakyReLU.className = "LeakyReLU"; + serialization_exports.registerClass(LeakyReLU); + var PReLU = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.DEFAULT_ALPHA_INITIALIZER = "zeros"; + if (args == null) { + args = {}; + } + this.supportsMasking = true; + this.alphaInitializer = getInitializer(args.alphaInitializer || this.DEFAULT_ALPHA_INITIALIZER); + this.alphaRegularizer = getRegularizer(args.alphaRegularizer); + this.alphaConstraint = getConstraint(args.alphaConstraint); + if (args.sharedAxes == null) { + this.sharedAxes = null; + } else if (Array.isArray(args.sharedAxes)) { + this.sharedAxes = args.sharedAxes; + } else if (typeof args.sharedAxes === "number") { + this.sharedAxes = [args.sharedAxes]; + } else { + throw new ValueError(`Expected sharedAxes to be a number or an array of numbers, but got ${args.sharedAxes}`); + } + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const paramShape = inputShape.slice(1); + if (this.sharedAxes != null) { + for (const i of this.sharedAxes) { + paramShape[i - 1] = 1; + } + } + this.alpha = this.addWeight("alpha", paramShape, "float32", this.alphaInitializer, this.alphaRegularizer, true, this.alphaConstraint); + const axes = {}; + if (this.sharedAxes != null) { + for (let i = 1; i < inputShape.length; ++i) { + axes[i] = inputShape[i]; + } + } + this.inputSpec = [new InputSpec({ + ndim: inputShape.length, + axes + })]; + this.built = true; + } + call(inputs, kwargs) { + inputs = getExactlyOneTensor(inputs); + return prelu(inputs, this.alpha.read()); + } + getConfig() { + const config = { + alphaInitializer: serializeInitializer(this.alphaInitializer), + alphaRegularizer: serializeRegularizer(this.alphaRegularizer), + alphaConstraint: serializeConstraint(this.alphaConstraint), + sharedAxes: this.sharedAxes + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + PReLU.className = "PReLU"; + serialization_exports.registerClass(PReLU); + var ELU = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.DEFAULT_ALPHA = 1; + if (args == null) { + args = {}; + } + if (args.alpha != null && args.alpha !== this.DEFAULT_ALPHA) { + throw new NotImplementedError(`Non-default alpha value (${args.alpha}) is not supported by the ELU layer yet.`); + } + this.alpha = args.alpha == null ? this.DEFAULT_ALPHA : args.alpha; + } + call(inputs, kwargs) { + const x = getExactlyOneTensor(inputs); + return elu(x); + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const config = { alpha: this.alpha }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + ELU.className = "ELU"; + serialization_exports.registerClass(ELU); + var ThresholdedReLU = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.DEFAULT_THETA = 1; + if (args == null) { + args = {}; + } + this.theta = args.theta == null ? this.DEFAULT_THETA : args.theta; + } + call(inputs, kwargs) { + const x = getExactlyOneTensor(inputs); + return mul(x, cast(greater(x, this.theta), "float32")); + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const config = { theta: this.theta }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + ThresholdedReLU.className = "ThresholdedReLU"; + serialization_exports.registerClass(ThresholdedReLU); + var Softmax3 = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.DEFAULT_AXIS = 1; + if (args == null) { + args = {}; + } + this.softmax = new Softmax2().apply; + this.axis = args.axis == null ? this.DEFAULT_AXIS : args.axis; + } + call(inputs, kwargs) { + const x = getExactlyOneTensor(inputs); + return this.softmax(x, this.axis); + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const config = { axis: this.axis }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Softmax3.className = "Softmax"; + serialization_exports.registerClass(Softmax3); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/conv_utils.js + init_define_BUILD_VERSION(); + function normalizeArray(value, n, name) { + if (typeof value === "number") { + return pyListRepeat(value, n); + } else { + if (value.length !== n) { + throw new ValueError(`The ${name} argument must be an integer or tuple of ${n} integers. Received: ${value.length} elements.`); + } + for (let i = 0; i < n; ++i) { + const singleValue = value[i]; + if (!isInteger(singleValue)) { + throw new ValueError(`The ${name} argument must be an integer or tuple of ${n} integers. Received: ${JSON.stringify(value)} including a non-integer number ${singleValue}`); + } + } + return value; + } + } + function convOutputLength(inputLength, filterSize, padding, stride, dilation = 1) { + if (inputLength == null) { + return inputLength; + } + const dilatedFilterSize = filterSize + (filterSize - 1) * (dilation - 1); + let outputLength; + if (padding === "same") { + outputLength = inputLength; + } else { + outputLength = inputLength - dilatedFilterSize + 1; + } + return Math.floor((outputLength + stride - 1) / stride); + } + function deconvLength(dimSize, strideSize, kernelSize, padding) { + if (dimSize == null) { + return null; + } + if (padding === "valid") { + dimSize = dimSize * strideSize + max2([kernelSize - strideSize, 0]); + } else if (padding === "same") { + dimSize = dimSize * strideSize; + } else { + throw new ValueError(`Unsupport padding mode: ${padding}.`); + } + return dimSize; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional.js + function preprocessConv2DInput(x, dataFormat) { + return tidy(() => { + checkDataFormat(dataFormat); + if (dataFormat === "channelsFirst") { + return transpose(x, [0, 2, 3, 1]); + } else { + return x; + } + }); + } + function preprocessConv3DInput(x, dataFormat) { + return tidy(() => { + checkDataFormat(dataFormat); + if (dataFormat === "channelsFirst") { + return transpose(x, [0, 2, 3, 4, 1]); + } else { + return x; + } + }); + } + function conv1dWithBias(x, kernel, bias, strides = 1, padding = "valid", dataFormat, dilationRate = 1) { + return tidy(() => { + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + checkDataFormat(dataFormat); + if (x.shape.length !== 3) { + throw new ValueError(`The input of a conv1dWithBias operation should be 3, but is ${x.shape.length} instead.`); + } + if (kernel.shape.length !== 3) { + throw new ValueError(`The kernel for a conv1dWithBias operation should be 3, but is ${kernel.shape.length} instead`); + } + if (bias != null && bias.shape.length !== 1) { + throw new ValueError(`The bias for a conv1dWithBias operation should be 1, but is ${kernel.shape.length} instead`); + } + if (dataFormat === "channelsFirst") { + x = transpose(x, [0, 2, 1]); + } + if (padding === "causal") { + throw new NotImplementedError("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet."); + } + let y = conv1d(x, kernel, strides, padding === "same" ? "same" : "valid", "NWC", dilationRate); + if (bias != null) { + y = biasAdd(y, bias); + } + return y; + }); + } + function conv2dWithBiasActivation(x, kernel, bias, strides = [1, 1], padding = "valid", dataFormat, dilationRate, activation = null) { + return tidy(() => { + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + checkDataFormat(dataFormat); + if (x.rank !== 3 && x.rank !== 4) { + throw new ValueError(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${x.rank}.`); + } + if (kernel.rank !== 3 && kernel.rank !== 4) { + throw new ValueError(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${x.rank}.`); + } + let y = preprocessConv2DInput(x, dataFormat); + if (padding === "causal") { + throw new NotImplementedError("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet."); + } + y = fused_ops_exports.conv2d({ + x: y, + filter: kernel, + strides, + pad: padding === "same" ? "same" : "valid", + dilations: dilationRate, + dataFormat: "NHWC", + bias, + activation + }); + if (dataFormat === "channelsFirst") { + y = transpose(y, [0, 3, 1, 2]); + } + return y; + }); + } + function conv3dWithBias(x, kernel, bias, strides = [1, 1, 1], padding = "valid", dataFormat, dilationRate) { + return tidy(() => { + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + checkDataFormat(dataFormat); + if (x.rank !== 4 && x.rank !== 5) { + throw new ValueError(`conv3dWithBias expects input to be of rank 4 or 5, but received ${x.rank}.`); + } + if (kernel.rank !== 4 && kernel.rank !== 5) { + throw new ValueError(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${x.rank}.`); + } + let y = preprocessConv3DInput(x, dataFormat); + if (padding === "causal") { + throw new NotImplementedError("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet."); + } + y = conv3d(y, kernel, strides, padding === "same" ? "same" : "valid", "NDHWC", dilationRate); + if (bias != null) { + y = biasAdd(y, bias); + } + if (dataFormat === "channelsFirst") { + y = transpose(y, [0, 4, 1, 2, 3]); + } + return y; + }); + } + var BaseConv = class extends Layer { + constructor(rank, args) { + super(args); + this.bias = null; + this.DEFAULT_KERNEL_INITIALIZER = "glorotNormal"; + this.DEFAULT_BIAS_INITIALIZER = "zeros"; + BaseConv.verifyArgs(args); + this.rank = rank; + assertPositiveInteger(this.rank, "rank"); + if (this.rank !== 1 && this.rank !== 2 && this.rank !== 3) { + throw new NotImplementedError(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`); + } + this.kernelSize = normalizeArray(args.kernelSize, rank, "kernelSize"); + this.strides = normalizeArray(args.strides == null ? 1 : args.strides, rank, "strides"); + this.padding = args.padding == null ? "valid" : args.padding; + checkPaddingMode(this.padding); + this.dataFormat = args.dataFormat == null ? "channelsLast" : args.dataFormat; + checkDataFormat(this.dataFormat); + this.activation = getActivation(args.activation); + this.useBias = args.useBias == null ? true : args.useBias; + this.biasInitializer = getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER); + this.biasConstraint = getConstraint(args.biasConstraint); + this.biasRegularizer = getRegularizer(args.biasRegularizer); + this.activityRegularizer = getRegularizer(args.activityRegularizer); + this.dilationRate = normalizeArray(args.dilationRate == null ? 1 : args.dilationRate, rank, "dilationRate"); + if (this.rank === 1 && (Array.isArray(this.dilationRate) && this.dilationRate.length !== 1)) { + throw new ValueError(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`); + } else if (this.rank === 2) { + if (typeof this.dilationRate === "number") { + this.dilationRate = [this.dilationRate, this.dilationRate]; + } else if (this.dilationRate.length !== 2) { + throw new ValueError(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`); + } + } else if (this.rank === 3) { + if (typeof this.dilationRate === "number") { + this.dilationRate = [this.dilationRate, this.dilationRate, this.dilationRate]; + } else if (this.dilationRate.length !== 3) { + throw new ValueError(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`); + } + } + } + static verifyArgs(args) { + assert2("kernelSize" in args, `required key 'kernelSize' not in config`); + if (typeof args.kernelSize !== "number" && !checkArrayTypeAndLength(args.kernelSize, "number", 1, 3)) { + throw new ValueError(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(args.kernelSize)}.`); + } + } + getConfig() { + const config = { + kernelSize: this.kernelSize, + strides: this.strides, + padding: this.padding, + dataFormat: this.dataFormat, + dilationRate: this.dilationRate, + activation: serializeActivation(this.activation), + useBias: this.useBias, + biasInitializer: serializeInitializer(this.biasInitializer), + biasRegularizer: serializeRegularizer(this.biasRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + biasConstraint: serializeConstraint(this.biasConstraint) + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + var Conv = class extends BaseConv { + constructor(rank, args) { + super(rank, args); + this.kernel = null; + Conv.verifyArgs(args); + this.filters = args.filters; + assertPositiveInteger(this.filters, "filters"); + this.kernelInitializer = getInitializer(args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.kernelConstraint = getConstraint(args.kernelConstraint); + this.kernelRegularizer = getRegularizer(args.kernelRegularizer); + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : inputShape.length - 1; + if (inputShape[channelAxis] == null) { + throw new ValueError(`The channel dimension of the input should be defined. Found ${inputShape[channelAxis]}`); + } + const inputDim = inputShape[channelAxis]; + const kernelShape = this.kernelSize.concat([inputDim, this.filters]); + this.kernel = this.addWeight("kernel", kernelShape, null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.filters], null, this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } + this.inputSpec = [{ ndim: this.rank + 2, axes: { [channelAxis]: inputDim } }]; + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + let outputs; + const biasValue = this.bias == null ? null : this.bias.read(); + const fusedActivationName = mapActivationToFusedKernel(this.activation.getClassName()); + if (fusedActivationName != null && this.rank === 2) { + outputs = conv2dWithBiasActivation(inputs, this.kernel.read(), biasValue, this.strides, this.padding, this.dataFormat, this.dilationRate, fusedActivationName); + } else { + if (this.rank === 1) { + outputs = conv1dWithBias(inputs, this.kernel.read(), biasValue, this.strides[0], this.padding, this.dataFormat, this.dilationRate[0]); + } else if (this.rank === 2) { + outputs = conv2dWithBiasActivation(inputs, this.kernel.read(), biasValue, this.strides, this.padding, this.dataFormat, this.dilationRate); + } else if (this.rank === 3) { + outputs = conv3dWithBias(inputs, this.kernel.read(), biasValue, this.strides, this.padding, this.dataFormat, this.dilationRate); + } else { + throw new NotImplementedError("convolutions greater than 3D are not implemented yet."); + } + if (this.activation != null) { + outputs = this.activation.apply(outputs); + } + } + return outputs; + }); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const newSpace = []; + const space = this.dataFormat === "channelsLast" ? inputShape.slice(1, inputShape.length - 1) : inputShape.slice(2); + for (let i = 0; i < space.length; ++i) { + const newDim = convOutputLength(space[i], this.kernelSize[i], this.padding, this.strides[i], typeof this.dilationRate === "number" ? this.dilationRate : this.dilationRate[i]); + newSpace.push(newDim); + } + let outputShape = [inputShape[0]]; + if (this.dataFormat === "channelsLast") { + outputShape = outputShape.concat(newSpace); + outputShape.push(this.filters); + } else { + outputShape.push(this.filters); + outputShape = outputShape.concat(newSpace); + } + return outputShape; + } + getConfig() { + const config = { + filters: this.filters, + kernelInitializer: serializeInitializer(this.kernelInitializer), + kernelRegularizer: serializeRegularizer(this.kernelRegularizer), + kernelConstraint: serializeConstraint(this.kernelConstraint) + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + static verifyArgs(args) { + if (!("filters" in args) || typeof args.filters !== "number" || args.filters < 1) { + throw new ValueError(`Convolution layer expected config.filters to be a 'number' > 0 but got ${JSON.stringify(args.filters)}`); + } + } + }; + var Conv2D2 = class extends Conv { + constructor(args) { + super(2, args); + Conv2D2.verifyArgs(args); + } + getConfig() { + const config = super.getConfig(); + delete config["rank"]; + return config; + } + static verifyArgs(args) { + if (typeof args.kernelSize !== "number" && !checkArrayTypeAndLength(args.kernelSize, "number", 1, 2)) { + throw new ValueError(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(args.kernelSize)}.`); + } + } + }; + Conv2D2.className = "Conv2D"; + serialization_exports.registerClass(Conv2D2); + var Conv3D2 = class extends Conv { + constructor(args) { + super(3, args); + Conv3D2.verifyArgs(args); + } + getConfig() { + const config = super.getConfig(); + delete config["rank"]; + return config; + } + static verifyArgs(args) { + if (typeof args.kernelSize !== "number") { + if (!(Array.isArray(args.kernelSize) && (args.kernelSize.length === 1 || args.kernelSize.length === 3))) { + throw new ValueError(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(args.kernelSize)}.`); + } + } + } + }; + Conv3D2.className = "Conv3D"; + serialization_exports.registerClass(Conv3D2); + var Conv2DTranspose = class extends Conv2D2 { + constructor(args) { + super(args); + this.inputSpec = [new InputSpec({ ndim: 4 })]; + if (this.padding !== "same" && this.padding !== "valid") { + throw new ValueError(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`); + } + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (inputShape.length !== 4) { + throw new ValueError("Input should have rank 4; Received input shape: " + JSON.stringify(inputShape)); + } + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : inputShape.length - 1; + if (inputShape[channelAxis] == null) { + throw new ValueError("The channel dimension of the inputs should be defined. Found `None`."); + } + const inputDim = inputShape[channelAxis]; + const kernelShape = this.kernelSize.concat([this.filters, inputDim]); + this.kernel = this.addWeight("kernel", kernelShape, "float32", this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.filters], "float32", this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } + this.inputSpec = [new InputSpec({ ndim: 4, axes: { [channelAxis]: inputDim } })]; + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + let input2 = getExactlyOneTensor(inputs); + if (input2.shape.length !== 4) { + throw new ValueError(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${input2.shape.length}`); + } + const inputShape = input2.shape; + const batchSize = inputShape[0]; + let hAxis; + let wAxis; + if (this.dataFormat === "channelsFirst") { + hAxis = 2; + wAxis = 3; + } else { + hAxis = 1; + wAxis = 2; + } + const height = inputShape[hAxis]; + const width = inputShape[wAxis]; + const kernelH = this.kernelSize[0]; + const kernelW = this.kernelSize[1]; + const strideH = this.strides[0]; + const strideW = this.strides[1]; + const outHeight = deconvLength(height, strideH, kernelH, this.padding); + const outWidth = deconvLength(width, strideW, kernelW, this.padding); + const outputShape = [batchSize, outHeight, outWidth, this.filters]; + if (this.dataFormat !== "channelsLast") { + input2 = transpose(input2, [0, 2, 3, 1]); + } + let outputs = conv2dTranspose(input2, this.kernel.read(), outputShape, this.strides, this.padding); + if (this.dataFormat !== "channelsLast") { + outputs = transpose(outputs, [0, 3, 1, 2]); + } + if (this.bias != null) { + outputs = biasAdd(outputs, this.bias.read(), this.dataFormat); + } + if (this.activation != null) { + outputs = this.activation.apply(outputs); + } + return outputs; + }); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const outputShape = inputShape.slice(); + let channelAxis; + let heightAxis; + let widthAxis; + if (this.dataFormat === "channelsFirst") { + channelAxis = 1; + heightAxis = 2; + widthAxis = 3; + } else { + channelAxis = 3; + heightAxis = 1; + widthAxis = 2; + } + const kernelH = this.kernelSize[0]; + const kernelW = this.kernelSize[1]; + const strideH = this.strides[0]; + const strideW = this.strides[1]; + outputShape[channelAxis] = this.filters; + outputShape[heightAxis] = deconvLength(outputShape[heightAxis], strideH, kernelH, this.padding); + outputShape[widthAxis] = deconvLength(outputShape[widthAxis], strideW, kernelW, this.padding); + return outputShape; + } + getConfig() { + const config = super.getConfig(); + delete config["dilationRate"]; + return config; + } + }; + Conv2DTranspose.className = "Conv2DTranspose"; + serialization_exports.registerClass(Conv2DTranspose); + var Conv3DTranspose = class extends Conv3D2 { + constructor(args) { + super(args); + this.inputSpec = [new InputSpec({ ndim: 5 })]; + if (this.padding !== "same" && this.padding !== "valid") { + throw new ValueError(`Conv3DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`); + } + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (inputShape.length !== 5) { + throw new ValueError("Input should have rank 5; Received input shape: " + JSON.stringify(inputShape)); + } + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : inputShape.length - 1; + if (inputShape[channelAxis] == null) { + throw new ValueError("The channel dimension of the inputs should be defined. Found `None`."); + } + const inputDim = inputShape[channelAxis]; + const kernelShape = this.kernelSize.concat([this.filters, inputDim]); + this.kernel = this.addWeight("kernel", kernelShape, "float32", this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.filters], "float32", this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } + this.inputSpec = [new InputSpec({ ndim: 5, axes: { [channelAxis]: inputDim } })]; + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + let input2 = getExactlyOneTensor(inputs); + if (input2.shape.length !== 5) { + throw new ValueError(`Conv3DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${input2.shape.length}`); + } + const inputShape = input2.shape; + const batchSize = inputShape[0]; + let hAxis; + let wAxis; + let dAxis; + if (this.dataFormat === "channelsFirst") { + dAxis = 2; + hAxis = 3; + wAxis = 4; + } else { + dAxis = 1; + hAxis = 2; + wAxis = 3; + } + const depth = inputShape[dAxis]; + const height = inputShape[hAxis]; + const width = inputShape[wAxis]; + const kernelD = this.kernelSize[0]; + const kernelH = this.kernelSize[1]; + const kernelW = this.kernelSize[2]; + const strideD = this.strides[0]; + const strideH = this.strides[1]; + const strideW = this.strides[2]; + const outDepth = deconvLength(depth, strideD, kernelD, this.padding); + const outHeight = deconvLength(height, strideH, kernelH, this.padding); + const outWidth = deconvLength(width, strideW, kernelW, this.padding); + const outputShape = [batchSize, outDepth, outHeight, outWidth, this.filters]; + if (this.dataFormat !== "channelsLast") { + input2 = transpose(input2, [0, 2, 3, 4, 1]); + } + let outputs = conv3dTranspose(input2, this.kernel.read(), outputShape, this.strides, this.padding); + if (this.dataFormat !== "channelsLast") { + outputs = transpose(outputs, [0, 4, 1, 2, 3]); + } + if (this.bias !== null) { + outputs = biasAdd(outputs, this.bias.read(), this.dataFormat); + } + if (this.activation !== null) { + outputs = this.activation.apply(outputs); + } + return outputs; + }); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const outputShape = inputShape.slice(); + let channelAxis; + let depthAxis; + let heightAxis; + let widthAxis; + if (this.dataFormat === "channelsFirst") { + channelAxis = 1; + depthAxis = 2; + heightAxis = 3; + widthAxis = 4; + } else { + channelAxis = 4; + depthAxis = 1; + heightAxis = 2; + widthAxis = 3; + } + const kernelD = this.kernelSize[0]; + const kernelH = this.kernelSize[1]; + const kernelW = this.kernelSize[2]; + const strideD = this.strides[0]; + const strideH = this.strides[1]; + const strideW = this.strides[2]; + outputShape[channelAxis] = this.filters; + outputShape[depthAxis] = deconvLength(outputShape[depthAxis], strideD, kernelD, this.padding); + outputShape[heightAxis] = deconvLength(outputShape[heightAxis], strideH, kernelH, this.padding); + outputShape[widthAxis] = deconvLength(outputShape[widthAxis], strideW, kernelW, this.padding); + return outputShape; + } + getConfig() { + const config = super.getConfig(); + delete config["dilationRate"]; + return config; + } + }; + Conv3DTranspose.className = "Conv3DTranspose"; + serialization_exports.registerClass(Conv3DTranspose); + var SeparableConv = class extends Conv { + constructor(rank, config) { + super(rank, config); + this.DEFAULT_DEPTHWISE_INITIALIZER = "glorotUniform"; + this.DEFAULT_POINTWISE_INITIALIZER = "glorotUniform"; + this.depthwiseKernel = null; + this.pointwiseKernel = null; + if (config.filters == null) { + throw new ValueError("The `filters` configuration field is required by SeparableConv, but is unspecified."); + } + if (config.kernelInitializer != null || config.kernelRegularizer != null || config.kernelConstraint != null) { + throw new ValueError("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead."); + } + if (config.padding != null && config.padding !== "same" && config.padding !== "valid") { + throw new ValueError(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(config.padding)}`); + } + this.depthMultiplier = config.depthMultiplier == null ? 1 : config.depthMultiplier; + this.depthwiseInitializer = getInitializer(config.depthwiseInitializer || this.DEFAULT_DEPTHWISE_INITIALIZER); + this.depthwiseRegularizer = getRegularizer(config.depthwiseRegularizer); + this.depthwiseConstraint = getConstraint(config.depthwiseConstraint); + this.pointwiseInitializer = getInitializer(config.depthwiseInitializer || this.DEFAULT_POINTWISE_INITIALIZER); + this.pointwiseRegularizer = getRegularizer(config.pointwiseRegularizer); + this.pointwiseConstraint = getConstraint(config.pointwiseConstraint); + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (inputShape.length < this.rank + 2) { + throw new ValueError(`Inputs to SeparableConv${this.rank}D should have rank ${this.rank + 2}, but received input shape: ${JSON.stringify(inputShape)}`); + } + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : inputShape.length - 1; + if (inputShape[channelAxis] == null || inputShape[channelAxis] < 0) { + throw new ValueError(`The channel dimension of the inputs should be defined, but found ${JSON.stringify(inputShape[channelAxis])}`); + } + const inputDim = inputShape[channelAxis]; + const depthwiseKernelShape = this.kernelSize.concat([inputDim, this.depthMultiplier]); + const pointwiseKernelShape = []; + for (let i = 0; i < this.rank; ++i) { + pointwiseKernelShape.push(1); + } + pointwiseKernelShape.push(inputDim * this.depthMultiplier, this.filters); + const trainable = true; + this.depthwiseKernel = this.addWeight("depthwise_kernel", depthwiseKernelShape, "float32", this.depthwiseInitializer, this.depthwiseRegularizer, trainable, this.depthwiseConstraint); + this.pointwiseKernel = this.addWeight("pointwise_kernel", pointwiseKernelShape, "float32", this.pointwiseInitializer, this.pointwiseRegularizer, trainable, this.pointwiseConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.filters], "float32", this.biasInitializer, this.biasRegularizer, trainable, this.biasConstraint); + } else { + this.bias = null; + } + this.inputSpec = [new InputSpec({ ndim: this.rank + 2, axes: { [channelAxis]: inputDim } })]; + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + let output; + if (this.rank === 1) { + throw new NotImplementedError("1D separable convolution is not implemented yet."); + } else if (this.rank === 2) { + if (this.dataFormat === "channelsFirst") { + inputs = transpose(inputs, [0, 2, 3, 1]); + } + output = separableConv2d(inputs, this.depthwiseKernel.read(), this.pointwiseKernel.read(), this.strides, this.padding, this.dilationRate, "NHWC"); + } + if (this.useBias) { + output = biasAdd(output, this.bias.read(), this.dataFormat); + } + if (this.activation != null) { + output = this.activation.apply(output); + } + if (this.dataFormat === "channelsFirst") { + output = transpose(output, [0, 3, 1, 2]); + } + return output; + }); + } + getConfig() { + const config = super.getConfig(); + delete config["rank"]; + delete config["kernelInitializer"]; + delete config["kernelRegularizer"]; + delete config["kernelConstraint"]; + config["depthwiseInitializer"] = serializeInitializer(this.depthwiseInitializer); + config["pointwiseInitializer"] = serializeInitializer(this.pointwiseInitializer); + config["depthwiseRegularizer"] = serializeRegularizer(this.depthwiseRegularizer); + config["pointwiseRegularizer"] = serializeRegularizer(this.pointwiseRegularizer); + config["depthwiseConstraint"] = serializeConstraint(this.depthwiseConstraint); + config["pointwiseConstraint"] = serializeConstraint(this.pointwiseConstraint); + return config; + } + }; + SeparableConv.className = "SeparableConv"; + var SeparableConv2D = class extends SeparableConv { + constructor(args) { + super(2, args); + } + }; + SeparableConv2D.className = "SeparableConv2D"; + serialization_exports.registerClass(SeparableConv2D); + var Conv1D = class extends Conv { + constructor(args) { + super(1, args); + Conv1D.verifyArgs(args); + this.inputSpec = [{ ndim: 3 }]; + } + getConfig() { + const config = super.getConfig(); + delete config["rank"]; + delete config["dataFormat"]; + return config; + } + static verifyArgs(args) { + if (typeof args.kernelSize !== "number" && !checkArrayTypeAndLength(args.kernelSize, "number", 1, 1)) { + throw new ValueError(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(args.kernelSize)}.`); + } + } + }; + Conv1D.className = "Conv1D"; + serialization_exports.registerClass(Conv1D); + var Cropping2D = class extends Layer { + constructor(args) { + super(args); + if (typeof args.cropping === "number") { + this.cropping = [[args.cropping, args.cropping], [args.cropping, args.cropping]]; + } else if (typeof args.cropping[0] === "number") { + this.cropping = [ + [args.cropping[0], args.cropping[0]], + [args.cropping[1], args.cropping[1]] + ]; + } else { + this.cropping = args.cropping; + } + this.dataFormat = args.dataFormat === void 0 ? "channelsLast" : args.dataFormat; + this.inputSpec = [{ ndim: 4 }]; + } + computeOutputShape(inputShape) { + if (this.dataFormat === "channelsFirst") { + return [ + inputShape[0], + inputShape[1], + inputShape[2] - this.cropping[0][0] - this.cropping[0][1], + inputShape[3] - this.cropping[1][0] - this.cropping[1][1] + ]; + } else { + return [ + inputShape[0], + inputShape[1] - this.cropping[0][0] - this.cropping[0][1], + inputShape[2] - this.cropping[1][0] - this.cropping[1][1], + inputShape[3] + ]; + } + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + if (this.dataFormat === "channelsLast") { + const hSliced = sliceAlongAxis(inputs, this.cropping[0][0], inputs.shape[1] - this.cropping[0][0] - this.cropping[0][1], 2); + return sliceAlongAxis(hSliced, this.cropping[1][0], inputs.shape[2] - this.cropping[1][1] - this.cropping[1][0], 3); + } else { + const hSliced = sliceAlongAxis(inputs, this.cropping[0][0], inputs.shape[2] - this.cropping[0][0] - this.cropping[0][1], 3); + return sliceAlongAxis(hSliced, this.cropping[1][0], inputs.shape[3] - this.cropping[1][1] - this.cropping[1][0], 4); + } + }); + } + getConfig() { + const config = { cropping: this.cropping, dataFormat: this.dataFormat }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Cropping2D.className = "Cropping2D"; + serialization_exports.registerClass(Cropping2D); + var UpSampling2D = class extends Layer { + constructor(args) { + super(args); + this.DEFAULT_SIZE = [2, 2]; + this.inputSpec = [{ ndim: 4 }]; + this.size = args.size == null ? this.DEFAULT_SIZE : args.size; + this.dataFormat = args.dataFormat == null ? "channelsLast" : args.dataFormat; + checkDataFormat(this.dataFormat); + this.interpolation = args.interpolation == null ? "nearest" : args.interpolation; + checkInterpolationFormat(this.interpolation); + } + computeOutputShape(inputShape) { + if (this.dataFormat === "channelsFirst") { + const height = inputShape[2] == null ? null : this.size[0] * inputShape[2]; + const width = inputShape[3] == null ? null : this.size[1] * inputShape[3]; + return [inputShape[0], inputShape[1], height, width]; + } else { + const height = inputShape[1] == null ? null : this.size[0] * inputShape[1]; + const width = inputShape[2] == null ? null : this.size[1] * inputShape[2]; + return [inputShape[0], height, width, inputShape[3]]; + } + } + call(inputs, kwargs) { + return tidy(() => { + let input2 = getExactlyOneTensor(inputs); + const inputShape = input2.shape; + if (this.dataFormat === "channelsFirst") { + input2 = transpose(input2, [0, 2, 3, 1]); + const height = this.size[0] * inputShape[2]; + const width = this.size[1] * inputShape[3]; + const resized = this.interpolation === "nearest" ? image.resizeNearestNeighbor(input2, [height, width]) : image.resizeBilinear(input2, [height, width]); + return transpose(resized, [0, 3, 1, 2]); + } else { + const height = this.size[0] * inputShape[1]; + const width = this.size[1] * inputShape[2]; + return this.interpolation === "nearest" ? image.resizeNearestNeighbor(input2, [height, width]) : image.resizeBilinear(input2, [height, width]); + } + }); + } + getConfig() { + const config = { + size: this.size, + dataFormat: this.dataFormat, + interpolation: this.interpolation + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + UpSampling2D.className = "UpSampling2D"; + serialization_exports.registerClass(UpSampling2D); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_depthwise.js + init_define_BUILD_VERSION(); + function depthwiseConv2d3(x, depthwiseKernel, strides = [1, 1], padding = "valid", dataFormat, dilationRate) { + return tidy(() => { + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + checkDataFormat(dataFormat); + let y = preprocessConv2DInput(x, dataFormat); + if (x.rank !== 4) { + throw new ValueError(`Input for depthwiseConv2d is required to be 4-D, but is instead ${x.rank}-D`); + } + if (depthwiseKernel.rank !== 4) { + throw new ValueError(`depthwiseKernel is required to be 4-D, but is instead ${depthwiseKernel.rank}-D`); + } + y = depthwiseConv2d(y, depthwiseKernel, strides, padding === "same" ? "same" : "valid", "NHWC", dilationRate); + if (dataFormat === "channelsFirst") { + y = transpose(y, [0, 3, 1, 2]); + } + return y; + }); + } + var DepthwiseConv2D = class extends BaseConv { + constructor(args) { + super(2, args); + this.depthwiseKernel = null; + this.depthMultiplier = args.depthMultiplier == null ? 1 : args.depthMultiplier; + this.depthwiseInitializer = getInitializer(args.depthwiseInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.depthwiseConstraint = getConstraint(args.depthwiseConstraint); + this.depthwiseRegularizer = getRegularizer(args.depthwiseRegularizer); + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (inputShape.length < 4) { + throw new ValueError(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(inputShape)}.`); + } + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : 3; + if (inputShape[channelAxis] == null || inputShape[channelAxis] < 0) { + throw new ValueError(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${inputShape[channelAxis]}).`); + } + const inputDim = inputShape[channelAxis]; + const depthwiseKernelShape = [ + this.kernelSize[0], + this.kernelSize[1], + inputDim, + this.depthMultiplier + ]; + this.depthwiseKernel = this.addWeight("depthwise_kernel", depthwiseKernelShape, null, this.depthwiseInitializer, this.depthwiseRegularizer, true, this.depthwiseConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [inputDim * this.depthMultiplier], null, this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } else { + this.bias = null; + } + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + let outputs = depthwiseConv2d3(inputs, this.depthwiseKernel.read(), this.strides, this.padding, this.dataFormat, null); + if (this.useBias) { + outputs = biasAdd(outputs, this.bias.read(), this.dataFormat); + } + if (this.activation != null) { + outputs = this.activation.apply(outputs); + } + return outputs; + }); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const rows = this.dataFormat === "channelsFirst" ? inputShape[2] : inputShape[1]; + const cols = this.dataFormat === "channelsFirst" ? inputShape[3] : inputShape[2]; + const outFilters = this.dataFormat === "channelsFirst" ? inputShape[1] * this.depthMultiplier : inputShape[3] * this.depthMultiplier; + const outRows = convOutputLength(rows, this.kernelSize[0], this.padding, this.strides[0]); + const outCols = convOutputLength(cols, this.kernelSize[1], this.padding, this.strides[1]); + if (this.dataFormat === "channelsFirst") { + return [inputShape[0], outFilters, outRows, outCols]; + } else { + return [inputShape[0], outRows, outCols, outFilters]; + } + } + getConfig() { + const config = super.getConfig(); + config["depthMultiplier"] = this.depthMultiplier; + config["depthwiseInitializer"] = serializeInitializer(this.depthwiseInitializer); + config["depthwiseRegularizer"] = serializeRegularizer(this.depthwiseRegularizer); + config["depthwiseConstraint"] = serializeConstraint(this.depthwiseRegularizer); + return config; + } + }; + DepthwiseConv2D.className = "DepthwiseConv2D"; + serialization_exports.registerClass(DepthwiseConv2D); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_recurrent.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/recurrent.js + init_define_BUILD_VERSION(); + function standardizeArgs(inputs, initialState, constants, numConstants) { + if (Array.isArray(inputs)) { + if (initialState != null || constants != null) { + throw new ValueError("When inputs is an array, neither initialState or constants should be provided"); + } + if (numConstants != null) { + constants = inputs.slice(inputs.length - numConstants, inputs.length); + inputs = inputs.slice(0, inputs.length - numConstants); + } + if (inputs.length > 1) { + initialState = inputs.slice(1, inputs.length); + } + inputs = inputs[0]; + } + function toListOrNull(x) { + if (x == null || Array.isArray(x)) { + return x; + } else { + return [x]; + } + } + initialState = toListOrNull(initialState); + constants = toListOrNull(constants); + return { inputs, initialState, constants }; + } + function rnn(stepFunction, inputs, initialStates, goBackwards = false, mask, constants, unroll = false, needPerStepOutputs = false) { + return tidy(() => { + const ndim = inputs.shape.length; + if (ndim < 3) { + throw new ValueError(`Input should be at least 3D, but is ${ndim}D.`); + } + const axes = [1, 0].concat(range2(2, ndim)); + inputs = transpose(inputs, axes); + if (constants != null) { + throw new NotImplementedError("The rnn() functoin of the deeplearn.js backend does not support constants yet."); + } + if (unroll) { + console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."); + } + if (mask != null) { + mask = cast(cast(mask, "bool"), "float32"); + if (mask.rank === ndim - 1) { + mask = expandDims(mask, -1); + } + mask = transpose(mask, axes); + } + if (goBackwards) { + inputs = reverse(inputs, 0); + if (mask != null) { + mask = reverse(mask, 0); + } + } + const perStepOutputs = []; + let lastOutput; + let states = initialStates; + const timeSteps = inputs.shape[0]; + const perStepInputs = unstack(inputs); + let perStepMasks; + if (mask != null) { + perStepMasks = unstack(mask); + } + for (let t = 0; t < timeSteps; ++t) { + const currentInput = perStepInputs[t]; + const stepOutputs = tidy(() => stepFunction(currentInput, states)); + if (mask == null) { + lastOutput = stepOutputs[0]; + states = stepOutputs[1]; + } else { + const maskedOutputs = tidy(() => { + const stepMask = perStepMasks[t]; + const negStepMask = sub(onesLike(stepMask), stepMask); + const output = add2(mul(stepOutputs[0], stepMask), mul(states[0], negStepMask)); + const newStates = states.map((state, i) => { + return add2(mul(stepOutputs[1][i], stepMask), mul(state, negStepMask)); + }); + return { output, newStates }; + }); + lastOutput = maskedOutputs.output; + states = maskedOutputs.newStates; + } + if (needPerStepOutputs) { + perStepOutputs.push(lastOutput); + } + } + let outputs; + if (needPerStepOutputs) { + const axis = 1; + outputs = stack(perStepOutputs, axis); + } + return [lastOutput, outputs, states]; + }); + } + var RNN = class extends Layer { + constructor(args) { + super(args); + let cell; + if (args.cell == null) { + throw new ValueError("cell property is missing for the constructor of RNN."); + } else if (Array.isArray(args.cell)) { + cell = new StackedRNNCells({ cells: args.cell }); + } else { + cell = args.cell; + } + if (cell.stateSize == null) { + throw new ValueError("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state)."); + } + this.cell = cell; + this.returnSequences = args.returnSequences == null ? false : args.returnSequences; + this.returnState = args.returnState == null ? false : args.returnState; + this.goBackwards = args.goBackwards == null ? false : args.goBackwards; + this._stateful = args.stateful == null ? false : args.stateful; + this.unroll = args.unroll == null ? false : args.unroll; + this.supportsMasking = true; + this.inputSpec = [new InputSpec({ ndim: 3 })]; + this.stateSpec = null; + this.states_ = null; + this.numConstants = null; + this.keptStates = []; + } + getStates() { + if (this.states_ == null) { + const numStates = Array.isArray(this.cell.stateSize) ? this.cell.stateSize.length : 1; + return range2(0, numStates).map((x) => null); + } else { + return this.states_; + } + } + setStates(states) { + this.states_ = states; + } + computeOutputShape(inputShape) { + if (isArrayOfShapes(inputShape)) { + inputShape = inputShape[0]; + } + inputShape = inputShape; + let stateSize = this.cell.stateSize; + if (!Array.isArray(stateSize)) { + stateSize = [stateSize]; + } + const outputDim = stateSize[0]; + let outputShape; + if (this.returnSequences) { + outputShape = [inputShape[0], inputShape[1], outputDim]; + } else { + outputShape = [inputShape[0], outputDim]; + } + if (this.returnState) { + const stateShape = []; + for (const dim of stateSize) { + stateShape.push([inputShape[0], dim]); + } + return [outputShape].concat(stateShape); + } else { + return outputShape; + } + } + computeMask(inputs, mask) { + return tidy(() => { + if (Array.isArray(mask)) { + mask = mask[0]; + } + const outputMask = this.returnSequences ? mask : null; + if (this.returnState) { + const stateMask = this.states.map((s) => null); + return [outputMask].concat(stateMask); + } else { + return outputMask; + } + }); + } + get states() { + if (this.states_ == null) { + const numStates = Array.isArray(this.cell.stateSize) ? this.cell.stateSize.length : 1; + const output = []; + for (let i = 0; i < numStates; ++i) { + output.push(null); + } + return output; + } else { + return this.states_; + } + } + set states(s) { + this.states_ = s; + } + build(inputShape) { + const constantShape = null; + if (this.numConstants != null) { + throw new NotImplementedError("Constants support is not implemented in RNN yet."); + } + if (isArrayOfShapes(inputShape)) { + inputShape = inputShape[0]; + } + inputShape = inputShape; + const batchSize = this.stateful ? inputShape[0] : null; + const inputDim = inputShape.slice(2); + this.inputSpec[0] = new InputSpec({ shape: [batchSize, null, ...inputDim] }); + const stepInputShape = [inputShape[0]].concat(inputShape.slice(2)); + if (constantShape != null) { + throw new NotImplementedError("Constants support is not implemented in RNN yet."); + } else { + this.cell.build(stepInputShape); + } + let stateSize; + if (Array.isArray(this.cell.stateSize)) { + stateSize = this.cell.stateSize; + } else { + stateSize = [this.cell.stateSize]; + } + if (this.stateSpec != null) { + if (!util_exports.arraysEqual(this.stateSpec.map((spec) => spec.shape[spec.shape.length - 1]), stateSize)) { + throw new ValueError(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`); + } + } else { + this.stateSpec = stateSize.map((dim) => new InputSpec({ shape: [null, dim] })); + } + if (this.stateful) { + this.resetStates(); + } + } + resetStates(states, training = false) { + tidy(() => { + if (!this.stateful) { + throw new AttributeError("Cannot call resetStates() on an RNN Layer that is not stateful."); + } + const batchSize = this.inputSpec[0].shape[0]; + if (batchSize == null) { + throw new ValueError("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer."); + } + if (this.states_ == null) { + if (Array.isArray(this.cell.stateSize)) { + this.states_ = this.cell.stateSize.map((dim) => zeros([batchSize, dim])); + } else { + this.states_ = [zeros([batchSize, this.cell.stateSize])]; + } + } else if (states == null) { + dispose(this.states_); + if (this.keptStates != null) { + dispose(this.keptStates); + this.keptStates = []; + } + if (Array.isArray(this.cell.stateSize)) { + this.states_ = this.cell.stateSize.map((dim) => zeros([batchSize, dim])); + } else { + this.states_[0] = zeros([batchSize, this.cell.stateSize]); + } + } else { + if (!Array.isArray(states)) { + states = [states]; + } + if (states.length !== this.states_.length) { + throw new ValueError(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${states.length} state value(s). Input received: ${states}`); + } + if (training === true) { + this.keptStates.push(this.states_.slice()); + } else { + dispose(this.states_); + } + for (let index = 0; index < this.states_.length; ++index) { + const value = states[index]; + const dim = Array.isArray(this.cell.stateSize) ? this.cell.stateSize[index] : this.cell.stateSize; + const expectedShape = [batchSize, dim]; + if (!util_exports.arraysEqual(value.shape, expectedShape)) { + throw new ValueError(`State ${index} is incompatible with layer ${this.name}: expected shape=${expectedShape}, received shape=${value.shape}`); + } + this.states_[index] = value; + } + } + this.states_ = this.states_.map((state) => keep(state.clone())); + }); + } + apply(inputs, kwargs) { + let initialState = kwargs == null ? null : kwargs["initialState"]; + let constants = kwargs == null ? null : kwargs["constants"]; + if (kwargs == null) { + kwargs = {}; + } + const standardized = standardizeArgs(inputs, initialState, constants, this.numConstants); + inputs = standardized.inputs; + initialState = standardized.initialState; + constants = standardized.constants; + let additionalInputs = []; + let additionalSpecs = []; + if (initialState != null) { + kwargs["initialState"] = initialState; + additionalInputs = additionalInputs.concat(initialState); + this.stateSpec = []; + for (const state of initialState) { + this.stateSpec.push(new InputSpec({ shape: state.shape })); + } + additionalSpecs = additionalSpecs.concat(this.stateSpec); + } + if (constants != null) { + kwargs["constants"] = constants; + additionalInputs = additionalInputs.concat(constants); + this.numConstants = constants.length; + } + const isTensor = additionalInputs[0] instanceof SymbolicTensor; + if (isTensor) { + const fullInput = [inputs].concat(additionalInputs); + const fullInputSpec = this.inputSpec.concat(additionalSpecs); + const originalInputSpec = this.inputSpec; + this.inputSpec = fullInputSpec; + const output = super.apply(fullInput, kwargs); + this.inputSpec = originalInputSpec; + return output; + } else { + return super.apply(inputs, kwargs); + } + } + call(inputs, kwargs) { + return tidy(() => { + const mask = kwargs == null ? null : kwargs["mask"]; + const training = kwargs == null ? null : kwargs["training"]; + let initialState = kwargs == null ? null : kwargs["initialState"]; + inputs = getExactlyOneTensor(inputs); + if (initialState == null) { + if (this.stateful) { + initialState = this.states_; + } else { + initialState = this.getInitialState(inputs); + } + } + const numStates = Array.isArray(this.cell.stateSize) ? this.cell.stateSize.length : 1; + if (initialState.length !== numStates) { + throw new ValueError(`RNN Layer has ${numStates} state(s) but was passed ${initialState.length} initial state(s).`); + } + if (this.unroll) { + console.warn("Ignoring unroll = true for RNN layer, due to imperative backend."); + } + const cellCallKwargs = { training }; + const step5 = (inputs2, states2) => { + const outputs2 = this.cell.call([inputs2].concat(states2), cellCallKwargs); + return [outputs2[0], outputs2.slice(1)]; + }; + const rnnOutputs = rnn(step5, inputs, initialState, this.goBackwards, mask, null, this.unroll, this.returnSequences); + const lastOutput = rnnOutputs[0]; + const outputs = rnnOutputs[1]; + const states = rnnOutputs[2]; + if (this.stateful) { + this.resetStates(states, training); + } + const output = this.returnSequences ? outputs : lastOutput; + if (this.returnState) { + return [output].concat(states); + } else { + return output; + } + }); + } + getInitialState(inputs) { + return tidy(() => { + let initialState = zeros(inputs.shape); + initialState = sum2(initialState, [1, 2]); + initialState = expandDims2(initialState); + if (Array.isArray(this.cell.stateSize)) { + return this.cell.stateSize.map((dim) => dim > 1 ? tile2(initialState, [1, dim]) : initialState); + } else { + return this.cell.stateSize > 1 ? [tile2(initialState, [1, this.cell.stateSize])] : [initialState]; + } + }); + } + get trainableWeights() { + if (!this.trainable) { + return []; + } + return this.cell.trainableWeights; + } + get nonTrainableWeights() { + if (!this.trainable) { + return this.cell.weights; + } + return this.cell.nonTrainableWeights; + } + setFastWeightInitDuringBuild(value) { + super.setFastWeightInitDuringBuild(value); + if (this.cell != null) { + this.cell.setFastWeightInitDuringBuild(value); + } + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { + returnSequences: this.returnSequences, + returnState: this.returnState, + goBackwards: this.goBackwards, + stateful: this.stateful, + unroll: this.unroll + }; + if (this.numConstants != null) { + config["numConstants"] = this.numConstants; + } + const cellConfig = this.cell.getConfig(); + if (this.getClassName() === RNN.className) { + config["cell"] = { + "className": this.cell.getClassName(), + "config": cellConfig + }; + } + return Object.assign({}, cellConfig, baseConfig, config); + } + static fromConfig(cls, config, customObjects = {}) { + const cellConfig = config["cell"]; + const cell = deserialize(cellConfig, customObjects); + return new cls(Object.assign(config, { cell })); + } + }; + RNN.className = "RNN"; + serialization_exports.registerClass(RNN); + var RNNCell = class extends Layer { + }; + var SimpleRNNCell = class extends RNNCell { + constructor(args) { + super(args); + this.DEFAULT_ACTIVATION = "tanh"; + this.DEFAULT_KERNEL_INITIALIZER = "glorotNormal"; + this.DEFAULT_RECURRENT_INITIALIZER = "orthogonal"; + this.DEFAULT_BIAS_INITIALIZER = "zeros"; + this.units = args.units; + assertPositiveInteger(this.units, `units`); + this.activation = getActivation(args.activation == null ? this.DEFAULT_ACTIVATION : args.activation); + this.useBias = args.useBias == null ? true : args.useBias; + this.kernelInitializer = getInitializer(args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.recurrentInitializer = getInitializer(args.recurrentInitializer || this.DEFAULT_RECURRENT_INITIALIZER); + this.biasInitializer = getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER); + this.kernelRegularizer = getRegularizer(args.kernelRegularizer); + this.recurrentRegularizer = getRegularizer(args.recurrentRegularizer); + this.biasRegularizer = getRegularizer(args.biasRegularizer); + this.kernelConstraint = getConstraint(args.kernelConstraint); + this.recurrentConstraint = getConstraint(args.recurrentConstraint); + this.biasConstraint = getConstraint(args.biasConstraint); + this.dropout = min2([1, max2([0, args.dropout == null ? 0 : args.dropout])]); + this.recurrentDropout = min2([ + 1, + max2([0, args.recurrentDropout == null ? 0 : args.recurrentDropout]) + ]); + this.dropoutFunc = args.dropoutFunc; + this.stateSize = this.units; + this.dropoutMask = null; + this.recurrentDropoutMask = null; + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + this.kernel = this.addWeight("kernel", [inputShape[inputShape.length - 1], this.units], null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + this.recurrentKernel = this.addWeight("recurrent_kernel", [this.units, this.units], null, this.recurrentInitializer, this.recurrentRegularizer, true, this.recurrentConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.units], null, this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } else { + this.bias = null; + } + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = inputs; + if (inputs.length !== 2) { + throw new ValueError(`SimpleRNNCell expects 2 input Tensors, got ${inputs.length}.`); + } + let prevOutput = inputs[1]; + inputs = inputs[0]; + const training = kwargs["training"] == null ? false : kwargs["training"]; + if (0 < this.dropout && this.dropout < 1 && this.dropoutMask == null) { + this.dropoutMask = generateDropoutMask({ + ones: () => onesLike(inputs), + rate: this.dropout, + training, + dropoutFunc: this.dropoutFunc + }); + } + if (0 < this.recurrentDropout && this.recurrentDropout < 1 && this.recurrentDropoutMask == null) { + this.recurrentDropoutMask = generateDropoutMask({ + ones: () => onesLike(prevOutput), + rate: this.recurrentDropout, + training, + dropoutFunc: this.dropoutFunc + }); + } + let h; + const dpMask = this.dropoutMask; + const recDpMask = this.recurrentDropoutMask; + if (dpMask != null) { + h = dot2(mul(inputs, dpMask), this.kernel.read()); + } else { + h = dot2(inputs, this.kernel.read()); + } + if (this.bias != null) { + h = biasAdd(h, this.bias.read()); + } + if (recDpMask != null) { + prevOutput = mul(prevOutput, recDpMask); + } + let output = add2(h, dot2(prevOutput, this.recurrentKernel.read())); + if (this.activation != null) { + output = this.activation.apply(output); + } + return [output, output]; + }); + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { + units: this.units, + activation: serializeActivation(this.activation), + useBias: this.useBias, + kernelInitializer: serializeInitializer(this.kernelInitializer), + recurrentInitializer: serializeInitializer(this.recurrentInitializer), + biasInitializer: serializeInitializer(this.biasInitializer), + kernelRegularizer: serializeRegularizer(this.kernelRegularizer), + recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer), + biasRegularizer: serializeRegularizer(this.biasRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + kernelConstraint: serializeConstraint(this.kernelConstraint), + recurrentConstraint: serializeConstraint(this.recurrentConstraint), + biasConstraint: serializeConstraint(this.biasConstraint), + dropout: this.dropout, + recurrentDropout: this.recurrentDropout + }; + return Object.assign({}, baseConfig, config); + } + }; + SimpleRNNCell.className = "SimpleRNNCell"; + serialization_exports.registerClass(SimpleRNNCell); + var SimpleRNN = class extends RNN { + constructor(args) { + args.cell = new SimpleRNNCell(args); + super(args); + } + call(inputs, kwargs) { + return tidy(() => { + if (this.cell.dropoutMask != null) { + dispose(this.cell.dropoutMask); + this.cell.dropoutMask = null; + } + if (this.cell.recurrentDropoutMask != null) { + dispose(this.cell.recurrentDropoutMask); + this.cell.recurrentDropoutMask = null; + } + const mask = kwargs == null ? null : kwargs["mask"]; + const training = kwargs == null ? null : kwargs["training"]; + const initialState = kwargs == null ? null : kwargs["initialState"]; + return super.call(inputs, { mask, training, initialState }); + }); + } + static fromConfig(cls, config) { + return new cls(config); + } + }; + SimpleRNN.className = "SimpleRNN"; + serialization_exports.registerClass(SimpleRNN); + var GRUCell = class extends RNNCell { + constructor(args) { + super(args); + this.DEFAULT_ACTIVATION = "tanh"; + this.DEFAULT_RECURRENT_ACTIVATION = "hardSigmoid"; + this.DEFAULT_KERNEL_INITIALIZER = "glorotNormal"; + this.DEFAULT_RECURRENT_INITIALIZER = "orthogonal"; + this.DEFAULT_BIAS_INITIALIZER = "zeros"; + if (args.resetAfter) { + throw new ValueError(`GRUCell does not support reset_after parameter set to true.`); + } + this.units = args.units; + assertPositiveInteger(this.units, "units"); + this.activation = getActivation(args.activation === void 0 ? this.DEFAULT_ACTIVATION : args.activation); + this.recurrentActivation = getActivation(args.recurrentActivation === void 0 ? this.DEFAULT_RECURRENT_ACTIVATION : args.recurrentActivation); + this.useBias = args.useBias == null ? true : args.useBias; + this.kernelInitializer = getInitializer(args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.recurrentInitializer = getInitializer(args.recurrentInitializer || this.DEFAULT_RECURRENT_INITIALIZER); + this.biasInitializer = getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER); + this.kernelRegularizer = getRegularizer(args.kernelRegularizer); + this.recurrentRegularizer = getRegularizer(args.recurrentRegularizer); + this.biasRegularizer = getRegularizer(args.biasRegularizer); + this.kernelConstraint = getConstraint(args.kernelConstraint); + this.recurrentConstraint = getConstraint(args.recurrentConstraint); + this.biasConstraint = getConstraint(args.biasConstraint); + this.dropout = min2([1, max2([0, args.dropout == null ? 0 : args.dropout])]); + this.recurrentDropout = min2([ + 1, + max2([0, args.recurrentDropout == null ? 0 : args.recurrentDropout]) + ]); + this.dropoutFunc = args.dropoutFunc; + this.implementation = args.implementation; + this.stateSize = this.units; + this.dropoutMask = null; + this.recurrentDropoutMask = null; + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const inputDim = inputShape[inputShape.length - 1]; + this.kernel = this.addWeight("kernel", [inputDim, this.units * 3], null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + this.recurrentKernel = this.addWeight("recurrent_kernel", [this.units, this.units * 3], null, this.recurrentInitializer, this.recurrentRegularizer, true, this.recurrentConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.units * 3], null, this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } else { + this.bias = null; + } + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = inputs; + if (inputs.length !== 2) { + throw new ValueError(`GRUCell expects 2 input Tensors (inputs, h, c), got ${inputs.length}.`); + } + const training = kwargs["training"] == null ? false : kwargs["training"]; + let hTMinus1 = inputs[1]; + inputs = inputs[0]; + if (0 < this.dropout && this.dropout < 1 && this.dropoutMask == null) { + this.dropoutMask = generateDropoutMask({ + ones: () => onesLike(inputs), + rate: this.dropout, + training, + count: 3, + dropoutFunc: this.dropoutFunc + }); + } + if (0 < this.recurrentDropout && this.recurrentDropout < 1 && this.recurrentDropoutMask == null) { + this.recurrentDropoutMask = generateDropoutMask({ + ones: () => onesLike(hTMinus1), + rate: this.recurrentDropout, + training, + count: 3, + dropoutFunc: this.dropoutFunc + }); + } + const dpMask = this.dropoutMask; + const recDpMask = this.recurrentDropoutMask; + let z; + let r; + let hh; + if (0 < this.dropout && this.dropout < 1) { + inputs = mul(inputs, dpMask[0]); + } + let matrixX = dot2(inputs, this.kernel.read()); + if (this.useBias) { + matrixX = biasAdd(matrixX, this.bias.read()); + } + if (0 < this.recurrentDropout && this.recurrentDropout < 1) { + hTMinus1 = mul(hTMinus1, recDpMask[0]); + } + const recurrentKernelValue = this.recurrentKernel.read(); + const [rk1, rk2] = split(recurrentKernelValue, [2 * this.units, this.units], recurrentKernelValue.rank - 1); + const matrixInner = dot2(hTMinus1, rk1); + const [xZ, xR, xH] = split(matrixX, 3, matrixX.rank - 1); + const [recurrentZ, recurrentR] = split(matrixInner, 2, matrixInner.rank - 1); + z = this.recurrentActivation.apply(add2(xZ, recurrentZ)); + r = this.recurrentActivation.apply(add2(xR, recurrentR)); + const recurrentH = dot2(mul(r, hTMinus1), rk2); + hh = this.activation.apply(add2(xH, recurrentH)); + const h = add2(mul(z, hTMinus1), mul(add2(1, neg(z)), hh)); + return [h, h]; + }); + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { + units: this.units, + activation: serializeActivation(this.activation), + recurrentActivation: serializeActivation(this.recurrentActivation), + useBias: this.useBias, + kernelInitializer: serializeInitializer(this.kernelInitializer), + recurrentInitializer: serializeInitializer(this.recurrentInitializer), + biasInitializer: serializeInitializer(this.biasInitializer), + kernelRegularizer: serializeRegularizer(this.kernelRegularizer), + recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer), + biasRegularizer: serializeRegularizer(this.biasRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + kernelConstraint: serializeConstraint(this.kernelConstraint), + recurrentConstraint: serializeConstraint(this.recurrentConstraint), + biasConstraint: serializeConstraint(this.biasConstraint), + dropout: this.dropout, + recurrentDropout: this.recurrentDropout, + implementation: this.implementation, + resetAfter: false + }; + return Object.assign({}, baseConfig, config); + } + }; + GRUCell.className = "GRUCell"; + serialization_exports.registerClass(GRUCell); + var GRU = class extends RNN { + constructor(args) { + if (args.implementation === 0) { + console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."); + } + args.cell = new GRUCell(args); + super(args); + } + call(inputs, kwargs) { + return tidy(() => { + if (this.cell.dropoutMask != null) { + dispose(this.cell.dropoutMask); + this.cell.dropoutMask = null; + } + if (this.cell.recurrentDropoutMask != null) { + dispose(this.cell.recurrentDropoutMask); + this.cell.recurrentDropoutMask = null; + } + const mask = kwargs == null ? null : kwargs["mask"]; + const training = kwargs == null ? null : kwargs["training"]; + const initialState = kwargs == null ? null : kwargs["initialState"]; + return super.call(inputs, { mask, training, initialState }); + }); + } + static fromConfig(cls, config) { + if (config["implmentation"] === 0) { + config["implementation"] = 1; + } + return new cls(config); + } + }; + GRU.className = "GRU"; + serialization_exports.registerClass(GRU); + var LSTMCell = class extends RNNCell { + constructor(args) { + super(args); + this.DEFAULT_ACTIVATION = "tanh"; + this.DEFAULT_RECURRENT_ACTIVATION = "hardSigmoid"; + this.DEFAULT_KERNEL_INITIALIZER = "glorotNormal"; + this.DEFAULT_RECURRENT_INITIALIZER = "orthogonal"; + this.DEFAULT_BIAS_INITIALIZER = "zeros"; + this.units = args.units; + assertPositiveInteger(this.units, "units"); + this.activation = getActivation(args.activation === void 0 ? this.DEFAULT_ACTIVATION : args.activation); + this.recurrentActivation = getActivation(args.recurrentActivation === void 0 ? this.DEFAULT_RECURRENT_ACTIVATION : args.recurrentActivation); + this.useBias = args.useBias == null ? true : args.useBias; + this.kernelInitializer = getInitializer(args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.recurrentInitializer = getInitializer(args.recurrentInitializer || this.DEFAULT_RECURRENT_INITIALIZER); + this.biasInitializer = getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER); + this.unitForgetBias = args.unitForgetBias; + this.kernelRegularizer = getRegularizer(args.kernelRegularizer); + this.recurrentRegularizer = getRegularizer(args.recurrentRegularizer); + this.biasRegularizer = getRegularizer(args.biasRegularizer); + this.kernelConstraint = getConstraint(args.kernelConstraint); + this.recurrentConstraint = getConstraint(args.recurrentConstraint); + this.biasConstraint = getConstraint(args.biasConstraint); + this.dropout = min2([1, max2([0, args.dropout == null ? 0 : args.dropout])]); + this.recurrentDropout = min2([ + 1, + max2([0, args.recurrentDropout == null ? 0 : args.recurrentDropout]) + ]); + this.dropoutFunc = args.dropoutFunc; + this.implementation = args.implementation; + this.stateSize = [this.units, this.units]; + this.dropoutMask = null; + this.recurrentDropoutMask = null; + } + build(inputShape) { + var _a; + inputShape = getExactlyOneShape(inputShape); + const inputDim = inputShape[inputShape.length - 1]; + this.kernel = this.addWeight("kernel", [inputDim, this.units * 4], null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + this.recurrentKernel = this.addWeight("recurrent_kernel", [this.units, this.units * 4], null, this.recurrentInitializer, this.recurrentRegularizer, true, this.recurrentConstraint); + let biasInitializer; + if (this.useBias) { + if (this.unitForgetBias) { + const capturedBiasInit = this.biasInitializer; + const capturedUnits = this.units; + biasInitializer = new (_a = class CustomInit extends Initializer { + apply(shape, dtype) { + const bI = capturedBiasInit.apply([capturedUnits]); + const bF = new Ones().apply([capturedUnits]); + const bCAndH = capturedBiasInit.apply([capturedUnits * 2]); + return concatAlongFirstAxis(concatAlongFirstAxis(bI, bF), bCAndH); + } + }, _a.className = "CustomInit", _a)(); + } else { + biasInitializer = this.biasInitializer; + } + this.bias = this.addWeight("bias", [this.units * 4], null, biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } else { + this.bias = null; + } + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + const training = kwargs["training"] == null ? false : kwargs["training"]; + inputs = inputs; + if (inputs.length !== 3) { + throw new ValueError(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${inputs.length}.`); + } + let hTMinus1 = inputs[1]; + const cTMinus1 = inputs[2]; + inputs = inputs[0]; + if (0 < this.dropout && this.dropout < 1 && this.dropoutMask == null) { + this.dropoutMask = generateDropoutMask({ + ones: () => onesLike(inputs), + rate: this.dropout, + training, + count: 4, + dropoutFunc: this.dropoutFunc + }); + } + if (0 < this.recurrentDropout && this.recurrentDropout < 1 && this.recurrentDropoutMask == null) { + this.recurrentDropoutMask = generateDropoutMask({ + ones: () => onesLike(hTMinus1), + rate: this.recurrentDropout, + training, + count: 4, + dropoutFunc: this.dropoutFunc + }); + } + const dpMask = this.dropoutMask; + const recDpMask = this.recurrentDropoutMask; + let i; + let f; + let c; + let o; + if (0 < this.dropout && this.dropout < 1) { + inputs = mul(inputs, dpMask[0]); + } + let z = dot2(inputs, this.kernel.read()); + if (0 < this.recurrentDropout && this.recurrentDropout < 1) { + hTMinus1 = mul(hTMinus1, recDpMask[0]); + } + z = add2(z, dot2(hTMinus1, this.recurrentKernel.read())); + if (this.useBias) { + z = biasAdd(z, this.bias.read()); + } + const [z0, z1, z2, z3] = split(z, 4, z.rank - 1); + i = this.recurrentActivation.apply(z0); + f = this.recurrentActivation.apply(z1); + c = add2(mul(f, cTMinus1), mul(i, this.activation.apply(z2))); + o = this.recurrentActivation.apply(z3); + const h = mul(o, this.activation.apply(c)); + return [h, h, c]; + }); + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { + units: this.units, + activation: serializeActivation(this.activation), + recurrentActivation: serializeActivation(this.recurrentActivation), + useBias: this.useBias, + kernelInitializer: serializeInitializer(this.kernelInitializer), + recurrentInitializer: serializeInitializer(this.recurrentInitializer), + biasInitializer: serializeInitializer(this.biasInitializer), + unitForgetBias: this.unitForgetBias, + kernelRegularizer: serializeRegularizer(this.kernelRegularizer), + recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer), + biasRegularizer: serializeRegularizer(this.biasRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + kernelConstraint: serializeConstraint(this.kernelConstraint), + recurrentConstraint: serializeConstraint(this.recurrentConstraint), + biasConstraint: serializeConstraint(this.biasConstraint), + dropout: this.dropout, + recurrentDropout: this.recurrentDropout, + implementation: this.implementation + }; + return Object.assign({}, baseConfig, config); + } + }; + LSTMCell.className = "LSTMCell"; + serialization_exports.registerClass(LSTMCell); + var LSTM = class extends RNN { + constructor(args) { + if (args.implementation === 0) { + console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."); + } + args.cell = new LSTMCell(args); + super(args); + } + call(inputs, kwargs) { + return tidy(() => { + if (this.cell.dropoutMask != null) { + dispose(this.cell.dropoutMask); + this.cell.dropoutMask = null; + } + if (this.cell.recurrentDropoutMask != null) { + dispose(this.cell.recurrentDropoutMask); + this.cell.recurrentDropoutMask = null; + } + const mask = kwargs == null ? null : kwargs["mask"]; + const training = kwargs == null ? null : kwargs["training"]; + const initialState = kwargs == null ? null : kwargs["initialState"]; + return super.call(inputs, { mask, training, initialState }); + }); + } + static fromConfig(cls, config) { + if (config["implmentation"] === 0) { + config["implementation"] = 1; + } + return new cls(config); + } + }; + LSTM.className = "LSTM"; + serialization_exports.registerClass(LSTM); + var StackedRNNCells = class extends RNNCell { + constructor(args) { + super(args); + this.cells = args.cells; + } + get stateSize() { + const stateSize = []; + for (const cell of this.cells.slice().reverse()) { + if (Array.isArray(cell.stateSize)) { + stateSize.push(...cell.stateSize); + } else { + stateSize.push(cell.stateSize); + } + } + return stateSize; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = inputs; + let states = inputs.slice(1); + const nestedStates = []; + for (const cell of this.cells.slice().reverse()) { + if (Array.isArray(cell.stateSize)) { + nestedStates.push(states.splice(0, cell.stateSize.length)); + } else { + nestedStates.push(states.splice(0, 1)); + } + } + nestedStates.reverse(); + const newNestedStates = []; + let callInputs; + for (let i = 0; i < this.cells.length; ++i) { + const cell = this.cells[i]; + states = nestedStates[i]; + if (i === 0) { + callInputs = [inputs[0]].concat(states); + } else { + callInputs = [callInputs[0]].concat(states); + } + callInputs = cell.call(callInputs, kwargs); + newNestedStates.push(callInputs.slice(1)); + } + states = []; + for (const cellStates of newNestedStates.slice().reverse()) { + states.push(...cellStates); + } + return [callInputs[0]].concat(states); + }); + } + build(inputShape) { + if (isArrayOfShapes(inputShape)) { + inputShape = inputShape[0]; + } + inputShape = inputShape; + let outputDim; + this.cells.forEach((cell, i) => { + nameScope(`RNNCell_${i}`, () => { + cell.build(inputShape); + if (Array.isArray(cell.stateSize)) { + outputDim = cell.stateSize[0]; + } else { + outputDim = cell.stateSize; + } + inputShape = [inputShape[0], outputDim]; + }); + }); + this.built = true; + } + getConfig() { + const baseConfig = super.getConfig(); + const getCellConfig = (cell) => { + return { + "className": cell.getClassName(), + "config": cell.getConfig() + }; + }; + const cellConfigs = this.cells.map(getCellConfig); + const config = { "cells": cellConfigs }; + return Object.assign({}, baseConfig, config); + } + static fromConfig(cls, config, customObjects = {}) { + const cells = []; + for (const cellConfig of config["cells"]) { + cells.push(deserialize(cellConfig, customObjects)); + } + return new cls({ cells }); + } + get trainableWeights() { + if (!this.trainable) { + return []; + } + const weights = []; + for (const cell of this.cells) { + weights.push(...cell.trainableWeights); + } + return weights; + } + get nonTrainableWeights() { + const weights = []; + for (const cell of this.cells) { + weights.push(...cell.nonTrainableWeights); + } + if (!this.trainable) { + const trainableWeights = []; + for (const cell of this.cells) { + trainableWeights.push(...cell.trainableWeights); + } + return trainableWeights.concat(weights); + } + return weights; + } + getWeights() { + const weights = []; + for (const cell of this.cells) { + weights.push(...cell.weights); + } + return batchGetValue(weights); + } + setWeights(weights) { + const tuples = []; + for (const cell of this.cells) { + const numParams = cell.weights.length; + const inputWeights = weights.splice(numParams); + for (let i = 0; i < cell.weights.length; ++i) { + tuples.push([cell.weights[i], inputWeights[i]]); + } + } + batchSetValue(tuples); + } + }; + StackedRNNCells.className = "StackedRNNCells"; + serialization_exports.registerClass(StackedRNNCells); + function generateDropoutMask(args) { + const { ones: ones3, rate, training = false, count: count2 = 1, dropoutFunc } = args; + const droppedInputs = () => dropoutFunc != null ? dropoutFunc(ones3(), rate) : dropout2(ones3(), rate); + const createMask = () => inTrainPhase(droppedInputs, ones3, training); + if (!count2 || count2 <= 1) { + return keep(createMask().clone()); + } + const masks = Array(count2).fill(void 0).map(createMask); + return masks.map((m) => keep(m.clone())); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_recurrent.js + var __rest = function(s, e) { + var t = {}; + for (var p2 in s) + if (Object.prototype.hasOwnProperty.call(s, p2) && e.indexOf(p2) < 0) + t[p2] = s[p2]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p2 = Object.getOwnPropertySymbols(s); i < p2.length; i++) { + if (e.indexOf(p2[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p2[i])) + t[p2[i]] = s[p2[i]]; + } + return t; + }; + var ConvRNN2D = class extends RNN { + constructor(args) { + if (args.unroll) { + throw new NotImplementedError("Unrolling is not possible with convolutional RNNs."); + } + if (Array.isArray(args.cell)) { + throw new NotImplementedError("It is not possible at the moment to stack convolutional cells."); + } + super(args); + this.inputSpec = [new InputSpec({ ndim: 5 })]; + } + call(inputs, kwargs) { + return tidy(() => { + if (this.cell.dropoutMask != null) { + dispose(this.cell.dropoutMask); + this.cell.dropoutMask = null; + } + if (this.cell.recurrentDropoutMask != null) { + dispose(this.cell.recurrentDropoutMask); + this.cell.recurrentDropoutMask = null; + } + if (kwargs && kwargs["constants"]) { + throw new ValueError("ConvRNN2D cell does not support constants"); + } + const mask = kwargs == null ? null : kwargs["mask"]; + const training = kwargs == null ? null : kwargs["training"]; + const initialState = kwargs == null ? null : kwargs["initialState"]; + return super.call(inputs, { mask, training, initialState }); + }); + } + computeOutputShape(inputShape) { + let outShape = this.computeSingleOutputShape(inputShape); + if (!this.returnSequences) { + outShape = [outShape[0], ...outShape.slice(2)]; + } + if (this.returnState) { + outShape = [outShape, ...Array(2).fill([inputShape[0], ...outShape.slice(-3)])]; + } + return outShape; + } + getInitialState(inputs) { + return tidy(() => { + const { stateSize } = this.cell; + const inputShape = inputs.shape; + const outputShape = this.computeSingleOutputShape(inputShape); + const stateShape = [outputShape[0], ...outputShape.slice(2)]; + const initialState = zeros(stateShape); + if (Array.isArray(stateSize)) { + return Array(stateSize.length).fill(initialState); + } + return [initialState]; + }); + } + resetStates(states, training = false) { + tidy(() => { + if (!this.stateful) { + throw new AttributeError("Cannot call resetStates() on an RNN Layer that is not stateful."); + } + const inputShape = this.inputSpec[0].shape; + const outputShape = this.computeSingleOutputShape(inputShape); + const stateShape = [outputShape[0], ...outputShape.slice(2)]; + const batchSize = inputShape[0]; + if (batchSize == null) { + throw new ValueError("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer."); + } + if (this.getStates() == null) { + if (Array.isArray(this.cell.stateSize)) { + this.states_ = this.cell.stateSize.map(() => zeros(stateShape)); + } else { + this.states_ = [zeros(stateShape)]; + } + } else if (states == null) { + dispose(this.states_); + if (this.keptStates != null) { + dispose(this.keptStates); + this.keptStates = []; + } + if (Array.isArray(this.cell.stateSize)) { + this.states_ = this.cell.stateSize.map(() => zeros(stateShape)); + } else { + this.states_[0] = zeros(stateShape); + } + } else { + if (!Array.isArray(states)) { + states = [states]; + } + if (states.length !== this.states_.length) { + throw new ValueError(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${states.length} state value(s). Input received: ${states}`); + } + if (training) { + this.keptStates.push(this.states_.slice()); + } else { + dispose(this.states_); + } + for (let index = 0; index < this.states_.length; ++index) { + const value = states[index]; + const expectedShape = stateShape; + if (!util_exports.arraysEqual(value.shape, expectedShape)) { + throw new ValueError(`State ${index} is incompatible with layer ${this.name}: expected shape=${expectedShape}, received shape=${value.shape}`); + } + this.states_[index] = value; + } + } + this.states_ = this.states_.map((state) => keep(state.clone())); + }); + } + computeSingleOutputShape(inputShape) { + const { dataFormat, filters, kernelSize, padding, strides, dilationRate } = this.cell; + const isChannelsFirst = dataFormat === "channelsFirst"; + const h = inputShape[isChannelsFirst ? 3 : 2]; + const w = inputShape[isChannelsFirst ? 4 : 3]; + const hOut = convOutputLength(h, kernelSize[0], padding, strides[0], dilationRate[0]); + const wOut = convOutputLength(w, kernelSize[1], padding, strides[1], dilationRate[1]); + const outShape = [ + ...inputShape.slice(0, 2), + ...isChannelsFirst ? [filters, hOut, wOut] : [hOut, wOut, filters] + ]; + return outShape; + } + }; + ConvRNN2D.className = "ConvRNN2D"; + var ConvLSTM2DCell = class extends LSTMCell { + constructor(args) { + const { filters, kernelSize, strides, padding, dataFormat, dilationRate } = args; + super(Object.assign({}, args, { units: filters })); + this.filters = filters; + assertPositiveInteger(this.filters, "filters"); + this.kernelSize = normalizeArray(kernelSize, 2, "kernelSize"); + this.kernelSize.forEach((size) => assertPositiveInteger(size, "kernelSize")); + this.strides = normalizeArray(strides || 1, 2, "strides"); + this.strides.forEach((stride) => assertPositiveInteger(stride, "strides")); + this.padding = padding || "valid"; + checkPaddingMode(this.padding); + this.dataFormat = dataFormat || "channelsLast"; + checkDataFormat(this.dataFormat); + this.dilationRate = normalizeArray(dilationRate || 1, 2, "dilationRate"); + this.dilationRate.forEach((rate) => assertPositiveInteger(rate, "dilationRate")); + } + build(inputShape) { + var _a; + inputShape = getExactlyOneShape(inputShape); + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : inputShape.length - 1; + if (inputShape[channelAxis] == null) { + throw new ValueError(`The channel dimension of the input should be defined. Found ${inputShape[channelAxis]}`); + } + const inputDim = inputShape[channelAxis]; + const numOfKernels = 4; + const kernelShape = this.kernelSize.concat([inputDim, this.filters * numOfKernels]); + this.kernel = this.addWeight("kernel", kernelShape, null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + const recurrentKernelShape = this.kernelSize.concat([this.filters, this.filters * numOfKernels]); + this.recurrentKernel = this.addWeight("recurrent_kernel", recurrentKernelShape, null, this.recurrentInitializer, this.recurrentRegularizer, true, this.recurrentConstraint); + if (this.useBias) { + let biasInitializer; + if (this.unitForgetBias) { + const init2 = this.biasInitializer; + const filters = this.filters; + biasInitializer = new (_a = class CustomInit extends Initializer { + apply(shape, dtype) { + const biasI = init2.apply([filters]); + const biasF = ones2([filters]); + const biasCAndO = init2.apply([filters * 2]); + return concatenate([biasI, biasF, biasCAndO]); + } + }, _a.className = "CustomInit", _a)(); + } else { + biasInitializer = this.biasInitializer; + } + this.bias = this.addWeight("bias", [this.filters * numOfKernels], null, biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + if (inputs.length !== 3) { + throw new ValueError(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${inputs.length}.`); + } + const training = kwargs["training"] || false; + const x = inputs[0]; + const hTMinus1 = inputs[1]; + const cTMinus1 = inputs[2]; + const numOfKernels = 4; + if (0 < this.dropout && this.dropout < 1 && this.dropoutMask == null) { + this.dropoutMask = generateDropoutMask({ + ones: () => onesLike(x), + rate: this.dropout, + training, + count: numOfKernels, + dropoutFunc: this.dropoutFunc + }); + } + const dropoutMask = this.dropoutMask; + const applyDropout = (x2, mask, index) => { + if (!mask || !mask[index]) { + return x2; + } + return mul(mask[index], x2); + }; + let xI = applyDropout(x, dropoutMask, 0); + let xF = applyDropout(x, dropoutMask, 1); + let xC = applyDropout(x, dropoutMask, 2); + let xO = applyDropout(x, dropoutMask, 3); + if (0 < this.recurrentDropout && this.recurrentDropout < 1 && this.recurrentDropoutMask == null) { + this.recurrentDropoutMask = generateDropoutMask({ + ones: () => onesLike(hTMinus1), + rate: this.recurrentDropout, + training, + count: numOfKernels, + dropoutFunc: this.dropoutFunc + }); + } + const recDropoutMask = this.recurrentDropoutMask; + let hI = applyDropout(hTMinus1, recDropoutMask, 0); + let hF = applyDropout(hTMinus1, recDropoutMask, 1); + let hC = applyDropout(hTMinus1, recDropoutMask, 2); + let hO = applyDropout(hTMinus1, recDropoutMask, 3); + const kernelChannelAxis = 3; + const [kernelI, kernelF, kernelC, kernelO] = split(this.kernel.read(), numOfKernels, kernelChannelAxis); + const [biasI, biasF, biasC, biasO] = this.useBias ? split(this.bias.read(), numOfKernels) : [null, null, null, null]; + xI = this.inputConv(xI, kernelI, biasI, this.padding); + xF = this.inputConv(xF, kernelF, biasF, this.padding); + xC = this.inputConv(xC, kernelC, biasC, this.padding); + xO = this.inputConv(xO, kernelO, biasO, this.padding); + const [recKernelI, recKernelF, recKernelC, recKernelO] = split(this.recurrentKernel.read(), numOfKernels, kernelChannelAxis); + hI = this.recurrentConv(hI, recKernelI); + hF = this.recurrentConv(hF, recKernelF); + hC = this.recurrentConv(hC, recKernelC); + hO = this.recurrentConv(hO, recKernelO); + const i = this.recurrentActivation.apply(add2(xI, hI)); + const f = this.recurrentActivation.apply(add2(xF, hF)); + const c = add2(mul(f, cTMinus1), mul(i, this.activation.apply(add2(xC, hC)))); + const h = mul(this.recurrentActivation.apply(add2(xO, hO)), this.activation.apply(c)); + return [h, h, c]; + }); + } + getConfig() { + const _a = super.getConfig(), { "units": _ } = _a, baseConfig = __rest(_a, ["units"]); + const config = { + filters: this.filters, + kernelSize: this.kernelSize, + padding: this.padding, + dataFormat: this.dataFormat, + dilationRate: this.dilationRate, + strides: this.strides + }; + return Object.assign({}, baseConfig, config); + } + inputConv(x, w, b, padding) { + const out = conv2d(x, w, this.strides, padding || "valid", this.dataFormat === "channelsFirst" ? "NCHW" : "NHWC", this.dilationRate); + if (b) { + return biasAdd(out, b, this.dataFormat); + } + return out; + } + recurrentConv(x, w) { + const strides = 1; + return conv2d(x, w, strides, "same", this.dataFormat === "channelsFirst" ? "NCHW" : "NHWC"); + } + }; + ConvLSTM2DCell.className = "ConvLSTM2DCell"; + serialization_exports.registerClass(ConvLSTM2DCell); + var ConvLSTM2D = class extends ConvRNN2D { + constructor(args) { + const cell = new ConvLSTM2DCell(args); + super(Object.assign({}, args, { cell })); + } + static fromConfig(cls, config) { + return new cls(config); + } + }; + ConvLSTM2D.className = "ConvLSTM2D"; + serialization_exports.registerClass(ConvLSTM2D); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/core.js + init_define_BUILD_VERSION(); + var Dropout = class extends Layer { + constructor(args) { + super(args); + this.rate = Math.max(Math.min(args.rate, 1), 0); + this.noiseShape = args.noiseShape; + this.seed = args.seed; + this.supportsMasking = true; + } + getNoiseShape(input2) { + if (this.noiseShape == null) { + return this.noiseShape; + } + const inputShape = input2.shape; + const noiseShape = []; + for (let i = 0; i < this.noiseShape.length; ++i) { + noiseShape.push(this.noiseShape[i] == null ? inputShape[i] : this.noiseShape[i]); + } + return noiseShape; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + if (0 < this.rate && this.rate < 1) { + const training = kwargs["training"] == null ? false : kwargs["training"]; + const noiseShape = this.getNoiseShape(input2); + const output = inTrainPhase(() => dropout2(input2, this.rate, noiseShape, this.seed), () => input2, training); + return output; + } + return inputs; + }); + } + getConfig() { + const config = { + rate: this.rate, + noiseShape: this.noiseShape, + seed: this.seed + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + dispose() { + return super.dispose(); + } + }; + Dropout.className = "Dropout"; + serialization_exports.registerClass(Dropout); + var SpatialDropout1D = class extends Dropout { + constructor(args) { + super(args); + this.inputSpec = [{ ndim: 3 }]; + } + getNoiseShape(input2) { + const inputShape = input2.shape; + return [inputShape[0], 1, inputShape[2]]; + } + }; + SpatialDropout1D.className = "SpatialDropout1D"; + serialization_exports.registerClass(SpatialDropout1D); + var Dense = class extends Layer { + constructor(args) { + super(args); + this.activation = null; + this.useBias = true; + this.kernel = null; + this.bias = null; + this.DEFAULT_KERNEL_INITIALIZER = "glorotNormal"; + this.DEFAULT_BIAS_INITIALIZER = "zeros"; + if (args.batchInputShape == null && args.inputShape == null && args.inputDim != null) { + let batchSize = null; + if (args.batchSize != null) { + batchSize = args.batchSize; + } + this.batchInputShape = [batchSize, args.inputDim]; + } + this.units = args.units; + assertPositiveInteger(this.units, "units"); + this.activation = getActivation(args.activation); + if (args.useBias != null) { + this.useBias = args.useBias; + } + this.kernelInitializer = getInitializer(args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.biasInitializer = getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER); + this.kernelConstraint = getConstraint(args.kernelConstraint); + this.biasConstraint = getConstraint(args.biasConstraint); + this.kernelRegularizer = getRegularizer(args.kernelRegularizer); + this.biasRegularizer = getRegularizer(args.biasRegularizer); + this.activityRegularizer = getRegularizer(args.activityRegularizer); + this.supportsMasking = true; + this.inputSpec = [{ minNDim: 2 }]; + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const inputLastDim = inputShape[inputShape.length - 1]; + if (this.kernel == null) { + this.kernel = this.addWeight("kernel", [inputLastDim, this.units], null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.units], null, this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } + } + this.inputSpec = [{ minNDim: 2, axes: { [-1]: inputLastDim } }]; + this.built = true; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const outputShape = inputShape.slice(); + outputShape[outputShape.length - 1] = this.units; + return outputShape; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + const fusedActivationName = mapActivationToFusedKernel(this.activation.getClassName()); + let output; + if (fusedActivationName != null) { + output = dot2(input2, this.kernel.read(), fusedActivationName, this.bias ? this.bias.read() : null); + } else { + output = dot2(input2, this.kernel.read()); + if (this.bias != null) { + output = biasAdd(output, this.bias.read()); + } + if (this.activation != null) { + output = this.activation.apply(output); + } + } + return output; + }); + } + getConfig() { + const config = { + units: this.units, + activation: serializeActivation(this.activation), + useBias: this.useBias, + kernelInitializer: serializeInitializer(this.kernelInitializer), + biasInitializer: serializeInitializer(this.biasInitializer), + kernelRegularizer: serializeRegularizer(this.kernelRegularizer), + biasRegularizer: serializeRegularizer(this.biasRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + kernelConstraint: serializeConstraint(this.kernelConstraint), + biasConstraint: serializeConstraint(this.biasConstraint) + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Dense.className = "Dense"; + serialization_exports.registerClass(Dense); + var Flatten = class extends Layer { + constructor(args) { + args = args || {}; + super(args); + this.inputSpec = [{ minNDim: 3 }]; + this.dataFormat = args.dataFormat; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + for (const dim of inputShape.slice(1)) { + if (dim == null) { + throw new ValueError(`The shape of the input to "Flatten" is not fully defined (got ${inputShape.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`); + } + } + return [inputShape[0], arrayProd(inputShape, 1)]; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + let input2 = getExactlyOneTensor(inputs); + if (this.dataFormat === "channelsFirst" && input2.rank > 1) { + const permutation = [0]; + for (let i = 2; i < input2.rank; ++i) { + permutation.push(i); + } + permutation.push(1); + input2 = transpose(input2, permutation); + } + return batchFlatten(input2); + }); + } + getConfig() { + const config = {}; + if (this.dataFormat != null) { + config["dataFormat"] = this.dataFormat; + } + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Flatten.className = "Flatten"; + serialization_exports.registerClass(Flatten); + var Activation2 = class extends Layer { + constructor(args) { + super(args); + this.supportsMasking = true; + this.activation = getActivation(args.activation); + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + return this.activation.apply(input2); + }); + } + getConfig() { + const config = { activation: serializeActivation(this.activation) }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Activation2.className = "Activation"; + serialization_exports.registerClass(Activation2); + var RepeatVector = class extends Layer { + constructor(args) { + super(args); + this.n = args.n; + this.inputSpec = [{ ndim: 2 }]; + } + computeOutputShape(inputShape) { + return [inputShape[0], this.n, inputShape[1]]; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + return repeat(inputs, this.n); + }); + } + getConfig() { + const config = { + n: this.n + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + RepeatVector.className = "RepeatVector"; + serialization_exports.registerClass(RepeatVector); + var Reshape2 = class extends Layer { + constructor(args) { + super(args); + this.targetShape = args.targetShape; + for (let i = 0; i < this.targetShape.length; ++i) { + if (this.isUnknown(this.targetShape[i])) { + this.targetShape[i] = null; + } + } + } + isUnknown(dim) { + return dim < 0 || dim == null; + } + fixUnknownDimension(inputShape, outputShape) { + const errorMsg = "Total size of new array must be unchanged."; + const finalShape = outputShape.slice(); + let known = 1; + let unknown = null; + for (let i = 0; i < finalShape.length; ++i) { + const dim = finalShape[i]; + if (this.isUnknown(dim)) { + if (unknown === null) { + unknown = i; + } else { + throw new ValueError("Can only specifiy one unknown dimension."); + } + } else { + known *= dim; + } + } + const originalSize = arrayProd(inputShape); + if (unknown !== null) { + if (known === 0 || originalSize % known !== 0) { + throw new ValueError(errorMsg); + } + finalShape[unknown] = originalSize / known; + } else if (originalSize !== known) { + throw new ValueError(errorMsg); + } + return finalShape; + } + computeOutputShape(inputShape) { + let anyUnknownDims = false; + for (let i = 0; i < inputShape.length; ++i) { + if (this.isUnknown(inputShape[i])) { + anyUnknownDims = true; + break; + } + } + if (anyUnknownDims) { + return inputShape.slice(0, 1).concat(this.targetShape); + } else { + return inputShape.slice(0, 1).concat(this.fixUnknownDimension(inputShape.slice(1), this.targetShape)); + } + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + const inputShape = input2.shape; + const outputShape = inputShape.slice(0, 1).concat(this.fixUnknownDimension(inputShape.slice(1), this.targetShape)); + return reshape(input2, outputShape); + }); + } + getConfig() { + const config = { + targetShape: this.targetShape + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Reshape2.className = "Reshape"; + serialization_exports.registerClass(Reshape2); + var Permute = class extends Layer { + constructor(args) { + super(args); + if (args.dims == null) { + throw new Error("Required configuration field `dims` is missing during Permute constructor call."); + } + if (!Array.isArray(args.dims)) { + throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${args.dims} instead.`); + } + const expectedSortedIndices = range2(1, args.dims.length + 1); + if (!util_exports.arraysEqual(args.dims.slice().sort(), expectedSortedIndices)) { + throw new Error("Invalid permutation `dims`: " + JSON.stringify(args.dims) + " `dims` must contain consecutive integers starting from 1."); + } + this.dims = args.dims; + this.dimsIncludingBatch = [0].concat(this.dims); + this.inputSpec = [new InputSpec({ ndim: this.dims.length + 1 })]; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const outputShape = inputShape.slice(); + this.dims.forEach((dim, i) => { + outputShape[i + 1] = inputShape[dim]; + }); + return outputShape; + } + call(inputs, kwargs) { + return transpose(getExactlyOneTensor(inputs), this.dimsIncludingBatch); + } + getConfig() { + const config = { + dims: this.dims + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Permute.className = "Permute"; + serialization_exports.registerClass(Permute); + var Masking = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.supportsMasking = true; + if (args != null) { + this.maskValue = args.maskValue == null ? 0 : args.maskValue; + } else { + this.maskValue = 0; + } + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { maskValue: this.maskValue }; + Object.assign(config, baseConfig); + return config; + } + computeMask(inputs, mask) { + const input2 = getExactlyOneTensor(inputs); + const axis = -1; + return any(notEqual(input2, this.maskValue), axis); + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + const axis = -1; + const keepDims = true; + const booleanMask = any(notEqual(input2, this.maskValue), axis, keepDims); + const output = mul(input2, cast(booleanMask, input2.dtype)); + return output; + }); + } + }; + Masking.className = "Masking"; + serialization_exports.registerClass(Masking); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/embeddings.js + init_define_BUILD_VERSION(); + var Embedding = class extends Layer { + constructor(args) { + super(args); + this.embeddings = null; + this.DEFAULT_EMBEDDINGS_INITIALIZER = "randomUniform"; + if (args.batchInputShape == null && args.inputShape == null) { + let batchSize = null; + if (args.batchSize != null) { + batchSize = args.batchSize; + } + if (args.inputLength == null) { + this.batchInputShape = [batchSize, null]; + } else { + this.batchInputShape = [batchSize].concat(toList(args.inputLength)); + } + } + this.inputDim = args.inputDim; + assertPositiveInteger(this.inputDim, "inputDim"); + this.outputDim = args.outputDim; + assertPositiveInteger(this.outputDim, "outputDim"); + this.embeddingsInitializer = getInitializer(args.embeddingsInitializer || this.DEFAULT_EMBEDDINGS_INITIALIZER); + this.embeddingsRegularizer = getRegularizer(args.embeddingsRegularizer); + this.activityRegularizer = getRegularizer(args.activityRegularizer); + this.embeddingsConstraint = getConstraint(args.embeddingsConstraint); + this.maskZero = args.maskZero; + this.supportsMasking = args.maskZero; + this.inputLength = args.inputLength; + } + build(inputShape) { + this.embeddings = this.addWeight("embeddings", [this.inputDim, this.outputDim], this.dtype, this.embeddingsInitializer, this.embeddingsRegularizer, true, this.embeddingsConstraint); + this.built = true; + } + warnOnIncompatibleInputShape(inputShape) { + } + computeMask(inputs, mask) { + return tidy(() => { + if (!this.maskZero) { + return null; + } else { + inputs = getExactlyOneTensor(inputs); + return notEqual(inputs, zerosLike(inputs)); + } + }); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (this.inputLength == null) { + return [...inputShape, this.outputDim]; + } + const inLens = toList(this.inputLength); + if (inLens.length !== inputShape.length - 1) { + throw new ValueError(`"inputLength" is ${this.inputLength}, but received input shape has shape ${inputShape}`); + } else { + let i = 0; + for (let k = 0; k < inLens.length; ++k) { + const s1 = inLens[k]; + const s2 = inputShape[k + 1]; + if (s1 != null && s2 != null && s1 !== s2) { + throw new ValueError(`"inputLength" is ${this.inputLength}, but received input shape has shape ${inputShape}`); + } else if (s1 == null) { + inLens[i] = s2; + } + i++; + } + } + return [inputShape[0], ...inLens, this.outputDim]; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + let input2 = getExactlyOneTensor(inputs); + if (input2.dtype !== "int32") { + input2 = cast2(input2, "int32"); + } + const output = gather2(this.embeddings.read(), reshape(input2, [input2.size])); + return reshape(output, getExactlyOneShape(this.computeOutputShape(input2.shape))); + }); + } + getConfig() { + const config = { + inputDim: this.inputDim, + outputDim: this.outputDim, + embeddingsInitializer: serializeInitializer(this.embeddingsInitializer), + embeddingsRegularizer: serializeRegularizer(this.embeddingsRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + embeddingsConstraint: serializeConstraint(this.embeddingsConstraint), + maskZero: this.maskZero, + inputLength: this.inputLength + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Embedding.className = "Embedding"; + serialization_exports.registerClass(Embedding); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/merge.js + init_define_BUILD_VERSION(); + var Merge = class extends Layer { + constructor(args) { + super(args || {}); + this.supportsMasking = true; + } + mergeFunction(inputs) { + throw new NotImplementedError(); + } + computeElementwiseOpOutputShape(shape1, shape2) { + if (shape1 == null || shape2 == null) { + return null; + } else if (shape1.length < shape2.length) { + return this.computeElementwiseOpOutputShape(shape2, shape1); + } else if (shape2.length === 0) { + return shape1; + } + const outputShape = shape1.slice(0, shape1.length - shape2.length); + for (let k = 0; k < shape2.length; ++k) { + const i = shape1[shape1.length - shape2.length + k]; + const j = shape2[k]; + if (i == null || j == null || i < 0 || j < 0) { + outputShape.push(null); + } else if (i === 1) { + outputShape.push(j); + } else if (j === 1) { + outputShape.push(i); + } else { + if (i !== j) { + throw new ValueError("Operands could not be broadcast together with shapes " + JSON.stringify(shape1) + " " + JSON.stringify(shape2)); + } + outputShape.push(i); + } + } + return outputShape; + } + build(inputShape) { + if (Array.isArray(inputShape) && !Array.isArray(inputShape[0])) { + inputShape = [getExactlyOneShape(inputShape)]; + } + inputShape = inputShape; + if (inputShape.length < 2) { + throw new ValueError(`A merge layer should be called on an Array of at least 2 inputs. Got ${inputShape.length} input(s).`); + } + let batchSizes = []; + for (const shape of inputShape) { + if (shape != null && shape[0] !== null) { + batchSizes.push(shape[0]); + } + } + batchSizes = unique2(batchSizes); + if (batchSizes.length > 1) { + throw new ValueError(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(inputShape)}.`); + } + let outputShape = inputShape[0] == null ? null : inputShape[0].slice(1); + for (let i = 1; i < inputShape.length; ++i) { + const shape = inputShape[i] == null ? null : inputShape[i].slice(1); + outputShape = this.computeElementwiseOpOutputShape(outputShape, shape); + } + const allRanks = inputShape.map((shape) => shape.length); + if (inputShape.indexOf(null) === -1 && unique2(allRanks).length === 1) { + this.reshapeRequired = false; + } else { + this.reshapeRequired = true; + } + } + call(inputs, kwargs) { + return tidy(() => { + inputs = inputs; + if (this.reshapeRequired) { + const reshapedInputs = []; + const inputDims = inputs.map((input2) => input2.rank); + if (inputDims.indexOf(null) === -1) { + const maxNDim = max2(inputDims); + for (let x of inputs) { + const xNDim = x.rank; + for (let k = 0; k < maxNDim - xNDim; ++k) { + x = expandDims2(x, 1); + } + reshapedInputs.push(x); + } + return this.mergeFunction(reshapedInputs); + } else { + let transposed = false; + for (const x of inputs) { + const xNDim = x.rank; + if (xNDim == null) { + const xShape = x.shape; + const batchSize = xShape[0]; + const newShape = xShape.slice(1).concat([batchSize]); + let xTransposed = reshape(x, [batchSize].concat(arrayProd(xShape.slice(1)))); + xTransposed = transpose(xTransposed, [1, 0]); + xTransposed = reshape(xTransposed, newShape); + reshapedInputs.push(xTransposed); + transposed = true; + } else if (xNDim > 1) { + const dims = range2(1, xNDim).concat([0]); + reshapedInputs.push(transpose(x, dims)); + transposed = true; + } else { + reshapedInputs.push(x); + } + } + let y = this.mergeFunction(reshapedInputs); + const yNDim = y.rank; + if (transposed) { + if (yNDim == null) { + const yShape = y.shape; + const yNDim2 = yShape.length; + const batchSize = yShape[yNDim2 - 1]; + const newShape = [batchSize].concat(yShape.slice(0, yShape.length - 1)); + y = reshape(transpose(reshape(y, [-1, batchSize]), [1, 0]), newShape); + } else if (yNDim > 1) { + const dims = [yNDim - 1].concat(range2(0, yNDim - 1)); + y = transpose(y, dims); + } + } + return y; + } + } else { + return this.mergeFunction(inputs); + } + }); + } + computeOutputShape(inputShape) { + inputShape = inputShape; + let outputShape; + if (inputShape[0] == null) { + outputShape = null; + } else { + outputShape = inputShape[0].slice(1); + } + for (let i = 1; i < inputShape.length; ++i) { + const shape = inputShape[i] == null ? null : inputShape[i].slice(1); + outputShape = this.computeElementwiseOpOutputShape(outputShape, shape); + } + let batchSizes = []; + for (const shape of inputShape) { + if (shape != null && shape[0] !== null) { + batchSizes.push(shape[0]); + } + } + batchSizes = unique2(batchSizes); + if (batchSizes.length === 1) { + outputShape = batchSizes.concat(outputShape); + } else { + outputShape = [null].concat(outputShape); + } + return outputShape; + } + computeMask(inputs, mask) { + return tidy(() => { + if (mask == null) { + return null; + } + if (!Array.isArray(mask)) { + throw new ValueError("`mask` should be an Array"); + } + if (!Array.isArray(inputs)) { + throw new ValueError("`inputs` should be an Array"); + } + if (mask.length !== inputs.length) { + throw new ValueError(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${inputs.length} vs ${mask.length})`); + } + if (mask.every((m) => m == null)) { + return null; + } + mask = mask.map((m) => m == null ? m : expandDims(m, 0)); + let output = mask[0]; + for (let i = 1; i < mask.length - 1; ++i) { + output = logicalAnd(output, mask[i]); + } + return output; + }); + } + }; + var Add2 = class extends Merge { + constructor(args) { + super(args); + } + mergeFunction(inputs) { + return tidy(() => { + let output = inputs[0].clone(); + for (let i = 1; i < inputs.length; ++i) { + output = add2(output, inputs[i]); + } + return output; + }); + } + }; + Add2.className = "Add"; + serialization_exports.registerClass(Add2); + var Multiply2 = class extends Merge { + constructor(args) { + super(args); + } + mergeFunction(inputs) { + return tidy(() => { + let output = inputs[0].clone(); + for (let i = 1; i < inputs.length; ++i) { + output = mul(output, inputs[i]); + } + return output; + }); + } + }; + Multiply2.className = "Multiply"; + serialization_exports.registerClass(Multiply2); + var Average = class extends Merge { + constructor(args) { + super(args); + } + mergeFunction(inputs) { + return tidy(() => { + let output = inputs[0].clone(); + for (let i = 1; i < inputs.length; ++i) { + output = add2(output, inputs[i]); + } + return mul(1 / inputs.length, output); + }); + } + }; + Average.className = "Average"; + serialization_exports.registerClass(Average); + var Maximum2 = class extends Merge { + constructor(args) { + super(args); + } + mergeFunction(inputs) { + return tidy(() => { + let output = inputs[0]; + for (let i = 1; i < inputs.length; ++i) { + output = maximum(output, inputs[i]); + } + return output; + }); + } + }; + Maximum2.className = "Maximum"; + serialization_exports.registerClass(Maximum2); + var Minimum2 = class extends Merge { + constructor(args) { + super(args); + } + mergeFunction(inputs) { + return tidy(() => { + let output = inputs[0]; + for (let i = 1; i < inputs.length; ++i) { + output = minimum(output, inputs[i]); + } + return output; + }); + } + }; + Minimum2.className = "Minimum"; + serialization_exports.registerClass(Minimum2); + var Concatenate = class extends Merge { + constructor(args) { + super(args); + this.DEFAULT_AXIS = -1; + if (args == null) { + args = {}; + } + this.axis = args.axis == null ? this.DEFAULT_AXIS : args.axis; + this.supportsMasking = true; + this.reshapeRequired = false; + } + build(inputShape) { + if (!(Array.isArray(inputShape) && Array.isArray(inputShape[0])) || inputShape.length === 1) { + throw new ValueError("A `Concatenate` layer should be called on a list of at least 2 inputs"); + } + inputShape = inputShape; + let allNoneShape = true; + for (const shape of inputShape) { + if (shape != null) { + allNoneShape = false; + break; + } + } + if (allNoneShape) { + return; + } + const shapeSet = []; + for (let i = 0; i < inputShape.length; ++i) { + const shapeWithoutConcatAxis = inputShape[i].slice(); + shapeWithoutConcatAxis.splice(this.axis, 1); + let exists = false; + for (const shape of shapeSet) { + if (util_exports.arraysEqual(shape, shapeWithoutConcatAxis)) { + exists = true; + break; + } + } + if (!exists) { + shapeSet.push(shapeWithoutConcatAxis); + } + } + if (shapeSet.length > 1) { + throw new ValueError("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: " + JSON.stringify(inputShape)); + } + } + mergeFunction(inputs) { + return tidy(() => { + return concatenate(inputs, this.axis); + }); + } + computeOutputShape(inputShape) { + if (!(Array.isArray(inputShape) && Array.isArray(inputShape[0]))) { + throw new ValueError("A `Concatenate` layer should be called on a list of inputs."); + } + const inputShapes = inputShape; + const outputShape = inputShapes[0].slice(); + const axis = this.axis < 0 ? outputShape.length + this.axis : this.axis; + for (const shape of inputShapes.slice(1)) { + if (outputShape[axis] == null || shape[axis] == null) { + outputShape[axis] = null; + break; + } + outputShape[axis] += shape[axis]; + } + return outputShape; + } + computeMask(inputs, mask) { + if (mask == null) { + return null; + } + if (!Array.isArray(mask)) { + throw new ValueError("`mask` should be an array for Concatenate"); + } + if (!Array.isArray(inputs)) { + throw new ValueError("`inputs` should be an array for Concatenate"); + } + if (mask.length !== inputs.length) { + throw new ValueError(`Mismatch in the length of mask (${mask.length}) and the legnth of inputs (${inputs.length})`); + } + return tidy(() => { + let allNullMasks = true; + mask.forEach((m) => { + if (m != null) { + allNullMasks = false; + return; + } + }); + if (allNullMasks) { + return null; + } + const outputMasks = []; + for (let i = 0; i < inputs.length; ++i) { + if (mask[i] == null) { + outputMasks.push(cast(onesLike(inputs[i]), "bool")); + } else if (mask[i].rank < inputs[i].rank) { + outputMasks.push(expandDims(mask[i], -1)); + } else { + outputMasks.push(mask[i]); + } + } + const concatenatedMasks = concat(outputMasks, this.axis); + return all(concatenatedMasks, -1, false); + }); + } + getConfig() { + const config = { + "axis": this.axis + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Concatenate.className = "Concatenate"; + serialization_exports.registerClass(Concatenate); + function interpretAxis(axis, dim) { + while (axis < 0) { + axis += dim; + } + return axis; + } + function batchDot(x, y, axes) { + if (x.shape.length > 3 || y.shape.length > 3) { + throw new NotImplementedError("batchDot is not implemented for tensors of 4D or higher rank yet"); + } + util_exports.assert(x.shape.length >= 2, () => `batchDot requires the rank of x to be >= 2, but got ${x.shape.length}`); + util_exports.assert(x.shape.length >= 2, () => `batchDot requires the rank of y to be >= 2, but got ${y.shape.length}`); + if (typeof axes === "number") { + axes = [axes, axes]; + } + if (x.dtype === "complex64" || y.dtype === "complex64") { + throw new NotImplementedError("batchDot is not implemented for complex64-type Tensors yet."); + } + const xNDim = x.shape.length; + const yNDim = y.shape.length; + if (axes == null) { + axes = [xNDim - 1, yNDim - 2]; + } + const axesArray = axes; + return tidy(() => { + let diff; + if (xNDim > yNDim) { + diff = xNDim - yNDim; + const diffShape = []; + for (let i = 0; i < diff; ++i) { + diffShape.push(1); + } + y = reshape(y, y.shape.concat(diffShape)); + } else if (yNDim > xNDim) { + diff = yNDim - xNDim; + const diffShape = []; + for (let i = 0; i < diff; ++i) { + diffShape.push(1); + } + x = reshape(x, x.shape.concat(diffShape)); + } else { + diff = 0; + } + let out; + if (x.shape.length === 2 && y.shape.length === 2) { + if (axesArray[0] === axesArray[1]) { + out = sum2(mul(x, y), axesArray[0]); + } else { + out = sum2(mul(transpose(x, [1, 0]), y), axesArray[1]); + } + } else { + const adjX = axesArray[0] !== x.shape.length - 1; + const adjY = axesArray[1] === y.shape.length - 1; + out = matMul(x, y, adjX, adjY); + } + if (diff > 0) { + let idx; + if (xNDim > yNDim) { + idx = xNDim + yNDim - 3; + } else { + idx = xNDim - 1; + } + const squeezeAxes = []; + for (let i = idx; i < idx + diff; ++i) { + squeezeAxes.push(i); + } + out = squeeze(out, squeezeAxes); + } + if (out.shape.length === 1) { + out = expandDims(out, 1); + } + return out; + }); + } + var Dot = class extends Merge { + constructor(args) { + super(args); + this.axes = args.axes; + this.normalize = args.normalize == null ? false : args.normalize; + this.supportsMasking = true; + this.reshapeRequired = false; + } + build(inputShape) { + util_exports.assert(Array.isArray(inputShape) && inputShape.length === 2 && Array.isArray(inputShape[0]) && Array.isArray(inputShape[1]), () => "A `Dot` layer should be called on a list of exactly 2 inputs."); + const shape1 = inputShape[0]; + const shape2 = inputShape[1]; + if (shape1.length > 3 || shape2.length > 3) { + throw new NotImplementedError("Dot layer does not support tensors of 4D or higher rank yet."); + } + const axes = this.interpretAxes(shape1, shape2); + if (shape1[axes[0]] !== shape2[axes[1]]) { + throw new ValueError(`Dimension incompatibility: ${shape1[axes[0]]} !== ${shape2[axes[1]]}`); + } + } + mergeFunction(inputs) { + if (inputs.length !== 2) { + throw new ValueError(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${inputs.length} input(s).`); + } + let x1 = inputs[0]; + let x2 = inputs[1]; + let axes; + if (!Array.isArray(this.axes)) { + axes = [ + interpretAxis(this.axes, x1.shape.length), + interpretAxis(this.axes, x2.shape.length) + ]; + } else { + axes = this.axes.map((axis, i) => interpretAxis(axis, inputs[i].shape.length)); + } + if (this.normalize) { + x1 = l2Normalize(x1, axes[0]); + x2 = l2Normalize(x2, axes[1]); + } + return batchDot(x1, x2, axes); + } + interpretAxes(shape1, shape2) { + let axes; + if (!Array.isArray(this.axes)) { + axes = [ + interpretAxis(this.axes, shape1.length), + interpretAxis(this.axes, shape2.length) + ]; + } else { + axes = this.axes; + } + return axes; + } + computeOutputShape(inputShape) { + util_exports.assert(Array.isArray(inputShape) && inputShape.length === 2 && Array.isArray(inputShape[0]) && Array.isArray(inputShape[1]), () => "A `Dot` layer should be called on a list of exactly 2 inputs."); + const shape1 = inputShape[0].slice(); + const shape2 = inputShape[1].slice(); + if (shape1.length > 3 || shape2.length > 3) { + throw new NotImplementedError("Dot layer does not support tensors of 4D or higher rank yet."); + } + const axes = this.interpretAxes(shape1, shape2); + shape1.splice(axes[0], 1); + shape2.splice(axes[1], 1); + shape2.splice(0, 1); + const outputShape = shape1.concat(shape2); + if (outputShape.length === 1) { + outputShape.push(1); + } + return outputShape; + } + computeMask(inputs, mask) { + return null; + } + getConfig() { + const config = { + "axes": this.axes, + "normalize": this.normalize + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Dot.className = "Dot"; + serialization_exports.registerClass(Dot); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/noise.js + init_define_BUILD_VERSION(); + var GaussianNoise = class extends Layer { + constructor(args) { + super(args); + this.supportsMasking = true; + this.stddev = args.stddev; + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { stddev: this.stddev }; + Object.assign(config, baseConfig); + return config; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + const noised = () => add2(randomNormal2(input2.shape, 0, this.stddev), input2); + const output = inTrainPhase(noised, () => input2, kwargs["training"] || false); + return output; + }); + } + }; + GaussianNoise.className = "GaussianNoise"; + serialization_exports.registerClass(GaussianNoise); + var GaussianDropout = class extends Layer { + constructor(args) { + super(args); + this.supportsMasking = true; + this.rate = args.rate; + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { rate: this.rate }; + Object.assign(config, baseConfig); + return config; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + if (this.rate > 0 && this.rate < 1) { + const noised = () => { + const stddev = Math.sqrt(this.rate / (1 - this.rate)); + return mul(input2, randomNormal2(input2.shape, 1, stddev)); + }; + return inTrainPhase(noised, () => input2, kwargs["training"] || false); + } + return input2; + }); + } + }; + GaussianDropout.className = "GaussianDropout"; + serialization_exports.registerClass(GaussianDropout); + var AlphaDropout = class extends Layer { + constructor(args) { + super(args); + this.supportsMasking = true; + this.rate = args.rate; + this.noiseShape = args.noiseShape; + } + _getNoiseShape(inputs) { + return this.noiseShape || getExactlyOneTensor(inputs).shape; + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { rate: this.rate }; + Object.assign(config, baseConfig); + return config; + } + call(inputs, kwargs) { + return tidy(() => { + if (this.rate < 1 && this.rate > 0) { + const noiseShape = this._getNoiseShape(inputs); + const droppedInputs = () => { + const input2 = getExactlyOneTensor(inputs); + const alpha = 1.6732632423543772; + const scale2 = 1.0507009873554805; + const alphaP = -alpha * scale2; + let keptIdx = greaterEqual(randomUniform(noiseShape), this.rate); + keptIdx = cast2(keptIdx, "float32"); + const a = ((1 - this.rate) * (1 + this.rate * alphaP ** 2)) ** -0.5; + const b = -a * alphaP * this.rate; + const x = add2(mul(input2, keptIdx), mul(add2(keptIdx, -1), alphaP)); + return add2(mul(x, a), b); + }; + return inTrainPhase(droppedInputs, () => getExactlyOneTensor(inputs), kwargs["training"] || false); + } + return inputs; + }); + } + }; + AlphaDropout.className = "AlphaDropout"; + serialization_exports.registerClass(AlphaDropout); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/normalization.js + init_define_BUILD_VERSION(); + function batchNormalization(x, mean4, variance, beta, gamma, epsilon3 = 1e-3) { + let out; + if (x.rank === 2) { + out = batchNorm2d(x, mean4, variance, beta, gamma, epsilon3); + } else if (x.rank === 3) { + out = batchNorm3d(x, mean4, variance, beta, gamma, epsilon3); + } else if (x.rank === 4) { + out = batchNorm4d(x, mean4, variance, beta, gamma, epsilon3); + } else { + throw new NotImplementedError(`batchNormalization is not implemented for array of rank ${x.rank} yet`); + } + return out; + } + function regularNormalizeBatchInTraining(x, gamma, beta, reductionAxes, epsilon3 = 1e-3) { + return tidy(() => { + const meanAndVariance = moments(x, reductionAxes); + const mean4 = meanAndVariance.mean; + const variance = meanAndVariance.variance; + const normed = batchNormalization(x, mean4, variance, beta, gamma, epsilon3); + return [normed, mean4, variance]; + }); + } + function broadcastNormalizeBatchInTraining(x, gamma, beta, reductionAxes, epsilon3 = 1e-3) { + return tidy(() => { + const meanAndVariance = moments(x, reductionAxes); + const mean4 = meanAndVariance.mean; + const variance = meanAndVariance.variance; + const targetShape = []; + for (const axis of range2(0, x.rank)) { + if (reductionAxes.indexOf(axis) !== -1) { + targetShape.push(1); + } else { + targetShape.push(x.shape[axis]); + } + } + const broadcastMean = reshape(mean4, targetShape); + const broadcastVariance = reshape(variance, targetShape); + const broadcastGamma = gamma == null ? null : reshape(gamma, targetShape); + const broadcastBeta = beta == null ? null : reshape(beta, targetShape); + const normed = batchNormalization(x, broadcastMean, broadcastVariance, broadcastBeta, broadcastGamma, epsilon3); + return [normed, mean4, variance]; + }); + } + function normalizeBatchInTraining(x, gamma, beta, reductionAxes, epsilon3 = 1e-3) { + if (util_exports.arraysEqual(reductionAxes.slice().sort(), range2(0, x.rank - 1))) { + return regularNormalizeBatchInTraining(x, gamma, beta, reductionAxes, epsilon3); + } else { + return broadcastNormalizeBatchInTraining(x, gamma, beta, reductionAxes, epsilon3); + } + } + var BatchNormalization = class extends Layer { + constructor(args) { + if (args == null) { + args = {}; + } + super(args); + this.supportsMasking = true; + this.axis = args.axis == null ? -1 : args.axis; + this.momentum = args.momentum == null ? 0.99 : args.momentum; + this.epsilon = args.epsilon == null ? 1e-3 : args.epsilon; + this.center = args.center == null ? true : args.center; + this.scale = args.scale == null ? true : args.scale; + this.betaInitializer = getInitializer(args.betaInitializer || "zeros"); + this.gammaInitializer = getInitializer(args.gammaInitializer || "ones"); + this.movingMeanInitializer = getInitializer(args.movingMeanInitializer || "zeros"); + this.movingVarianceInitializer = getInitializer(args.movingVarianceInitializer || "ones"); + this.betaConstraint = getConstraint(args.betaConstraint); + this.gammaConstraint = getConstraint(args.gammaConstraint); + this.betaRegularizer = getRegularizer(args.betaRegularizer); + this.gammaRegularizer = getRegularizer(args.gammaRegularizer); + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const axis = this.axis >= 0 ? this.axis : this.axis + inputShape.length; + const dim = inputShape[axis]; + if (dim == null) { + throw new ValueError(`Axis ${axis} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(inputShape)}.`); + } + this.inputSpec = [new InputSpec({ ndim: inputShape.length, axes: { [axis]: dim } })]; + const shape = [dim]; + if (this.scale) { + this.gamma = this.addWeight("gamma", shape, null, this.gammaInitializer, this.gammaRegularizer, true, this.gammaConstraint); + } + if (this.center) { + this.beta = this.addWeight("beta", shape, null, this.betaInitializer, this.betaRegularizer, true, this.betaConstraint); + } + this.movingMean = this.addWeight("moving_mean", shape, null, this.movingMeanInitializer, null, false); + this.movingVariance = this.addWeight("moving_variance", shape, null, this.movingVarianceInitializer, null, false); + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + const training = kwargs["training"] == null ? false : kwargs["training"]; + const input2 = getExactlyOneTensor(inputs); + const inputShape = input2.shape; + const ndim = inputShape.length; + const reductionAxes = range2(0, ndim); + const axis = this.axis >= 0 ? this.axis : this.axis + ndim; + reductionAxes.splice(axis, 1); + const broadcastShape = pyListRepeat(1, ndim); + broadcastShape[axis] = inputShape[axis]; + const sortedReductionAxes = reductionAxes.slice(); + sortedReductionAxes.sort(); + const needsBroadcasting = !util_exports.arraysEqual(sortedReductionAxes, range2(0, ndim).slice(0, ndim - 1)); + const normalizeInference = () => { + if (needsBroadcasting) { + const broadcastMovingMean = reshape(this.movingMean.read(), broadcastShape); + const broadcastMovingVariance = reshape(this.movingVariance.read(), broadcastShape); + const broadcastBeta = this.center ? reshape(this.beta.read(), broadcastShape) : null; + const broadcastGamma = this.scale ? reshape(this.gamma.read(), broadcastShape) : null; + return batchNormalization(input2, broadcastMovingMean, broadcastMovingVariance, broadcastBeta, broadcastGamma, this.epsilon); + } else { + return batchNormalization(input2, this.movingMean.read(), this.movingVariance.read(), this.beta == null ? null : this.beta.read(), this.gamma == null ? null : this.gamma.read(), this.epsilon); + } + }; + if (!training) { + return normalizeInference(); + } + const [normedTraining, mean4, variance] = normalizeBatchInTraining(input2, this.gamma.read(), this.beta.read(), reductionAxes, this.epsilon); + const doMovingAverage = (variable2, value, momentum) => { + tidy(() => { + const decay = 1 - momentum; + const origValue = variable2.read(); + const updateDelta = mul(sub(origValue, value), decay); + variable2.write(sub(origValue, updateDelta)); + }); + }; + const updateMovingMeanAndVariance = () => { + doMovingAverage(this.movingMean, mean4, this.momentum); + doMovingAverage(this.movingVariance, variance, this.momentum); + }; + updateMovingMeanAndVariance(); + return normedTraining; + }); + } + getConfig() { + const config = { + axis: this.axis, + momentum: this.momentum, + epsilon: this.epsilon, + center: this.center, + scale: this.scale, + betaInitializer: serializeInitializer(this.betaInitializer), + gammaInitializer: serializeInitializer(this.gammaInitializer), + movingMeanInitializer: serializeInitializer(this.movingMeanInitializer), + movingVarianceInitializer: serializeInitializer(this.movingVarianceInitializer), + betaRegularizer: serializeRegularizer(this.betaRegularizer), + gammaRegularizer: serializeRegularizer(this.gammaRegularizer), + betaConstraint: serializeConstraint(this.betaConstraint), + gammaConstraint: serializeConstraint(this.gammaConstraint) + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + BatchNormalization.className = "BatchNormalization"; + serialization_exports.registerClass(BatchNormalization); + var LayerNormalization = class extends Layer { + constructor(args) { + if (args == null) { + args = {}; + } + super(args); + this.axis = args.axis == null ? -1 : args.axis; + if (typeof this.axis === "number") { + if (!Number.isInteger(this.axis)) { + throw new Error(`Expected axis to be an integer, but received ${this.axis}`); + } + } else if (Array.isArray(this.axis)) { + for (const axis of this.axis) { + if (!Number.isInteger(axis)) { + throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`); + } + } + } else { + throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`); + } + this.epsilon = args.epsilon == null ? 1e-3 : args.epsilon; + this.center = args.center == null ? true : args.center; + this.scale = args.scale == null ? true : args.scale; + this.betaInitializer = getInitializer(args.betaInitializer || "zeros"); + this.gammaInitializer = getInitializer(args.gammaInitializer || "ones"); + this.betaRegularizer = getRegularizer(args.betaRegularizer); + this.gammaRegularizer = getRegularizer(args.gammaRegularizer); + this.supportsMasking = true; + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const nDims = inputShape.length; + if (typeof this.axis === "number") { + this.axis = [this.axis]; + } + for (let i = 0; i < this.axis.length; ++i) { + if (this.axis[i] < 0) { + this.axis[i] += nDims; + } + } + for (const axis of this.axis) { + if (axis < 0 || axis >= nDims) { + throw new Error(`Invalid axis: ${axis}`); + } + } + if (this.axis.length !== unique2(this.axis).length) { + throw new Error(`Found duplicate axes in: ${this.axis}`); + } + const paramShape = this.axis.map((axis) => inputShape[axis]); + const trainable = true; + if (this.scale) { + this.gamma = this.addWeight("gamma", paramShape, "float32", this.gammaInitializer, this.gammaRegularizer, trainable); + } else { + this.gamma = null; + } + if (this.center) { + this.beta = this.addWeight("beta", paramShape, "float32", this.betaInitializer, this.betaRegularizer, trainable); + } else { + this.beta = null; + } + this.built = true; + } + call(inputs, kwargs) { + const input2 = getExactlyOneTensor(inputs); + const inputShape = input2.shape; + const nDims = inputShape.length; + return tidy(() => { + const keepDims = true; + let { mean: mean4, variance } = moments(input2, this.axis, keepDims); + const broadcastShape = pyListRepeat(1, nDims); + for (const dim of this.axis) { + broadcastShape[dim] = inputShape[dim]; + } + const broadcast = (v) => { + if (v != null && v.shape.length !== nDims) { + return reshape(v, broadcastShape); + } else { + return v; + } + }; + let scale2 = this.scale ? broadcast(this.gamma.read()) : null; + let offset = this.center ? broadcast(this.beta.read()) : null; + const momentsTiling = []; + const scaleOffsetTiling = []; + for (let i = 0; i < nDims; ++i) { + if (this.axis.indexOf(i) !== -1) { + momentsTiling.push(inputShape[i]); + scaleOffsetTiling.push(1); + } else { + momentsTiling.push(1); + scaleOffsetTiling.push(inputShape[i]); + } + } + mean4 = tile(mean4, momentsTiling); + variance = tile(variance, momentsTiling); + if (scale2 != null) { + scale2 = tile(scale2, scaleOffsetTiling); + } + if (offset != null) { + offset = tile(offset, scaleOffsetTiling); + } + return batchNormalization(input2, mean4, variance, offset, scale2, this.epsilon); + }); + } + getConfig() { + const config = { + axis: this.axis, + epsilon: this.epsilon, + center: this.center, + scale: this.scale, + betaInitializer: serializeInitializer(this.betaInitializer), + gammaInitializer: serializeInitializer(this.gammaInitializer), + betaRegularizer: serializeRegularizer(this.betaRegularizer), + gammaRegularizer: serializeRegularizer(this.gammaRegularizer) + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + LayerNormalization.className = "LayerNormalization"; + serialization_exports.registerClass(LayerNormalization); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/padding.js + init_define_BUILD_VERSION(); + function spatial2dPadding(x, padding, dataFormat) { + return tidy(() => { + if (x.rank !== 4) { + throw new ValueError(`temporalPadding expects input tensor to be 4-D, but received a ${x.rank}-D tensor.`); + } + if (padding == null) { + padding = [[1, 1], [1, 1]]; + } + if (padding.length !== 2 || padding[0].length !== 2 || padding[1].length !== 2) { + throw new ValueError("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers."); + } + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + if (dataFormat !== "channelsLast" && dataFormat !== "channelsFirst") { + throw new ValueError(`Unknown data format: ${dataFormat}. Supported data formats are 'channelsLast' and 'channelsFirst.`); + } + let pattern; + if (dataFormat === "channelsFirst") { + pattern = [[0, 0], [0, 0], padding[0], padding[1]]; + } else { + pattern = [[0, 0], padding[0], padding[1], [0, 0]]; + } + return pad(x, pattern); + }); + } + var ZeroPadding2D = class extends Layer { + constructor(args) { + if (args == null) { + args = {}; + } + super(args); + this.dataFormat = args.dataFormat == null ? imageDataFormat() : args.dataFormat; + if (args.padding == null) { + this.padding = [[1, 1], [1, 1]]; + } else if (typeof args.padding === "number") { + this.padding = [[args.padding, args.padding], [args.padding, args.padding]]; + } else { + args.padding = args.padding; + if (args.padding.length !== 2) { + throw new ValueError(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${args.padding.length} array.`); + } + let heightPadding; + let widthPadding; + if (typeof args.padding[0] === "number") { + heightPadding = [args.padding[0], args.padding[0]]; + widthPadding = [args.padding[1], args.padding[1]]; + } else { + args.padding = args.padding; + if (args.padding[0].length !== 2) { + throw new ValueError(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${args.padding[0].length} array.`); + } + heightPadding = args.padding[0]; + if (args.padding[1].length !== 2) { + throw new ValueError(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${args.padding[1].length} array.`); + } + widthPadding = args.padding[1]; + } + this.padding = [heightPadding, widthPadding]; + } + this.inputSpec = [new InputSpec({ ndim: 4 })]; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + let rows; + let cols; + if (this.dataFormat === "channelsFirst") { + if (inputShape[2] != null && inputShape[2] >= 0) { + rows = inputShape[2] + this.padding[0][0] + this.padding[0][1]; + } else { + rows = null; + } + if (inputShape[3] != null && inputShape[3] >= 0) { + cols = inputShape[3] + this.padding[1][0] + this.padding[1][1]; + } else { + cols = null; + } + return [inputShape[0], inputShape[1], rows, cols]; + } else { + if (inputShape[1] != null && inputShape[1] >= 0) { + rows = inputShape[1] + this.padding[0][0] + this.padding[0][1]; + } else { + rows = null; + } + if (inputShape[2] != null && inputShape[2] >= 0) { + cols = inputShape[2] + this.padding[1][0] + this.padding[1][1]; + } else { + cols = null; + } + return [inputShape[0], rows, cols, inputShape[3]]; + } + } + call(inputs, kwargs) { + return tidy(() => spatial2dPadding(getExactlyOneTensor(inputs), this.padding, this.dataFormat)); + } + getConfig() { + const config = { + padding: this.padding, + dataFormat: this.dataFormat + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + ZeroPadding2D.className = "ZeroPadding2D"; + serialization_exports.registerClass(ZeroPadding2D); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/pooling.js + init_define_BUILD_VERSION(); + function pool2d(x, poolSize, strides, padding, dataFormat, poolMode) { + return tidy(() => { + checkDataFormat(dataFormat); + checkPoolMode(poolMode); + checkPaddingMode(padding); + if (strides == null) { + strides = [1, 1]; + } + if (padding == null) { + padding = "valid"; + } + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + if (poolMode == null) { + poolMode = "max"; + } + x = preprocessConv2DInput(x, dataFormat); + let y; + const paddingString = padding === "same" ? "same" : "valid"; + if (poolMode === "max") { + y = maxPool(x, poolSize, strides, paddingString); + } else { + y = avgPool( + x, + poolSize, + strides, + paddingString + ); + } + if (dataFormat === "channelsFirst") { + y = transpose(y, [0, 3, 1, 2]); + } + return y; + }); + } + function pool3d(x, poolSize, strides, padding, dataFormat, poolMode) { + return tidy(() => { + checkDataFormat(dataFormat); + checkPoolMode(poolMode); + checkPaddingMode(padding); + if (strides == null) { + strides = [1, 1, 1]; + } + if (padding == null) { + padding = "valid"; + } + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + if (poolMode == null) { + poolMode = "max"; + } + x = preprocessConv3DInput(x, dataFormat); + let y; + const paddingString = padding === "same" ? "same" : "valid"; + if (poolMode === "max") { + y = maxPool3d(x, poolSize, strides, paddingString); + } else { + y = avgPool3d(x, poolSize, strides, paddingString); + } + if (dataFormat === "channelsFirst") { + y = transpose(y, [0, 4, 1, 2, 3]); + } + return y; + }); + } + var Pooling1D = class extends Layer { + constructor(args) { + if (args.poolSize == null) { + args.poolSize = 2; + } + super(args); + if (typeof args.poolSize === "number") { + this.poolSize = [args.poolSize]; + } else if (Array.isArray(args.poolSize) && args.poolSize.length === 1 && typeof args.poolSize[0] === "number") { + this.poolSize = args.poolSize; + } else { + throw new ValueError(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(args.poolSize)}`); + } + assertPositiveInteger(this.poolSize, "poolSize"); + if (args.strides == null) { + this.strides = this.poolSize; + } else { + if (typeof args.strides === "number") { + this.strides = [args.strides]; + } else if (Array.isArray(args.strides) && args.strides.length === 1 && typeof args.strides[0] === "number") { + this.strides = args.strides; + } else { + throw new ValueError(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(args.strides)}`); + } + } + assertPositiveInteger(this.strides, "strides"); + this.padding = args.padding == null ? "valid" : args.padding; + checkPaddingMode(this.padding); + this.inputSpec = [new InputSpec({ ndim: 3 })]; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const length = convOutputLength(inputShape[1], this.poolSize[0], this.padding, this.strides[0]); + return [inputShape[0], length, inputShape[2]]; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + inputs = expandDims2(getExactlyOneTensor(inputs), 2); + const output = this.poolingFunction(getExactlyOneTensor(inputs), [this.poolSize[0], 1], [this.strides[0], 1], this.padding, "channelsLast"); + return squeeze(output, [2]); + }); + } + getConfig() { + const config = { + poolSize: this.poolSize, + padding: this.padding, + strides: this.strides + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + var MaxPooling1D = class extends Pooling1D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool2d(inputs, poolSize, strides, padding, dataFormat, "max"); + } + }; + MaxPooling1D.className = "MaxPooling1D"; + serialization_exports.registerClass(MaxPooling1D); + var AveragePooling1D = class extends Pooling1D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool2d(inputs, poolSize, strides, padding, dataFormat, "avg"); + } + }; + AveragePooling1D.className = "AveragePooling1D"; + serialization_exports.registerClass(AveragePooling1D); + var Pooling2D = class extends Layer { + constructor(args) { + if (args.poolSize == null) { + args.poolSize = [2, 2]; + } + super(args); + this.poolSize = Array.isArray(args.poolSize) ? args.poolSize : [args.poolSize, args.poolSize]; + if (args.strides == null) { + this.strides = this.poolSize; + } else if (Array.isArray(args.strides)) { + if (args.strides.length !== 2) { + throw new ValueError(`If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length ${args.strides.length}.`); + } + this.strides = args.strides; + } else { + this.strides = [args.strides, args.strides]; + } + assertPositiveInteger(this.poolSize, "poolSize"); + assertPositiveInteger(this.strides, "strides"); + this.padding = args.padding == null ? "valid" : args.padding; + this.dataFormat = args.dataFormat == null ? "channelsLast" : args.dataFormat; + checkDataFormat(this.dataFormat); + checkPaddingMode(this.padding); + this.inputSpec = [new InputSpec({ ndim: 4 })]; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + let rows = this.dataFormat === "channelsFirst" ? inputShape[2] : inputShape[1]; + let cols = this.dataFormat === "channelsFirst" ? inputShape[3] : inputShape[2]; + rows = convOutputLength(rows, this.poolSize[0], this.padding, this.strides[0]); + cols = convOutputLength(cols, this.poolSize[1], this.padding, this.strides[1]); + if (this.dataFormat === "channelsFirst") { + return [inputShape[0], inputShape[1], rows, cols]; + } else { + return [inputShape[0], rows, cols, inputShape[3]]; + } + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + return this.poolingFunction(getExactlyOneTensor(inputs), this.poolSize, this.strides, this.padding, this.dataFormat); + }); + } + getConfig() { + const config = { + poolSize: this.poolSize, + padding: this.padding, + strides: this.strides, + dataFormat: this.dataFormat + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + var MaxPooling2D = class extends Pooling2D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool2d(inputs, poolSize, strides, padding, dataFormat, "max"); + } + }; + MaxPooling2D.className = "MaxPooling2D"; + serialization_exports.registerClass(MaxPooling2D); + var AveragePooling2D = class extends Pooling2D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool2d(inputs, poolSize, strides, padding, dataFormat, "avg"); + } + }; + AveragePooling2D.className = "AveragePooling2D"; + serialization_exports.registerClass(AveragePooling2D); + var Pooling3D = class extends Layer { + constructor(args) { + if (args.poolSize == null) { + args.poolSize = [2, 2, 2]; + } + super(args); + this.poolSize = Array.isArray(args.poolSize) ? args.poolSize : [args.poolSize, args.poolSize, args.poolSize]; + if (args.strides == null) { + this.strides = this.poolSize; + } else if (Array.isArray(args.strides)) { + if (args.strides.length !== 3) { + throw new ValueError(`If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length ${args.strides.length}.`); + } + this.strides = args.strides; + } else { + this.strides = [args.strides, args.strides, args.strides]; + } + assertPositiveInteger(this.poolSize, "poolSize"); + assertPositiveInteger(this.strides, "strides"); + this.padding = args.padding == null ? "valid" : args.padding; + this.dataFormat = args.dataFormat == null ? "channelsLast" : args.dataFormat; + checkDataFormat(this.dataFormat); + checkPaddingMode(this.padding); + this.inputSpec = [new InputSpec({ ndim: 5 })]; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + let depths = this.dataFormat === "channelsFirst" ? inputShape[2] : inputShape[1]; + let rows = this.dataFormat === "channelsFirst" ? inputShape[3] : inputShape[2]; + let cols = this.dataFormat === "channelsFirst" ? inputShape[4] : inputShape[3]; + depths = convOutputLength(depths, this.poolSize[0], this.padding, this.strides[0]); + rows = convOutputLength(rows, this.poolSize[1], this.padding, this.strides[1]); + cols = convOutputLength(cols, this.poolSize[2], this.padding, this.strides[2]); + if (this.dataFormat === "channelsFirst") { + return [inputShape[0], inputShape[1], depths, rows, cols]; + } else { + return [inputShape[0], depths, rows, cols, inputShape[4]]; + } + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + return this.poolingFunction(getExactlyOneTensor(inputs), this.poolSize, this.strides, this.padding, this.dataFormat); + }); + } + getConfig() { + const config = { + poolSize: this.poolSize, + padding: this.padding, + strides: this.strides, + dataFormat: this.dataFormat + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + var MaxPooling3D = class extends Pooling3D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool3d(inputs, poolSize, strides, padding, dataFormat, "max"); + } + }; + MaxPooling3D.className = "MaxPooling3D"; + serialization_exports.registerClass(MaxPooling3D); + var AveragePooling3D = class extends Pooling3D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool3d(inputs, poolSize, strides, padding, dataFormat, "avg"); + } + }; + AveragePooling3D.className = "AveragePooling3D"; + serialization_exports.registerClass(AveragePooling3D); + var GlobalPooling1D = class extends Layer { + constructor(args) { + super(args); + this.inputSpec = [new InputSpec({ ndim: 3 })]; + } + computeOutputShape(inputShape) { + return [inputShape[0], inputShape[2]]; + } + call(inputs, kwargs) { + throw new NotImplementedError(); + } + }; + var GlobalAveragePooling1D = class extends GlobalPooling1D { + constructor(args) { + super(args || {}); + } + call(inputs, kwargs) { + return tidy(() => { + const input2 = getExactlyOneTensor(inputs); + return mean(input2, 1); + }); + } + }; + GlobalAveragePooling1D.className = "GlobalAveragePooling1D"; + serialization_exports.registerClass(GlobalAveragePooling1D); + var GlobalMaxPooling1D = class extends GlobalPooling1D { + constructor(args) { + super(args || {}); + } + call(inputs, kwargs) { + return tidy(() => { + const input2 = getExactlyOneTensor(inputs); + return max(input2, 1); + }); + } + }; + GlobalMaxPooling1D.className = "GlobalMaxPooling1D"; + serialization_exports.registerClass(GlobalMaxPooling1D); + var GlobalPooling2D = class extends Layer { + constructor(args) { + super(args); + this.dataFormat = args.dataFormat == null ? "channelsLast" : args.dataFormat; + checkDataFormat(this.dataFormat); + this.inputSpec = [new InputSpec({ ndim: 4 })]; + } + computeOutputShape(inputShape) { + inputShape = inputShape; + if (this.dataFormat === "channelsLast") { + return [inputShape[0], inputShape[3]]; + } else { + return [inputShape[0], inputShape[1]]; + } + } + call(inputs, kwargs) { + throw new NotImplementedError(); + } + getConfig() { + const config = { dataFormat: this.dataFormat }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + var GlobalAveragePooling2D = class extends GlobalPooling2D { + call(inputs, kwargs) { + return tidy(() => { + const input2 = getExactlyOneTensor(inputs); + if (this.dataFormat === "channelsLast") { + return mean(input2, [1, 2]); + } else { + return mean(input2, [2, 3]); + } + }); + } + }; + GlobalAveragePooling2D.className = "GlobalAveragePooling2D"; + serialization_exports.registerClass(GlobalAveragePooling2D); + var GlobalMaxPooling2D = class extends GlobalPooling2D { + call(inputs, kwargs) { + return tidy(() => { + const input2 = getExactlyOneTensor(inputs); + if (this.dataFormat === "channelsLast") { + return max(input2, [1, 2]); + } else { + return max(input2, [2, 3]); + } + }); + } + }; + GlobalMaxPooling2D.className = "GlobalMaxPooling2D"; + serialization_exports.registerClass(GlobalMaxPooling2D); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/wrappers.js + init_define_BUILD_VERSION(); + var Wrapper = class extends Layer { + constructor(args) { + super(args); + this.layer = args.layer; + } + build(inputShape) { + this.built = true; + } + get trainable() { + if (this.layer != null) { + return this.layer.trainable; + } else { + return false; + } + } + set trainable(value) { + if (this.layer != null) { + this.layer.trainable = value; + } + } + get trainableWeights() { + return this.layer.trainableWeights; + } + get nonTrainableWeights() { + return this.layer.nonTrainableWeights; + } + get updates() { + return this.layer._updates; + } + get losses() { + return this.layer.losses; + } + getWeights() { + return this.layer.getWeights(); + } + setWeights(weights) { + this.layer.setWeights(weights); + } + getConfig() { + const config = { + "layer": { + "className": this.layer.getClassName(), + "config": this.layer.getConfig() + } + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + setFastWeightInitDuringBuild(value) { + super.setFastWeightInitDuringBuild(value); + if (this.layer != null) { + this.layer.setFastWeightInitDuringBuild(value); + } + } + static fromConfig(cls, config, customObjects = {}) { + const layerConfig = config["layer"]; + const layer = deserialize(layerConfig, customObjects); + delete config["layer"]; + const newConfig = { layer }; + Object.assign(newConfig, config); + return new cls(newConfig); + } + }; + var TimeDistributed = class extends Wrapper { + constructor(args) { + super(args); + this.supportsMasking = true; + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (inputShape.length < 3) { + throw new ValueError(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(inputShape)}`); + } + this.inputSpec = [{ shape: inputShape }]; + const childInputShape = [inputShape[0]].concat(inputShape.slice(2)); + if (!this.layer.built) { + this.layer.build(childInputShape); + this.layer.built = true; + } + super.build(inputShape); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const childInputShape = [inputShape[0]].concat(inputShape.slice(2)); + const childOutputShape = this.layer.computeOutputShape(childInputShape); + const timesteps = inputShape[1]; + return [childOutputShape[0], timesteps].concat(childOutputShape.slice(1)); + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + const step5 = (inputs2, states) => { + const output = getExactlyOneTensor(this.layer.call(inputs2, kwargs)); + return [output, []]; + }; + const rnnOutputs = rnn(step5, inputs, [], false, null, null, false, true); + const y = rnnOutputs[1]; + return y; + }); + } + }; + TimeDistributed.className = "TimeDistributed"; + serialization_exports.registerClass(TimeDistributed); + function checkBidirectionalMergeMode(value) { + checkStringTypeUnionValue(VALID_BIDIRECTIONAL_MERGE_MODES, "BidirectionalMergeMode", value); + } + var DEFAULT_BIDIRECTIONAL_MERGE_MODE = "concat"; + var Bidirectional = class extends Wrapper { + constructor(args) { + super(args); + const layerConfig = args.layer.getConfig(); + const forwDict = {}; + forwDict["className"] = args.layer.getClassName(); + forwDict["config"] = layerConfig; + this.forwardLayer = deserialize(forwDict); + layerConfig["goBackwards"] = layerConfig["goBackwards"] === true ? false : true; + const backDict = {}; + backDict["className"] = args.layer.getClassName(); + backDict["config"] = layerConfig; + this.backwardLayer = deserialize(backDict); + this.forwardLayer.name = "forward_" + this.forwardLayer.name; + this.backwardLayer.name = "backward_" + this.backwardLayer.name; + this.mergeMode = args.mergeMode === void 0 ? DEFAULT_BIDIRECTIONAL_MERGE_MODE : args.mergeMode; + checkBidirectionalMergeMode(this.mergeMode); + if (args.weights) { + throw new NotImplementedError("weights support is not implemented for Bidirectional layer yet."); + } + this._stateful = args.layer.stateful; + this.returnSequences = args.layer.returnSequences; + this.returnState = args.layer.returnState; + this.supportsMasking = true; + this._trainable = true; + this.inputSpec = args.layer.inputSpec; + this.numConstants = null; + } + get trainable() { + return this._trainable; + } + set trainable(value) { + this._trainable = value; + if (this.forwardLayer != null) { + this.forwardLayer.trainable = value; + } + if (this.backwardLayer != null) { + this.backwardLayer.trainable = value; + } + } + getWeights() { + return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights()); + } + setWeights(weights) { + const numWeights = weights.length; + const numeightsOver2 = Math.floor(numWeights / 2); + this.forwardLayer.setWeights(weights.slice(0, numeightsOver2)); + this.backwardLayer.setWeights(weights.slice(numeightsOver2)); + } + computeOutputShape(inputShape) { + let layerShapes = this.forwardLayer.computeOutputShape(inputShape); + if (!(Array.isArray(layerShapes) && Array.isArray(layerShapes[0]))) { + layerShapes = [layerShapes]; + } + layerShapes = layerShapes; + let outputShape; + let outputShapes; + let stateShape; + if (this.returnState) { + stateShape = layerShapes.slice(1); + outputShape = layerShapes[0]; + } else { + outputShape = layerShapes[0]; + } + outputShape = outputShape; + if (this.mergeMode === "concat") { + outputShape[outputShape.length - 1] *= 2; + outputShapes = [outputShape]; + } else if (this.mergeMode == null) { + outputShapes = [outputShape, outputShape.slice()]; + } else { + outputShapes = [outputShape]; + } + if (this.returnState) { + if (this.mergeMode == null) { + return outputShapes.concat(stateShape).concat(stateShape.slice()); + } + return [outputShape].concat(stateShape).concat(stateShape.slice()); + } + return singletonOrArray(outputShapes); + } + apply(inputs, kwargs) { + let initialState = kwargs == null ? null : kwargs["initialState"]; + let constants = kwargs == null ? null : kwargs["constants"]; + if (kwargs == null) { + kwargs = {}; + } + const standardized = standardizeArgs(inputs, initialState, constants, this.numConstants); + inputs = standardized.inputs; + initialState = standardized.initialState; + constants = standardized.constants; + if (Array.isArray(inputs)) { + initialState = inputs.slice(1); + inputs = inputs[0]; + } + if ((initialState == null || initialState.length === 0) && constants == null) { + return super.apply(inputs, kwargs); + } + const additionalInputs = []; + const additionalSpecs = []; + if (initialState != null) { + const numStates = initialState.length; + if (numStates % 2 > 0) { + throw new ValueError("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs."); + } + kwargs["initialState"] = initialState; + additionalInputs.push(...initialState); + const stateSpecs = initialState.map((state) => new InputSpec({ shape: state.shape })); + this.forwardLayer.stateSpec = stateSpecs.slice(0, numStates / 2); + this.backwardLayer.stateSpec = stateSpecs.slice(numStates / 2); + additionalSpecs.push(...stateSpecs); + } + if (constants != null) { + throw new NotImplementedError("Support for constants in Bidirectional layers is not implemented yet."); + } + const isSymbolicTensor = additionalInputs[0] instanceof SymbolicTensor; + for (const tensor2 of additionalInputs) { + if (tensor2 instanceof SymbolicTensor !== isSymbolicTensor) { + throw new ValueError("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors"); + } + } + if (isSymbolicTensor) { + const fullInput = [inputs].concat(additionalInputs); + const fullInputSpec = this.inputSpec.concat(additionalSpecs); + const originalInputSpec = this.inputSpec; + this.inputSpec = fullInputSpec; + const output = super.apply(fullInput, kwargs); + this.inputSpec = originalInputSpec; + return output; + } else { + return super.apply(inputs, kwargs); + } + } + call(inputs, kwargs) { + return tidy(() => { + const initialState = kwargs["initialState"]; + let y; + let yRev; + if (initialState == null) { + y = this.forwardLayer.call(inputs, kwargs); + yRev = this.backwardLayer.call(inputs, kwargs); + } else { + const forwardState = initialState.slice(0, initialState.length / 2); + const backwardState = initialState.slice(initialState.length / 2); + y = this.forwardLayer.call(inputs, Object.assign(kwargs, { initialState: forwardState })); + yRev = this.backwardLayer.call(inputs, Object.assign(kwargs, { initialState: backwardState })); + } + let states; + if (this.returnState) { + if (Array.isArray(y)) { + states = y.slice(1).concat(yRev.slice(1)); + } else { + } + y = y[0]; + yRev = yRev[0]; + } + if (this.returnSequences) { + yRev = reverse(yRev, 1); + } + let output; + if (this.mergeMode === "concat") { + output = concatenate([y, yRev]); + } else if (this.mergeMode === "sum") { + output = add2(y, yRev); + } else if (this.mergeMode === "ave") { + output = mul(0.5, add2(y, yRev)); + } else if (this.mergeMode === "mul") { + output = mul(y, yRev); + } else if (this.mergeMode == null) { + output = [y, yRev]; + } + if (this.returnState) { + if (this.mergeMode == null) { + return output.concat(states); + } + return [output].concat(states); + } + return output; + }); + } + resetStates(states) { + this.forwardLayer.resetStates(); + this.backwardLayer.resetStates(); + } + build(inputShape) { + nameScope(this.forwardLayer.name, () => { + this.forwardLayer.build(inputShape); + }); + nameScope(this.backwardLayer.name, () => { + this.backwardLayer.build(inputShape); + }); + this.built = true; + } + computeMask(inputs, mask) { + if (Array.isArray(mask)) { + mask = mask[0]; + } + let outputMask; + if (this.returnSequences) { + if (this.mergeMode == null) { + outputMask = [mask, mask]; + } else { + outputMask = mask; + } + } else { + if (this.mergeMode == null) { + outputMask = [null, null]; + } else { + outputMask = null; + } + } + if (this.returnState) { + const states = this.forwardLayer.states; + const stateMask = states.map((state) => null); + if (Array.isArray(outputMask)) { + return outputMask.concat(stateMask).concat(stateMask); + } else { + return [outputMask].concat(stateMask).concat(stateMask); + } + } else { + return outputMask; + } + } + get trainableWeights() { + return this.forwardLayer.trainableWeights.concat(this.backwardLayer.trainableWeights); + } + get nonTrainableWeights() { + return this.forwardLayer.nonTrainableWeights.concat(this.backwardLayer.nonTrainableWeights); + } + setFastWeightInitDuringBuild(value) { + super.setFastWeightInitDuringBuild(value); + if (this.forwardLayer != null) { + this.forwardLayer.setFastWeightInitDuringBuild(value); + } + if (this.backwardLayer != null) { + this.backwardLayer.setFastWeightInitDuringBuild(value); + } + } + getConfig() { + const config = { + "mergeMode": this.mergeMode + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + static fromConfig(cls, config) { + const rnnLayer = deserialize(config["layer"]); + delete config["layer"]; + if (config["numConstants"] != null) { + throw new NotImplementedError(`Deserialization of a Bidirectional layer with numConstants present is not supported yet.`); + } + const newConfig = config; + newConfig["layer"] = rnnLayer; + return new cls(newConfig); + } + }; + Bidirectional.className = "Bidirectional"; + serialization_exports.registerClass(Bidirectional); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_metrics.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_models.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_regularizers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/callbacks.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/flags.js + init_define_BUILD_VERSION(); + var ENV4 = env(); + ENV4.registerFlag("KEEP_INTERMEDIATE_TENSORS", () => false, (debugValue) => { + if (debugValue) { + console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance."); + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/operation_mapper.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/data/compiled_api.js + init_define_BUILD_VERSION(); + var DataType; + (function(DataType2) { + DataType2[DataType2["DT_INVALID"] = 0] = "DT_INVALID"; + DataType2[DataType2["DT_FLOAT"] = 1] = "DT_FLOAT"; + DataType2[DataType2["DT_DOUBLE"] = 2] = "DT_DOUBLE"; + DataType2[DataType2["DT_INT32"] = 3] = "DT_INT32"; + DataType2[DataType2["DT_UINT8"] = 4] = "DT_UINT8"; + DataType2[DataType2["DT_INT16"] = 5] = "DT_INT16"; + DataType2[DataType2["DT_INT8"] = 6] = "DT_INT8"; + DataType2[DataType2["DT_STRING"] = 7] = "DT_STRING"; + DataType2[DataType2["DT_COMPLEX64"] = 8] = "DT_COMPLEX64"; + DataType2[DataType2["DT_INT64"] = 9] = "DT_INT64"; + DataType2[DataType2["DT_BOOL"] = 10] = "DT_BOOL"; + DataType2[DataType2["DT_QINT8"] = 11] = "DT_QINT8"; + DataType2[DataType2["DT_QUINT8"] = 12] = "DT_QUINT8"; + DataType2[DataType2["DT_QINT32"] = 13] = "DT_QINT32"; + DataType2[DataType2["DT_BFLOAT16"] = 14] = "DT_BFLOAT16"; + DataType2[DataType2["DT_QINT16"] = 15] = "DT_QINT16"; + DataType2[DataType2["DT_QUINT16"] = 16] = "DT_QUINT16"; + DataType2[DataType2["DT_UINT16"] = 17] = "DT_UINT16"; + DataType2[DataType2["DT_COMPLEX128"] = 18] = "DT_COMPLEX128"; + DataType2[DataType2["DT_HALF"] = 19] = "DT_HALF"; + DataType2[DataType2["DT_RESOURCE"] = 20] = "DT_RESOURCE"; + DataType2[DataType2["DT_VARIANT"] = 21] = "DT_VARIANT"; + DataType2[DataType2["DT_UINT32"] = 22] = "DT_UINT32"; + DataType2[DataType2["DT_UINT64"] = 23] = "DT_UINT64"; + DataType2[DataType2["DT_FLOAT_REF"] = 101] = "DT_FLOAT_REF"; + DataType2[DataType2["DT_DOUBLE_REF"] = 102] = "DT_DOUBLE_REF"; + DataType2[DataType2["DT_INT32_REF"] = 103] = "DT_INT32_REF"; + DataType2[DataType2["DT_UINT8_REF"] = 104] = "DT_UINT8_REF"; + DataType2[DataType2["DT_INT16_REF"] = 105] = "DT_INT16_REF"; + DataType2[DataType2["DT_INT8_REF"] = 106] = "DT_INT8_REF"; + DataType2[DataType2["DT_STRING_REF"] = 107] = "DT_STRING_REF"; + DataType2[DataType2["DT_COMPLEX64_REF"] = 108] = "DT_COMPLEX64_REF"; + DataType2[DataType2["DT_INT64_REF"] = 109] = "DT_INT64_REF"; + DataType2[DataType2["DT_BOOL_REF"] = 110] = "DT_BOOL_REF"; + DataType2[DataType2["DT_QINT8_REF"] = 111] = "DT_QINT8_REF"; + DataType2[DataType2["DT_QUINT8_REF"] = 112] = "DT_QUINT8_REF"; + DataType2[DataType2["DT_QINT32_REF"] = 113] = "DT_QINT32_REF"; + DataType2[DataType2["DT_BFLOAT16_REF"] = 114] = "DT_BFLOAT16_REF"; + DataType2[DataType2["DT_QINT16_REF"] = 115] = "DT_QINT16_REF"; + DataType2[DataType2["DT_QUINT16_REF"] = 116] = "DT_QUINT16_REF"; + DataType2[DataType2["DT_UINT16_REF"] = 117] = "DT_UINT16_REF"; + DataType2[DataType2["DT_COMPLEX128_REF"] = 118] = "DT_COMPLEX128_REF"; + DataType2[DataType2["DT_HALF_REF"] = 119] = "DT_HALF_REF"; + DataType2[DataType2["DT_RESOURCE_REF"] = 120] = "DT_RESOURCE_REF"; + DataType2[DataType2["DT_VARIANT_REF"] = 121] = "DT_VARIANT_REF"; + DataType2[DataType2["DT_UINT32_REF"] = 122] = "DT_UINT32_REF"; + DataType2[DataType2["DT_UINT64_REF"] = 123] = "DT_UINT64_REF"; + })(DataType || (DataType = {})); + var SaverDef; + (function(SaverDef2) { + let CheckpointFormatVersion; + (function(CheckpointFormatVersion2) { + CheckpointFormatVersion2[CheckpointFormatVersion2["LEGACY"] = 0] = "LEGACY"; + CheckpointFormatVersion2[CheckpointFormatVersion2["V1"] = 1] = "V1"; + CheckpointFormatVersion2[CheckpointFormatVersion2["V2"] = 2] = "V2"; + })(CheckpointFormatVersion = SaverDef2.CheckpointFormatVersion || (SaverDef2.CheckpointFormatVersion = {})); + })(SaverDef || (SaverDef = {})); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/custom_op/register.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/arithmetic.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/basic_math.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/control.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/convolution.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/creation.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/dynamic.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/evaluation.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/graph.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/hash_table.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/image.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/logical.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/matrices.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/normalization.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/reduction.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/slice_join.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/sparse.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/spectral.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/string.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/transformation.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/operation_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/custom_op/node_value_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/arithmetic_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/basic_math_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/control_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_array.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_list.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/convolution_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/creation_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/dynamic_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/evaluation_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/graph_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/hash_table_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/hash_table.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/image_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/logical_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/matrices_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/normalization_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/reduction_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/slice_join_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/sparse_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/spectral_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/string_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/transformation_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/execution_context.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/model_analysis.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/resource_manager.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/version.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/dataset.js + init_define_BUILD_VERSION(); + var seedrandom3 = __toESM(require_seedrandom2()); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/lazy_iterator.js + init_define_BUILD_VERSION(); + var seedrandom2 = __toESM(require_seedrandom2()); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/deep_clone.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/deep_map.js + init_define_BUILD_VERSION(); + function deepMap(input2, mapFn) { + return deepMapInternal(input2, mapFn); + } + function deepMapInternal(input2, mapFn, seen = /* @__PURE__ */ new Map(), containedIn = /* @__PURE__ */ new Set()) { + if (input2 == null) { + return null; + } + if (typeof Blob === "function" && input2 instanceof Blob) { + return input2.slice(); + } + if (containedIn.has(input2)) { + throw new Error("Circular references are not supported."); + } + if (seen.has(input2)) { + return seen.get(input2); + } + const result = mapFn(input2); + if (result.recurse && result.value !== null) { + throw new Error("A deep map function may not return both a value and recurse=true."); + } + if (!result.recurse) { + seen.set(input2, result.value); + return result.value; + } else if (isIterable2(input2)) { + const mappedIterable = Array.isArray(input2) ? [] : {}; + containedIn.add(input2); + for (const k in input2) { + const child = input2[k]; + const childResult = deepMapInternal(child, mapFn, seen, containedIn); + mappedIterable[k] = childResult; + } + containedIn.delete(input2); + if (input2.__proto__) { + mappedIterable.__proto__ = input2.__proto__; + } + return mappedIterable; + } else { + throw new Error(`Can't recurse into non-iterable type: ${input2}`); + } + } + function deepZip(inputs, zipFn = zipToList) { + return deepZipInternal(inputs, zipFn); + } + function deepZipInternal(inputs, zipFn, containedIn = /* @__PURE__ */ new Set()) { + const input2 = inputs[0]; + if (containedIn.has(input2)) { + throw new Error("Circular references are not supported."); + } + const result = zipFn(inputs); + if (result.recurse && result.value !== null) { + throw new Error("A deep zip function may not return both a value and recurse=true."); + } + if (!result.recurse) { + return result.value; + } else if (isIterable2(input2)) { + const mappedIterable = Array.isArray(input2) ? [] : {}; + containedIn.add(input2); + for (const k in input2) { + const children = inputs.map((x) => x[k]); + const childResult = deepZipInternal(children, zipFn, containedIn); + mappedIterable[k] = childResult; + } + containedIn.delete(input2); + return mappedIterable; + } else { + throw new Error(`Can't recurse into non-iterable type: ${input2}`); + } + } + function zipToList(x) { + if (x === null) { + return null; + } + if (isIterable2(x[0])) { + return { value: null, recurse: true }; + } else { + return { value: x, recurse: false }; + } + } + function isIterable2(obj) { + let isTextDecoder = false; + if (env().get("IS_BROWSER")) { + isTextDecoder = obj instanceof TextDecoder; + } else { + const { StringDecoder } = require_string_decoder(); + isTextDecoder = obj instanceof StringDecoder; + } + return obj != null && !ArrayBuffer.isView(obj) && (Array.isArray(obj) || typeof obj === "object" && !(obj instanceof Tensor) && !(obj instanceof Promise) && !isTextDecoder); + } + function canTensorify(obj) { + return obj == null || isPrimitive(obj) || Array.isArray(obj) || typeof obj === "object" && obj instanceof Tensor || util_exports.isTypedArray(obj); + } + function isPrimitive(value) { + return value === null || typeof value !== "object" && typeof value !== "function"; + } + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/deep_clone.js + function deepClone(container) { + return deepMap(container, cloneIfTensor); + } + function cloneIfTensor(item) { + if (item instanceof Tensor) { + return { value: item.clone(), recurse: false }; + } else if (isIterable2(item)) { + return { value: null, recurse: true }; + } else { + return { value: item, recurse: false }; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/growing_ring_buffer.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/ring_buffer.js + init_define_BUILD_VERSION(); + var RingBuffer = class { + constructor(capacity) { + this.capacity = capacity; + this.begin = 0; + this.end = 0; + if (capacity == null) { + throw new RangeError("Can't create a ring buffer of unknown capacity."); + } + if (capacity < 1) { + throw new RangeError("Can't create ring buffer of capacity < 1."); + } + this.data = new Array(capacity); + this.doubledCapacity = 2 * capacity; + } + wrap(index) { + while (index < 0) { + index += this.doubledCapacity; + } + return index % this.doubledCapacity; + } + get(index) { + if (index < 0) { + throw new RangeError("Can't get item at a negative index."); + } + return this.data[index % this.capacity]; + } + set(index, value) { + if (index < 0) { + throw new RangeError("Can't set item at a negative index."); + } + this.data[index % this.capacity] = value; + } + length() { + let length = this.end - this.begin; + if (length < 0) { + length = this.doubledCapacity + length; + } + return length; + } + isFull() { + return this.length() === this.capacity; + } + isEmpty() { + return this.length() === 0; + } + push(value) { + if (this.isFull()) { + throw new RangeError("Ring buffer is full."); + } + this.set(this.end, value); + this.end = this.wrap(this.end + 1); + } + pushAll(values) { + for (const value of values) { + this.push(value); + } + } + pop() { + if (this.isEmpty()) { + throw new RangeError("Ring buffer is empty."); + } + this.end = this.wrap(this.end - 1); + const result = this.get(this.end); + this.set(this.end, void 0); + return result; + } + unshift(value) { + if (this.isFull()) { + throw new RangeError("Ring buffer is full."); + } + this.begin = this.wrap(this.begin - 1); + this.set(this.begin, value); + } + shift() { + if (this.isEmpty()) { + throw new RangeError("Ring buffer is empty."); + } + const result = this.get(this.begin); + this.set(this.begin, void 0); + this.begin = this.wrap(this.begin + 1); + return result; + } + shuffleExcise(relativeIndex) { + if (this.isEmpty()) { + throw new RangeError("Ring buffer is empty."); + } + const index = this.wrap(this.begin + relativeIndex); + const result = this.get(index); + this.set(index, this.pop()); + return result; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/growing_ring_buffer.js + var GrowingRingBuffer = class extends RingBuffer { + constructor() { + super(GrowingRingBuffer.INITIAL_CAPACITY); + } + isFull() { + return false; + } + push(value) { + if (super.isFull()) { + this.expand(); + } + super.push(value); + } + unshift(value) { + if (super.isFull()) { + this.expand(); + } + super.unshift(value); + } + expand() { + const newCapacity = this.capacity * 2; + const newData = new Array(newCapacity); + const len = this.length(); + for (let i = 0; i < len; i++) { + newData[i] = this.get(this.wrap(this.begin + i)); + } + this.data = newData; + this.capacity = newCapacity; + this.doubledCapacity = 2 * this.capacity; + this.begin = 0; + this.end = len; + } + }; + GrowingRingBuffer.INITIAL_CAPACITY = 32; + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/lazy_iterator.js + function iteratorFromItems(items) { + return new ArrayIterator(items); + } + function iteratorFromFunction(func2) { + return new FunctionCallIterator(func2); + } + function iteratorFromConcatenated(baseIterators, baseErrorHandler) { + return new ChainedIterator(baseIterators, baseErrorHandler); + } + var LazyIterator = class { + async toArray() { + const result = []; + let x = await this.next(); + while (!x.done) { + result.push(x.value); + x = await this.next(); + } + return result; + } + async toArrayForTest() { + const stream = this.prefetch(100); + const result = []; + let x = await stream.next(); + while (!x.done) { + result.push(x.value); + x = await stream.next(); + } + return result; + } + async resolveFully() { + let x = await this.next(); + while (!x.done) { + x = await this.next(); + } + } + async resolveWhile(predicate) { + let x = await this.next(); + let shouldContinue = predicate(x.value); + while (!x.done && shouldContinue) { + x = await this.next(); + shouldContinue = predicate(x.value); + } + } + handleErrors(handler) { + return new ErrorHandlingLazyIterator(this, handler); + } + filter(predicate) { + return new FilterIterator(this, predicate); + } + map(transform5) { + return new MapIterator(this, transform5); + } + mapAsync(transform5) { + return new AsyncMapIterator(this, transform5); + } + serialMapAsync(transform5) { + return new AsyncMapIterator(this, transform5).serial(); + } + flatmap(transform5) { + return new FlatmapIterator(this, transform5); + } + async forEachAsync(f) { + return this.map(f).resolveFully(); + } + async serialForEach(f) { + return this.serialMapAsync(f).resolveWhile((x) => x === true); + } + rowMajorBatch(batchSize, smallLastBatch = true) { + return new RowMajorBatchIterator(this, batchSize, smallLastBatch); + } + columnMajorBatch(batchSize, smallLastBatch = true, zipFn = zipToList) { + const rowBatches = this.rowMajorBatch(batchSize, smallLastBatch); + return rowBatches.map((x) => deepZip(x, zipFn)); + } + concatenate(iterator, baseErrorHandler) { + return new ChainedIterator(iteratorFromItems([this, iterator]), baseErrorHandler); + } + take(count2) { + if (count2 < 0 || count2 == null) { + return this; + } + return new TakeIterator(this, count2); + } + skip(count2) { + if (count2 < 0 || count2 == null) { + return this; + } + return new SkipIterator(this, count2); + } + prefetch(bufferSize) { + return new PrefetchIterator(this, bufferSize); + } + shuffle(windowSize, seed) { + return new ShuffleIterator(this, windowSize, seed); + } + serial() { + return new SerialIterator(this); + } + }; + var ArrayIterator = class extends LazyIterator { + constructor(items) { + super(); + this.items = items; + this.trav = 0; + } + summary() { + return `Array of ${this.items.length} items`; + } + async next() { + if (this.trav >= this.items.length) { + return { value: null, done: true }; + } + const item = this.items[this.trav]; + this.trav++; + return { value: deepClone(item), done: false }; + } + }; + var FunctionCallIterator = class extends LazyIterator { + constructor(nextFn) { + super(); + this.nextFn = nextFn; + } + summary() { + return `Function call`; + } + async next() { + try { + return this.nextFn(); + } catch (e) { + e.message = `Error thrown while iterating through a dataset: ${e.message}`; + throw e; + } + } + }; + var SerialIterator = class extends LazyIterator { + constructor(upstream) { + super(); + this.upstream = upstream; + this.lastRead = Promise.resolve({ value: null, done: false }); + } + summary() { + return `${this.upstream.summary()} -> Serial`; + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + return this.upstream.next(); + } + }; + var SkipIterator = class extends LazyIterator { + constructor(upstream, maxCount) { + super(); + this.upstream = upstream; + this.maxCount = maxCount; + this.count = 0; + this.lastRead = Promise.resolve({ value: null, done: false }); + } + summary() { + return `${this.upstream.summary()} -> Skip`; + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + while (this.count++ < this.maxCount) { + const skipped = await this.upstream.next(); + if (skipped.done) { + return skipped; + } + dispose(skipped.value); + } + return this.upstream.next(); + } + }; + var TakeIterator = class extends LazyIterator { + constructor(upstream, maxCount) { + super(); + this.upstream = upstream; + this.maxCount = maxCount; + this.count = 0; + } + summary() { + return `${this.upstream.summary()} -> Take`; + } + async next() { + if (this.count++ >= this.maxCount) { + return { value: null, done: true }; + } + return this.upstream.next(); + } + }; + var RowMajorBatchIterator = class extends LazyIterator { + constructor(upstream, batchSize, enableSmallLastBatch = true) { + super(); + this.upstream = upstream; + this.batchSize = batchSize; + this.enableSmallLastBatch = enableSmallLastBatch; + this.lastRead = Promise.resolve({ value: null, done: false }); + } + summary() { + return `${this.upstream.summary()} -> RowMajorBatch`; + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + const batch = []; + while (batch.length < this.batchSize) { + const item = await this.upstream.next(); + if (item.done) { + if (this.enableSmallLastBatch && batch.length > 0) { + return { value: batch, done: false }; + } + return { value: null, done: true }; + } + batch.push(item.value); + } + return { value: batch, done: false }; + } + }; + var FilterIterator = class extends LazyIterator { + constructor(upstream, predicate) { + super(); + this.upstream = upstream; + this.predicate = predicate; + this.lastRead = Promise.resolve({ value: null, done: false }); + } + summary() { + return `${this.upstream.summary()} -> Filter`; + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + while (true) { + const item = await this.upstream.next(); + if (item.done || this.predicate(item.value)) { + return item; + } + dispose(item.value); + } + } + }; + var MapIterator = class extends LazyIterator { + constructor(upstream, transform5) { + super(); + this.upstream = upstream; + this.transform = transform5; + } + summary() { + return `${this.upstream.summary()} -> Map`; + } + async next() { + const item = await this.upstream.next(); + if (item.done) { + return { value: null, done: true }; + } + const inputTensors = tensor_util_exports.getTensorsInContainer(item.value); + const mapped = this.transform(item.value); + const outputTensors = tensor_util_exports.getTensorsInContainer(mapped); + for (const t of inputTensors) { + if (!tensor_util_exports.isTensorInList(t, outputTensors)) { + t.dispose(); + } + } + return { value: mapped, done: false }; + } + }; + var ErrorHandlingLazyIterator = class extends LazyIterator { + constructor(upstream, handler) { + super(); + this.upstream = upstream; + this.handler = handler; + this.count = 0; + this.lastRead = Promise.resolve({ value: null, done: false }); + } + summary() { + return `${this.upstream.summary()} -> handleErrors`; + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + while (true) { + try { + return await this.upstream.next(); + } catch (e) { + if (!this.handler(e)) { + return { value: null, done: true }; + } + } + } + } + }; + var AsyncMapIterator = class extends LazyIterator { + constructor(upstream, transform5) { + super(); + this.upstream = upstream; + this.transform = transform5; + } + summary() { + return `${this.upstream.summary()} -> AsyncMap`; + } + async next() { + const item = await this.upstream.next(); + if (item.done) { + return { value: null, done: true }; + } + const inputTensors = tensor_util_exports.getTensorsInContainer(item.value); + const mapped = await this.transform(item.value); + const outputTensors = tensor_util_exports.getTensorsInContainer(mapped); + for (const t of inputTensors) { + if (!tensor_util_exports.isTensorInList(t, outputTensors)) { + t.dispose(); + } + } + return { value: mapped, done: false }; + } + }; + var OneToManyIterator = class extends LazyIterator { + constructor() { + super(); + this.outputQueue = new GrowingRingBuffer(); + this.lastRead = Promise.resolve({ value: null, done: false }); + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + while (this.outputQueue.length() === 0) { + if (!await this.pump()) { + return { value: null, done: true }; + } + } + return { value: this.outputQueue.shift(), done: false }; + } + }; + var FlatmapIterator = class extends OneToManyIterator { + constructor(upstream, transform5) { + super(); + this.upstream = upstream; + this.transform = transform5; + } + summary() { + return `${this.upstream.summary()} -> Flatmap`; + } + async pump() { + const item = await this.upstream.next(); + if (item.done) { + return false; + } + const inputTensors = tensor_util_exports.getTensorsInContainer(item.value); + const mappedArray = this.transform(item.value); + const outputTensors = tensor_util_exports.getTensorsInContainer(mappedArray); + this.outputQueue.pushAll(mappedArray); + for (const t of inputTensors) { + if (!tensor_util_exports.isTensorInList(t, outputTensors)) { + t.dispose(); + } + } + return true; + } + }; + var ChainedIterator = class extends LazyIterator { + constructor(iterators, baseErrorHandler) { + super(); + this.baseErrorHandler = baseErrorHandler; + this.lastRead = null; + this.iterator = null; + this.moreIterators = iterators; + } + summary() { + const upstreamSummaries = "TODO: fill in upstream of chained summaries"; + return `${upstreamSummaries} -> Chained`; + } + async next() { + this.lastRead = this.readFromChain(this.lastRead); + return this.lastRead; + } + async readFromChain(lastRead) { + await lastRead; + if (this.iterator == null) { + const iteratorResult = await this.moreIterators.next(); + if (iteratorResult.done) { + return { value: null, done: true }; + } + this.iterator = iteratorResult.value; + if (this.baseErrorHandler != null) { + this.iterator = this.iterator.handleErrors(this.baseErrorHandler); + } + } + const itemResult = await this.iterator.next(); + if (itemResult.done) { + this.iterator = null; + return this.readFromChain(lastRead); + } + return itemResult; + } + }; + var ZipMismatchMode; + (function(ZipMismatchMode2) { + ZipMismatchMode2[ZipMismatchMode2["FAIL"] = 0] = "FAIL"; + ZipMismatchMode2[ZipMismatchMode2["SHORTEST"] = 1] = "SHORTEST"; + ZipMismatchMode2[ZipMismatchMode2["LONGEST"] = 2] = "LONGEST"; + })(ZipMismatchMode || (ZipMismatchMode = {})); + var PrefetchIterator = class extends LazyIterator { + constructor(upstream, bufferSize) { + super(); + this.upstream = upstream; + this.bufferSize = bufferSize; + this.buffer = new RingBuffer(bufferSize); + } + summary() { + return `${this.upstream.summary()} -> Prefetch`; + } + refill() { + while (!this.buffer.isFull()) { + const v = this.upstream.next(); + this.buffer.push(v); + } + } + next() { + this.refill(); + return this.buffer.shift(); + } + }; + var ShuffleIterator = class extends PrefetchIterator { + constructor(upstream, windowSize, seed) { + super(upstream, windowSize); + this.upstream = upstream; + this.windowSize = windowSize; + this.upstreamExhausted = false; + this.random = seedrandom2.alea(seed || util_exports.now().toString()); + this.lastRead = Promise.resolve({ value: null, done: false }); + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + randomInt(max6) { + return Math.floor(this.random() * max6); + } + chooseIndex() { + return this.randomInt(this.buffer.length()); + } + async serialNext() { + if (!this.upstreamExhausted) { + this.refill(); + } + while (!this.buffer.isEmpty()) { + const chosenIndex = this.chooseIndex(); + const result = await this.buffer.shuffleExcise(chosenIndex); + if (result.done) { + this.upstreamExhausted = true; + } else { + this.refill(); + return result; + } + } + return { value: null, done: true }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/dataset.js + var Dataset = class { + constructor() { + this.size = null; + } + batch(batchSize, smallLastBatch = true) { + const base = this; + util_exports.assert(batchSize > 0, () => `batchSize needs to be positive, but it is + ${batchSize}`); + let size; + if (this.size === Infinity || this.size == null) { + size = this.size; + } else if (smallLastBatch) { + size = Math.ceil(this.size / batchSize); + } else { + size = Math.floor(this.size / batchSize); + } + return datasetFromIteratorFn(async () => { + return (await base.iterator()).columnMajorBatch(batchSize, smallLastBatch, deepBatchConcat); + }, size); + } + concatenate(dataset) { + const base = this; + let size; + if (this.size === Infinity || dataset.size === Infinity) { + size = Infinity; + } else if (this.size != null && dataset.size != null) { + size = this.size + dataset.size; + } else { + size = null; + } + return datasetFromIteratorFn(async () => (await base.iterator()).concatenate(await dataset.iterator()), size); + } + filter(predicate) { + const base = this; + let size; + if (this.size === Infinity) { + size = Infinity; + } else { + size = null; + } + return datasetFromIteratorFn(async () => { + return (await base.iterator()).filter((x) => tidy(() => predicate(x))); + }, size); + } + async forEachAsync(f) { + return (await this.iterator()).forEachAsync(f); + } + map(transform5) { + const base = this; + return datasetFromIteratorFn(async () => { + return (await base.iterator()).map((x) => tidy(() => transform5(x))); + }, this.size); + } + mapAsync(transform5) { + const base = this; + return datasetFromIteratorFn(async () => { + return (await base.iterator()).mapAsync(transform5); + }, this.size); + } + prefetch(bufferSize) { + if (bufferSize == null) { + throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified."); + } + const base = this; + return datasetFromIteratorFn(async () => (await base.iterator()).prefetch(bufferSize), this.size); + } + repeat(count2) { + const base = this; + let size; + if (this.size != null && count2 > 0) { + size = this.size * count2; + } else if (count2 === 0) { + size = 0; + } else if (this.size != null && (count2 === void 0 || count2 < 0)) { + size = Infinity; + } else { + size = null; + } + return datasetFromIteratorFn(async () => { + const iteratorIterator = iteratorFromFunction(async () => ({ value: await base.iterator(), done: false })); + return iteratorFromConcatenated(iteratorIterator.take(count2)); + }, size); + } + skip(count2) { + const base = this; + let size; + if (this.size != null && count2 >= 0 && this.size >= count2) { + size = this.size - count2; + } else if (this.size != null && (this.size < count2 || count2 === void 0 || count2 < 0)) { + size = 0; + } else { + size = null; + } + return datasetFromIteratorFn(async () => (await base.iterator()).skip(count2), size); + } + shuffle(bufferSize, seed, reshuffleEachIteration = true) { + if (bufferSize == null || bufferSize < 0) { + if (this.size == null) { + throw new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."); + } else { + throw new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`); + } + } + const base = this; + const random = seedrandom3.alea(seed || util_exports.now().toString()); + return datasetFromIteratorFn(async () => { + let seed2 = random.int32(); + if (reshuffleEachIteration) { + seed2 += random.int32(); + } + return (await base.iterator()).shuffle(bufferSize, seed2.toString()); + }, this.size); + } + take(count2) { + const base = this; + let size; + if (this.size != null && this.size > count2) { + size = count2; + } else if (this.size != null && this.size <= count2) { + size = this.size; + } else { + size = null; + } + return datasetFromIteratorFn(async () => (await base.iterator()).take(count2), size); + } + async toArray() { + if (this.size === Infinity) { + throw new Error("Can not convert infinite data stream to array."); + } + return (await this.iterator()).toArray(); + } + async toArrayForTest() { + if (this.size === Infinity) { + throw new Error("Can not convert infinite data stream to array."); + } + return (await this.iterator()).toArrayForTest(); + } + }; + Dataset.MAX_BUFFER_SIZE = 1e4; + function datasetFromIteratorFn(iteratorFn, size = null) { + return new class extends Dataset { + constructor() { + super(...arguments); + this.size = size; + } + async iterator() { + return iteratorFn(); + } + }(); + } + function deepBatchConcat(rows) { + if (rows === null) { + return null; + } + const exampleRow = rows[0]; + if (canTensorify(exampleRow)) { + const value = batchConcat(rows); + return { value, recurse: false }; + } + return { value: null, recurse: true }; + } + function batchConcat(arrays) { + if (arrays.length === 0) { + throw new Error("Can't make a batch of zero elements."); + } + if (arrays[0] instanceof Tensor) { + return stack(arrays); + } else { + return tensor(arrays); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/datasets/csv_dataset.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/datasets/text_line_dataset.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/datasets/csv_dataset.js + var STATE_OUT = Symbol("out"); + var STATE_FIELD = Symbol("field"); + var STATE_QUOTE = Symbol("quote"); + var STATE_QUOTE_AFTER_QUOTE = Symbol("quoteafterquote"); + var STATE_WITHIN_QUOTE_IN_QUOTE = Symbol("quoteinquote"); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/readers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/microphone_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/webcam_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/sources/url_data_source.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/datasource.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/url_chunk_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/file_chunk_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/byte_chunk_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/string_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/source_util.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/sources/file_data_source.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/version.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/base.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/backend_cpu.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/cpu_util.js + init_define_BUILD_VERSION(); + function assertNotComplex(tensor2, opName) { + if (!Array.isArray(tensor2)) { + tensor2 = [tensor2]; + } + tensor2.forEach((t) => { + if (t != null) { + util_exports.assert(t.dtype !== "complex64", () => `${opName} does not support complex64 tensors in the CPU backend.`); + } + }); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/backend_cpu.js + var whereImpl2 = kernel_impls_exports.whereImpl; + var MathBackendCPU = class extends KernelBackend { + constructor() { + super(); + this.blockSize = 48; + this.firstUse = true; + this.data = new DataStorage(this, engine()); + } + nextDataId() { + return MathBackendCPU.nextDataId++; + } + write(values, shape, dtype) { + if (this.firstUse) { + this.firstUse = false; + if (env().get("IS_NODE")) { + backend_util_exports.warn("\n============================\nHi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. \n============================"); + } + } + const dataId = { id: this.nextDataId() }; + this.data.set(dataId, { values, dtype, refCount: 1 }); + return dataId; + } + makeTensorInfo(shape, dtype, values) { + let outId; + if (dtype === "string" && values != null && values.length > 0 && util_exports.isString(values[0])) { + const encodedValues = values.map((d) => util_exports.encodeString(d)); + outId = this.write(encodedValues, shape, dtype); + } else { + outId = this.write(values, shape, dtype); + } + return { dataId: outId, shape, dtype }; + } + refCount(dataId) { + if (this.data.has(dataId)) { + const tensorData = this.data.get(dataId); + return tensorData.refCount; + } + return 0; + } + incRef(dataId) { + const tensorData = this.data.get(dataId); + tensorData.refCount++; + } + decRef(dataId) { + if (this.data.has(dataId)) { + const tensorData = this.data.get(dataId); + tensorData.refCount--; + } + } + move(dataId, values, shape, dtype, refCount) { + this.data.set(dataId, { values, dtype, refCount }); + } + numDataIds() { + return this.data.numDataIds(); + } + async read(dataId) { + return this.readSync(dataId); + } + readSync(dataId) { + const { dtype, complexTensorInfos } = this.data.get(dataId); + if (dtype === "complex64") { + const realValues = this.readSync(complexTensorInfos.real.dataId); + const imagValues = this.readSync(complexTensorInfos.imag.dataId); + return backend_util_exports.mergeRealAndImagArrays(realValues, imagValues); + } + return this.data.get(dataId).values; + } + bufferSync(t) { + const data = this.readSync(t.dataId); + if (t.dtype === "string") { + try { + const strings = data.map((d) => util_exports.decodeString(d)); + return buffer(t.shape, t.dtype, strings); + } catch (_a) { + throw new Error("Failed to decode encoded string bytes into utf-8"); + } + } + return buffer(t.shape, t.dtype, data); + } + makeOutput(values, shape, dtype) { + return engine().makeTensorFromTensorInfo(this.makeTensorInfo(shape, dtype, values), this); + } + disposeData(dataId, force = false) { + if (this.data.has(dataId)) { + this.data.get(dataId).refCount--; + if (!force && this.data.get(dataId).refCount > 0) { + return false; + } + const { complexTensorInfos } = this.data.get(dataId); + if (complexTensorInfos != null) { + this.disposeData(complexTensorInfos.real.dataId, true); + this.disposeData(complexTensorInfos.imag.dataId, true); + } + this.data.delete(dataId); + } + return true; + } + disposeIntermediateTensorInfo(tensorInfo) { + this.disposeData(tensorInfo.dataId); + } + async time(f) { + const start = util_exports.now(); + f(); + const kernelMs = util_exports.now() - start; + return { kernelMs }; + } + memory() { + return { + unreliable: true, + reasons: ["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."] + }; + } + where(condition) { + assertNotComplex([condition], "where"); + const condVals = this.readSync(condition.dataId); + return whereImpl2(condition.shape, condVals); + } + dispose() { + } + floatPrecision() { + return 32; + } + epsilon() { + return super.epsilon(); + } + }; + MathBackendCPU.nextDataId = 0; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/shared.js + var shared_exports = {}; + __export(shared_exports, { + addImpl: () => addImpl, + bincountImpl: () => bincountImpl, + bincountReduceImpl: () => bincountReduceImpl, + ceilImpl: () => ceilImpl, + concatImpl: () => concatImpl, + equalImpl: () => equalImpl, + expImpl: () => expImpl, + expm1Impl: () => expm1Impl, + floorImpl: () => floorImpl, + gatherNdImpl: () => gatherNdImpl, + gatherV2Impl: () => gatherV2Impl, + greaterEqualImpl: () => greaterEqualImpl, + greaterImpl: () => greaterImpl, + lessEqualImpl: () => lessEqualImpl, + lessImpl: () => lessImpl, + linSpaceImpl: () => linSpaceImpl, + logImpl: () => logImpl, + maxImpl: () => maxImpl, + maximumImpl: () => maximumImpl, + minimumImpl: () => minimumImpl, + multiplyImpl: () => multiplyImpl, + negImpl: () => negImpl, + notEqualImpl: () => notEqualImpl, + prodImpl: () => prodImpl, + rangeImpl: () => rangeImpl, + rsqrtImpl: () => rsqrtImpl, + scatterImpl: () => scatterImpl, + sigmoidImpl: () => sigmoidImpl, + simpleAbsImpl: () => simpleAbsImpl, + sliceImpl: () => sliceImpl, + sparseFillEmptyRowsImpl: () => sparseFillEmptyRowsImpl, + sparseReshapeImpl: () => sparseReshapeImpl, + sparseSegmentReductionImpl: () => sparseSegmentReductionImpl, + sqrtImpl: () => sqrtImpl, + squaredDifferenceImpl: () => squaredDifferenceImpl, + stridedSliceImpl: () => stridedSliceImpl, + stringNGramsImpl: () => stringNGramsImpl, + stringSplitImpl: () => stringSplitImpl, + stringToHashBucketFastImpl: () => stringToHashBucketFastImpl, + subImpl: () => subImpl, + tileImpl: () => tileImpl, + topKImpl: () => topKImpl, + transposeImpl: () => transposeImpl, + uniqueImpl: () => uniqueImpl + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Abs.js + init_define_BUILD_VERSION(); + function simpleAbsImpl(vals) { + const resultValues = new Float32Array(vals.length); + for (let i = 0; i < vals.length; ++i) { + resultValues[i] = Math.abs(vals[i]); + } + return resultValues; + } + var abs2 = (args) => { + const { x } = args.inputs; + const cpuBackend = args.backend; + assertNotComplex(x, "abs"); + let resultValues = new Float32Array(util_exports.sizeFromShape(x.shape)); + const values = cpuBackend.data.get(x.dataId).values; + resultValues = simpleAbsImpl(values); + return cpuBackend.makeOutput(resultValues, x.shape, x.dtype); + }; + var absConfig = { + kernelName: Abs, + backendName: "cpu", + kernelFunc: abs2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Add.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_impl.js + init_define_BUILD_VERSION(); + function createSimpleBinaryKernelImpl(op2) { + return (aShape, bShape, aVals, bVals, dtype) => { + const newShape = backend_util_exports.assertAndGetBroadcastShape(aShape, bShape); + const resultRank = newShape.length; + const resultStrides = util_exports.computeStrides(newShape); + const resultSize = util_exports.sizeFromShape(newShape); + const result = util_exports.getTypedArrayFromDType(dtype, resultSize); + const aRank = aShape.length; + const bRank = bShape.length; + const aStrides = util_exports.computeStrides(aShape); + const bStrides = util_exports.computeStrides(bShape); + const aBroadcastDims = backend_util_exports.getBroadcastDims(aShape, newShape); + const bBroadcastDims = backend_util_exports.getBroadcastDims(bShape, newShape); + if (aBroadcastDims.length + bBroadcastDims.length === 0) { + for (let i = 0; i < result.length; ++i) { + result[i] = op2(aVals[i % aVals.length], bVals[i % bVals.length]); + } + } else { + for (let i = 0; i < result.length; ++i) { + const loc = util_exports.indexToLoc(i, resultRank, resultStrides); + const aLoc = loc.slice(-aRank); + aBroadcastDims.forEach((d) => aLoc[d] = 0); + const aIndex = util_exports.locToIndex(aLoc, aRank, aStrides); + const bLoc = loc.slice(-bRank); + bBroadcastDims.forEach((d) => bLoc[d] = 0); + const bIndex = util_exports.locToIndex(bLoc, bRank, bStrides); + result[i] = op2(aVals[aIndex], bVals[bIndex]); + } + } + return [result, newShape]; + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cast.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/zeros_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Complex.js + init_define_BUILD_VERSION(); + function complex2(args) { + const { inputs, backend: backend2 } = args; + const { real: real4, imag: imag4 } = inputs; + const realVals = backend2.data.get(real4.dataId).values; + const imagVals = backend2.data.get(imag4.dataId).values; + const complexInfo = backend2.makeTensorInfo(real4.shape, "complex64"); + const complex4 = backend2.data.get(complexInfo.dataId); + complex4.complexTensorInfos = { + real: backend2.makeTensorInfo(real4.shape, "float32", realVals), + imag: backend2.makeTensorInfo(imag4.shape, "float32", imagVals) + }; + return complexInfo; + } + var complexConfig = { + kernelName: Complex, + backendName: "cpu", + kernelFunc: complex2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/zeros_impl.js + function zeros2(backend2, shape, dtype = "float32") { + if (dtype === "complex64") { + const real4 = zeros2(backend2, shape, "float32"); + const imag4 = zeros2(backend2, shape, "float32"); + return complex2({ inputs: { real: real4, imag: imag4 }, backend: backend2 }); + } + const values = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(shape), dtype); + return backend2.makeTensorInfo(shape, dtype, values); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Identity.js + init_define_BUILD_VERSION(); + function identity(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + backend2.incRef(x.dataId); + return { dataId: x.dataId, shape: x.shape, dtype: x.dtype }; + } + var identityConfig = { + kernelName: Identity, + backendName: "cpu", + kernelFunc: identity + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Real.js + init_define_BUILD_VERSION(); + function real2(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const real4 = backend2.data.get(input2.dataId).complexTensorInfos.real; + const realVal = backend2.data.get(real4.dataId).values; + return backend2.makeTensorInfo(real4.shape, real4.dtype, realVal); + } + var realConfig = { + kernelName: Real, + backendName: "cpu", + kernelFunc: real2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cast.js + function cast3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { dtype } = attrs; + if (dtype === "complex64") { + if (x.dtype === "complex64") { + return identity({ inputs: { x }, backend: backend2 }); + } + const zerosTensorInfo = zeros2(backend2, x.shape, x.dtype); + const floatX = cast3({ inputs: { x }, backend: backend2, attrs: { dtype: "float32" } }); + const result = complex2({ inputs: { real: floatX, imag: zerosTensorInfo }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(zerosTensorInfo); + backend2.disposeIntermediateTensorInfo(floatX); + return result; + } + if (x.dtype === "complex64") { + const realPart = real2({ inputs: { input: x }, backend: backend2 }); + const result = cast3({ inputs: { x: realPart }, backend: backend2, attrs: { dtype } }); + backend2.disposeIntermediateTensorInfo(realPart); + return result; + } + if (!util_exports.hasEncodingLoss(x.dtype, dtype)) { + const result = identity({ inputs: { x }, backend: backend2 }); + return { dataId: result.dataId, shape: result.shape, dtype }; + } + if (dtype === "int32") { + const values = backend2.data.get(x.dataId).values; + const resultValues = Int32Array.from(values); + return backend2.makeTensorInfo(x.shape, "int32", resultValues); + } + if (dtype === "bool") { + const xVals = backend2.data.get(x.dataId).values; + const zero = util_exports.toTypedArray([0], x.dtype); + const [resultData, resultShape] = createSimpleBinaryKernelImpl((a, b) => a !== b ? 1 : 0)(x.shape, [], xVals, zero, "bool"); + return backend2.makeTensorInfo(resultShape, "bool", resultData); + } + throw new Error(`Error in Cast: failed to cast ${x.dtype} to ${dtype}`); + } + var castConfig = { + kernelName: Cast, + backendName: "cpu", + kernelFunc: cast3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_utils.js + function binaryKernelFunc(name, simpleImpl, complexImpl, dtype) { + if (complexImpl == null) { + return ({ inputs, backend: backend2 }) => { + const { a, b } = inputs; + const cpuBackend = backend2; + assertNotComplex([a, b], name); + const aVals = cpuBackend.data.get(a.dataId).values; + const bVals = cpuBackend.data.get(b.dataId).values; + const decodedAVals = a.dtype === "string" ? backend_util_exports.fromUint8ToStringArray(aVals) : aVals; + const decodedBVals = a.dtype === "string" ? backend_util_exports.fromUint8ToStringArray(bVals) : bVals; + const $dtype = dtype || a.dtype; + const [resultData, resultShape] = simpleImpl(a.shape, b.shape, decodedAVals, decodedBVals, $dtype); + return cpuBackend.makeTensorInfo(resultShape, $dtype, resultData); + }; + } + return ({ inputs, backend: backend2 }) => { + const { a, b } = inputs; + const cpuBackend = backend2; + if (a.dtype === "complex64" || b.dtype === "complex64") { + const $aComplex = cast3({ inputs: { x: a }, backend: cpuBackend, attrs: { dtype: "complex64" } }); + const $aComplexVals = cpuBackend.data.get($aComplex.dataId); + const aReal = $aComplexVals.complexTensorInfos.real; + const aImag = $aComplexVals.complexTensorInfos.imag; + const aRealVals = cpuBackend.data.get(aReal.dataId).values; + const aImagVals = cpuBackend.data.get(aImag.dataId).values; + const $bComplex = cast3({ inputs: { x: b }, backend: cpuBackend, attrs: { dtype: "complex64" } }); + const $bComplexVals = cpuBackend.data.get($bComplex.dataId); + const bReal = $bComplexVals.complexTensorInfos.real; + const bImag = $bComplexVals.complexTensorInfos.imag; + const bRealVals = cpuBackend.data.get(bReal.dataId).values; + const bImagVals = cpuBackend.data.get(bImag.dataId).values; + const [resultRealData, resultImagData, resultShape] = complexImpl(a.shape, b.shape, aRealVals, aImagVals, bRealVals, bImagVals); + const resultReal = cpuBackend.makeTensorInfo(resultShape, "float32", resultRealData); + const resultImag = cpuBackend.makeTensorInfo(resultShape, "float32", resultImagData); + const result = complex2({ inputs: { real: resultReal, imag: resultImag }, backend: cpuBackend }); + cpuBackend.disposeIntermediateTensorInfo($aComplex); + cpuBackend.disposeIntermediateTensorInfo($bComplex); + cpuBackend.disposeIntermediateTensorInfo(resultReal); + cpuBackend.disposeIntermediateTensorInfo(resultImag); + return result; + } else { + const aVals = cpuBackend.data.get(a.dataId).values; + const bVals = cpuBackend.data.get(b.dataId).values; + const $dtype = dtype || a.dtype; + const [resultData, resultShape] = simpleImpl(a.shape, b.shape, aVals, bVals, $dtype); + return cpuBackend.makeTensorInfo(resultShape, $dtype, resultData); + } + }; + } + function createComplexBinaryKernelImpl(op2) { + return (aShape, bShape, aRealVals, aImagVals, bRealVals, bImagVals) => { + const resultShape = backend_util_exports.assertAndGetBroadcastShape(aShape, bShape); + const resultSize = util_exports.sizeFromShape(resultShape); + const resultRank = resultShape.length; + const resultStrides = util_exports.computeStrides(resultShape); + const resultRealVals = util_exports.getTypedArrayFromDType("float32", resultSize); + const resultImagVals = util_exports.getTypedArrayFromDType("float32", resultSize); + const aBroadcastDims = backend_util_exports.getBroadcastDims(aShape, resultShape); + const bBroadcastDims = backend_util_exports.getBroadcastDims(bShape, resultShape); + const aVals = backend_util_exports.mergeRealAndImagArrays(aRealVals, aImagVals); + const bVals = backend_util_exports.mergeRealAndImagArrays(bRealVals, bImagVals); + const aRank = aShape.length; + const aStrides = util_exports.computeStrides(aShape); + const bRank = bShape.length; + const bStrides = util_exports.computeStrides(bShape); + if (aBroadcastDims.length + bBroadcastDims.length === 0) { + for (let i = 0; i < resultRealVals.length; i++) { + const aIdx = i % aVals.length; + const bIdx = i % bVals.length; + const result = op2(aVals[aIdx * 2], aVals[aIdx * 2 + 1], bVals[bIdx * 2], bVals[bIdx * 2 + 1]); + resultRealVals[i] = result.real; + resultImagVals[i] = result.imag; + } + } else { + for (let i = 0; i < resultRealVals.length; i++) { + const loc = util_exports.indexToLoc(i, resultRank, resultStrides); + const aLoc = loc.slice(-aRank); + aBroadcastDims.forEach((d) => aLoc[d] = 0); + const aIndex = util_exports.locToIndex(aLoc, aRank, aStrides); + const bLoc = loc.slice(-bRank); + bBroadcastDims.forEach((d) => bLoc[d] = 0); + const bIndex = util_exports.locToIndex(bLoc, bRank, bStrides); + const opResult = op2(aVals[aIndex * 2], aVals[aIndex * 2 + 1], bVals[bIndex * 2], bVals[bIndex * 2 + 1]); + resultRealVals[i] = opResult.real; + resultImagVals[i] = opResult.imag; + } + } + return [resultRealVals, resultImagVals, resultShape]; + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Add.js + var addImpl = createSimpleBinaryKernelImpl((a, b) => a + b); + var addComplexImpl = createComplexBinaryKernelImpl((aReal, aImag, bReal, bImag) => { + return { real: aReal + bReal, imag: aImag + bImag }; + }); + var add3 = binaryKernelFunc(Add, addImpl, addComplexImpl); + var addConfig = { + kernelName: Add, + backendName: "cpu", + kernelFunc: add3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Bincount_impl.js + init_define_BUILD_VERSION(); + function bincountImpl(xVals, weightsVals, weightsDtype, weightsShape, size) { + const weightsSize = util_exports.sizeFromShape(weightsShape); + const outVals = util_exports.makeZerosTypedArray(size, weightsDtype); + for (let i = 0; i < xVals.length; i++) { + const value = xVals[i]; + if (value < 0) { + throw new Error("Input x must be non-negative!"); + } + if (value >= size) { + continue; + } + if (weightsSize > 0) { + outVals[value] += weightsVals[i]; + } else { + outVals[value] += 1; + } + } + return outVals; + } + function bincountReduceImpl(xBuf, weightsBuf, size, binaryOutput = false) { + const numRows = xBuf.shape[0]; + const numCols = xBuf.shape[1]; + const outBuf = buffer([numRows, size], weightsBuf.dtype); + for (let i = 0; i < numRows; i++) { + for (let j = 0; j < numCols; j++) { + const value = xBuf.get(i, j); + if (value < 0) { + throw new Error("Input x must be non-negative!"); + } + if (value >= size) { + continue; + } + if (binaryOutput) { + outBuf.set(1, i, value); + } else { + if (weightsBuf.size > 0) { + outBuf.set(outBuf.get(i, value) + weightsBuf.get(i, j), i, value); + } else { + outBuf.set(outBuf.get(i, value) + 1, i, value); + } + } + } + } + return outBuf; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Ceil.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/unary_impl.js + init_define_BUILD_VERSION(); + function createSimpleUnaryImpl(op2) { + return (values, dtype, attrs) => { + const newValues = util_exports.getTypedArrayFromDType(dtype, values.length); + for (let i = 0; i < values.length; ++i) { + newValues[i] = op2(values[i], attrs); + } + return newValues; + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/unary_utils.js + init_define_BUILD_VERSION(); + function unaryKernelFunc(name, op2, dtype) { + return ({ inputs, attrs, backend: backend2 }) => { + const { x } = inputs; + assertNotComplex(x, name); + if (x.dtype === "string" || dtype === "string") { + throw new Error("unaryKernelFunc does not support string input/output"); + } + const cpuBackend = backend2; + const values = cpuBackend.data.get(x.dataId).values; + const xSize = util_exports.sizeFromShape(x.shape); + const $dtype = dtype || x.dtype; + const newValues = util_exports.getArrayFromDType($dtype, xSize); + for (let i = 0; i < xSize; ++i) { + newValues[i] = op2(values[i], attrs); + } + return cpuBackend.makeTensorInfo(x.shape, $dtype, newValues); + }; + } + function unaryKernelFuncFromImpl(name, unaryImpl, dtype) { + return ({ inputs, attrs, backend: backend2 }) => { + const { x } = inputs; + assertNotComplex(x, name); + if (x.dtype === "string" || dtype === "string") { + throw new Error("unaryKernelFunc does not support string input/output"); + } + const cpuBackend = backend2; + const values = cpuBackend.data.get(x.dataId).values; + const $dtype = dtype || x.dtype; + const newValues = unaryImpl(values, $dtype, attrs); + return cpuBackend.makeTensorInfo(x.shape, $dtype, newValues); + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Ceil.js + var ceilImpl = createSimpleUnaryImpl((xi) => Math.ceil(xi)); + var ceil2 = unaryKernelFuncFromImpl(Ceil, ceilImpl); + var ceilConfig = { + kernelName: Ceil, + backendName: "cpu", + kernelFunc: ceil2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat_impl.js + init_define_BUILD_VERSION(); + function concatImpl(inputs, outShape, dtype, simplyConcat) { + const outVals = util_exports.getArrayFromDType(dtype, util_exports.sizeFromShape(outShape)); + if (simplyConcat && dtype !== "string") { + let offset = 0; + inputs.forEach((input2) => { + const size = util_exports.sizeFromShape(input2.shape); + outVals.set(input2.vals, offset); + offset += size; + }); + } else { + let colOffset = 0; + inputs.forEach((input2) => { + const decodedData = dtype === "string" ? backend_util_exports.fromUint8ToStringArray(input2.vals) : input2.vals; + let tIdx = 0; + for (let row = 0; row < input2.shape[0]; ++row) { + const resIdx = row * outShape[1] + colOffset; + for (let col = 0; col < input2.shape[1]; ++col) { + outVals[resIdx + col] = decodedData[tIdx++]; + } + } + colOffset += input2.shape[1]; + }); + } + return outVals; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Equal.js + init_define_BUILD_VERSION(); + var equalImpl = createSimpleBinaryKernelImpl((a, b) => a === b ? 1 : 0); + var equal2 = binaryKernelFunc(Equal, equalImpl, null, "bool"); + var equalConfig = { + kernelName: Equal, + backendName: "cpu", + kernelFunc: equal2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Exp.js + init_define_BUILD_VERSION(); + var expImpl = createSimpleUnaryImpl((xi) => Math.exp(xi)); + var exp2 = unaryKernelFuncFromImpl(Exp, expImpl, "float32"); + var expConfig = { + kernelName: Exp, + backendName: "cpu", + kernelFunc: exp2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Expm1.js + init_define_BUILD_VERSION(); + var expm1Impl = createSimpleUnaryImpl((xi) => Math.expm1(xi)); + var expm12 = unaryKernelFuncFromImpl(Expm1, expm1Impl); + var expm1Config = { + kernelName: Expm1, + backendName: "cpu", + kernelFunc: expm12 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Floor.js + init_define_BUILD_VERSION(); + var floorImpl = createSimpleUnaryImpl((xi) => Math.floor(xi)); + var floor2 = unaryKernelFuncFromImpl(Floor, floorImpl); + var floorConfig = { + kernelName: Floor, + backendName: "cpu", + kernelFunc: floor2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherNd_Impl.js + init_define_BUILD_VERSION(); + function gatherNdImpl(indicesData, paramsBuf, dtype, numSlices, sliceRank, sliceSize, strides, paramsShape, paramsSize) { + const outBuf = buffer([numSlices, sliceSize], dtype); + for (let i = 0; i < numSlices; i++) { + const index = []; + let flattenIndex = 0; + for (let j = 0; j < sliceRank; j++) { + const dim = indicesData[i * sliceRank + j]; + flattenIndex += dim * strides[j]; + index.push(dim); + } + if (flattenIndex < 0 || flattenIndex >= paramsSize / sliceSize) { + throw new Error(`Invalid indices: ${index} does not index into ${paramsShape}`); + } + for (let k = 0; k < sliceSize; k++) { + outBuf.values[i * sliceSize + k] = paramsBuf.get(...paramsBuf.indexToLoc(flattenIndex * sliceSize + k)); + } + } + return outBuf; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherV2_impl.js + init_define_BUILD_VERSION(); + function gatherV2Impl(xBuf, indicesBuf, flattenOutputShape) { + const outBuf = buffer(flattenOutputShape, xBuf.dtype); + for (let i = 0; i < outBuf.size; ++i) { + const newLoc = outBuf.indexToLoc(i); + const originalLoc = newLoc.slice(); + const batchIdx = originalLoc[0]; + const indicesIdx = originalLoc[2]; + const indicesIndex = indicesBuf.locToIndex([batchIdx, indicesIdx]); + originalLoc[2] = indicesBuf.values[indicesIndex]; + const originalIndex = xBuf.locToIndex(originalLoc); + if (0 <= originalIndex && originalIndex < xBuf.values.length) { + outBuf.values[i] = xBuf.values[originalIndex]; + } + } + return outBuf; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Greater.js + init_define_BUILD_VERSION(); + var greaterImpl = createSimpleBinaryKernelImpl((a, b) => a > b ? 1 : 0); + var greater2 = binaryKernelFunc(Greater, greaterImpl, null, "bool"); + var greaterConfig = { + kernelName: Greater, + backendName: "cpu", + kernelFunc: greater2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GreaterEqual.js + init_define_BUILD_VERSION(); + var greaterEqualImpl = createSimpleBinaryKernelImpl((a, b) => a >= b ? 1 : 0); + var greaterEqual2 = binaryKernelFunc(GreaterEqual, greaterEqualImpl, null, "bool"); + var greaterEqualConfig = { + kernelName: GreaterEqual, + backendName: "cpu", + kernelFunc: greaterEqual2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Less.js + init_define_BUILD_VERSION(); + var lessImpl = createSimpleBinaryKernelImpl((a, b) => a < b ? 1 : 0); + var less2 = binaryKernelFunc(Less, lessImpl, null, "bool"); + var lessConfig = { + kernelName: Less, + backendName: "cpu", + kernelFunc: less2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LessEqual.js + init_define_BUILD_VERSION(); + var lessEqualImpl = createSimpleBinaryKernelImpl((a, b) => a <= b ? 1 : 0); + var lessEqual2 = binaryKernelFunc(LessEqual, lessEqualImpl, null, "bool"); + var lessEqualConfig = { + kernelName: LessEqual, + backendName: "cpu", + kernelFunc: lessEqual2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LinSpace_impl.js + init_define_BUILD_VERSION(); + function linSpaceImpl(start, stop, num) { + const step5 = (stop - start) / (num - 1); + const values = util_exports.makeZerosTypedArray(num, "float32"); + values[0] = start; + for (let i = 1; i < values.length; i++) { + values[i] = values[i - 1] + step5; + } + return values; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Log.js + init_define_BUILD_VERSION(); + var logImpl = createSimpleUnaryImpl((xi) => Math.log(xi)); + var log3 = unaryKernelFuncFromImpl(Log, logImpl); + var logConfig = { + kernelName: Log, + backendName: "cpu", + kernelFunc: log3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Max_impl.js + init_define_BUILD_VERSION(); + function maxImpl(aVals, reduceSize, outShape, dtype) { + const vals = util_exports.getTypedArrayFromDType(dtype, util_exports.sizeFromShape(outShape)); + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let max6 = aVals[offset]; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + if (Number.isNaN(value) || value > max6) { + max6 = value; + } + } + vals[i] = max6; + } + return vals; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Maximum.js + init_define_BUILD_VERSION(); + var maximumImpl = createSimpleBinaryKernelImpl((aValue, bValue) => Math.max(aValue, bValue)); + var maximum2 = binaryKernelFunc(Maximum, maximumImpl); + var maximumConfig = { + kernelName: Maximum, + backendName: "cpu", + kernelFunc: maximum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Minimum.js + init_define_BUILD_VERSION(); + var minimumImpl = createSimpleBinaryKernelImpl((aValue, bValue) => Math.min(aValue, bValue)); + var minimum2 = binaryKernelFunc(Minimum, minimumImpl); + var minimumConfig = { + kernelName: Minimum, + backendName: "cpu", + kernelFunc: minimum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multiply.js + init_define_BUILD_VERSION(); + var multiplyImpl = createSimpleBinaryKernelImpl((aValue, bValue) => aValue * bValue); + var multiplyComplexImpl = createComplexBinaryKernelImpl((aReal, aImag, bReal, bImag) => { + return { + real: aReal * bReal - aImag * bImag, + imag: aReal * bImag + aImag * bReal + }; + }); + var multiply = binaryKernelFunc(Multiply, multiplyImpl, multiplyComplexImpl); + var multiplyConfig = { + kernelName: Multiply, + backendName: "cpu", + kernelFunc: multiply + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Neg.js + init_define_BUILD_VERSION(); + function negImpl(xVals, xShape, xDtype) { + const minusOne = util_exports.createScalarValue(-1, xDtype); + return multiplyImpl([], xShape, minusOne, xVals, xDtype); + } + function neg2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + assertNotComplex(x, "neg"); + const xVals = backend2.data.get(x.dataId).values; + const [res, newShape] = negImpl(xVals, x.shape, x.dtype); + return backend2.makeTensorInfo(newShape, x.dtype, res); + } + var negConfig = { + kernelName: Neg, + backendName: "cpu", + kernelFunc: neg2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NotEqual.js + init_define_BUILD_VERSION(); + var notEqualImpl = createSimpleBinaryKernelImpl((a, b) => a !== b ? 1 : 0); + var notEqual2 = binaryKernelFunc(NotEqual, notEqualImpl, null, "bool"); + var notEqualConfig = { + kernelName: NotEqual, + backendName: "cpu", + kernelFunc: notEqual2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prod.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose_impl.js + init_define_BUILD_VERSION(); + function transposeImpl(xVals, xShape, dtype, perm, newShape) { + const xRank = xShape.length; + const xSize = util_exports.sizeFromShape(xShape); + const xStrides = util_exports.computeStrides(xShape); + const newStrides = util_exports.computeStrides(newShape); + const result = util_exports.getTypedArrayFromDType(dtype, util_exports.sizeFromShape(newShape)); + for (let i = 0; i < xSize; ++i) { + const loc = util_exports.indexToLoc(i, xRank, xStrides); + const newLoc = new Array(loc.length); + for (let i2 = 0; i2 < newLoc.length; i2++) { + newLoc[i2] = loc[perm[i2]]; + } + const newIndex = util_exports.locToIndex(newLoc, xRank, newStrides); + result[newIndex] = xVals[i]; + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose.js + function transpose2(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x } = inputs; + const { perm } = attrs; + assertNotComplex(x, "transpose"); + const xRank = x.shape.length; + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = x.shape[perm[i]]; + } + const values = backend2.data.get(x.dataId).values; + const result = transposeImpl(values, x.shape, x.dtype, perm, newShape); + const dataId = backend2.write(result, newShape, x.dtype); + return { dataId, shape: newShape, dtype: x.dtype }; + } + var transposeConfig = { + kernelName: Transpose, + backendName: "cpu", + kernelFunc: transpose2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prod.js + function prodImpl(xShape, xDtype, xVals, reductionAxes) { + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(xShape, reductionAxes); + const outDtype = upcastType(xDtype, "int32"); + const outVals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(outShape), outDtype); + const reduceSize = util_exports.sizeFromShape(reduceShape); + for (let i = 0; i < outVals.length; ++i) { + const offset = i * reduceSize; + let prod5 = 1; + for (let j = 0; j < reduceSize; ++j) { + prod5 *= xVals[offset + j]; + } + outVals[i] = prod5; + } + return { outVals, outShape, outDtype }; + } + function prod2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + assertNotComplex(x, "prod"); + const xRank = x.shape.length; + const axes = util_exports.parseAxisParam(axis, x.shape); + const permutation = backend_util_exports.getAxesPermutation(axes, xRank); + let reductionAxes = axes; + let permutedX = x; + const intermediateTensorInfos = []; + if (permutation != null) { + permutedX = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutation } }); + intermediateTensorInfos.push(permutedX); + reductionAxes = backend_util_exports.getInnerMostAxes(reductionAxes.length, xRank); + } + const xVals = backend2.data.get(permutedX.dataId).values; + const { outVals, outShape, outDtype } = prodImpl(permutedX.shape, permutedX.dtype, xVals, reductionAxes); + let resultShape = outShape; + if (keepDims) { + resultShape = backend_util_exports.expandShapeToKeepDim(outShape, axes); + } + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return backend2.makeTensorInfo(resultShape, outDtype, outVals); + } + var prodConfig = { + kernelName: Prod, + backendName: "cpu", + kernelFunc: prod2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Range_impl.js + init_define_BUILD_VERSION(); + function rangeImpl(start, stop, step5, dtype) { + const sameStartStop = start === stop; + const increasingRangeNegativeStep = start < stop && step5 < 0; + const decreasingRangePositiveStep = stop < start && step5 > 1; + if (sameStartStop || increasingRangeNegativeStep || decreasingRangePositiveStep) { + return util_exports.makeZerosTypedArray(0, dtype); + } + const numElements = Math.abs(Math.ceil((stop - start) / step5)); + const values = util_exports.makeZerosTypedArray(numElements, dtype); + if (stop < start && step5 === 1) { + step5 = -1; + } + values[0] = start; + for (let i = 1; i < values.length; i++) { + values[i] = values[i - 1] + step5; + } + return values; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Rsqrt.js + init_define_BUILD_VERSION(); + var rsqrtImpl = createSimpleUnaryImpl((xi) => 1 / Math.sqrt(xi)); + var rsqrt2 = unaryKernelFuncFromImpl(Rsqrt, rsqrtImpl); + var rsqrtConfig = { + kernelName: Rsqrt, + backendName: "cpu", + kernelFunc: rsqrt2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Scatter_impl.js + init_define_BUILD_VERSION(); + function scatterImpl(indices, updates, shape, outputSize, sliceSize, numUpdates, sliceRank, strides, defaultValue, sumDupeIndices) { + const flattenShape = [outputSize / sliceSize, sliceSize]; + const indicesData = indices.values; + const updatesData = updates.values; + if (outputSize === 0) { + return buffer(shape, updates.dtype); + } + const outBuf = buffer(flattenShape, updates.dtype); + if (typeof defaultValue === "string") { + outBuf.values.fill(defaultValue); + } else if (typeof defaultValue === "number") { + outBuf.values.fill(defaultValue); + } else if (typeof defaultValue === "boolean") { + outBuf.values.fill(+defaultValue); + } + for (let i = 0; i < numUpdates; i++) { + const index = []; + let flattenIndex = 0; + for (let j = 0; j < sliceRank; j++) { + const dim = indicesData[i * sliceRank + j]; + index.push(dim); + flattenIndex += dim * strides[j]; + } + if (flattenIndex < 0 || flattenIndex >= outputSize / sliceSize) { + throw new Error(`Invalid indices: ${index} does not index into ${shape}`); + } + for (let k = 0; k < sliceSize; k++) { + if (sumDupeIndices) { + outBuf.values[flattenIndex * sliceSize + k] += updatesData[i * sliceSize + k]; + } else { + outBuf.values[flattenIndex * sliceSize + k] = updates.rank === 0 ? updatesData[0] : updatesData[i * sliceSize + k]; + } + } + } + return outBuf; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sigmoid.js + init_define_BUILD_VERSION(); + var sigmoidImpl = createSimpleUnaryImpl((xi) => 1 / (1 + Math.exp(-xi))); + var sigmoid2 = unaryKernelFunc(Sigmoid, (xi) => 1 / (1 + Math.exp(-xi))); + var sigmoidConfig = { + kernelName: Sigmoid, + backendName: "cpu", + kernelFunc: sigmoid2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Slice.js + init_define_BUILD_VERSION(); + function sliceImpl(vals, begin, size, shape, dtype) { + const isContinous = slice_util_exports.isSliceContinous(shape, begin, size); + const length = util_exports.sizeFromShape(size); + const xStrides = util_exports.computeStrides(shape); + if (isContinous) { + const flatOffset = slice_util_exports.computeFlatOffset(begin, xStrides); + if (dtype === "string") { + return vals.slice(flatOffset, flatOffset + length); + } + return vals.subarray(flatOffset, flatOffset + length); + } + const decodedData = dtype === "string" ? backend_util_exports.fromUint8ToStringArray(vals) : vals; + const inBuf = buffer(shape, dtype, decodedData); + const outBuf = buffer(size, dtype); + for (let i = 0; i < outBuf.size; ++i) { + const outLoc = outBuf.indexToLoc(i); + const inLoc = outLoc.map((idx, j) => idx + begin[j]); + outBuf.set(inBuf.get(...inLoc), ...outLoc); + } + if (dtype === "string") { + return backend_util_exports.fromStringArrayToUint8(outBuf.values); + } + return outBuf.values; + } + function slice2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { begin, size } = attrs; + assertNotComplex(x, "slice"); + const [$begin, $size] = slice_util_exports.parseSliceParams(x, begin, size); + slice_util_exports.assertParamsValid(x, $begin, $size); + const vals = backend2.data.get(x.dataId).values; + const outVals = sliceImpl(vals, $begin, $size, x.shape, x.dtype); + return backend2.makeTensorInfo($size, x.dtype, outVals); + } + var sliceConfig = { + kernelName: Slice, + backendName: "cpu", + kernelFunc: slice2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseFillEmptyRows_impl.js + init_define_BUILD_VERSION(); + function sparseFillEmptyRowsImpl(indices, indicesShape, indicesDType, values, valuesDType, denseShape, defaultValue) { + const indicesCount = indicesShape[0]; + const denseRows = denseShape[0]; + const emptyRowIndicator = new Array(denseRows); + const reverseIndexMap = new Array(indicesCount); + const rank = indicesShape[1]; + if (denseRows === 0) { + if (indicesCount !== 0) { + throw new Error(backend_util_exports.getSparseFillEmptyRowsIndicesDenseShapeMismatch(indicesCount)); + } + const outputIndices = util_exports.getArrayFromDType(indicesDType, 0); + const outputValues = util_exports.getArrayFromDType(valuesDType, 0); + return [ + outputIndices, + [0, rank], + outputValues, + emptyRowIndicator, + reverseIndexMap + ]; + } + let rowsAreOrdered = true; + let lastIndicesRow = 0; + const csrOffset = new Array(denseRows).fill(0); + for (let i = 0; i < indicesCount; ++i) { + const row = indices[i * rank]; + if (row < 0) { + throw new Error(backend_util_exports.getSparseFillEmptyRowsNegativeIndexErrorMessage(i, row)); + } + if (row >= denseRows) { + throw new Error(backend_util_exports.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(i, row, denseRows)); + } + ++csrOffset[row]; + rowsAreOrdered = rowsAreOrdered && row >= lastIndicesRow; + lastIndicesRow = row; + } + let allRowsFull = true; + for (let row = 0; row < denseRows; ++row) { + const rowEmpty = csrOffset[row] === 0; + emptyRowIndicator[row] = rowEmpty; + allRowsFull = allRowsFull && !rowEmpty; + csrOffset[row] = Math.max(csrOffset[row], 1); + if (row > 0) { + csrOffset[row] += csrOffset[row - 1]; + } + } + if (allRowsFull && rowsAreOrdered) { + const outputIndices = indices; + const outputValues = values; + for (let i = 0; i < indicesCount; ++i) { + reverseIndexMap[i] = i; + } + return [ + outputIndices, + [indicesCount, rank], + outputValues, + emptyRowIndicator, + reverseIndexMap + ]; + } else { + const fullIndicesCount = csrOffset[denseRows - 1]; + const outputIndices = util_exports.getArrayFromDType(indicesDType, fullIndicesCount * rank); + const outputValues = util_exports.getArrayFromDType(valuesDType, fullIndicesCount); + const filledCount = new Array(denseRows).fill(0); + for (let i = 0; i < indicesCount; ++i) { + const row = indices[i * rank]; + const offset = filledCount[row]; + const outputI = (row === 0 ? 0 : csrOffset[row - 1]) + offset; + filledCount[row]++; + for (let j = 0; j < rank; ++j) { + outputIndices[outputI * rank + j] = indices[i * rank + j]; + } + outputValues[outputI] = values[i]; + reverseIndexMap[i] = outputI; + } + for (let row = 0; row < denseRows; ++row) { + const rowCount = filledCount[row]; + if (rowCount === 0) { + const startingIndex = row === 0 ? 0 : csrOffset[row - 1]; + outputIndices[startingIndex * rank + 0] = row; + for (let col = 1; col < rank; ++col) { + outputIndices[startingIndex * rank + col] = 0; + } + outputValues[startingIndex] = defaultValue; + } + } + return [ + outputIndices, + [fullIndicesCount, rank], + outputValues, + emptyRowIndicator, + reverseIndexMap + ]; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseReshape_impl.js + init_define_BUILD_VERSION(); + function sparseReshapeImpl(inputIndices, inputIndicesShape, inputDType, inputShape, targetShape) { + const denseSize = util_exports.sizeFromShape(inputShape); + const nnz = inputIndicesShape[0]; + const outputRank = targetShape.length; + const outputShape = []; + let product = 1; + let unknownIndex = -1; + for (let d = 0; d < outputRank; ++d) { + const size = targetShape[d]; + if (size === -1) { + if (unknownIndex !== -1) { + throw new Error(backend_util_exports.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(unknownIndex, d)); + } + unknownIndex = d; + outputShape.push(1); + } else { + if (size < 0) { + throw new Error(backend_util_exports.getSparseReshapeNegativeOutputDimErrorMessage(d, size)); + } + product *= size; + outputShape.push(size); + } + } + if (unknownIndex !== -1) { + if (product <= 0) { + throw new Error(backend_util_exports.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage()); + } + const missing = Math.trunc(denseSize / product); + if (product * missing !== denseSize) { + throw new Error(backend_util_exports.getSparseReshapeInputOutputMultipleErrorMessage(inputShape, outputShape)); + } + outputShape[unknownIndex] = missing; + } + const outputSize = util_exports.sizeFromShape(outputShape); + if (outputSize !== denseSize) { + throw new Error(backend_util_exports.getSparseReshapeInputOutputMismatchErrorMessage(inputShape, outputShape)); + } + const inputRank = inputShape.length; + const inputStrides = []; + if (inputRank > 0) { + inputStrides[inputRank - 1] = 1; + for (let d = inputRank - 2; d >= 0; --d) { + inputStrides[d] = inputStrides[d + 1] * inputShape[d + 1]; + } + } + const outputStrides = []; + if (outputRank > 0) { + outputStrides[outputRank - 1] = 1; + for (let d = outputRank - 2; d >= 0; --d) { + outputStrides[d] = outputStrides[d + 1] * outputShape[d + 1]; + } + } + const newIndices = util_exports.getArrayFromDType(inputDType, nnz * outputRank); + for (let i = 0; i < nnz; ++i) { + let id = 0; + for (let j = 0; j < inputRank; ++j) { + id += inputIndices[i * inputRank + j] * inputStrides[j]; + } + for (let j = 0; j < outputRank; ++j) { + newIndices[i * outputRank + j] = Math.trunc(id / outputStrides[j]); + id %= outputStrides[j]; + } + } + return [newIndices, [nnz, outputRank], outputShape]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseSegmentReduction_impl.js + init_define_BUILD_VERSION(); + function sparseSegmentReductionImpl(input2, inputShape, inputDType, indices, segmentIds, isMean = false, defaultValue = 0) { + const numIndices = indices.length; + const inputFlat = [inputShape[0], input2.length / inputShape[0]]; + const numCol = inputFlat[1]; + const lastSegmentIdPlusOne = numIndices > 0 ? segmentIds[numIndices - 1] + 1 : 0; + const outputRows = lastSegmentIdPlusOne; + if (outputRows < 0) { + throw new Error(backend_util_exports.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + } + const outputShape = inputShape.slice(); + outputShape[0] = outputRows; + const outputLength = outputShape.reduce((product, value) => product * value, 1); + const output = util_exports.getArrayFromDType(inputDType, outputLength); + if (numIndices === 0) { + if (outputRows > 0) { + output.fill(defaultValue); + } + return [output, outputShape]; + } + if (outputRows <= 0) { + throw new Error(backend_util_exports.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + } + let start = 0, end = 1; + let uninitializedIndex = 0; + let outIndex = segmentIds[start]; + while (true) { + let nextIndex = 0; + if (end < numIndices) { + nextIndex = segmentIds[end]; + if (outIndex === nextIndex) { + ++end; + continue; + } + if (outIndex >= nextIndex) { + throw new Error(backend_util_exports.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage()); + } + } + if (outIndex < 0 || outIndex >= outputRows) { + throw new Error(backend_util_exports.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(outIndex, outputRows)); + } + if (outIndex > uninitializedIndex) { + output.fill(defaultValue, uninitializedIndex * numCol, outIndex * numCol); + } + for (let i = start; i < end; ++i) { + const index = indices[i]; + if (index < 0 || index >= inputFlat[0]) { + throw new Error(backend_util_exports.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(i, indices[i], inputFlat[0])); + } + for (let j = 0; j < numCol; j++) { + output[outIndex * numCol + j] += input2[index * numCol + j]; + } + } + if (isMean) { + for (let j = 0; j < numCol; j++) { + output[outIndex * numCol + j] /= end - start; + } + } + start = end; + ++end; + uninitializedIndex = outIndex + 1; + outIndex = nextIndex; + if (end > numIndices) { + break; + } + } + if (uninitializedIndex < outputRows) { + output.fill(defaultValue, uninitializedIndex * numCol, outputRows * numCol); + } + return [output, outputShape]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sqrt.js + init_define_BUILD_VERSION(); + var sqrtImpl = createSimpleUnaryImpl((xi) => Math.sqrt(xi)); + var sqrt2 = unaryKernelFunc(Sqrt, (xi) => Math.sqrt(xi)); + var sqrtConfig = { + kernelName: Sqrt, + backendName: "cpu", + kernelFunc: sqrt2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SquaredDifference.js + init_define_BUILD_VERSION(); + var squaredDifferenceImpl = createSimpleBinaryKernelImpl((a, b) => { + const diff = a - b; + return diff * diff; + }); + var squaredDifference2 = binaryKernelFunc(SquaredDifference, squaredDifferenceImpl); + var squaredDifferenceConfig = { + kernelName: SquaredDifference, + backendName: "cpu", + kernelFunc: squaredDifference2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StridedSlice_impl.js + init_define_BUILD_VERSION(); + function stridedSliceImpl(outShape, xBuf, strides, begin) { + const outBuf = buffer(outShape, xBuf.dtype); + for (let i = 0; i < outBuf.size; i++) { + const loc = outBuf.indexToLoc(i); + const newLoc = new Array(loc.length); + for (let j = 0; j < newLoc.length; j++) { + newLoc[j] = loc[j] * strides[j] + begin[j]; + } + outBuf.set(xBuf.get(...newLoc), ...loc); + } + return outBuf; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringNGrams_impl.js + init_define_BUILD_VERSION(); + var StringNGramsOp = class { + constructor(separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences) { + this.separator = util_exports.encodeString(separator); + this.nGramWidths = nGramWidths; + this.leftPad = util_exports.encodeString(leftPad); + this.rightPad = util_exports.encodeString(rightPad2); + this.padWidth = padWidth; + this.preserveShort = preserveShortSequences; + } + getPadWidth(nGramWidth) { + return Math.min(this.padWidth < 0 ? nGramWidth - 1 : this.padWidth, nGramWidth - 1); + } + getNumNGrams(length, nGramWidth) { + const padWidth = this.getPadWidth(nGramWidth); + return Math.max(0, length + 2 * padWidth - nGramWidth + 1); + } + createNGrams(data, splitIndex, output, outputStartIndex, numNGrams, nGramWidth) { + for (let nGramIndex = 0; nGramIndex < numNGrams; ++nGramIndex) { + const padWidth = this.getPadWidth(nGramWidth); + const leftPadding = Math.max(0, padWidth - nGramIndex); + const rightPadding = Math.max(0, padWidth - (numNGrams - (nGramIndex + 1))); + const numTokens = nGramWidth - (leftPadding + rightPadding); + const dataStartIndex = splitIndex + (leftPadding > 0 ? 0 : nGramIndex - padWidth); + let nGramSize = 0; + nGramSize += leftPadding * this.leftPad.length; + for (let n = 0; n < numTokens; ++n) { + nGramSize += data[dataStartIndex + n].length; + } + nGramSize += rightPadding * this.rightPad.length; + const numSeparators = leftPadding + rightPadding + numTokens - 1; + nGramSize += numSeparators * this.separator.length; + output[outputStartIndex + nGramIndex] = new Uint8Array(nGramSize); + const nGram = output[outputStartIndex + nGramIndex]; + let nextNGramIndex = 0; + const appendToNGram = (str) => str.forEach((value) => nGram[nextNGramIndex++] = value); + for (let n = 0; n < leftPadding; ++n) { + appendToNGram(this.leftPad); + appendToNGram(this.separator); + } + for (let n = 0; n < numTokens - 1; ++n) { + appendToNGram(data[dataStartIndex + n]); + appendToNGram(this.separator); + } + if (numTokens > 0) { + appendToNGram(data[dataStartIndex + numTokens - 1]); + for (let n = 0; n < rightPadding; ++n) { + appendToNGram(this.separator); + appendToNGram(this.rightPad); + } + } else { + for (let n = 0; n < rightPadding - 1; ++n) { + appendToNGram(this.rightPad); + appendToNGram(this.separator); + } + appendToNGram(this.rightPad); + } + } + } + compute(data, splits) { + const inputDataSize = data.length; + const splitsSize = splits.length; + if (splitsSize > 0) { + let prevSplit = splits[0]; + if (prevSplit !== 0) { + throw new Error(`First split value must be 0, got ${prevSplit}`); + } + for (let i = 1; i < splitsSize; ++i) { + let validSplits = splits[i] >= prevSplit; + validSplits = validSplits && splits[i] <= inputDataSize; + if (!validSplits) { + throw new Error(`Invalid split value ${splits[i]}, must be in [${prevSplit}, ${inputDataSize}]`); + } + prevSplit = splits[i]; + } + if (prevSplit !== inputDataSize) { + throw new Error(`Last split value must be data size. Expected ${inputDataSize}, got ${prevSplit}`); + } + } + const numBatchItems = splitsSize - 1; + const nGramsSplits = util_exports.getArrayFromDType("int32", splitsSize); + if (inputDataSize === 0 || splitsSize === 0) { + const empty = new Array(inputDataSize); + for (let i = 0; i <= numBatchItems; ++i) { + nGramsSplits[i] = 0; + } + return [empty, nGramsSplits]; + } + nGramsSplits[0] = 0; + for (let i = 1; i <= numBatchItems; ++i) { + const length = splits[i] - splits[i - 1]; + let numNGrams = 0; + this.nGramWidths.forEach((nGramWidth) => { + numNGrams += this.getNumNGrams(length, nGramWidth); + }); + if (this.preserveShort && length > 0 && numNGrams === 0) { + numNGrams = 1; + } + nGramsSplits[i] = nGramsSplits[i - 1] + numNGrams; + } + const nGrams = new Array(nGramsSplits[numBatchItems]); + for (let i = 0; i < numBatchItems; ++i) { + const splitIndex = splits[i]; + let outputStartIdx = nGramsSplits[i]; + this.nGramWidths.forEach((nGramWidth) => { + const length = splits[i + 1] - splits[i]; + const numNGrams = this.getNumNGrams(length, nGramWidth); + this.createNGrams(data, splitIndex, nGrams, outputStartIdx, numNGrams, nGramWidth); + outputStartIdx += numNGrams; + }); + if (this.preserveShort && outputStartIdx === nGramsSplits[i]) { + const dataLength = splits[i + 1] - splits[i]; + if (dataLength === 0) { + continue; + } + const nGramWidth = dataLength + 2 * this.padWidth; + const numNGrams = 1; + this.createNGrams(data, splitIndex, nGrams, outputStartIdx, numNGrams, nGramWidth); + } + } + return [nGrams, nGramsSplits]; + } + }; + function stringNGramsImpl(data, dataSplits, separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences) { + return new StringNGramsOp(separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences).compute(data, dataSplits); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringSplit_impl.js + init_define_BUILD_VERSION(); + function split3(str, delimiters, skipEmpty, result) { + if (!str.length) { + return; + } + if (delimiters.length === 0) { + for (let i = 0; i < str.length; ++i) { + result.push(str.subarray(i, i + 1)); + } + return; + } + if (delimiters.length === 1) { + const delimiter = delimiters[0]; + let f = str.indexOf(delimiter); + while (f !== -1) { + const token = str.subarray(0, f); + if (!skipEmpty || token.length !== 0) { + result.push(token); + } + str = str.subarray(f + 1); + f = str.indexOf(delimiter); + } + if (!skipEmpty || str.length !== 0) { + result.push(str); + } + return; + } + let tokenStart = 0; + for (let i = 0; i < str.length + 1; i++) { + if (i === str.length || delimiters.indexOf(str[i]) !== -1) { + const token = str.subarray(tokenStart, i); + if (!skipEmpty || token.length !== 0) { + result.push(token); + } + tokenStart = i + 1; + } + } + } + function stringSplitImpl(input2, delimiter, skipEmpty) { + const batchSize = input2.length; + const tokens = []; + let outputSize = 0; + let maxNumEntries = 0; + const numIndices = new Array(batchSize); + for (let i = 0; i < batchSize; ++i) { + const prevTokensLength = tokens.length; + split3(input2[i], delimiter, skipEmpty, tokens); + const nEntries = tokens.length - prevTokensLength; + numIndices[i] = nEntries; + outputSize += nEntries; + maxNumEntries = Math.max(maxNumEntries, nEntries); + } + const indices = util_exports.getArrayFromDType("int32", outputSize * 2); + const values = new Array(outputSize); + const shape = [batchSize, maxNumEntries]; + let c = 0; + for (let i = 0; i < batchSize; ++i) { + for (let j = 0; j < numIndices[i]; ++j) { + indices[c * 2] = i; + indices[c * 2 + 1] = j; + values[c] = tokens[c]; + ++c; + } + } + return [indices, values, shape]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringToHashBucketFast_impl.js + init_define_BUILD_VERSION(); + function stringToHashBucketFastImpl(input2, numBuckets) { + const output = util_exports.getArrayFromDType("int32", input2.length); + for (let i = 0; i < input2.length; ++i) { + output[i] = util_exports.fingerPrint64(input2[i]).modulo(numBuckets).getLowBitsUnsigned(); + } + return output; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sub.js + init_define_BUILD_VERSION(); + var subImpl = createSimpleBinaryKernelImpl((aValue, bValue) => aValue - bValue); + var subComplexImpl = createComplexBinaryKernelImpl((aReal, aImag, bReal, bImag) => { + return { real: aReal - bReal, imag: aImag - bImag }; + }); + var sub2 = binaryKernelFunc(Sub, subImpl, subComplexImpl); + var subConfig = { + kernelName: Sub, + backendName: "cpu", + kernelFunc: sub2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tile_impl.js + init_define_BUILD_VERSION(); + function tileImpl(xBuf, reps) { + const newShape = new Array(xBuf.rank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = xBuf.shape[i] * reps[i]; + } + const result = buffer(newShape, xBuf.dtype); + for (let i = 0; i < result.values.length; ++i) { + const newLoc = result.indexToLoc(i); + const originalLoc = new Array(xBuf.rank); + for (let j = 0; j < originalLoc.length; j++) { + originalLoc[j] = newLoc[j] % xBuf.shape[j]; + } + const originalIndex = xBuf.locToIndex(originalLoc); + result.values[i] = xBuf.values[originalIndex]; + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/TopK_impl.js + init_define_BUILD_VERSION(); + var comparePair = (a, b) => { + const valueDiff = b.value - a.value; + return valueDiff === 0 ? a.index - b.index : valueDiff; + }; + function select(array2, k, left = 0, right = array2.length - 1) { + while (right > left) { + if (right - left > 600) { + const n = right - left + 1; + const i2 = k - left + 1; + const z = Math.log(n); + const s = 0.5 * Math.exp(2 * z / 3); + const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * Math.sign(i2 - n / 2); + const newLeft = Math.max(left, Math.floor(k - i2 * s / n + sd)); + const newRight = Math.min(right, Math.floor(k + (n - i2) * s / n + sd)); + select(array2, k, newLeft, newRight); + } + const t = array2[k]; + let i = left; + let j = right; + util_exports.swap(array2, left, k); + if (comparePair(array2[right], t) > 0) { + util_exports.swap(array2, left, right); + } + while (i < j) { + util_exports.swap(array2, i, j); + i++; + j--; + while (comparePair(array2[i], t) < 0) { + i = i + 1; + } + while (comparePair(array2[j], t) > 0) { + j = j - 1; + } + } + if (comparePair(array2[left], t) === 0) { + util_exports.swap(array2, left, j); + } else { + j = j + 1; + util_exports.swap(array2, j, right); + } + if (j <= k) { + left = j + 1; + } + if (k <= j) { + right = j - 1; + } + } + } + function topKImpl(x, xShape, xDtype, k, sorted) { + const lastDim = xShape[xShape.length - 1]; + const [batch, size] = [x.length / lastDim, lastDim]; + const allTopKVals = util_exports.getTypedArrayFromDType(xDtype, batch * k); + const allTopKIndices = util_exports.getTypedArrayFromDType("int32", batch * k); + for (let b = 0; b < batch; b++) { + const offset = b * size; + const vals = x.subarray(offset, offset + size); + let valAndInd = new Array(vals.length); + vals.forEach((value, index) => valAndInd[index] = { value, index }); + if (k < valAndInd.length) { + select(valAndInd, k); + valAndInd = valAndInd.slice(0, k); + } + if (sorted) { + valAndInd.sort(comparePair); + } + const outOffset = b * k; + const topKVals = allTopKVals.subarray(outOffset, outOffset + k); + const topKIndices = allTopKIndices.subarray(outOffset, outOffset + k); + for (let i = 0; i < k; i++) { + topKVals[i] = valAndInd[i].value; + topKIndices[i] = valAndInd[i].index; + } + } + const outputShape = xShape.slice(); + outputShape[outputShape.length - 1] = k; + return [ + buffer(outputShape, xDtype, allTopKVals), + buffer(outputShape, "int32", allTopKIndices) + ]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unique_impl.js + init_define_BUILD_VERSION(); + function uniqueImpl(values, axis, shape, dtype) { + const $axis = util_exports.parseAxisParam(axis, shape)[0]; + const newShape = [1, shape[0], 1]; + for (let i = 0; i < $axis; i++) { + newShape[0] *= shape[i]; + } + newShape[1] = shape[$axis]; + for (let i = $axis + 1; i < shape.length; i++) { + newShape[2] *= shape[i]; + } + const uniqueElements = {}; + const indices = new Int32Array(shape[$axis]); + const inputBuffer = new TensorBuffer(newShape, dtype, values); + const uniqueIndices = []; + const is1DTensor = newShape[0] === 1 && newShape[2] === 1; + for (let i = 0; i < shape[$axis]; i++) { + let element; + if (is1DTensor) { + element = values[i].toString(); + } else { + const axisValues = []; + for (let m = 0; m < newShape[0]; m++) { + for (let n = 0; n < newShape[2]; n++) { + axisValues.push(inputBuffer.get(m, i, n)); + } + } + element = axisValues.join(","); + } + if (uniqueElements[element] !== void 0) { + indices[i] = uniqueElements[element]; + } else { + const uniqueIndex = Object.keys(uniqueElements).length; + uniqueElements[element] = uniqueIndex; + indices[i] = uniqueIndex; + uniqueIndices.push(i); + } + } + const outputTmpShape = newShape.slice(); + outputTmpShape[1] = Object.keys(uniqueElements).length; + const outputBuffer = new TensorBuffer(outputTmpShape, dtype); + uniqueIndices.forEach((uniqueElementIndex, i) => { + for (let m = 0; m < newShape[0]; m++) { + for (let n = 0; n < newShape[2]; n++) { + outputBuffer.set(inputBuffer.get(m, uniqueElementIndex, n), m, i, n); + } + } + }); + const outputShape = shape.slice(); + outputShape[$axis] = outputTmpShape[1]; + return { + outputValues: outputBuffer.values, + outputShape, + indices + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/base.js + registerBackend("cpu", () => new MathBackendCPU(), 1); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/register_all_kernels.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/_FusedMatMul.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fused_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Elu.js + init_define_BUILD_VERSION(); + var elu3 = unaryKernelFunc(Elu, (xi) => xi >= 0 ? xi : Math.exp(xi) - 1); + var eluConfig = { + kernelName: Elu, + backendName: "cpu", + kernelFunc: elu3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LeakyRelu.js + init_define_BUILD_VERSION(); + function leakyRelu2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { alpha } = attrs; + assertNotComplex([x], "leakyRelu"); + const xSize = util_exports.sizeFromShape(x.shape); + const xVals = backend2.data.get(x.dataId).values; + const outVals = util_exports.getTypedArrayFromDType("float32", xSize); + for (let i = 0; i < xVals.length; i++) { + outVals[i] = xVals[i] < 0 ? alpha * xVals[i] : xVals[i]; + } + return backend2.makeTensorInfo(x.shape, "float32", outVals); + } + var leakyReluConfig = { + kernelName: LeakyRelu, + backendName: "cpu", + kernelFunc: leakyRelu2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prelu.js + init_define_BUILD_VERSION(); + var preluImpl = createSimpleBinaryKernelImpl((xValue, aValue) => xValue < 0 ? aValue * xValue : xValue); + function prelu2(args) { + const { inputs, backend: backend2 } = args; + const { x, alpha } = inputs; + assertNotComplex([x, alpha], "prelu"); + const aVals = backend2.data.get(x.dataId).values; + const bVals = backend2.data.get(alpha.dataId).values; + const [resultData, resultShape] = preluImpl(x.shape, alpha.shape, aVals, bVals, "float32"); + return backend2.makeTensorInfo(resultShape, "float32", resultData); + } + var preluConfig = { + kernelName: Prelu, + backendName: "cpu", + kernelFunc: prelu2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Relu.js + init_define_BUILD_VERSION(); + var relu2 = unaryKernelFunc(Relu, (xi) => Math.max(0, xi)); + var reluConfig = { + kernelName: Relu, + backendName: "cpu", + kernelFunc: relu2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Relu6.js + init_define_BUILD_VERSION(); + var relu62 = unaryKernelFunc(Relu6, (xi) => Math.min(Math.max(0, xi), 6)); + var relu6Config = { + kernelName: Relu6, + backendName: "cpu", + kernelFunc: relu62 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fused_utils.js + function applyActivation2(backend2, x, activation, preluActivationWeights, leakyreluAlpha) { + if (activation === "linear") { + return identity({ inputs: { x }, backend: backend2 }); + } else if (activation === "relu") { + return relu2({ inputs: { x }, backend: backend2 }); + } else if (activation === "elu") { + return elu3({ inputs: { x }, backend: backend2 }); + } else if (activation === "relu6") { + return relu62({ inputs: { x }, backend: backend2 }); + } else if (activation === "prelu") { + return prelu2({ inputs: { x, alpha: preluActivationWeights }, backend: backend2 }); + } else if (activation === "leakyrelu") { + return leakyRelu2({ inputs: { x }, backend: backend2, attrs: { alpha: leakyreluAlpha } }); + } else if (activation === "sigmoid") { + return sigmoid2({ inputs: { x }, backend: backend2 }); + } + throw new Error(`Activation ${activation} has not been implemented for the CPU backend.`); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchMatMul.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reshape.js + init_define_BUILD_VERSION(); + function reshape2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { shape } = attrs; + const xSize = util_exports.sizeFromShape(x.shape); + const $shape = util_exports.inferFromImplicitShape(shape, xSize); + const $xSize = util_exports.sizeFromShape($shape); + util_exports.assert(xSize === $xSize, () => `The new shape (${$shape}) has ${$xSize} elements and the old shape (${x.shape}) has ${xSize} elements. The new shape and old shape must have the same number of elements.`); + backend2.incRef(x.dataId); + const xData = backend2.data.get(x.dataId); + if (xData.complexTensorInfos != null) { + const real4 = xData.complexTensorInfos.real; + const imag4 = xData.complexTensorInfos.imag; + real4.shape = $shape; + imag4.shape = $shape; + } + return { dataId: x.dataId, shape: $shape, dtype: x.dtype }; + } + var reshapeConfig = { + kernelName: Reshape, + backendName: "cpu", + kernelFunc: reshape2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchMatMul.js + function batchMatMul(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b } = inputs; + const { transposeA, transposeB } = attrs; + assertNotComplex([a, b], "matMul"); + const aRank = a.shape.length; + const bRank = b.shape.length; + const innerShapeA = transposeA ? a.shape[aRank - 2] : a.shape[aRank - 1]; + const innerShapeB = transposeB ? b.shape[bRank - 1] : b.shape[bRank - 2]; + const outerShapeA = transposeA ? a.shape[aRank - 1] : a.shape[aRank - 2]; + const outerShapeB = transposeB ? b.shape[bRank - 2] : b.shape[bRank - 1]; + const outerDimsA = a.shape.slice(0, -2); + const outerDimsB = b.shape.slice(0, -2); + const batchDimA = util_exports.sizeFromShape(outerDimsA); + const batchDimB = util_exports.sizeFromShape(outerDimsB); + const outShapeOuterDims = broadcast_util_exports.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2)); + const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]); + util_exports.assert(innerShapeA === innerShapeB, () => `Error in matMul: inner shapes (${innerShapeA}) and (${innerShapeB}) of Tensors with shapes ${a.shape} and ${b.shape} and transposeA=${transposeA} and transposeB=${transposeB} must match.`); + const a3dShape = transposeA ? [batchDimA, innerShapeA, outerShapeA] : [batchDimA, outerShapeA, innerShapeA]; + const b3dShape = transposeB ? [batchDimB, outerShapeB, innerShapeB] : [batchDimB, innerShapeB, outerShapeB]; + const a3d = reshape2({ inputs: { x: a }, backend: backend2, attrs: { shape: a3dShape } }); + const b3d = reshape2({ inputs: { x: b }, backend: backend2, attrs: { shape: b3dShape } }); + const sharedDim = transposeA ? a3d.shape[1] : a3d.shape[2]; + const leftDim = transposeA ? a3d.shape[2] : a3d.shape[1]; + const rightDim = transposeB ? b3d.shape[1] : b3d.shape[2]; + const batchDim = Math.max(batchDimA, batchDimB); + const a3dValues = backend2.data.get(a3d.dataId).values; + const b3dValues = backend2.data.get(b3d.dataId).values; + const a3dStrides = util_exports.computeStrides(a3d.shape); + const b3dStrides = util_exports.computeStrides(b3d.shape); + const [aBatch, aOuterStep, aInnerStep] = transposeA ? [a3dStrides[0], 1, a3dStrides[1]] : [a3dStrides[0], a3dStrides[1], 1]; + const [bInnerStep, bOuterStep, bBatch] = transposeB ? [1, b3dStrides[1], b3dStrides[0]] : [b3dStrides[1], 1, b3dStrides[0]]; + const size = leftDim * rightDim; + const result = buffer([batchDim, leftDim, rightDim], a3d.dtype); + const resVals = result.values; + const blockSize = backend2.blockSize; + for (let bi = 0; bi < batchDim; bi++) { + for (let i0 = 0; i0 < leftDim; i0 += blockSize) { + for (let j0 = 0; j0 < rightDim; j0 += blockSize) { + for (let k02 = 0; k02 < sharedDim; k02 += blockSize) { + const iBlock = Math.min(i0 + blockSize, leftDim); + const jBlock = Math.min(j0 + blockSize, rightDim); + const kBlock = Math.min(k02 + blockSize, sharedDim); + for (let i = i0; i < iBlock; i++) { + for (let j = j0; j < jBlock; j++) { + let sum6 = 0; + for (let k = k02; k < kBlock; k++) { + const batchOffsetA = Math.min(bi, batchDimA - 1) * aBatch; + const batchOffsetB = Math.min(bi, batchDimB - 1) * bBatch; + const aVal = a3dValues[batchOffsetA + i * aOuterStep + k * aInnerStep]; + const bVal = b3dValues[k * bInnerStep + j * bOuterStep + batchOffsetB]; + sum6 += aVal * bVal; + } + resVals[bi * size + (i * rightDim + j)] += sum6; + } + } + } + } + } + } + backend2.disposeIntermediateTensorInfo(a3d); + backend2.disposeIntermediateTensorInfo(b3d); + return backend2.makeTensorInfo(outShape, result.dtype, result.values); + } + var batchMatMulConfig = { + kernelName: BatchMatMul, + backendName: "cpu", + kernelFunc: batchMatMul + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/_FusedMatMul.js + function _fusedMatMul(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b, bias, preluActivationWeights } = inputs; + const { transposeA, transposeB, activation, leakyreluAlpha } = attrs; + let current; + let addRes; + let activationRes; + const intermediates = []; + const matMulRes = batchMatMul({ inputs: { a, b }, attrs: { transposeA, transposeB }, backend: backend2 }); + current = matMulRes; + if (bias) { + addRes = add3({ inputs: { a: current, b: bias }, backend: backend2 }); + intermediates.push(current); + current = addRes; + } + if (activation) { + activationRes = applyActivation2(backend2, current, activation, preluActivationWeights, leakyreluAlpha); + intermediates.push(current); + current = activationRes; + } + for (const i of intermediates) { + backend2.disposeIntermediateTensorInfo(i); + } + return current; + } + var _fusedMatMulConfig = { + kernelName: _FusedMatMul, + backendName: "cpu", + kernelFunc: _fusedMatMul + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Acos.js + init_define_BUILD_VERSION(); + var acos2 = unaryKernelFunc(Acos, (xi) => Math.acos(xi)); + var acosConfig = { + kernelName: Acos, + backendName: "cpu", + kernelFunc: acos2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Acosh.js + init_define_BUILD_VERSION(); + var acosh2 = unaryKernelFunc(Acosh, (xi) => Math.acosh(xi)); + var acoshConfig = { + kernelName: Acosh, + backendName: "cpu", + kernelFunc: acosh2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AddN.js + init_define_BUILD_VERSION(); + function addN(args) { + const { inputs, backend: backend2 } = args; + const tensors = inputs; + assertNotComplex(inputs, "addN"); + const vals = tensors.map((t) => backend2.data.get(t.dataId).values); + const outBuf = buffer(tensors[0].shape, tensors[0].dtype); + const outVals = outBuf.values; + for (let i = 0; i < tensors.length; i++) { + const currVals = vals[i]; + for (let j = 0; j < outVals.length; j++) { + outVals[j] += currVals[j]; + } + } + return backend2.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values); + } + var addNConfig = { + kernelName: AddN, + backendName: "cpu", + kernelFunc: addN + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/All.js + init_define_BUILD_VERSION(); + function all2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + assertNotComplex(x, "all"); + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + if (permutedAxes != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("all", axes, $x.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes($x.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const vals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(outShape), $x.dtype); + const aVals = backend2.data.get($x.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let all5 = aVals[offset]; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + all5 = all5 && value; + } + vals[i] = all5; + } + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo($x); + } + const result = backend2.makeTensorInfo(outShape, $x.dtype, vals); + if (keepDims) { + const expandedShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + const reshapedResult = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: expandedShape } }); + backend2.disposeIntermediateTensorInfo(result); + return reshapedResult; + } + return result; + } + var allConfig = { + kernelName: All, + backendName: "cpu", + kernelFunc: all2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Any.js + init_define_BUILD_VERSION(); + function any2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + assertNotComplex(x, "any"); + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + if (permutedAxes != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("any", axes, $x.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes($x.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const vals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(outShape), $x.dtype); + const aVals = backend2.data.get($x.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let anyVal = aVals[offset]; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + anyVal = anyVal || value; + } + vals[i] = anyVal; + } + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo($x); + } + const result = backend2.makeTensorInfo(outShape, $x.dtype, vals); + if (keepDims) { + const expandedShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + const reshapedResult = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: expandedShape } }); + backend2.disposeIntermediateTensorInfo(result); + return reshapedResult; + } + return result; + } + var anyConfig = { + kernelName: Any, + backendName: "cpu", + kernelFunc: any2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ArgMax.js + init_define_BUILD_VERSION(); + function argMax2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis } = attrs; + assertNotComplex(x, "argMax"); + let axes = util_exports.parseAxisParam(axis, x.shape); + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + const intermediateTensorInfos = []; + if (permutedAxes != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + intermediateTensorInfos.push($x); + axes = backend_util_exports.getInnerMostAxes(axes.length, $x.shape.length); + } + axes = [axes[0]]; + backend_util_exports.assertAxesAreInnerMostDims("argMax", axes, $x.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes($x.shape, axes); + const outSize = util_exports.sizeFromShape(outShape); + const vals = util_exports.makeZerosTypedArray(outSize, "int32"); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const aVals = backend2.data.get($x.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let max6 = aVals[offset]; + let maxIndex = 0; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + if (value > max6) { + max6 = value; + maxIndex = j; + } + } + vals[i] = maxIndex; + } + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return backend2.makeTensorInfo(outShape, "int32", vals); + } + var argMaxConfig = { + kernelName: ArgMax, + backendName: "cpu", + kernelFunc: argMax2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ArgMin.js + init_define_BUILD_VERSION(); + function argMin2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis } = attrs; + assertNotComplex(x, "argMin"); + let axes = util_exports.parseAxisParam(axis, x.shape); + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + const intermediateTensorInfos = []; + if (permutedAxes != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + intermediateTensorInfos.push($x); + axes = backend_util_exports.getInnerMostAxes(axes.length, $x.shape.length); + } + axes = [axes[0]]; + backend_util_exports.assertAxesAreInnerMostDims("argMin", axes, $x.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes($x.shape, axes); + const outSize = util_exports.sizeFromShape(outShape); + const vals = util_exports.makeZerosTypedArray(outSize, "int32"); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const aVals = backend2.data.get($x.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let min6 = aVals[offset]; + let minIndex = 0; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + if (value < min6) { + min6 = value; + minIndex = j; + } + } + vals[i] = minIndex; + } + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return backend2.makeTensorInfo(outShape, "int32", vals); + } + var argMinConfig = { + kernelName: ArgMin, + backendName: "cpu", + kernelFunc: argMin2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Asin.js + init_define_BUILD_VERSION(); + var asin2 = unaryKernelFunc(Asin, (xi) => Math.asin(xi)); + var asinConfig = { + kernelName: Asin, + backendName: "cpu", + kernelFunc: asin2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Asinh.js + init_define_BUILD_VERSION(); + var asinh2 = unaryKernelFunc(Asinh, (xi) => Math.asinh(xi)); + var asinhConfig = { + kernelName: Asinh, + backendName: "cpu", + kernelFunc: asinh2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atan.js + init_define_BUILD_VERSION(); + var atan3 = unaryKernelFunc(Atan, (xi) => Math.atan(xi)); + var atanConfig = { + kernelName: Atan, + backendName: "cpu", + kernelFunc: atan3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atan2.js + init_define_BUILD_VERSION(); + var atan2Impl = createSimpleBinaryKernelImpl((aValue, bValue) => Math.atan2(aValue, bValue)); + var atan22 = binaryKernelFunc(Atan2, atan2Impl); + var atan2Config = { + kernelName: Atan2, + backendName: "cpu", + kernelFunc: atan22 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atanh.js + init_define_BUILD_VERSION(); + var atanh2 = unaryKernelFunc(Atanh, (xi) => Math.atanh(xi)); + var atanhConfig = { + kernelName: Atanh, + backendName: "cpu", + kernelFunc: atanh2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/pool_utils.js + init_define_BUILD_VERSION(); + function pool2(xValues, xShape, dtype, strides, convInfo, poolType) { + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const initialValue = poolType === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY; + const output = buffer(convInfo.outShape, dtype); + const outputVals = output.values; + const outputBatchStrides = convInfo.outShape[1] * convInfo.outShape[2] * convInfo.outShape[3]; + const outputRowStrides = convInfo.outShape[2] * convInfo.outShape[3]; + const outputColStrides = convInfo.outShape[3]; + for (let b = 0; b < convInfo.batchSize; ++b) { + const outputBatchOffset = b * outputBatchStrides; + const inputBatchOffset = b * strides[0]; + for (let d = 0; d < convInfo.inChannels; ++d) { + for (let yR = 0; yR < convInfo.outHeight; ++yR) { + const xRCorner = yR * strideHeight - padTop; + const xRMin = Math.max(0, xRCorner); + const xRMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRCorner); + const outputRowOffset = outputBatchOffset + yR * outputRowStrides; + for (let yC = 0; yC < convInfo.outWidth; ++yC) { + const xCCorner = yC * strideWidth - padLeft; + const xCMin = Math.max(0, xCCorner); + const xCMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xCCorner); + let minMaxValue = initialValue; + let avgValue = 0; + let count2 = 0; + for (let xR = xRMin; xR < xRMax; xR += dilationHeight) { + const xROffset = inputBatchOffset + xR * strides[1]; + for (let xC = xCMin; xC < xCMax; xC += dilationWidth) { + const xCOffset = xROffset + xC * strides[2]; + const pixel = xValues[xCOffset + d]; + if (poolType === "max" && pixel > minMaxValue) { + minMaxValue = pixel; + } else if (poolType === "avg") { + avgValue += pixel; + count2++; + } + } + if (isNaN(minMaxValue)) { + break; + } + } + const outputOffset = outputRowOffset + yC * outputColStrides + d; + outputVals[outputOffset] = poolType === "avg" ? avgValue / count2 : minMaxValue; + } + } + } + } + return output; + } + function maxPoolPositions(xValues, xShape, dtype, convInfo, flattenPositions = false, includeBatchInIndex = false) { + const maxPositions = buffer(convInfo.outShape, "int32"); + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const xBuf = buffer(xShape, dtype, xValues); + for (let b = 0; b < convInfo.batchSize; ++b) { + for (let d = 0; d < convInfo.inChannels; ++d) { + for (let yR = 0; yR < convInfo.outHeight; ++yR) { + const xRCorner = yR * strideHeight - padTop; + let xRMin = xRCorner; + while (xRMin < 0) { + xRMin += dilationHeight; + } + const xRMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRCorner); + for (let yC = 0; yC < convInfo.outWidth; ++yC) { + const xCCorner = yC * strideWidth - padLeft; + let xCMin = xCCorner; + while (xCMin < 0) { + xCMin += dilationWidth; + } + const xCMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xCCorner); + let maxValue = Number.NEGATIVE_INFINITY; + let maxPosition = -1; + for (let xR = xRMin; xR < xRMax; xR += dilationHeight) { + const wR = xR - xRCorner; + for (let xC = xCMin; xC < xCMax; xC += dilationWidth) { + const wC = xC - xCCorner; + const pixel = xBuf.get(b, xR, xC, d); + if (pixel > maxValue) { + maxValue = pixel; + if (flattenPositions) { + maxPosition = includeBatchInIndex ? ((b * convInfo.inHeight + xR) * convInfo.inWidth + xC) * convInfo.inChannels + d : (xR * convInfo.inWidth + xC) * convInfo.inChannels + d; + } else { + maxPosition = wR * effectiveFilterWidth + wC; + } + } + } + } + maxPositions.set(maxPosition, b, yR, yC, d); + } + } + } + } + return maxPositions; + } + function pool3d2(xValues, xShape, dtype, strides, convInfo, poolType) { + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = convInfo.padInfo.front; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const initialValue = poolType === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY; + const output = buffer(convInfo.outShape, dtype); + const outputVals = output.values; + const outputBatchStrides = convInfo.outShape[1] * convInfo.outShape[2] * convInfo.outShape[3] * convInfo.outShape[4]; + const outputDepthStrides = convInfo.outShape[2] * convInfo.outShape[3] * convInfo.outShape[4]; + const outputRowStrides = convInfo.outShape[3] * convInfo.outShape[4]; + const outputColStrides = convInfo.outShape[4]; + for (let batch = 0; batch < convInfo.batchSize; ++batch) { + const outputBatchOffset = batch * outputBatchStrides; + const inputBatchOffset = batch * strides[0]; + for (let channel = 0; channel < convInfo.inChannels; ++channel) { + for (let yDepth = 0; yDepth < convInfo.outDepth; ++yDepth) { + const xDepthCorner = yDepth * strideDepth - padFront; + let xDepthMin = xDepthCorner; + while (xDepthMin < 0) { + xDepthMin += dilationDepth; + } + const xDepthMax = Math.min(convInfo.inDepth, effectiveFilterDepth + xDepthCorner); + const outputDepthOffset = outputBatchOffset + yDepth * outputDepthStrides; + for (let yRow = 0; yRow < convInfo.outHeight; ++yRow) { + const xRowCorner = yRow * strideHeight - padTop; + let xRowMin = xRowCorner; + while (xRowMin < 0) { + xRowMin += dilationHeight; + } + const xRowMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRowCorner); + const outputRowOffset = outputDepthOffset + yRow * outputRowStrides; + for (let yCol = 0; yCol < convInfo.outWidth; ++yCol) { + const xColCorner = yCol * strideWidth - padLeft; + let xColMin = xColCorner; + while (xColMin < 0) { + xColMin += dilationWidth; + } + const xColMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xColCorner); + const outputColOffset = outputRowOffset + yCol * outputColStrides; + let minMaxValue = initialValue; + let avgValue = 0; + let count2 = 0; + for (let xDepth = xDepthMin; xDepth < xDepthMax; xDepth += dilationDepth) { + const xDepthOffset = inputBatchOffset + xDepth * strides[1]; + for (let xRow = xRowMin; xRow < xRowMax; xRow += dilationHeight) { + const xRowOffset = xDepthOffset + xRow * strides[2]; + for (let xCol = xColMin; xCol < xColMax; xCol += dilationWidth) { + const xColOffset = xRowOffset + xCol * strides[3]; + const pixel = xValues[xColOffset + channel]; + if (poolType === "max" && pixel > minMaxValue) { + minMaxValue = pixel; + } else if (poolType === "avg") { + avgValue += pixel; + count2++; + } + if (isNaN(minMaxValue)) { + break; + } + } + if (isNaN(minMaxValue)) { + break; + } + } + if (isNaN(minMaxValue)) { + break; + } + } + const outputOffset = outputColOffset + channel; + outputVals[outputOffset] = poolType === "avg" ? avgValue / count2 : minMaxValue; + } + } + } + } + } + return output; + } + function maxPool3dPositions(xBuf, convInfo) { + const maxPositions = buffer(convInfo.outShape, "int32"); + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = convInfo.padInfo.front; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + for (let batch = 0; batch < convInfo.batchSize; ++batch) { + for (let channel = 0; channel < convInfo.inChannels; ++channel) { + for (let yDepth = 0; yDepth < convInfo.outDepth; ++yDepth) { + const xDepthCorner = yDepth * strideDepth - padFront; + let xDepthMin = xDepthCorner; + while (xDepthMin < 0) { + xDepthMin += dilationDepth; + } + const xDepthMax = Math.min(convInfo.inDepth, effectiveFilterDepth + xDepthCorner); + for (let yRow = 0; yRow < convInfo.outHeight; ++yRow) { + const xRowCorner = yRow * strideHeight - padTop; + let xRowMin = xRowCorner; + while (xRowMin < 0) { + xRowMin += dilationHeight; + } + const xRowMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRowCorner); + for (let yCol = 0; yCol < convInfo.outWidth; ++yCol) { + const xColCorner = yCol * strideWidth - padLeft; + let xColMin = xColCorner; + while (xColMin < 0) { + xColMin += dilationWidth; + } + const xColMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xColCorner); + let maxValue = Number.NEGATIVE_INFINITY; + let maxPosition = -1; + for (let xDepth = xDepthMin; xDepth < xDepthMax; xDepth += dilationDepth) { + const wDepth = xDepth - xDepthCorner; + for (let xRow = xRowMin; xRow < xRowMax; xRow += dilationHeight) { + const wRow = xRow - xRowCorner; + for (let xCol = xColMin; xCol < xColMax; xCol += dilationWidth) { + const wCol = xCol - xColCorner; + const pixel = xBuf.get(batch, xDepth, xRow, xCol, channel); + if (pixel >= maxValue) { + maxValue = pixel; + maxPosition = wDepth * effectiveFilterHeight * effectiveFilterWidth + wRow * effectiveFilterHeight + wCol; + } + } + } + } + maxPositions.set(maxPosition, batch, yDepth, yRow, yCol, channel); + } + } + } + } + } + return maxPositions; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool.js + function avgPool2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + assertNotComplex(x, "avgPool"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = 1; + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + let res; + if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 && util_exports.arraysEqual(convInfo.inShape, convInfo.outShape)) { + res = identity({ inputs: { x }, backend: backend2 }); + } else { + const xValues = backend2.data.get(x.dataId).values; + const strides2 = util_exports.computeStrides(x.shape); + const buffer2 = pool2(xValues, x.shape, x.dtype, strides2, convInfo, "avg"); + res = backend2.makeTensorInfo(convInfo.outShape, x.dtype, buffer2.values); + } + return res; + } + var avgPoolConfig = { + kernelName: AvgPool, + backendName: "cpu", + kernelFunc: avgPool2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool3D.js + init_define_BUILD_VERSION(); + function avgPool3D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { filterSize, strides, pad: pad3, dimRoundingMode, dataFormat } = attrs; + assertNotComplex(x, "avgPool3d"); + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode, dataFormat); + const xValues = backend2.data.get(x.dataId).values; + const outBuf = pool3d2(xValues, x.shape, x.dtype, util_exports.computeStrides(x.shape), convInfo, "avg"); + return backend2.makeTensorInfo(outBuf.shape, "float32", outBuf.values); + } + var avgPool3DConfig = { + kernelName: AvgPool3D, + backendName: "cpu", + kernelFunc: avgPool3D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool3DGrad.js + init_define_BUILD_VERSION(); + function avgPool3DGrad(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + assertNotComplex([dy, input2], "avgPool3DGrad"); + const convInfo = backend_util_exports.computePool3DInfo(input2.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const filterDepth = convInfo.filterDepth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const dx = buffer(input2.shape, "float32"); + const avgMultiplier = 1 / (filterDepth * filterHeight * filterWidth); + const dyBuf = backend2.bufferSync(dy); + for (let batch = 0; batch < convInfo.batchSize; ++batch) { + for (let channel = 0; channel < convInfo.inChannels; ++channel) { + for (let dxDepth = 0; dxDepth < convInfo.inDepth; ++dxDepth) { + for (let dxRow = 0; dxRow < convInfo.inHeight; ++dxRow) { + for (let dxCol = 0; dxCol < convInfo.inWidth; ++dxCol) { + const dyDepthCorner = dxDepth - padFront; + const dyRowCorner = dxRow - padTop; + const dyColCorner = dxCol - padLeft; + let dotProd = 0; + for (let wDepth = 0; wDepth < effectiveFilterDepth; wDepth += dilationDepth) { + const dyDepth = (dyDepthCorner + wDepth) / strideDepth; + if (dyDepth < 0 || dyDepth >= convInfo.outDepth || Math.floor(dyDepth) !== dyDepth) { + continue; + } + for (let wRow = 0; wRow < effectiveFilterHeight; wRow += dilationHeight) { + const dyRow = (dyRowCorner + wRow) / strideHeight; + if (dyRow < 0 || dyRow >= convInfo.outHeight || Math.floor(dyRow) !== dyRow) { + continue; + } + for (let wCol = 0; wCol < effectiveFilterWidth; wCol += dilationWidth) { + const dyCol = (dyColCorner + wCol) / strideWidth; + if (dyCol < 0 || dyCol >= convInfo.outWidth || Math.floor(dyCol) !== dyCol) { + continue; + } + const pixel = dyBuf.get(batch, dyDepth, dyRow, dyCol, channel); + dotProd += pixel; + } + } + } + dx.set(dotProd * avgMultiplier, batch, dxDepth, dxRow, dxCol, channel); + } + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var avgPool3DGradConfig2 = { + kernelName: AvgPool3DGrad, + backendName: "cpu", + kernelFunc: avgPool3DGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPoolGrad.js + init_define_BUILD_VERSION(); + function avgPoolGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const x = input2; + assertNotComplex([dy, input2], "avgPoolGrad"); + const { filterSize, strides, pad: pad3 } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3); + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const dx = buffer(x.shape, "float32"); + const avgMultiplier = 1 / (filterHeight * filterWidth); + const dyData = backend2.data.get(dy.dataId).values; + const dyBuf = buffer(dy.shape, "float32", dyData); + for (let b = 0; b < convInfo.batchSize; ++b) { + for (let d = 0; d < convInfo.inChannels; ++d) { + for (let dxR = 0; dxR < convInfo.inHeight; ++dxR) { + for (let dxC = 0; dxC < convInfo.inWidth; ++dxC) { + const dyRCorner = dxR - padTop; + const dyCCorner = dxC - padLeft; + let dotProd = 0; + for (let wR = 0; wR < effectiveFilterHeight; wR += dilationHeight) { + const dyR = (dyRCorner + wR) / strideHeight; + if (dyR < 0 || dyR >= convInfo.outHeight || Math.floor(dyR) !== dyR) { + continue; + } + for (let wC = 0; wC < effectiveFilterWidth; wC += dilationWidth) { + const dyC = (dyCCorner + wC) / strideWidth; + if (dyC < 0 || dyC >= convInfo.outWidth || Math.floor(dyC) !== dyC) { + continue; + } + const pixel = dyBuf.get(b, dyR, dyC, d); + dotProd += pixel; + } + } + dx.set(dotProd * avgMultiplier, b, dxR, dxC, d); + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var avgPoolGradConfig2 = { + kernelName: AvgPoolGrad, + backendName: "cpu", + kernelFunc: avgPoolGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchNorm.js + init_define_BUILD_VERSION(); + function batchNorm2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, scale: scale2, offset, mean: mean4, variance } = inputs; + util_exports.assert(mean4.shape.length === variance.shape.length, () => "Batch normalization gradient requires mean and variance to have equal ranks."); + util_exports.assert(offset == null || mean4.shape.length === offset.shape.length, () => "Batch normalization gradient requires mean and offset to have equal ranks."); + util_exports.assert(scale2 == null || mean4.shape.length === scale2.shape.length, () => "Batch normalization gradient requires mean and scale to have equal ranks."); + assertNotComplex([x, mean4, variance, scale2, offset], "batchNorm"); + let { varianceEpsilon } = attrs; + if (varianceEpsilon == null) { + varianceEpsilon = 1e-3; + } + const xVals = backend2.data.get(x.dataId).values; + const mVals = backend2.data.get(mean4.dataId).values; + const varVals = backend2.data.get(variance.dataId).values; + const sVals = scale2 ? backend2.data.get(scale2.dataId).values : new Float32Array([1]); + const offVals = offset ? backend2.data.get(offset.dataId).values : new Float32Array([0]); + const outVals = new Float32Array(xVals.length); + const offValsLength = offVals.length; + const sValsLength = sVals.length; + const varValsLength = varVals.length; + const mValsLength = mVals.length; + let offi = 0; + let mi = 0; + let si = 0; + let vi = 0; + for (let i = 0; i < xVals.length; ++i) { + outVals[i] = offVals[offi++] + (xVals[i] - mVals[mi++]) * sVals[si++] / Math.sqrt(varVals[vi++] + varianceEpsilon); + if (offi >= offValsLength) { + offi = 0; + } + if (mi >= mValsLength) { + mi = 0; + } + if (si >= sValsLength) { + si = 0; + } + if (vi >= varValsLength) { + vi = 0; + } + } + return backend2.makeTensorInfo(x.shape, x.dtype, outVals); + } + var batchNormConfig = { + kernelName: FusedBatchNorm, + backendName: "cpu", + kernelFunc: batchNorm2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchToSpaceND.js + init_define_BUILD_VERSION(); + function batchToSpaceND2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, crops } = attrs; + assertNotComplex([x], "batchToSpaceND"); + const prod5 = blockShape.reduce((a, b) => a * b); + const reshaped = backend_util_exports.getReshaped(x.shape, blockShape, prod5); + const permuted = backend_util_exports.getPermuted(reshaped.length, blockShape.length); + const reshapedPermuted = backend_util_exports.getReshapedPermuted(x.shape, blockShape, prod5); + const sliceBeginCoords = backend_util_exports.getSliceBeginCoords(crops, blockShape.length); + const sliceSize = backend_util_exports.getSliceSize(reshapedPermuted, crops, blockShape.length); + const xReshaped = reshape2({ inputs: { x }, backend: backend2, attrs: { shape: reshaped } }); + const xTransposed = transpose2({ inputs: { x: xReshaped }, backend: backend2, attrs: { perm: permuted } }); + const xTransposedReshaped = reshape2({ inputs: { x: xTransposed }, backend: backend2, attrs: { shape: reshapedPermuted } }); + const result = slice2({ + inputs: { x: xTransposedReshaped }, + backend: backend2, + attrs: { begin: sliceBeginCoords, size: sliceSize } + }); + backend2.disposeIntermediateTensorInfo(xReshaped); + backend2.disposeIntermediateTensorInfo(xTransposed); + backend2.disposeIntermediateTensorInfo(xTransposedReshaped); + return result; + } + var batchToSpaceNDConfig = { + kernelName: BatchToSpaceND, + backendName: "cpu", + kernelFunc: batchToSpaceND2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Bincount.js + init_define_BUILD_VERSION(); + function bincount2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, weights } = inputs; + const { size } = attrs; + const xVals = backend2.data.get(x.dataId).values; + const weightsVals = backend2.data.get(weights.dataId).values; + const outVals = bincountImpl(xVals, weightsVals, weights.dtype, weights.shape, size); + return backend2.makeTensorInfo([size], weights.dtype, outVals); + } + var bincountConfig = { + kernelName: Bincount, + backendName: "cpu", + kernelFunc: bincount2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BroadcastArgs.js + init_define_BUILD_VERSION(); + function broadcastArgs(args) { + const { inputs, backend: backend2 } = args; + const { s0, s1 } = inputs; + const s0Vals = backend2.data.get(s0.dataId).values; + const s1Vals = backend2.data.get(s1.dataId).values; + const broadcastShape = backend_util_exports.assertAndGetBroadcastShape(Array.from(s0Vals), Array.from(s1Vals)); + return backend2.makeTensorInfo([broadcastShape.length], "int32", Int32Array.from(broadcastShape)); + } + var broadcastArgsConfig = { + kernelName: BroadcastArgs, + backendName: "cpu", + kernelFunc: broadcastArgs + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ClipByValue.js + init_define_BUILD_VERSION(); + var clipByValue2 = unaryKernelFunc(ClipByValue, (xi, attrs) => { + const clipAttrs = attrs; + if (xi > clipAttrs.clipValueMax) { + return clipAttrs.clipValueMax; + } + return xi < clipAttrs.clipValueMin ? clipAttrs.clipValueMin : xi; + }); + var clipByValueConfig = { + kernelName: ClipByValue, + backendName: "cpu", + kernelFunc: clipByValue2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ComplexAbs.js + init_define_BUILD_VERSION(); + var complexAbs = (args) => { + const { x } = args.inputs; + const cpuBackend = args.backend; + const resultValues = new Float32Array(util_exports.sizeFromShape(x.shape)); + const complexVals = cpuBackend.data.get(x.dataId); + const real4 = complexVals.complexTensorInfos.real; + const imag4 = complexVals.complexTensorInfos.imag; + const realVals = cpuBackend.data.get(real4.dataId).values; + const imagVals = cpuBackend.data.get(imag4.dataId).values; + for (let i = 0; i < realVals.length; i++) { + const real5 = realVals[i]; + const imag5 = imagVals[i]; + resultValues[i] = Math.hypot(real5, imag5); + } + return cpuBackend.makeOutput(resultValues, x.shape, "float32"); + }; + var complexAbsConfig = { + kernelName: ComplexAbs, + backendName: "cpu", + kernelFunc: complexAbs + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Imag.js + init_define_BUILD_VERSION(); + function imag2(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const imag4 = backend2.data.get(input2.dataId).complexTensorInfos.imag; + const imagVal = backend2.data.get(imag4.dataId).values; + return backend2.makeTensorInfo(imag4.shape, imag4.dtype, imagVal); + } + var imagConfig = { + kernelName: Imag, + backendName: "cpu", + kernelFunc: imag2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat.js + function concat2(args) { + const { inputs, backend: backend2, attrs } = args; + const { axis } = attrs; + const $axis = util_exports.parseAxisParam(axis, inputs[0].shape)[0]; + let outShape = backend_util_exports.computeOutShape(inputs.map((t) => t.shape), $axis); + if (util_exports.sizeFromShape(outShape) === 0) { + return backend2.makeTensorInfo(outShape, inputs[0].dtype, []); + } + const $inputs = inputs.filter((t) => util_exports.sizeFromShape(t.shape) > 0); + if ($inputs.length === 1) { + return identity({ inputs: { x: $inputs[0] }, backend: backend2 }); + } + const shapes = $inputs.map((t) => t.shape); + backend_util_exports.assertParamsConsistent(shapes, $axis); + if ($inputs[0].dtype === "complex64") { + const reals = $inputs.map((t) => real2({ inputs: { input: t }, backend: backend2 })); + const imags = $inputs.map((t) => imag2({ inputs: { input: t }, backend: backend2 })); + const realConcated = concat2({ inputs: reals, backend: backend2, attrs: { axis: $axis } }); + const imagConcated = concat2({ inputs: imags, backend: backend2, attrs: { axis: $axis } }); + const result = complex2({ inputs: { real: realConcated, imag: imagConcated }, backend: backend2 }); + reals.forEach((r) => backend2.disposeIntermediateTensorInfo(r)); + imags.forEach((i) => backend2.disposeIntermediateTensorInfo(i)); + backend2.disposeIntermediateTensorInfo(realConcated); + backend2.disposeIntermediateTensorInfo(imagConcated); + return result; + } + const inputs2D = $inputs.map((t) => { + const innerSize = util_exports.sizeFromShape(t.shape.slice($axis)); + const shape = [-1, innerSize]; + return reshape2({ inputs: { x: t }, backend: backend2, attrs: { shape } }); + }); + const inputsValShapes = inputs2D.map((t) => { + return { vals: backend2.data.get(t.dataId).values, shape: t.shape }; + }); + outShape = backend_util_exports.computeOutShape(inputs2D.map((t) => t.shape), 1); + const simplyConcat = inputs2D[0].shape[0] === 1; + const outVals = concatImpl(inputsValShapes, outShape, inputs[0].dtype, simplyConcat); + const finalOutShape = backend_util_exports.computeOutShape($inputs.map((t) => t.shape), $axis); + const outInfo = backend2.makeTensorInfo(finalOutShape, inputs[0].dtype, outVals); + inputs2D.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return outInfo; + } + var concatConfig = { + kernelName: Concat, + backendName: "cpu", + kernelFunc: concat2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2D.js + init_define_BUILD_VERSION(); + function conv2D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dataFormat, dilations, dimRoundingMode } = attrs; + assertNotComplex([x, filter], "conv2d"); + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode, false, $dataFormat); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const padLeft = convInfo.padInfo.left; + const padTop = convInfo.padInfo.top; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const y = new TensorBuffer(convInfo.outShape, x.dtype); + const xStrides = util_exports.computeStrides(x.shape); + const filterStrides = util_exports.computeStrides(filter.shape); + const xBatchStride = xStrides[0]; + const xRowStride = isChannelsLast ? xStrides[1] : xStrides[2]; + const xColStride = isChannelsLast ? xStrides[2] : 1; + const xChannelStride = isChannelsLast ? 1 : xStrides[1]; + const yBatchStride = y.strides[0]; + const yRowStride = isChannelsLast ? y.strides[1] : y.strides[2]; + const yColStride = isChannelsLast ? y.strides[2] : 1; + const yChannelStride = isChannelsLast ? 1 : y.strides[1]; + const xVals = backend2.data.get(x.dataId).values; + const wVals = backend2.data.get(filter.dataId).values; + const yVals = y.values; + for (let b = 0; b < convInfo.batchSize; ++b) { + const xOffset1 = b * xBatchStride; + const yOffset1 = b * yBatchStride; + for (let yR = 0; yR < convInfo.outHeight; ++yR) { + const yOffset2 = yOffset1 + yR * yRowStride; + const xRCorner = yR * convInfo.strideHeight - padTop; + for (let wR = 0; wR < filterHeight; ++wR) { + const xR = xRCorner + wR * dilationHeight; + if (xR < 0 || xR >= convInfo.inHeight) { + continue; + } + const wOffset1 = wR * filterStrides[0]; + const xOffset2 = xOffset1 + xR * xRowStride; + for (let yC = 0; yC < convInfo.outWidth; ++yC) { + const yOffset3 = yOffset2 + yC * yColStride; + const xCCorner = yC * convInfo.strideWidth - padLeft; + for (let wC = 0; wC < filterWidth; ++wC) { + const xC = xCCorner + wC * dilationWidth; + if (xC < 0 || xC >= convInfo.inWidth) { + continue; + } + const wOffset2 = wOffset1 + wC * filterStrides[1]; + const xOffset3 = xOffset2 + xC * xColStride; + let wOffset3 = wOffset2; + for (let d1 = 0; d1 < convInfo.inChannels; ++d1) { + const xVal = xVals[xOffset3 + d1 * xChannelStride]; + for (let d2 = 0; d2 < convInfo.outChannels; ++d2) { + yVals[yOffset3 + d2 * yChannelStride] += xVal * wVals[wOffset3 + d2]; + } + wOffset3 += convInfo.outChannels; + } + } + } + } + } + } + return backend2.makeTensorInfo(y.shape, y.dtype, yVals); + } + var conv2DConfig = { + kernelName: Conv2D, + backendName: "cpu", + kernelFunc: conv2D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2DBackpropFilter.js + init_define_BUILD_VERSION(); + function conv2DBackpropFilter2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, pad: pad3, dataFormat, dimRoundingMode, filterShape } = attrs; + assertNotComplex([x, dy], "conv2dBackpropFilter"); + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filterShape, strides, 1, pad3, dimRoundingMode, false, $dataFormat); + const { strideHeight, strideWidth, filterHeight, filterWidth } = convInfo; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const dW = new TensorBuffer(convInfo.filterShape, "float32"); + const leftPad = convInfo.padInfo.left; + const topPad = convInfo.padInfo.top; + const xVals = backend2.data.get(x.dataId).values; + const dyVals = backend2.data.get(dy.dataId).values; + const xBuf = new TensorBuffer(x.shape, x.dtype, xVals); + const dyBuf = new TensorBuffer(dy.shape, dy.dtype, dyVals); + for (let wR = 0; wR < filterHeight; ++wR) { + const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight)); + const yRMax = Math.min(convInfo.outHeight, (convInfo.inHeight + topPad - wR) / strideHeight); + for (let wC = 0; wC < filterWidth; ++wC) { + const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth)); + const yCMax = Math.min(convInfo.outWidth, (convInfo.inWidth + leftPad - wC) / strideWidth); + for (let d1 = 0; d1 < convInfo.inChannels; ++d1) { + for (let d2 = 0; d2 < convInfo.outChannels; ++d2) { + let dotProd = 0; + for (let b = 0; b < convInfo.batchSize; ++b) { + for (let yR = yRMin; yR < yRMax; ++yR) { + const xR = wR + yR * strideHeight - topPad; + for (let yC = yCMin; yC < yCMax; ++yC) { + const xC = wC + yC * strideWidth - leftPad; + if (isChannelsLast) { + dotProd += xBuf.get(b, xR, xC, d1) * dyBuf.get(b, yR, yC, d2); + } else { + dotProd += xBuf.get(b, d1, xR, xC) * dyBuf.get(b, d2, yR, yC); + } + } + } + } + dW.set(dotProd, wR, wC, d1, d2); + } + } + } + } + return backend2.makeTensorInfo(dW.shape, dW.dtype, dW.values); + } + var conv2DBackpropFilterConfig = { + kernelName: Conv2DBackpropFilter, + backendName: "cpu", + kernelFunc: conv2DBackpropFilter2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2DBackpropInput.js + init_define_BUILD_VERSION(); + function conv2DBackpropInput2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { inputShape, strides, pad: pad3, dataFormat, dimRoundingMode } = attrs; + assertNotComplex([dy, filter], "conv2dBackpropInput"); + const filterStrides = util_exports.computeStrides(filter.shape); + const dyStrides = util_exports.computeStrides(dy.shape); + let $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(inputShape, filter.shape, strides, 1, pad3, dimRoundingMode, false, $dataFormat); + const dx = new TensorBuffer(convInfo.inShape, "float32"); + const dxValues = dx.values; + const dyValues = backend2.data.get(dy.dataId).values; + const fltValues = backend2.data.get(filter.dataId).values; + const [fltS0, fltS1, fltS2] = filterStrides; + const { batchSize, filterHeight, filterWidth, inChannels, inHeight, inWidth, outChannels, outHeight, outWidth, strideHeight, strideWidth } = convInfo; + $dataFormat = convInfo.dataFormat; + const topPad = filterHeight - 1 - convInfo.padInfo.top; + const leftPad = filterWidth - 1 - convInfo.padInfo.left; + const isChannelsLast = $dataFormat === "channelsLast"; + const xBatchStride = dx.strides[0]; + const xRowStride = isChannelsLast ? dx.strides[1] : dx.strides[2]; + const xColStride = isChannelsLast ? dx.strides[2] : 1; + const xChannelStride = isChannelsLast ? 1 : dx.strides[1]; + const yBatchStride = dyStrides[0]; + const yRowStride = isChannelsLast ? dyStrides[1] : dyStrides[2]; + const yColStride = isChannelsLast ? dyStrides[2] : 1; + const yChannelStride = isChannelsLast ? 1 : dyStrides[1]; + for (let b = 0; b < batchSize; ++b) { + for (let d1 = 0; d1 < inChannels; ++d1) { + for (let xR = 0; xR < inHeight; ++xR) { + const xRCorner = xR - topPad; + const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight)); + const yRMax = Math.min(outHeight, (filterHeight + xRCorner) / strideHeight); + for (let xC = 0; xC < inWidth; ++xC) { + const xCCorner = xC - leftPad; + const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth)); + const yCMax = Math.min(outWidth, (filterWidth + xCCorner) / strideWidth); + let dotProd = 0; + for (let yR = xRMin; yR < yRMax; ++yR) { + const wR = yR * strideHeight - xRCorner; + for (let yC = xCMin; yC < yCMax; ++yC) { + const wC = yC * strideWidth - xCCorner; + const dyOffset = yBatchStride * b + yRowStride * yR + yColStride * yC; + const fltOffset = fltS0 * (filterHeight - 1 - wR) + fltS1 * (filterWidth - 1 - wC) + fltS2 * d1; + for (let d2 = 0; d2 < outChannels; ++d2) { + const pixel = dyValues[dyOffset + yChannelStride * d2]; + const weight = fltValues[fltOffset + d2]; + dotProd += pixel * weight; + } + } + } + const dxOffset = xBatchStride * b + xRowStride * xR + xColStride * xC + xChannelStride * d1; + dxValues[dxOffset] = dotProd; + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var conv2DBackpropInputConfig = { + kernelName: Conv2DBackpropInput, + backendName: "cpu", + kernelFunc: conv2DBackpropInput2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3D.js + init_define_BUILD_VERSION(); + function conv3D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dilations } = attrs; + assertNotComplex([x, filter], "conv3d"); + const convInfo = backend_util_exports.computeConv3DInfo(x.shape, filter.shape, strides, dilations, pad3); + const { filterDepth, filterHeight, filterWidth, dilationDepth, dilationHeight, dilationWidth, padInfo } = convInfo; + const padFront = padInfo.front; + const padLeft = padInfo.left; + const padTop = padInfo.top; + const y = new TensorBuffer(convInfo.outShape, x.dtype); + const xVals = backend2.data.get(x.dataId).values; + const wVals = backend2.data.get(filter.dataId).values; + const yVals = y.values; + const xStrides = util_exports.computeStrides(x.shape); + const filterStrides = util_exports.computeStrides(filter.shape); + for (let b = 0; b < convInfo.batchSize; ++b) { + const xOffset1 = b * xStrides[0]; + const yOffset1 = b * y.strides[0]; + for (let yF = 0; yF < convInfo.outDepth; ++yF) { + const yOffset2 = yOffset1 + yF * y.strides[1]; + const xFCorner = yF * convInfo.strideDepth - padFront; + for (let wF = 0; wF < filterDepth; ++wF) { + const xF = xFCorner + wF * dilationDepth; + if (xF < 0 || xF >= convInfo.inDepth) { + continue; + } + const wOffset1 = wF * filterStrides[0]; + const xOffset2 = xOffset1 + xF * xStrides[1]; + for (let yR = 0; yR < convInfo.outHeight; ++yR) { + const yOffset3 = yOffset2 + yR * y.strides[2]; + const xRCorner = yR * convInfo.strideHeight - padTop; + for (let wR = 0; wR < filterHeight; ++wR) { + const xR = xRCorner + wR * dilationHeight; + if (xR < 0 || xR >= convInfo.inHeight) { + continue; + } + const wOffset2 = wOffset1 + wR * filterStrides[1]; + const xOffset3 = xOffset2 + xR * xStrides[2]; + for (let yC = 0; yC < convInfo.outWidth; ++yC) { + const yOffset4 = yOffset3 + yC * convInfo.outChannels; + const xCCorner = yC * convInfo.strideWidth - padLeft; + for (let wC = 0; wC < filterWidth; ++wC) { + const xC = xCCorner + wC * dilationWidth; + if (xC < 0 || xC >= convInfo.inWidth) { + continue; + } + const wOffset3 = wOffset2 + wC * filterStrides[2]; + const xOffset4 = xOffset3 + xC * convInfo.inChannels; + let wOffset4 = wOffset3; + for (let d1 = 0; d1 < convInfo.inChannels; ++d1) { + const xVal = xVals[xOffset4 + d1]; + for (let d2 = 0; d2 < convInfo.outChannels; ++d2) { + yVals[yOffset4 + d2] += xVal * wVals[wOffset4 + d2]; + } + wOffset4 += convInfo.outChannels; + } + } + } + } + } + } + } + } + return backend2.makeTensorInfo(y.shape, y.dtype, y.values); + } + var conv3DConfig = { + kernelName: Conv3D, + backendName: "cpu", + kernelFunc: conv3D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3DBackpropFilterV2.js + init_define_BUILD_VERSION(); + function conv3DBackpropFilterV2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, pad: pad3, filterShape } = attrs; + assertNotComplex([x, dy], "conv3dBackpropFilterV2"); + const xStrides = util_exports.computeStrides(x.shape); + const dyStrides = util_exports.computeStrides(dy.shape); + const convInfo = backend_util_exports.computeConv3DInfo(x.shape, filterShape, strides, 1, pad3); + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const filterDepth = convInfo.filterDepth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const dw = new TensorBuffer(convInfo.filterShape, "float32"); + const dwValues = dw.values; + const [dwS0, dwS1, dwS2, dwS3] = dw.strides; + const dyValues = backend2.data.get(dy.dataId).values; + const [dyS0, dyS1, dyS2, dyS3] = dyStrides; + const xValues = backend2.data.get(x.dataId).values; + const [xS0, xS1, xS2, xS3] = xStrides; + const frontPad = convInfo.padInfo.front; + const leftPad = convInfo.padInfo.left; + const topPad = convInfo.padInfo.top; + for (let wF = 0; wF < filterDepth; ++wF) { + const yFMin = Math.max(0, Math.ceil((frontPad - wF) / strideDepth)); + const yFMax = Math.min(convInfo.outDepth, (convInfo.inDepth + frontPad - wF) / strideDepth); + const wOffset1 = wF * dwS0; + for (let wR = 0; wR < filterHeight; ++wR) { + const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight)); + const yRMax = Math.min(convInfo.outHeight, (convInfo.inHeight + topPad - wR) / strideHeight); + const wOffset2 = wR * dwS1 + wOffset1; + for (let wC = 0; wC < filterWidth; ++wC) { + const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth)); + const yCMax = Math.min(convInfo.outWidth, (convInfo.inWidth + leftPad - wC) / strideWidth); + const wOffset3 = wC * dwS2 + wOffset2; + for (let d1 = 0; d1 < convInfo.inChannels; ++d1) { + const wOffset4 = d1 * dwS3 + wOffset3; + for (let d2 = 0; d2 < convInfo.outChannels; ++d2) { + let dotProd = 0; + for (let b = 0; b < convInfo.batchSize; ++b) { + const xOffset1 = b * xS0; + const yOffset1 = b * dyS0; + for (let yF = yFMin; yF < yFMax; ++yF) { + const xF = wF + yF * strideDepth - frontPad; + const xOffset2 = xF * xS1 + xOffset1; + const yOffset2 = yF * dyS1 + yOffset1; + for (let yR = yRMin; yR < yRMax; ++yR) { + const xR = wR + yR * strideHeight - topPad; + const xOffset3 = xR * xS2 + xOffset2; + const yOffset3 = yR * dyS2 + yOffset2; + for (let yC = yCMin; yC < yCMax; ++yC) { + const xC = wC + yC * strideWidth - leftPad; + const xOffset4 = xC * xS3 + xOffset3; + const yOffset4 = yC * dyS3 + yOffset3; + dotProd += xValues[xOffset4 + d1] * dyValues[yOffset4 + d2]; + } + } + } + } + dwValues[wOffset4 + d2] = dotProd; + } + } + } + } + } + return backend2.makeTensorInfo(dw.shape, dw.dtype, dw.values); + } + var conv3DBackpropFilterV2Config = { + kernelName: Conv3DBackpropFilterV2, + backendName: "cpu", + kernelFunc: conv3DBackpropFilterV2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3DBackpropInputV2.js + init_define_BUILD_VERSION(); + function conv3DBackpropInputV2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { pad: pad3, strides, inputShape } = attrs; + assertNotComplex([dy], "conv3dBackpropInputV2"); + const dyStrides = util_exports.computeStrides(dy.shape); + const filterStrides = util_exports.computeStrides(filter.shape); + const convInfo = backend_util_exports.computeConv3DInfo(inputShape, filter.shape, strides, 1, pad3); + const dx = new TensorBuffer(convInfo.inShape, "float32"); + const dxValues = dx.values; + const [dxS0, dxS1, dxS2, dxS3] = dx.strides; + const dyValues = backend2.data.get(dy.dataId).values; + const [dyS0, dyS1, dyS2, dyS3] = dyStrides; + const fltValues = backend2.data.get(filter.dataId).values; + const [fltS0, fltS1, fltS2, fltS3] = filterStrides; + const { batchSize, filterDepth, filterHeight, filterWidth, inChannels, inDepth, inHeight, inWidth, outChannels, outDepth, outHeight, outWidth, strideDepth, strideHeight, strideWidth } = convInfo; + const frontPad = filterDepth - 1 - convInfo.padInfo.front; + const topPad = filterHeight - 1 - convInfo.padInfo.top; + const leftPad = filterWidth - 1 - convInfo.padInfo.left; + for (let b = 0; b < batchSize; ++b) { + for (let d1 = 0; d1 < inChannels; ++d1) { + for (let xF = 0; xF < inDepth; ++xF) { + const xFCorner = xF - frontPad; + const xFMin = Math.max(0, Math.ceil(xFCorner / strideDepth)); + const yFMax = Math.min(outDepth, (filterDepth + xFCorner) / strideDepth); + for (let xR = 0; xR < inHeight; ++xR) { + const xRCorner = xR - topPad; + const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight)); + const yRMax = Math.min(outHeight, (filterHeight + xRCorner) / strideHeight); + for (let xC = 0; xC < inWidth; ++xC) { + const xCCorner = xC - leftPad; + const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth)); + const yCMax = Math.min(outWidth, (filterWidth + xCCorner) / strideWidth); + let dotProd = 0; + for (let yF = xFMin; yF < yFMax; ++yF) { + const wF = yF * strideDepth - xFCorner; + for (let yR = xRMin; yR < yRMax; ++yR) { + const wR = yR * strideHeight - xRCorner; + for (let yC = xCMin; yC < yCMax; ++yC) { + const wC = yC * strideWidth - xCCorner; + const dyOffset = dyS0 * b + dyS1 * yF + dyS2 * yR + dyS3 * yC; + const fltOffset = fltS0 * (filterDepth - 1 - wF) + fltS1 * (filterHeight - 1 - wR) + fltS2 * (filterWidth - 1 - wC) + fltS3 * d1; + for (let d2 = 0; d2 < outChannels; ++d2) { + const pixel = dyValues[dyOffset + d2]; + const weight = fltValues[fltOffset + d2]; + dotProd += pixel * weight; + } + } + } + } + dxValues[dxS0 * b + dxS1 * xF + dxS2 * xR + dxS3 * xC + d1] = dotProd; + } + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var conv3DBackpropInputV2Config = { + kernelName: Conv3DBackpropInputV2, + backendName: "cpu", + kernelFunc: conv3DBackpropInputV2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cos.js + init_define_BUILD_VERSION(); + var cos2 = unaryKernelFunc(Cos, (xi) => Math.cos(xi)); + var cosConfig = { + kernelName: Cos, + backendName: "cpu", + kernelFunc: cos2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cosh.js + init_define_BUILD_VERSION(); + var cosh2 = unaryKernelFunc(Cosh, (xi) => Math.cosh(xi)); + var coshConfig = { + kernelName: Cosh, + backendName: "cpu", + kernelFunc: cosh2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/CropAndResize.js + init_define_BUILD_VERSION(); + function cropAndResize2(args) { + const { inputs, backend: backend2, attrs } = args; + const { image: image2, boxes, boxInd } = inputs; + const { cropSize, method, extrapolationValue } = attrs; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const numBoxes = boxes.shape[0]; + const [cropHeight, cropWidth] = cropSize; + const output = buffer([numBoxes, cropHeight, cropWidth, numChannels], "float32"); + const boxVals = backend2.data.get(boxes.dataId).values; + const boxIndVals = backend2.data.get(boxInd.dataId).values; + const imageVals = backend2.data.get(image2.dataId).values; + const inStride = util_exports.computeStrides(image2.shape); + const outStride = util_exports.computeStrides(output.shape); + for (let b = 0; b < numBoxes; b++) { + const startInd = b * 4; + const y1 = boxVals[startInd]; + const x1 = boxVals[startInd + 1]; + const y2 = boxVals[startInd + 2]; + const x2 = boxVals[startInd + 3]; + const bInd = boxIndVals[b]; + if (bInd >= batch) { + continue; + } + const heightScale = cropHeight > 1 ? (y2 - y1) * (imageHeight - 1) / (cropHeight - 1) : 0; + const widthScale = cropWidth > 1 ? (x2 - x1) * (imageWidth - 1) / (cropWidth - 1) : 0; + for (let y = 0; y < cropHeight; y++) { + const yInd = cropHeight > 1 ? y1 * (imageHeight - 1) + y * heightScale : 0.5 * (y1 + y2) * (imageHeight - 1); + if (yInd < 0 || yInd > imageHeight - 1) { + for (let x = 0; x < cropWidth; x++) { + for (let c = 0; c < numChannels; c++) { + const ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0]; + output.values[ind] = extrapolationValue; + } + } + continue; + } + if (method === "bilinear") { + const topInd = Math.floor(yInd); + const bottomInd = Math.ceil(yInd); + const yLerp = yInd - topInd; + for (let x = 0; x < cropWidth; x++) { + const xInd = cropWidth > 1 ? x1 * (imageWidth - 1) + x * widthScale : 0.5 * (x1 + x2) * (imageWidth - 1); + if (xInd < 0 || xInd > imageWidth - 1) { + for (let c = 0; c < numChannels; c++) { + const ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0]; + output.values[ind] = extrapolationValue; + } + continue; + } + const leftInd = Math.floor(xInd); + const rightInd = Math.ceil(xInd); + const xLerp = xInd - leftInd; + for (let c = 0; c < numChannels; c++) { + let ind = c + leftInd * inStride[2] + topInd * inStride[1] + bInd * inStride[0]; + const topLeft = imageVals[ind]; + ind = c + rightInd * inStride[2] + topInd * inStride[1] + bInd * inStride[0]; + const topRight = imageVals[ind]; + ind = c + leftInd * inStride[2] + bottomInd * inStride[1] + bInd * inStride[0]; + const bottomLeft = imageVals[ind]; + ind = c + rightInd * inStride[2] + bottomInd * inStride[1] + bInd * inStride[0]; + const bottomRight = imageVals[ind]; + const top = topLeft + (topRight - topLeft) * xLerp; + const bottom = bottomLeft + (bottomRight - bottomLeft) * xLerp; + ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0]; + output.values[ind] = top + (bottom - top) * yLerp; + } + } + } else { + for (let x = 0; x < cropWidth; ++x) { + const xInd = cropWidth > 1 ? x1 * (imageWidth - 1) + x * widthScale : 0.5 * (x1 + x2) * (imageWidth - 1); + if (xInd < 0 || xInd > imageWidth - 1) { + for (let c = 0; c < numChannels; c++) { + const ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0]; + output.values[ind] = extrapolationValue; + } + continue; + } + const closestX = Math.round(xInd); + const closestY = Math.round(yInd); + for (let c = 0; c < numChannels; c++) { + const inInd = c + closestX * inStride[2] + closestY * inStride[1] + bInd * inStride[0]; + const outInd = c + x * outStride[2] + y * outStride[1] + b * outStride[0]; + output.values[outInd] = imageVals[inInd]; + } + } + } + } + } + return backend2.makeTensorInfo(output.shape, output.dtype, output.values); + } + var cropAndResizeConfig = { + kernelName: CropAndResize, + backendName: "cpu", + kernelFunc: cropAndResize2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cumprod.js + init_define_BUILD_VERSION(); + function cumprod2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + assertNotComplex(x, "cumprod"); + const permutation = backend_util_exports.getAxesPermutation([axis], x.shape.length); + let $x = x; + if (permutation != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutation } }); + } + const permutedAxis = backend_util_exports.getInnerMostAxes(1, x.shape.length)[0]; + if (permutedAxis !== $x.shape.length - 1) { + throw new Error(`backend.cumprod in CPU expects an inner-most axis=${$x.shape.length - 1} but got axis=${permutedAxis}`); + } + const resultDtype = upcastType($x.dtype, "int32"); + const vals = util_exports.makeOnesTypedArray(util_exports.sizeFromShape($x.shape), resultDtype); + const aVals = backend2.data.get($x.dataId).values; + const finalDim = $x.shape[$x.shape.length - 1]; + const indexAdjuster = reverse5 ? (i, j) => i + finalDim - j - 1 : (i, j) => i + j; + for (let i = 0; i < aVals.length; i += finalDim) { + for (let j = 0; j < finalDim; j++) { + const idx = indexAdjuster(i, j); + if (j === 0) { + vals[idx] = exclusive ? 1 : aVals[idx]; + } else { + const prevIdx = indexAdjuster(i, j - 1); + vals[idx] = exclusive ? aVals[prevIdx] * vals[prevIdx] : aVals[idx] * vals[prevIdx]; + } + } + } + const result = backend2.makeTensorInfo($x.shape, resultDtype, vals); + if (permutation != null) { + const reversePermutation = backend_util_exports.getUndoAxesPermutation(permutation); + const reverseTransposedResult = transpose2({ inputs: { x: result }, backend: backend2, attrs: { perm: reversePermutation } }); + backend2.disposeIntermediateTensorInfo(result); + backend2.disposeIntermediateTensorInfo($x); + return reverseTransposedResult; + } + return result; + } + var cumprodConfig = { + kernelName: Cumprod, + backendName: "cpu", + kernelFunc: cumprod2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cumsum.js + init_define_BUILD_VERSION(); + function cumsum2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + assertNotComplex(x, "cumsum"); + const permutation = backend_util_exports.getAxesPermutation([axis], x.shape.length); + let $x = x; + if (permutation != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutation } }); + } + const permutedAxis = backend_util_exports.getInnerMostAxes(1, x.shape.length)[0]; + if (permutedAxis !== $x.shape.length - 1) { + throw new Error(`backend.cumsum in CPU expects an inner-most axis=${$x.shape.length - 1} but got axis=${permutedAxis}`); + } + const resultDtype = upcastType($x.dtype, "int32"); + const vals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape($x.shape), resultDtype); + const aVals = backend2.data.get($x.dataId).values; + const finalDim = $x.shape[$x.shape.length - 1]; + const indexAdjuster = reverse5 ? (i, j) => i + finalDim - j - 1 : (i, j) => i + j; + for (let i = 0; i < aVals.length; i += finalDim) { + for (let j = 0; j < finalDim; j++) { + const idx = indexAdjuster(i, j); + if (j === 0) { + vals[idx] = exclusive ? 0 : aVals[idx]; + } else { + const prevIdx = indexAdjuster(i, j - 1); + vals[idx] = exclusive ? aVals[prevIdx] + vals[prevIdx] : aVals[idx] + vals[prevIdx]; + } + } + } + const result = backend2.makeTensorInfo($x.shape, resultDtype, vals); + if (permutation != null) { + const reversePermutation = backend_util_exports.getUndoAxesPermutation(permutation); + const reverseTransposedResult = transpose2({ inputs: { x: result }, backend: backend2, attrs: { perm: reversePermutation } }); + backend2.disposeIntermediateTensorInfo(result); + backend2.disposeIntermediateTensorInfo($x); + return reverseTransposedResult; + } + return result; + } + var cumsumConfig = { + kernelName: Cumsum, + backendName: "cpu", + kernelFunc: cumsum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DenseBincount.js + init_define_BUILD_VERSION(); + function denseBincount(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, weights } = inputs; + const { size, binaryOutput } = attrs; + if (x.shape.length === 1) { + const xVals = backend2.data.get(x.dataId).values; + const weightsVals = backend2.data.get(weights.dataId).values; + const outVals = bincountImpl(xVals, weightsVals, weights.dtype, weights.shape, size); + return backend2.makeTensorInfo([size], weights.dtype, outVals); + } else if (x.shape.length === 2) { + const xBuf = backend2.bufferSync(x); + const weightsBuf = backend2.bufferSync(weights); + const outBuf = bincountReduceImpl(xBuf, weightsBuf, size, binaryOutput); + return backend2.makeTensorInfo(outBuf.shape, weights.dtype, outBuf.values); + } + throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${x.shape.length}.`); + } + var denseBincountConfig = { + kernelName: DenseBincount, + backendName: "cpu", + kernelFunc: denseBincount + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthToSpace.js + init_define_BUILD_VERSION(); + function depthToSpace2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockSize, dataFormat } = attrs; + util_exports.assert(dataFormat === "NHWC", () => `Only NHWC dataFormat supported on CPU for depthToSpace. Got ${dataFormat}`); + const batchSize = x.shape[0]; + const inputHeight = x.shape[1]; + const inputWidth = x.shape[2]; + const inputDepth = x.shape[3]; + const outputHeight = inputHeight * blockSize; + const outputWidth = inputWidth * blockSize; + const outputDepth = inputDepth / (blockSize * blockSize); + const xValues = backend2.data.get(x.dataId).values; + const result = new Float32Array(batchSize * outputHeight * outputWidth * outputDepth); + let outputIdx = 0; + for (let b = 0; b < batchSize; ++b) { + for (let h = 0; h < outputHeight; ++h) { + const inH = Math.floor(h / blockSize); + const offsetH = h % blockSize; + for (let w = 0; w < outputWidth; ++w) { + const inW = Math.floor(w / blockSize); + const offsetW = w % blockSize; + const offsetD = (offsetH * blockSize + offsetW) * outputDepth; + for (let d = 0; d < outputDepth; ++d) { + const inD = d + offsetD; + const inputIdx = inD + inputDepth * (inW + inputWidth * (inH + inputHeight * b)); + result[outputIdx++] = xValues[inputIdx]; + } + } + } + } + return backend2.makeTensorInfo([batchSize, outputHeight, outputWidth, outputDepth], x.dtype, result); + } + var depthToSpaceConfig = { + kernelName: DepthToSpace, + backendName: "cpu", + kernelFunc: depthToSpace2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNative.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNative(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dilations, dimRoundingMode } = attrs; + assertNotComplex([x, filter], "depthwiseConv2DNative"); + const xStrides = util_exports.computeStrides(x.shape); + const filterStrides = util_exports.computeStrides(filter.shape); + let $dilations = dilations; + if ($dilations == null) { + $dilations = [1, 1]; + } + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, $dilations), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${strides} and dilations '${$dilations}'`); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad3, dimRoundingMode, true); + const { filterHeight, filterWidth, dilationHeight, dilationWidth, padInfo } = convInfo; + const padLeft = padInfo.left; + const padTop = padInfo.top; + const chMul = convInfo.outChannels / convInfo.inChannels; + const y = new TensorBuffer(convInfo.outShape, x.dtype); + const xVals = backend2.data.get(x.dataId).values; + const wVals = backend2.data.get(filter.dataId).values; + const yVals = y.values; + for (let b = 0; b < convInfo.batchSize; ++b) { + const xOffset1 = b * xStrides[0]; + const yOffset1 = b * y.strides[0]; + for (let yR = 0; yR < convInfo.outHeight; ++yR) { + const yOffset2 = yOffset1 + yR * y.strides[1]; + const xRCorner = yR * convInfo.strideHeight - padTop; + for (let wR = 0; wR < filterHeight; ++wR) { + const xR = xRCorner + wR * dilationHeight; + if (xR < 0 || xR >= convInfo.inHeight) { + continue; + } + const wOffset1 = wR * filterStrides[0]; + const xOffset2 = xOffset1 + xR * xStrides[1]; + for (let yC = 0; yC < convInfo.outWidth; ++yC) { + const yOffset3 = yOffset2 + yC * y.strides[2]; + const xCCorner = yC * convInfo.strideWidth - padLeft; + for (let wC = 0; wC < filterWidth; ++wC) { + const xC = xCCorner + wC * dilationWidth; + if (xC < 0 || xC >= convInfo.inWidth) { + continue; + } + const wOffset2 = wOffset1 + wC * filterStrides[1]; + const xOffset3 = xOffset2 + xC * convInfo.inChannels; + let yOffset4 = yOffset3; + let wOffset3 = wOffset2; + for (let d1 = 0; d1 < convInfo.inChannels; ++d1) { + const xVal = xVals[xOffset3 + d1]; + for (let q = 0; q < chMul; ++q) { + yVals[yOffset4 + q] += xVal * wVals[wOffset3 + q]; + } + yOffset4 += chMul; + wOffset3 += chMul; + } + } + } + } + } + } + return backend2.makeTensorInfo(y.shape, y.dtype, y.values); + } + var depthwiseConv2dNativeConfig = { + kernelName: DepthwiseConv2dNative, + backendName: "cpu", + kernelFunc: depthwiseConv2dNative + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNativeBackpropFilter2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, dilations, pad: pad3, dimRoundingMode, filterShape } = attrs; + assertNotComplex([x, dy], "depthwiseConv2dNativeBackpropFilter"); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filterShape, strides, dilations, pad3, dimRoundingMode, true); + const { strideHeight, strideWidth, filterHeight, filterWidth } = convInfo; + const dW = new TensorBuffer(convInfo.filterShape, "float32"); + const leftPad = convInfo.padInfo.left; + const topPad = convInfo.padInfo.top; + const chMul = convInfo.outChannels / convInfo.inChannels; + const xVals = backend2.data.get(x.dataId).values; + const xBuf = new TensorBuffer(x.shape, x.dtype, xVals); + const dyVals = backend2.data.get(dy.dataId).values; + const dyBuf = new TensorBuffer(dy.shape, dy.dtype, dyVals); + for (let wR = 0; wR < filterHeight; ++wR) { + const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight)); + const yRMax = Math.min(convInfo.outHeight, (convInfo.inHeight + topPad - wR) / strideHeight); + for (let wC = 0; wC < filterWidth; ++wC) { + const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth)); + const yCMax = Math.min(convInfo.outWidth, (convInfo.inWidth + leftPad - wC) / strideWidth); + for (let d2 = 0; d2 < convInfo.outChannels; ++d2) { + const d1 = Math.trunc(d2 / chMul); + const dm = d2 % chMul; + let dotProd = 0; + for (let b = 0; b < convInfo.batchSize; ++b) { + for (let yR = yRMin; yR < yRMax; ++yR) { + const xR = wR + yR * strideHeight - topPad; + for (let yC = yCMin; yC < yCMax; ++yC) { + const xC = wC + yC * strideWidth - leftPad; + dotProd += xBuf.get(b, xR, xC, d1) * dyBuf.get(b, yR, yC, d2); + } + } + } + dW.set(dotProd, wR, wC, d1, dm); + } + } + } + return backend2.makeTensorInfo(dW.shape, dW.dtype, dW.values); + } + var depthwiseConv2dNativeBackpropFilterConfig = { + kernelName: DepthwiseConv2dNativeBackpropFilter, + backendName: "cpu", + kernelFunc: depthwiseConv2dNativeBackpropFilter2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNativeBackpropInput.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNativeBackpropInput2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { strides, dilations, pad: pad3, dimRoundingMode, inputShape } = attrs; + assertNotComplex([dy, filter], "depthwiseConv2DNativeBackpropInput"); + const dyStrides = util_exports.computeStrides(dy.shape); + const filterStrides = util_exports.computeStrides(filter.shape); + const convInfo = backend_util_exports.computeConv2DInfo(inputShape, filter.shape, strides, dilations, pad3, dimRoundingMode, true); + const dx = new TensorBuffer(convInfo.inShape, "float32"); + const dxValues = dx.values; + const [dxS0, dxS1, dxS2] = dx.strides; + const dyValues = backend2.data.get(dy.dataId).values; + const [dyS0, dyS1, dyS2] = dyStrides; + const fltValues = backend2.data.get(filter.dataId).values; + const [fltS0, fltS1, fltS2] = filterStrides; + const { batchSize, filterHeight, filterWidth, inChannels, inHeight, inWidth, outChannels, outHeight, outWidth, strideHeight, strideWidth } = convInfo; + const topPad = filterHeight - 1 - convInfo.padInfo.top; + const leftPad = filterWidth - 1 - convInfo.padInfo.left; + const chMul = outChannels / inChannels; + for (let b = 0; b < batchSize; ++b) { + for (let d1 = 0; d1 < inChannels; ++d1) { + for (let xR = 0; xR < inHeight; ++xR) { + const xRCorner = xR - topPad; + const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight)); + const yRMax = Math.min(outHeight, (filterHeight + xRCorner) / strideHeight); + for (let xC = 0; xC < inWidth; ++xC) { + const xCCorner = xC - leftPad; + const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth)); + const yCMax = Math.min(outWidth, (filterWidth + xCCorner) / strideWidth); + let dotProd = 0; + for (let yR = xRMin; yR < yRMax; ++yR) { + const wR = yR * strideHeight - xRCorner; + for (let yC = xCMin; yC < yCMax; ++yC) { + const wC = yC * strideWidth - xCCorner; + const dyOffset = dyS0 * b + dyS1 * yR + dyS2 * yC; + const fltOffset = fltS0 * (filterHeight - 1 - wR) + fltS1 * (filterWidth - 1 - wC) + fltS2 * d1; + for (let dm = 0; dm < chMul; ++dm) { + const d2 = d1 * chMul + dm; + const pixel = dyValues[dyOffset + d2]; + const weight = fltValues[fltOffset + dm]; + dotProd += pixel * weight; + } + } + } + dxValues[dxS0 * b + dxS1 * xR + dxS2 * xC + d1] = dotProd; + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var depthwiseConv2dNativeBackpropInputConfig = { + kernelName: DepthwiseConv2dNativeBackpropInput, + backendName: "cpu", + kernelFunc: depthwiseConv2dNativeBackpropInput2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Diag.js + init_define_BUILD_VERSION(); + function diag(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + const xSize = util_exports.sizeFromShape(x.shape); + const xVals = backend2.data.get(x.dataId).values; + const outBuf = buffer([xSize, xSize], x.dtype); + const vals = outBuf.values; + for (let i = 0; i < xVals.length; i++) { + vals[i * xSize + i] = xVals[i]; + } + const outShape = [...x.shape, ...x.shape]; + return backend2.makeTensorInfo(outShape, outBuf.dtype, outBuf.values); + } + var diagConfig = { + kernelName: Diag, + backendName: "cpu", + kernelFunc: diag + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2D.js + init_define_BUILD_VERSION(); + var dilation2DConfig = { + kernelName: Dilation2D, + backendName: "cpu", + kernelFunc: ({ inputs, backend: backend2, attrs }) => { + const { x, filter } = inputs; + const { strides, pad: pad3, dilations } = attrs; + const cpuBackend = backend2; + const xVals = cpuBackend.data.get(x.dataId).values; + const xRank = x.shape.length; + const filterVals = cpuBackend.data.get(filter.dataId).values; + const filterRank = filter.shape.length; + const { batchSize, inHeight, inWidth, inChannels, outHeight, outWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth, outShape } = backend_util_exports.computeDilation2DInfo(x.shape, filter.shape, strides, pad3, "NHWC", dilations); + const outSize = util_exports.sizeFromShape(outShape); + const outRank = outShape.length; + const outputVals = util_exports.getArrayFromDType(x.dtype, outSize); + for (let b = 0; b < batchSize; ++b) { + for (let hOut = 0; hOut < outHeight; ++hOut) { + const hBeg = hOut * strideHeight - padInfo.top; + for (let wOut = 0; wOut < outWidth; ++wOut) { + const wBeg = wOut * strideWidth - padInfo.left; + for (let d = 0; d < inChannels; ++d) { + let curVal = Number.MIN_SAFE_INTEGER; + for (let h = 0; h < filterHeight; ++h) { + const hIn = hBeg + h * dilationHeight; + if (hIn >= 0 && hIn < inHeight) { + for (let w = 0; w < filterWidth; ++w) { + const wIn = wBeg + w * dilationWidth; + if (wIn >= 0 && wIn < inWidth) { + const xIndex = util_exports.locToIndex([b, hIn, wIn, d], xRank, util_exports.computeStrides(x.shape)); + const filterIndex = util_exports.locToIndex([h, w, d], filterRank, util_exports.computeStrides(filter.shape)); + const val = xVals[xIndex] + filterVals[filterIndex]; + if (val > curVal) { + curVal = val; + } + } + } + } + } + const outputIndex = util_exports.locToIndex([b, hOut, wOut, d], outRank, util_exports.computeStrides(outShape)); + outputVals[outputIndex] = curVal; + } + } + } + } + const dataId = cpuBackend.write(util_exports.toTypedArray(outputVals, x.dtype), outShape, x.dtype); + return { dataId, shape: outShape, dtype: x.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2DBackpropFilter.js + init_define_BUILD_VERSION(); + var dilation2DBackpropFilterConfig = { + kernelName: Dilation2DBackpropFilter, + backendName: "cpu", + kernelFunc: ({ inputs, backend: backend2, attrs }) => { + const { x, filter, dy } = inputs; + const { strides, pad: pad3, dilations } = attrs; + const cpuBackend = backend2; + const $x = util_exports.toNestedArray(x.shape, cpuBackend.data.get(x.dataId).values); + const $filter = util_exports.toNestedArray(filter.shape, cpuBackend.data.get(filter.dataId).values); + const { batchSize, inHeight, inWidth, inChannels, outHeight, outWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth, outShape } = backend_util_exports.computeDilation2DInfo(x.shape, filter.shape, strides, pad3, "NHWC", dilations); + util_exports.assert(dy.rank === outShape.length, () => `Error in ${Dilation2DBackpropFilter}, dy must have the same rank as output ${outShape.length}, but got ${dy.rank}`); + const $dy = util_exports.toNestedArray(outShape, cpuBackend.data.get(dy.dataId).values); + const gradients = util_exports.makeZerosNestedTypedArray(filter.shape, filter.dtype); + for (let b = 0; b < batchSize; ++b) { + for (let hOut = 0; hOut < outHeight; ++hOut) { + const hBeg = hOut * strideHeight - padInfo.top; + for (let wOut = 0; wOut < outWidth; ++wOut) { + const wBeg = wOut * strideWidth - padInfo.left; + for (let d = 0; d < inChannels; ++d) { + let curVal = Number.MIN_SAFE_INTEGER; + let hMax = 0; + let wMax = 0; + for (let h = 0; h < filterHeight; ++h) { + const hIn = hBeg + h * dilationHeight; + if (hIn >= 0 && hIn < inHeight) { + for (let w = 0; w < filterWidth; ++w) { + const wIn = wBeg + w * dilationWidth; + if (wIn >= 0 && wIn < inWidth) { + const val = $x[b][hIn][wIn][d] + $filter[h][w][d]; + if (val > curVal) { + curVal = val; + hMax = h; + wMax = w; + } + } + } + } + } + gradients[hMax][wMax][d] += $dy[b][hOut][wOut][d]; + } + } + } + } + const dataId = cpuBackend.write(util_exports.toTypedArray(gradients, x.dtype), filter.shape, filter.dtype); + return { dataId, shape: filter.shape, dtype: filter.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2DBackpropInput.js + init_define_BUILD_VERSION(); + var dilation2DBackpropInputConfig = { + kernelName: Dilation2DBackpropInput, + backendName: "cpu", + kernelFunc: ({ inputs, backend: backend2, attrs }) => { + const { x, filter, dy } = inputs; + const { strides, pad: pad3, dilations } = attrs; + const cpuBackend = backend2; + const $x = util_exports.toNestedArray(x.shape, cpuBackend.data.get(x.dataId).values); + const $filter = util_exports.toNestedArray(filter.shape, cpuBackend.data.get(filter.dataId).values); + const { batchSize, inHeight, inWidth, inChannels, outHeight, outWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth, outShape } = backend_util_exports.computeDilation2DInfo(x.shape, filter.shape, strides, pad3, "NHWC", dilations); + util_exports.assert(dy.rank === outShape.length, () => `Error in ${Dilation2DBackpropInput}, dy must have the same rank as output ${outShape.length}, but got ${dy.rank}`); + const $dy = util_exports.toNestedArray(outShape, cpuBackend.data.get(dy.dataId).values); + const gradients = util_exports.makeZerosNestedTypedArray(x.shape, x.dtype); + for (let b = 0; b < batchSize; ++b) { + for (let hOut = 0; hOut < outHeight; ++hOut) { + const hBeg = hOut * strideHeight - padInfo.top; + for (let wOut = 0; wOut < outWidth; ++wOut) { + const wBeg = wOut * strideWidth - padInfo.left; + for (let d = 0; d < inChannels; ++d) { + let curVal = Number.MIN_SAFE_INTEGER; + let hInMax = hBeg < 0 ? 0 : hBeg; + let wInMax = wBeg < 0 ? 0 : wBeg; + for (let h = 0; h < filterHeight; ++h) { + const hIn = hBeg + h * dilationHeight; + if (hIn >= 0 && hIn < inHeight) { + for (let w = 0; w < filterWidth; ++w) { + const wIn = wBeg + w * dilationWidth; + if (wIn >= 0 && wIn < inWidth) { + const val = $x[b][hIn][wIn][d] + $filter[h][w][d]; + if (val > curVal) { + curVal = val; + hInMax = hIn; + wInMax = wIn; + } + } + } + } + } + gradients[b][hInMax][wInMax][d] += $dy[b][hOut][wOut][d]; + } + } + } + } + const dataId = cpuBackend.write(util_exports.toTypedArray(gradients, x.dtype), x.shape, x.dtype); + return { dataId, shape: x.shape, dtype: x.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Einsum.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sum.js + init_define_BUILD_VERSION(); + function sum3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + assertNotComplex(x, "sum"); + let $x; + if (x.dtype === "bool") { + $x = cast3({ inputs: { x }, backend: backend2, attrs: { dtype: "int32" } }); + } else { + $x = identity({ inputs: { x }, backend: backend2 }); + } + const xRank = $x.shape.length; + const axes = util_exports.parseAxisParam(axis, $x.shape); + const permutation = backend_util_exports.getAxesPermutation(axes, xRank); + let reductionAxes = axes; + let permutedX = $x; + if (permutation != null) { + permutedX = transpose2({ inputs: { x: $x }, backend: backend2, attrs: { perm: permutation } }); + reductionAxes = backend_util_exports.getInnerMostAxes(reductionAxes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("sum", reductionAxes, permutedX.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(permutedX.shape, reductionAxes); + const resultDtype = backend_util_exports.upcastType(permutedX.dtype, "int32"); + let result = zeros2(backend2, outShape, resultDtype); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const vals = backend2.data.get(result.dataId).values; + const aVals = backend2.data.get(permutedX.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let sum6 = 0; + for (let j = 0; j < reduceSize; ++j) { + sum6 += aVals[offset + j]; + } + vals[i] = sum6; + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(result.shape, axes); + const oldResult = result; + result = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: newShape } }); + backend2.disposeIntermediateTensorInfo(oldResult); + } + backend2.disposeIntermediateTensorInfo($x); + if (permutation != null) { + backend2.disposeIntermediateTensorInfo(permutedX); + } + return result; + } + var sumConfig = { + kernelName: Sum, + backendName: "cpu", + kernelFunc: sum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Einsum.js + function einsum(args) { + const { inputs, backend: backend2, attrs } = args; + const { equation } = attrs; + const tensors = inputs; + const { allDims, summedDims, idDims } = backend_util_exports.decodeEinsumEquation(equation, tensors.length); + backend_util_exports.checkEinsumDimSizes(allDims.length, idDims, tensors); + const { path, steps } = backend_util_exports.getEinsumComputePath(summedDims, idDims); + const nSteps = steps.length; + let out = null; + let numDimsRemaining = allDims.length; + const tensorsToDispose = []; + for (let i = 0; i < nSteps; ++i) { + for (const idTerm of steps[i]) { + const { permutationIndices: perm, expandDims: dimsToExpand } = backend_util_exports.getEinsumPermutation(numDimsRemaining, idDims[idTerm]); + let x; + if (backend_util_exports.isIdentityPermutation(perm)) { + x = tensors[idTerm]; + } else { + x = transpose2({ inputs: { x: tensors[idTerm] }, backend: backend2, attrs: { perm } }); + tensorsToDispose.push(x); + } + const targetShape = x.shape.slice(); + for (let k = 0; k < dimsToExpand.length; ++k) { + targetShape.splice(dimsToExpand[k], 0, 1); + } + if (!util_exports.arraysEqual(x.shape, targetShape)) { + x = reshape2({ inputs: { x }, backend: backend2, attrs: { shape: targetShape } }); + tensorsToDispose.push(x); + } + if (out === null) { + out = x; + } else { + out = multiply({ inputs: { a: x, b: out }, backend: backend2 }); + tensorsToDispose.push(out); + } + } + if (i < nSteps - 1) { + if (path[i] >= 0) { + out = sum3({ + inputs: { x: out }, + backend: backend2, + attrs: { + axis: path[i] - (allDims.length - numDimsRemaining), + keepDims: false + } + }); + tensorsToDispose.push(out); + } + numDimsRemaining--; + } + } + for (const tensorInfo of tensorsToDispose) { + if (tensorInfo === out) { + continue; + } + backend2.disposeIntermediateTensorInfo(tensorInfo); + } + return out; + } + var einsumConfig = { + kernelName: Einsum, + backendName: "cpu", + kernelFunc: einsum + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/EluGrad.js + init_define_BUILD_VERSION(); + function eluGrad(args) { + const { inputs, backend: backend2 } = args; + const { dy, y } = inputs; + assertNotComplex([dy, y], "eluGrad"); + const resultValues = new Float32Array(util_exports.sizeFromShape(y.shape)); + const values = backend2.data.get(y.dataId).values; + const dyValues = backend2.data.get(dy.dataId).values; + for (let i = 0; i < values.length; ++i) { + const v = values[i]; + if (v >= 1) { + resultValues[i] = dyValues[i]; + } else { + resultValues[i] = dyValues[i] * (v + 1); + } + } + return backend2.makeTensorInfo(y.shape, "float32", resultValues); + } + var eluGradConfig2 = { + kernelName: EluGrad, + backendName: "cpu", + kernelFunc: eluGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Erf.js + init_define_BUILD_VERSION(); + var p = backend_util_exports.ERF_P; + var a1 = backend_util_exports.ERF_A1; + var a2 = backend_util_exports.ERF_A2; + var a3 = backend_util_exports.ERF_A3; + var a4 = backend_util_exports.ERF_A4; + var a5 = backend_util_exports.ERF_A5; + var erf2 = unaryKernelFunc(Erf, (xi) => { + const sign4 = Math.sign(xi); + const v = Math.abs(xi); + const t = 1 / (1 + p * v); + return sign4 * (1 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(-v * v)); + }); + var erfConfig = { + kernelName: Erf, + backendName: "cpu", + kernelFunc: erf2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ExpandDims.js + init_define_BUILD_VERSION(); + function expandDims3(args) { + const { inputs, backend: backend2, attrs } = args; + const { input: input2 } = inputs; + const { dim } = attrs; + const inputRank = input2.shape.length; + const newShape = input2.shape.slice(); + let $dim = dim; + if (dim < 0) { + util_exports.assert(-(inputRank + 1) <= dim, () => `Axis must be in the interval [${-(inputRank + 1)}, ${inputRank}]`); + $dim = inputRank + dim + 1; + } + newShape.splice($dim, 0, 1); + return reshape2({ inputs: { x: input2 }, backend: backend2, attrs: { shape: newShape } }); + } + var expandDimsConfig = { + kernelName: ExpandDims, + backendName: "cpu", + kernelFunc: expandDims3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FFT.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fft_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RealDiv.js + init_define_BUILD_VERSION(); + var realDivImpl = createSimpleBinaryKernelImpl((a, b) => a / b); + var div2 = binaryKernelFunc(RealDiv, realDivImpl); + var realDivConfig = { + kernelName: RealDiv, + backendName: "cpu", + kernelFunc: div2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fft_utils.js + function fftBatch(input2, inverse, cpuBackend) { + const inputShape = input2.shape; + const batch = inputShape[0]; + const innerDim = inputShape[1]; + const inputVals = cpuBackend.data.get(input2.dataId); + const real2D = inputVals.complexTensorInfos.real; + const imag2D = inputVals.complexTensorInfos.imag; + const resultShape = [batch, innerDim]; + const resultSize = util_exports.sizeFromShape(resultShape); + const resultReal = util_exports.getTypedArrayFromDType("float32", resultSize); + const resultImag = util_exports.getTypedArrayFromDType("float32", resultSize); + for (let b = 0; b < batch; b++) { + const r = slice2({ + inputs: { x: real2D }, + backend: cpuBackend, + attrs: { begin: [b, 0], size: [1, innerDim] } + }); + const i = slice2({ + inputs: { x: imag2D }, + backend: cpuBackend, + attrs: { begin: [b, 0], size: [1, innerDim] } + }); + const input3 = complex2({ inputs: { real: r, imag: i }, backend: cpuBackend }); + const { real: real4, imag: imag4 } = fftImpl(input3, inverse, cpuBackend); + const res = backend_util_exports.mergeRealAndImagArrays(real4, imag4); + for (let d = 0; d < innerDim; d++) { + const c = backend_util_exports.getComplexWithIndex(res, d); + resultReal[b * innerDim + d] = c.real; + resultImag[b * innerDim + d] = c.imag; + } + cpuBackend.disposeIntermediateTensorInfo(r); + cpuBackend.disposeIntermediateTensorInfo(i); + cpuBackend.disposeIntermediateTensorInfo(input3); + } + const $realInfo = cpuBackend.makeTensorInfo(resultShape, "float32", resultReal); + const $imagInfo = cpuBackend.makeTensorInfo(resultShape, "float32", resultImag); + const result = complex2({ inputs: { real: $realInfo, imag: $imagInfo }, backend: cpuBackend }); + cpuBackend.disposeIntermediateTensorInfo($realInfo); + cpuBackend.disposeIntermediateTensorInfo($imagInfo); + return result; + } + function fftImpl(input2, inverse, cpuBackend) { + const inputSize = util_exports.sizeFromShape(input2.shape); + const inputVals = cpuBackend.data.get(input2.dataId); + const realVals = cpuBackend.data.get(inputVals.complexTensorInfos.real.dataId).values; + const imagVals = cpuBackend.data.get(inputVals.complexTensorInfos.imag.dataId).values; + if (isExponentOf2(inputSize)) { + const result = fftRadix2(realVals, imagVals, inputSize, inverse, cpuBackend); + const resultShape = [input2.shape[0], input2.shape[1]]; + if (inverse) { + const realInfo = cpuBackend.makeTensorInfo(resultShape, "float32", result.real); + const imagInfo = cpuBackend.makeTensorInfo(resultShape, "float32", result.imag); + const sizeInfo = cpuBackend.makeTensorInfo([], "float32", util_exports.createScalarValue(inputSize, "float32")); + const sizeInfoCopy = identity({ inputs: { x: sizeInfo }, backend: cpuBackend }); + const divRealInfo = realDivConfig.kernelFunc({ inputs: { a: realInfo, b: sizeInfo }, backend: cpuBackend }); + const divImagInfo = realDivConfig.kernelFunc({ inputs: { a: imagInfo, b: sizeInfoCopy }, backend: cpuBackend }); + const divRealVals = cpuBackend.data.get(divRealInfo.dataId).values; + const divImagVals = cpuBackend.data.get(divImagInfo.dataId).values; + cpuBackend.disposeIntermediateTensorInfo(realInfo); + cpuBackend.disposeIntermediateTensorInfo(imagInfo); + cpuBackend.disposeIntermediateTensorInfo(sizeInfo); + cpuBackend.disposeIntermediateTensorInfo(sizeInfoCopy); + cpuBackend.disposeIntermediateTensorInfo(divRealInfo); + cpuBackend.disposeIntermediateTensorInfo(divImagInfo); + return { real: divRealVals, imag: divImagVals }; + } + return result; + } else { + const data = backend_util_exports.mergeRealAndImagArrays(realVals, imagVals); + const rawOutput = fourierTransformByMatmul(data, inputSize, inverse); + return backend_util_exports.splitRealAndImagArrays(rawOutput); + } + } + function isExponentOf2(size) { + return (size & size - 1) === 0; + } + function fftRadix2(realVals, imagVals, size, inverse, cpuBackend) { + if (size === 1) { + return { real: realVals, imag: imagVals }; + } + const data = backend_util_exports.mergeRealAndImagArrays(realVals, imagVals); + const half = size / 2; + const evenComplex = backend_util_exports.complexWithEvenIndex(data); + const evenRealVals = evenComplex.real; + const evenImagVals = evenComplex.imag; + const evenShape = [evenRealVals.length]; + const evenRealInfo = cpuBackend.makeTensorInfo(evenShape, "float32", evenRealVals); + const evenImagInfo = cpuBackend.makeTensorInfo(evenShape, "float32", evenImagVals); + const evenTensorInfo = complex2({ inputs: { real: evenRealInfo, imag: evenImagInfo }, backend: cpuBackend }); + const oddComplex = backend_util_exports.complexWithOddIndex(data); + const oddRealVals = oddComplex.real; + const oddImagVals = oddComplex.imag; + const oddShape = [oddRealVals.length]; + const oddRealInfo = cpuBackend.makeTensorInfo(oddShape, "float32", oddRealVals); + const oddImagInfo = cpuBackend.makeTensorInfo(oddShape, "float32", oddImagVals); + const oddTensorInfo = complex2({ inputs: { real: oddRealInfo, imag: oddImagInfo }, backend: cpuBackend }); + const $evenComplex = fftRadix2(evenRealVals, evenImagVals, half, inverse, cpuBackend); + const $evenRealVals = $evenComplex.real; + const $evenImagVals = $evenComplex.imag; + const $evenShape = [$evenRealVals.length]; + const $evenRealInfo = cpuBackend.makeTensorInfo($evenShape, "float32", $evenRealVals); + const $evenImagInfo = cpuBackend.makeTensorInfo($evenShape, "float32", $evenImagVals); + const $evenTensorInfo = complex2({ + inputs: { real: $evenRealInfo, imag: $evenImagInfo }, + backend: cpuBackend + }); + const $oddComplex = fftRadix2(oddRealVals, oddImagVals, half, inverse, cpuBackend); + const $oddRealVals = $oddComplex.real; + const $oddImagVals = $oddComplex.imag; + const $oddShape = [$oddRealVals.length]; + const $oddRealInfo = cpuBackend.makeTensorInfo($oddShape, "float32", $oddRealVals); + const $oddImagInfo = cpuBackend.makeTensorInfo($oddShape, "float32", $oddImagVals); + const $oddTensorInfo = complex2({ inputs: { real: $oddRealInfo, imag: $oddImagInfo }, backend: cpuBackend }); + const e = backend_util_exports.exponents(size, inverse); + const eShape = [e.real.length]; + const eRealInfo = cpuBackend.makeTensorInfo(eShape, "float32", e.real); + const eImagInfo = cpuBackend.makeTensorInfo(eShape, "float32", e.imag); + const complexInfo = complex2({ inputs: { real: eRealInfo, imag: eImagInfo }, backend: cpuBackend }); + const exponentInfo = multiply({ inputs: { a: complexInfo, b: $oddTensorInfo }, backend: cpuBackend }); + const addPart = add3({ + inputs: { a: $evenTensorInfo, b: exponentInfo }, + backend: cpuBackend + }); + const subPart = sub2({ + inputs: { a: $evenTensorInfo, b: exponentInfo }, + backend: cpuBackend + }); + const addPartReal = real2({ inputs: { input: addPart }, backend: cpuBackend }); + const subPartReal = real2({ inputs: { input: subPart }, backend: cpuBackend }); + const addPartImag = imag2({ inputs: { input: addPart }, backend: cpuBackend }); + const subPartImag = imag2({ inputs: { input: subPart }, backend: cpuBackend }); + const $real = concat2({ + inputs: [addPartReal, subPartReal], + backend: cpuBackend, + attrs: { axis: 0 } + }); + const $imag = concat2({ + inputs: [addPartImag, subPartImag], + backend: cpuBackend, + attrs: { axis: 0 } + }); + const $realVals = cpuBackend.data.get($real.dataId).values; + const $imagVals = cpuBackend.data.get($imag.dataId).values; + cpuBackend.disposeIntermediateTensorInfo(evenRealInfo); + cpuBackend.disposeIntermediateTensorInfo(evenImagInfo); + cpuBackend.disposeIntermediateTensorInfo(evenTensorInfo); + cpuBackend.disposeIntermediateTensorInfo(oddRealInfo); + cpuBackend.disposeIntermediateTensorInfo(oddImagInfo); + cpuBackend.disposeIntermediateTensorInfo(oddTensorInfo); + cpuBackend.disposeIntermediateTensorInfo($evenRealInfo); + cpuBackend.disposeIntermediateTensorInfo($evenImagInfo); + cpuBackend.disposeIntermediateTensorInfo($evenTensorInfo); + cpuBackend.disposeIntermediateTensorInfo($oddRealInfo); + cpuBackend.disposeIntermediateTensorInfo($oddImagInfo); + cpuBackend.disposeIntermediateTensorInfo($oddTensorInfo); + cpuBackend.disposeIntermediateTensorInfo(eRealInfo); + cpuBackend.disposeIntermediateTensorInfo(eImagInfo); + cpuBackend.disposeIntermediateTensorInfo(complexInfo); + cpuBackend.disposeIntermediateTensorInfo(exponentInfo); + cpuBackend.disposeIntermediateTensorInfo(addPart); + cpuBackend.disposeIntermediateTensorInfo(subPart); + cpuBackend.disposeIntermediateTensorInfo(addPartReal); + cpuBackend.disposeIntermediateTensorInfo(addPartImag); + cpuBackend.disposeIntermediateTensorInfo(subPartReal); + cpuBackend.disposeIntermediateTensorInfo(subPartImag); + cpuBackend.disposeIntermediateTensorInfo($real); + cpuBackend.disposeIntermediateTensorInfo($imag); + return { real: $realVals, imag: $imagVals }; + } + function fourierTransformByMatmul(data, size, inverse) { + const ret = new Float32Array(size * 2); + for (let r = 0; r < size; r++) { + let real4 = 0; + let imag4 = 0; + for (let c = 0; c < size; c++) { + const e = backend_util_exports.exponent(r * c, size, inverse); + const term = backend_util_exports.getComplexWithIndex(data, c); + real4 += term.real * e.real - term.imag * e.imag; + imag4 += term.real * e.imag + term.imag * e.real; + } + if (inverse) { + real4 /= size; + imag4 /= size; + } + backend_util_exports.assignToTypedArray(ret, real4, imag4, r); + } + return ret; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FFT.js + function fft2(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const inputSize = util_exports.sizeFromShape(input2.shape); + const innerDimensionSize = input2.shape[input2.shape.length - 1]; + const batch = inputSize / innerDimensionSize; + const input2D = reshape2({ + inputs: { x: input2 }, + backend: backend2, + attrs: { shape: [batch, innerDimensionSize] } + }); + const result = fftBatch(input2D, false, backend2); + const resultReshaped = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: input2.shape } }); + backend2.disposeIntermediateTensorInfo(input2D); + backend2.disposeIntermediateTensorInfo(result); + return resultReshaped; + } + var fftConfig = { + kernelName: FFT, + backendName: "cpu", + kernelFunc: fft2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Fill.js + init_define_BUILD_VERSION(); + function fill2(args) { + const { backend: backend2, attrs } = args; + const { shape, value, dtype } = attrs; + const $dtype = dtype || util_exports.inferDtype(value); + const values = util_exports.getArrayFromDType($dtype, util_exports.sizeFromShape(shape)); + fillValues(values, value, $dtype); + return backend2.makeTensorInfo(shape, $dtype, values); + } + var fillConfig = { + kernelName: Fill, + backendName: "cpu", + kernelFunc: fill2 + }; + function fillValues(values, value, dtype) { + if (dtype === "string") { + values.fill(value); + } else { + values.fill(value); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FlipLeftRight.js + init_define_BUILD_VERSION(); + var flipLeftRightConfig = { + kernelName: FlipLeftRight, + backendName: "cpu", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { image: image2 } = inputs; + const cpuBackend = backend2; + const output = util_exports.getTypedArrayFromDType(image2.dtype, util_exports.sizeFromShape(image2.shape)); + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const imageVals = cpuBackend.data.get(image2.dataId).values; + for (let batchIdx = 0; batchIdx < batch; batchIdx++) { + const batchOffset = batchIdx * imageWidth * imageHeight * numChannels; + for (let row = 0; row < imageHeight; row++) { + const rowOffset = row * (imageWidth * numChannels); + for (let col = 0; col < imageWidth; col++) { + const colOffset = col * numChannels; + for (let channel = 0; channel < numChannels; channel++) { + const coordX = Math.round(imageWidth - col - 1); + const outIdx = batchOffset + rowOffset + colOffset + channel; + let outputValue = imageVals[outIdx]; + if (coordX >= 0 && coordX < imageWidth) { + const rotatedColOffset = coordX * numChannels; + const imageIdx = batchOffset + rowOffset + rotatedColOffset + channel; + outputValue = imageVals[imageIdx]; + } + output[outIdx] = outputValue; + } + } + } + } + const dataId = cpuBackend.write(output, image2.shape, image2.dtype); + return { dataId, shape: image2.shape, dtype: image2.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FloorDiv.js + init_define_BUILD_VERSION(); + var floorDivImpl = createSimpleBinaryKernelImpl((a, b) => Math.floor(a / b)); + var floorDiv2 = binaryKernelFunc(FloorDiv, floorDivImpl, null, "int32"); + var floorDivConfig = { + kernelName: FloorDiv, + backendName: "cpu", + kernelFunc: floorDiv2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FusedConv2D.js + init_define_BUILD_VERSION(); + function fusedConv2D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dataFormat, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs; + let result = conv2D({ + inputs: { x, filter }, + backend: backend2, + attrs: { strides, pad: pad3, dataFormat, dilations, dimRoundingMode } + }); + if (bias) { + const resultOld = result; + if (dataFormat === "NCHW" && bias.shape.length === 1 && bias.shape[0] !== 1) { + const reshapedBias = reshape2({ inputs: { x: bias }, backend: backend2, attrs: { shape: [bias.shape[0], 1, 1] } }); + result = add3({ inputs: { a: result, b: reshapedBias }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(reshapedBias); + } else { + result = add3({ inputs: { a: result, b: bias }, backend: backend2 }); + } + backend2.disposeIntermediateTensorInfo(resultOld); + } + if (activation) { + const resultOld = result; + if (dataFormat === "NCHW" && activation === "prelu" && preluActivationWeights.shape.length === 1 && preluActivationWeights.shape[0] !== 1) { + const reshapedAlpha = reshape2({ + inputs: { x: preluActivationWeights }, + backend: backend2, + attrs: { shape: [preluActivationWeights.shape[0], 1, 1] } + }); + result = applyActivation2(backend2, result, activation, reshapedAlpha, leakyreluAlpha); + backend2.disposeIntermediateTensorInfo(reshapedAlpha); + } else { + result = applyActivation2(backend2, result, activation, preluActivationWeights, leakyreluAlpha); + } + backend2.disposeIntermediateTensorInfo(resultOld); + } + return result; + } + var fusedConv2DConfig = { + kernelName: FusedConv2D, + backendName: "cpu", + kernelFunc: fusedConv2D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FusedDepthwiseConv2D.js + init_define_BUILD_VERSION(); + function fusedDepthwiseConv2D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dataFormat, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs; + let result = depthwiseConv2dNative({ + inputs: { x, filter }, + backend: backend2, + attrs: { strides, pad: pad3, dataFormat, dilations, dimRoundingMode } + }); + if (bias) { + const oldResult = result; + result = add3({ inputs: { a: result, b: bias }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(oldResult); + } + if (activation) { + const oldResult = result; + result = applyActivation2(backend2, result, activation, preluActivationWeights, leakyreluAlpha); + backend2.disposeIntermediateTensorInfo(oldResult); + } + return result; + } + var fusedDepthwiseConv2DConfig = { + kernelName: FusedDepthwiseConv2D, + backendName: "cpu", + kernelFunc: fusedDepthwiseConv2D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherNd.js + init_define_BUILD_VERSION(); + function gatherNd(args) { + const { inputs, backend: backend2 } = args; + const { params, indices } = inputs; + const paramsSize = util_exports.sizeFromShape(params.shape); + const indicesShape = indices.shape; + const sliceRank = indicesShape[indicesShape.length - 1]; + const [resultShape, numSlices, sliceSize, strides] = backend_util_exports.prepareAndValidate(params, indices); + if (numSlices === 0) { + return backend2.makeTensorInfo(resultShape, params.dtype, []); + } + const indicesData = backend2.data.get(indices.dataId).values; + const paramsBuf = backend2.bufferSync(params); + const outBuf = gatherNdImpl(indicesData, paramsBuf, params.dtype, numSlices, sliceRank, sliceSize, strides, params.shape, paramsSize); + return backend2.makeTensorInfo(resultShape, params.dtype, outBuf.values); + } + var gatherNdConfig = { + kernelName: GatherNd, + backendName: "cpu", + kernelFunc: gatherNd + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherV2.js + init_define_BUILD_VERSION(); + function gatherV2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, indices } = inputs; + const { axis, batchDims } = attrs; + assertNotComplex([x, indices], "gatherV2"); + const parsedAxis = util_exports.parseAxisParam(axis, x.shape)[0]; + const indicesVals = backend2.data.get(indices.dataId).values; + const axisDim = x.shape[parsedAxis]; + for (let i = 0; i < indicesVals.length; ++i) { + const index = indicesVals[i]; + util_exports.assert(index <= axisDim - 1 && index >= 0, () => `GatherV2: the index value ${index} is not in [0, ${axisDim - 1}]`); + } + let $batchDims = batchDims; + if (batchDims == null) { + $batchDims = 0; + } + const indicesSize = util_exports.sizeFromShape(indices.shape); + const shapeInfo = backend_util_exports.segment_util.collectGatherOpShapeInfo(x, indices, parsedAxis, $batchDims); + const flattenX = reshape2({ + inputs: { x }, + backend: backend2, + attrs: { + shape: [ + shapeInfo.batchSize, + shapeInfo.outerSize, + shapeInfo.dimSize, + shapeInfo.sliceSize + ] + } + }); + const flattenIndex = reshape2({ + inputs: { x: indices }, + backend: backend2, + attrs: { shape: [shapeInfo.batchSize, indicesSize / shapeInfo.batchSize] } + }); + const flattenOutputShape = [ + shapeInfo.batchSize, + shapeInfo.outerSize, + indicesSize / shapeInfo.batchSize, + shapeInfo.sliceSize + ]; + const indicesBuf = backend2.bufferSync(flattenIndex); + const xBuf = backend2.bufferSync(flattenX); + const outBuf = gatherV2Impl(xBuf, indicesBuf, flattenOutputShape); + backend2.disposeIntermediateTensorInfo(flattenX); + backend2.disposeIntermediateTensorInfo(flattenIndex); + return backend2.makeTensorInfo(shapeInfo.outputShape, outBuf.dtype, outBuf.values); + } + var gatherV2Config = { + kernelName: GatherV2, + backendName: "cpu", + kernelFunc: gatherV2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IFFT.js + init_define_BUILD_VERSION(); + function ifft2(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const inputSize = util_exports.sizeFromShape(input2.shape); + const innerDimensionSize = input2.shape[input2.shape.length - 1]; + const batch = inputSize / innerDimensionSize; + const input2D = reshape2({ + inputs: { x: input2 }, + backend: backend2, + attrs: { shape: [batch, innerDimensionSize] } + }); + const result = fftBatch(input2D, true, backend2); + const resultReshaped = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: input2.shape } }); + backend2.disposeIntermediateTensorInfo(input2D); + backend2.disposeIntermediateTensorInfo(result); + return resultReshaped; + } + var ifftConfig = { + kernelName: IFFT, + backendName: "cpu", + kernelFunc: ifft2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsFinite.js + init_define_BUILD_VERSION(); + var isFinite3 = unaryKernelFunc(IsFinite, (xi) => Number.isFinite(xi) ? 1 : 0, "bool"); + var isFiniteConfig = { + kernelName: IsFinite, + backendName: "cpu", + kernelFunc: isFinite3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsInf.js + init_define_BUILD_VERSION(); + var isInf2 = unaryKernelFunc(IsInf, (xi) => Math.abs(xi) === Infinity ? 1 : 0, "bool"); + var isInfConfig = { + kernelName: IsInf, + backendName: "cpu", + kernelFunc: isInf2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsNaN.js + init_define_BUILD_VERSION(); + var isNaN3 = unaryKernelFunc(IsNan, (xi) => Number.isNaN(xi) ? 1 : 0, "bool"); + var isNaNConfig = { + kernelName: IsNan, + backendName: "cpu", + kernelFunc: isNaN3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LinSpace.js + init_define_BUILD_VERSION(); + function linSpace(args) { + const { backend: backend2, attrs } = args; + const { start, stop, num } = attrs; + const outVals = linSpaceImpl(start, stop, num); + return backend2.makeTensorInfo([outVals.length], "float32", outVals); + } + var linSpaceConfig = { + kernelName: LinSpace, + backendName: "cpu", + kernelFunc: linSpace + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Log1p.js + init_define_BUILD_VERSION(); + var log1p2 = unaryKernelFunc(Log1p, (xi) => Math.log1p(xi)); + var log1pConfig = { + kernelName: Log1p, + backendName: "cpu", + kernelFunc: log1p2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalAnd.js + init_define_BUILD_VERSION(); + var logicalAndImpl = createSimpleBinaryKernelImpl((a, b) => a && b); + var logicalAnd2 = binaryKernelFunc(LogicalAnd, logicalAndImpl, null, "bool"); + var logicalAndConfig = { + kernelName: LogicalAnd, + backendName: "cpu", + kernelFunc: logicalAnd2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalNot.js + init_define_BUILD_VERSION(); + var logicalNot2 = unaryKernelFunc(LogicalNot, (xi) => xi ? 0 : 1, "bool"); + var logicalNotConfig = { + kernelName: LogicalNot, + backendName: "cpu", + kernelFunc: logicalNot2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalOr.js + init_define_BUILD_VERSION(); + var logicalOrImpl = createSimpleBinaryKernelImpl((a, b) => a || b); + var logicalOr2 = binaryKernelFunc(LogicalOr, logicalOrImpl, null, "bool"); + var logicalOrConfig = { + kernelName: LogicalOr, + backendName: "cpu", + kernelFunc: logicalOr2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LRN.js + init_define_BUILD_VERSION(); + function lRN(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { depthRadius, bias, alpha, beta } = attrs; + assertNotComplex(x, "LRN"); + const channels = x.shape[3]; + const maxD = channels - 1; + const xValues = backend2.data.get(x.dataId).values; + const size = util_exports.sizeFromShape(x.shape); + const result = new Float32Array(size); + function sumAcrossChannels(offset) { + const currentChannel = offset % channels; + let beginSumOffset = offset - currentChannel + Math.max(0, currentChannel - depthRadius); + const endSumOffset = offset - currentChannel + Math.min(currentChannel + depthRadius, maxD); + let sum6 = 0; + for (; beginSumOffset <= endSumOffset; beginSumOffset++) { + const z = xValues[beginSumOffset]; + sum6 += z * z; + } + return sum6; + } + for (let offset = 0; offset < size; offset++) { + const sum6 = sumAcrossChannels(offset); + const val = xValues[offset] * Math.pow(bias + alpha * sum6, -beta); + result[offset] = val; + } + return backend2.makeTensorInfo(x.shape, x.dtype, result); + } + var LRNConfig = { + kernelName: LRN, + backendName: "cpu", + kernelFunc: lRN + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LRNGrad.js + init_define_BUILD_VERSION(); + function lRNGrad(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, y, dy } = inputs; + const { depthRadius, bias, alpha, beta } = attrs; + assertNotComplex(dy, "LRNGrad"); + const dySize = util_exports.sizeFromShape(dy.shape); + const channels = dy.shape[3]; + const dyValues = backend2.data.get(dy.dataId).values; + const xValues = backend2.data.get(x.dataId).values; + const yValues = backend2.data.get(y.dataId).values; + const result = new Float32Array(dySize); + const size = dySize; + for (let offset = 0; offset < size; offset++) { + const currentChannel = offset % channels; + const depthBegin = offset - currentChannel + Math.max(0, currentChannel - depthRadius); + const depthEnd = offset - currentChannel + Math.min(channels, currentChannel + depthRadius + 1); + let norm2 = 0; + for (let k = depthBegin; k < depthEnd; k++) { + norm2 += Math.pow(xValues[k], 2); + } + norm2 = alpha * norm2 + bias; + for (let k = depthBegin; k < depthEnd; k++) { + let dyi = -2 * alpha * beta * xValues[k] * yValues[offset] / norm2; + if (offset === k) { + dyi += Math.pow(norm2, -beta); + } + dyi *= dyValues[offset]; + result[k] += dyi; + } + } + return backend2.makeTensorInfo(dy.shape, x.dtype, result); + } + var LRNGradConfig = { + kernelName: LRNGrad, + backendName: "cpu", + kernelFunc: lRNGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Max.js + init_define_BUILD_VERSION(); + function max3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { reductionIndices, keepDims } = attrs; + const cpuBackend = backend2; + let xShape = x.shape; + const xRank = xShape.length; + const origAxes = util_exports.parseAxisParam(reductionIndices, xShape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let xVals = cpuBackend.data.get(x.dataId).values; + if (permutedAxes != null) { + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = xShape[permutedAxes[i]]; + } + xVals = transposeImpl(xVals, xShape, x.dtype, permutedAxes, newShape); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + xShape = newShape; + } + assertNotComplex(x, "max"); + backend_util_exports.assertAxesAreInnerMostDims("max", axes, xRank); + const [maxOutShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(xShape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const result = maxImpl(xVals, reduceSize, maxOutShape, x.dtype); + const dataId = cpuBackend.write(result, maxOutShape, x.dtype); + let outShape = maxOutShape; + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(maxOutShape, origAxes); + outShape = newShape; + } + return { dataId, shape: outShape, dtype: x.dtype }; + } + var maxConfig = { + kernelName: Max, + backendName: "cpu", + kernelFunc: max3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool.js + init_define_BUILD_VERSION(); + function maxPool2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + assertNotComplex(x, "maxPool"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = 1; + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + let res; + if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 && util_exports.arraysEqual(convInfo.inShape, convInfo.outShape)) { + res = identity({ inputs: { x }, backend: backend2 }); + } else { + const xValues = backend2.data.get(x.dataId).values; + const strides2 = util_exports.computeStrides(x.shape); + const buffer2 = pool2(xValues, x.shape, x.dtype, strides2, convInfo, "max"); + res = backend2.makeTensorInfo(convInfo.outShape, x.dtype, buffer2.values); + } + return res; + } + var maxPoolConfig = { + kernelName: MaxPool, + backendName: "cpu", + kernelFunc: maxPool2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool3D.js + init_define_BUILD_VERSION(); + function maxPool3D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { filterSize, strides, pad: pad3, dimRoundingMode, dataFormat } = attrs; + assertNotComplex(x, "maxPool3d"); + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode, dataFormat); + const xValues = backend2.data.get(x.dataId).values; + const outBuf = pool3d2(xValues, x.shape, x.dtype, util_exports.computeStrides(x.shape), convInfo, "max"); + return backend2.makeTensorInfo(outBuf.shape, "float32", outBuf.values); + } + var maxPool3DConfig = { + kernelName: MaxPool3D, + backendName: "cpu", + kernelFunc: maxPool3D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool3DGrad.js + init_define_BUILD_VERSION(); + function maxPool3DGrad(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + assertNotComplex([dy, input2], "maxPool3DGrad"); + const convInfo = backend_util_exports.computePool3DInfo(input2.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const inputBuf = backend2.bufferSync(input2); + const maxPosBuf = maxPool3dPositions(inputBuf, convInfo); + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const dx = buffer(input2.shape, "float32"); + const dyBuf = backend2.bufferSync(dy); + for (let batch = 0; batch < convInfo.batchSize; ++batch) { + for (let channel = 0; channel < convInfo.inChannels; ++channel) { + for (let dxDepth = 0; dxDepth < convInfo.inDepth; ++dxDepth) { + for (let dxRow = 0; dxRow < convInfo.inHeight; ++dxRow) { + for (let dxCol = 0; dxCol < convInfo.inWidth; ++dxCol) { + const dyDepthCorner = dxDepth - padFront; + const dyRowCorner = dxRow - padTop; + const dyColCorner = dxCol - padLeft; + let dotProd = 0; + for (let wDepth = 0; wDepth < effectiveFilterDepth; wDepth += dilationDepth) { + const dyDepth = (dyDepthCorner + wDepth) / strideDepth; + if (dyDepth < 0 || dyDepth >= convInfo.outDepth || Math.floor(dyDepth) !== dyDepth) { + continue; + } + for (let wRow = 0; wRow < effectiveFilterHeight; wRow += dilationHeight) { + const dyRow = (dyRowCorner + wRow) / strideHeight; + if (dyRow < 0 || dyRow >= convInfo.outHeight || Math.floor(dyRow) !== dyRow) { + continue; + } + for (let wCol = 0; wCol < effectiveFilterWidth; wCol += dilationWidth) { + const dyCol = (dyColCorner + wCol) / strideWidth; + if (dyCol < 0 || dyCol >= convInfo.outWidth || Math.floor(dyCol) !== dyCol) { + continue; + } + const maxPos = effectiveFilterDepth * effectiveFilterHeight * effectiveFilterWidth - 1 - maxPosBuf.get(batch, dyDepth, dyRow, dyCol, channel); + const curPos = wDepth * effectiveFilterHeight * effectiveFilterWidth + wRow * effectiveFilterWidth + wCol; + const mask = maxPos === curPos ? 1 : 0; + if (mask === 0) { + continue; + } + const pixel = dyBuf.get(batch, dyDepth, dyRow, dyCol, channel); + dotProd += pixel * mask; + } + } + } + dx.set(dotProd, batch, dxDepth, dxRow, dxCol, channel); + } + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var maxPool3DGradConfig2 = { + kernelName: MaxPool3DGrad, + backendName: "cpu", + kernelFunc: maxPool3DGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolGrad.js + init_define_BUILD_VERSION(); + function maxPoolGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2, output } = inputs; + const x = input2; + assertNotComplex([input2, output], "maxPoolGrad"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const xValues = backend2.data.get(x.dataId).values; + const maxPosBuf = buffer(convInfo.outShape, x.dtype, maxPoolPositions(xValues, x.shape, x.dtype, convInfo).values); + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const dx = buffer(x.shape, "float32"); + const dyData = backend2.data.get(dy.dataId).values; + const dyBuf = buffer(dy.shape, "float32", dyData); + for (let b = 0; b < convInfo.batchSize; ++b) { + for (let d = 0; d < convInfo.inChannels; ++d) { + for (let dxR = 0; dxR < convInfo.inHeight; ++dxR) { + for (let dxC = 0; dxC < convInfo.inWidth; ++dxC) { + const dyRCorner = dxR - padTop; + const dyCCorner = dxC - padLeft; + let dotProd = 0; + for (let wR = 0; wR < effectiveFilterHeight; wR += dilationHeight) { + const dyR = (dyRCorner + wR) / strideHeight; + if (dyR < 0 || dyR >= convInfo.outHeight || Math.floor(dyR) !== dyR) { + continue; + } + for (let wC = 0; wC < effectiveFilterWidth; wC += dilationWidth) { + const dyC = (dyCCorner + wC) / strideWidth; + if (dyC < 0 || dyC >= convInfo.outWidth || Math.floor(dyC) !== dyC) { + continue; + } + const maxPos = effectiveFilterHeight * effectiveFilterWidth - 1 - maxPosBuf.get(b, dyR, dyC, d); + const curPos = wR * effectiveFilterWidth + wC; + const mask = maxPos === curPos ? 1 : 0; + if (mask === 0) { + continue; + } + const pixel = dyBuf.get(b, dyR, dyC, d); + dotProd += pixel * mask; + } + } + dx.set(dotProd, b, dxR, dxC, d); + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var maxPoolGradConfig2 = { + kernelName: MaxPoolGrad, + backendName: "cpu", + kernelFunc: maxPoolGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax_impl.js + init_define_BUILD_VERSION(); + function maxPoolWithArgmaxImpl(xValues, xShape, dtype, includeBatchInIndex, convInfo) { + const strides = util_exports.computeStrides(xShape); + const maxPools = pool2(xValues, xShape, dtype, strides, convInfo, "max"); + const maxPositions = maxPoolPositions(xValues, xShape, dtype, convInfo, true, includeBatchInIndex); + return [maxPools.values, maxPositions.values]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax.js + var maxPoolWithArgmaxConfig = { + kernelName: MaxPoolWithArgmax, + backendName: "cpu", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { x } = inputs; + const { filterSize, strides, pad: pad3, includeBatchInIndex } = attrs; + const cpuBackend = backend2; + assertNotComplex(x, "MaxPoolWithArgmax"); + const values = cpuBackend.data.get(x.dataId).values; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, [1, 1], pad3); + const [pooled, indexes] = maxPoolWithArgmaxImpl(values, x.shape, x.dtype, includeBatchInIndex, convInfo); + const pooledDataId = cpuBackend.write(pooled, convInfo.outShape, x.dtype); + const indexesDataId = cpuBackend.write(indexes, convInfo.outShape, x.dtype); + return [ + { dataId: pooledDataId, shape: convInfo.outShape, dtype: x.dtype }, + { dataId: indexesDataId, shape: convInfo.outShape, dtype: "int32" } + ]; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Mean.js + init_define_BUILD_VERSION(); + function mean2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + const axes = util_exports.parseAxisParam(axis, x.shape); + const shapes = backend_util_exports.computeOutAndReduceShapes(x.shape, axes); + const reduceShape = shapes[1]; + const reduceSize = util_exports.sizeFromShape(reduceShape); + const toDispose = []; + const reduceSizeScalar = backend2.makeTensorInfo([], "float32", new Float32Array([reduceSize])); + toDispose.push(reduceSizeScalar); + const $x = cast3({ inputs: { x }, backend: backend2, attrs: { dtype: "float32" } }); + toDispose.push($x); + const res = div2({ inputs: { a: $x, b: reduceSizeScalar }, backend: backend2 }); + toDispose.push(res); + const result = sum3({ inputs: { x: res }, backend: backend2, attrs: { axis, keepDims } }); + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var meanConfig = { + kernelName: Mean, + backendName: "cpu", + kernelFunc: mean2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Min.js + init_define_BUILD_VERSION(); + function min3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + assertNotComplex(x, "min"); + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + if (permutedAxes != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("min", axes, $x.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes($x.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const vals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(outShape), $x.dtype); + const aVals = backend2.data.get($x.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let min6 = aVals[offset]; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + if (Number.isNaN(value) || value < min6) { + min6 = value; + } + } + vals[i] = min6; + } + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo($x); + } + const result = backend2.makeTensorInfo(outShape, $x.dtype, vals); + if (keepDims) { + const expandedShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + const reshapedResult = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: expandedShape } }); + backend2.disposeIntermediateTensorInfo(result); + return reshapedResult; + } + return result; + } + var minConfig = { + kernelName: Min, + backendName: "cpu", + kernelFunc: min3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MirrorPad.js + init_define_BUILD_VERSION(); + function mirrorPad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { paddings, mode } = attrs; + assertNotComplex(x, "mirrorPad"); + const outShape = paddings.map((p2, i) => p2[0] + x.shape[i] + p2[1]); + const start = paddings.map((p2) => p2[0]); + const end = paddings.map((p2, i) => p2[0] + x.shape[i]); + const offset = mode === "reflect" ? 0 : 1; + const xVals = backend2.data.get(x.dataId).values; + const xRank = x.shape.length; + const xStrides = util_exports.computeStrides(x.shape); + const resultSize = util_exports.sizeFromShape(outShape); + const resultRank = outShape.length; + const resultStrides = util_exports.computeStrides(outShape); + const resVals = util_exports.getTypedArrayFromDType(x.dtype, resultSize); + for (let i = 0; i < resultSize; i++) { + let coords2 = util_exports.indexToLoc(i, resultRank, resultStrides); + for (let i2 = 0; i2 < resultRank; i2++) { + if (coords2[i2] < start[i2]) { + coords2[i2] = start[i2] * 2 - coords2[i2] - offset; + } else if (coords2[i2] >= end[i2]) { + coords2[i2] = (end[i2] - 1) * 2 - coords2[i2] + offset; + } + } + coords2 = coords2.map((c, i2) => c - start[i2]); + const inIndex = util_exports.locToIndex(coords2, xRank, xStrides); + resVals[i] = xVals[inIndex]; + } + const outId = backend2.write(resVals, outShape, x.dtype); + return { dataId: outId, shape: outShape, dtype: x.dtype }; + } + var mirrorPadConfig = { + kernelName: MirrorPad, + backendName: "cpu", + kernelFunc: mirrorPad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Mod.js + init_define_BUILD_VERSION(); + var modImpl = createSimpleBinaryKernelImpl((aValue, bValue) => { + const rem = aValue % bValue; + if (aValue < 0 && bValue < 0 || aValue >= 0 && bValue >= 0) { + return rem; + } else { + return (rem + bValue) % bValue; + } + }); + var mod2 = binaryKernelFunc(Mod, modImpl); + var modConfig = { + kernelName: Mod, + backendName: "cpu", + kernelFunc: mod2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multinomial.js + init_define_BUILD_VERSION(); + var seedrandom4 = __toESM(require_seedrandom2()); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Softmax.js + init_define_BUILD_VERSION(); + function softmax2(args) { + const { inputs, backend: backend2, attrs } = args; + const { logits } = inputs; + const { dim } = attrs; + const logitsRank = logits.shape.length; + let $dim = dim; + if ($dim === -1) { + $dim = logitsRank - 1; + } + if ($dim !== logitsRank - 1) { + throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${logitsRank} and dim was ${$dim}`); + } + const axes = util_exports.parseAxisParam([$dim], logits.shape); + const maxLogit = max3({ + inputs: { x: logits }, + backend: backend2, + attrs: { reductionIndices: axes, keepDims: false } + }); + const expandedShape = backend_util_exports.expandShapeToKeepDim(maxLogit.shape, axes); + const maxLogitReshaped = reshape2({ inputs: { x: maxLogit }, backend: backend2, attrs: { shape: expandedShape } }); + const a = sub2({ inputs: { a: logits, b: maxLogitReshaped }, backend: backend2 }); + const b = exp2({ inputs: { x: a }, backend: backend2 }); + const sumExp = sum3({ inputs: { x: b }, backend: backend2, attrs: { axis: axes, keepDims: false } }); + const sumReshaped = reshape2({ inputs: { x: sumExp }, backend: backend2, attrs: { shape: expandedShape } }); + const result = div2({ inputs: { a: b, b: sumReshaped }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(maxLogit); + backend2.disposeIntermediateTensorInfo(maxLogitReshaped); + backend2.disposeIntermediateTensorInfo(a); + backend2.disposeIntermediateTensorInfo(b); + backend2.disposeIntermediateTensorInfo(sumExp); + backend2.disposeIntermediateTensorInfo(sumReshaped); + return result; + } + var softmaxConfig = { + kernelName: Softmax, + backendName: "cpu", + kernelFunc: softmax2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multinomial.js + function multinomial(args) { + const { inputs, backend: backend2, attrs } = args; + const { logits } = inputs; + const { numSamples, seed, normalized } = attrs; + assertNotComplex(logits, "multinomial"); + const probabilities = normalized ? logits : softmax2({ inputs: { logits }, backend: backend2, attrs: { dim: -1 } }); + const batchSize = probabilities.shape[0]; + const numEvents = probabilities.shape[1]; + const probVals = backend2.data.get(probabilities.dataId).values; + const resShape = [batchSize, numSamples]; + const resVals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(resShape), "int32"); + for (let b = 0; b < batchSize; ++b) { + const offset = b * numEvents; + const cdf = new Float32Array(numEvents - 1); + cdf[0] = probVals[offset]; + for (let event = 1; event < cdf.length; ++event) { + cdf[event] = cdf[event - 1] + probVals[offset + event]; + } + const random = seedrandom4.alea(seed.toString()); + const outOffset = b * numSamples; + for (let sampleId = 0; sampleId < numSamples; ++sampleId) { + const r = random(); + resVals[outOffset + sampleId] = cdf.length; + for (let event = 0; event < cdf.length; event++) { + if (r < cdf[event]) { + resVals[outOffset + sampleId] = event; + break; + } + } + } + } + if (!normalized) { + backend2.disposeIntermediateTensorInfo(probabilities); + } + return backend2.makeTensorInfo(resShape, "int32", resVals); + } + var multinomialConfig = { + kernelName: Multinomial, + backendName: "cpu", + kernelFunc: multinomial + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV3.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV3Impl2 = kernel_impls_exports.nonMaxSuppressionV3Impl; + function nonMaxSuppressionV3(args) { + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold } = attrs; + assertNotComplex(boxes, "NonMaxSuppression"); + const boxesVals = backend2.data.get(boxes.dataId).values; + const scoresVals = backend2.data.get(scores.dataId).values; + const { selectedIndices } = nonMaxSuppressionV3Impl2(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold); + return backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)); + } + var nonMaxSuppressionV3Config = { + kernelName: NonMaxSuppressionV3, + backendName: "cpu", + kernelFunc: nonMaxSuppressionV3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV4.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV4Impl2 = kernel_impls_exports.nonMaxSuppressionV4Impl; + function nonMaxSuppressionV4(args) { + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize } = attrs; + assertNotComplex(boxes, "NonMaxSuppressionPadded"); + const boxesVals = backend2.data.get(boxes.dataId).values; + const scoresVals = backend2.data.get(scores.dataId).values; + const { selectedIndices, validOutputs } = nonMaxSuppressionV4Impl2(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize); + return [ + backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)), + backend2.makeTensorInfo([], "int32", new Int32Array([validOutputs])) + ]; + } + var nonMaxSuppressionV4Config = { + kernelName: NonMaxSuppressionV4, + backendName: "cpu", + kernelFunc: nonMaxSuppressionV4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV5.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV5Impl2 = kernel_impls_exports.nonMaxSuppressionV5Impl; + function nonMaxSuppressionV5(args) { + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma } = attrs; + assertNotComplex(boxes, "NonMaxSuppressionWithScore"); + const boxesVals = backend2.data.get(boxes.dataId).values; + const scoresVals = backend2.data.get(scores.dataId).values; + const maxOutputSizeVal = maxOutputSize; + const iouThresholdVal = iouThreshold; + const scoreThresholdVal = scoreThreshold; + const softNmsSigmaVal = softNmsSigma; + const { selectedIndices, selectedScores } = nonMaxSuppressionV5Impl2(boxesVals, scoresVals, maxOutputSizeVal, iouThresholdVal, scoreThresholdVal, softNmsSigmaVal); + return [ + backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)), + backend2.makeTensorInfo([selectedScores.length], "float32", new Float32Array(selectedScores)) + ]; + } + var nonMaxSuppressionV5Config = { + kernelName: NonMaxSuppressionV5, + backendName: "cpu", + kernelFunc: nonMaxSuppressionV5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/OneHot.js + init_define_BUILD_VERSION(); + function oneHot2(args) { + const { inputs, backend: backend2, attrs } = args; + const { indices } = inputs; + const { depth, onValue, offValue } = attrs; + assertNotComplex(indices, "oneHot"); + const indicesSize = util_exports.sizeFromShape(indices.shape); + const res = new Float32Array(indicesSize * depth); + res.fill(offValue); + const indicesVal = backend2.data.get(indices.dataId).values; + for (let event = 0; event < indicesSize; ++event) { + if (indicesVal[event] >= 0 && indicesVal[event] < depth) { + res[event * depth + indicesVal[event]] = onValue; + } + } + return backend2.makeTensorInfo([...indices.shape, depth], "int32", res); + } + var oneHotConfig = { + kernelName: OneHot, + backendName: "cpu", + kernelFunc: oneHot2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/OnesLike.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ZerosLike.js + init_define_BUILD_VERSION(); + function zerosLike2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (x.dtype === "string") { + throw new Error("zerosLike is not supported for string tensors"); + } else if (x.dtype === "complex64") { + const realPart = real2({ inputs: { input: x }, backend: backend2 }); + const r = zerosLike2({ inputs: { x: realPart }, backend: backend2 }); + const imagPart = imag2({ inputs: { input: x }, backend: backend2 }); + const i = zerosLike2({ inputs: { x: imagPart }, backend: backend2 }); + const result = complex2({ inputs: { real: r, imag: i }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(r); + backend2.disposeIntermediateTensorInfo(imagPart); + backend2.disposeIntermediateTensorInfo(i); + return result; + } else { + return fill2({ backend: backend2, attrs: { shape: x.shape, value: 0, dtype: x.dtype } }); + } + } + var zerosLikeConfig = { + kernelName: ZerosLike, + backendName: "cpu", + kernelFunc: zerosLike2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/OnesLike.js + function onesLike2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (x.dtype === "string") { + throw new Error("onesLike is not supported for string tensors"); + } else if (x.dtype === "complex64") { + const realPart = real2({ inputs: { input: x }, backend: backend2 }); + const r = onesLike2({ inputs: { x: realPart }, backend: backend2 }); + const imagPart = imag2({ inputs: { input: x }, backend: backend2 }); + const i = zerosLike2({ inputs: { x: imagPart }, backend: backend2 }); + const result = complex2({ inputs: { real: r, imag: i }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(r); + backend2.disposeIntermediateTensorInfo(imagPart); + backend2.disposeIntermediateTensorInfo(i); + return result; + } else { + return fill2({ backend: backend2, attrs: { shape: x.shape, value: 1, dtype: x.dtype } }); + } + } + var onesLikeConfig = { + kernelName: OnesLike, + backendName: "cpu", + kernelFunc: onesLike2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Pack.js + init_define_BUILD_VERSION(); + function pack(args) { + const { inputs, backend: backend2, attrs } = args; + const { axis } = attrs; + if (inputs.length === 1) { + return expandDims3({ inputs: { input: inputs[0] }, backend: backend2, attrs: { dim: axis } }); + } + const shape = inputs[0].shape; + const dtype = inputs[0].dtype; + inputs.forEach((t) => { + util_exports.assertShapesMatch(shape, t.shape, "All tensors passed to stack must have matching shapes"); + util_exports.assert(dtype === t.dtype, () => "All tensors passed to stack must have matching dtypes"); + }); + const intermediateTensorInfos = []; + const expandedTensors = inputs.map((t) => { + const expandedT = expandDims3({ inputs: { input: t }, backend: backend2, attrs: { dim: axis } }); + intermediateTensorInfos.push(expandedT); + return expandedT; + }); + const result = concat2({ inputs: expandedTensors, backend: backend2, attrs: { axis } }); + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var packConfig = { + kernelName: Pack, + backendName: "cpu", + kernelFunc: pack + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/PadV2.js + init_define_BUILD_VERSION(); + function padV2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { paddings, constantValue } = attrs; + assertNotComplex(x, "pad"); + const outShape = paddings.map((p2, i) => p2[0] + x.shape[i] + p2[1]); + const start = paddings.map((p2) => p2[0]); + const xVals = backend2.data.get(x.dataId).values; + const xSize = util_exports.sizeFromShape(x.shape); + const xRank = x.shape.length; + const xStrides = util_exports.computeStrides(x.shape); + const resultSize = util_exports.sizeFromShape(outShape); + const resultRank = outShape.length; + const resultStrides = util_exports.computeStrides(outShape); + const resVals = util_exports.getTypedArrayFromDType(x.dtype, resultSize); + if (constantValue !== 0) { + resVals.fill(constantValue); + } + for (let i = 0; i < xSize; i++) { + const coords2 = util_exports.indexToLoc(i, xRank, xStrides); + const outCoords = coords2.map((c, i2) => c + start[i2]); + const outIndex = util_exports.locToIndex(outCoords, resultRank, resultStrides); + resVals[outIndex] = xVals[i]; + } + const outId = backend2.write(resVals, outShape, x.dtype); + return { dataId: outId, shape: outShape, dtype: x.dtype }; + } + var padV2Config = { + kernelName: PadV2, + backendName: "cpu", + kernelFunc: padV2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Pow.js + init_define_BUILD_VERSION(); + var powImpl = createSimpleBinaryKernelImpl((a, b) => Math.pow(a, b)); + var pow2 = binaryKernelFunc(Pow, powImpl); + var powConfig = { + kernelName: Pow, + backendName: "cpu", + kernelFunc: pow2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Range.js + init_define_BUILD_VERSION(); + function range3(args) { + const { backend: backend2, attrs } = args; + const { start, stop, dtype, step: step5 } = attrs; + const values = rangeImpl(start, stop, step5, dtype); + return backend2.makeTensorInfo([values.length], dtype, values); + } + var rangeConfig = { + kernelName: Range, + backendName: "cpu", + kernelFunc: range3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reciprocal.js + init_define_BUILD_VERSION(); + var reciprocal2 = unaryKernelFunc(Reciprocal, (xi) => 1 / xi); + var reciprocalConfig = { + kernelName: Reciprocal, + backendName: "cpu", + kernelFunc: reciprocal2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeBilinear.js + init_define_BUILD_VERSION(); + function resizeBilinear2(args) { + const { inputs, backend: backend2, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + assertNotComplex(images, "resizeBilinear"); + const imagesStrides = util_exports.computeStrides(images.shape); + const [newHeight, newWidth] = size; + const [batch, oldHeight, oldWidth, numChannels] = images.shape; + const xValues = backend2.data.get(images.dataId).values; + const result = new Float32Array(util_exports.sizeFromShape([batch, newHeight, newWidth, numChannels])); + const effectiveInputSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutputSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + let outputIdx = 0; + const effectiveRowSizeRatio = effectiveInputSize[0] / effectiveOutputSize[0]; + const effectiveColSizeRatio = effectiveInputSize[1] / effectiveOutputSize[1]; + for (let b = 0; b < batch; b++) { + for (let r = 0; r < newHeight; r++) { + let sourceFracRow; + if (halfPixelCenters) { + sourceFracRow = effectiveRowSizeRatio * (r + 0.5) - 0.5; + } else { + sourceFracRow = effectiveRowSizeRatio * r; + } + const sourceRowFloor = Math.max(0, Math.floor(sourceFracRow)); + const rowFrac = sourceFracRow - sourceRowFloor; + const sourceRowCeil = Math.min(oldHeight - 1, Math.ceil(sourceFracRow)); + const topRowOffset = b * imagesStrides[0] + sourceRowFloor * imagesStrides[1]; + const botRowOffset = b * imagesStrides[0] + sourceRowCeil * imagesStrides[1]; + for (let c = 0; c < newWidth; c++) { + let sourceFracCol; + if (halfPixelCenters) { + sourceFracCol = effectiveColSizeRatio * (c + 0.5) - 0.5; + } else { + sourceFracCol = effectiveColSizeRatio * c; + } + const sourceColFloor = Math.max(0, Math.floor(sourceFracCol)); + const colFrac = sourceFracCol - sourceColFloor; + const sourceColCeil = Math.min(oldWidth - 1, Math.ceil(sourceFracCol)); + const topLeftOffest = topRowOffset + sourceColFloor * imagesStrides[2]; + const botLeftOffset = botRowOffset + sourceColFloor * imagesStrides[2]; + const topRightOffset = topRowOffset + sourceColCeil * imagesStrides[2]; + const botRightOffest = botRowOffset + sourceColCeil * imagesStrides[2]; + for (let d = 0; d < numChannels; d++) { + const topLeft = xValues[topLeftOffest + d]; + const bottomLeft = xValues[botLeftOffset + d]; + const topRight = xValues[topRightOffset + d]; + const bottomRight = xValues[botRightOffest + d]; + const top = topLeft + (topRight - topLeft) * colFrac; + const bottom = bottomLeft + (bottomRight - bottomLeft) * colFrac; + const newValue = top + (bottom - top) * rowFrac; + result[outputIdx++] = newValue; + } + } + } + } + return backend2.makeTensorInfo([batch, newHeight, newWidth, numChannels], "float32", result); + } + var resizeBilinearConfig = { + kernelName: ResizeBilinear, + backendName: "cpu", + kernelFunc: resizeBilinear2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeBilinearGrad.js + init_define_BUILD_VERSION(); + function resizeBilinearGrad(args) { + const { inputs, backend: backend2, attrs } = args; + const { images, dy } = inputs; + const { alignCorners } = attrs; + assertNotComplex([dy, images], "resizeBilinearGrad"); + const imagesStrides = util_exports.computeStrides(images.shape); + const [batch, xHeight, xWidth, depth] = images.shape; + const [, yHeight, yWidth] = dy.shape; + const output = new Float32Array(batch * xHeight * xWidth * depth); + const effectiveXSize = [ + alignCorners && yHeight > 1 ? xHeight - 1 : xHeight, + alignCorners && yWidth > 1 ? xWidth - 1 : xWidth + ]; + const effectiveYSize = [ + alignCorners && yHeight > 1 ? yHeight - 1 : yHeight, + alignCorners && yWidth > 1 ? yWidth - 1 : yWidth + ]; + const heightScale = effectiveXSize[0] / effectiveYSize[0]; + const widthScale = effectiveXSize[1] / effectiveYSize[1]; + const dyValues = backend2.data.get(dy.dataId).values; + let offset = 0; + for (let b = 0; b < batch; b++) { + const bOffset = b * imagesStrides[0]; + for (let r = 0; r < yHeight; r++) { + const dxR = r * heightScale; + const topDxRIndex = Math.floor(dxR); + const bottomDxRIndex = Math.min(Math.ceil(dxR), xHeight - 1); + const topDxROffset = bOffset + topDxRIndex * imagesStrides[1]; + const bottomDxROffset = bOffset + bottomDxRIndex * imagesStrides[1]; + const dxRLerp = dxR - topDxRIndex; + const inverseDxRLerp = 1 - dxRLerp; + for (let c = 0; c < yWidth; c++) { + const dxC = c * widthScale; + const leftDxCIndex = Math.floor(dxC); + const rightDxCIndex = Math.min(Math.ceil(dxC), xWidth - 1); + const dxCLerp = dxC - leftDxCIndex; + const inverseDxCLerp = 1 - dxCLerp; + const topLeftRCOffset = topDxROffset + leftDxCIndex * imagesStrides[2]; + const topRightRCOffset = topDxROffset + rightDxCIndex * imagesStrides[2]; + const bottomLeftRCOffset = bottomDxROffset + leftDxCIndex * imagesStrides[2]; + const bottomRightRCOffset = bottomDxROffset + rightDxCIndex * imagesStrides[2]; + const inverseDxRLerpTimesInverseDxCLerp = inverseDxRLerp * inverseDxCLerp; + const inverseDxRLerpTimesDxCLerp = inverseDxRLerp * dxCLerp; + const dxRLerpTimesInverseDxCLerp = dxRLerp * inverseDxCLerp; + const dxRLerpTimesDxCLerp = dxRLerp * dxCLerp; + for (let d = 0; d < depth; d++) { + const dyVal = dyValues[offset++]; + output[topLeftRCOffset + d] += dyVal * inverseDxRLerpTimesInverseDxCLerp; + output[topRightRCOffset + d] += dyVal * inverseDxRLerpTimesDxCLerp; + output[bottomLeftRCOffset + d] += dyVal * dxRLerpTimesInverseDxCLerp; + output[bottomRightRCOffset + d] += dyVal * dxRLerpTimesDxCLerp; + } + } + } + } + return backend2.makeTensorInfo([batch, xWidth, xHeight, depth], "float32", output); + } + var resizeBilinearGradConfig2 = { + kernelName: ResizeBilinearGrad, + backendName: "cpu", + kernelFunc: resizeBilinearGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeNearestNeighbor.js + init_define_BUILD_VERSION(); + function resizeNearestNeighbor2(args) { + const { inputs, backend: backend2, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + assertNotComplex(images, "resizeNearestNeighbor"); + const imagesStrides = util_exports.computeStrides(images.shape); + const [newHeight, newWidth] = size; + const [batch, oldHeight, oldWidth, numChannels] = images.shape; + const xValues = backend2.data.get(images.dataId).values; + const output = new Float32Array(batch * newHeight * newWidth * numChannels); + const effectiveInputSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutputSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + const effectiveRowSizeRatio = effectiveInputSize[0] / effectiveOutputSize[0]; + const effectiveColSizeRatio = effectiveInputSize[1] / effectiveOutputSize[1]; + let outputOffset = 0; + for (let b = 0; b < batch; b++) { + const batchOffset = b * imagesStrides[0]; + for (let r = 0; r < newHeight; r++) { + const sourceFracRow = halfPixelCenters ? effectiveRowSizeRatio * (r + 0.5) : effectiveRowSizeRatio * r; + let sourceNearestRow = Math.min(oldHeight - 1, alignCorners ? Math.round(sourceFracRow) : Math.floor(sourceFracRow)); + if (halfPixelCenters) { + sourceNearestRow = Math.max(0, sourceNearestRow); + } + const rowOffset = batchOffset + sourceNearestRow * imagesStrides[1]; + for (let c = 0; c < newWidth; c++) { + const sourceFracCol = halfPixelCenters ? effectiveColSizeRatio * (c + 0.5) : effectiveColSizeRatio * c; + let sourceNearestCol = Math.min(oldWidth - 1, alignCorners ? Math.round(sourceFracCol) : Math.floor(sourceFracCol)); + if (halfPixelCenters) { + sourceNearestCol = Math.max(0, sourceNearestCol); + } + const colOffset = rowOffset + sourceNearestCol * imagesStrides[2]; + for (let d = 0; d < numChannels; d++) { + const newVal = xValues[colOffset + d]; + output[outputOffset++] = newVal; + } + } + } + } + return backend2.makeTensorInfo([batch, newHeight, newWidth, numChannels], images.dtype, output); + } + var resizeNearestNeighborConfig = { + kernelName: ResizeNearestNeighbor, + backendName: "cpu", + kernelFunc: resizeNearestNeighbor2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeNearestNeighborGrad.js + init_define_BUILD_VERSION(); + function resizeNearestNeighborGrad(args) { + const { inputs, backend: backend2, attrs } = args; + const { images, dy } = inputs; + const { alignCorners } = attrs; + assertNotComplex([dy, images], "resizeNearestNeighborGrad"); + const imagesStrides = util_exports.computeStrides(images.shape); + const dyStrides = util_exports.computeStrides(dy.shape); + const [batch, xHeight, xWidth, depth] = images.shape; + const [, yHeight, yWidth] = dy.shape; + const output = new Float32Array(batch * xHeight * xWidth * depth); + const dyValues = backend2.data.get(dy.dataId).values; + const effectiveXSize = [ + alignCorners && yHeight > 1 ? xHeight - 1 : xHeight, + alignCorners && yWidth > 1 ? xWidth - 1 : xWidth + ]; + const effectiveYSize = [ + alignCorners && yHeight > 1 ? yHeight - 1 : yHeight, + alignCorners && yWidth > 1 ? yWidth - 1 : yWidth + ]; + const heightScale = effectiveXSize[0] / effectiveYSize[0]; + const widthScale = effectiveXSize[1] / effectiveYSize[1]; + const invHeightScale = 1 / heightScale; + const invWidthScale = 1 / widthScale; + const winHeight = Math.ceil(invHeightScale) * 2 + 2; + const winWidth = Math.ceil(invWidthScale) * 2 + 2; + for (let b = 0; b < batch; b++) { + const batchOffset = b * imagesStrides[0]; + for (let r = 0; r < xHeight; r++) { + const rowOffset = batchOffset + r * imagesStrides[1]; + const startRLerp = Math.floor(r * invHeightScale); + const startDyR = Math.floor(startRLerp - winHeight / 2); + for (let c = 0; c < xWidth; c++) { + const colOffset = rowOffset + c * imagesStrides[2]; + const startCLerp = Math.floor(c * invWidthScale); + const startDyC = Math.floor(startCLerp - winWidth / 2); + for (let d = 0; d < depth; d++) { + let accum = 0; + for (let dyRIndex = 0; dyRIndex < winHeight; dyRIndex++) { + const dyR = dyRIndex + startDyR; + if (dyR < 0 || dyR >= yHeight) { + continue; + } + const dyROffset = batchOffset + dyR * dyStrides[1]; + const sourceFracRow = dyR * heightScale; + const sourceNearestRow = Math.min(xHeight - 1, alignCorners ? Math.round(sourceFracRow) : Math.floor(sourceFracRow)); + if (r !== sourceNearestRow) { + continue; + } + for (let dyCIndex = 0; dyCIndex < winWidth; dyCIndex++) { + const dyC = dyCIndex + startDyC; + if (dyC < 0 || dyC >= yWidth) { + continue; + } + const dyCOffset = dyROffset + dyC * dyStrides[2]; + const sourceFracCol = dyC * widthScale; + const sourceNearestCol = Math.min(xWidth - 1, alignCorners ? Math.round(sourceFracCol) : Math.floor(sourceFracCol)); + if (c === sourceNearestCol) { + accum += dyValues[dyCOffset + d]; + } + } + } + output[colOffset + d] = accum; + } + } + } + } + return backend2.makeTensorInfo(images.shape, images.dtype, output); + } + var resizeNearestNeighborGradConfig2 = { + kernelName: ResizeNearestNeighborGrad, + backendName: "cpu", + kernelFunc: resizeNearestNeighborGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reverse.js + init_define_BUILD_VERSION(); + function reverse2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { dims } = attrs; + assertNotComplex(x, "reverse"); + const xRank = x.shape.length; + const $dims = util_exports.parseAxisParam(dims, x.shape); + if (xRank === 0) { + return identity({ inputs: { x }, backend: backend2 }); + } + const outBuf = new TensorBuffer(x.shape, x.dtype); + const xBuf = backend2.bufferSync(x); + for (let i = 0; i < outBuf.size; i++) { + const outLoc = outBuf.indexToLoc(i); + const inLoc = outLoc.slice(); + $dims.forEach((d) => inLoc[d] = x.shape[d] - 1 - inLoc[d]); + outBuf.set(xBuf.get(...inLoc), ...outLoc); + } + return backend2.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values); + } + var reverseConfig = { + kernelName: Reverse, + backendName: "cpu", + kernelFunc: reverse2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RotateWithOffset.js + init_define_BUILD_VERSION(); + var rotateWithOffsetConfig = { + kernelName: RotateWithOffset, + backendName: "cpu", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { image: image2 } = inputs; + const { radians, fillValue, center } = attrs; + const cpuBackend = backend2; + const output = util_exports.getTypedArrayFromDType(image2.dtype, util_exports.sizeFromShape(image2.shape)); + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const [centerX, centerY] = backend_util_exports.getImageCenter(center, imageHeight, imageWidth); + const fullOpacityValue = 255; + const sinFactor = Math.sin(radians); + const cosFactor = Math.cos(radians); + const imageVals = cpuBackend.data.get(image2.dataId).values; + for (let batchIdx = 0; batchIdx < batch; batchIdx++) { + const batchOffset = batchIdx * imageWidth * imageHeight * numChannels; + for (let row = 0; row < imageHeight; row++) { + const rowOffset = row * (imageWidth * numChannels); + for (let col = 0; col < imageWidth; col++) { + const colOffset = col * numChannels; + for (let channel = 0; channel < numChannels; channel++) { + const coords2 = [batch, row, col, channel]; + const x = coords2[2]; + const y = coords2[1]; + let coordX = (x - centerX) * cosFactor - (y - centerY) * sinFactor; + let coordY = (x - centerX) * sinFactor + (y - centerY) * cosFactor; + coordX = Math.round(coordX + centerX); + coordY = Math.round(coordY + centerY); + let outputValue = fillValue; + if (typeof fillValue !== "number") { + if (channel === 3) { + outputValue = fullOpacityValue; + } else { + outputValue = fillValue[channel]; + } + } + if (coordX >= 0 && coordX < imageWidth && coordY >= 0 && coordY < imageHeight) { + const rotatedRowOffset = coordY * (imageWidth * numChannels); + const rotatedColOffset = coordX * numChannels; + const imageIdx = batchOffset + rotatedRowOffset + rotatedColOffset + channel; + outputValue = imageVals[imageIdx]; + } + const outIdx = batchOffset + rowOffset + colOffset + channel; + output[outIdx] = outputValue; + } + } + } + } + const dataId = cpuBackend.write(output, image2.shape, image2.dtype); + return { dataId, shape: image2.shape, dtype: image2.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Round.js + init_define_BUILD_VERSION(); + var round3 = unaryKernelFunc(Round, (xi) => { + const base = Math.floor(xi); + if (xi - base < 0.5) { + return Math.floor(xi); + } else if (xi - base > 0.5) { + return Math.ceil(xi); + } else { + if (base % 2 === 0) { + return base; + } else { + return base + 1; + } + } + }); + var roundConfig = { + kernelName: Round, + backendName: "cpu", + kernelFunc: round3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ScatterNd.js + init_define_BUILD_VERSION(); + function scatterNd(args) { + const { inputs, backend: backend2, attrs } = args; + const { indices, updates } = inputs; + const { shape } = attrs; + const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util_exports.calculateShapes(updates, indices, shape); + const sumDupeIndices = true; + const indicesBuf = backend2.bufferSync(indices); + const updatesBuf = backend2.bufferSync(updates); + const outBuf = scatterImpl(indicesBuf, updatesBuf, shape, outputSize, sliceSize, numUpdates, sliceRank, strides, 0, sumDupeIndices); + return backend2.makeTensorInfo(shape, outBuf.dtype, outBuf.values); + } + var scatterNdConfig = { + kernelName: ScatterNd, + backendName: "cpu", + kernelFunc: scatterNd + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SearchSorted.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SearchSorted_impl.js + init_define_BUILD_VERSION(); + function lowerBound(array2, value) { + let left = 0; + let right = array2.length; + let mid = 0; + while (left < right) { + mid = Math.floor((left + right) / 2); + if (array2[mid] < value) { + left = mid + 1; + } else { + right = mid; + } + } + return right; + } + function upperBound(array2, value) { + let left = 0; + let right = array2.length; + let mid = 0; + while (left < right) { + mid = Math.floor((left + right) / 2); + if (array2[mid] <= value) { + left = mid + 1; + } else { + right = mid; + } + } + return right; + } + function searchSortedImpl(sortedInputs, values, batchSize, numInputs, numValues, side) { + const output = util_exports.getArrayFromDType("int32", batchSize * numValues); + for (let b = 0; b < batchSize; ++b) { + const sortedInputsSlice = sortedInputs.slice(b * numInputs, (b + 1) * numInputs); + const outputOffset = b * numValues; + for (let i = 0; i < numValues; ++i) { + output[outputOffset + i] = side === "left" ? lowerBound(sortedInputsSlice, values[i + outputOffset]) : upperBound(sortedInputsSlice, values[i + outputOffset]); + } + } + return output; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SearchSorted.js + function searchSorted(args) { + const { inputs, backend: backend2, attrs } = args; + const { sortedSequence, values } = inputs; + const { side } = attrs; + const $sortedSequence = backend2.data.get(sortedSequence.dataId).values; + const $values = backend2.data.get(values.dataId).values; + const output = searchSortedImpl($sortedSequence, $values, sortedSequence.shape[0], sortedSequence.shape[1], values.shape[1], side); + return backend2.makeTensorInfo(values.shape, "int32", output); + } + var searchSortedConfig = { + kernelName: SearchSorted, + backendName: "cpu", + kernelFunc: searchSorted + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Select.js + init_define_BUILD_VERSION(); + function select2(args) { + const { inputs, backend: backend2 } = args; + const { condition, t, e } = inputs; + assertNotComplex([condition, t, e], "select"); + const conditionRank = condition.shape.length; + const values = backend2.data.get(condition.dataId).values; + const tValues = backend2.data.get(t.dataId).values; + const eValues = backend2.data.get(e.dataId).values; + const resultDtype = upcastType(t.dtype, e.dtype); + const newValues = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(t.shape), resultDtype); + let index = 0; + const offset = conditionRank === 0 || conditionRank > 1 || t.shape.length === 1 ? 1 : util_exports.sizeFromShape(t.shape.slice(1)); + for (let i = 0; i < values.length; i++) { + for (let j = 0; j < offset; j++) { + if (values[i] === 1) { + newValues[index++] = tValues[i]; + } else { + newValues[index++] = eValues[i]; + } + } + } + return backend2.makeTensorInfo(t.shape, resultDtype, newValues); + } + var selectConfig = { + kernelName: Select, + backendName: "cpu", + kernelFunc: select2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Selu.js + init_define_BUILD_VERSION(); + var scaleAlpha = backend_util_exports.SELU_SCALEALPHA; + var scale = backend_util_exports.SELU_SCALE; + var selu2 = unaryKernelFunc(Selu, (xi) => { + if (xi >= 0) { + return scale * xi; + } else { + return scaleAlpha * (Math.exp(xi) - 1); + } + }); + var seluConfig = { + kernelName: Selu, + backendName: "cpu", + kernelFunc: selu2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sign.js + init_define_BUILD_VERSION(); + var sign2 = unaryKernelFunc(Sign, (xi) => { + if (xi < 0) { + return -1; + } else if (xi > 0) { + return 1; + } else { + return 0; + } + }); + var signConfig = { + kernelName: Sign, + backendName: "cpu", + kernelFunc: sign2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sin.js + init_define_BUILD_VERSION(); + var sin2 = unaryKernelFunc(Sin, (xi) => Math.sin(xi)); + var sinConfig = { + kernelName: Sin, + backendName: "cpu", + kernelFunc: sin2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sinh.js + init_define_BUILD_VERSION(); + var sinh2 = unaryKernelFunc(Sinh, (xi) => Math.sinh(xi)); + var sinhConfig = { + kernelName: Sinh, + backendName: "cpu", + kernelFunc: sinh2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Softplus.js + init_define_BUILD_VERSION(); + var epsilon2 = 11920928955078125e-23; + var threshold2 = Math.log(epsilon2) + 2; + var softplus2 = unaryKernelFunc(Softplus, (xi) => { + const tooLarge = xi > -threshold2; + const tooSmall = xi < threshold2; + const expX = Math.exp(xi); + let result; + if (tooSmall) { + result = expX; + } else if (tooLarge) { + result = xi; + } else { + result = Math.log(1 + expX); + } + return result; + }); + var softplusConfig = { + kernelName: Softplus, + backendName: "cpu", + kernelFunc: softplus2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SpaceToBatchND.js + init_define_BUILD_VERSION(); + function spaceToBatchND2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, paddings } = attrs; + assertNotComplex([x], "spaceToBatchND"); + const prod5 = util_exports.sizeFromShape(blockShape); + const completePaddings = [[0, 0]]; + completePaddings.push(...paddings); + for (let i = 1 + blockShape.length; i < x.shape.length; ++i) { + completePaddings.push([0, 0]); + } + const paddedX = padV2Config.kernelFunc({ + inputs: { x }, + backend: backend2, + attrs: { paddings: completePaddings, constantValue: 0 } + }); + const reshapedPaddedShape = backend_util_exports.getReshaped(paddedX.shape, blockShape, prod5, false); + const permutedReshapedPaddedPermutation = backend_util_exports.getPermuted(reshapedPaddedShape.length, blockShape.length, false); + const flattenShape = backend_util_exports.getReshapedPermuted(paddedX.shape, blockShape, prod5, false); + const reshapeInputs = { x: paddedX }; + const reshapeAttrs = { shape: reshapedPaddedShape }; + const paddedXReshaped = reshape2({ inputs: reshapeInputs, backend: backend2, attrs: reshapeAttrs }); + const transposeInputs = { x: paddedXReshaped }; + const transposeAttrs = { perm: permutedReshapedPaddedPermutation }; + const paddedXT = transpose2({ inputs: transposeInputs, backend: backend2, attrs: transposeAttrs }); + const resultReshapeInputs = { x: paddedXT }; + const resultReshapeAttrs = { shape: flattenShape }; + const result = reshape2({ inputs: resultReshapeInputs, backend: backend2, attrs: resultReshapeAttrs }); + backend2.disposeIntermediateTensorInfo(paddedX); + backend2.disposeIntermediateTensorInfo(paddedXReshaped); + backend2.disposeIntermediateTensorInfo(paddedXT); + return result; + } + var spaceToBatchNDConfig = { + kernelName: SpaceToBatchND, + backendName: "cpu", + kernelFunc: spaceToBatchND2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseFillEmptyRows.js + init_define_BUILD_VERSION(); + function sparseFillEmptyRows(args) { + const { inputs, backend: backend2 } = args; + const { indices, values, denseShape, defaultValue } = inputs; + if (denseShape.shape.length !== 1) { + throw new Error(`Dense shape must be a vector, saw: + ${denseShape.shape}`); + } + if (indices.shape.length !== 2) { + throw new Error(`Indices must be a matrix, saw: + ${indices.shape}`); + } + if (values.shape.length !== 1) { + throw new Error(`Values must be a vector, saw: + ${values.shape}`); + } + if (defaultValue.shape.length !== 0) { + throw new Error(`Default value must be a scalar, saw: + ${defaultValue.shape}`); + } + const $indices = backend2.data.get(indices.dataId).values; + const $values = backend2.data.get(values.dataId).values; + const $denseShape = backend2.data.get(denseShape.dataId).values; + const $defaultValue = backend2.data.get(defaultValue.dataId).values[0]; + const [outputIndices, outputIndicesShape, outputValues, emptyRowIndicator, reverseIndexMap] = sparseFillEmptyRowsImpl($indices, indices.shape, indices.dtype, $values, values.dtype, $denseShape, $defaultValue); + return [ + backend2.makeTensorInfo(outputIndicesShape, indices.dtype, outputIndices), + backend2.makeTensorInfo([outputIndicesShape[0]], values.dtype, outputValues), + backend2.makeTensorInfo([emptyRowIndicator.length], "bool", new Uint8Array(emptyRowIndicator.map((value) => Number(value)))), + backend2.makeTensorInfo([reverseIndexMap.length], indices.dtype, new Int32Array(reverseIndexMap)) + ]; + } + var sparseFillEmptyRowsConfig = { + kernelName: SparseFillEmptyRows, + backendName: "cpu", + kernelFunc: sparseFillEmptyRows + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseReshape.js + init_define_BUILD_VERSION(); + function sparseReshape(args) { + const { inputs, backend: backend2 } = args; + const { inputIndices, inputShape, newShape } = inputs; + if (inputIndices.shape.length !== 2) { + throw new Error(`Input indices should be a matrix but received shape + ${inputIndices.shape}`); + } + if (inputShape.shape.length !== 1) { + throw new Error(`Input shape should be a vector but received shape + ${inputShape.shape}`); + } + if (newShape.shape.length !== 1) { + throw new Error(`Target shape should be a vector but received shape ${newShape.shape}`); + } + const $inputShape = Array.from(backend2.data.get(inputShape.dataId).values); + const $inputIndices = backend2.data.get(inputIndices.dataId).values; + const targetShape = Array.from(backend2.data.get(newShape.dataId).values); + const [newIndices, indicesShape, outputShape] = sparseReshapeImpl($inputIndices, inputIndices.shape, inputIndices.dtype, $inputShape, targetShape); + return [ + backend2.makeTensorInfo(indicesShape, inputIndices.dtype, newIndices), + backend2.makeTensorInfo([outputShape.length], newShape.dtype, new Int32Array(outputShape)) + ]; + } + var sparseReshapeConfig = { + kernelName: SparseReshape, + backendName: "cpu", + kernelFunc: sparseReshape + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseSegmentMean.js + init_define_BUILD_VERSION(); + function sparseSegmentMean(args) { + const { inputs, backend: backend2 } = args; + const { data, indices, segmentIds } = inputs; + if (data.shape.length < 1) { + throw new Error(`Data should be at least 1 dimensional but received scalar`); + } + if (indices.shape.length !== 1) { + throw new Error(`Indices should be a vector but received shape + ${indices.shape}`); + } + if (segmentIds.shape.length !== 1) { + throw new Error(`Segment ids should be a vector but received shape + ${segmentIds.shape}`); + } + if (indices.shape[0] !== segmentIds.shape[0]) { + throw new Error(`segmentIds and indices should have same size.`); + } + const $data = backend2.data.get(data.dataId).values; + const $indices = backend2.data.get(indices.dataId).values; + const $segmentIds = backend2.data.get(segmentIds.dataId).values; + const [outputData, outputDataShape] = sparseSegmentReductionImpl($data, data.shape, data.dtype, $indices, $segmentIds, true); + return backend2.makeTensorInfo(outputDataShape, data.dtype, outputData); + } + var sparseSegmentMeanConfig = { + kernelName: SparseSegmentMean, + backendName: "cpu", + kernelFunc: sparseSegmentMean + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseSegmentSum.js + init_define_BUILD_VERSION(); + function sparseSegmentSum(args) { + const { inputs, backend: backend2 } = args; + const { data, indices, segmentIds } = inputs; + if (data.shape.length < 1) { + throw new Error(`Data should be at least 1 dimensional but received scalar`); + } + if (indices.shape.length !== 1) { + throw new Error(`Indices should be a vector but received shape + ${indices.shape}`); + } + if (segmentIds.shape.length !== 1) { + throw new Error(`Segment ids should be a vector but received shape + ${segmentIds.shape}`); + } + if (indices.shape[0] !== segmentIds.shape[0]) { + throw new Error(`segmentIds and indices should have same size.`); + } + const $data = backend2.data.get(data.dataId).values; + const $indices = backend2.data.get(indices.dataId).values; + const $segmentIds = backend2.data.get(segmentIds.dataId).values; + const [outputData, outputDataShape] = sparseSegmentReductionImpl($data, data.shape, data.dtype, $indices, $segmentIds); + return backend2.makeTensorInfo(outputDataShape, data.dtype, outputData); + } + var sparseSegmentSumConfig = { + kernelName: SparseSegmentSum, + backendName: "cpu", + kernelFunc: sparseSegmentSum + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseToDense.js + init_define_BUILD_VERSION(); + function sparseToDense(args) { + const { inputs, backend: backend2, attrs } = args; + const { sparseIndices, sparseValues, defaultValue } = inputs; + const { outputShape } = attrs; + const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util_exports.calculateShapes(sparseValues, sparseIndices, outputShape); + const sumDupeIndices = false; + const indicesBuf = backend2.bufferSync(sparseIndices); + let outBuf; + switch (sparseValues.dtype) { + case "bool": { + const updatesBuf = backend2.bufferSync(sparseValues); + const $defaultValue = Boolean(backend2.data.get(defaultValue.dataId).values[0]); + outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices); + break; + } + case "float32": { + const updatesBuf = backend2.bufferSync(sparseValues); + const $defaultValue = backend2.data.get(defaultValue.dataId).values[0]; + outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices); + break; + } + case "int32": { + const updatesBuf = backend2.bufferSync(sparseValues); + const $defaultValue = backend2.data.get(defaultValue.dataId).values[0]; + outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices); + break; + } + case "string": { + const updatesBuf = backend2.bufferSync(sparseValues); + const $defaultValue = util_exports.decodeString(backend2.data.get(defaultValue.dataId).values[0]); + outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices); + break; + } + default: + throw new Error(`Unsupported type ${sparseValues.dtype}`); + } + return backend2.makeTensorInfo(outputShape, outBuf.dtype, outBuf.values); + } + var sparseToDenseConfig = { + kernelName: SparseToDense, + backendName: "cpu", + kernelFunc: sparseToDense + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SplitV.js + init_define_BUILD_VERSION(); + function splitV(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { numOrSizeSplits, axis } = attrs; + const $axis = util_exports.parseAxisParam(axis, x.shape)[0]; + const splitSizes = backend_util_exports.prepareSplitSize(x, numOrSizeSplits, $axis); + const begin = new Array(x.shape.length).fill(0); + const size = x.shape.slice(); + return splitSizes.map((s) => { + const sliceSize = [...size]; + sliceSize[$axis] = s; + const sliceT = slice2({ inputs: { x }, backend: backend2, attrs: { begin, size: sliceSize } }); + begin[$axis] += s; + return sliceT; + }); + } + var splitVConfig = { + kernelName: SplitV, + backendName: "cpu", + kernelFunc: splitV + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Square.js + init_define_BUILD_VERSION(); + var squareConfig = { + kernelName: Square, + backendName: "cpu", + kernelFunc: ({ inputs, backend: backend2 }) => { + const { x } = inputs; + const cpuBackend = backend2; + assertNotComplex(x, "square"); + const values = cpuBackend.data.get(x.dataId).values; + const newValues = new Float32Array(values.length); + for (let i = 0; i < values.length; ++i) { + const value = values[i]; + newValues[i] = value * value; + } + const dataId = cpuBackend.write(newValues, x.shape, x.dtype); + return { dataId, shape: x.shape, dtype: x.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Step.js + init_define_BUILD_VERSION(); + var step2 = unaryKernelFunc(Step, (xi, attrs) => { + const stepAttrs = attrs; + if (isNaN(xi)) { + return NaN; + } else { + return xi > 0 ? 1 : stepAttrs.alpha; + } + }); + var stepConfig = { + kernelName: Step, + backendName: "cpu", + kernelFunc: step2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StridedSlice.js + init_define_BUILD_VERSION(); + function stridedSlice2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask } = attrs; + assertNotComplex(x, "stridedSlice"); + const { finalShapeSparse, finalShape, isIdentity, sliceDim0, isSimpleSlice, begin: $begin, end: $end, strides: $strides } = slice_util_exports.sliceInfo(x.shape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask); + let result; + if (isIdentity) { + result = reshape2({ inputs: { x }, backend: backend2, attrs: { shape: finalShape } }); + } else if (sliceDim0 || isSimpleSlice) { + util_exports.assert(x.shape.length >= 1, () => `Input must have rank at least 1, got: ${x.shape.length}`); + const size = slice_util_exports.computeOutShape($begin, $end, $strides); + const sliced = slice2({ inputs: { x }, backend: backend2, attrs: { begin: $begin, size } }); + result = reshape2({ inputs: { x: sliced }, backend: backend2, attrs: { shape: finalShape } }); + backend2.disposeIntermediateTensorInfo(sliced); + } else { + const xBuf = backend2.bufferSync(x); + const outBuf = stridedSliceImpl(finalShapeSparse, xBuf, $strides, $begin); + result = backend2.makeTensorInfo(finalShape, outBuf.dtype, outBuf.values); + } + return result; + } + var stridedSliceConfig = { + kernelName: StridedSlice, + backendName: "cpu", + kernelFunc: stridedSlice2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringNGrams.js + init_define_BUILD_VERSION(); + function stringNGrams(args) { + const { inputs, backend: backend2, attrs } = args; + const { separator, nGramWidths, leftPad, rightPad: rightPad2, padWidth, preserveShortSequences } = attrs; + const { data, dataSplits } = inputs; + const $data = backend2.data.get(data.dataId).values; + const $dataSplits = backend2.data.get(dataSplits.dataId).values; + const [nGrams, nGramsSplits] = stringNGramsImpl($data, $dataSplits, separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences); + return [ + backend2.makeTensorInfo([nGrams.length], "string", nGrams), + backend2.makeTensorInfo(dataSplits.shape, "int32", nGramsSplits) + ]; + } + var stringNGramsConfig = { + kernelName: StringNGrams, + backendName: "cpu", + kernelFunc: stringNGrams + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringSplit.js + init_define_BUILD_VERSION(); + function stringSplit(args) { + const { inputs, backend: backend2, attrs } = args; + const { skipEmpty } = attrs; + const { input: input2, delimiter } = inputs; + if (input2.dtype !== "string") { + throw new Error("Input must be of datatype string"); + } + if (input2.shape.length !== 1) { + throw new Error(`Input must be a vector, got shape: ${input2.shape}`); + } + if (delimiter.shape.length !== 0) { + throw new Error(`Delimiter must be a scalar, got shape: ${delimiter.shape}`); + } + const $input = backend2.data.get(input2.dataId).values; + const $delimiter = backend2.data.get(delimiter.dataId).values[0]; + const [indices, values, shape] = stringSplitImpl($input, $delimiter, skipEmpty); + const outputSize = values.length; + return [ + backend2.makeTensorInfo([outputSize, 2], "int32", indices), + backend2.makeTensorInfo([outputSize], "string", values), + backend2.makeTensorInfo([2], "int32", new Int32Array(shape)) + ]; + } + var stringSplitConfig = { + kernelName: StringSplit, + backendName: "cpu", + kernelFunc: stringSplit + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringToHashBucketFast.js + init_define_BUILD_VERSION(); + function stringToHashBucketFast(args) { + const { inputs, backend: backend2, attrs } = args; + const { numBuckets } = attrs; + const { input: input2 } = inputs; + if (input2.dtype !== "string") { + throw new Error("Input must be of datatype string"); + } + if (numBuckets <= 0) { + throw new Error(`Number of buckets must be at least 1`); + } + const $input = backend2.data.get(input2.dataId).values; + const output = stringToHashBucketFastImpl($input, numBuckets); + return backend2.makeTensorInfo(input2.shape, "int32", output); + } + var stringToHashBucketFastConfig = { + kernelName: StringToHashBucketFast, + backendName: "cpu", + kernelFunc: stringToHashBucketFast + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tan.js + init_define_BUILD_VERSION(); + var tan2 = unaryKernelFunc(Tan, (xi) => Math.tan(xi)); + var tanConfig = { + kernelName: Tan, + backendName: "cpu", + kernelFunc: tan2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tanh.js + init_define_BUILD_VERSION(); + var tanh3 = unaryKernelFunc(Tanh, (xi) => Math.tanh(xi)); + var tanhConfig = { + kernelName: Tanh, + backendName: "cpu", + kernelFunc: tanh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tile.js + init_define_BUILD_VERSION(); + function tile3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { reps } = attrs; + assertNotComplex(x, "tile"); + const outBuf = tileImpl(backend2.bufferSync(x), reps); + return backend2.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values); + } + var tileConfig = { + kernelName: Tile, + backendName: "cpu", + kernelFunc: tile3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/TopK.js + init_define_BUILD_VERSION(); + function topK(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { k, sorted } = attrs; + assertNotComplex(x, "topk"); + const xVals = backend2.data.get(x.dataId).values; + const [allTopKVals, allTopKIndices] = topKImpl(xVals, x.shape, x.dtype, k, sorted); + return [ + backend2.makeTensorInfo(allTopKVals.shape, allTopKVals.dtype, allTopKVals.values), + backend2.makeTensorInfo(allTopKIndices.shape, allTopKIndices.dtype, allTopKIndices.values) + ]; + } + var topKConfig = { + kernelName: TopK, + backendName: "cpu", + kernelFunc: topK + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transform.js + init_define_BUILD_VERSION(); + function transform2(args) { + const { inputs, attrs, backend: backend2 } = args; + const { image: image2, transforms } = inputs; + const { interpolation, fillMode, fillValue, outputShape } = attrs; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const [outHeight, outWidth] = outputShape != null ? outputShape : [imageHeight, imageWidth]; + const outShape = [batch, outHeight, outWidth, numChannels]; + const strides = util_exports.computeStrides(image2.shape); + const batchStride = strides[0]; + const rowStride = strides[1]; + const colStride = strides[2]; + const outVals = util_exports.getTypedArrayFromDType(image2.dtype, util_exports.sizeFromShape(outShape)); + outVals.fill(fillValue); + const imageVals = backend2.data.get(image2.dataId).values; + const transformVals = backend2.data.get(transforms.dataId).values; + for (let b = 0; b < batch; ++b) { + const transform5 = transforms.shape[0] === 1 ? transformVals : transformVals.subarray(b * 8, b * 8 + 8); + for (let outY = 0; outY < outHeight; ++outY) { + for (let outX = 0; outX < outWidth; ++outX) { + for (let channel = 0; channel < numChannels; ++channel) { + let val; + const projection = transform5[6] * outX + transform5[7] * outY + 1; + if (projection === 0) { + continue; + } + const inX = (transform5[0] * outX + transform5[1] * outY + transform5[2]) / projection; + const inY = (transform5[3] * outX + transform5[4] * outY + transform5[5]) / projection; + const x = mapCoord(inX, imageWidth, fillMode); + const y = mapCoord(inY, imageHeight, fillMode); + switch (interpolation) { + case "nearest": + val = nearestInterpolation(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, b, y, x, channel, fillValue); + break; + case "bilinear": + val = bilinearInterpolation(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, b, y, x, channel, fillValue); + break; + default: + throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${interpolation}`); + } + const ind = b * batchStride + outY * rowStride + outX * colStride + channel; + outVals[ind] = val; + } + } + } + return backend2.makeTensorInfo(outShape, image2.dtype, outVals); + } + const dataId = backend2.write(outVals, outShape, image2.dtype); + return { dataId, shape: image2.shape, dtype: image2.dtype }; + } + var transformConfig = { + kernelName: Transform, + backendName: "cpu", + kernelFunc: transform2 + }; + function mapCoord(outCoord, len, mode) { + switch (mode) { + case "reflect": + return mapCoordReflect(outCoord, len); + case "wrap": + return mapCoordWrap(outCoord, len); + case "nearest": + return mapCoordNearest(outCoord, len); + case "constant": + default: + return mapCoordConstant(outCoord, len); + } + } + function mapCoordReflect(outCoord, len) { + let inCoord = outCoord; + if (inCoord < 0) { + if (len <= 1) { + inCoord = 0; + } else { + const sz2 = 2 * len; + if (inCoord < sz2) { + inCoord = sz2 * Math.trunc(-inCoord / sz2) + inCoord; + } + inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1; + } + } else if (inCoord > len - 1) { + if (len <= 1) { + inCoord = 0; + } else { + const sz2 = 2 * len; + inCoord -= sz2 * Math.trunc(inCoord / sz2); + if (inCoord >= len) { + inCoord = sz2 - inCoord - 1; + } + } + } + return util_exports.clamp(0, inCoord, len - 1); + } + function mapCoordWrap(outCoord, len) { + let inCoord = outCoord; + if (inCoord < 0) { + if (len <= 1) { + inCoord = 0; + } else { + const sz = len - 1; + inCoord += len * (Math.trunc(-inCoord / sz) + 1); + } + } else if (inCoord > len - 1) { + if (len <= 1) { + inCoord = 0; + } else { + const sz = len - 1; + inCoord -= len * Math.trunc(inCoord / sz); + } + } + return util_exports.clamp(0, inCoord, len - 1); + } + function mapCoordConstant(outCoord, len) { + return outCoord; + } + function mapCoordNearest(outCoord, len) { + return util_exports.clamp(0, outCoord, len - 1); + } + function readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, y, x, channel, fillValue) { + const ind = batch * batchStride + y * rowStride + x * colStride + channel; + if (0 <= y && y < imageHeight && 0 <= x && x < imageWidth) { + return imageVals[ind]; + } else { + return fillValue; + } + } + function nearestInterpolation(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, y, x, channel, fillValue) { + const $y = Math.round(y); + const $x = Math.round(x); + return readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, $y, $x, channel, fillValue); + } + function bilinearInterpolation(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, y, x, channel, fillValue) { + const yFloor = Math.floor(y); + const xFloor = Math.floor(x); + const yCeil = yFloor + 1; + const xCeil = xFloor + 1; + const valueYFloor = (xCeil - x) * readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yFloor, xFloor, channel, fillValue) + (x - xFloor) * readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yFloor, xCeil, channel, fillValue); + const valueYCeil = (xCeil - x) * readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yCeil, xFloor, channel, fillValue) + (x - xFloor) * readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yCeil, xCeil, channel, fillValue); + return (yCeil - y) * valueYFloor + (y - yFloor) * valueYCeil; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unique.js + init_define_BUILD_VERSION(); + function unique3(args) { + const { inputs, attrs, backend: backend2 } = args; + const { axis } = attrs; + const { x } = inputs; + assertNotComplex(x, "unique"); + const values = backend2.data.get(x.dataId).values; + const { outputValues, outputShape, indices } = uniqueImpl(values, axis, x.shape, x.dtype); + return [ + backend2.makeTensorInfo(outputShape, x.dtype, outputValues), + backend2.makeTensorInfo([indices.length], "int32", indices) + ]; + } + var uniqueConfig = { + kernelName: Unique, + backendName: "cpu", + kernelFunc: unique3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unpack.js + init_define_BUILD_VERSION(); + function unpack(args) { + const { inputs, backend: backend2, attrs } = args; + const { value } = inputs; + let { axis } = attrs; + if (axis < 0) { + axis += value.shape.length; + } + const valueRank = value.shape.length; + const num = value.shape[axis]; + const outShape = new Array(valueRank - 1); + let outIndex = 0; + for (let i = 0; i < valueRank; i++) { + if (i !== axis) { + outShape[outIndex++] = value.shape[i]; + } + } + const begin = new Array(valueRank).fill(0); + const size = value.shape.slice(); + size[axis] = 1; + const res = new Array(num); + for (let i = 0; i < res.length; i++) { + begin[axis] = i; + const tempRes = slice2({ inputs: { x: value }, backend: backend2, attrs: { begin, size } }); + res[i] = reshape2({ inputs: { x: tempRes }, backend: backend2, attrs: { shape: outShape } }); + backend2.disposeIntermediateTensorInfo(tempRes); + } + return res; + } + var unpackConfig = { + kernelName: Unpack, + backendName: "cpu", + kernelFunc: unpack + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/UnsortedSegmentSum.js + init_define_BUILD_VERSION(); + function unsortedSegmentSum2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, segmentIds } = inputs; + const { numSegments } = attrs; + assertNotComplex(x, "unsortedSegmentSum"); + const xRank = x.shape.length; + const segmentIdsRank = segmentIds.shape.length; + const res = []; + const intermediates = []; + const numIters = xRank - segmentIdsRank; + let $segmentIds = segmentIds; + for (let i = 0; i < numIters; ++i) { + const expanded = expandDims3({ inputs: { input: $segmentIds }, backend: backend2, attrs: { dim: i + 1 } }); + $segmentIds = expanded; + intermediates.push(expanded); + } + for (let i = 0; i < numSegments; ++i) { + const scalarValue = util_exports.createScalarValue(i, "int32"); + const segmentId = backend2.makeTensorInfo([], "int32", scalarValue); + const mask = equal2({ inputs: { a: segmentId, b: $segmentIds }, backend: backend2 }); + const maskCasted = cast3({ inputs: { x: mask }, backend: backend2, attrs: { dtype: "float32" } }); + const mul2 = multiply({ inputs: { a: maskCasted, b: x }, backend: backend2 }); + const sumTensorInfo = sum3({ inputs: { x: mul2 }, backend: backend2, attrs: { axis: 0, keepDims: false } }); + res.push(sumTensorInfo); + intermediates.push(segmentId); + intermediates.push(mask); + intermediates.push(maskCasted); + intermediates.push(mul2); + intermediates.push(sumTensorInfo); + } + const result = pack({ inputs: res, backend: backend2, attrs: { axis: 0 } }); + intermediates.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var unsortedSegmentSumConfig = { + kernelName: UnsortedSegmentSum, + backendName: "cpu", + kernelFunc: unsortedSegmentSum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/register_all_kernels.js + var kernelConfigs = [ + _fusedMatMulConfig, + absConfig, + acosConfig, + acoshConfig, + addConfig, + addNConfig, + allConfig, + anyConfig, + argMaxConfig, + argMinConfig, + asinConfig, + asinhConfig, + atanConfig, + atan2Config, + atanhConfig, + avgPoolConfig, + avgPool3DConfig, + avgPool3DGradConfig2, + avgPoolGradConfig2, + batchMatMulConfig, + batchNormConfig, + batchToSpaceNDConfig, + bincountConfig, + broadcastArgsConfig, + castConfig, + ceilConfig, + clipByValueConfig, + complexConfig, + complexAbsConfig, + concatConfig, + conv2DConfig, + conv2DBackpropFilterConfig, + conv2DBackpropInputConfig, + conv3DConfig, + conv3DBackpropFilterV2Config, + conv3DBackpropInputV2Config, + cosConfig, + coshConfig, + cropAndResizeConfig, + cumprodConfig, + cumsumConfig, + denseBincountConfig, + depthToSpaceConfig, + depthwiseConv2dNativeConfig, + depthwiseConv2dNativeBackpropFilterConfig, + depthwiseConv2dNativeBackpropInputConfig, + diagConfig, + dilation2DConfig, + dilation2DBackpropFilterConfig, + dilation2DBackpropInputConfig, + einsumConfig, + eluConfig, + eluGradConfig2, + equalConfig, + erfConfig, + expConfig, + expandDimsConfig, + expm1Config, + fftConfig, + fillConfig, + flipLeftRightConfig, + floorConfig, + floorDivConfig, + fusedConv2DConfig, + fusedDepthwiseConv2DConfig, + gatherNdConfig, + gatherV2Config, + greaterConfig, + greaterEqualConfig, + identityConfig, + ifftConfig, + imagConfig, + isFiniteConfig, + isInfConfig, + isNaNConfig, + leakyReluConfig, + lessConfig, + lessEqualConfig, + linSpaceConfig, + logConfig, + log1pConfig, + logicalAndConfig, + logicalNotConfig, + logicalOrConfig, + LRNConfig, + LRNGradConfig, + maxConfig, + maximumConfig, + maxPoolConfig, + maxPool3DConfig, + maxPool3DGradConfig2, + maxPoolGradConfig2, + maxPoolWithArgmaxConfig, + meanConfig, + minConfig, + minimumConfig, + mirrorPadConfig, + modConfig, + multinomialConfig, + multiplyConfig, + negConfig, + nonMaxSuppressionV3Config, + nonMaxSuppressionV4Config, + nonMaxSuppressionV5Config, + notEqualConfig, + oneHotConfig, + onesLikeConfig, + packConfig, + padV2Config, + powConfig, + preluConfig, + prodConfig, + rangeConfig, + realConfig, + realDivConfig, + reciprocalConfig, + reluConfig, + relu6Config, + reshapeConfig, + resizeBilinearConfig, + resizeBilinearGradConfig2, + resizeNearestNeighborConfig, + resizeNearestNeighborGradConfig2, + reverseConfig, + rotateWithOffsetConfig, + roundConfig, + rsqrtConfig, + scatterNdConfig, + searchSortedConfig, + selectConfig, + seluConfig, + sigmoidConfig, + signConfig, + sinConfig, + sinhConfig, + sliceConfig, + softmaxConfig, + softplusConfig, + spaceToBatchNDConfig, + sparseFillEmptyRowsConfig, + sparseReshapeConfig, + sparseSegmentMeanConfig, + sparseSegmentSumConfig, + sparseToDenseConfig, + splitVConfig, + sqrtConfig, + squareConfig, + squaredDifferenceConfig, + stepConfig, + stridedSliceConfig, + stringNGramsConfig, + stringSplitConfig, + stringToHashBucketFastConfig, + subConfig, + sumConfig, + tanConfig, + tanhConfig, + tileConfig, + topKConfig, + transformConfig, + transposeConfig, + uniqueConfig, + unpackConfig, + unsortedSegmentSumConfig, + zerosLikeConfig + ]; + for (const kernelConfig of kernelConfigs) { + registerKernel(kernelConfig); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/base.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/backend_webgl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/flags_webgl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/webgl_util.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/canvas_util.js + init_define_BUILD_VERSION(); + var contexts = {}; + var WEBGL_ATTRIBUTES = { + alpha: false, + antialias: false, + premultipliedAlpha: false, + preserveDrawingBuffer: false, + depth: false, + stencil: false, + failIfMajorPerformanceCaveat: true + }; + function setWebGLContext(webGLVersion, gl) { + contexts[webGLVersion] = gl; + } + function getWebGLContext(webGLVersion, customCanvas) { + if (!(webGLVersion in contexts) || customCanvas != null) { + const newCtx = getWebGLRenderingContext(webGLVersion, customCanvas); + if (newCtx !== null) { + contexts[webGLVersion] = newCtx; + } else { + console.log("Could not get context for WebGL version", webGLVersion); + return null; + } + } + const gl = contexts[webGLVersion]; + if (gl == null || gl.isContextLost()) { + delete contexts[webGLVersion]; + return getWebGLContext(webGLVersion); + } + gl.disable(gl.DEPTH_TEST); + gl.disable(gl.STENCIL_TEST); + gl.disable(gl.BLEND); + gl.disable(gl.DITHER); + gl.disable(gl.POLYGON_OFFSET_FILL); + gl.disable(gl.SAMPLE_COVERAGE); + gl.enable(gl.SCISSOR_TEST); + gl.enable(gl.CULL_FACE); + gl.cullFace(gl.BACK); + return contexts[webGLVersion]; + } + function createCanvas(webGLVersion) { + if (typeof OffscreenCanvas !== "undefined" && webGLVersion === 2) { + return new OffscreenCanvas(300, 150); + } else if (typeof document !== "undefined") { + return document.createElement("canvas"); + } else { + throw new Error("Cannot create a canvas in this context"); + } + } + function getWebGLRenderingContext(webGLVersion, customCanvas) { + if (webGLVersion !== 1 && webGLVersion !== 2) { + throw new Error("Cannot get WebGL rendering context, WebGL is disabled."); + } + const canvas = customCanvas == null ? createCanvas(webGLVersion) : customCanvas; + canvas.addEventListener("webglcontextlost", (ev) => { + ev.preventDefault(); + delete contexts[webGLVersion]; + }, false); + if (webGLVersion === 1) { + return canvas.getContext("webgl", WEBGL_ATTRIBUTES) || canvas.getContext("experimental-webgl", WEBGL_ATTRIBUTES); + } + return canvas.getContext("webgl2", WEBGL_ATTRIBUTES); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/tex_util.js + init_define_BUILD_VERSION(); + var PackingScheme; + (function(PackingScheme2) { + PackingScheme2[PackingScheme2["DENSE"] = 0] = "DENSE"; + PackingScheme2[PackingScheme2["SHARED_BATCH"] = 1] = "SHARED_BATCH"; + })(PackingScheme || (PackingScheme = {})); + var TextureUsage; + (function(TextureUsage2) { + TextureUsage2[TextureUsage2["RENDER"] = 0] = "RENDER"; + TextureUsage2[TextureUsage2["UPLOAD"] = 1] = "UPLOAD"; + TextureUsage2[TextureUsage2["PIXELS"] = 2] = "PIXELS"; + TextureUsage2[TextureUsage2["DOWNLOAD"] = 3] = "DOWNLOAD"; + })(TextureUsage || (TextureUsage = {})); + var PhysicalTextureType; + (function(PhysicalTextureType2) { + PhysicalTextureType2[PhysicalTextureType2["UNPACKED_FLOAT16"] = 0] = "UNPACKED_FLOAT16"; + PhysicalTextureType2[PhysicalTextureType2["UNPACKED_FLOAT32"] = 1] = "UNPACKED_FLOAT32"; + PhysicalTextureType2[PhysicalTextureType2["PACKED_4X1_UNSIGNED_BYTE"] = 2] = "PACKED_4X1_UNSIGNED_BYTE"; + PhysicalTextureType2[PhysicalTextureType2["PACKED_2X2_FLOAT32"] = 3] = "PACKED_2X2_FLOAT32"; + PhysicalTextureType2[PhysicalTextureType2["PACKED_2X2_FLOAT16"] = 4] = "PACKED_2X2_FLOAT16"; + })(PhysicalTextureType || (PhysicalTextureType = {})); + function getUnpackedMatrixTextureShapeWidthHeight(rows, columns) { + return [columns, rows]; + } + function getUnpackedArraySizeFromMatrixSize(matrixSize, channelsPerTexture) { + return matrixSize * channelsPerTexture; + } + function getDenseTexShape(shape) { + const size = util_exports.sizeFromShape(shape); + const texelsNeeded = Math.ceil(size / 4); + return util_exports.sizeToSquarishShape(texelsNeeded); + } + function getPackedMatrixTextureShapeWidthHeight(rows, columns) { + return [ + Math.max(1, Math.ceil(columns / 2)), + Math.max(1, Math.ceil(rows / 2)) + ]; + } + function getPackedRGBAArraySizeFromMatrixShape(rows, columns) { + const [w, h] = getPackedMatrixTextureShapeWidthHeight(rows, columns); + return w * h * 4; + } + function getTextureConfig(gl, textureHalfFloatExtension) { + const glany = gl; + let internalFormatFloat; + let internalFormatHalfFloat; + let internalFormatPackedHalfFloat; + let internalFormatPackedFloat; + let textureFormatFloat; + let downloadTextureFormat; + let downloadUnpackNumChannels; + let defaultNumChannels; + let textureTypeHalfFloat; + let textureTypeFloat; + if (env().getNumber("WEBGL_VERSION") === 2) { + internalFormatFloat = glany.R32F; + internalFormatHalfFloat = glany.R16F; + internalFormatPackedHalfFloat = glany.RGBA16F; + internalFormatPackedFloat = glany.RGBA32F; + textureFormatFloat = glany.RED; + downloadUnpackNumChannels = 4; + defaultNumChannels = 1; + textureTypeHalfFloat = glany.HALF_FLOAT; + textureTypeFloat = glany.FLOAT; + downloadTextureFormat = glany.RGBA8; + } else { + internalFormatFloat = gl.RGBA; + internalFormatHalfFloat = gl.RGBA; + internalFormatPackedHalfFloat = gl.RGBA; + internalFormatPackedFloat = glany.RGBA; + textureFormatFloat = gl.RGBA; + downloadUnpackNumChannels = 4; + defaultNumChannels = 4; + textureTypeHalfFloat = textureHalfFloatExtension != null ? textureHalfFloatExtension.HALF_FLOAT_OES : null; + textureTypeFloat = gl.FLOAT; + downloadTextureFormat = gl.RGBA; + } + return { + internalFormatFloat, + internalFormatHalfFloat, + internalFormatPackedHalfFloat, + internalFormatPackedFloat, + textureFormatFloat, + downloadTextureFormat, + downloadUnpackNumChannels, + defaultNumChannels, + textureTypeHalfFloat, + textureTypeFloat + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/webgl_util.js + function callAndCheck(gl, func2) { + const returnValue = func2(); + if (env().getBool("DEBUG")) { + checkWebGLError(gl); + } + return returnValue; + } + function checkWebGLError(gl) { + const error = gl.getError(); + if (error !== gl.NO_ERROR) { + throw new Error("WebGL Error: " + getWebGLErrorMessage(gl, error)); + } + } + var MIN_FLOAT16 = 596e-10; + var MAX_FLOAT16 = 65504; + function canBeRepresented(num) { + if (env().getBool("WEBGL_RENDER_FLOAT32_ENABLED") || num === 0 || MIN_FLOAT16 < Math.abs(num) && Math.abs(num) < MAX_FLOAT16) { + return true; + } + return false; + } + function getWebGLErrorMessage(gl, status) { + switch (status) { + case gl.NO_ERROR: + return "NO_ERROR"; + case gl.INVALID_ENUM: + return "INVALID_ENUM"; + case gl.INVALID_VALUE: + return "INVALID_VALUE"; + case gl.INVALID_OPERATION: + return "INVALID_OPERATION"; + case gl.INVALID_FRAMEBUFFER_OPERATION: + return "INVALID_FRAMEBUFFER_OPERATION"; + case gl.OUT_OF_MEMORY: + return "OUT_OF_MEMORY"; + case gl.CONTEXT_LOST_WEBGL: + return "CONTEXT_LOST_WEBGL"; + default: + return `Unknown error code ${status}`; + } + } + function getExtensionOrThrow(gl, extensionName) { + return throwIfNull(gl, () => gl.getExtension(extensionName), 'Extension "' + extensionName + '" not supported on this browser.'); + } + function createVertexShader(gl, vertexShaderSource) { + const vertexShader = throwIfNull(gl, () => gl.createShader(gl.VERTEX_SHADER), "Unable to create vertex WebGLShader."); + callAndCheck(gl, () => gl.shaderSource(vertexShader, vertexShaderSource)); + callAndCheck(gl, () => gl.compileShader(vertexShader)); + if (gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS) === false) { + console.log(gl.getShaderInfoLog(vertexShader)); + throw new Error("Failed to compile vertex shader."); + } + return vertexShader; + } + function createFragmentShader(gl, fragmentShaderSource) { + const fragmentShader = throwIfNull(gl, () => gl.createShader(gl.FRAGMENT_SHADER), "Unable to create fragment WebGLShader."); + callAndCheck(gl, () => gl.shaderSource(fragmentShader, fragmentShaderSource)); + callAndCheck(gl, () => gl.compileShader(fragmentShader)); + if (env().get("ENGINE_COMPILE_ONLY")) { + return fragmentShader; + } + if (gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS) === false) { + logShaderSourceAndInfoLog(fragmentShaderSource, gl.getShaderInfoLog(fragmentShader)); + throw new Error("Failed to compile fragment shader."); + } + return fragmentShader; + } + var lineNumberRegex = /ERROR: [0-9]+:([0-9]+):/g; + function logShaderSourceAndInfoLog(shaderSource, shaderInfoLog) { + const lineNumberRegexResult = lineNumberRegex.exec(shaderInfoLog); + if (lineNumberRegexResult == null) { + console.log(`Couldn't parse line number in error: ${shaderInfoLog}`); + console.log(shaderSource); + return; + } + const lineNumber = +lineNumberRegexResult[1]; + const shaderLines = shaderSource.split("\n"); + const pad3 = shaderLines.length.toString().length + 2; + const linesWithLineNumbers = shaderLines.map((line, lineNumber2) => util_exports.rightPad((lineNumber2 + 1).toString(), pad3) + line); + let maxLineLength = 0; + for (let i = 0; i < linesWithLineNumbers.length; i++) { + maxLineLength = Math.max(linesWithLineNumbers[i].length, maxLineLength); + } + const beforeErrorLines = linesWithLineNumbers.slice(0, lineNumber - 1); + const errorLine = linesWithLineNumbers.slice(lineNumber - 1, lineNumber); + const afterErrorLines = linesWithLineNumbers.slice(lineNumber); + console.log(beforeErrorLines.join("\n")); + console.log(shaderInfoLog.split("\n")[0]); + console.log(`%c ${util_exports.rightPad(errorLine[0], maxLineLength)}`, "border:1px solid red; background-color:#e3d2d2; color:#a61717"); + console.log(afterErrorLines.join("\n")); + } + function createProgram(gl) { + return throwIfNull(gl, () => gl.createProgram(), "Unable to create WebGLProgram."); + } + function linkProgram(gl, program) { + callAndCheck(gl, () => gl.linkProgram(program)); + if (env().get("ENGINE_COMPILE_ONLY")) { + return; + } + if (gl.getProgramParameter(program, gl.LINK_STATUS) === false) { + console.log(gl.getProgramInfoLog(program)); + throw new Error("Failed to link vertex and fragment shaders."); + } + } + function validateProgram(gl, program) { + callAndCheck(gl, () => gl.validateProgram(program)); + if (gl.getProgramParameter(program, gl.VALIDATE_STATUS) === false) { + console.log(gl.getProgramInfoLog(program)); + throw new Error("Shader program validation failed."); + } + } + function createStaticVertexBuffer(gl, data) { + const buffer2 = throwIfNull(gl, () => gl.createBuffer(), "Unable to create WebGLBuffer"); + callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, buffer2)); + callAndCheck(gl, () => gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW)); + return buffer2; + } + function createStaticIndexBuffer(gl, data) { + const buffer2 = throwIfNull(gl, () => gl.createBuffer(), "Unable to create WebGLBuffer"); + callAndCheck(gl, () => gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer2)); + callAndCheck(gl, () => gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, gl.STATIC_DRAW)); + return buffer2; + } + function createTexture(gl) { + return throwIfNull(gl, () => gl.createTexture(), "Unable to create WebGLTexture."); + } + function validateTextureSize(width, height) { + const maxTextureSize = env().getNumber("WEBGL_MAX_TEXTURE_SIZE"); + if (width <= 0 || height <= 0) { + const requested = `[${width}x${height}]`; + throw new Error("Requested texture size " + requested + " is invalid."); + } + if (width > maxTextureSize || height > maxTextureSize) { + const requested = `[${width}x${height}]`; + const max6 = `[${maxTextureSize}x${maxTextureSize}]`; + throw new Error("Requested texture size " + requested + " greater than WebGL maximum on this browser / GPU " + max6 + "."); + } + } + function createFramebuffer(gl) { + return throwIfNull(gl, () => gl.createFramebuffer(), "Unable to create WebGLFramebuffer."); + } + function bindVertexBufferToProgramAttribute(gl, program, attribute, buffer2, arrayEntriesPerItem, itemStrideInBytes, itemOffsetInBytes) { + const loc = gl.getAttribLocation(program, attribute); + if (loc === -1) { + return false; + } + callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, buffer2)); + callAndCheck(gl, () => gl.vertexAttribPointer(loc, arrayEntriesPerItem, gl.FLOAT, false, itemStrideInBytes, itemOffsetInBytes)); + callAndCheck(gl, () => gl.enableVertexAttribArray(loc)); + return true; + } + function bindTextureUnit(gl, texture, textureUnit) { + validateTextureUnit(gl, textureUnit); + callAndCheck(gl, () => gl.activeTexture(gl.TEXTURE0 + textureUnit)); + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, texture)); + } + function getProgramUniformLocationOrThrow(gl, program, uniformName) { + return throwIfNull(gl, () => gl.getUniformLocation(program, uniformName), 'uniform "' + uniformName + '" not present in program.'); + } + function getProgramUniformLocation(gl, program, uniformName) { + return gl.getUniformLocation(program, uniformName); + } + function bindTextureToProgramUniformSampler(gl, texture, uniformSamplerLocation, textureUnit) { + callAndCheck(gl, () => bindTextureUnit(gl, texture, textureUnit)); + callAndCheck(gl, () => gl.uniform1i(uniformSamplerLocation, textureUnit)); + } + function bindColorTextureToFramebuffer(gl, texture, framebuffer) { + callAndCheck(gl, () => gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer)); + callAndCheck(gl, () => gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)); + } + function unbindColorTextureFromFramebuffer(gl, framebuffer) { + callAndCheck(gl, () => gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer)); + callAndCheck(gl, () => gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0)); + } + function validateFramebuffer(gl) { + const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER); + if (status !== gl.FRAMEBUFFER_COMPLETE) { + throw new Error("Error binding framebuffer: " + getFramebufferErrorMessage(gl, status)); + } + } + function getFramebufferErrorMessage(gl, status) { + switch (status) { + case gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT: + return "FRAMEBUFFER_INCOMPLETE_ATTACHMENT"; + case gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: + return "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"; + case gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS: + return "FRAMEBUFFER_INCOMPLETE_DIMENSIONS"; + case gl.FRAMEBUFFER_UNSUPPORTED: + return "FRAMEBUFFER_UNSUPPORTED"; + default: + return `unknown error ${status}`; + } + } + function throwIfNull(gl, returnTOrNull, failureMessage) { + const tOrNull = callAndCheck(gl, () => returnTOrNull()); + if (tOrNull == null) { + throw new Error(failureMessage); + } + return tOrNull; + } + function validateTextureUnit(gl, textureUnit) { + const maxTextureUnit = gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1; + const glTextureUnit = textureUnit + gl.TEXTURE0; + if (glTextureUnit < gl.TEXTURE0 || glTextureUnit > maxTextureUnit) { + const textureUnitRange = `[gl.TEXTURE0, gl.TEXTURE${maxTextureUnit}]`; + throw new Error(`textureUnit must be in ${textureUnitRange}.`); + } + } + function getBatchDim(shape, dimsToSkip = 2) { + return util_exports.sizeFromShape(shape.slice(0, shape.length - dimsToSkip)); + } + function getRowsCols(shape) { + if (shape.length === 0) { + throw Error("Cannot get rows and columns of an empty shape array."); + } + return [ + shape.length > 1 ? shape[shape.length - 2] : 1, + shape[shape.length - 1] + ]; + } + function getShapeAs3D(shape) { + let shapeAs3D = [1, 1, 1]; + const isScalar = shape.length === 0 || shape.length === 1 && shape[0] === 1; + if (!isScalar) { + shapeAs3D = [getBatchDim(shape), ...getRowsCols(shape)]; + } + return shapeAs3D; + } + function getTextureShapeFromLogicalShape(logShape, isPacked = false) { + let maxTexSize = env().getNumber("WEBGL_MAX_TEXTURE_SIZE"); + if (isPacked) { + maxTexSize = maxTexSize * 2; + logShape = logShape.map((d, i) => i >= logShape.length - 2 ? util_exports.nearestLargerEven(logShape[i]) : logShape[i]); + if (logShape.length === 1) { + logShape = [2, logShape[0]]; + } + } + if (logShape.length !== 2) { + const squeezeResult = util_exports.squeezeShape(logShape); + logShape = squeezeResult.newShape; + } + let size = util_exports.sizeFromShape(logShape); + if (logShape.length <= 1 && size <= maxTexSize) { + return [1, size]; + } else if (logShape.length === 2 && logShape[0] <= maxTexSize && logShape[1] <= maxTexSize) { + return logShape; + } else if (logShape.length === 3 && logShape[0] * logShape[1] <= maxTexSize && logShape[2] <= maxTexSize) { + return [logShape[0] * logShape[1], logShape[2]]; + } else if (logShape.length === 3 && logShape[0] <= maxTexSize && logShape[1] * logShape[2] <= maxTexSize) { + return [logShape[0], logShape[1] * logShape[2]]; + } else if (logShape.length === 4 && logShape[0] * logShape[1] * logShape[2] <= maxTexSize && logShape[3] <= maxTexSize) { + return [logShape[0] * logShape[1] * logShape[2], logShape[3]]; + } else if (logShape.length === 4 && logShape[0] <= maxTexSize && logShape[1] * logShape[2] * logShape[3] <= maxTexSize) { + return [logShape[0], logShape[1] * logShape[2] * logShape[3]]; + } else { + if (isPacked) { + const batchDim = getBatchDim(logShape); + let rows = 2, cols = 2; + if (logShape.length) { + [rows, cols] = getRowsCols(logShape); + } + size = batchDim * (rows / 2) * (cols / 2); + return util_exports.sizeToSquarishShape(size).map((d) => d * 2); + } + return util_exports.sizeToSquarishShape(size); + } + } + function isEven(n) { + return n % 2 === 0; + } + function isReshapeFree(shape1, shape2) { + shape1 = shape1.slice(-2); + shape2 = shape2.slice(-2); + if (util_exports.arraysEqual(shape1, shape2)) { + return true; + } + if (!shape1.length || !shape2.length) { + return true; + } + if (shape1[0] === 0 || shape1[1] === 0 || shape2[0] === 0 || shape2[1] === 0) { + return true; + } + if (shape1.length !== shape2.length) { + const shape1Cols = shape1.slice(-1)[0]; + const shape2Cols = shape2.slice(-1)[0]; + if (shape1Cols === shape2Cols) { + return true; + } + if (isEven(shape1Cols) && isEven(shape2Cols) && (shape1[0] === 1 || shape2[0] === 1)) { + return true; + } + } + return shape1[1] === shape2[1] && isEven(shape1[0]) && isEven(shape2[0]); + } + var MAX_TEXTURE_SIZE; + var MAX_TEXTURES_IN_SHADER; + function getWebGLMaxTextureSize(webGLVersion) { + if (MAX_TEXTURE_SIZE == null) { + const gl = getWebGLContext(webGLVersion); + MAX_TEXTURE_SIZE = gl.getParameter(gl.MAX_TEXTURE_SIZE); + } + return MAX_TEXTURE_SIZE; + } + function getMaxTexturesInShader(webGLVersion) { + if (MAX_TEXTURES_IN_SHADER == null) { + const gl = getWebGLContext(webGLVersion); + MAX_TEXTURES_IN_SHADER = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); + } + return Math.min(16, MAX_TEXTURES_IN_SHADER); + } + function getWebGLDisjointQueryTimerVersion(webGLVersion) { + if (webGLVersion === 0) { + return 0; + } + let queryTimerVersion; + const gl = getWebGLContext(webGLVersion); + if (hasExtension(gl, "EXT_disjoint_timer_query_webgl2") && webGLVersion === 2) { + queryTimerVersion = 2; + } else if (hasExtension(gl, "EXT_disjoint_timer_query")) { + queryTimerVersion = 1; + } else { + queryTimerVersion = 0; + } + return queryTimerVersion; + } + function hasExtension(gl, extensionName) { + const ext = gl.getExtension(extensionName); + return ext != null; + } + function isWebGLVersionEnabled(webGLVersion) { + try { + const gl = getWebGLContext(webGLVersion); + if (gl != null) { + return true; + } + } catch (e) { + console.log("Error when getting WebGL context: ", e); + return false; + } + return false; + } + function isCapableOfRenderingToFloatTexture(webGLVersion) { + if (webGLVersion === 0) { + return false; + } + const gl = getWebGLContext(webGLVersion); + if (webGLVersion === 1) { + if (!hasExtension(gl, "OES_texture_float")) { + return false; + } + } else { + if (!hasExtension(gl, "EXT_color_buffer_float")) { + return false; + } + } + const isFrameBufferComplete = createFloatTextureAndBindToFramebuffer(gl); + return isFrameBufferComplete; + } + function isDownloadFloatTextureEnabled(webGLVersion) { + if (webGLVersion === 0) { + return false; + } + const gl = getWebGLContext(webGLVersion); + if (webGLVersion === 1) { + if (!hasExtension(gl, "OES_texture_float")) { + return false; + } + if (!hasExtension(gl, "WEBGL_color_buffer_float")) { + return false; + } + } else { + if (hasExtension(gl, "EXT_color_buffer_float")) { + return createFloatTextureAndBindToFramebuffer(gl); + } + const COLOR_BUFFER_HALF_FLOAT = "EXT_color_buffer_half_float"; + if (hasExtension(gl, COLOR_BUFFER_HALF_FLOAT)) { + const textureHalfFloatExtension = gl.getExtension(COLOR_BUFFER_HALF_FLOAT); + return createHalfFloatTextureAndBindToFramebuffer(gl, textureHalfFloatExtension); + } + return false; + } + const isFrameBufferComplete = createFloatTextureAndBindToFramebuffer(gl); + return isFrameBufferComplete; + } + function createFloatTextureAndBindToFramebuffer(gl) { + const texConfig = getTextureConfig(gl); + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + const width = 1; + const height = 1; + gl.texImage2D(gl.TEXTURE_2D, 0, texConfig.internalFormatFloat, width, height, 0, texConfig.textureFormatFloat, texConfig.textureTypeFloat, null); + const frameBuffer = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); + const isFrameBufferComplete = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE; + gl.bindTexture(gl.TEXTURE_2D, null); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + gl.deleteTexture(texture); + gl.deleteFramebuffer(frameBuffer); + return isFrameBufferComplete; + } + function createHalfFloatTextureAndBindToFramebuffer(gl, textureHalfFloatExtension) { + const texConfig = getTextureConfig(gl, textureHalfFloatExtension); + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + const width = 1; + const height = 1; + gl.texImage2D(gl.TEXTURE_2D, 0, texConfig.internalFormatHalfFloat, width, height, 0, texConfig.textureFormatFloat, texConfig.textureTypeHalfFloat, null); + const frameBuffer = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); + const isFrameBufferComplete = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE; + gl.bindTexture(gl.TEXTURE_2D, null); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + gl.deleteTexture(texture); + gl.deleteFramebuffer(frameBuffer); + return isFrameBufferComplete; + } + function isWebGLFenceEnabled(webGLVersion) { + if (webGLVersion !== 2) { + return false; + } + const gl = getWebGLContext(webGLVersion); + const isEnabled = gl.fenceSync != null; + return isEnabled; + } + function assertNotComplex2(tensor2, opName) { + if (!Array.isArray(tensor2)) { + tensor2 = [tensor2]; + } + tensor2.forEach((t) => { + if (t != null) { + util_exports.assert(t.dtype !== "complex64", () => `${opName} does not support complex64 tensors in the WebGL backend.`); + } + }); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/flags_webgl.js + var ENV5 = env(); + ENV5.registerFlag("HAS_WEBGL", () => ENV5.getNumber("WEBGL_VERSION") > 0); + ENV5.registerFlag("WEBGL_VERSION", () => { + if (isWebGLVersionEnabled(2)) { + return 2; + } else if (isWebGLVersionEnabled(1)) { + return 1; + } + return 0; + }); + ENV5.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS", () => false); + ENV5.registerFlag("WEBGL_BUFFER_SUPPORTED", () => ENV5.get("WEBGL_VERSION") === 2); + ENV5.registerFlag("WEBGL_CPU_FORWARD", () => true); + ENV5.registerFlag("WEBGL_FORCE_F16_TEXTURES", () => false); + ENV5.registerFlag("WEBGL_PACK", () => ENV5.getBool("HAS_WEBGL")); + ENV5.registerFlag("WEBGL_PACK_NORMALIZATION", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_CLIP", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_DEPTHWISECONV", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_BINARY_OPERATIONS", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_UNARY_OPERATIONS", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_REDUCE", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_LAZILY_UNPACK", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_CONV_IM2COL", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_MAX_TEXTURE_SIZE", () => getWebGLMaxTextureSize(ENV5.getNumber("WEBGL_VERSION"))); + ENV5.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER", () => getMaxTexturesInShader(ENV5.getNumber("WEBGL_VERSION"))); + ENV5.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION", () => { + const webGLVersion = ENV5.getNumber("WEBGL_VERSION"); + if (webGLVersion === 0) { + return 0; + } + return getWebGLDisjointQueryTimerVersion(webGLVersion); + }); + ENV5.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE", () => ENV5.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 && !device_util_exports.isMobile()); + ENV5.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE", () => isCapableOfRenderingToFloatTexture(ENV5.getNumber("WEBGL_VERSION"))); + ENV5.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED", () => { + return ENV5.getBool("WEBGL_FORCE_F16_TEXTURES") ? false : ENV5.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"); + }); + ENV5.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED", () => isDownloadFloatTextureEnabled(ENV5.getNumber("WEBGL_VERSION"))); + ENV5.registerFlag("WEBGL_FENCE_API_ENABLED", () => isWebGLFenceEnabled(ENV5.getNumber("WEBGL_VERSION"))); + ENV5.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM", () => { + const useUniforms = ENV5.getBool("WEBGL_RENDER_FLOAT32_ENABLED"); + return useUniforms ? 4 : 0; + }); + ENV5.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD", () => { + return -1; + }, (threshold3) => { + if (threshold3 < 0 && threshold3 !== -1) { + throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${threshold3}.`); + } + }); + ENV5.registerFlag("WEBGL_FLUSH_THRESHOLD", () => { + return device_util_exports.isMobile() ? 1 : -1; + }, (threshold3) => { + if (threshold3 < 0 && threshold3 !== -1) { + throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${threshold3}.`); + } + }); + ENV5.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD", () => 128); + ENV5.registerFlag("WEBGL_USE_SHAPES_UNIFORMS", () => false); + ENV5.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD", () => 1e5); + ENV5.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD", () => 128); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/decode_matrix_gpu.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/glsl_version.js + init_define_BUILD_VERSION(); + function getGlslDifferences() { + let version9; + let attribute; + let varyingVs; + let varyingFs; + let texture2D; + let output; + let defineOutput; + let defineSpecialNaN; + let defineSpecialInf; + let defineRound; + if (env().getNumber("WEBGL_VERSION") === 2) { + version9 = "#version 300 es"; + attribute = "in"; + varyingVs = "out"; + varyingFs = "in"; + texture2D = "texture"; + output = "outputColor"; + defineOutput = "out vec4 outputColor;"; + defineSpecialNaN = ` + bool isnan_custom(float val) { + uint floatToUint = floatBitsToUint(val); + return (floatToUint & 0x7fffffffu) > 0x7f800000u; + } + + bvec4 isnan_custom(vec4 val) { + return bvec4(isnan_custom(val.x), + isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w)); + } + + #define isnan(value) isnan_custom(value) + `; + defineSpecialInf = ``; + defineRound = ` + #define round(value) newRound(value) + int newRound(float value) { + return int(floor(value + 0.5)); + } + + ivec4 newRound(vec4 value) { + return ivec4(floor(value + vec4(0.5))); + } + `; + } else { + version9 = ""; + attribute = "attribute"; + varyingVs = "varying"; + varyingFs = "varying"; + texture2D = "texture2D"; + output = "gl_FragColor"; + defineOutput = ""; + defineSpecialNaN = ` + #define isnan(value) isnan_custom(value) + bool isnan_custom(float val) { + return (val > 0. || val < 1. || val == 0.) ? false : true; + } + bvec4 isnan_custom(vec4 val) { + return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w)); + } + `; + defineSpecialInf = ` + uniform float INFINITY; + + bool isinf(float val) { + return abs(val) == INFINITY; + } + bvec4 isinf(vec4 val) { + return equal(abs(val), vec4(INFINITY)); + } + `; + defineRound = ` + int round(float value) { + return int(floor(value + 0.5)); + } + + ivec4 round(vec4 value) { + return ivec4(floor(value + vec4(0.5))); + } + `; + } + return { + version: version9, + attribute, + varyingVs, + varyingFs, + texture2D, + output, + defineOutput, + defineSpecialNaN, + defineSpecialInf, + defineRound + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_math.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler_util.js + init_define_BUILD_VERSION(); + function getLogicalCoordinatesFromFlatIndex(coords2, shape, index = "index") { + const strides = util_exports.computeStrides(shape); + return strides.map((stride, i) => { + const line1 = `int ${coords2[i]} = ${index} / ${stride}`; + const line2 = i === strides.length - 1 ? `int ${coords2[i + 1]} = ${index} - ${coords2[i]} * ${stride}` : `index -= ${coords2[i]} * ${stride}`; + return `${line1}; ${line2};`; + }).join(""); + } + function getOutputLogicalCoordinatesFromFlatIndexByUniform(coords2, shape, index = "index") { + const strides = util_exports.computeStrides(shape); + return strides.map((_, i) => { + const line1 = `int ${coords2[i]} = ${index} / outShapeStrides[${i}]`; + const line2 = i === strides.length - 1 ? `int ${coords2[i + 1]} = ${index} - ${coords2[i]} * outShapeStrides[${i}]` : `index -= ${coords2[i]} * outShapeStrides[${i}]`; + return `${line1}; ${line2};`; + }).join(""); + } + function symbolicallyComputeStrides(indicesArr, variableName) { + const numCoords = indicesArr.length; + const shape = indicesArr.map((d) => `${variableName}[${d}]`); + const strides = new Array(numCoords - 1); + strides[numCoords - 2] = shape[numCoords - 1]; + for (let i = numCoords - 3; i >= 0; --i) { + strides[i] = `(${strides[i + 1]} * ${shape[i + 1]})`; + } + return strides; + } + function getLogicalCoordinatesFromFlatIndexByUniform(coords2, variableName, index = "index") { + const indicesArray = coords2.map((_, i) => i); + const strides = symbolicallyComputeStrides(indicesArray, variableName); + return strides.map((_, i) => { + const line1 = `int ${coords2[i]} = ${index} / ${strides[i]}`; + const line2 = i === strides.length - 1 ? `int ${coords2[i + 1]} = ${index} - ${coords2[i]} * ${strides[i]}` : `index -= ${coords2[i]} * ${strides[i]}`; + return `${line1}; ${line2};`; + }).join(""); + } + function getFlatIndexFrom3D(shape) { + const strides = util_exports.computeStrides(shape).map((d) => d.toString()); + return ` + int getFlatIndex(ivec3 coords) { + return coords.x * ${strides[0]} + coords.y * ${strides[1]} + coords.z; + } +`; + } + function getFlatIndexFrom3DOutput() { + return ` + int getFlatIndex(ivec3 coords) { + return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; + } +`; + } + var ENCODE_FLOAT_SNIPPET = ` + const float FLOAT_MAX = 1.70141184e38; + const float FLOAT_MIN = 1.17549435e-38; + + lowp vec4 encode_float(highp float v) { + if (isnan(v)) { + return vec4(255, 255, 255, 255); + } + + highp float av = abs(v); + + if(av < FLOAT_MIN) { + return vec4(0.0, 0.0, 0.0, 0.0); + } else if(v > FLOAT_MAX) { + return vec4(0.0, 0.0, 128.0, 127.0) / 255.0; + } else if(v < -FLOAT_MAX) { + return vec4(0.0, 0.0, 128.0, 255.0) / 255.0; + } + + highp vec4 c = vec4(0,0,0,0); + + highp float e = floor(log2(av)); + highp float m = exp2(fract(log2(av))) - 1.0; + + c[2] = floor(128.0 * m); + m -= c[2] / 128.0; + c[1] = floor(32768.0 * m); + m -= c[1] / 32768.0; + c[0] = floor(8388608.0 * m); + + highp float ebias = e + 127.0; + c[3] = floor(ebias / 2.0); + ebias -= c[3] * 2.0; + c[2] += floor(ebias) * 128.0; + + c[3] += 128.0 * step(0.0, -v); + + return c / 255.0; + } +`; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler.js + var { getBroadcastDims: getBroadcastDims2 } = backend_util_exports; + function makeShader(inputsInfo, outputShape, program) { + const prefixSnippets = []; + inputsInfo.forEach((x) => { + const size = util_exports.sizeFromShape(x.shapeInfo.logicalShape); + if (x.shapeInfo.isUniform) { + prefixSnippets.push(`uniform float ${x.name}${size > 1 ? `[${size}]` : ""};`); + } else { + prefixSnippets.push(`uniform sampler2D ${x.name};`); + prefixSnippets.push(`uniform int offset${x.name};`); + } + if (program.enableShapeUniforms) { + const { uniformShape } = getUniformInfoFromShape(program.packedInputs, x.shapeInfo.logicalShape, x.shapeInfo.texShape); + switch (uniformShape.length) { + case 1: + prefixSnippets.push(`uniform int ${x.name}Shape;`); + break; + case 2: + prefixSnippets.push(`uniform ivec2 ${x.name}Shape;`); + break; + case 3: + prefixSnippets.push(`uniform ivec3 ${x.name}Shape;`); + break; + case 4: + prefixSnippets.push(`uniform ivec4 ${x.name}Shape;`); + break; + default: + break; + } + prefixSnippets.push(`uniform ivec2 ${x.name}TexShape;`); + } + }); + if (program.enableShapeUniforms) { + switch (outputShape.logicalShape.length) { + case 1: + prefixSnippets.push(`uniform int outShape;`); + break; + case 2: + prefixSnippets.push(`uniform ivec2 outShape;`); + prefixSnippets.push(`uniform int outShapeStrides;`); + break; + case 3: + prefixSnippets.push(`uniform ivec3 outShape;`); + prefixSnippets.push(`uniform ivec2 outShapeStrides;`); + break; + case 4: + prefixSnippets.push(`uniform ivec4 outShape;`); + prefixSnippets.push(`uniform ivec3 outShapeStrides;`); + break; + default: + break; + } + prefixSnippets.push(`uniform ivec2 outTexShape;`); + } + if (program.customUniforms) { + program.customUniforms.forEach((d) => { + prefixSnippets.push(`uniform ${d.type} ${d.name}${d.arrayIndex ? `[${d.arrayIndex}]` : ""};`); + }); + } + const inputPrefixSnippet = prefixSnippets.join("\n"); + const inputSamplingSnippet = inputsInfo.map((x) => getInputSamplingSnippet(x, outputShape, program.packedInputs, program.enableShapeUniforms)).join("\n"); + const outTexShape = outputShape.texShape; + const glsl = getGlslDifferences(); + const floatTextureSampleSnippet = getFloatTextureSampleSnippet(glsl); + let outputSamplingSnippet; + let floatTextureSetOutputSnippet; + let shaderPrefix = getShaderPrefix(glsl); + if (outputShape.isPacked) { + outputSamplingSnippet = getPackedOutputSamplingSnippet(outputShape.logicalShape, outTexShape, program.enableShapeUniforms); + floatTextureSetOutputSnippet = getFloatTextureSetRGBASnippet(glsl); + } else { + outputSamplingSnippet = getOutputSamplingSnippet(outputShape.logicalShape, outTexShape, program.enableShapeUniforms); + floatTextureSetOutputSnippet = getFloatTextureSetRSnippet(glsl); + } + if (program.packedInputs) { + shaderPrefix += SHADER_PACKED_PREFIX; + } + const source = [ + shaderPrefix, + floatTextureSampleSnippet, + floatTextureSetOutputSnippet, + inputPrefixSnippet, + outputSamplingSnippet, + inputSamplingSnippet, + program.userCode + ].join("\n"); + return source; + } + function getSamplerFromInInfo(inInfo, enableShapeUniforms = false) { + const shape = inInfo.shapeInfo.logicalShape; + switch (shape.length) { + case 0: + return getSamplerScalar(inInfo, enableShapeUniforms); + case 1: + return getSampler1D(inInfo, enableShapeUniforms); + case 2: + return getSampler2D(inInfo, enableShapeUniforms); + case 3: + return getSampler3D(inInfo, enableShapeUniforms); + case 4: + return getSampler4D(inInfo, enableShapeUniforms); + case 5: + return getSampler5D(inInfo); + case 6: + return getSampler6D(inInfo); + default: + throw new Error(`${shape.length}-D input sampling is not yet supported`); + } + } + function getPackedSamplerFromInInfo(inInfo, enableShapeUniforms) { + const shape = inInfo.shapeInfo.logicalShape; + switch (shape.length) { + case 0: + return getPackedSamplerScalar(inInfo); + case 1: + return getPackedSampler1D(inInfo, enableShapeUniforms); + case 2: + return getPackedSampler2D(inInfo, enableShapeUniforms); + case 3: + return getPackedSampler3D(inInfo, enableShapeUniforms); + default: + return getPackedSamplerND(inInfo, enableShapeUniforms); + } + } + function getInputSamplingSnippet(inInfo, outShapeInfo, usesPackedTextures = false, enableShapeUniforms) { + let res = ""; + if (usesPackedTextures) { + res += getPackedSamplerFromInInfo(inInfo, enableShapeUniforms); + } else { + res += getSamplerFromInInfo(inInfo, enableShapeUniforms); + } + const inShape = inInfo.shapeInfo.logicalShape; + const outShape = outShapeInfo.logicalShape; + if (inShape.length <= outShape.length) { + if (usesPackedTextures) { + res += getPackedSamplerAtOutputCoords(inInfo, outShapeInfo); + } else { + res += getSamplerAtOutputCoords(inInfo, outShapeInfo); + } + } + return res; + } + function getPackedOutputSamplingSnippet(outShape, outTexShape, enableShapeUniforms) { + switch (outShape.length) { + case 0: + return getOutputScalarCoords(); + case 1: + return getOutputPacked1DCoords(outShape, outTexShape, enableShapeUniforms); + case 2: + return getOutputPacked2DCoords(outShape, outTexShape, enableShapeUniforms); + case 3: + return getOutputPacked3DCoords(outShape, outTexShape, enableShapeUniforms); + default: + return getOutputPackedNDCoords(outShape, outTexShape, enableShapeUniforms); + } + } + function getOutputSamplingSnippet(outShape, outTexShape, enableShapeUniforms) { + switch (outShape.length) { + case 0: + return getOutputScalarCoords(); + case 1: + return getOutput1DCoords(outShape, outTexShape, enableShapeUniforms); + case 2: + return getOutput2DCoords(outShape, outTexShape, enableShapeUniforms); + case 3: + return getOutput3DCoords(outShape, outTexShape, enableShapeUniforms); + case 4: + return getOutput4DCoords(outShape, outTexShape, enableShapeUniforms); + case 5: + return getOutput5DCoords(outShape, outTexShape); + case 6: + return getOutput6DCoords(outShape, outTexShape); + default: + throw new Error(`${outShape.length}-D output sampling is not yet supported`); + } + } + function getFloatTextureSampleSnippet(glsl) { + return ` + float sampleTexture(sampler2D textureSampler, vec2 uv) { + return ${glsl.texture2D}(textureSampler, uv).r; + } + `; + } + function getFloatTextureSetRSnippet(glsl) { + return ` + void setOutput(float val) { + ${glsl.output} = vec4(val, 0, 0, 0); + } + `; + } + function getFloatTextureSetRGBASnippet(glsl) { + return ` + void setOutput(vec4 val) { + ${glsl.output} = val; + } + `; + } + function getShaderPrefix(glsl) { + const SHADER_PREFIX = `${glsl.version} + precision highp float; + precision highp int; + precision highp sampler2D; + ${glsl.varyingFs} vec2 resultUV; + ${glsl.defineOutput} + const vec2 halfCR = vec2(0.5, 0.5); + + struct ivec5 + { + int x; + int y; + int z; + int w; + int u; + }; + + struct ivec6 + { + int x; + int y; + int z; + int w; + int u; + int v; + }; + + uniform float NAN; + ${glsl.defineSpecialNaN} + ${glsl.defineSpecialInf} + ${glsl.defineRound} + + int imod(int x, int y) { + return x - y * (x / y); + } + + int idiv(int a, int b, float sign) { + int res = a / b; + int mod = imod(a, b); + if (sign < 0. && mod != 0) { + res -= 1; + } + return res; + } + + //Based on the work of Dave Hoskins + //https://www.shadertoy.com/view/4djSRW + #define HASHSCALE1 443.8975 + float random(float seed){ + vec2 p = resultUV * seed; + vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1); + p3 += dot(p3, p3.yzx + 19.19); + return fract((p3.x + p3.y) * p3.z); + } + + ${SAMPLE_1D_SNIPPET} + ${SAMPLE_2D_SNIPPET} + ${SAMPLE_3D_SNIPPET} + `; + return SHADER_PREFIX; + } + var SAMPLE_1D_SNIPPET = ` +vec2 uvFromFlat(int texNumR, int texNumC, int index) { + int texR = index / texNumC; + int texC = index - texR * texNumC; + return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); +} +vec2 packedUVfrom1D(int texNumR, int texNumC, int index) { + int texelIndex = index / 2; + int texR = texelIndex / texNumC; + int texC = texelIndex - texR * texNumC; + return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); +} +`; + var SAMPLE_2D_SNIPPET = ` +vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, + int texNumC, int row, int col) { + int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2); + int texR = texelIndex / texNumC; + int texC = texelIndex - texR * texNumC; + return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); +} +`; + var SAMPLE_3D_SNIPPET = ` +vec2 packedUVfrom3D(int texNumR, int texNumC, + int texelsInBatch, int texelsInLogicalRow, int b, + int row, int col) { + int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2); + int texR = index / texNumC; + int texC = index - texR * texNumC; + return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); +} +`; + var SHADER_PACKED_PREFIX = ` + float getChannel(vec4 frag, vec2 innerDims) { + vec2 modCoord = mod(innerDims, 2.); + return modCoord.x == 0. ? + (modCoord.y == 0. ? frag.r : frag.g) : + (modCoord.y == 0. ? frag.b : frag.a); + } + float getChannel(vec4 frag, int dim) { + float modCoord = mod(float(dim), 2.); + return modCoord == 0. ? frag.r : frag.g; + } +`; + function getOutputScalarCoords() { + return ` + int getOutputCoords() { + return 0; + } + `; + } + function getOutputPacked1DCoords(shape, texShape, enableShapeUniforms) { + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + if (packedTexShape[0] === 1) { + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0)); + } + `; + } + return ` + int getOutputCoords() { + return 2 * int(resultUV.x * ${packedTexShape[1]}.0); + } + `; + } + if (packedTexShape[1] === 1) { + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0)); + } + `; + } + return ` + int getOutputCoords() { + return 2 * int(resultUV.y * ${packedTexShape[0]}.0); + } + `; + } + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(packedTexShape[0], packedTexShape[1])); + return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y); + } + `; + } + return ` + int getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${packedTexShape[0]}, ${packedTexShape[1]})); + return 2 * (resTexRC.x * ${packedTexShape[1]} + resTexRC.y); + } + `; + } + function getOutput1DCoords(shape, texShape, enableShapeUniforms) { + if (texShape[0] === 1) { + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + return int(resultUV.x * float(outTexShape[1])); + } + `; + } + return ` + int getOutputCoords() { + return int(resultUV.x * ${texShape[1]}.0); + } + `; + } + if (texShape[1] === 1) { + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + return int(resultUV.y * float(outTexShape[0])); + } + `; + } + return ` + int getOutputCoords() { + return int(resultUV.y * ${texShape[0]}.0); + } + `; + } + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + return resTexRC.x * outTexShape[1] + resTexRC.y; + } + `; + } + return ` + int getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + return resTexRC.x * ${texShape[1]} + resTexRC.y; + } + `; + } + function getOutputPacked3DCoords(shape, texShape, enableShapeUniforms) { + if (enableShapeUniforms) { + return ` + ivec3 getOutputCoords() { + ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); + int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0)); + int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0)); + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(packedTexShape[0], packedTexShape[1])); + int index = resTexRC.x * packedTexShape[1] + resTexRC.y; + + int b = index / texelsInBatch; + index -= b * texelsInBatch; + + int r = 2 * (index / texelsInLogicalRow); + int c = imod(index, texelsInLogicalRow) * 2; + + return ivec3(b, r, c); + } + `; + } + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + const texelsInLogicalRow = Math.ceil(shape[2] / 2); + const texelsInBatch = texelsInLogicalRow * Math.ceil(shape[1] / 2); + return ` + ivec3 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${packedTexShape[0]}, ${packedTexShape[1]})); + int index = resTexRC.x * ${packedTexShape[1]} + resTexRC.y; + + int b = index / ${texelsInBatch}; + index -= b * ${texelsInBatch}; + + int r = 2 * (index / ${texelsInLogicalRow}); + int c = imod(index, ${texelsInLogicalRow}) * 2; + + return ivec3(b, r, c); + } + `; + } + function getOutput3DCoords(shape, texShape, enableShapeUniforms) { + if (enableShapeUniforms) { + const coordsFromIndexSnippet2 = getOutputLogicalCoordinatesFromFlatIndexByUniform(["r", "c", "d"], shape); + return ` + ivec3 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + int index = resTexRC.x * outTexShape[1] + resTexRC.y; + ${coordsFromIndexSnippet2} + return ivec3(r, c, d); + } +`; + } + const coordsFromIndexSnippet = getLogicalCoordinatesFromFlatIndex(["r", "c", "d"], shape); + return ` + ivec3 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + ${coordsFromIndexSnippet} + return ivec3(r, c, d); + } + `; + } + function getOutputPackedNDCoords(shape, texShape, enableShapeUniforms) { + if (enableShapeUniforms) { + return ` + ivec4 getOutputCoords() { + ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(packedTexShape[0], packedTexShape[1])); + int index = resTexRC.x * packedTexShape[1] + resTexRC.y; + + int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0)); + int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0)); + int texelsInBatchN = texelsInBatch * outShape[1]; + + int b2 = index / texelsInBatchN; + index -= b2 * texelsInBatchN; + + int b = index / texelsInBatch; + index -= b * texelsInBatch; + + int r = 2 * (index / texelsInLogicalRow); + int c = imod(index, texelsInLogicalRow) * 2; + + return ivec4(b2, b, r, c); + } + `; + } + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + const texelsInLogicalRow = Math.ceil(shape[shape.length - 1] / 2); + const texelsInBatch = texelsInLogicalRow * Math.ceil(shape[shape.length - 2] / 2); + let texelsInBatchN = texelsInBatch; + let batches = ``; + let coords2 = "b, r, c"; + for (let b = 2; b < shape.length - 1; b++) { + texelsInBatchN *= shape[shape.length - b - 1]; + batches = ` + int b${b} = index / ${texelsInBatchN}; + index -= b${b} * ${texelsInBatchN}; + ` + batches; + coords2 = `b${b}, ` + coords2; + } + return ` + ivec${shape.length} getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${packedTexShape[0]}, ${packedTexShape[1]})); + int index = resTexRC.x * ${packedTexShape[1]} + resTexRC.y; + + ${batches} + + int b = index / ${texelsInBatch}; + index -= b * ${texelsInBatch}; + + int r = 2 * (index / ${texelsInLogicalRow}); + int c = imod(index, ${texelsInLogicalRow}) * 2; + + return ivec${shape.length}(${coords2}); + } + `; + } + function getOutput4DCoords(shape, texShape, enableShapeUniforms) { + if (enableShapeUniforms) { + const coordsFromIndexSnippet2 = getOutputLogicalCoordinatesFromFlatIndexByUniform(["r", "c", "d", "d2"], shape); + return ` + ivec4 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + int index = resTexRC.x * outTexShape[1] + resTexRC.y; + ${coordsFromIndexSnippet2} + return ivec4(r, c, d, d2); + } + `; + } + const coordsFromIndexSnippet = getLogicalCoordinatesFromFlatIndex(["r", "c", "d", "d2"], shape); + return ` + ivec4 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + ${coordsFromIndexSnippet} + return ivec4(r, c, d, d2); + } + `; + } + function getOutput5DCoords(shape, texShape) { + const coordsFromIndexSnippet = getLogicalCoordinatesFromFlatIndex(["r", "c", "d", "d2", "d3"], shape); + return ` + ivec5 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * vec2(${texShape[0]}, + ${texShape[1]})); + + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + + ${coordsFromIndexSnippet} + + ivec5 outShape = ivec5(r, c, d, d2, d3); + return outShape; + } + `; + } + function getOutput6DCoords(shape, texShape) { + const coordsFromIndexSnippet = getLogicalCoordinatesFromFlatIndex(["r", "c", "d", "d2", "d3", "d4"], shape); + return ` + ivec6 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + + ${coordsFromIndexSnippet} + + ivec6 result = ivec6(r, c, d, d2, d3, d4); + return result; + } + `; + } + function getOutputPacked2DCoords(shape, texShape, enableShapeUniforms) { + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + if (util_exports.arraysEqual(shape, texShape)) { + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); + return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); + } + `; + } + return ` + ivec2 getOutputCoords() { + return 2 * ivec2(resultUV.yx * vec2(${packedTexShape[0]}, ${packedTexShape[1]})); + } + `; + } + const texelsInLogicalRow = Math.ceil(shape[1] / 2); + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); + int texelsInLogicalRow = int(ceil(float(outShape[1]) / 2.0)); + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(packedTexShape[0], packedTexShape[1])); + + int index = resTexRC.x * packedTexShape[1] + resTexRC.y; + int r = 2 * (index / texelsInLogicalRow); + int c = imod(index, texelsInLogicalRow) * 2; + + return ivec2(r, c); + } + `; + } + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${packedTexShape[0]}, ${packedTexShape[1]})); + + int index = resTexRC.x * ${packedTexShape[1]} + resTexRC.y; + int r = 2 * (index / ${texelsInLogicalRow}); + int c = imod(index, ${texelsInLogicalRow}) * 2; + + return ivec2(r, c); + } + `; + } + function getOutput2DCoords(shape, texShape, enableShapeUniforms) { + if (util_exports.arraysEqual(shape, texShape)) { + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); + } + `; + } + return ` + ivec2 getOutputCoords() { + return ivec2(resultUV.yx * vec2(${texShape[0]}, ${texShape[1]})); + } + `; + } + if (shape[1] === 1) { + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + int index = resTexRC.x * outTexShape[1] + resTexRC.y; + return ivec2(index, 0); + } + `; + } + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + return ivec2(index, 0); + } + `; + } + if (shape[0] === 1) { + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + int index = resTexRC.x * outTexShape[1] + resTexRC.y; + return ivec2(0, index); + } + `; + } + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + return ivec2(0, index); + } + `; + } + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + int index = resTexRC.x * outTexShape[1] + resTexRC.y; + int r = index / outShape[1]; + int c = index - r * outShape[1]; + return ivec2(r, c); + } + `; + } + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + int r = index / ${shape[1]}; + int c = index - r * ${shape[1]}; + return ivec2(r, c); + } + `; + } + function getFlatOffsetUniformName(texName) { + return `offset${texName}`; + } + function getPackedSamplerScalar(inputInfo) { + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const glsl = getGlslDifferences(); + return ` + vec4 ${funcName}() { + return ${glsl.texture2D}(${texName}, halfCR); + } + `; + } + function getSamplerScalar(inputInfo, enableShapeUniforms) { + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + if (inputInfo.shapeInfo.isUniform) { + return `float ${funcName}() {return ${texName};}`; + } + const [texNumR, texNumC] = inputInfo.shapeInfo.texShape; + if (texNumR === 1 && texNumC === 1) { + return ` + float ${funcName}() { + return sampleTexture(${texName}, halfCR); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + if (enableShapeUniforms) { + return ` + float ${funcName}() { + vec2 uv = uvFromFlat(${texName}TexShape[0], ${texName}TexShape[1], ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + const [tNumR, tNumC] = inputInfo.shapeInfo.texShape; + return ` + float ${funcName}() { + vec2 uv = uvFromFlat(${tNumR}, ${tNumC}, ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + function getPackedSampler1D(inputInfo, enableShapeUniforms) { + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const texShape = inputInfo.shapeInfo.texShape; + const glsl = getGlslDifferences(); + if (enableShapeUniforms) { + return ` + vec4 ${funcName}(int index) { + ivec2 packedTexShape = ivec2(ceil(float(${texName}TexShape[0]) / 2.0), ceil(float(${texName}TexShape[1]) / 2.0)); + vec2 uv = packedUVfrom1D( + packedTexShape[0], packedTexShape[1], index); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + return ` + vec4 ${funcName}(int index) { + vec2 uv = packedUVfrom1D( + ${packedTexShape[0]}, ${packedTexShape[1]}, index); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + function getSampler1D(inputInfo, enableShapeUniforms) { + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int index) { + ${getUniformSampler(inputInfo)} + } + `; + } + const texShape = inputInfo.shapeInfo.texShape; + const tNumR = texShape[0]; + const tNumC = texShape[1]; + if (tNumC === 1 && tNumR === 1) { + return ` + float ${funcName}(int index) { + return sampleTexture(${texName}, halfCR); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + if (tNumC === 1) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int index) { + vec2 uv = vec2(0.5, (float(index + ${offset}) + 0.5) / float(${texName}TexShape[0])); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int index) { + vec2 uv = vec2(0.5, (float(index + ${offset}) + 0.5) / ${tNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (tNumR === 1) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int index) { + vec2 uv = vec2((float(index + ${offset}) + 0.5) / float(${texName}TexShape[1]), 0.5); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int index) { + vec2 uv = vec2((float(index + ${offset}) + 0.5) / ${tNumC}.0, 0.5); + return sampleTexture(${texName}, uv); + } + `; + } + if (enableShapeUniforms) { + return ` + float ${funcName}(int index) { + vec2 uv = uvFromFlat(${texName}TexShape[0], ${texName}TexShape[1], index + ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int index) { + vec2 uv = uvFromFlat(${tNumR}, ${tNumC}, index + ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + function getPackedSampler2D(inputInfo, enableShapeUniforms) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const texShape = inputInfo.shapeInfo.texShape; + const texNumR = texShape[0]; + const texNumC = texShape[1]; + const glsl = getGlslDifferences(); + if (texShape != null && util_exports.arraysEqual(shape, texShape)) { + if (enableShapeUniforms) { + return ` + vec4 ${funcName}(int row, int col) { + vec2 uv = (vec2(col, row) + halfCR) / vec2(${texName}TexShape[1], ${texName}TexShape[0]); + + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + return ` + vec4 ${funcName}(int row, int col) { + vec2 uv = (vec2(col, row) + halfCR) / vec2(${texNumC}.0, ${texNumR}.0); + + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + if (enableShapeUniforms) { + return ` + vec4 ${funcName}(int row, int col) { + ivec2 packedTexShape = ivec2(ceil(float(${texName}TexShape[0]) / 2.0), ceil(float(${texName}TexShape[1]) / 2.0)); + int valuesPerRow = int(ceil(float(${texName}Shape[1]) / 2.0)); + vec2 uv = packedUVfrom2D(valuesPerRow, packedTexShape[0], packedTexShape[1], row, col); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + const valuesPerRow = Math.ceil(shape[1] / 2); + return ` + vec4 ${funcName}(int row, int col) { + vec2 uv = packedUVfrom2D(${valuesPerRow}, ${packedTexShape[0]}, ${packedTexShape[1]}, row, col); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + function getSampler2D(inputInfo, enableShapeUniforms) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const texShape = inputInfo.shapeInfo.texShape; + if (texShape != null && util_exports.arraysEqual(shape, texShape)) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col) { + vec2 uv = (vec2(col, row) + halfCR) / vec2(${texName}TexShape[1], ${texName}TexShape[0]); + return sampleTexture(${texName}, uv); + } + `; + } + const texNumR2 = texShape[0]; + const texNumC2 = texShape[1]; + return ` + float ${funcName}(int row, int col) { + vec2 uv = (vec2(col, row) + halfCR) / vec2(${texNumC2}.0, ${texNumR2}.0); + return sampleTexture(${texName}, uv); + } + `; + } + const { newShape, keptDims } = util_exports.squeezeShape(shape); + const squeezedShape = newShape; + if (squeezedShape.length < shape.length) { + const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape); + const params = ["row", "col"]; + return ` + ${getSamplerFromInInfo(newInputInfo, enableShapeUniforms)} + float ${funcName}(int row, int col) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int row, int col) { + int index = round(dot(vec2(row, col), vec2(${shape[1]}, 1))); + ${getUniformSampler(inputInfo)} + } + `; + } + const texNumR = texShape[0]; + const texNumC = texShape[1]; + const offset = getFlatOffsetUniformName(texName); + if (texNumC === 1) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col) { + float index = dot(vec3(row, col, ${offset}), vec3(${texName}Shape[1], 1, 1)); + vec2 uv = vec2(0.5, (index + 0.5) / float(${texName}TexShape[0])); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col) { + float index = dot(vec3(row, col, ${offset}), vec3(${shape[1]}, 1, 1)); + vec2 uv = vec2(0.5, (index + 0.5) / ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (texNumR === 1) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col) { + float index = dot(vec3(row, col, ${offset}), vec3(${texName}Shape[1], 1, 1)); + vec2 uv = vec2((index + 0.5) / float(${texName}TexShape[1]), 0.5); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col) { + float index = dot(vec3(row, col, ${offset}), vec3(${shape[1]}, 1, 1)); + vec2 uv = vec2((index + 0.5) / ${texNumC}.0, 0.5); + return sampleTexture(${texName}, uv); + } + `; + } + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${texName}Shape[1] + col + ${offset}; + vec2 uv = uvFromFlat(${texName}TexShape[0], ${texName}TexShape[1], index); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${shape[1]} + col + ${offset}; + vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index); + return sampleTexture(${texName}, uv); + } +`; + } + function getPackedSampler3D(inputInfo, enableShapeUniforms) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const texShape = inputInfo.shapeInfo.texShape; + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + if (shape[0] === 1) { + const squeezedShape = shape.slice(1); + const keptDims = [1, 2]; + const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape); + const params = ["b", "row", "col"]; + return ` + ${getPackedSamplerFromInInfo(newInputInfo, enableShapeUniforms)} + vec4 ${funcName}(int b, int row, int col) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + const glsl = getGlslDifferences(); + if (enableShapeUniforms) { + return ` + vec4 ${funcName}(int b, int row, int col) { + ivec2 packedTexShape = ivec2(ceil(float(${texName}TexShape[0]) / 2.0), ceil(float(${texName}TexShape[1]) / 2.0)); + int valuesPerRow = int(ceil(float(${texName}Shape[2]) / 2.0)); + int texelsInBatch = valuesPerRow * int(ceil(float(${texName}Shape[1]) / 2.0)); + vec2 uv = packedUVfrom3D( + packedTexShape[0], packedTexShape[1], texelsInBatch, valuesPerRow, b, row, col); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + const texNumR = packedTexShape[0]; + const texNumC = packedTexShape[1]; + const valuesPerRow = Math.ceil(shape[2] / 2); + const texelsInBatch = valuesPerRow * Math.ceil(shape[1] / 2); + return ` + vec4 ${funcName}(int b, int row, int col) { + vec2 uv = packedUVfrom3D( + ${texNumR}, ${texNumC}, ${texelsInBatch}, ${valuesPerRow}, b, row, col); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + function getSampler3D(inputInfo, enableShapeUniforms) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const stride0 = shape[1] * shape[2]; + const stride1 = shape[2]; + const { newShape, keptDims } = util_exports.squeezeShape(shape); + const squeezedShape = newShape; + if (squeezedShape.length < shape.length) { + const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape); + const params = ["row", "col", "depth"]; + return ` + ${getSamplerFromInInfo(newInputInfo, enableShapeUniforms)} + float ${funcName}(int row, int col, int depth) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int row, int col, int depth) { + int index = round(dot(vec3(row, col, depth), + vec3(${stride0}, ${stride1}, 1))); + ${getUniformSampler(inputInfo)} + } + `; + } + const texShape = inputInfo.shapeInfo.texShape; + const texNumR = texShape[0]; + const texNumC = texShape[1]; + const flatOffset = inputInfo.shapeInfo.flatOffset; + if (texNumC === stride0 && flatOffset == null) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth) { + int stride1 = ${texName}Shape[2]; + float texR = float(row); + float texC = dot(vec2(col, depth), vec2(stride1, 1)); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texName}TexShape[1], ${texName}TexShape[0]); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth) { + float texR = float(row); + float texC = dot(vec2(col, depth), vec2(${stride1}, 1)); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (texNumC === stride1 && flatOffset == null) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth) { + float texR = dot(vec2(row, col), vec2(${texName}Shape[1], 1)); + float texC = float(depth); + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${texName}TexShape[1], ${texName}TexShape[0]); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth) { + float texR = dot(vec2(row, col), vec2(${shape[1]}, 1)); + float texC = float(depth); + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth) { + // Explicitly use integer operations as dot() only works on floats. + int stride0 = ${texName}Shape[1] * ${texName}Shape[2]; + int stride1 = ${texName}Shape[2]; + int index = row * ${stride0} + col * ${stride1} + depth + ${offset}; + vec2 uv = uvFromFlat(${texName}TexShape[0], ${texName}TexShape[1], index); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${stride0} + col * ${stride1} + depth + ${offset}; + vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index); + return sampleTexture(${texName}, uv); + } + `; + } + function getPackedSamplerND(inputInfo, enableShapeUniforms) { + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const glsl = getGlslDifferences(); + if (enableShapeUniforms) { + return ` + vec4 ${funcName}(int b2, int b, int row, int col) { + int valuesPerRow = int(ceil(float(${texName}Shape[3]) / 2.0)); + int texelsInBatch = valuesPerRow * int(ceil(float(${texName}Shape[2]) / 2.0)); + int index = b * texelsInBatch + (row / 2) * valuesPerRow + (col / 2); + texelsInBatch *= ${texName}Shape[1]; + index = b2 * texelsInBatch + index; + ivec2 packedTexShape = ivec2(ceil(float(${texName}TexShape[0]) / 2.0), ceil(float(${texName}TexShape[1]) / 2.0)); + int texR = index / packedTexShape[1]; + int texC = index - texR * packedTexShape[1]; + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return ${glsl.texture2D}(${texName}, uv); + } + `; + } + const shape = inputInfo.shapeInfo.logicalShape; + const rank = shape.length; + const texShape = inputInfo.shapeInfo.texShape; + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + const texNumR = packedTexShape[0]; + const texNumC = packedTexShape[1]; + const valuesPerRow = Math.ceil(shape[rank - 1] / 2); + let texelsInBatch = valuesPerRow * Math.ceil(shape[rank - 2] / 2); + let params = `int b, int row, int col`; + let index = `b * ${texelsInBatch} + (row / 2) * ${valuesPerRow} + (col / 2)`; + for (let b = 2; b < rank - 1; b++) { + params = `int b${b}, ` + params; + texelsInBatch *= shape[rank - b - 1]; + index = `b${b} * ${texelsInBatch} + ` + index; + } + return ` + vec4 ${funcName}(${params}) { + int index = ${index}; + int texR = index / ${texNumC}; + int texC = index - texR * ${texNumC}; + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${texNumC}, ${texNumR}); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + function getSampler4D(inputInfo, enableShapeUniforms) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const stride2 = shape[3]; + const stride1 = shape[2] * stride2; + const stride0 = shape[1] * stride1; + const { newShape, keptDims } = util_exports.squeezeShape(shape); + if (newShape.length < shape.length) { + const newInputInfo = squeezeInputInfo(inputInfo, newShape); + const params = ["row", "col", "depth", "depth2"]; + return ` + ${getSamplerFromInInfo(newInputInfo, enableShapeUniforms)} + float ${funcName}(int row, int col, int depth, int depth2) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + int index = round(dot(vec4(row, col, depth, depth2), + vec4(${stride0}, ${stride1}, ${stride2}, 1))); + ${getUniformSampler(inputInfo)} + } + `; + } + const flatOffset = inputInfo.shapeInfo.flatOffset; + const texShape = inputInfo.shapeInfo.texShape; + const texNumR = texShape[0]; + const texNumC = texShape[1]; + const stride2Str = `int stride2 = ${texName}Shape[3];`; + const stride1Str = `int stride1 = ${texName}Shape[2] * stride2;`; + const stride0Str = `int stride0 = ${texName}Shape[1] * stride1;`; + if (texNumC === stride0 && flatOffset == null) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + ${stride2Str} + ${stride1Str} + float texR = float(row); + float texC = + dot(vec3(col, depth, depth2), + vec3(stride1, stride2, 1)); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texName}TexShape[1], ${texName}TexShape[0]); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + float texR = float(row); + float texC = + dot(vec3(col, depth, depth2), + vec3(${stride1}, ${stride2}, 1)); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (texNumC === stride2 && flatOffset == null) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + float texR = dot(vec3(row, col, depth), + vec3(${texName}Shape[1] * ${texName}Shape[2], ${texName}Shape[2], 1)); + float texC = float(depth2); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texName}TexShape[1], ${texName}TexShape[0]); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + float texR = dot(vec3(row, col, depth), + vec3(${shape[1] * shape[2]}, ${shape[2]}, 1)); + float texC = float(depth2); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + // Explicitly use integer operations as dot() only works on floats. + ${stride2Str} + ${stride1Str} + ${stride0Str} + int index = row * stride0 + col * stride1 + + depth * stride2 + depth2; + vec2 uv = uvFromFlat(${texName}TexShape[0], ${texName}TexShape[1], index + ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${stride0} + col * ${stride1} + + depth * ${stride2} + depth2; + vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index + ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + function getSampler5D(inputInfo) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const stride3 = shape[4]; + const stride2 = shape[3] * stride3; + const stride1 = shape[2] * stride2; + const stride0 = shape[1] * stride1; + const { newShape, keptDims } = util_exports.squeezeShape(shape); + if (newShape.length < shape.length) { + const newInputInfo = squeezeInputInfo(inputInfo, newShape); + const params = ["row", "col", "depth", "depth2", "depth3"]; + return ` + ${getSamplerFromInInfo(newInputInfo)} + float ${funcName}(int row, int col, int depth, int depth2, int depth3) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int row, int col, int depth, int depth2, int depth3) { + float index = dot( + vec4(row, col, depth, depth2), + vec4(${stride0}, ${stride1}, ${stride2}, ${stride3})) + + depth3; + ${getUniformSampler(inputInfo)} + } + `; + } + const flatOffset = inputInfo.shapeInfo.flatOffset; + const texShape = inputInfo.shapeInfo.texShape; + const texNumR = texShape[0]; + const texNumC = texShape[1]; + if (texNumC === stride0 && flatOffset == null) { + return ` + float ${funcName}(int row, int col, int depth, int depth2, int depth3) { + int texR = row; + float texC = dot(vec4(col, depth, depth2, depth3), + vec4(${stride1}, ${stride2}, ${stride3}, 1)); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (texNumC === stride3 && flatOffset == null) { + return ` + float ${funcName}(int row, int col, int depth, int depth2, int depth3) { + float texR = dot( + vec4(row, col, depth, depth2), + vec4(${shape[1] * shape[2] * shape[3]}, + ${shape[2] * shape[3]}, ${shape[3]}, 1)); + int texC = depth3; + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + return ` + float ${funcName}(int row, int col, int depth, int depth2, int depth3) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${stride0} + col * ${stride1} + depth * ${stride2} + + depth2 * ${stride3} + depth3 + ${offset}; + vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index); + return sampleTexture(${texName}, uv); + } + `; + } + function getSampler6D(inputInfo) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const { newShape, keptDims } = util_exports.squeezeShape(shape); + if (newShape.length < shape.length) { + const newInputInfo = squeezeInputInfo(inputInfo, newShape); + const params = ["row", "col", "depth", "depth2", "depth3", "depth4"]; + return ` + ${getSamplerFromInInfo(newInputInfo)} + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + const stride4 = shape[5]; + const stride3 = shape[4] * stride4; + const stride2 = shape[3] * stride3; + const stride1 = shape[2] * stride2; + const stride0 = shape[1] * stride1; + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + int index = round(dot( + vec4(row, col, depth, depth2), + vec4(${stride0}, ${stride1}, ${stride2}, ${stride3})) + + dot( + vec2(depth3, depth4), + vec2(${stride4}, 1))); + ${getUniformSampler(inputInfo)} + } + `; + } + const flatOffset = inputInfo.shapeInfo.flatOffset; + const texShape = inputInfo.shapeInfo.texShape; + const texNumR = texShape[0]; + const texNumC = texShape[1]; + if (texNumC === stride0 && flatOffset == null) { + return ` + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + int texR = row; + float texC = dot(vec4(col, depth, depth2, depth3), + vec4(${stride1}, ${stride2}, ${stride3}, ${stride4})) + + float(depth4); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (texNumC === stride4 && flatOffset == null) { + return ` + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + float texR = dot(vec4(row, col, depth, depth2), + vec4(${shape[1] * shape[2] * shape[3] * shape[4]}, + ${shape[2] * shape[3] * shape[4]}, + ${shape[3] * shape[4]}, + ${shape[4]})) + float(depth3); + int texC = depth4; + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + return ` + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${stride0} + col * ${stride1} + depth * ${stride2} + + depth2 * ${stride3} + depth3 * ${stride4} + depth4 + ${offset}; + vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index); + return sampleTexture(${texName}, uv); + } + `; + } + function getUniformSampler(inputInfo) { + const texName = inputInfo.name; + const inSize = util_exports.sizeFromShape(inputInfo.shapeInfo.logicalShape); + if (inSize < 2) { + return `return ${texName};`; + } + return ` + for (int i = 0; i < ${inSize}; i++) { + if (i == index) { + return ${texName}[i]; + } + } + `; + } + function getPackedSamplerAtOutputCoords(inputInfo, outShapeInfo) { + const texName = inputInfo.name; + const texFuncSnippet = texName.charAt(0).toUpperCase() + texName.slice(1); + const funcName = "get" + texFuncSnippet + "AtOutCoords"; + const inRank = inputInfo.shapeInfo.logicalShape.length; + const outRank = outShapeInfo.logicalShape.length; + const broadcastDims = getBroadcastDims2(inputInfo.shapeInfo.logicalShape, outShapeInfo.logicalShape); + const type = getCoordsDataType(outRank); + const rankDiff = outRank - inRank; + let coordsSnippet; + const fields = ["x", "y", "z", "w", "u", "v"]; + if (inRank === 0) { + coordsSnippet = ""; + } else if (outRank < 2 && broadcastDims.length >= 1) { + coordsSnippet = "coords = 0;"; + } else { + coordsSnippet = broadcastDims.map((d) => `coords.${fields[d + rankDiff]} = 0;`).join("\n"); + } + let unpackedCoordsSnippet = ""; + if (outRank < 2 && inRank > 0) { + unpackedCoordsSnippet = "coords"; + } else { + unpackedCoordsSnippet = inputInfo.shapeInfo.logicalShape.map((s, i) => `coords.${fields[i + rankDiff]}`).join(", "); + } + let output = `return outputValue;`; + const inSize = util_exports.sizeFromShape(inputInfo.shapeInfo.logicalShape); + const isInputScalar = inSize === 1; + const outSize = util_exports.sizeFromShape(outShapeInfo.logicalShape); + const isOutputScalar = outSize === 1; + if (inRank === 1 && !isInputScalar && !isOutputScalar) { + output = ` + return vec4(outputValue.xy, outputValue.xy); + `; + } else if (isInputScalar && !isOutputScalar) { + if (outRank === 1) { + output = ` + return vec4(outputValue.x, outputValue.x, 0., 0.); + `; + } else { + output = ` + return vec4(outputValue.x); + `; + } + } else if (broadcastDims.length) { + const rows = inRank - 2; + const cols = inRank - 1; + if (broadcastDims.indexOf(rows) > -1 && broadcastDims.indexOf(cols) > -1) { + output = `return vec4(outputValue.x);`; + } else if (broadcastDims.indexOf(rows) > -1) { + output = `return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);`; + } else if (broadcastDims.indexOf(cols) > -1) { + output = `return vec4(outputValue.xx, outputValue.zz);`; + } + } + return ` + vec4 ${funcName}() { + ${type} coords = getOutputCoords(); + ${coordsSnippet} + vec4 outputValue = get${texFuncSnippet}(${unpackedCoordsSnippet}); + ${output} + } + `; + } + function getSamplerAtOutputCoords(inputInfo, outShapeInfo) { + const texName = inputInfo.name; + const texFuncSnippet = texName.charAt(0).toUpperCase() + texName.slice(1); + const funcName = "get" + texFuncSnippet + "AtOutCoords"; + const outTexShape = outShapeInfo.texShape; + const inTexShape = inputInfo.shapeInfo.texShape; + const inRank = inputInfo.shapeInfo.logicalShape.length; + const outRank = outShapeInfo.logicalShape.length; + if (!inputInfo.shapeInfo.isUniform && inRank === outRank && inputInfo.shapeInfo.flatOffset == null && util_exports.arraysEqual(inTexShape, outTexShape)) { + return ` + float ${funcName}() { + return sampleTexture(${texName}, resultUV); + } + `; + } + const type = getCoordsDataType(outRank); + const broadcastDims = getBroadcastDims2(inputInfo.shapeInfo.logicalShape, outShapeInfo.logicalShape); + const rankDiff = outRank - inRank; + let coordsSnippet; + const fields = ["x", "y", "z", "w", "u", "v"]; + if (inRank === 0) { + coordsSnippet = ""; + } else if (outRank < 2 && broadcastDims.length >= 1) { + coordsSnippet = "coords = 0;"; + } else { + coordsSnippet = broadcastDims.map((d) => `coords.${fields[d + rankDiff]} = 0;`).join("\n"); + } + let unpackedCoordsSnippet = ""; + if (outRank < 2 && inRank > 0) { + unpackedCoordsSnippet = "coords"; + } else { + unpackedCoordsSnippet = inputInfo.shapeInfo.logicalShape.map((s, i) => `coords.${fields[i + rankDiff]}`).join(", "); + } + return ` + float ${funcName}() { + ${type} coords = getOutputCoords(); + ${coordsSnippet} + return get${texFuncSnippet}(${unpackedCoordsSnippet}); + } + `; + } + function getCoordsDataType(rank) { + if (rank <= 1) { + return "int"; + } else if (rank === 2) { + return "ivec2"; + } else if (rank === 3) { + return "ivec3"; + } else if (rank === 4) { + return "ivec4"; + } else if (rank === 5) { + return "ivec5"; + } else if (rank === 6) { + return "ivec6"; + } else { + throw Error(`GPU for rank ${rank} is not yet supported`); + } + } + function getUniformInfoFromShape(isPacked, shape, texShape) { + const { newShape, keptDims } = util_exports.squeezeShape(shape); + const rank = shape.length; + const useSqueezePackedShape = isPacked && rank === 3 && shape[0] === 1; + const squeezeShape2 = useSqueezePackedShape ? shape.slice(1) : newShape; + const useSqueezeShape = !isPacked && rank > 1 && !util_exports.arraysEqual(shape, texShape) && newShape.length < rank || useSqueezePackedShape; + const uniformShape = useSqueezeShape ? squeezeShape2 : shape; + return { useSqueezeShape, uniformShape, keptDims }; + } + function squeezeInputInfo(inInfo, squeezedShape) { + const newInputInfo = JSON.parse(JSON.stringify(inInfo)); + newInputInfo.shapeInfo.logicalShape = squeezedShape; + return newInputInfo; + } + function getSqueezedParams(params, keptDims) { + return keptDims.map((d) => params[d]).join(", "); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_math.js + function compileProgram(gpgpu, program, inputs, output) { + const inputInfos = inputs.map((input2, i) => { + const shapeInfo = { + logicalShape: input2.shape, + texShape: input2.isUniform ? null : input2.texData.texShape, + isUniform: input2.isUniform, + isPacked: input2.isUniform ? false : input2.texData.isPacked, + flatOffset: null + }; + if (input2.texData != null && input2.texData.slice != null && input2.texData.slice.flatOffset > 0) { + shapeInfo.flatOffset = input2.texData.slice.flatOffset; + } + return { name: program.variableNames[i], shapeInfo }; + }); + const inShapeInfos = inputInfos.map((x) => x.shapeInfo); + const outShapeInfo = { + logicalShape: output.shape, + texShape: output.texData.texShape, + isUniform: false, + isPacked: output.texData.isPacked, + flatOffset: null + }; + const source = makeShader(inputInfos, outShapeInfo, program); + const fragmentShader = createFragmentShader(gpgpu.gl, source); + const webGLProgram = gpgpu.createProgram(fragmentShader); + if (!env().get("ENGINE_COMPILE_ONLY")) { + return Object.assign({ + program, + fragmentShader, + source, + webGLProgram, + inShapeInfos, + outShapeInfo + }, getUniformLocations(gpgpu, program, webGLProgram)); + } else { + return { + program, + fragmentShader, + source, + webGLProgram, + inShapeInfos, + outShapeInfo, + uniformLocations: null, + customUniformLocations: null, + infLoc: null, + nanLoc: null, + inShapesLocations: null, + inTexShapesLocations: null, + outShapeLocation: null, + outShapeStridesLocation: null, + outTexShapeLocation: null + }; + } + } + function getUniformLocations(gpgpu, program, webGLProgram) { + const uniformLocations = {}; + const inShapesLocations = {}; + const inTexShapesLocations = {}; + const customUniformLocations = []; + let outShapeLocation; + let outTexShapeLocation; + let outShapeStridesLocation; + let infLoc = null; + let nanLoc = null; + nanLoc = gpgpu.getUniformLocation(webGLProgram, "NAN", false); + if (env().getNumber("WEBGL_VERSION") === 1) { + infLoc = gpgpu.getUniformLocation(webGLProgram, "INFINITY", false); + } + const shouldThrow = false; + for (let i = 0; i < program.variableNames.length; i++) { + const varName = program.variableNames[i]; + uniformLocations[varName] = gpgpu.getUniformLocation(webGLProgram, varName, shouldThrow); + uniformLocations[`offset${varName}`] = gpgpu.getUniformLocation(webGLProgram, `offset${varName}`, shouldThrow); + if (program.enableShapeUniforms) { + inShapesLocations[`${varName}Shape`] = gpgpu.getUniformLocation(webGLProgram, `${varName}Shape`, shouldThrow); + inTexShapesLocations[`${varName}TexShape`] = gpgpu.getUniformLocation(webGLProgram, `${varName}TexShape`, shouldThrow); + } + } + if (program.enableShapeUniforms) { + outShapeLocation = gpgpu.getUniformLocation(webGLProgram, "outShape", shouldThrow); + outShapeStridesLocation = gpgpu.getUniformLocation(webGLProgram, "outShapeStrides", shouldThrow); + outTexShapeLocation = gpgpu.getUniformLocation(webGLProgram, "outTexShape", shouldThrow); + } + if (program.customUniforms) { + program.customUniforms.forEach((d, i) => { + customUniformLocations[i] = gpgpu.getUniformLocation(webGLProgram, d.name, shouldThrow); + }); + } + return { + uniformLocations, + customUniformLocations, + infLoc, + nanLoc, + inShapesLocations, + inTexShapesLocations, + outShapeLocation, + outShapeStridesLocation, + outTexShapeLocation + }; + } + function validateBinaryAndProgram(shapeInfos, inputs) { + if (shapeInfos.length !== inputs.length) { + throw Error(`Binary was compiled with ${shapeInfos.length} inputs, but was executed with ${inputs.length} inputs`); + } + shapeInfos.forEach((s, i) => { + const shapeA = s.logicalShape; + const input2 = inputs[i]; + const shapeB = input2.shape; + if (!util_exports.arraysEqual(shapeA, shapeB)) { + throw Error(`Binary was compiled with different shapes than the current args. Shapes ${shapeA} and ${shapeB} must match`); + } + if (s.isUniform && input2.isUniform) { + return; + } + const texShapeA = s.texShape; + const texShapeB = input2.isUniform ? null : input2.texData.texShape; + if (!util_exports.arraysEqual(texShapeA, texShapeB)) { + throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${texShapeA} and ${texShapeB} must match`); + } + }); + } + function runProgram(gpgpu, binary, inputs, output, customUniformValues) { + if (!binary.program.enableShapeUniforms) { + validateBinaryAndProgram(binary.inShapeInfos, inputs); + validateBinaryAndProgram([binary.outShapeInfo], [output]); + } + const outTex = output.texData.texture; + const outTexShape = output.texData.texShape; + if (output.texData.isPacked) { + gpgpu.setOutputPackedMatrixTexture(outTex.texture, outTexShape[0], outTexShape[1]); + } else { + gpgpu.setOutputMatrixTexture(outTex.texture, outTexShape[0], outTexShape[1]); + } + gpgpu.setProgram(binary.webGLProgram); + if (env().getNumber("WEBGL_VERSION") === 1) { + if (binary.infLoc !== null) { + gpgpu.gl.uniform1f(binary.infLoc, Infinity); + } + } + if (binary.nanLoc !== null) { + gpgpu.gl.uniform1f(binary.nanLoc, NaN); + } + inputs.forEach((input2, i) => { + const varName = binary.program.variableNames[i]; + const varLoc = binary.uniformLocations[varName]; + const varOffsetLoc = binary.uniformLocations[`offset${varName}`]; + const varShapeLoc = binary.inShapesLocations[`${varName}Shape`]; + const varTexShapeLoc = binary.inTexShapesLocations[`${varName}TexShape`]; + if (varShapeLoc) { + const { uniformShape } = getUniformInfoFromShape(binary.program.packedInputs, input2.shape, input2.texData.texShape); + switch (uniformShape.length) { + case 1: + gpgpu.gl.uniform1iv(varShapeLoc, new Int32Array(uniformShape)); + break; + case 2: + gpgpu.gl.uniform2iv(varShapeLoc, new Int32Array(uniformShape)); + break; + case 3: + gpgpu.gl.uniform3iv(varShapeLoc, new Int32Array(uniformShape)); + break; + case 4: + gpgpu.gl.uniform4iv(varShapeLoc, new Int32Array(uniformShape)); + break; + default: + break; + } + } + if (varTexShapeLoc) { + gpgpu.gl.uniform2i(varTexShapeLoc, input2.texData.texShape[0], input2.texData.texShape[1]); + } + if (varLoc == null) { + return; + } + if (input2.isUniform) { + if (util_exports.sizeFromShape(input2.shape) < 2) { + gpgpu.gl.uniform1f(varLoc, input2.uniformValues[0]); + } else { + let vals = input2.uniformValues; + if (!(vals instanceof Float32Array)) { + vals = new Float32Array(vals); + } + gpgpu.gl.uniform1fv(varLoc, vals); + } + return; + } + if (input2.texData.slice != null && varOffsetLoc != null) { + gpgpu.gl.uniform1i(varOffsetLoc, input2.texData.slice.flatOffset); + } + gpgpu.setInputMatrixTexture(input2.texData.texture.texture, varLoc, i); + }); + const outShapeLoc = binary.outShapeLocation; + if (outShapeLoc) { + switch (output.shape.length) { + case 1: + gpgpu.gl.uniform1iv(outShapeLoc, new Int32Array(output.shape)); + break; + case 2: + gpgpu.gl.uniform2iv(outShapeLoc, new Int32Array(output.shape)); + break; + case 3: + gpgpu.gl.uniform3iv(outShapeLoc, new Int32Array(output.shape)); + break; + case 4: + gpgpu.gl.uniform4iv(outShapeLoc, new Int32Array(output.shape)); + break; + default: + break; + } + } + if (binary.outShapeStridesLocation) { + const strides = util_exports.computeStrides(output.shape); + switch (output.shape.length) { + case 2: + gpgpu.gl.uniform1iv(binary.outShapeStridesLocation, new Int32Array(strides)); + break; + case 3: + gpgpu.gl.uniform2iv(binary.outShapeStridesLocation, new Int32Array(strides)); + break; + case 4: + gpgpu.gl.uniform3iv(binary.outShapeStridesLocation, new Int32Array(strides)); + break; + default: + break; + } + } + if (binary.outTexShapeLocation) { + gpgpu.gl.uniform2i(binary.outTexShapeLocation, output.texData.texShape[0], output.texData.texShape[1]); + } + if (binary.program.customUniforms && customUniformValues) { + binary.program.customUniforms.forEach((d, i) => { + const customLoc = binary.customUniformLocations[i]; + const customValue = customUniformValues[i]; + if (d.type === "float") { + gpgpu.gl.uniform1fv(customLoc, customValue); + } else if (d.type === "vec2") { + gpgpu.gl.uniform2fv(customLoc, customValue); + } else if (d.type === "vec3") { + gpgpu.gl.uniform3fv(customLoc, customValue); + } else if (d.type === "vec4") { + gpgpu.gl.uniform4fv(customLoc, customValue); + } else if (d.type === "int") { + gpgpu.gl.uniform1iv(customLoc, customValue); + } else if (d.type === "ivec2") { + gpgpu.gl.uniform2iv(customLoc, customValue); + } else if (d.type === "ivec3") { + gpgpu.gl.uniform3iv(customLoc, customValue); + } else if (d.type === "ivec4") { + gpgpu.gl.uniform4iv(customLoc, customValue); + } else { + throw Error(`uniform type ${d.type} is not supported yet.`); + } + }); + } + gpgpu.executeProgram(); + } + function makeShaderKey(program, inputs, output) { + let keyInputs = ""; + inputs.concat(output).forEach((x) => { + const hasOffset = x.texData != null && x.texData.slice != null && x.texData.slice.flatOffset > 0; + if (program.enableShapeUniforms && !x.isUniform) { + const xTexShape = x.texData.texShape; + const { useSqueezeShape, uniformShape, keptDims } = getUniformInfoFromShape(program.packedInputs, x.shape, xTexShape); + let rank1 = "", rank2 = "", rank34 = ""; + if (uniformShape.length === 1 && program.packedInputs) { + const packedTexShape = [Math.ceil(xTexShape[0] / 2), Math.ceil(xTexShape[1] / 2)]; + rank1 = `${packedTexShape[0] > 1}_${packedTexShape[1] > 1}`; + } else if (uniformShape.length === 2 && !program.packedInputs) { + rank2 = `${uniformShape[0] > 1}_${uniformShape[1] > 1}`; + } else if (uniformShape.length > 2 && !program.packedInputs) { + const strides = util_exports.computeStrides(uniformShape); + rank34 = `${strides[0] === xTexShape[1]}_${strides[strides.length - 1] === xTexShape[1]}`; + } + const xRank = x.shape.length; + const isLogicalShapTexShapeEqual = uniformShape.length === 2 && util_exports.arraysEqual(x.shape, xTexShape); + const isScalar = util_exports.sizeFromShape(x.shape) === 1; + const broadcastDims = backend_util_exports.getBroadcastDims(x.shape, output.shape); + const isInOutTexShapeEqual = !program.packedInputs && xRank === output.shape.length && util_exports.arraysEqual(xTexShape, output.texData.texShape); + const isTexShapeGreaterThanOne = program.packedInputs || uniformShape.length > 2 ? "" : `${xTexShape[0] > 1}_${xTexShape[1] > 1}`; + keyInputs += `${xRank}_${isInOutTexShapeEqual}_${useSqueezeShape ? keptDims : ""}_${uniformShape.length}_${isScalar}_${broadcastDims}_${isLogicalShapTexShapeEqual}_${rank1}_${rank2}_${rank34}_${isTexShapeGreaterThanOne}_${hasOffset}`; + } else { + const texShape = x.isUniform ? "uniform" : x.texData.texShape; + keyInputs += `${x.shape}_${texShape}_${hasOffset}`; + } + }); + const keyUserCode = program.userCode; + let key = program.constructor.name; + key += "_" + keyInputs + "_" + keyUserCode + `${env().getNumber("WEBGL_VERSION")}`; + return key; + } + function useShapeUniforms(rank) { + return env().getBool("WEBGL_USE_SHAPES_UNIFORMS") && rank <= 4; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/decode_matrix_gpu.js + var DecodeMatrixProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = false; + this.packedOutput = true; + this.outPackingScheme = PackingScheme.DENSE; + this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + this.userCode = ` + ivec3 outCoordsFromFlatIndex(int index) { + ${this.enableShapeUniforms ? getOutputLogicalCoordinatesFromFlatIndexByUniform(["r", "c", "d"], outputShape) : getLogicalCoordinatesFromFlatIndex(["r", "c", "d"], outputShape)} + return ivec3(r, c, d); + } + + void main() { + ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1])); + int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y); + + vec4 result = vec4(0.); + + for (int i=0; i<4; i++) { + int flatIndex = index + i; + ivec3 rc = outCoordsFromFlatIndex(flatIndex); + result[i] = getA(rc.x, rc.y, rc.z); + } + + ${glsl.output} = result; + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/decode_matrix_packed_gpu.js + init_define_BUILD_VERSION(); + var DecodeMatrixPackedProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.outPackingScheme = PackingScheme.DENSE; + this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + this.userCode = ` + ivec3 outCoordsFromFlatIndex(int index) { + ${this.enableShapeUniforms ? getOutputLogicalCoordinatesFromFlatIndexByUniform(["r", "c", "d"], outputShape) : getLogicalCoordinatesFromFlatIndex(["r", "c", "d"], outputShape)} + return ivec3(r, c, d); + } + + void main() { + ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1])); + int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y); + + vec4 result = vec4(0.); + + for (int i=0; i<4; i++) { + int flatIndex = index + i; + ivec3 rc = outCoordsFromFlatIndex(flatIndex); + result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z)); + } + + ${glsl.output} = result; + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_float_gpu.js + init_define_BUILD_VERSION(); + var EncodeFloatProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.outTexUsage = TextureUsage.DOWNLOAD; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.userCode = ` + ${ENCODE_FLOAT_SNIPPET} + + void main() { + float x = getAAtOutCoords(); + ${glsl.output} = encode_float(x); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_float_packed_gpu.js + init_define_BUILD_VERSION(); + var EncodeFloatPackedProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = false; + this.outTexUsage = TextureUsage.DOWNLOAD; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.userCode = ` + ${ENCODE_FLOAT_SNIPPET} + + void main() { + ivec3 coords = getOutputCoords(); + float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); + ${glsl.output} = encode_float(x); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_matrix_gpu.js + init_define_BUILD_VERSION(); + var EncodeMatrixProgram = class { + constructor(outputShape, inputIsUnsignedByte = false) { + this.variableNames = ["A"]; + this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + let output = `result`; + if (inputIsUnsignedByte) { + output = `floor(result * 255. + 0.5)`; + } + this.userCode = ` + ${this.enableShapeUniforms ? getFlatIndexFrom3DOutput() : getFlatIndexFrom3D(outputShape)} + + void main() { + ivec3 coords = getOutputCoords(); + + int flatIndex = getFlatIndex(coords); + int offset = imod(flatIndex, 4); + + flatIndex = idiv(flatIndex, 4, 1.); + + int r = flatIndex / texShape[1]; + int c = imod(flatIndex, texShape[1]); + vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]); + vec4 values = ${glsl.texture2D}(A, uv); + + float result; + + if(offset == 0) { + result = values[0]; + } else if(offset == 1) { + result = values[1]; + } else if(offset == 2) { + result = values[2]; + } else { + result = values[3]; + } + + ${glsl.output} = vec4(${output}, 0., 0., 0.); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_matrix_packed_gpu.js + init_define_BUILD_VERSION(); + var EncodeMatrixPackedProgram = class { + constructor(outputShape, inputIsUnsignedByte = false) { + this.variableNames = ["A"]; + this.packedInputs = false; + this.packedOutput = true; + this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + let mainLoop = ""; + let output = "result"; + if (inputIsUnsignedByte) { + output = "floor(result * 255. + 0.5)"; + } + for (let row = 0; row <= 1; row++) { + for (let col = 0; col <= 1; col++) { + const channel = row * 2 + col; + mainLoop += ` + localCoords = coords; + if(localCoords[2] + ${col} < ${this.enableShapeUniforms ? "outShape[2]" : `${outputShape[2]}`}) { + localCoords[2] += ${col}; + if (localCoords[1] + ${row} < ${this.enableShapeUniforms ? "outShape[1]" : `${outputShape[1]}`}) { + localCoords[1] += ${row}; + + flatIndex = getFlatIndex(localCoords); + offset = imod(flatIndex, 4); + + flatIndex = idiv(flatIndex, 4, 1.); + + int r = flatIndex / texShape[1]; + int c = imod(flatIndex, texShape[1]); + vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]); + values = ${glsl.texture2D}(A, uv); + + if (offset == 0) { + result[${channel}] = values[0]; + } else if (offset == 1) { + result[${channel}] = values[1]; + } else if (offset == 2) { + result[${channel}] = values[2]; + } else { + result[${channel}] = values[3]; + } + } + } + `; + } + } + this.userCode = ` + ${this.enableShapeUniforms ? getFlatIndexFrom3DOutput() : getFlatIndexFrom3D(outputShape)} + + void main() { + ivec3 coords = getOutputCoords(); + + vec4 result = vec4(0.); + int flatIndex, r, c, offset; + ivec3 localCoords; + vec2 uv; + vec4 values; + + ${mainLoop} + + ${glsl.output} = ${output}; + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_context.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_util.js + init_define_BUILD_VERSION(); + function createVertexShader2(gl) { + const glsl = getGlslDifferences(); + const vertexShaderSource = `${glsl.version} + precision highp float; + ${glsl.attribute} vec3 clipSpacePos; + ${glsl.attribute} vec2 uv; + ${glsl.varyingVs} vec2 resultUV; + + void main() { + gl_Position = vec4(clipSpacePos, 1); + resultUV = uv; + }`; + return createVertexShader(gl, vertexShaderSource); + } + function createVertexBuffer(gl) { + const vertexArray = new Float32Array([-1, 1, 0, 0, 1, -1, -1, 0, 0, 0, 1, 1, 0, 1, 1, 1, -1, 0, 1, 0]); + return createStaticVertexBuffer(gl, vertexArray); + } + function createIndexBuffer(gl) { + const triangleVertexIndices = new Uint16Array([0, 1, 2, 2, 1, 3]); + return createStaticIndexBuffer(gl, triangleVertexIndices); + } + function createAndConfigureTexture(gl, width, height, internalFormat, textureFormat, textureType) { + validateTextureSize(width, height); + const texture = createTexture(gl); + const tex2d = gl.TEXTURE_2D; + callAndCheck(gl, () => gl.bindTexture(tex2d, texture)); + callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)); + callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)); + callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_MIN_FILTER, gl.NEAREST)); + callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_MAG_FILTER, gl.NEAREST)); + if (env().getNumber("WEBGL_VERSION") === 1) { + callAndCheck(gl, () => gl.texImage2D(tex2d, 0, internalFormat, width, height, 0, textureFormat, textureType, null)); + } else { + callAndCheck(gl, () => gl.texStorage2D(tex2d, 1, internalFormat, width, height)); + } + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, null)); + return { texture, texShape: [height, width] }; + } + function getInternalFormatForFloat32MatrixTexture(textureConfig) { + return textureConfig.internalFormatFloat; + } + function createFloat32MatrixTexture(gl, rows, columns, textureConfig) { + const [width, height] = getUnpackedMatrixTextureShapeWidthHeight(rows, columns); + return createAndConfigureTexture(gl, width, height, getInternalFormatForFloat32MatrixTexture(textureConfig), textureConfig.textureFormatFloat, gl.FLOAT); + } + function getInternalFormatForFloat16MatrixTexture(textureConfig) { + return textureConfig.internalFormatHalfFloat; + } + function createFloat16MatrixTexture(gl, rows, columns, textureConfig) { + const [width, height] = getUnpackedMatrixTextureShapeWidthHeight(rows, columns); + return createAndConfigureTexture(gl, width, height, getInternalFormatForFloat16MatrixTexture(textureConfig), textureConfig.textureFormatFloat, textureConfig.textureTypeHalfFloat); + } + function getInternalFormatForUnsignedBytesMatrixTexture(textureConfig) { + return textureConfig.downloadTextureFormat; + } + function createUnsignedBytesMatrixTexture(gl, rows, columns, textureConfig) { + const [width, height] = getUnpackedMatrixTextureShapeWidthHeight(rows, columns); + return createAndConfigureTexture(gl, width, height, getInternalFormatForUnsignedBytesMatrixTexture(textureConfig), gl.RGBA, gl.UNSIGNED_BYTE); + } + function getInternalFormatForPackedMatrixTexture(textureConfig) { + return textureConfig.internalFormatPackedFloat; + } + function createPackedMatrixTexture(gl, rows, columns, textureConfig) { + const [width, height] = getPackedMatrixTextureShapeWidthHeight(rows, columns); + return createAndConfigureTexture(gl, width, height, getInternalFormatForPackedMatrixTexture(textureConfig), gl.RGBA, gl.FLOAT); + } + function getInternalFormatForFloat16PackedMatrixTexture(textureConfig) { + return textureConfig.internalFormatPackedHalfFloat; + } + function createFloat16PackedMatrixTexture(gl, rows, columns, textureConfig) { + const [width, height] = getPackedMatrixTextureShapeWidthHeight(rows, columns); + return createAndConfigureTexture(gl, width, height, getInternalFormatForFloat16PackedMatrixTexture(textureConfig), gl.RGBA, textureConfig.textureTypeHalfFloat); + } + function bindVertexProgramAttributeStreams(gl, program, vertexBuffer) { + const posOffset = 0; + const uvOffset = 3 * 4; + const stride = 3 * 4 + 2 * 4; + callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer)); + const success = bindVertexBufferToProgramAttribute(gl, program, "clipSpacePos", vertexBuffer, 3, stride, posOffset); + return success && bindVertexBufferToProgramAttribute(gl, program, "uv", vertexBuffer, 2, stride, uvOffset); + } + function uploadDenseMatrixToTexture(gl, texture, width, height, data, textureConfig) { + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, texture)); + let dataForUpload, texelDataType, internalFormat; + if (data instanceof Uint8Array) { + dataForUpload = new Uint8Array(width * height * 4); + texelDataType = gl.UNSIGNED_BYTE; + internalFormat = gl.RGBA; + } else { + dataForUpload = new Float32Array(width * height * 4); + texelDataType = gl.FLOAT; + internalFormat = textureConfig.internalFormatPackedFloat; + } + dataForUpload.set(data); + if (env().getNumber("WEBGL_VERSION") === 2) { + callAndCheck(gl, () => gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height, gl.RGBA, texelDataType, dataForUpload)); + } else { + callAndCheck(gl, () => gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, width, height, 0, gl.RGBA, texelDataType, dataForUpload)); + } + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, null)); + } + function uploadPixelDataToTexture(gl, texture, pixels) { + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, texture)); + if (pixels.data instanceof Uint8Array) { + if (env().getNumber("WEBGL_VERSION") === 2) { + callAndCheck(gl, () => gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, pixels.width, pixels.height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.data)); + } else { + callAndCheck(gl, () => gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, pixels.width, pixels.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels.data)); + } + } else { + if (env().getNumber("WEBGL_VERSION") === 2) { + callAndCheck(gl, () => gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels)); + } else { + callAndCheck(gl, () => gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, pixels)); + } + } + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, null)); + } + function createBufferFromOutputTexture(gl2, rows, columns, textureConfig) { + const buffer2 = gl2.createBuffer(); + callAndCheck(gl2, () => gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer2)); + const bytesPerFloat = 4; + const valuesPerTexel = 4; + const bufferSizeBytes = bytesPerFloat * valuesPerTexel * rows * columns; + callAndCheck(gl2, () => gl2.bufferData(gl2.PIXEL_PACK_BUFFER, bufferSizeBytes, gl2.STREAM_READ)); + callAndCheck(gl2, () => gl2.readPixels(0, 0, columns, rows, gl2.RGBA, gl2.FLOAT, 0)); + callAndCheck(gl2, () => gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null)); + return buffer2; + } + function downloadFloat32MatrixFromBuffer(gl, buffer2, size) { + const gl2 = gl; + const downloadTarget = new Float32Array(size); + gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer2); + gl2.getBufferSubData(gl2.PIXEL_PACK_BUFFER, 0, downloadTarget); + gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null); + return downloadTarget; + } + function downloadByteEncodedFloatMatrixFromOutputTexture(gl, rows, columns, textureConfig) { + const [w, h] = getUnpackedMatrixTextureShapeWidthHeight(rows, columns); + const numChannels = 4; + const downloadTarget = new Uint8Array(getUnpackedArraySizeFromMatrixSize(rows * columns, numChannels)); + callAndCheck(gl, () => gl.readPixels(0, 0, w, h, textureConfig.downloadTextureFormat, gl.UNSIGNED_BYTE, downloadTarget)); + return new Float32Array(downloadTarget.buffer); + } + function downloadPackedMatrixFromBuffer(gl, buffer2, batch, rows, cols, physicalRows, physicalCols, textureConfig) { + const gl2 = gl; + const downloadTarget = new Float32Array(getPackedRGBAArraySizeFromMatrixShape(physicalRows, physicalCols)); + gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer2); + gl2.getBufferSubData(gl2.PIXEL_PACK_BUFFER, 0, downloadTarget); + gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null); + return downloadTarget; + } + function downloadMatrixFromPackedOutputTexture(gl, physicalRows, physicalCols) { + const packedRGBA = new Float32Array(physicalRows * physicalCols * 4); + callAndCheck(gl, () => gl.readPixels(0, 0, physicalCols, physicalRows, gl.RGBA, gl.FLOAT, packedRGBA)); + return packedRGBA; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_context.js + var GPGPUContext = class { + constructor(gl) { + this.outputTexture = null; + this.program = null; + this.disposed = false; + this.vertexAttrsAreBound = false; + this.itemsToPoll = []; + const glVersion = env().getNumber("WEBGL_VERSION"); + if (gl != null) { + this.gl = gl; + setWebGLContext(glVersion, gl); + } else { + this.gl = getWebGLContext(glVersion); + } + let COLOR_BUFFER_FLOAT = "WEBGL_color_buffer_float"; + const COLOR_BUFFER_HALF_FLOAT = "EXT_color_buffer_half_float"; + this.parallelCompilationExtension = this.gl.getExtension("KHR_parallel_shader_compile"); + if (env().getNumber("WEBGL_VERSION") === 1) { + const TEXTURE_FLOAT = "OES_texture_float"; + const TEXTURE_HALF_FLOAT = "OES_texture_half_float"; + this.textureFloatExtension = getExtensionOrThrow(this.gl, TEXTURE_FLOAT); + if (hasExtension(this.gl, TEXTURE_HALF_FLOAT)) { + this.textureHalfFloatExtension = getExtensionOrThrow(this.gl, TEXTURE_HALF_FLOAT); + } else if (env().get("WEBGL_FORCE_F16_TEXTURES")) { + throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true."); + } + this.colorBufferFloatExtension = this.gl.getExtension(COLOR_BUFFER_FLOAT); + if (hasExtension(this.gl, COLOR_BUFFER_HALF_FLOAT)) { + this.colorBufferHalfFloatExtension = getExtensionOrThrow(this.gl, COLOR_BUFFER_HALF_FLOAT); + } else if (env().get("WEBGL_FORCE_F16_TEXTURES")) { + throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true."); + } + } else { + COLOR_BUFFER_FLOAT = "EXT_color_buffer_float"; + if (hasExtension(this.gl, COLOR_BUFFER_FLOAT)) { + this.colorBufferFloatExtension = this.gl.getExtension(COLOR_BUFFER_FLOAT); + } else if (hasExtension(this.gl, COLOR_BUFFER_HALF_FLOAT)) { + this.colorBufferHalfFloatExtension = this.gl.getExtension(COLOR_BUFFER_HALF_FLOAT); + } else { + throw new Error("GL context does not support color renderable floats"); + } + } + this.vertexBuffer = createVertexBuffer(this.gl); + this.indexBuffer = createIndexBuffer(this.gl); + this.framebuffer = createFramebuffer(this.gl); + this.textureConfig = getTextureConfig(this.gl, this.textureHalfFloatExtension); + } + get debug() { + return env().getBool("DEBUG"); + } + dispose() { + if (this.disposed) { + return; + } + if (this.program != null) { + console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."); + } + if (this.outputTexture != null) { + console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing."); + } + const gl = this.gl; + callAndCheck(gl, () => gl.finish()); + callAndCheck(gl, () => gl.bindFramebuffer(gl.FRAMEBUFFER, null)); + callAndCheck(gl, () => gl.deleteFramebuffer(this.framebuffer)); + callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, null)); + callAndCheck(gl, () => gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null)); + callAndCheck(gl, () => gl.deleteBuffer(this.indexBuffer)); + this.disposed = true; + } + createFloat32MatrixTexture(rows, columns) { + this.throwIfDisposed(); + return createFloat32MatrixTexture(this.gl, rows, columns, this.textureConfig); + } + createFloat16MatrixTexture(rows, columns) { + this.throwIfDisposed(); + return createFloat16MatrixTexture(this.gl, rows, columns, this.textureConfig); + } + createUnsignedBytesMatrixTexture(rows, columns) { + this.throwIfDisposed(); + return createUnsignedBytesMatrixTexture(this.gl, rows, columns, this.textureConfig); + } + uploadPixelDataToTexture(texture, pixels) { + this.throwIfDisposed(); + uploadPixelDataToTexture(this.gl, texture, pixels); + } + uploadDenseMatrixToTexture(texture, width, height, data) { + this.throwIfDisposed(); + uploadDenseMatrixToTexture(this.gl, texture, width, height, data, this.textureConfig); + } + createFloat16PackedMatrixTexture(rows, columns) { + this.throwIfDisposed(); + return createFloat16PackedMatrixTexture(this.gl, rows, columns, this.textureConfig); + } + createPackedMatrixTexture(rows, columns) { + this.throwIfDisposed(); + return createPackedMatrixTexture(this.gl, rows, columns, this.textureConfig); + } + deleteMatrixTexture(texture) { + this.throwIfDisposed(); + if (this.outputTexture === texture) { + unbindColorTextureFromFramebuffer(this.gl, this.framebuffer); + this.outputTexture = null; + } + callAndCheck(this.gl, () => this.gl.deleteTexture(texture)); + } + downloadByteEncodedFloatMatrixFromOutputTexture(texture, rows, columns) { + return this.downloadMatrixDriver(texture, () => downloadByteEncodedFloatMatrixFromOutputTexture(this.gl, rows, columns, this.textureConfig)); + } + downloadPackedMatrixFromBuffer(buffer2, batch, rows, columns, physicalRows, physicalCols) { + return downloadPackedMatrixFromBuffer(this.gl, buffer2, batch, rows, columns, physicalRows, physicalCols, this.textureConfig); + } + downloadFloat32MatrixFromBuffer(buffer2, size) { + return downloadFloat32MatrixFromBuffer(this.gl, buffer2, size); + } + createBufferFromTexture(texture, rows, columns) { + this.bindTextureToFrameBuffer(texture); + const result = createBufferFromOutputTexture(this.gl, rows, columns, this.textureConfig); + this.unbindTextureToFrameBuffer(); + return result; + } + createAndWaitForFence() { + const fenceContext = this.createFence(this.gl); + return this.pollFence(fenceContext); + } + createFence(gl) { + let query; + let isFencePassed; + if (env().getBool("WEBGL_FENCE_API_ENABLED")) { + const gl2 = gl; + const sync = gl2.fenceSync(gl2.SYNC_GPU_COMMANDS_COMPLETE, 0); + gl.flush(); + isFencePassed = () => { + const status = gl2.clientWaitSync(sync, 0, 0); + return status === gl2.ALREADY_SIGNALED || status === gl2.CONDITION_SATISFIED; + }; + query = sync; + } else if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0) { + query = this.beginQuery(); + this.endQuery(); + isFencePassed = () => this.isQueryAvailable(query, env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")); + } else { + isFencePassed = () => true; + } + return { query, isFencePassed }; + } + downloadMatrixFromPackedTexture(texture, physicalRows, physicalCols) { + return this.downloadMatrixDriver(texture, () => downloadMatrixFromPackedOutputTexture(this.gl, physicalRows, physicalCols)); + } + createProgram(fragmentShader) { + this.throwIfDisposed(); + const gl = this.gl; + if (this.vertexShader == null) { + this.vertexShader = createVertexShader2(gl); + } + const program = createProgram(gl); + callAndCheck(gl, () => gl.attachShader(program, this.vertexShader)); + callAndCheck(gl, () => gl.attachShader(program, fragmentShader)); + linkProgram(gl, program); + if (this.debug) { + validateProgram(gl, program); + } + if (!this.vertexAttrsAreBound) { + this.setProgram(program); + this.vertexAttrsAreBound = bindVertexProgramAttributeStreams(gl, this.program, this.vertexBuffer); + } + return program; + } + deleteProgram(program) { + this.throwIfDisposed(); + if (program === this.program) { + this.program = null; + } + if (program != null) { + callAndCheck(this.gl, () => this.gl.deleteProgram(program)); + } + } + setProgram(program) { + this.throwIfDisposed(); + this.program = program; + if (this.program != null && this.debug) { + validateProgram(this.gl, this.program); + } + callAndCheck(this.gl, () => this.gl.useProgram(program)); + } + getUniformLocation(program, uniformName, shouldThrow = true) { + this.throwIfDisposed(); + if (shouldThrow) { + return getProgramUniformLocationOrThrow(this.gl, program, uniformName); + } else { + return getProgramUniformLocation(this.gl, program, uniformName); + } + } + getAttributeLocation(program, attribute) { + this.throwIfDisposed(); + return callAndCheck(this.gl, () => this.gl.getAttribLocation(program, attribute)); + } + getUniformLocationNoThrow(program, uniformName) { + this.throwIfDisposed(); + return this.gl.getUniformLocation(program, uniformName); + } + setInputMatrixTexture(inputMatrixTexture, uniformLocation, textureUnit) { + this.throwIfDisposed(); + this.throwIfNoProgram(); + bindTextureToProgramUniformSampler(this.gl, inputMatrixTexture, uniformLocation, textureUnit); + } + setOutputMatrixTexture(outputMatrixTexture, rows, columns) { + this.setOutputMatrixTextureDriver(outputMatrixTexture, columns, rows); + } + setOutputPackedMatrixTexture(outputPackedMatrixTexture, rows, columns) { + this.throwIfDisposed(); + const [width, height] = getPackedMatrixTextureShapeWidthHeight(rows, columns); + this.setOutputMatrixTextureDriver(outputPackedMatrixTexture, width, height); + } + setOutputMatrixWriteRegion(startRow, numRows, startColumn, numColumns) { + this.setOutputMatrixWriteRegionDriver(startColumn, startRow, numColumns, numRows); + } + setOutputPackedMatrixWriteRegion(startRow, numRows, startColumn, numColumns) { + throw new Error("setOutputPackedMatrixWriteRegion not implemented."); + } + debugValidate() { + if (this.program != null) { + validateProgram(this.gl, this.program); + } + validateFramebuffer(this.gl); + } + executeProgram() { + this.throwIfDisposed(); + this.throwIfNoProgram(); + const gl = this.gl; + if (this.debug) { + this.debugValidate(); + } + callAndCheck(gl, () => gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0)); + } + blockUntilAllProgramsCompleted() { + this.throwIfDisposed(); + callAndCheck(this.gl, () => this.gl.finish()); + } + getQueryTimerExtension() { + if (this.disjointQueryTimerExtension == null) { + this.disjointQueryTimerExtension = getExtensionOrThrow(this.gl, env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2 ? "EXT_disjoint_timer_query_webgl2" : "EXT_disjoint_timer_query"); + } + return this.disjointQueryTimerExtension; + } + getQueryTimerExtensionWebGL2() { + return this.getQueryTimerExtension(); + } + getQueryTimerExtensionWebGL1() { + return this.getQueryTimerExtension(); + } + beginQuery() { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2) { + const gl2 = this.gl; + const ext2 = this.getQueryTimerExtensionWebGL2(); + const query2 = gl2.createQuery(); + gl2.beginQuery(ext2.TIME_ELAPSED_EXT, query2); + return query2; + } + const ext = this.getQueryTimerExtensionWebGL1(); + const query = ext.createQueryEXT(); + ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query); + return query; + } + endQuery() { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2) { + const gl2 = this.gl; + const ext2 = this.getQueryTimerExtensionWebGL2(); + gl2.endQuery(ext2.TIME_ELAPSED_EXT); + return; + } + const ext = this.getQueryTimerExtensionWebGL1(); + ext.endQueryEXT(ext.TIME_ELAPSED_EXT); + } + async waitForQueryAndGetTime(query) { + await util_exports.repeatedTry(() => this.disposed || this.isQueryAvailable(query, env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))); + return this.getQueryTime(query, env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")); + } + getQueryTime(query, queryTimerVersion) { + if (queryTimerVersion === 0) { + return null; + } + if (queryTimerVersion === 2) { + const gl2 = this.gl; + const timeElapsedNanos = gl2.getQueryParameter(query, gl2.QUERY_RESULT); + return timeElapsedNanos / 1e6; + } else { + const ext = this.getQueryTimerExtensionWebGL1(); + const timeElapsedNanos = ext.getQueryObjectEXT(query, ext.QUERY_RESULT_EXT); + return timeElapsedNanos / 1e6; + } + } + isQueryAvailable(query, queryTimerVersion) { + if (queryTimerVersion === 0) { + return true; + } + if (queryTimerVersion === 2) { + const gl2 = this.gl; + const ext = this.getQueryTimerExtensionWebGL2(); + const available = gl2.getQueryParameter(query, gl2.QUERY_RESULT_AVAILABLE); + if (this.disjoint == null) { + this.disjoint = this.gl.getParameter(ext.GPU_DISJOINT_EXT); + } + return available && !this.disjoint; + } else { + const ext = this.getQueryTimerExtensionWebGL1(); + const available = ext.getQueryObjectEXT(query, ext.QUERY_RESULT_AVAILABLE_EXT); + if (this.disjoint == null) { + this.disjoint = this.gl.getParameter(ext.GPU_DISJOINT_EXT); + } + return available && !this.disjoint; + } + } + pollFence(fenceContext) { + return new Promise((resolve) => { + this.addItemToPoll(() => fenceContext.isFencePassed(), () => resolve()); + }); + } + pollItems() { + const index = linearSearchLastTrue(this.itemsToPoll.map((x) => x.isDoneFn)); + for (let i = 0; i <= index; ++i) { + const { resolveFn } = this.itemsToPoll[i]; + resolveFn(); + } + this.itemsToPoll = this.itemsToPoll.slice(index + 1); + } + addItemToPoll(isDoneFn, resolveFn) { + this.itemsToPoll.push({ isDoneFn, resolveFn }); + if (this.itemsToPoll.length > 1) { + return; + } + util_exports.repeatedTry(() => { + this.pollItems(); + return this.itemsToPoll.length === 0; + }); + } + bindTextureToFrameBuffer(texture) { + this.throwIfDisposed(); + bindColorTextureToFramebuffer(this.gl, texture, this.framebuffer); + if (this.debug) { + validateFramebuffer(this.gl); + } + } + unbindTextureToFrameBuffer() { + if (this.outputTexture != null) { + bindColorTextureToFramebuffer(this.gl, this.outputTexture, this.framebuffer); + if (this.debug) { + validateFramebuffer(this.gl); + } + } else { + unbindColorTextureFromFramebuffer(this.gl, this.framebuffer); + } + } + downloadMatrixDriver(texture, downloadAndDecode) { + this.bindTextureToFrameBuffer(texture); + const result = downloadAndDecode(); + this.unbindTextureToFrameBuffer(); + return result; + } + setOutputMatrixTextureDriver(outputMatrixTextureMaybePacked, width, height) { + this.throwIfDisposed(); + const gl = this.gl; + bindColorTextureToFramebuffer(gl, outputMatrixTextureMaybePacked, this.framebuffer); + if (this.debug) { + validateFramebuffer(gl); + } + this.outputTexture = outputMatrixTextureMaybePacked; + callAndCheck(gl, () => gl.viewport(0, 0, width, height)); + callAndCheck(gl, () => gl.scissor(0, 0, width, height)); + } + setOutputMatrixWriteRegionDriver(x, y, width, height) { + this.throwIfDisposed(); + callAndCheck(this.gl, () => this.gl.scissor(x, y, width, height)); + } + throwIfDisposed() { + if (this.disposed) { + throw new Error("Attempted to use disposed GPGPUContext."); + } + } + throwIfNoProgram() { + if (this.program == null) { + throw new Error("No GPU program is currently set."); + } + } + }; + function linearSearchLastTrue(arr) { + let i = 0; + for (; i < arr.length; ++i) { + const isDone = arr[i](); + if (!isDone) { + break; + } + } + return i - 1; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/shared.js + init_define_BUILD_VERSION(); + var { addImpl: addImplCPU, bincountImpl: bincountImplCPU, bincountReduceImpl: bincountReduceImplCPU, ceilImpl: ceilImplCPU, concatImpl: concatImplCPU, equalImpl: equalImplCPU, expImpl: expImplCPU, expm1Impl: expm1ImplCPU, floorImpl: floorImplCPU, gatherNdImpl: gatherNdImplCPU, gatherV2Impl: gatherV2ImplCPU, greaterImpl: greaterImplCPU, greaterEqualImpl: greaterEqualImplCPU, lessImpl: lessImplCPU, lessEqualImpl: lessEqualImplCPU, linSpaceImpl: linSpaceImplCPU, logImpl: logImplCPU, maxImpl: maxImplCPU, maximumImpl: maximumImplCPU, minimumImpl: minimumImplCPU, multiplyImpl: multiplyImplCPU, negImpl: negImplCPU, notEqualImpl: notEqualImplCPU, prodImpl: prodImplCPU, rangeImpl: rangeImplCPU, rsqrtImpl: rsqrtImplCPU, scatterImpl: scatterImplCPU, sigmoidImpl: sigmoidImplCPU, simpleAbsImpl: simpleAbsImplCPU, sliceImpl: sliceImplCPU, sparseFillEmptyRowsImpl: sparseFillEmptyRowsImplCPU, sparseReshapeImpl: sparseReshapeImplCPU, sparseSegmentReductionImpl: sparseSegmentReductionImplCPU, sqrtImpl: sqrtImplCPU, stridedSliceImpl: stridedSliceImplCPU, stringNGramsImpl: stringNGramsImplCPU, stringSplitImpl: stringSplitImplCPU, stringToHashBucketFastImpl: stringToHashBucketFastImplCPU, subImpl: subImplCPU, tileImpl: tileImplCPU, topKImpl: topKImplCPU, transposeImpl: transposeImplCPU, uniqueImpl: uniqueImplCPU } = shared_exports; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/pack_gpu.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/packing_util.js + init_define_BUILD_VERSION(); + function getVecChannels(name, rank) { + return ["x", "y", "z", "w", "u", "v"].slice(0, rank).map((d) => `${name}.${d}`); + } + function getChannels(name, rank) { + if (rank === 1) { + return [name]; + } + return getVecChannels(name, rank); + } + function getSourceCoords(rank, dims) { + if (rank === 1) { + return "rc"; + } + let coords2 = ""; + for (let i = 0; i < rank; i++) { + coords2 += dims[i]; + if (i < rank - 1) { + coords2 += ","; + } + } + return coords2; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/pack_gpu.js + var PackProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = false; + this.packedOutput = true; + this.outputShape = outputShape; + this.rank = outputShape.length; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + if (this.rank === 0) { + this.userCode = ` + void main() { + setOutput(vec4(getA(), 0., 0., 0.)); + } + `; + } else { + const channels = getChannels("rc", this.rank); + const dtype = getCoordsDataType(this.rank); + const outOfBoundsCondition = this.getOutOfBoundsCondition(channels); + const setup51 = this.getSetup(channels); + const output = this.getOutput(channels); + this.userCode = ` + void main() { + ${dtype} rc = getOutputCoords(); + + if(${outOfBoundsCondition}) { + setOutput(vec4(0)); + } else { + ${setup51} + + setOutput(vec4(${output})); + } + } + `; + } + } + getSourceCoordsArr(dims) { + const coords2 = []; + for (let row = 0; row <= 1; row++) { + for (let col = 0; col <= 1; col++) { + let coord = `${row === 0 ? "r" : "rp1"}, ${col === 0 ? "c" : "cp1"}`; + for (let d = 2; d < this.rank; d++) { + coord = `${dims[dims.length - 1 - d]},` + coord; + } + coords2.push(coord); + } + } + return coords2; + } + getOutOfBoundsCondition(dims) { + if (this.rank === 1) { + return `rc > ${this.enableShapeUniforms ? "outShape" : this.outputShape[0]}`; + } + let cond = ""; + for (let i = this.rank - 2; i < this.rank; i++) { + cond += `${dims[i]} >= ${this.enableShapeUniforms ? `outShape[${i}]` : this.outputShape[i]}`; + if (i < this.rank - 1) { + cond += "||"; + } + } + return cond; + } + getSetup(dims) { + if (this.rank === 1) { + return ""; + } + const innerDims = dims.slice(-2); + const col = this.enableShapeUniforms ? `outShape[${this.rank} - 1]` : this.outputShape[this.rank - 1]; + const row = this.enableShapeUniforms ? `outShape[${this.rank} - 2]` : this.outputShape[this.rank - 2]; + return ` + int r = ${innerDims[0]}; + int c = ${innerDims[1]}; + int rp1 = r + 1; + int cp1 = c + 1; + + bool cEdge = cp1 >= ${col}; + bool rEdge = rp1 >= ${row}; + `; + } + getOutput(dims) { + const sourceCoords = this.getSourceCoordsArr(dims); + if (this.rank === 1) { + const outShape = this.enableShapeUniforms ? "outShape" : this.outputShape[0]; + return `getA(rc), (rc + 1 >= ${outShape} ? 0. : getA(rc + 1)), 0, 0`; + } + return `getA(${sourceCoords[0]}), + cEdge ? 0. : getA(${sourceCoords[1]}), + rEdge ? 0. : getA(${sourceCoords[2]}), + rEdge || cEdge ? 0. : getA(${sourceCoords[3]})`; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/reshape_packed_gpu.js + init_define_BUILD_VERSION(); + var ReshapePackedProgram = class { + constructor(outputShape, inputShape) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.customUniforms = [{ name: "inputShape", type: "ivec3" }]; + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + let mainLoop = ``; + for (let i = 0; i < 4; i++) { + let thisRC = `thisRC = rc;`; + if (i % 2 === 1) { + thisRC += `thisRC.z += 1;`; + } + if (i > 1) { + thisRC += `thisRC.y += 1;`; + } + mainLoop += ` + ${thisRC} + ${i > 0 ? `if(thisRC.y < rows && thisRC.z < cols){` : ""} + int flatIndex = getFlatIndex(thisRC); + + ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex); + vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z)); + + result[${i}] = + getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); + ${i > 0 ? "}" : ""} + `; + } + this.userCode = ` + ${getReshapedInputCoords(inputShape, this.enableShapeUniforms)} + ${this.enableShapeUniforms ? getFlatIndexFrom3DOutput() : getFlatIndexFrom3D(outputShape)} + + void main() { + ivec3 rc = getOutputCoords(); + + vec4 result = vec4(0.); + + ivec3 thisRC; + int rows = ${this.enableShapeUniforms ? "outShape[1]" : outputShape[1]}; + int cols = ${this.enableShapeUniforms ? "outShape[2]" : outputShape[2]}; + + ${mainLoop} + + setOutput(result); + } + `; + } + }; + function getReshapedInputCoords(shape, enableShapeUniforms) { + const coordsFromIndexSnippet = enableShapeUniforms ? getLogicalCoordinatesFromFlatIndexByUniform(["r", "c", "d"], "inputShape") : getLogicalCoordinatesFromFlatIndex(["r", "c", "d"], shape); + return ` + ivec3 inputCoordsFromReshapedOutCoords(int index) { + ${coordsFromIndexSnippet} + return ivec3(r, c, d); + } + `; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/texture_manager.js + init_define_BUILD_VERSION(); + var TextureManager = class { + constructor(gpgpu) { + this.gpgpu = gpgpu; + this.numUsedTextures = 0; + this.numFreeTextures = 0; + this._numBytesAllocated = 0; + this._numBytesFree = 0; + this.freeTextures = {}; + this.logEnabled = false; + this.usedTextures = {}; + } + acquireTexture(shapeRC, usage, isPacked) { + const physicalTexType = getPhysicalFromLogicalTextureType(usage, isPacked); + const shapeKey = getKeyFromTextureShape(shapeRC, physicalTexType, isPacked); + if (!(shapeKey in this.freeTextures)) { + this.freeTextures[shapeKey] = []; + } + if (!(shapeKey in this.usedTextures)) { + this.usedTextures[shapeKey] = []; + } + const texBytes = computeBytes(shapeRC, physicalTexType, this.gpgpu.gl, this.gpgpu.textureConfig, isPacked); + if (this.freeTextures[shapeKey].length > 0) { + this.numFreeTextures--; + this.numUsedTextures++; + this._numBytesFree -= texBytes; + this.log(); + const newTexture2 = this.freeTextures[shapeKey].shift(); + this.usedTextures[shapeKey].push(newTexture2); + return newTexture2; + } + let newTexture; + if (physicalTexType === PhysicalTextureType.PACKED_2X2_FLOAT32) { + newTexture = this.gpgpu.createPackedMatrixTexture(shapeRC[0], shapeRC[1]); + } else if (physicalTexType === PhysicalTextureType.PACKED_2X2_FLOAT16) { + newTexture = this.gpgpu.createFloat16PackedMatrixTexture(shapeRC[0], shapeRC[1]); + } else if (physicalTexType === PhysicalTextureType.UNPACKED_FLOAT32) { + newTexture = this.gpgpu.createFloat32MatrixTexture(shapeRC[0], shapeRC[1]); + } else if (physicalTexType === PhysicalTextureType.UNPACKED_FLOAT16) { + newTexture = this.gpgpu.createFloat16MatrixTexture(shapeRC[0], shapeRC[1]); + } else if (physicalTexType === PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE) { + newTexture = this.gpgpu.createUnsignedBytesMatrixTexture(shapeRC[0], shapeRC[1]); + } + this.usedTextures[shapeKey].push(newTexture); + this.numUsedTextures++; + this._numBytesAllocated += texBytes; + this.log(); + return newTexture; + } + releaseTexture(texture, shape, logicalTexType, isPacked) { + if (this.freeTextures == null) { + return; + } + const physicalTexType = getPhysicalFromLogicalTextureType(logicalTexType, isPacked); + const shapeKey = getKeyFromTextureShape(shape, physicalTexType, isPacked); + if (!(shapeKey in this.freeTextures)) { + this.freeTextures[shapeKey] = []; + } + const texBytes = computeBytes(shape, physicalTexType, this.gpgpu.gl, this.gpgpu.textureConfig, isPacked); + const deleteTexThreshold = env().get("WEBGL_DELETE_TEXTURE_THRESHOLD"); + if (deleteTexThreshold !== -1 && this._numBytesAllocated > deleteTexThreshold) { + this.gpgpu.deleteMatrixTexture(texture.texture); + this._numBytesAllocated -= texBytes; + } else { + this.freeTextures[shapeKey].push(texture); + this.numFreeTextures++; + this._numBytesFree += texBytes; + } + this.numUsedTextures--; + const texList = this.usedTextures[shapeKey]; + const texIndex = texList.indexOf(texture); + if (texIndex < 0) { + throw new Error("Cannot release a texture that was never provided by this texture manager"); + } + texList.splice(texIndex, 1); + this.log(); + } + log() { + if (!this.logEnabled) { + return; + } + const total = this.numFreeTextures + this.numUsedTextures; + console.log("Free/Used", `${this.numFreeTextures} / ${this.numUsedTextures}`, `(${total})`); + const freeRatio = this._numBytesFree / this._numBytesAllocated; + console.log(`Bytes allocated: ${this._numBytesAllocated}`); + console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100 * freeRatio)}%)`); + } + get numBytesAllocated() { + return this._numBytesAllocated; + } + get numBytesFree() { + return this._numBytesFree; + } + getNumUsedTextures() { + return this.numUsedTextures; + } + getNumFreeTextures() { + return this.numFreeTextures; + } + dispose() { + if (this.freeTextures == null) { + return; + } + for (const texShape in this.freeTextures) { + this.freeTextures[texShape].forEach((tex) => { + this.gpgpu.deleteMatrixTexture(tex.texture); + }); + } + for (const texShape in this.usedTextures) { + this.usedTextures[texShape].forEach((tex) => { + this.gpgpu.deleteMatrixTexture(tex.texture); + }); + } + this.freeTextures = null; + this.usedTextures = null; + this.numUsedTextures = 0; + this.numFreeTextures = 0; + this._numBytesAllocated = 0; + this._numBytesFree = 0; + } + }; + function numBytesForInternalFormat(gl, internalFormat) { + const glany = gl; + if (internalFormat === glany.R32F) { + return 4; + } else if (internalFormat === glany.R16F) { + return 2; + } else if (internalFormat === glany.RGBA32F) { + return 16; + } else if (internalFormat === gl.RGBA) { + return 16; + } else if (internalFormat === glany.RGBA16F) { + return 8; + } else if (internalFormat === glany.RGBA8) { + return 4; + } + throw new Error(`Unknown internal format ${internalFormat}`); + } + function computeBytes(shape, physicalTexType, gl, textureConfig, isPacked) { + const internalFormat = internalFormatForPhysicalTexType(physicalTexType, textureConfig); + let numElements; + if (isPacked) { + const [packedWidth, packedHeight] = getPackedMatrixTextureShapeWidthHeight(shape[0], shape[1]); + numElements = packedWidth * packedHeight; + } else { + const [width, height] = getUnpackedMatrixTextureShapeWidthHeight(shape[0], shape[1]); + numElements = width * height; + } + const bytesPerElement2 = numBytesForInternalFormat(gl, internalFormat); + return numElements * bytesPerElement2; + } + function internalFormatForPhysicalTexType(physicalTexType, textureConfig) { + switch (physicalTexType) { + case PhysicalTextureType.PACKED_2X2_FLOAT32: + return getInternalFormatForPackedMatrixTexture(textureConfig); + case PhysicalTextureType.PACKED_2X2_FLOAT16: + return getInternalFormatForFloat16PackedMatrixTexture(textureConfig); + case PhysicalTextureType.UNPACKED_FLOAT32: + return getInternalFormatForFloat32MatrixTexture(textureConfig); + case PhysicalTextureType.UNPACKED_FLOAT16: + return getInternalFormatForFloat16MatrixTexture(textureConfig); + case PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE: + return getInternalFormatForUnsignedBytesMatrixTexture(textureConfig); + default: + throw new Error(`Unknown physical texture type ${physicalTexType}`); + } + } + function getPhysicalTextureForRendering(isPacked) { + if (env().getBool("WEBGL_RENDER_FLOAT32_ENABLED")) { + if (isPacked) { + return PhysicalTextureType.PACKED_2X2_FLOAT32; + } + return PhysicalTextureType.UNPACKED_FLOAT32; + } + if (isPacked) { + return PhysicalTextureType.PACKED_2X2_FLOAT16; + } + return PhysicalTextureType.UNPACKED_FLOAT16; + } + function getPhysicalFromLogicalTextureType(logicalTexType, isPacked) { + if (logicalTexType === TextureUsage.UPLOAD) { + return PhysicalTextureType.PACKED_2X2_FLOAT32; + } else if (logicalTexType === TextureUsage.RENDER || logicalTexType == null) { + return getPhysicalTextureForRendering(isPacked); + } else if (logicalTexType === TextureUsage.DOWNLOAD || logicalTexType === TextureUsage.PIXELS) { + return PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE; + } + throw new Error(`Unknown logical texture type ${logicalTexType}`); + } + function getKeyFromTextureShape(shapeRowsCol, physicalTexType, isPacked) { + return `${shapeRowsCol[0]}_${shapeRowsCol[1]}_${physicalTexType}_${isPacked}`; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_gpu.js + init_define_BUILD_VERSION(); + var UnaryOpProgram = class { + constructor(aShape, opSnippet) { + this.variableNames = ["A"]; + this.outputShape = aShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + this.userCode = ` + float unaryOperation(float x) { + ${opSnippet} + } + + void main() { + float x = getAAtOutCoords(); + float y = unaryOperation(x); + + setOutput(y); + } + `; + } + }; + var CHECK_NAN_SNIPPET = `if (isnan(x)) return x;`; + var LINEAR = `return x;`; + var ABS = `return abs(x);`; + var ELU2 = `return (x >= 0.0) ? x : (exp(x) - 1.0);`; + var RELU = CHECK_NAN_SNIPPET + ` + return (x < 0.0) ? 0.0 : x; +`; + var RELU6 = CHECK_NAN_SNIPPET + ` + return (x < 0.0) ? 0.0 : min(6.0, x); +`; + var CLONE = "return x;"; + var SIGMOID = `return 1.0 / (1.0 + exp(-1.0 * x));`; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_packed_gpu.js + init_define_BUILD_VERSION(); + var LINEAR2 = `return x;`; + var ELU3 = ` + vec4 result; + + result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); + result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0); + result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0); + result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); + + return result; +`; + var RELU2 = ` + vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var RELU62 = ` + vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var SIGMOID2 = `return 1.0 / (1.0 + exp(-1.0 * x));`; + var UnaryOpPackedProgram = class { + constructor(aShape, opSnippet) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = aShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + this.userCode = ` + vec4 unaryOperation(vec4 x) { + ${opSnippet} + } + + void main() { + vec4 x = getAAtOutCoords(); + vec4 y = unaryOperation(x); + + setOutput(y); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/unpack_gpu.js + init_define_BUILD_VERSION(); + var UnpackProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = false; + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + const rank = outputShape.length; + const channels = getChannels("rc", rank); + const dtype = getCoordsDataType(rank); + const sourceCoords = getSourceCoords(rank, channels); + const innerDims = channels.slice(-2); + const coords2 = rank <= 1 ? "rc" : `vec2(${innerDims.join(",")})`; + this.userCode = ` + void main() { + ${dtype} rc = getOutputCoords(); + vec4 packedInput = getA(${sourceCoords}); + + setOutput(getChannel(packedInput, ${coords2})); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/backend_webgl.js + var whereImpl3 = kernel_impls_exports.whereImpl; + var EPSILON_FLOAT322 = 1e-7; + var EPSILON_FLOAT162 = 1e-4; + var binaryCaches = {}; + function getBinaryCache(webGLVersion) { + if (webGLVersion in binaryCaches) { + return binaryCaches[webGLVersion]; + } + binaryCaches[webGLVersion] = {}; + return binaryCaches[webGLVersion]; + } + var CPU_HANDOFF_SIZE_THRESHOLD = env().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"); + var BEFORE_PAGING_CONSTANT = 600; + function numMBBeforeWarning() { + if (env().global.screen == null) { + return 1024; + } + return env().global.screen.height * env().global.screen.width * window.devicePixelRatio * BEFORE_PAGING_CONSTANT / 1024 / 1024; + } + var MathBackendWebGL = class extends KernelBackend { + constructor(gpuResource) { + super(); + this.pendingRead = /* @__PURE__ */ new WeakMap(); + this.pendingDisposal = /* @__PURE__ */ new WeakSet(); + this.dataRefCount = /* @__PURE__ */ new WeakMap(); + this.numBytesInGPU = 0; + this.uploadWaitMs = 0; + this.downloadWaitMs = 0; + this.lastGlFlushTime = 0; + this.warnedAboutMemory = false; + this.pendingDeletes = 0; + this.disposed = false; + if (!env().getBool("HAS_WEBGL")) { + throw new Error("WebGL is not supported on this device"); + } + let newGPGPU; + if (gpuResource != null) { + if (gpuResource instanceof GPGPUContext) { + newGPGPU = gpuResource; + } else { + const gl = getWebGLContext(env().getNumber("WEBGL_VERSION"), gpuResource); + newGPGPU = new GPGPUContext(gl); + } + this.binaryCache = {}; + this.gpgpuCreatedLocally = false; + } else { + const gl = getWebGLContext(env().getNumber("WEBGL_VERSION")); + newGPGPU = new GPGPUContext(gl); + this.binaryCache = getBinaryCache(env().getNumber("WEBGL_VERSION")); + this.gpgpuCreatedLocally = true; + } + this.gpgpu = newGPGPU; + this.canvas = this.gpgpu.gl.canvas; + this.textureManager = new TextureManager(this.gpgpu); + this.numMBBeforeWarning = numMBBeforeWarning(); + this.texData = new DataStorage(this, engine()); + } + nextDataId() { + return MathBackendWebGL.nextDataId++; + } + numDataIds() { + return this.texData.numDataIds() - this.pendingDeletes; + } + write(values, shape, dtype) { + if (env().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS") || env().getBool("DEBUG")) { + this.checkNumericalProblems(values); + } + if (dtype === "complex64" && values != null) { + throw new Error(`Cannot write to a complex64 dtype. Please use tf.complex(real, imag).`); + } + const dataId = { id: this.nextDataId() }; + this.texData.set(dataId, { shape, dtype, values, usage: TextureUsage.UPLOAD, refCount: 1 }); + return dataId; + } + refCount(dataId) { + if (this.texData.has(dataId)) { + const tensorData = this.texData.get(dataId); + return tensorData.refCount; + } + return 0; + } + incRef(dataId) { + const texData = this.texData.get(dataId); + texData.refCount++; + } + decRef(dataId) { + if (this.texData.has(dataId)) { + const texData = this.texData.get(dataId); + texData.refCount--; + } + } + move(dataId, values, shape, dtype, refCount) { + if (env().getBool("DEBUG")) { + this.checkNumericalProblems(values); + } + if (dtype === "complex64") { + throw new Error(`Cannot write to a complex64 dtype. Please use tf.complex(real, imag).`); + } + this.texData.set(dataId, { shape, dtype, values, usage: TextureUsage.UPLOAD, refCount }); + } + disposeIntermediateTensorInfo(tensorInfo) { + this.disposeData(tensorInfo.dataId); + } + readSync(dataId) { + const texData = this.texData.get(dataId); + const { values, dtype, complexTensorInfos, slice: slice5, shape, isPacked } = texData; + if (slice5 != null) { + let program; + if (isPacked) { + program = new UnaryOpPackedProgram(shape, CLONE); + } else { + program = new UnaryOpProgram(shape, CLONE); + } + const res = this.runWebGLProgram(program, [{ dataId, shape, dtype }], dtype); + const data = this.readSync(res.dataId); + this.disposeIntermediateTensorInfo(res); + return data; + } + if (values != null) { + return this.convertAndCacheOnCPU(dataId); + } + if (dtype === "string") { + return values; + } + const shouldTimeProgram = this.activeTimers != null; + let start; + if (shouldTimeProgram) { + start = util_exports.now(); + } + let result; + if (dtype === "complex64") { + const realValues = this.readSync(complexTensorInfos.real.dataId); + const imagValues = this.readSync(complexTensorInfos.imag.dataId); + result = backend_util_exports.mergeRealAndImagArrays(realValues, imagValues); + } else { + result = this.getValuesFromTexture(dataId); + } + if (shouldTimeProgram) { + this.downloadWaitMs += util_exports.now() - start; + } + return this.convertAndCacheOnCPU(dataId, result); + } + async read(dataId) { + if (this.pendingRead.has(dataId)) { + const subscribers2 = this.pendingRead.get(dataId); + return new Promise((resolve) => subscribers2.push(resolve)); + } + const texData = this.texData.get(dataId); + const { values, shape, slice: slice5, dtype, complexTensorInfos, isPacked } = texData; + if (slice5 != null) { + let program; + if (isPacked) { + program = new UnaryOpPackedProgram(shape, CLONE); + } else { + program = new UnaryOpProgram(shape, CLONE); + } + const res = this.runWebGLProgram(program, [{ dataId, shape, dtype }], dtype); + const data = this.read(res.dataId); + this.disposeIntermediateTensorInfo(res); + return data; + } + if (values != null) { + return this.convertAndCacheOnCPU(dataId); + } + if (env().getBool("DEBUG")) { + if (!env().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED") && env().getNumber("WEBGL_VERSION") === 2) { + throw new Error(`tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.`); + } + } + let buffer2 = null; + let tmpDownloadTarget; + if (dtype !== "complex64" && env().get("WEBGL_BUFFER_SUPPORTED")) { + tmpDownloadTarget = this.decode(dataId); + const tmpData = this.texData.get(tmpDownloadTarget.dataId); + buffer2 = this.gpgpu.createBufferFromTexture(tmpData.texture.texture, ...getDenseTexShape(shape)); + } + this.pendingRead.set(dataId, []); + if (dtype !== "complex64") { + await this.gpgpu.createAndWaitForFence(); + } + let vals; + if (dtype === "complex64") { + const ps = await Promise.all([ + this.read(complexTensorInfos.real.dataId), + this.read(complexTensorInfos.imag.dataId) + ]); + const realValues = ps[0]; + const imagValues = ps[1]; + vals = backend_util_exports.mergeRealAndImagArrays(realValues, imagValues); + } else if (buffer2 == null) { + vals = this.getValuesFromTexture(dataId); + } else { + const size = util_exports.sizeFromShape(shape); + vals = this.gpgpu.downloadFloat32MatrixFromBuffer(buffer2, size); + } + if (tmpDownloadTarget != null) { + this.disposeIntermediateTensorInfo(tmpDownloadTarget); + } + if (buffer2 != null) { + const gl = this.gpgpu.gl; + callAndCheck(gl, () => gl.deleteBuffer(buffer2)); + } + const dTypeVals = this.convertAndCacheOnCPU(dataId, vals); + const subscribers = this.pendingRead.get(dataId); + this.pendingRead.delete(dataId); + subscribers.forEach((resolve) => resolve(dTypeVals)); + if (this.pendingDisposal.has(dataId)) { + this.pendingDisposal.delete(dataId); + if (this.disposeData(dataId)) { + engine().removeDataId(dataId, this); + } + this.pendingDeletes--; + } + return dTypeVals; + } + readToGPU(dataId, options = {}) { + const texData = this.texData.get(dataId); + const { values, shape, slice: slice5, dtype, isPacked, texture } = texData; + if (dtype === "complex64") { + throw new Error("Does not support reading texture for complex64 dtype."); + } + if (slice5 != null) { + let program; + if (isPacked) { + program = new UnaryOpPackedProgram(shape, CLONE); + } else { + program = new UnaryOpProgram(shape, CLONE); + } + const res = this.runWebGLProgram(program, [{ dataId, shape, dtype }], dtype); + const gpuResouorce = this.readToGPU(res, options); + this.disposeIntermediateTensorInfo(res); + return gpuResouorce; + } + if (texture == null) { + if (values != null) { + throw new Error("Data is not on GPU but on CPU."); + } else { + throw new Error("There is no data on GPU or CPU."); + } + } + const tmpTarget = this.decode(dataId, options.customTexShape); + const tensorRef = engine().makeTensorFromTensorInfo(tmpTarget); + const tmpData = this.texData.get(tmpTarget.dataId); + return Object.assign({ tensorRef }, tmpData.texture); + } + bufferSync(t) { + const data = this.readSync(t.dataId); + if (t.dtype === "string") { + try { + const strings = data.map((d) => util_exports.decodeString(d)); + return buffer(t.shape, t.dtype, strings); + } catch (_a) { + throw new Error("Failed to decode encoded string bytes into utf-8"); + } + } + return buffer(t.shape, t.dtype, data); + } + checkNumericalProblems(values) { + if (values == null) { + return; + } + for (let i = 0; i < values.length; i++) { + const num = values[i]; + if (!canBeRepresented(num)) { + if (env().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")) { + throw Error(`The value ${num} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`); + } + throw Error(`The value ${num} cannot be represented on this device.`); + } + } + } + getValuesFromTexture(dataId) { + const { shape, dtype, isPacked } = this.texData.get(dataId); + const size = util_exports.sizeFromShape(shape); + if (env().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")) { + const tmpTarget = this.decode(dataId); + const tmpData2 = this.texData.get(tmpTarget.dataId); + const vals2 = this.gpgpu.downloadMatrixFromPackedTexture(tmpData2.texture.texture, ...getDenseTexShape(shape)).subarray(0, size); + this.disposeIntermediateTensorInfo(tmpTarget); + return vals2; + } + const shouldUsePackedProgram = env().getBool("WEBGL_PACK") && isPacked === true; + const outputShape = shouldUsePackedProgram ? getShapeAs3D(shape) : shape; + const program = shouldUsePackedProgram ? new EncodeFloatPackedProgram(outputShape) : new EncodeFloatProgram(outputShape); + const output = this.runWebGLProgram(program, [{ shape: outputShape, dtype, dataId }], "float32"); + const tmpData = this.texData.get(output.dataId); + const vals = this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(tmpData.texture.texture, tmpData.texShape[0], tmpData.texShape[1]).subarray(0, size); + this.disposeIntermediateTensorInfo(output); + return vals; + } + timerAvailable() { + return env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0; + } + time(f) { + const oldActiveTimers = this.activeTimers; + const newActiveTimers = []; + let outerMostTime = false; + if (this.programTimersStack == null) { + this.programTimersStack = newActiveTimers; + outerMostTime = true; + } else { + this.activeTimers.push(newActiveTimers); + } + this.activeTimers = newActiveTimers; + f(); + const flattenedActiveTimerQueries = util_exports.flatten(this.activeTimers.map((d) => d.query)).filter((d) => d != null); + const flattenedActiveTimerNames = util_exports.flatten(this.activeTimers.map((d) => d.name)).filter((d) => d != null); + this.activeTimers = oldActiveTimers; + if (outerMostTime) { + this.programTimersStack = null; + } + const res = { + uploadWaitMs: this.uploadWaitMs, + downloadWaitMs: this.downloadWaitMs, + kernelMs: null, + wallMs: null + }; + return (async () => { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) { + const kernelMs = await Promise.all(flattenedActiveTimerQueries); + res["kernelMs"] = util_exports.sum(kernelMs); + res["getExtraProfileInfo"] = () => kernelMs.map((d, i) => ({ name: flattenedActiveTimerNames[i], ms: d })).map((d) => `${d.name}: ${d.ms}`).join(", "); + } else { + res["kernelMs"] = { + error: "WebGL query timers are not supported in this environment." + }; + } + this.uploadWaitMs = 0; + this.downloadWaitMs = 0; + return res; + })(); + } + memory() { + return { + unreliable: false, + numBytesInGPU: this.numBytesInGPU, + numBytesInGPUAllocated: this.textureManager.numBytesAllocated, + numBytesInGPUFree: this.textureManager.numBytesFree + }; + } + startTimer() { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) { + return this.gpgpu.beginQuery(); + } + return { startMs: util_exports.now(), endMs: null }; + } + endTimer(query) { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) { + this.gpgpu.endQuery(); + return query; + } + query.endMs = util_exports.now(); + return query; + } + async getQueryTime(query) { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) { + return this.gpgpu.waitForQueryAndGetTime(query); + } + const timerQuery = query; + return timerQuery.endMs - timerQuery.startMs; + } + disposeData(dataId, force = false) { + if (this.pendingDisposal.has(dataId)) { + return false; + } + if (!this.texData.has(dataId)) { + return true; + } + if (force) { + this.texData.get(dataId).refCount = 0; + } else { + this.texData.get(dataId).refCount--; + } + if (!force && this.texData.get(dataId).refCount > 0) { + return false; + } + if (this.pendingRead.has(dataId)) { + this.pendingDisposal.add(dataId); + this.pendingDeletes++; + return false; + } + this.releaseGPUData(dataId); + const { complexTensorInfos } = this.texData.get(dataId); + if (complexTensorInfos != null) { + this.disposeData(complexTensorInfos.real.dataId, force); + this.disposeData(complexTensorInfos.imag.dataId, force); + } + this.texData.delete(dataId); + return true; + } + releaseGPUData(dataId) { + const { texture, dtype, texShape, usage, isPacked, slice: slice5 } = this.texData.get(dataId); + const key = slice5 && slice5.origDataId || dataId; + const refCount = this.dataRefCount.get(key); + if (refCount > 1) { + this.dataRefCount.set(key, refCount - 1); + } else { + this.dataRefCount.delete(key); + if (texture != null) { + this.numBytesInGPU -= this.computeBytes(texShape, dtype); + this.textureManager.releaseTexture(texture, texShape, usage, isPacked); + } + } + const texData = this.texData.get(dataId); + texData.texture = null; + texData.texShape = null; + texData.isPacked = false; + texData.slice = null; + } + getTexture(dataId) { + this.uploadToGPU(dataId); + return this.texData.get(dataId).texture.texture; + } + getDataInfo(dataId) { + return this.texData.get(dataId); + } + shouldExecuteOnCPU(inputs, sizeThreshold = CPU_HANDOFF_SIZE_THRESHOLD) { + return env().getBool("WEBGL_CPU_FORWARD") && inputs.every((input2) => this.texData.get(input2.dataId).texture == null && util_exports.sizeFromShape(input2.shape) < sizeThreshold); + } + getGPGPUContext() { + return this.gpgpu; + } + where(condition) { + backend_util_exports.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead"); + const condVals = condition.dataSync(); + return whereImpl3(condition.shape, condVals); + } + packedUnaryOp(x, op2, dtype) { + const program = new UnaryOpPackedProgram(x.shape, op2); + const outInfo = this.compileAndRun(program, [x], dtype); + return engine().makeTensorFromTensorInfo(outInfo); + } + abs(x) { + if (this.shouldExecuteOnCPU([x]) && x.dtype !== "complex64") { + const outValues = simpleAbsImplCPU(this.texData.get(x.dataId).values); + return this.makeOutput(x.shape, x.dtype, outValues); + } + if (env().getBool("WEBGL_PACK_UNARY_OPERATIONS")) { + return this.packedUnaryOp(x, ABS, x.dtype); + } + const program = new UnaryOpProgram(x.shape, ABS); + const outInfo = this.compileAndRun(program, [x]); + return engine().makeTensorFromTensorInfo(outInfo); + } + makeTensorInfo(shape, dtype, values) { + let dataId; + if (dtype === "string" && values != null && values.length > 0 && util_exports.isString(values[0])) { + const encodedValues = values.map((d) => util_exports.encodeString(d)); + dataId = this.write(encodedValues, shape, dtype); + } else { + dataId = this.write(values, shape, dtype); + } + this.texData.get(dataId).usage = null; + return { dataId, shape, dtype }; + } + makeOutput(shape, dtype, values) { + return engine().makeTensorFromTensorInfo(this.makeTensorInfo(shape, dtype, values), this); + } + unpackTensor(input2) { + const program = new UnpackProgram(input2.shape); + return this.runWebGLProgram(program, [input2], input2.dtype); + } + packTensor(input2) { + const program = new PackProgram(input2.shape); + const preventEagerUnpackingOutput = true; + return this.runWebGLProgram(program, [input2], input2.dtype, null, preventEagerUnpackingOutput); + } + packedReshape(input2, afterShape) { + const input3DShape = [ + getBatchDim(input2.shape), + ...getRowsCols(input2.shape) + ]; + const input3D = { + dtype: input2.dtype, + shape: input3DShape, + dataId: input2.dataId + }; + const afterShapeAs3D = [ + getBatchDim(afterShape), + ...getRowsCols(afterShape) + ]; + const program = new ReshapePackedProgram(afterShapeAs3D, input3DShape); + const preventEagerUnpackingOfOutput = true; + const customValues = [input3DShape]; + const output = this.runWebGLProgram(program, [input3D], input2.dtype, customValues, preventEagerUnpackingOfOutput); + return { dataId: output.dataId, shape: afterShape, dtype: output.dtype }; + } + decode(dataId, customTexShape) { + const texData = this.texData.get(dataId); + const { isPacked, shape, dtype } = texData; + if (customTexShape != null) { + const size = util_exports.sizeFromShape(shape); + const texSize = customTexShape[0] * customTexShape[1] * 4; + util_exports.assert(size <= texSize, () => "customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data."); + } + const shapeAs3D = getShapeAs3D(shape); + let program; + if (isPacked) { + program = new DecodeMatrixPackedProgram(shapeAs3D); + } else { + program = new DecodeMatrixProgram(shapeAs3D); + } + const preventEagerUnpackingOfOutput = true; + const customValues = [customTexShape != null ? customTexShape : getDenseTexShape(shapeAs3D)]; + const out = this.runWebGLProgram(program, [{ shape: shapeAs3D, dtype, dataId }], dtype, customValues, preventEagerUnpackingOfOutput, customTexShape); + return { dtype, shape, dataId: out.dataId }; + } + runWebGLProgram(program, inputs, outputDtype, customUniformValues, preventEagerUnpackingOfOutput = false, customTexShape) { + const output = this.makeTensorInfo(program.outputShape, outputDtype); + const outData = this.texData.get(output.dataId); + if (program.packedOutput) { + outData.isPacked = true; + } + if (program.outPackingScheme === PackingScheme.DENSE) { + const texelShape = customTexShape != null ? customTexShape : getDenseTexShape(program.outputShape); + outData.texShape = texelShape.map((d) => d * 2); + } + if (program.outTexUsage != null) { + outData.usage = program.outTexUsage; + } + if (util_exports.sizeFromShape(output.shape) === 0) { + outData.values = util_exports.getTypedArrayFromDType(output.dtype, 0); + return output; + } + const dataToDispose = []; + const inputsData = inputs.map((input2) => { + if (input2.dtype === "complex64") { + throw new Error(`GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.`); + } + let texData = this.texData.get(input2.dataId); + if (texData.texture == null) { + if (!program.packedInputs && util_exports.sizeFromShape(input2.shape) <= env().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM")) { + return { + shape: input2.shape, + texData: null, + isUniform: true, + uniformValues: texData.values + }; + } + if (program.packedInputs) { + texData.isPacked = true; + texData.shape = input2.shape; + } + } + this.uploadToGPU(input2.dataId); + if (!!texData.isPacked !== !!program.packedInputs) { + input2 = texData.isPacked ? this.unpackTensor(input2) : this.packTensor(input2); + dataToDispose.push(input2); + texData = this.texData.get(input2.dataId); + } else if (texData.isPacked && !isReshapeFree(texData.shape, input2.shape)) { + const savedInput = input2; + const targetShape = input2.shape; + input2.shape = texData.shape; + input2 = this.packedReshape(input2, targetShape); + dataToDispose.push(input2); + texData = this.texData.get(input2.dataId); + savedInput.shape = targetShape; + } + return { shape: input2.shape, texData, isUniform: false }; + }); + this.uploadToGPU(output.dataId); + const outputData = { shape: output.shape, texData: outData, isUniform: false }; + const key = makeShaderKey(program, inputsData, outputData); + const binary = this.getAndSaveBinary(key, () => { + return compileProgram(this.gpgpu, program, inputsData, outputData); + }); + const shouldTimeProgram = this.activeTimers != null; + let query; + if (shouldTimeProgram) { + query = this.startTimer(); + } + if (!env().get("ENGINE_COMPILE_ONLY")) { + runProgram(this.gpgpu, binary, inputsData, outputData, customUniformValues); + } + dataToDispose.forEach((info) => this.disposeIntermediateTensorInfo(info)); + if (shouldTimeProgram) { + query = this.endTimer(query); + this.activeTimers.push({ name: program.constructor.name, query: this.getQueryTime(query) }); + } + const glFlushThreshold = env().get("WEBGL_FLUSH_THRESHOLD"); + if (glFlushThreshold > 0) { + const time = util_exports.now(); + if (time - this.lastGlFlushTime > glFlushThreshold) { + this.gpgpu.gl.flush(); + this.lastGlFlushTime = time; + } + } + if (!env().getBool("WEBGL_LAZILY_UNPACK") && outData.isPacked && preventEagerUnpackingOfOutput === false) { + const unpacked = this.unpackTensor(output); + this.disposeIntermediateTensorInfo(output); + return unpacked; + } + return output; + } + compileAndRun(program, inputs, outputDtype, customUniformValues, preventEagerUnpackingOfOutput = false) { + outputDtype = outputDtype || inputs[0].dtype; + const outInfo = this.runWebGLProgram(program, inputs, outputDtype, customUniformValues, preventEagerUnpackingOfOutput); + return outInfo; + } + getAndSaveBinary(key, getBinary) { + if (!(key in this.binaryCache)) { + this.binaryCache[key] = getBinary(); + } + return this.binaryCache[key]; + } + getTextureManager() { + return this.textureManager; + } + dispose() { + if (this.disposed) { + return; + } + if (!env().getBool("IS_TEST")) { + const allKeys = Object.keys(this.binaryCache); + allKeys.forEach((key) => { + this.gpgpu.deleteProgram(this.binaryCache[key].webGLProgram); + delete this.binaryCache[key]; + }); + } + this.textureManager.dispose(); + if (this.canvas != null && (typeof HTMLCanvasElement !== "undefined" && this.canvas instanceof HTMLCanvasElement)) { + this.canvas.remove(); + } else { + this.canvas = null; + } + if (this.gpgpuCreatedLocally) { + this.gpgpu.program = null; + this.gpgpu.dispose(); + } + this.disposed = true; + } + floatPrecision() { + if (this.floatPrecisionValue == null) { + this.floatPrecisionValue = tidy(() => { + if (!env().get("WEBGL_RENDER_FLOAT32_ENABLED")) { + const debugFlag = env().getBool("DEBUG"); + env().set("DEBUG", false); + const underflowCheckValue = this.abs(scalar(1e-8)).dataSync()[0]; + env().set("DEBUG", debugFlag); + if (underflowCheckValue > 0) { + return 32; + } + } + return 16; + }); + } + return this.floatPrecisionValue; + } + epsilon() { + return this.floatPrecision() === 32 ? EPSILON_FLOAT322 : EPSILON_FLOAT162; + } + uploadToGPU(dataId) { + const texData = this.texData.get(dataId); + const { shape, dtype, values, texture, usage, isPacked } = texData; + if (texture != null) { + return; + } + const shouldTimeProgram = this.activeTimers != null; + let start; + if (shouldTimeProgram) { + start = util_exports.now(); + } + let texShape = texData.texShape; + if (texShape == null) { + texShape = getTextureShapeFromLogicalShape(shape, isPacked); + texData.texShape = texShape; + } + if (values != null) { + const shapeAs3D = getShapeAs3D(shape); + let program; + let width = texShape[1], height = texShape[0]; + const isByteArray = values instanceof Uint8Array || values instanceof Uint8ClampedArray; + if (isPacked || !isByteArray) { + [width, height] = getPackedMatrixTextureShapeWidthHeight(texShape[0], texShape[1]); + } + if (isPacked) { + program = new EncodeMatrixPackedProgram(shapeAs3D, isByteArray); + } else { + program = new EncodeMatrixProgram(shapeAs3D, isByteArray); + } + const tempDenseInputTexShape = isByteArray ? [height, width] : texShape; + const tempDenseInputHandle = this.makeTensorInfo(tempDenseInputTexShape, dtype); + const tempDenseInputTexData = this.texData.get(tempDenseInputHandle.dataId); + if (isByteArray) { + tempDenseInputTexData.usage = TextureUsage.PIXELS; + } else { + tempDenseInputTexData.usage = TextureUsage.UPLOAD; + } + tempDenseInputTexData.texShape = tempDenseInputTexShape; + this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(tempDenseInputHandle.dataId), width, height, values); + const customValues = [[height, width]]; + const preventEagerUnpacking = true; + const encodedOutputTarget = this.runWebGLProgram(program, [tempDenseInputHandle], dtype, customValues, preventEagerUnpacking); + const outputTexData = this.texData.get(encodedOutputTarget.dataId); + texData.texShape = outputTexData.texShape; + texData.isPacked = outputTexData.isPacked; + texData.usage = outputTexData.usage; + if (!env().get("ENGINE_COMPILE_ONLY")) { + texData.texture = outputTexData.texture; + texData.values = null; + this.texData.delete(encodedOutputTarget.dataId); + } else { + this.disposeData(encodedOutputTarget.dataId); + } + this.disposeIntermediateTensorInfo(tempDenseInputHandle); + if (shouldTimeProgram) { + this.uploadWaitMs += util_exports.now() - start; + } + } else { + const newTexture = this.acquireTexture(texShape, usage, dtype, isPacked); + texData.texture = newTexture; + } + } + convertAndCacheOnCPU(dataId, float32Values) { + const texData = this.texData.get(dataId); + const { dtype } = texData; + this.releaseGPUData(dataId); + if (float32Values != null) { + texData.values = float32ToTypedArray(float32Values, dtype); + } + return texData.values; + } + acquireTexture(texShape, texType, dtype, isPacked) { + this.numBytesInGPU += this.computeBytes(texShape, dtype); + if (!this.warnedAboutMemory && this.numBytesInGPU > this.numMBBeforeWarning * 1024 * 1024) { + const mb = (this.numBytesInGPU / 1024 / 1024).toFixed(2); + this.warnedAboutMemory = true; + console.warn(`High memory usage in GPU: ${mb} MB, most likely due to a memory leak`); + } + return this.textureManager.acquireTexture(texShape, texType, isPacked); + } + computeBytes(shape, dtype) { + return shape[0] * shape[1] * util_exports.bytesPerElement(dtype); + } + checkCompileCompletion() { + for (const [, binary] of Object.entries(this.binaryCache)) { + this.checkCompletion_(binary); + } + } + async checkCompileCompletionAsync() { + const ps = []; + if (this.gpgpu.parallelCompilationExtension) { + for (const [, binary] of Object.entries(this.binaryCache)) { + ps.push(this.checkCompletionAsync_(binary)); + } + return Promise.all(ps); + } else { + for (const [, binary] of Object.entries(this.binaryCache)) { + const p2 = new Promise((resolve) => { + try { + this.checkCompletion_(binary); + resolve(true); + } catch (error) { + throw error; + } + }); + ps.push(p2); + } + return Promise.all(ps); + } + } + async checkCompletionAsync_(binary) { + if (this.gpgpu.gl.getProgramParameter(binary.webGLProgram, this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)) { + return this.checkCompletion_(binary); + } else { + await nextFrame(); + return this.checkCompletionAsync_(binary); + } + } + checkCompletion_(binary) { + if (this.gpgpu.gl.getProgramParameter(binary.webGLProgram, this.gpgpu.gl.LINK_STATUS) === false) { + console.log(this.gpgpu.gl.getProgramInfoLog(binary.webGLProgram)); + if (this.gpgpu.gl.getShaderParameter(binary.fragmentShader, this.gpgpu.gl.COMPILE_STATUS) === false) { + logShaderSourceAndInfoLog(binary.source, this.gpgpu.gl.getShaderInfoLog(binary.fragmentShader)); + throw new Error("Failed to compile fragment shader."); + } + throw new Error("Failed to link vertex and fragment shaders."); + } + return true; + } + getUniformLocations() { + for (const [, binary] of Object.entries(this.binaryCache)) { + const { uniformLocations, customUniformLocations, infLoc, nanLoc, inShapesLocations, inTexShapesLocations, outShapeLocation, outShapeStridesLocation, outTexShapeLocation } = getUniformLocations(this.gpgpu, binary.program, binary.webGLProgram); + binary.uniformLocations = uniformLocations; + binary.customUniformLocations = customUniformLocations; + binary.infLoc = infLoc; + binary.nanLoc = nanLoc; + binary.inShapesLocations = inShapesLocations; + binary.inTexShapesLocations = inTexShapesLocations; + binary.outShapeLocation = outShapeLocation; + binary.outShapeStridesLocation = outShapeStridesLocation; + binary.outTexShapeLocation = outTexShapeLocation; + } + } + }; + MathBackendWebGL.nextDataId = 0; + function float32ToTypedArray(a, dtype) { + if (dtype === "float32" || dtype === "complex64") { + return a; + } else if (dtype === "int32" || dtype === "bool") { + const result = dtype === "int32" ? new Int32Array(a.length) : new Uint8Array(a.length); + for (let i = 0; i < result.length; ++i) { + result[i] = Math.round(a[i]); + } + return result; + } else { + throw new Error(`Unknown dtype ${dtype}`); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/base.js + if (device_util_exports.isBrowser()) { + registerBackend("webgl", () => new MathBackendWebGL(), 2); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/register_all_kernels.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/_FusedMatMul.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchMatMul_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/kernel_funcs_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_gpu.js + init_define_BUILD_VERSION(); + var CHECK_NAN_SNIPPET2 = ` + if (isnan(a)) return a; + if (isnan(b)) return b; +`; + var BinaryOpProgram = class { + constructor(op2, aShape, bShape) { + this.variableNames = ["A", "B"]; + this.outputShape = backend_util_exports.assertAndGetBroadcastShape(aShape, bShape); + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + this.userCode = ` + float binaryOperation(float a, float b) { + ${op2} + } + + void main() { + float a = getAAtOutCoords(); + float b = getBAtOutCoords(); + setOutput(binaryOperation(a, b)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_packed_gpu.js + init_define_BUILD_VERSION(); + var CHECK_NAN_SNIPPET3 = ` + result.r = isNaN.r > 0. ? NAN : result.r; + result.g = isNaN.g > 0. ? NAN : result.g; + result.b = isNaN.b > 0. ? NAN : result.b; + result.a = isNaN.a > 0. ? NAN : result.a; +`; + var BinaryOpPackedProgram = class { + constructor(op2, aShape, bShape, checkOutOfBounds = false) { + this.variableNames = ["A", "B"]; + this.supportsBroadcasting = true; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = backend_util_exports.assertAndGetBroadcastShape(aShape, bShape); + const rank = this.outputShape.length; + this.enableShapeUniforms = useShapeUniforms(rank); + let checkOutOfBoundsString = ""; + if (checkOutOfBounds) { + if (rank === 0 || util_exports.sizeFromShape(this.outputShape) === 1) { + checkOutOfBoundsString = ` + result.y = 0.; + result.z = 0.; + result.w = 0.; + `; + } else { + const dtype = getCoordsDataType(rank); + checkOutOfBoundsString = ` + ${dtype} coords = getOutputCoords(); + `; + if (rank === 1) { + if (this.enableShapeUniforms) { + checkOutOfBoundsString += ` + result.y = (coords + 1) >= outShape ? 0. : result.y; + result.z = 0.; + result.w = 0.; + `; + } else { + checkOutOfBoundsString += ` + result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y; + result.z = 0.; + result.w = 0.; + `; + } + } else { + const channels = getChannels("coords", rank); + if (this.enableShapeUniforms) { + checkOutOfBoundsString += ` + bool nextRowOutOfBounds = + (${channels[rank - 2]} + 1) >= outShape[${rank} - 2]; + bool nextColOutOfBounds = + (${channels[rank - 1]} + 1) >= outShape[${rank} - 1]; + result.y = nextColOutOfBounds ? 0. : result.y; + result.z = nextRowOutOfBounds ? 0. : result.z; + result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; + `; + } else { + checkOutOfBoundsString += ` + bool nextRowOutOfBounds = + (${channels[rank - 2]} + 1) >= ${this.outputShape[rank - 2]}; + bool nextColOutOfBounds = + (${channels[rank - 1]} + 1) >= ${this.outputShape[rank - 1]}; + result.y = nextColOutOfBounds ? 0. : result.y; + result.z = nextRowOutOfBounds ? 0. : result.z; + result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; + `; + } + } + } + } + this.userCode = ` + vec4 binaryOperation(vec4 a, vec4 b) { + ${op2} + } + + void main() { + vec4 a = getAAtOutCoords(); + vec4 b = getBAtOutCoords(); + + vec4 result = binaryOperation(a, b); + ${checkOutOfBoundsString} + + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Complex.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Identity.js + init_define_BUILD_VERSION(); + function identity2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + backend2.incRef(x.dataId); + return { dataId: x.dataId, shape: x.shape, dtype: x.dtype }; + } + var identityConfig2 = { + kernelName: Identity, + backendName: "webgl", + kernelFunc: identity2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Complex.js + function complex3(args) { + const { inputs, backend: backend2 } = args; + const { real: real4, imag: imag4 } = inputs; + const complexInfo = backend2.makeTensorInfo(real4.shape, "complex64"); + const complex4 = backend2.texData.get(complexInfo.dataId); + const realTensorInfo = identity2({ inputs: { x: real4 }, backend: backend2 }); + const imagTensorInfo = identity2({ inputs: { x: imag4 }, backend: backend2 }); + complex4.complexTensorInfos = { real: realTensorInfo, imag: imagTensorInfo }; + return complexInfo; + } + var complexConfig2 = { + kernelName: Complex, + backendName: "webgl", + kernelFunc: complex3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LeakyRelu.js + init_define_BUILD_VERSION(); + var LEAKYRELU = `return (a < 0.) ? b * a : a;`; + var LEAKYRELU_PACKED = ` + vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); + return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); +`; + function leakyRelu3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { alpha } = attrs; + const $alpha = backend2.makeTensorInfo([], "float32", util_exports.createScalarValue(alpha, "float32")); + const program = env().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new BinaryOpPackedProgram(LEAKYRELU_PACKED, x.shape, $alpha.shape) : new BinaryOpProgram(LEAKYRELU, x.shape, $alpha.shape); + const result = backend2.runWebGLProgram(program, [x, $alpha], "float32"); + backend2.disposeIntermediateTensorInfo($alpha); + return result; + } + var leakyReluConfig2 = { + kernelName: LeakyRelu, + backendName: "webgl", + kernelFunc: leakyRelu3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Prelu.js + init_define_BUILD_VERSION(); + var PRELU = `return (a < 0.) ? b * a : a;`; + var PRELU_PACKED = ` + vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); + return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); +`; + function prelu3(args) { + const { inputs, backend: backend2 } = args; + const { x, alpha } = inputs; + const program = env().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new BinaryOpPackedProgram(PRELU_PACKED, x.shape, alpha.shape) : new BinaryOpProgram(PRELU, x.shape, alpha.shape); + return backend2.runWebGLProgram(program, [x, alpha], "float32"); + } + var preluConfig2 = { + kernelName: Prelu, + backendName: "webgl", + kernelFunc: prelu3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/kernel_funcs_utils.js + var CHECK_NAN_SNIPPET_UNARY = `if (isnan(x)) return x;`; + var CHECK_NAN_SNIPPET_BINARY = ` + if (isnan(a)) return a; + if (isnan(b)) return b; +`; + var CHECK_NAN_SNIPPET_BINARY_PACKED = ` + result.r = isNaN.r > 0. ? NAN : result.r; + result.g = isNaN.g > 0. ? NAN : result.g; + result.b = isNaN.b > 0. ? NAN : result.b; + result.a = isNaN.a > 0. ? NAN : result.a; +`; + function unaryKernelFunc2({ opSnippet, packedOpSnippet, cpuKernelImpl, dtype }) { + return ({ inputs, backend: backend2 }) => { + const { x } = inputs; + const webglBackend = backend2; + const $dtype = dtype || x.dtype; + if (webglBackend.shouldExecuteOnCPU([x]) && cpuKernelImpl != null) { + const xData = webglBackend.texData.get(x.dataId); + const outValues = cpuKernelImpl(xData.values, $dtype); + return webglBackend.makeTensorInfo(x.shape, $dtype, outValues); + } + const shouldUsePackedProgram = env().getBool("WEBGL_PACK_UNARY_OPERATIONS") && packedOpSnippet != null; + let program; + if (shouldUsePackedProgram) { + program = new UnaryOpPackedProgram(x.shape, packedOpSnippet); + } else { + program = new UnaryOpProgram(x.shape, opSnippet); + } + return webglBackend.runWebGLProgram(program, [x], $dtype); + }; + } + function binaryKernelFunc2({ opSnippet, packedOpSnippet, checkOutOfBounds = false, supportsComplex = false, cpuKernelImpl, dtype }) { + return ({ inputs, backend: backend2 }) => { + const { a, b } = inputs; + const webglBackend = backend2; + if (supportsComplex && a.dtype === "complex64") { + const aData = webglBackend.texData.get(a.dataId); + const bData = webglBackend.texData.get(b.dataId); + const [real4, imag4] = [ + [aData.complexTensorInfos.real, bData.complexTensorInfos.real], + [aData.complexTensorInfos.imag, bData.complexTensorInfos.imag] + ].map((complexParts) => { + const [aPart, bPart] = complexParts; + const aHandle = { + dataId: aPart.dataId, + dtype: aPart.dtype, + shape: a.shape + }; + const bHandle = { + dataId: bPart.dataId, + dtype: bPart.dtype, + shape: b.shape + }; + const program2 = new BinaryOpProgram(opSnippet, a.shape, b.shape); + return webglBackend.runWebGLProgram(program2, [aHandle, bHandle], upcastType(aPart.dtype, bPart.dtype)); + }); + const complexOutput = complex3({ inputs: { real: real4, imag: imag4 }, backend: webglBackend }); + webglBackend.disposeIntermediateTensorInfo(real4); + webglBackend.disposeIntermediateTensorInfo(imag4); + return complexOutput; + } + const $dtype = dtype || upcastType(a.dtype, b.dtype); + if ((a.dtype === "string" || b.dtype === "string" || webglBackend.shouldExecuteOnCPU([a, b])) && cpuKernelImpl != null) { + const aVals = webglBackend.texData.get(a.dataId).values; + const bVals = webglBackend.texData.get(b.dataId).values; + const decodedAVals = a.dtype === "string" ? backend_util_exports.fromUint8ToStringArray(aVals) : aVals; + const decodedBVals = a.dtype === "string" ? backend_util_exports.fromUint8ToStringArray(bVals) : bVals; + const [outValues, outShape] = cpuKernelImpl(a.shape, b.shape, decodedAVals, decodedBVals, $dtype); + const out = webglBackend.makeTensorInfo(outShape, $dtype); + const outData = webglBackend.texData.get(out.dataId); + outData.values = outValues; + return out; + } + const shouldUsePackedProgram = env().getBool("WEBGL_PACK_BINARY_OPERATIONS") && packedOpSnippet != null; + let program; + if (shouldUsePackedProgram) { + program = new BinaryOpPackedProgram(packedOpSnippet, a.shape, b.shape, checkOutOfBounds); + } else { + program = new BinaryOpProgram(opSnippet, a.shape, b.shape); + } + return webglBackend.runWebGLProgram(program, [a, b], $dtype); + }; + } + function mapActivationToShaderProgram(activation, packed = false) { + if (activation === "linear") { + if (packed) { + return LINEAR2; + } + return LINEAR; + } else if (activation === "relu") { + if (packed) { + return RELU2; + } + return RELU; + } else if (activation === "elu") { + if (packed) { + return ELU3; + } + return ELU2; + } else if (activation === "relu6") { + if (packed) { + return RELU62; + } + return RELU6; + } else if (activation === "prelu") { + if (packed) { + return PRELU_PACKED; + } + return PRELU; + } else if (activation === "leakyrelu") { + if (packed) { + return LEAKYRELU_PACKED; + } + return LEAKYRELU; + } else if (activation === "sigmoid") { + if (packed) { + return SIGMOID2; + } + return SIGMOID; + } + throw new Error(`Activation ${activation} has not been implemented for the WebGL backend.`); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/mulmat_packed_gpu.js + init_define_BUILD_VERSION(); + var MatMulPackedProgram = class { + constructor(aShape, bShape, outputShape, transposeA = false, transposeB = false, addBias = false, activation = null, hasPreluActivation = false, hasLeakyreluActivation = false) { + this.variableNames = ["matrixA", "matrixB"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + const sharedDim = transposeA ? aShape[1] : aShape[2]; + const sharedDimensionPacked = Math.ceil(sharedDim / 2); + const aSample = transposeA ? "i * 2, rc.y" : "rc.y, i * 2"; + const bSample = transposeB ? "rc.z, i * 2" : "i * 2, rc.z"; + const aSwizzle = transposeA ? ["a.xxyy", "a.zzww"] : ["a.xxzz", "a.yyww"]; + const bSwizzle = transposeB ? ["b.xzxz", "b.ywyw"] : ["b.xyxy", "b.zwzw"]; + let activationSnippet = "", applyActivationSnippet = ""; + if (activation) { + if (hasPreluActivation) { + activationSnippet = `vec4 activation(vec4 a) { + vec4 b = getPreluActivationWeightsAtOutCoords(); + ${activation} + }`; + } else if (hasLeakyreluActivation) { + activationSnippet = `vec4 activation(vec4 a) { + vec4 b = getLeakyreluAlphaAtOutCoords(); + ${activation} + }`; + } else { + activationSnippet = `vec4 activation(vec4 x) { + ${activation} + }`; + } + applyActivationSnippet = `result = activation(result);`; + } + const addBiasSnippet = addBias ? "result += getBiasAtOutCoords();" : ""; + if (addBias) { + this.variableNames.push("bias"); + } + if (hasPreluActivation) { + this.variableNames.push("preluActivationWeights"); + } + if (hasLeakyreluActivation) { + this.variableNames.push("leakyreluAlpha"); + } + let batchASnippet = "rc.x"; + let batchBSnippet = "rc.x"; + if (aShape[0] < bShape[0]) { + batchASnippet = `int(min(float(rc.x), ${aShape[0] - 1}.))`; + } else if (bShape[0] < aShape[0]) { + batchBSnippet = `int(min(float(rc.x), ${bShape[0] - 1}.))`; + } + this.userCode = ` + ${activationSnippet} + // Don't use uniform for sharedDimensionPacked for performance. + const float sharedDimension = ${sharedDimensionPacked}.0; + + vec4 dot2x2ARowBCol(ivec3 rc) { + vec4 result = vec4(0); + for (int i = 0; i < ${sharedDimensionPacked}; i++) { + int batchA = ${batchASnippet}; + int batchB = ${batchBSnippet}; + vec4 a = getMatrixA(batchA, ${aSample}); + vec4 b = getMatrixB(batchB, ${bSample}); + + // These swizzled products need to be separately added. + // See: https://github.com/tensorflow/tfjs/issues/1735 + result += (${aSwizzle[0]} * ${bSwizzle[0]}); + result += (${aSwizzle[1]} * ${bSwizzle[1]}); + } + return result; + } + + void main() { + ivec3 rc = getOutputCoords(); + vec4 result = dot2x2ARowBCol(rc); + + ${addBiasSnippet} + + ${applyActivationSnippet} + + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multiply.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_complex_gpu.js + init_define_BUILD_VERSION(); + var COMPLEX_MULTIPLY = { + REAL: "return areal * breal - aimag * bimag;", + IMAG: "return areal * bimag + aimag * breal;" + }; + var BinaryOpComplexProgram = class { + constructor(op2, aShape, bShape) { + this.variableNames = ["AReal", "AImag", "BReal", "BImag"]; + this.outputShape = backend_util_exports.assertAndGetBroadcastShape(aShape, bShape); + this.userCode = ` + float binaryOpComplex( + float areal, float aimag, float breal, float bimag) { + ${op2} + } + + void main() { + float areal = getARealAtOutCoords(); + float aimag = getAImagAtOutCoords(); + float breal = getBRealAtOutCoords(); + float bimag = getBImagAtOutCoords(); + setOutput(binaryOpComplex(areal, aimag, breal, bimag)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multiply.js + var MUL = "return a * b;"; + function multiply2(args) { + const { inputs, backend: backend2 } = args; + const { a, b } = inputs; + const dtype = backend_util_exports.upcastType(a.dtype, b.dtype); + if (a.dtype === "complex64") { + const aData = backend2.texData.get(a.dataId); + const bData = backend2.texData.get(b.dataId); + const realProgram = new BinaryOpComplexProgram(COMPLEX_MULTIPLY.REAL, a.shape, b.shape); + const imagProgram = new BinaryOpComplexProgram(COMPLEX_MULTIPLY.IMAG, a.shape, b.shape); + const inputs2 = [ + { + dataId: aData.complexTensorInfos.real.dataId, + dtype: aData.complexTensorInfos.real.dtype, + shape: a.shape + }, + { + dataId: aData.complexTensorInfos.imag.dataId, + dtype: aData.complexTensorInfos.imag.dtype, + shape: a.shape + }, + { + dataId: bData.complexTensorInfos.real.dataId, + dtype: bData.complexTensorInfos.real.dtype, + shape: b.shape + }, + { + dataId: bData.complexTensorInfos.imag.dataId, + dtype: bData.complexTensorInfos.imag.dtype, + shape: b.shape + } + ]; + const realPart = backend2.runWebGLProgram(realProgram, inputs2, "float32"); + const imagPart = backend2.runWebGLProgram(imagProgram, inputs2, "float32"); + const complexOutput = complex3({ inputs: { real: realPart, imag: imagPart }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(imagPart); + return complexOutput; + } + if (backend2.shouldExecuteOnCPU([a, b])) { + const aData = backend2.texData.get(a.dataId); + const bData = backend2.texData.get(b.dataId); + const [outValues, outShape] = multiplyImplCPU(a.shape, b.shape, aData.values, bData.values, dtype); + const out = backend2.makeTensorInfo(outShape, dtype); + const outData = backend2.texData.get(out.dataId); + outData.values = outValues; + return out; + } + let program; + if (env().getBool("WEBGL_PACK_BINARY_OPERATIONS")) { + program = new BinaryOpPackedProgram(MUL, a.shape, b.shape); + } else { + program = new BinaryOpProgram(MUL, a.shape, b.shape); + } + return backend2.runWebGLProgram(program, [a, b], dtype); + } + var multiplyConfig2 = { + kernelName: Multiply, + backendName: "webgl", + kernelFunc: multiply2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reshape.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/reshape.js + init_define_BUILD_VERSION(); + function packedReshape(input2, afterShape, backend2) { + const input3DShape = [ + getBatchDim(input2.shape), + ...getRowsCols(input2.shape) + ]; + const input3D = { + dtype: input2.dtype, + shape: input3DShape, + dataId: input2.dataId + }; + const afterShapeAs3D = [ + getBatchDim(afterShape), + ...getRowsCols(afterShape) + ]; + const program = new ReshapePackedProgram(afterShapeAs3D, input3DShape); + const preventEagerUnpackingOfOutput = true; + const customValues = [input3DShape]; + const output = backend2.runWebGLProgram(program, [input3D], input2.dtype, customValues, preventEagerUnpackingOfOutput); + return { dataId: output.dataId, shape: afterShape, dtype: output.dtype }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reshape.js + function reshape3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { shape } = attrs; + const webglBackend = backend2; + const xSize = util_exports.sizeFromShape(x.shape); + const $shape = util_exports.inferFromImplicitShape(shape, xSize); + const $xSize = util_exports.sizeFromShape($shape); + util_exports.assert(xSize === $xSize, () => `The new shape (${$shape}) has ${$xSize} elements and the old shape (${x.shape}) has ${xSize} elements. The new shape and old shape must have the same number of elements.`); + const xTexData = webglBackend.texData.get(x.dataId); + if (xTexData.isPacked && !isReshapeFree(x.shape, $shape) && !(xTexData.texture !== null && isReshapeFree(xTexData.shape, $shape))) { + return packedReshape(x, $shape, webglBackend); + } + webglBackend.incRef(x.dataId); + return { dataId: x.dataId, shape: $shape, dtype: x.dtype }; + } + var reshapeConfig2 = { + kernelName: Reshape, + backendName: "webgl", + kernelFunc: reshape3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/reduce.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/mean_gpu.js + init_define_BUILD_VERSION(); + var MeanProgram = class { + constructor(reduceInfo, divisor) { + this.variableNames = ["x"]; + const { windowSize, batchSize, inSize, outSize } = reduceInfo; + this.outputShape = [batchSize, outSize]; + const windowSizeNearestVec4 = Math.floor(windowSize / 4) * 4; + const windowSizeVec4Remainder = windowSize % 4; + let updateSnippet = `sumValue += dot(values, ones);`; + if (divisor != null) { + const denominator = 1 / divisor; + updateSnippet = `sumValue += dot(values * ${util_exports.isInt(denominator) ? denominator.toPrecision(2) : denominator}, ones);`; + } + let checkOutOfBounds = ""; + if (inSize % windowSize > 0) { + checkOutOfBounds = ` + if (inIdx < 0 || inIdx >= ${inSize}) { + return 0.0; + } + `; + } + this.userCode = ` + const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); + + float getValue(int batch, int inIdx) { + ${checkOutOfBounds} + return getX(batch, inIdx); + } + + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int outIdx = coords[1]; + int inOffset = outIdx * ${windowSize}; + + float sumValue = 0.0; + + for (int i = 0; i < ${windowSizeNearestVec4}; i += 4) { + int inIdx = inOffset + i; + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), + getValue(batch, inIdx + 3) + ); + + ${updateSnippet} + } + + int inIdx = inOffset + ${windowSizeNearestVec4}; + if (${windowSizeVec4Remainder === 1}) { + vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 2}) { + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), 0.0, 0.0); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 3}) { + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), 0.0); + + ${updateSnippet} + } + setOutput(sumValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/reduce_gpu.js + init_define_BUILD_VERSION(); + var ReduceProgram = class { + constructor(reduceInfo, reduceType) { + this.variableNames = ["x"]; + const { windowSize, batchSize, inSize, outSize } = reduceInfo; + this.outputShape = [batchSize, outSize]; + let initializationValue = "0.0"; + let compareOp = ``; + if (reduceType === "prod") { + initializationValue = "1.0"; + } else if (reduceType === "min") { + initializationValue = "1.0 / 1e-20"; + compareOp = `min`; + } else if (reduceType === "max") { + initializationValue = "-1.0 / 1e-20"; + compareOp = `max`; + } + let returnValue = `${reduceType}(${reduceType}(${reduceType}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; + if (reduceType === "sum") { + returnValue = `sumValue`; + } else if (reduceType === "prod") { + returnValue = `prodValue`; + } else if (reduceType === "all") { + returnValue = `allValue`; + } else if (reduceType === "any") { + returnValue = `anyValue`; + } + const windowSizeNearestVec4 = Math.floor(windowSize / 4) * 4; + const windowSizeVec4Remainder = windowSize % 4; + let updateSnippet = ` + if (${reduceType === "sum"}) { + sumValue += dot(values, ones); + } else if (${reduceType === "prod"}) { + vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]); + prodValue *= tmp[0] * tmp[1]; + } else { + minMaxValue = ${compareOp}(values, minMaxValue); + if (${reduceType === "min"} || ${reduceType === "max"}) { + minMaxValue = ${compareOp}(values, minMaxValue); + bvec4 isNaN = isnan(values); + if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) { + minMaxValue = vec4(NAN); + } + } + } + `; + let vecType = `vec4`; + if (reduceType === "all") { + initializationValue = "1.0"; + updateSnippet = ` + bool reducedAllValue = all(values); + float floatedReducedAllValue = float(reducedAllValue); + allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); + `; + vecType = `bvec4`; + } else if (reduceType === "any") { + initializationValue = "0.0"; + updateSnippet = ` + bool reducedAnyValue = any(values); + float floatedReducedAnyValue = float(reducedAnyValue); + anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0); + `; + vecType = `bvec4`; + } + let checkOutOfBounds = ""; + if (inSize % windowSize > 0) { + checkOutOfBounds = ` + if (inIdx < 0 || inIdx >= ${inSize}) { + return initializationValue; + } + `; + } + this.userCode = ` + const float initializationValue = ${initializationValue}; + const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); + + float getValue(int batch, int inIdx) { + ${checkOutOfBounds} + return getX(batch, inIdx); + } + + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int outIdx = coords[1]; + int inOffset = outIdx * ${windowSize}; + + vec4 minMaxValue = vec4(${initializationValue}); + float prodValue = 1.0; + float sumValue = 0.0; + float allValue = 1.0; + float anyValue = 0.0; + + for (int i = 0; i < ${windowSizeNearestVec4}; i += 4) { + int inIdx = inOffset + i; + ${vecType} values = ${vecType}( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), + getValue(batch, inIdx + 3) + ); + + ${updateSnippet} + } + + int inIdx = inOffset + ${windowSizeNearestVec4}; + if (${windowSizeVec4Remainder === 1}) { + ${vecType} values = ${vecType}( + getValue(batch, inIdx), + initializationValue, + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 2}) { + ${vecType} values = ${vecType}( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 3}) { + ${vecType} values = ${vecType}( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), + initializationValue + ); + + ${updateSnippet} + } + setOutput(${returnValue}); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/reduce.js + function getReductionStages(inShape) { + const stages = []; + while (stages.length === 0 || stages[stages.length - 1].outSize !== 1) { + const outSize = stages.length ? stages[stages.length - 1].outSize : inShape[1]; + const windowSize = backend_util_exports.computeOptimalWindowSize(outSize); + stages.push({ + inSize: outSize, + windowSize, + outSize: Math.ceil(outSize / windowSize) + }); + } + return stages; + } + function reduce(x, dtype, reductionType, backend2) { + const reductionStages = getReductionStages(x.shape); + let result = x; + for (let i = 0; i < reductionStages.length; i++) { + const { inSize, windowSize, outSize } = reductionStages[i]; + let program; + let previousResult; + if (reductionType === "mean") { + program = i === 0 ? new MeanProgram({ windowSize, inSize, batchSize: x.shape[0], outSize }, inSize) : new MeanProgram({ windowSize, inSize, batchSize: x.shape[0], outSize }); + } else { + program = new ReduceProgram({ windowSize, inSize, batchSize: x.shape[0], outSize }, reductionType); + } + previousResult = result; + result = backend2.runWebGLProgram(program, [result], dtype); + if (previousResult.dataId !== x.dataId) { + backend2.disposeIntermediateTensorInfo(previousResult); + } + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transpose_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/transpose_gpu.js + init_define_BUILD_VERSION(); + var TransposeProgram = class { + constructor(aShape, newDim) { + this.variableNames = ["A"]; + const outputShape = new Array(aShape.length); + for (let i = 0; i < outputShape.length; i++) { + outputShape[i] = aShape[newDim[i]]; + } + this.outputShape = outputShape; + this.rank = outputShape.length; + const dtype = getCoordsDataType(this.rank); + const switched = getSwitchedCoords(newDim); + this.userCode = ` + void main() { + ${dtype} resRC = getOutputCoords(); + setOutput(getA(${switched})); + } + `; + } + }; + function getSwitchedCoords(newDim) { + const rank = newDim.length; + if (rank > 6) { + throw Error(`Transpose for rank ${rank} is not yet supported`); + } + const originalOrder = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u", "resRC.v"]; + const switchedCoords = new Array(rank); + for (let i = 0; i < newDim.length; i++) { + switchedCoords[newDim[i]] = originalOrder[i]; + } + return switchedCoords.join(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/transpose_packed_gpu.js + init_define_BUILD_VERSION(); + var TransposePackedProgram = class { + constructor(aShape, newDim) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + const outputShape = new Array(aShape.length); + for (let i = 0; i < outputShape.length; i++) { + outputShape[i] = aShape[newDim[i]]; + } + this.outputShape = outputShape; + this.rank = outputShape.length; + if (this.rank > 6) { + throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`); + } + const dtype = getCoordsDataType(this.rank); + const outputOrder = getVecChannels("rc", this.rank); + const switchedOrder = new Array(this.rank); + for (let i = 0; i < newDim.length; i++) { + switchedOrder[newDim[i]] = outputOrder[i]; + } + const innerDims = `vec2(${switchedOrder.slice(-2).join()})`; + const nextColumn = `++${outputOrder[this.rank - 1]} < ${outputShape[this.rank - 1]}`; + const getc = `getChannel(getA(${switchedOrder.join()}), ${innerDims})`; + this.userCode = ` + void main() { + ${dtype} rc = getOutputCoords(); + vec4 result = vec4(0.); + result[0] = ${getc}; + if(${nextColumn}) { + result[1] = ${getc}; + } + --${outputOrder[this.rank - 1]}; + if(++${outputOrder[this.rank - 2]} < ${outputShape[this.rank - 2]}) { + result[2] = ${getc}; + if(${nextColumn}) { + result[3] = ${getc}; + } + } + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transpose_impl.js + function transposeImpl2(x, perm, backend2) { + const program = env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new TransposePackedProgram(x.shape, perm) : new TransposeProgram(x.shape, perm); + return backend2.runWebGLProgram(program, [x], x.dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum_impl.js + function sumImpl(x, axis, keepDims, backend2) { + const reductionIndices = axis; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(reductionIndices, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + const sumInputIsTransposed = permutedAxes != null; + let sumInput = x; + if (sumInputIsTransposed) { + sumInput = transposeImpl2(x, permutedAxes, backend2); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("sum", axes, xRank); + const [sumOutShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(sumInput.shape, axes); + let outShape = sumOutShape; + if (keepDims) { + outShape = backend_util_exports.expandShapeToKeepDim(sumOutShape, origAxes); + } + const inSize = util_exports.sizeFromShape(reduceShape); + const xSize = util_exports.sizeFromShape(x.shape); + const batchSize = xSize / inSize; + const reshapedInput = reshape3({ inputs: { x: sumInput }, attrs: { shape: [batchSize, inSize] }, backend: backend2 }); + const outType = sumOutType(x.dtype); + const reduced = reduce(reshapedInput, outType, "sum", backend2); + const out = reshape3({ inputs: { x: reduced }, attrs: { shape: outShape }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(reshapedInput); + backend2.disposeIntermediateTensorInfo(reduced); + if (sumInputIsTransposed) { + backend2.disposeIntermediateTensorInfo(sumInput); + } + return out; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum.js + function sum4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + return sumImpl(x, axis, keepDims, backend2); + } + var sumConfig2 = { + kernelName: Sum, + backendName: "webgl", + kernelFunc: sum4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transpose.js + init_define_BUILD_VERSION(); + function transpose3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { perm } = attrs; + const webglBackend = backend2; + const xRank = x.shape.length; + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = x.shape[perm[i]]; + } + let out; + if (webglBackend.shouldExecuteOnCPU([x])) { + const xTexData = webglBackend.texData.get(x.dataId); + const values = xTexData.values; + const outValues = transposeImplCPU(values, x.shape, x.dtype, perm, newShape); + out = webglBackend.makeTensorInfo(newShape, x.dtype); + const outData = webglBackend.texData.get(out.dataId); + outData.values = outValues; + } else { + out = transposeImpl2(x, perm, webglBackend); + } + return out; + } + var transposeConfig2 = { + kernelName: Transpose, + backendName: "webgl", + kernelFunc: transpose3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchMatMul_impl.js + var MATMUL_SHARED_DIM_THRESHOLD = 1e3; + function batchMatMulImpl({ a, b, transposeA, transposeB, backend: backend2, bias = null, preluActivationWeights = null, leakyreluAlpha = 0, activation = null }) { + const aRank = a.shape.length; + const bRank = b.shape.length; + const innerShapeA = transposeA ? a.shape[aRank - 2] : a.shape[aRank - 1]; + const innerShapeB = transposeB ? b.shape[bRank - 1] : b.shape[bRank - 2]; + const outerShapeA = transposeA ? a.shape[aRank - 1] : a.shape[aRank - 2]; + const outerShapeB = transposeB ? b.shape[bRank - 2] : b.shape[bRank - 1]; + const outerDimsA = a.shape.slice(0, -2); + const outerDimsB = b.shape.slice(0, -2); + const batchDimA = util_exports.sizeFromShape(outerDimsA); + const batchDimB = util_exports.sizeFromShape(outerDimsB); + const outShapeOuterDims = broadcast_util_exports.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2)); + const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]); + util_exports.assert(innerShapeA === innerShapeB, () => `Error in matMul: inner shapes (${innerShapeA}) and (${innerShapeB}) of Tensors with shapes ${a.shape} and ${b.shape} and transposeA=${transposeA} and transposeB=${transposeB} must match.`); + const a3dShape = transposeA ? [batchDimA, innerShapeA, outerShapeA] : [batchDimA, outerShapeA, innerShapeA]; + const b3dShape = transposeB ? [batchDimB, outerShapeB, innerShapeB] : [batchDimB, innerShapeB, outerShapeB]; + const a3d = reshape3({ inputs: { x: a }, backend: backend2, attrs: { shape: a3dShape } }); + const b3d = reshape3({ inputs: { x: b }, backend: backend2, attrs: { shape: b3dShape } }); + const intermediates = [a3d, b3d]; + const batchDim = Math.max(batchDimA, batchDimB); + const sharedDim = transposeA ? a3d.shape[1] : a3d.shape[2]; + const hasBias = bias != null; + const hasPreluActivationWeights = preluActivationWeights != null; + const hasLeakyreluAlpha = activation === "leakyrelu"; + const fusedActivation = activation != null ? mapActivationToShaderProgram(activation, true) : null; + const containsFusedOps = hasBias || hasPreluActivationWeights || hasLeakyreluAlpha || fusedActivation != null; + let out; + if ((outerShapeA === 1 || outerShapeB === 1) && sharedDim > MATMUL_SHARED_DIM_THRESHOLD && containsFusedOps === false) { + let aVec = a3d; + let bVec = b3d; + if (transposeA) { + aVec = transpose3({ inputs: { x: a3d }, backend: backend2, attrs: { perm: [0, 2, 1] } }); + intermediates.push(aVec); + } + if (transposeB) { + bVec = transpose3({ inputs: { x: b3d }, backend: backend2, attrs: { perm: [0, 2, 1] } }); + intermediates.push(bVec); + } + const shouldReshapeA = outerShapeB !== 1; + const shouldReshapeB = outerShapeB === 1; + let aVec3d = aVec; + if (shouldReshapeA) { + aVec3d = reshape3({ + inputs: { x: aVec }, + backend: backend2, + attrs: { shape: [batchDim, sharedDim, 1] } + }); + intermediates.push(aVec3d); + } + const axis = outerShapeB === 1 ? 2 : 1; + let bVec3d = bVec; + if (shouldReshapeB) { + bVec3d = reshape3({ + inputs: { x: bVec }, + backend: backend2, + attrs: { shape: [batchDim, 1, sharedDim] } + }); + intermediates.push(bVec3d); + } + const product = multiply2({ inputs: { a: aVec3d, b: bVec3d }, backend: backend2 }); + out = sum4({ inputs: { x: product }, backend: backend2, attrs: { axis, keepDims: true } }); + intermediates.push(product); + } else { + const dtype = upcastType(a.dtype, b.dtype); + const program = new MatMulPackedProgram(a3dShape, b3dShape, [batchDim, outerShapeA, outerShapeB], transposeA, transposeB, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha); + const inputs = [a3d, b3d]; + if (bias != null) { + inputs.push(bias); + } + if (hasPreluActivationWeights) { + inputs.push(preluActivationWeights); + } + if (hasLeakyreluAlpha) { + const $leakyreluAlpha = backend2.makeTensorInfo([], "float32", util_exports.createScalarValue(leakyreluAlpha, "float32")); + inputs.push($leakyreluAlpha); + intermediates.push($leakyreluAlpha); + } + out = backend2.runWebGLProgram(program, inputs, dtype); + } + const outReshaped = reshape3({ inputs: { x: out }, backend: backend2, attrs: { shape: outShape } }); + intermediates.push(out); + for (const i of intermediates) { + backend2.disposeIntermediateTensorInfo(i); + } + return outReshaped; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/_FusedMatMul.js + function _fusedMatMul2(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b, bias, preluActivationWeights } = inputs; + const { transposeA, transposeB, activation, leakyreluAlpha } = attrs; + return batchMatMulImpl({ + a, + b, + transposeA, + transposeB, + backend: backend2, + bias, + preluActivationWeights, + leakyreluAlpha, + activation + }); + } + var _fusedMatMulConfig2 = { + kernelName: _FusedMatMul, + backendName: "webgl", + kernelFunc: _fusedMatMul2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Abs.js + init_define_BUILD_VERSION(); + var ABS2 = `return abs(x);`; + function abs3(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (backend2.shouldExecuteOnCPU([x]) && x.dtype !== "complex64") { + const xData = backend2.texData.get(x.dataId); + const outValues = simpleAbsImplCPU(xData.values); + return backend2.makeTensorInfo(x.shape, x.dtype, outValues); + } + let program; + if (env().getBool("WEBGL_PACK_UNARY_OPERATIONS")) { + program = new UnaryOpPackedProgram(x.shape, ABS2); + } else { + program = new UnaryOpProgram(x.shape, ABS2); + } + return backend2.runWebGLProgram(program, [x], x.dtype); + } + var absConfig2 = { + kernelName: Abs, + backendName: "webgl", + kernelFunc: abs3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Acos.js + init_define_BUILD_VERSION(); + var ACOS = CHECK_NAN_SNIPPET + ` + if (abs(x) > 1.) { + return NAN; + } + return acos(x); +`; + var acos3 = unaryKernelFunc2({ opSnippet: ACOS }); + var acosConfig2 = { + kernelName: Acos, + backendName: "webgl", + kernelFunc: acos3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Acosh.js + init_define_BUILD_VERSION(); + var ACOSH = CHECK_NAN_SNIPPET + ` + if (x < 1.0) return NAN; +return log(x + sqrt(x * x - 1.0));`; + var acosh3 = unaryKernelFunc2({ opSnippet: ACOSH }); + var acoshConfig2 = { + kernelName: Acosh, + backendName: "webgl", + kernelFunc: acosh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Add.js + init_define_BUILD_VERSION(); + var ADD = "return a + b;"; + var addKernelFunc = binaryKernelFunc2({ + opSnippet: ADD, + packedOpSnippet: ADD, + supportsComplex: true, + cpuKernelImpl: addImplCPU + }); + var addConfig2 = { + kernelName: Add, + backendName: "webgl", + kernelFunc: addKernelFunc + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AddN.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/addn_gpu.js + init_define_BUILD_VERSION(); + var AddNProgram = class { + constructor(outputShape, shapes) { + this.outputShape = []; + this.outputShape = outputShape; + this.variableNames = shapes.map((_, i) => `T${i}`); + const snippets = []; + this.variableNames.forEach((variable2) => { + snippets.push(`float v${variable2} = get${variable2}AtOutCoords();`); + }); + const operation = this.variableNames.map((variable2) => { + return `v${variable2}`; + }).join(" + "); + this.userCode = ` + void main() { + ${snippets.join("\n ")} + + float result = ${operation}; + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/addn_packed_gpu.js + init_define_BUILD_VERSION(); + var AddNPackedProgram = class { + constructor(outputShape, shapes) { + this.outputShape = []; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = outputShape; + this.variableNames = shapes.map((_, i) => `T${i}`); + const snippets = []; + this.variableNames.forEach((variable2) => { + snippets.push(`vec4 v${variable2} = get${variable2}AtOutCoords();`); + }); + const operation = this.variableNames.map((variable2) => { + return `v${variable2}`; + }).join(" + "); + this.userCode = ` + void main() { + ${snippets.join("\n ")} + + vec4 result = ${operation}; + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AddN.js + function addN2(args) { + const { inputs, backend: backend2 } = args; + const tensors = inputs; + if (tensors.length === 1) { + return identity2({ inputs: { x: tensors[0] }, backend: backend2 }); + } + if (tensors.length > env().get("WEBGL_MAX_TEXTURES_IN_SHADER")) { + const midIndex = Math.floor(tensors.length / 2); + const leftSide = addN2({ inputs: tensors.slice(0, midIndex), backend: backend2 }); + const rightSide = addN2({ inputs: tensors.slice(midIndex), backend: backend2 }); + return addN2({ inputs: [leftSide, rightSide], backend: backend2 }); + } + const dtype = tensors.map((t) => t.dtype).reduce((d1, d2) => upcastType(d1, d2)); + const shapes = tensors.map((t) => t.shape); + const usePackedOp = env().getBool("WEBGL_PACK"); + const program = usePackedOp ? new AddNPackedProgram(tensors[0].shape, shapes) : new AddNProgram(tensors[0].shape, shapes); + return backend2.runWebGLProgram(program, tensors, dtype); + } + var addNConfig2 = { + kernelName: AddN, + backendName: "webgl", + kernelFunc: addN2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/All.js + init_define_BUILD_VERSION(); + function all3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let permutedX = x; + if (permutedAxes != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("all", axes, xRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(permutedX.shape, axes); + const inSize = util_exports.sizeFromShape(reduceShape); + const a2D = reshape3({ inputs: { x: permutedX }, backend: backend2, attrs: { shape: [-1, inSize] } }); + const reduced = reduce(a2D, a2D.dtype, "all", backend2); + let res; + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: newShape } }); + } else { + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: outShape } }); + } + backend2.disposeIntermediateTensorInfo(a2D); + backend2.disposeIntermediateTensorInfo(reduced); + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo(permutedX); + } + return res; + } + var allConfig2 = { + kernelName: All, + backendName: "webgl", + kernelFunc: all3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Any.js + init_define_BUILD_VERSION(); + function any3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let permutedX = x; + if (permutedAxes != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("any", axes, xRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(permutedX.shape, axes); + const inSize = util_exports.sizeFromShape(reduceShape); + const a2D = reshape3({ inputs: { x: permutedX }, backend: backend2, attrs: { shape: [-1, inSize] } }); + const reduced = reduce(a2D, a2D.dtype, "any", backend2); + let res; + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: newShape } }); + } else { + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: outShape } }); + } + backend2.disposeIntermediateTensorInfo(a2D); + backend2.disposeIntermediateTensorInfo(reduced); + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo(permutedX); + } + return res; + } + var anyConfig2 = { + kernelName: Any, + backendName: "webgl", + kernelFunc: any3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ArgMax.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/arg_min_max.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/argminmax_gpu.js + init_define_BUILD_VERSION(); + var ArgMinMaxProgram = class { + constructor(reduceInfo, op2, firstPass) { + this.variableNames = ["A"]; + const { windowSize, batchSize, outSize } = reduceInfo; + if (!firstPass) { + this.variableNames.push("bestIndicesA"); + } + this.outputShape = [batchSize, outSize]; + const compOp = op2 === "max" ? ">" : "<"; + const indexSnippet = firstPass ? "inOffset + i;" : "round(getBestIndicesA(batch, inOffset + i));"; + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int outIdx = coords[1]; + int inOffset = outIdx * ${windowSize}; + + int bestIndex = inOffset; + float bestValue = getA(batch, bestIndex); + + for (int i = 0; i < ${windowSize}; i++) { + int inIdx = ${indexSnippet}; + float candidate = getA(batch, inIdx); + if (candidate ${compOp} bestValue) { + bestValue = candidate; + bestIndex = inIdx; + } + } + setOutput(float(bestIndex)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/argminmax_packed_gpu.js + init_define_BUILD_VERSION(); + var ArgMinMaxPackedProgram = class { + constructor(shape, windowSize, op2, firstPass) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + util_exports.assert(shape.length > 2, () => `Packed arg${op2.charAt(0).toUpperCase() + op2.slice(1)} supports only inputs with rank above 2.`); + const inSize = shape[shape.length - 1]; + const outSize = Math.ceil(inSize / windowSize); + this.outputShape = shape.slice(0, -1); + if (outSize > 1) { + this.outputShape.push(outSize); + } + if (!firstPass) { + this.variableNames.push("bestIndicesA"); + } + const outShape = this.outputShape; + const rank = outShape.length; + const dtype = getCoordsDataType(rank); + const coords2 = getChannels("coords", rank); + let sourceLocSetup; + let sourceRank; + if (outSize === 1) { + sourceRank = rank + 1; + const sourceLocDType = getCoordsDataType(sourceRank); + sourceLocSetup = ` + ${sourceLocDType} sourceLocR = ${sourceLocDType}(${coords2.join()}, 0); + ++${coords2[rank - 1]}; + ${sourceLocDType} sourceLocG = ${sourceLocDType}(${coords2.join()}, 0); + ++${coords2[rank - 2]}; + ${sourceLocDType} sourceLocA = ${sourceLocDType}(${coords2.join()}, 0); + --${coords2[rank - 1]}; + ${sourceLocDType} sourceLocB = ${sourceLocDType}(${coords2.join()}, 0); + --${coords2[rank - 2]};`; + } else { + sourceRank = rank; + sourceLocSetup = ` + ${dtype} sourceLocR = coords; + ++${coords2[rank - 1]}; + ${dtype} sourceLocG = coords; + ++${coords2[rank - 2]}; + ${dtype} sourceLocA = coords; + --${coords2[rank - 1]}; + ${dtype} sourceLocB = coords; + --${coords2[rank - 2]};`; + } + const channels = ["x", "y", "z", "w", "u", "v"].slice(0, sourceRank); + const inChannel = "." + channels[sourceRank - 1]; + const intChannels = channels.map((x) => "int " + x); + const srcRCoords = getChannels("sourceLocR", sourceRank - 1).concat("inIdx.r"); + const srcGCoords = getChannels("sourceLocG", sourceRank - 1).concat("inIdx.g"); + const srcBCoords = getChannels("sourceLocB", sourceRank - 1).concat("inIdx.b"); + const srcACoords = getChannels("sourceLocA", sourceRank - 1).concat("inIdx.a"); + const compOp = op2 === "max" ? "greaterThan" : "lessThan"; + const fetchCandidateIdx = firstPass ? "" : ` + inIdx = round(vec4(getBestIndicesAChannel(${srcRCoords.join()}), + getBestIndicesAChannel(${srcGCoords.join()}), + getBestIndicesAChannel(${srcBCoords.join()}), + getBestIndicesAChannel(${srcACoords.join()})));`; + const fetchValue = `vec4( + getAChannel(${srcRCoords.join()}), + hasNextCol ? getAChannel(${srcGCoords.join()}) : 0., + hasNextRow ? getAChannel(${srcBCoords.join()}) : 0., + hasNextRow && hasNextCol ? getAChannel(${srcACoords.join()}) : 0.)`; + const getBestIndicesAChannelSnippet = firstPass ? "" : ` + float getBestIndicesAChannel(${intChannels.join()}) { + return getChannel(getBestIndicesA(${channels.join()}), + vec2(${channels.slice(-2).join()})); + }`; + this.userCode = ` + float getAChannel(${intChannels.join()}) { + return getChannel(getA(${channels.join()}), + vec2(${channels.slice(-2).join()})); + } + ${getBestIndicesAChannelSnippet} + void main() { + ${dtype} coords = getOutputCoords(); + bool hasNextCol = ${coords2[rank - 1]} < ${outShape[rank - 1] - 1}; + bool hasNextRow = ${coords2[rank - 2]} < ${outShape[rank - 2] - 1}; + ${sourceLocSetup} + ivec4 srcIdx = ivec4(sourceLocR${inChannel}, sourceLocG${inChannel}, + sourceLocB${inChannel}, sourceLocA${inChannel}) * ${windowSize}; + ivec4 inIdx = srcIdx; + vec4 bestIndex = vec4(inIdx); + vec4 bestValue = ${fetchValue}; + + for (int i = 0; i < ${windowSize}; i++) { + inIdx = srcIdx; + ${fetchCandidateIdx} + vec4 candidate = ${fetchValue}; + bvec4 nan = isnan(candidate); + bvec4 replace = bvec4( + vec4(${compOp}(candidate, bestValue)) * (vec4(1.0) - vec4(nan))); + + bestValue = vec4(replace.x ? candidate.x : bestValue.x, + replace.y ? candidate.y : bestValue.y, + replace.z ? candidate.z : bestValue.z, + replace.w ? candidate.w : bestValue.w); + bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace)); + srcIdx++; + } + setOutput(bestIndex); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/arg_min_max.js + function argReduce(backend2, x, reduceType, bestIndicesA = null) { + let batchSize = x.shape[0]; + let inSize = x.shape[1]; + if (bestIndicesA != null) { + batchSize = bestIndicesA.shape[0]; + inSize = bestIndicesA.shape[1]; + } + const windowSize = backend_util_exports.computeOptimalWindowSize(inSize); + const reduceInfo = { windowSize, inSize, batchSize, outSize: Math.ceil(inSize / windowSize) }; + const program = new ArgMinMaxProgram(reduceInfo, reduceType, bestIndicesA == null); + const inputs = [x]; + if (bestIndicesA != null) { + inputs.push(bestIndicesA); + } + const output = backend2.runWebGLProgram(program, inputs, "int32"); + if (output.shape[1] === 1) { + return output; + } + const result = argReduce(backend2, x, reduceType, output); + backend2.disposeIntermediateTensorInfo(output); + return result; + } + function argReducePacked(backend2, x, reduceType, bestIndicesA = null) { + const inShape = bestIndicesA != null ? bestIndicesA.shape : x.shape; + const inSize = inShape[inShape.length - 1]; + const windowSize = backend_util_exports.computeOptimalWindowSize(inSize); + const program = new ArgMinMaxPackedProgram(inShape, windowSize, reduceType, bestIndicesA == null); + const inputs = bestIndicesA == null ? [x] : [x, bestIndicesA]; + const output = backend2.runWebGLProgram(program, inputs, "int32"); + if (output.shape.length === x.shape.length) { + const result = argReducePacked(backend2, x, reduceType, output); + backend2.disposeIntermediateTensorInfo(output); + return result; + } + return output; + } + function argMinMaxReduce(backend2, x, axis, reduceType) { + const axes = [axis]; + backend_util_exports.assertAxesAreInnerMostDims("arg" + reduceType.charAt(0).toUpperCase() + reduceType.slice(1), axes, x.shape.length); + if (!env().getBool("WEBGL_PACK_REDUCE") || x.shape.length <= 2) { + const intermediateTensorInfos = []; + const xtexData = backend2.texData.get(x.dataId); + const xIsPacked = xtexData !== null && xtexData.isPacked; + let xUnPacked = x; + if (xIsPacked) { + xUnPacked = backend2.unpackTensor(x); + intermediateTensorInfos.push(xUnPacked); + } + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(xUnPacked.shape, axes); + const inSize = util_exports.sizeFromShape(reduceShape); + const a2D = reshape3({ inputs: { x: xUnPacked }, backend: backend2, attrs: { shape: [-1, inSize] } }); + intermediateTensorInfos.push(a2D); + const reduced = argReduce(backend2, a2D, reduceType); + intermediateTensorInfos.push(reduced); + const reshaped = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: outShape } }); + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return reshaped; + } + return argReducePacked(backend2, x, reduceType); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ArgMax.js + function argMax3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis } = attrs; + let axes = util_exports.parseAxisParam(axis, x.shape); + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + const intermediateTensorInfos = []; + if (permutedAxes != null) { + $x = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + intermediateTensorInfos.push($x); + axes = backend_util_exports.getInnerMostAxes(axes.length, $x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("argMax", [axes[0]], $x.shape.length); + const out = argMinMaxReduce(backend2, $x, axes[0], "max"); + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return out; + } + var argMaxConfig2 = { + kernelName: ArgMax, + backendName: "webgl", + kernelFunc: argMax3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ArgMin.js + init_define_BUILD_VERSION(); + function argMin3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis } = attrs; + let axes = util_exports.parseAxisParam(axis, x.shape); + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + const intermediateTensorInfos = []; + if (permutedAxes != null) { + $x = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + intermediateTensorInfos.push($x); + axes = backend_util_exports.getInnerMostAxes(axes.length, $x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("argMin", [axes[0]], $x.shape.length); + const out = argMinMaxReduce(backend2, $x, axes[0], "min"); + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return out; + } + var argMinConfig2 = { + kernelName: ArgMin, + backendName: "webgl", + kernelFunc: argMin3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Asin.js + init_define_BUILD_VERSION(); + var ASIN = CHECK_NAN_SNIPPET + ` + if (abs(x) > 1.) { + return NAN; + } + return asin(x); +`; + var asin3 = unaryKernelFunc2({ opSnippet: ASIN }); + var asinConfig2 = { + kernelName: Asin, + backendName: "webgl", + kernelFunc: asin3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Asinh.js + init_define_BUILD_VERSION(); + var ASINH = CHECK_NAN_SNIPPET + `return log(x + sqrt(x * x + 1.0));`; + var asinh3 = unaryKernelFunc2({ opSnippet: ASINH }); + var asinhConfig2 = { + kernelName: Asinh, + backendName: "webgl", + kernelFunc: asinh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atan.js + init_define_BUILD_VERSION(); + var ATAN = CHECK_NAN_SNIPPET + ` + return atan(x); +`; + var atan4 = unaryKernelFunc2({ opSnippet: ATAN }); + var atanConfig2 = { + kernelName: Atan, + backendName: "webgl", + kernelFunc: atan4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atan2.js + init_define_BUILD_VERSION(); + var ATAN2 = CHECK_NAN_SNIPPET_BINARY + ` + return atan(a, b); +`; + var ATAN2_PACKED = ` + vec4 result = atan(a, b); + vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); + ` + CHECK_NAN_SNIPPET_BINARY_PACKED + ` + return result; +`; + var atan23 = binaryKernelFunc2({ opSnippet: ATAN2, packedOpSnippet: ATAN2_PACKED }); + var atan2Config2 = { + kernelName: Atan2, + backendName: "webgl", + kernelFunc: atan23 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atanh.js + init_define_BUILD_VERSION(); + var ATANH = CHECK_NAN_SNIPPET + ` + if ((x < -1.0) || (x > 1.0)) return NAN; +return (log(1.0 + x) - log(1.0 - x)) / 2.0;`; + var atanh3 = unaryKernelFunc2({ opSnippet: ATANH }); + var atanhConfig2 = { + kernelName: Atanh, + backendName: "webgl", + kernelFunc: atanh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/pool_gpu.js + init_define_BUILD_VERSION(); + var Pool2DProgram = class { + constructor(convInfo, poolType, computePositions, flattenPositions = false, includeBatchInIndex = false) { + this.variableNames = ["x"]; + if (poolType === "avg" && computePositions) { + throw new Error("Cannot compute positions for average pool."); + } + const filterWidth = convInfo.filterWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + this.outputShape = convInfo.outShape; + const isAvgPool = poolType === "avg"; + const batchFlattenPositionStr = `((batch * ${convInfo.inHeight} + xR) * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + d`; + const flattenPositionStr = `(xR * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + d`; + let initializationValue = "0.0"; + if (!isAvgPool) { + initializationValue = "-1.0 / 1e-20"; + } + if (computePositions) { + const compareOp2 = ">="; + this.userCode = ` + const ivec2 strides = ivec2(${strideHeight}, ${strideWidth}); + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords[0]; + int d = coords[3]; + + ivec2 xRCCorner = coords.yz * strides - pads; + int xRCorner = xRCCorner.x; + int xCCorner = xRCCorner.y; + + // max/min x(?, ?, d) to get y(yR, yC, d). + // ? = to be determined + float minMaxValue = 0.0; + float minMaxValueFound = 0.0; + int minMaxPosition = 0; + float avgValue = 0.0; + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + int xR = xRCorner + wR; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${effectiveFilterWidth}; + wC += ${dilationWidth}) { + int xC = xCCorner + wC; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + float value = getX(batch, xR, xC, d); + + // If a min / max value has already been found, use it. If not, + // use the current value. + float currMinMaxValue = mix( + value, minMaxValue, minMaxValueFound); + if (value ${compareOp2} currMinMaxValue) { + minMaxValue = value; + minMaxValueFound = 1.0; + minMaxPosition = ${flattenPositions ? includeBatchInIndex ? batchFlattenPositionStr : flattenPositionStr : `wR * ${effectiveFilterWidth} + wC`}; + } + } + } + setOutput(float(minMaxPosition)); + } + `; + return; + } + const compareOp = "max"; + let returnValue = `${poolType}(${poolType}(${poolType}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; + if (poolType === "avg") { + returnValue = `avgValue / count`; + } + const filterWidthNearestVec4 = Math.floor(filterWidth / 4) * 4; + const filterWidthVec4Remainder = filterWidth % 4; + const updateSnippet = ` + if (${isAvgPool}) { + avgValue += dot(values, ones); + } else { + minMaxValue = ${compareOp}(values, minMaxValue); + } + `; + this.userCode = ` + const ivec2 strides = ivec2(${strideHeight}, ${strideWidth}); + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + const float initializationValue = ${initializationValue}; + const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); + + float count = 0.0; + + float getValue(int batch, int xR, int xC, int d) { + if (xC < 0 || xC >= ${convInfo.inWidth}) { + return initializationValue; + } + count += 1.0; + return getX(batch, xR, xC, d); + } + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords[0]; + int d = coords[3]; + + ivec2 xRCCorner = coords.yz * strides - pads; + int xRCorner = xRCCorner.x; + int xCCorner = xRCCorner.y; + + // max/min x(?, ?, d) to get y(yR, yC, d). + // ? = to be determined + vec4 minMaxValue = vec4(${initializationValue}); + float avgValue = 0.0; + count = 0.0; + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + int xR = xRCorner + wR; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${filterWidthNearestVec4}; wC += 4) { + int xC = xCCorner + wC * ${dilationWidth}; + + vec4 values = vec4( + getValue(batch, xR, xC, d), + getValue(batch, xR, xC + ${dilationWidth}, d), + getValue(batch, xR, xC + 2 * ${dilationWidth}, d), + getValue(batch, xR, xC + 3 * ${dilationWidth}, d) + ); + + ${updateSnippet} + } + + int xC = xCCorner + ${filterWidthNearestVec4}; + if (${filterWidthVec4Remainder === 1}) { + vec4 values = vec4( + getValue(batch, xR, xC, d), + initializationValue, + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${filterWidthVec4Remainder === 2}) { + vec4 values = vec4( + getValue(batch, xR, xC, d), + getValue(batch, xR, xC + ${dilationWidth}, d), + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${filterWidthVec4Remainder === 3}) { + vec4 values = vec4( + getValue(batch, xR, xC, d), + getValue(batch, xR, xC + ${dilationWidth}, d), + getValue(batch, xR, xC + 2 * ${dilationWidth}, d), + initializationValue + ); + + ${updateSnippet} + } + } + setOutput(${returnValue}); + } + `; + } + }; + var Pool3DProgram = class { + constructor(convInfo, poolType, computePositions, flattenPositions = false, includeBatchInIndex = false) { + this.variableNames = ["x"]; + if (poolType === "avg" && computePositions) { + throw new Error("Cannot compute positions for average pool."); + } + const filterWidth = convInfo.filterWidth; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = convInfo.padInfo.front; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + this.outputShape = convInfo.outShape; + const isAvgPool = poolType === "avg"; + let initializationValue = "0.0"; + if (!isAvgPool) { + initializationValue = "-1.0 / 1e-20"; + } + if (computePositions) { + const compareOp2 = ">="; + this.userCode = ` + const ivec3 strides = + ivec3(${strideDepth}, ${strideHeight}, ${strideWidth}); + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int ch = coords.u; + + ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; + int xDCorner = xCorner.x; + int xRCorner = xCorner.y; + int xCCorner = xCorner.z; + + // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch). + // ? = to be determined + float minMaxValue = 0.0; + float minMaxValueFound = 0.0; + int minMaxPosition = 0; + + for (int wD = 0; wD < ${effectiveFilterDepth}; + wD += ${dilationDepth}) { + int xD = xDCorner + wD; + + if (xD < 0 || xD >= ${convInfo.inDepth}) { + continue; + } + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + int xR = xRCorner + wR; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${effectiveFilterWidth}; + wC += ${dilationWidth}) { + int xC = xCCorner + wC; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + float value = getX(batch, xD, xR, xC, ch); + + // If a min / max value has already been found, use it. If not, + // use the current value. + float currMinMaxValue = mix( + value, minMaxValue, minMaxValueFound); + if (value ${compareOp2} currMinMaxValue) { + minMaxValue = value; + minMaxValueFound = 1.0; + minMaxPosition = ${flattenPositions ? includeBatchInIndex ? `(((batch * ${convInfo.inDepth} + xD) * ${convInfo.inHeight} + xR) * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + ch` : `((xD * ${convInfo.inHeight} + xR) * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + ch` : `wD * ${effectiveFilterHeight} * ${effectiveFilterWidth} + + wR * ${effectiveFilterWidth} + wC`}; + } + } + } + } + setOutput(float(minMaxPosition)); + } + `; + return; + } + const compareOp = "max"; + let returnValue = `${poolType}(${poolType}(${poolType}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; + if (poolType === "avg") { + returnValue = `avgValue / count`; + } + const filterWidthNearestVec4 = Math.floor(filterWidth / 4) * 4; + const filterWidthVec4Remainder = filterWidth % 4; + const updateSnippet = ` + if (${isAvgPool}) { + avgValue += dot(values, ones); + } else { + minMaxValue = ${compareOp}(values, minMaxValue); + } + `; + this.userCode = ` + const ivec3 strides = + ivec3(${strideDepth}, ${strideHeight}, ${strideWidth}); + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + const float initializationValue = ${initializationValue}; + const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); + + float count = 0.0; + + float getValue(int batch, int xD, int xR, int xC, int ch) { + if (xC < 0 || xC >= ${convInfo.inWidth}) { + return initializationValue; + } + count += 1.0; + return getX(batch, xD, xR, xC, ch); + } + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int ch = coords.u; + + ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; + int xDCorner = xCorner.x; + int xRCorner = xCorner.y; + int xCCorner = xCorner.z; + + // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch). + // ? = to be determined + vec4 minMaxValue = vec4(${initializationValue}); + float avgValue = 0.0; + count = 0.0; + + for (int wD = 0; wD < ${effectiveFilterDepth}; + wD += ${dilationDepth}) { + int xD = xDCorner + wD; + + if (xD < 0 || xD >= ${convInfo.inDepth}) { + continue; + } + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + int xR = xRCorner + wR; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${filterWidthNearestVec4}; wC += 4) { + int xC = xCCorner + wC * ${dilationWidth}; + + vec4 values = vec4( + getValue(batch, xD, xR, xC, ch), + getValue(batch, xD, xR, xC + ${dilationWidth}, ch), + getValue(batch, xD, xR, xC + 2 * ${dilationWidth}, ch), + getValue(batch, xD, xR, xC + 3 * ${dilationWidth}, ch) + ); + + ${updateSnippet} + } + + int xC = xCCorner + ${filterWidthNearestVec4}; + if (${filterWidthVec4Remainder === 1}) { + vec4 values = vec4( + getValue(batch, xD, xR, xC, ch), + initializationValue, + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${filterWidthVec4Remainder === 2}) { + vec4 values = vec4( + getValue(batch, xD, xR, xC, ch), + getValue(batch, xD, xR, xC + ${dilationWidth}, ch), + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${filterWidthVec4Remainder === 3}) { + vec4 values = vec4( + getValue(batch, xD, xR, xC, ch), + getValue(batch, xD, xR, xC + ${dilationWidth}, ch), + getValue(batch, xD, xR, xC + 2 * ${dilationWidth}, ch), + initializationValue + ); + + ${updateSnippet} + } + } + setOutput(${returnValue}); + } + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool.js + function avgPool3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + assertNotComplex2(x, "avgPool"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = 1; + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 && util_exports.arraysEqual(convInfo.inShape, convInfo.outShape)) { + return identity2({ inputs: { x }, backend: backend2 }); + } + const avgPoolProgram = new Pool2DProgram(convInfo, "avg", false); + return backend2.runWebGLProgram(avgPoolProgram, [x], "float32"); + } + var avgPoolConfig2 = { + kernelName: AvgPool, + backendName: "webgl", + kernelFunc: avgPool3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool3D.js + init_define_BUILD_VERSION(); + function avgPool3D2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { filterSize, strides, pad: pad3, dimRoundingMode, dataFormat } = attrs; + const dilations = [1, 1, 1]; + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode, dataFormat); + const avgPoolProgram = new Pool3DProgram(convInfo, "avg", false); + return backend2.runWebGLProgram(avgPoolProgram, [x], "float32"); + } + var avgPool3DConfig2 = { + kernelName: AvgPool3D, + backendName: "webgl", + kernelFunc: avgPool3D2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool3DGrad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/avg_pool_backprop_gpu.js + init_define_BUILD_VERSION(); + var AvgPool2DBackpropProgram = class { + constructor(convInfo) { + this.variableNames = ["dy"]; + this.outputShape = convInfo.inShape; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const avgMultiplier = 1 / (filterHeight * filterWidth); + this.userCode = ` + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + const float avgMultiplier = float(${avgMultiplier}); + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + + ivec2 dyRCCorner = coords.yz - pads; + int dyRCorner = dyRCCorner.x; + int dyCCorner = dyRCCorner.y; + + // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + for (int wC = 0; wC < ${effectiveFilterWidth}; + wC+= ${dilationWidth}) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + float dyValue = getDy(b, idyR, idyC, d); + + dotProd += dyValue * avgMultiplier; + } + } + setOutput(dotProd); + } + `; + } + }; + var AvgPool3DBackpropProgram = class { + constructor(convInfo) { + this.variableNames = ["dy"]; + this.outputShape = convInfo.inShape; + const filterDepth = convInfo.filterDepth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const avgMultiplier = 1 / (filterDepth * filterHeight * filterWidth); + this.userCode = ` + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + const float avgMultiplier = float(${avgMultiplier}); + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int ch = coords.u; + + ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; + int dyDCorner = dyCorner.x; + int dyRCorner = dyCorner.y; + int dyCCorner = dyCorner.z; + + // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get + // dx(xD, xR, xC, ch). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + + for (int wD = 0; wD < ${effectiveFilterDepth}; + wD += ${dilationDepth}) { + float dyD = float(dyDCorner + wD) / ${strideDepth}.0; + + if (dyD < 0.0 || dyD >= ${convInfo.outDepth}.0 || fract(dyD) > 0.0) { + continue; + } + int idyD = int(dyD); + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || + fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + for (int wC = 0; wC < ${effectiveFilterWidth}; + wC += ${dilationWidth}) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + float dyValue = getDy(batch, idyD, idyR, idyC, ch); + + dotProd += dyValue * avgMultiplier; + } + } + } + setOutput(dotProd); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool3DGrad.js + function avgPool3DGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const x = input2; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = [1, 1, 1]; + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + const avgPoolBackpropProgram = new AvgPool3DBackpropProgram(convInfo); + return backend2.runWebGLProgram(avgPoolBackpropProgram, [dy], x.dtype); + } + var avgPool3DGradConfig3 = { + kernelName: AvgPool3DGrad, + backendName: "webgl", + kernelFunc: avgPool3DGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPoolGrad.js + init_define_BUILD_VERSION(); + function avgPoolGrad3(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const x = input2; + assertNotComplex2([dy, input2], "avgPoolGrad"); + const { filterSize, strides, pad: pad3 } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3); + const avgPoolBackpropProgram = new AvgPool2DBackpropProgram(convInfo); + return backend2.runWebGLProgram(avgPoolBackpropProgram, [dy], x.dtype); + } + var avgPoolGradConfig3 = { + kernelName: AvgPoolGrad, + backendName: "webgl", + kernelFunc: avgPoolGrad3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchMatMul.js + init_define_BUILD_VERSION(); + function batchMatMul2(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b } = inputs; + const { transposeA, transposeB } = attrs; + return batchMatMulImpl({ a, b, transposeA, transposeB, backend: backend2 }); + } + var batchMatMulConfig2 = { + kernelName: BatchMatMul, + backendName: "webgl", + kernelFunc: batchMatMul2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchNorm.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/batchnorm_gpu.js + init_define_BUILD_VERSION(); + var BatchNormProgram = class { + constructor(xShape, meanShape, varianceShape, offsetShape, scaleShape, varianceEpsilon) { + this.outputShape = []; + this.variableNames = ["x", "mean", "variance"]; + backend_util_exports.assertAndGetBroadcastShape(xShape, meanShape); + backend_util_exports.assertAndGetBroadcastShape(xShape, varianceShape); + let offsetSnippet = "0.0"; + if (offsetShape != null) { + backend_util_exports.assertAndGetBroadcastShape(xShape, offsetShape); + this.variableNames.push("offset"); + offsetSnippet = "getOffsetAtOutCoords()"; + } + let scaleSnippet = "1.0"; + if (scaleShape != null) { + backend_util_exports.assertAndGetBroadcastShape(xShape, scaleShape); + this.variableNames.push("scale"); + scaleSnippet = "getScaleAtOutCoords()"; + } + this.outputShape = xShape; + this.userCode = ` + void main() { + float x = getXAtOutCoords(); + float mean = getMeanAtOutCoords(); + float variance = getVarianceAtOutCoords(); + float offset = ${offsetSnippet}; + float scale = ${scaleSnippet}; + float inv = scale * inversesqrt(variance + float(${varianceEpsilon})); + setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/batchnorm_packed_gpu.js + init_define_BUILD_VERSION(); + var BatchNormPackedProgram = class { + constructor(xShape, meanShape, varianceShape, offsetShape, scaleShape, varianceEpsilon) { + this.packedInputs = true; + this.packedOutput = true; + this.variableNames = ["x", "mean", "variance"]; + backend_util_exports.assertAndGetBroadcastShape(xShape, meanShape); + backend_util_exports.assertAndGetBroadcastShape(xShape, varianceShape); + let offsetSnippet = "vec4(0.0)"; + if (offsetShape != null) { + backend_util_exports.assertAndGetBroadcastShape(xShape, offsetShape); + this.variableNames.push("offset"); + offsetSnippet = "getOffsetAtOutCoords()"; + } + let scaleSnippet = "vec4(1.0)"; + if (scaleShape != null) { + backend_util_exports.assertAndGetBroadcastShape(xShape, scaleShape); + this.variableNames.push("scale"); + scaleSnippet = "getScaleAtOutCoords()"; + } + this.outputShape = xShape; + this.userCode = ` + void main() { + vec4 offset = ${offsetSnippet}; + vec4 scale = ${scaleSnippet}; + + vec4 x = getXAtOutCoords(); + vec4 mean = getMeanAtOutCoords(); + vec4 variance = getVarianceAtOutCoords(); + + vec4 inv = scale * inversesqrt(variance + vec4(${varianceEpsilon})); + + setOutput((x - mean) * inv + offset); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchNorm.js + var batchNorm3 = ({ inputs, backend: backend2, attrs }) => { + const { x, mean: mean4, variance, offset, scale: scale2 } = inputs; + util_exports.assert(mean4.shape.length === variance.shape.length, () => "Batch normalization gradient requires mean and variance to have equal ranks."); + util_exports.assert(offset == null || mean4.shape.length === offset.shape.length, () => "Batch normalization gradient requires mean and offset to have equal ranks."); + util_exports.assert(scale2 == null || mean4.shape.length === scale2.shape.length, () => "Batch normalization gradient requires mean and scale to have equal ranks."); + let { varianceEpsilon } = attrs; + if (varianceEpsilon == null) { + varianceEpsilon = 1e-3; + } + const finalInputs = [x, mean4, variance]; + let offsetShape = null; + if (offset != null) { + offsetShape = offset.shape; + finalInputs.push(offset); + } + let scaleShape = null; + if (scale2 != null) { + scaleShape = scale2.shape; + finalInputs.push(scale2); + } + const program = env().getBool("WEBGL_PACK_NORMALIZATION") ? new BatchNormPackedProgram(x.shape, mean4.shape, variance.shape, offsetShape, scaleShape, varianceEpsilon) : new BatchNormProgram(x.shape, mean4.shape, variance.shape, offsetShape, scaleShape, varianceEpsilon); + const output = backend2.runWebGLProgram(program, finalInputs, finalInputs[0].dtype); + return output; + }; + var batchNormConfig2 = { + kernelName: FusedBatchNorm, + backendName: "webgl", + kernelFunc: batchNorm3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchToSpaceND.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Slice.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/slice_gpu.js + init_define_BUILD_VERSION(); + var SliceProgram = class { + constructor(destSize) { + this.variableNames = ["source"]; + this.outputShape = destSize; + this.rank = destSize.length; + const dtype = getCoordsDataType(this.rank); + this.customUniforms = [{ name: "start", arrayIndex: this.rank, type: "int" }]; + const sourceCoords = getCoords(this.rank); + let body; + const coordSum = destSize.map((_, i) => { + return `sourceLoc.${coords[i]} = start[${i}] + coords.${coords[i]};`; + }); + body = ` + ${dtype} sourceLoc; + ${dtype} coords = getOutputCoords(); + ${coordSum.join("\n")} + `; + this.userCode = ` + void main() { + ${body} + setOutput(getSource(${sourceCoords})); + } + `; + } + }; + var coords = ["x", "y", "z", "w", "u", "v"]; + function getCoords(rank) { + if (rank === 1) { + return "sourceLoc"; + } else if (rank <= 6) { + return coords.slice(0, rank).map((x) => "sourceLoc." + x).join(","); + } else { + throw Error(`Slicing for rank ${rank} is not yet supported`); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/slice_packed_gpu.js + init_define_BUILD_VERSION(); + var SlicePackedProgram = class { + constructor(destSize) { + this.variableNames = ["source"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = destSize; + this.rank = destSize.length; + this.customUniforms = [{ name: "start", arrayIndex: this.rank, type: "int" }]; + const dtype = getCoordsDataType(this.rank); + const coords2 = getChannels("coords", this.rank); + const sourceLoc = getChannels("sourceLoc", this.rank); + const innerDims = this.rank === 1 ? "sourceLoc" : `vec2(${sourceLoc.slice(-2).join()})`; + const getChannel = `getChannel(getSource(${sourceLoc.join()}), ${innerDims})`; + const upperRow = ` + result.x = ${getChannel}; + if (++${coords2[this.rank - 1]} < ${destSize[this.rank - 1]}) { + ++${sourceLoc[this.rank - 1]}; + result.y = ${getChannel}; + --${sourceLoc[this.rank - 1]}; + } + `; + const lowerRow = this.rank === 1 ? "" : ` + --${coords2[this.rank - 1]}; + if (++${coords2[this.rank - 2]} < ${destSize[this.rank - 2]}) { + ++${sourceLoc[this.rank - 2]}; + result.z = ${getChannel}; + if (++${coords2[this.rank - 1]} < ${destSize[this.rank - 1]}) { + ++${sourceLoc[this.rank - 1]}; + result.w = ${getChannel}; + } + } + `; + const sourceLocSetup = this.rank <= 4 ? `sourceLoc = coords + + ${dtype}(${destSize.map((_, i) => `start[${i}]`).join()});` : destSize.map((_, i) => `${sourceLoc[i]} = ${coords2[i]} + start[${i}];`).join("\n"); + this.userCode = ` + void main() { + ${dtype} coords = getOutputCoords(); + ${dtype} sourceLoc; + ${sourceLocSetup} + vec4 result = vec4(0.); + ${upperRow} + ${lowerRow} + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Slice.js + function shallowSlice(x, begin, size, backend2) { + const xTexData = backend2.texData.get(x.dataId); + const t = backend2.makeTensorInfo(size, x.dtype); + const newTexData = backend2.texData.get(t.dataId); + Object.assign(newTexData, xTexData); + newTexData.refCount = 1; + newTexData.shape = size; + newTexData.dtype = x.dtype; + let flatOffset = slice_util_exports.computeFlatOffset(begin, util_exports.computeStrides(x.shape)); + if (xTexData.slice) { + flatOffset += xTexData.slice.flatOffset; + } + newTexData.slice = { + flatOffset, + origDataId: xTexData.slice && xTexData.slice.origDataId || x.dataId + }; + const refCount = backend2.dataRefCount.get(newTexData.slice.origDataId) || 1; + backend2.dataRefCount.set(newTexData.slice.origDataId, refCount + 1); + return t; + } + function slice3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { begin, size } = attrs; + const [$begin, $size] = slice_util_exports.parseSliceParams(x, begin, size); + slice_util_exports.assertParamsValid(x, $begin, $size); + if (util_exports.sizeFromShape($size) === 0) { + return backend2.makeTensorInfo($size, x.dtype, []); + } + if (backend2.shouldExecuteOnCPU([x]) || x.dtype === "string") { + const xTexData = backend2.texData.get(x.dataId); + const outValues = sliceImplCPU(xTexData.values, $begin, $size, x.shape, x.dtype); + return backend2.makeTensorInfo($size, x.dtype, outValues); + } + const { isPacked } = backend2.texData.get(x.dataId); + const isContinous = slice_util_exports.isSliceContinous(x.shape, $begin, $size); + if (isPacked || !isContinous) { + const program = env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new SlicePackedProgram($size) : new SliceProgram($size); + const customValues = [$begin]; + return backend2.runWebGLProgram(program, [x], x.dtype, customValues); + } + backend2.uploadToGPU(x.dataId); + return shallowSlice(x, $begin, $size, backend2); + } + var sliceConfig2 = { + kernelName: Slice, + backendName: "webgl", + kernelFunc: slice3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchToSpaceND.js + var batchToSpaceND3 = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, crops } = attrs; + util_exports.assert(x.shape.length <= 4, () => "batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"); + const prod5 = blockShape.reduce((a, b) => a * b); + const reshaped = backend_util_exports.getReshaped(x.shape, blockShape, prod5); + const permuted = backend_util_exports.getPermuted(reshaped.length, blockShape.length); + const reshapedPermuted = backend_util_exports.getReshapedPermuted(x.shape, blockShape, prod5); + const sliceBeginCoords = backend_util_exports.getSliceBeginCoords(crops, blockShape.length); + const sliceSize = backend_util_exports.getSliceSize(reshapedPermuted, crops, blockShape.length); + const toDispose = []; + const reshapedIntermediate = reshape3({ inputs: { x }, backend: backend2, attrs: { shape: reshaped } }); + const transposedIntermediate = transpose3({ inputs: { x: reshapedIntermediate }, backend: backend2, attrs: { perm: permuted } }); + const reshapedIntermediate2 = reshape3({ + inputs: { x: transposedIntermediate }, + backend: backend2, + attrs: { shape: reshapedPermuted } + }); + const sliced = slice3({ + inputs: { x: reshapedIntermediate2 }, + backend: backend2, + attrs: { begin: sliceBeginCoords, size: sliceSize } + }); + toDispose.push(reshapedIntermediate); + toDispose.push(transposedIntermediate); + toDispose.push(reshapedIntermediate2); + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return sliced; + }; + var batchToSpaceNDConfig2 = { + kernelName: BatchToSpaceND, + backendName: "webgl", + kernelFunc: batchToSpaceND3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Bincount.js + init_define_BUILD_VERSION(); + function bincount3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, weights } = inputs; + const { size } = attrs; + const xVals = backend2.readSync(x.dataId); + const weightsVals = backend2.readSync(weights.dataId); + const outVals = bincountImplCPU(xVals, weightsVals, weights.dtype, weights.shape, size); + return backend2.makeTensorInfo([size], weights.dtype, outVals); + } + var bincountConfig2 = { + kernelName: Bincount, + backendName: "webgl", + kernelFunc: bincount3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BroadcastArgs.js + init_define_BUILD_VERSION(); + function broadcastArgs2(args) { + const { inputs, backend: backend2 } = args; + const { s0, s1 } = inputs; + const s0Vals = backend2.readSync(s0.dataId); + const s1Vals = backend2.readSync(s1.dataId); + const broadcastShape = backend_util_exports.assertAndGetBroadcastShape(Array.from(s0Vals), Array.from(s1Vals)); + return backend2.makeTensorInfo([broadcastShape.length], "int32", Int32Array.from(broadcastShape)); + } + var broadcastArgsConfig2 = { + kernelName: BroadcastArgs, + backendName: "webgl", + kernelFunc: broadcastArgs2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cast.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NotEqual.js + init_define_BUILD_VERSION(); + var NOT_EQUAL = `return float(a != b);`; + var notEqual3 = binaryKernelFunc2({ opSnippet: NOT_EQUAL, cpuKernelImpl: notEqualImplCPU, dtype: "bool" }); + var notEqualConfig2 = { + kernelName: NotEqual, + backendName: "webgl", + kernelFunc: notEqual3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Real.js + init_define_BUILD_VERSION(); + function real3(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const inputData = backend2.texData.get(input2.dataId); + return identity2({ inputs: { x: inputData.complexTensorInfos.real }, backend: backend2 }); + } + var realConfig2 = { + kernelName: Real, + backendName: "webgl", + kernelFunc: real3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/int.js + init_define_BUILD_VERSION(); + var TO_INT = `return float(int(x));`; + function int(input2, backend2) { + const program = new UnaryOpProgram(input2.shape, TO_INT); + const output = backend2.runWebGLProgram(program, [input2], "int32"); + return { dataId: output.dataId, shape: output.shape, dtype: output.dtype }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cast.js + function cast4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { dtype } = attrs; + if (dtype === "complex64") { + if (x.dtype === "complex64") { + return identity2({ inputs: { x }, backend: backend2 }); + } + const zerosTensor = zeros(x.shape); + const floatX = cast4({ inputs: { x }, backend: backend2, attrs: { dtype: "float32" } }); + const result = complex3({ inputs: { real: floatX, imag: zerosTensor }, backend: backend2 }); + zerosTensor.dispose(); + backend2.disposeIntermediateTensorInfo(floatX); + return result; + } + if (x.dtype === "complex64") { + const realPart = real3({ inputs: { input: x }, backend: backend2 }); + const result = cast4({ inputs: { x: realPart }, backend: backend2, attrs: { dtype } }); + backend2.disposeIntermediateTensorInfo(realPart); + return result; + } + if (!util_exports.hasEncodingLoss(x.dtype, dtype)) { + const result = identity2({ inputs: { x }, backend: backend2 }); + return { dataId: result.dataId, shape: result.shape, dtype }; + } + if (dtype === "int32") { + return int(x, backend2); + } + if (dtype === "bool") { + const zerosTensorInfo = backend2.makeTensorInfo([], "bool", util_exports.getTypedArrayFromDType("bool", 1)); + const binaryInputs = { a: x, b: zerosTensorInfo }; + const result = notEqual3({ inputs: binaryInputs, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(zerosTensorInfo); + return result; + } + throw new Error(`Error in Cast: failed to cast ${x.dtype} to ${dtype}`); + } + var castConfig2 = { + kernelName: Cast, + backendName: "webgl", + kernelFunc: cast4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Ceil.js + init_define_BUILD_VERSION(); + var CEIL = `return ceil(x);`; + var ceil3 = unaryKernelFunc2({ opSnippet: CEIL, packedOpSnippet: CEIL, cpuKernelImpl: ceilImplCPU }); + var ceilConfig2 = { + kernelName: Ceil, + backendName: "webgl", + kernelFunc: ceil3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ClipByValue.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/clip_gpu.js + init_define_BUILD_VERSION(); + var ClipProgram = class { + constructor(aShape) { + this.variableNames = ["A"]; + this.customUniforms = [ + { name: "minVal", type: "float" }, + { name: "maxVal", type: "float" } + ]; + this.outputShape = aShape; + this.userCode = ` + + void main() { + float value = getAAtOutCoords(); + if (isnan(value)) { + setOutput(value); + return; + } + + setOutput(clamp(value, minVal, maxVal)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/clip_packed_gpu.js + init_define_BUILD_VERSION(); + var ClipPackedProgram = class { + constructor(aShape) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.customUniforms = [ + { name: "minVal", type: "float" }, + { name: "maxVal", type: "float" } + ]; + this.outputShape = aShape; + this.userCode = ` + void main() { + vec4 value = getAAtOutCoords(); + + if (any(isnan(value))) { + setOutput(value); + return; + } + + setOutput(clamp(value, vec4(minVal), vec4(maxVal))); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ClipByValue.js + function clipByValue3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { clipValueMin, clipValueMax } = attrs; + let program; + if (env().getBool("WEBGL_PACK_CLIP")) { + program = new ClipPackedProgram(x.shape); + } else { + program = new ClipProgram(x.shape); + } + const customValues = [[clipValueMin], [clipValueMax]]; + return backend2.runWebGLProgram(program, [x], x.dtype, customValues); + } + var clipByValueConfig2 = { + kernelName: ClipByValue, + backendName: "webgl", + kernelFunc: clipByValue3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ComplexAbs.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/complex_abs_gpu.js + init_define_BUILD_VERSION(); + var ComplexAbsProgram = class { + constructor(shape) { + this.variableNames = ["real", "imag"]; + this.outputShape = shape; + this.userCode = ` + void main() { + float re = abs(getRealAtOutCoords()); + float im = abs(getImagAtOutCoords()); + float mx = max(re, im); + + // sadly the length function in glsl is not underflow-safe + // (at least not on Intel GPUs). So the safe solution is + // to ensure underflow-safety in all cases. + setOutput( + mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) + ); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ComplexAbs.js + function makeComplexComponentTensorInfo(complexTensor, complexPart) { + return { + dataId: complexPart.dataId, + dtype: complexPart.dtype, + shape: complexTensor.shape + }; + } + function complexAbs2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + const xData = backend2.texData.get(x.dataId); + const program = new ComplexAbsProgram(x.shape); + const programInputs = [ + makeComplexComponentTensorInfo(x, xData.complexTensorInfos.real), + makeComplexComponentTensorInfo(x, xData.complexTensorInfos.imag) + ]; + return backend2.runWebGLProgram(program, programInputs, programInputs[0].dtype); + } + var complexAbsConfig2 = { + kernelName: ComplexAbs, + backendName: "webgl", + kernelFunc: complexAbs2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/concat_gpu.js + init_define_BUILD_VERSION(); + var ConcatProgram = class { + constructor(shapes) { + this.outputShape = []; + this.outputShape = backend_util_exports.computeOutShape(shapes, 1); + this.variableNames = shapes.map((_, i) => `T${i}`); + const offsets = new Array(shapes.length - 1); + offsets[0] = shapes[0][1]; + for (let i = 1; i < offsets.length; i++) { + offsets[i] = offsets[i - 1] + shapes[i][1]; + } + const snippets = [`if (yC < ${offsets[0]}) setOutput(getT0(yR, yC));`]; + for (let i = 1; i < offsets.length; i++) { + const shift = offsets[i - 1]; + snippets.push(`else if (yC < ${offsets[i]}) setOutput(getT${i}(yR, yC-${shift}));`); + } + const lastIndex = offsets.length; + const lastShift = offsets[offsets.length - 1]; + snippets.push(`else setOutput(getT${lastIndex}(yR, yC-${lastShift}));`); + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + int yR = coords.x; + int yC = coords.y; + + ${snippets.join("\n ")} + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/concat_packed_gpu.js + init_define_BUILD_VERSION(); + var ConcatPackedProgram = class { + constructor(shapes, axis) { + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = []; + this.outputShape = backend_util_exports.computeOutShape(shapes, axis); + const shape = this.outputShape; + const rank = shape.length; + const dtype = getCoordsDataType(rank); + const coords2 = getChannels("coords", rank); + const channels = ["x", "y", "z", "w", "u", "v"].slice(0, rank); + this.variableNames = shapes.map((_, i) => `T${i}`); + const offsets = new Array(shapes.length - 1); + offsets[0] = shapes[0][axis]; + for (let i = 1; i < offsets.length; i++) { + offsets[i] = offsets[i - 1] + shapes[i][axis]; + } + const channel = channels[axis]; + const lastChannels = channels.slice(-2); + const allChannels = channels.join(); + let getValueSnippet = `if (${channel} < ${offsets[0]}) { + return getChannel( + getT0(${allChannels}), vec2(${lastChannels.join()})); + }`; + for (let i = 1; i < offsets.length; i++) { + const shift2 = offsets[i - 1]; + getValueSnippet += ` + if (${channel} < ${offsets[i]} && ${channel} >= ${offsets[i - 1]}) { + return getChannel( + getT${i}(${shiftedChannels(channels, channel, shift2)}), + vec2(${shiftedChannels(lastChannels, channel, shift2)})); + }`; + } + const lastIndex = offsets.length; + const shift = offsets[offsets.length - 1]; + getValueSnippet += ` + return getChannel( + getT${lastIndex}(${shiftedChannels(channels, channel, shift)}), + vec2(${shiftedChannels(lastChannels, channel, shift)}));`; + this.userCode = ` + float getValue(${channels.map((x) => "int " + x)}) { + ${getValueSnippet} + } + + void main() { + ${dtype} coords = getOutputCoords(); + vec4 result = vec4(getValue(${coords2}), 0., 0., 0.); + + ${coords2[rank - 1]} = ${coords2[rank - 1]} + 1; + if (${coords2[rank - 1]} < ${shape[rank - 1]}) { + result.g = getValue(${coords2}); + } + + ${coords2[rank - 2]} = ${coords2[rank - 2]} + 1; + if (${coords2[rank - 2]} < ${shape[rank - 2]}) { + result.a = getValue(${coords2}); + } + + ${coords2[rank - 1]} = ${coords2[rank - 1]} - 1; + if (${coords2[rank - 2]} < ${shape[rank - 2]} && + ${coords2[rank - 1]} < ${shape[rank - 1]}) { + result.b = getValue(${coords2}); + } + setOutput(result); + } + `; + } + }; + function shiftedChannels(channels, channel, shift) { + const channelIdx = channels.indexOf(channel); + const res = channels.map((c, idx) => { + if (idx === channelIdx) { + return `${c} - ${shift}`; + } else { + return c; + } + }); + return res.join(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Imag.js + init_define_BUILD_VERSION(); + function imag3(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const inputData = backend2.texData.get(input2.dataId); + return identity2({ inputs: { x: inputData.complexTensorInfos.imag }, backend: backend2 }); + } + var imagConfig2 = { + kernelName: Imag, + backendName: "webgl", + kernelFunc: imag3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat_impl.js + function concatImpl2(inputs, axis, backend2) { + const dtype = inputs[0].dtype; + if (dtype === "complex64") { + const reals = inputs.map((t) => real3({ inputs: { input: t }, backend: backend2 })); + const imags = inputs.map((t) => imag3({ inputs: { input: t }, backend: backend2 })); + const realConcated = concatImpl2(reals, axis, backend2); + const imagConcated = concatImpl2(imags, axis, backend2); + const result2 = complex3({ inputs: { real: realConcated, imag: imagConcated }, backend: backend2 }); + reals.forEach((r) => backend2.disposeIntermediateTensorInfo(r)); + imags.forEach((i) => backend2.disposeIntermediateTensorInfo(i)); + backend2.disposeIntermediateTensorInfo(realConcated); + backend2.disposeIntermediateTensorInfo(imagConcated); + return result2; + } + let runOnCpu = backend2.shouldExecuteOnCPU(inputs); + if (dtype === "string") { + runOnCpu = true; + } + if (runOnCpu) { + const tensors2D2 = inputs.map((t) => { + const innerSize = util_exports.sizeFromShape(t.shape.slice(axis)); + const shape = [-1, innerSize]; + return reshape3({ inputs: { x: t }, backend: backend2, attrs: { shape } }); + }); + const inputsValShapes = tensors2D2.map((t) => { + return { vals: backend2.readSync(t.dataId), shape: t.shape }; + }); + const outShape2 = backend_util_exports.computeOutShape(tensors2D2.map((t) => t.shape), 1); + const simplyConcat = tensors2D2[0].shape[0] === 1; + const outVals = concatImplCPU(inputsValShapes, outShape2, dtype, simplyConcat); + const finalOutShape = backend_util_exports.computeOutShape(inputs.map((t) => t.shape), axis); + const outInfo = backend2.makeTensorInfo(finalOutShape, dtype, outVals); + tensors2D2.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return outInfo; + } + const maxTexturesInShader = env().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER"); + if (inputs.length > maxTexturesInShader) { + const reducedInputs = []; + for (let i = 0; i < inputs.length; i += maxTexturesInShader) { + const subArray = inputs.slice(i, i + maxTexturesInShader); + reducedInputs.push(concatImpl2(subArray, axis, backend2)); + } + const result2 = concatImpl2(reducedInputs, axis, backend2); + for (const i of reducedInputs) { + backend2.disposeIntermediateTensorInfo(i); + } + return result2; + } + if (env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") && inputs[0].shape.length > 1) { + const program2 = new ConcatPackedProgram(inputs.map((t) => t.shape), axis); + return backend2.runWebGLProgram(program2, inputs, dtype); + } + const { tensors2D, outShape } = computeTensors2D(inputs, axis, backend2); + const program = new ConcatProgram(tensors2D.map((t) => t.shape)); + const result = backend2.runWebGLProgram(program, tensors2D, dtype); + tensors2D.forEach((r) => backend2.disposeIntermediateTensorInfo(r)); + const reshapedResult = reshape3({ inputs: { x: result }, attrs: { shape: outShape }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(result); + return reshapedResult; + } + function computeTensors2D(inputs, axis, backend2) { + const outShape = backend_util_exports.computeOutShape(inputs.map((t) => t.shape), axis); + const tensors2D = inputs.map((x) => reshape3({ + inputs: { x }, + attrs: { shape: [-1, util_exports.sizeFromShape(x.shape.slice(axis))] }, + backend: backend2 + })); + return { tensors2D, outShape }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat.js + function concat3(args) { + const { inputs, backend: backend2, attrs } = args; + const { axis } = attrs; + const $axis = util_exports.parseAxisParam(axis, inputs[0].shape)[0]; + const outShape = backend_util_exports.computeOutShape(inputs.map((t) => t.shape), $axis); + if (util_exports.sizeFromShape(outShape) === 0) { + return backend2.makeTensorInfo(outShape, inputs[0].dtype, []); + } + const $inputs = inputs.filter((t) => util_exports.sizeFromShape(t.shape) > 0); + if ($inputs.length === 1) { + return identity2({ inputs: { x: $inputs[0] }, backend: backend2 }); + } + const shapes = $inputs.map((t) => t.shape); + backend_util_exports.assertParamsConsistent(shapes, $axis); + return concatImpl2($inputs, $axis, backend2); + } + var concatConfig2 = { + kernelName: Concat, + backendName: "webgl", + kernelFunc: concat3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_gpu.js + init_define_BUILD_VERSION(); + var Conv2DProgram = class { + constructor(convInfo, addBias = false, activation = null, hasPreluActivationWeights = false, hasLeakyreluAlpha = false) { + this.variableNames = ["x", "W"]; + this.outputShape = convInfo.outShape; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const inputDepthNearestVec4 = Math.floor(convInfo.inChannels / 4) * 4; + const inputDepthVec4Remainder = convInfo.inChannels % 4; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const rowDim = isChannelsLast ? 1 : 2; + const colDim = isChannelsLast ? 2 : 3; + const channelDim = isChannelsLast ? 3 : 1; + let activationSnippet = "", applyActivationSnippet = ""; + if (activation) { + if (hasPreluActivationWeights) { + activationSnippet = `float activation(float a) { + float b = getPreluActivationWeightsAtOutCoords(); + ${activation} + }`; + } else if (hasLeakyreluAlpha) { + activationSnippet = `float activation(float a) { + float b = getLeakyreluAlphaAtOutCoords(); + ${activation} + }`; + } else { + activationSnippet = ` + float activation(float x) { + ${activation} + } + `; + } + applyActivationSnippet = `result = activation(result);`; + } + const addBiasSnippet = addBias ? "result += getBiasAtOutCoords();" : ""; + if (addBias) { + this.variableNames.push("bias"); + } + if (hasPreluActivationWeights) { + this.variableNames.push("preluActivationWeights"); + } + if (hasLeakyreluAlpha) { + this.variableNames.push("leakyreluAlpha"); + } + this.userCode = ` + ${activationSnippet} + + const ivec2 strides = ivec2(${strideHeight}, ${strideWidth}); + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords[0]; + int d2 = coords[${channelDim}]; + + ivec2 xRCCorner = + ivec2(coords[${rowDim}], coords[${colDim}]) * strides - pads; + int xRCorner = xRCCorner.x; + int xCCorner = xRCCorner.y; + + // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + for (int wR = 0; wR < ${filterHeight}; wR++) { + int xR = xRCorner + wR * ${dilationHeight}; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${filterWidth}; wC++) { + int xC = xCCorner + wC * ${dilationWidth}; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + for (int d1 = 0; d1 < ${inputDepthNearestVec4}; d1 += 4) { + vec4 wValues = vec4( + getW(wR, wC, d1, d2), + getW(wR, wC, d1 + 1, d2), + getW(wR, wC, d1 + 2, d2), + getW(wR, wC, d1 + 3, d2) + ); + + if (${isChannelsLast}) { + vec4 xValues = vec4( + getX(batch, xR, xC, d1), + getX(batch, xR, xC, d1 + 1), + getX(batch, xR, xC, d1 + 2), + getX(batch, xR, xC, d1 + 3) + ); + dotProd += dot(xValues, wValues); + } else { + vec4 xValues = vec4( + getX(batch, d1, xR, xC), + getX(batch, d1 + 1, xR, xC), + getX(batch, d1 + 2, xR, xC), + getX(batch, d1 + 3, xR, xC) + ); + dotProd += dot(xValues, wValues); + } + } + + if (${inputDepthVec4Remainder === 1}) { + + if (${isChannelsLast}) { + dotProd += + getX(batch, xR, xC, ${inputDepthNearestVec4}) * + getW(wR, wC, ${inputDepthNearestVec4}, d2); + } else { + dotProd += + getX(batch, ${inputDepthNearestVec4}, xR, xC) * + getW(wR, wC, ${inputDepthNearestVec4}, d2); + } + + } else if (${inputDepthVec4Remainder === 2}) { + vec2 wValues = vec2( + getW(wR, wC, ${inputDepthNearestVec4}, d2), + getW(wR, wC, ${inputDepthNearestVec4} + 1, d2) + ); + + if (${isChannelsLast}) { + vec2 xValues = vec2( + getX(batch, xR, xC, ${inputDepthNearestVec4}), + getX(batch, xR, xC, ${inputDepthNearestVec4} + 1) + ); + dotProd += dot(xValues, wValues); + } else { + vec2 xValues = vec2( + getX(batch, ${inputDepthNearestVec4}, xR, xC), + getX(batch, ${inputDepthNearestVec4} + 1, xR, xC) + ); + dotProd += dot(xValues, wValues); + } + + } else if (${inputDepthVec4Remainder === 3}) { + vec3 wValues = vec3( + getW(wR, wC, ${inputDepthNearestVec4}, d2), + getW(wR, wC, ${inputDepthNearestVec4} + 1, d2), + getW(wR, wC, ${inputDepthNearestVec4} + 2, d2) + ); + + if (${isChannelsLast}) { + vec3 xValues = vec3( + getX(batch, xR, xC, ${inputDepthNearestVec4}), + getX(batch, xR, xC, ${inputDepthNearestVec4} + 1), + getX(batch, xR, xC, ${inputDepthNearestVec4} + 2) + ); + dotProd += dot(xValues, wValues); + } else { + vec3 xValues = vec3( + getX(batch, ${inputDepthNearestVec4}, xR, xC), + getX(batch, ${inputDepthNearestVec4} + 1, xR, xC), + getX(batch, ${inputDepthNearestVec4} + 2, xR, xC) + ); + dotProd += dot(xValues, wValues); + } + + } + } + } + + float result = dotProd; + ${addBiasSnippet} + ${applyActivationSnippet} + setOutput(result); + } + `; + } + }; + var Conv3DProgram = class { + constructor(convInfo) { + this.variableNames = ["x", "W"]; + this.outputShape = convInfo.outShape; + const padFront = convInfo.padInfo.front; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const filterDepth = convInfo.filterDepth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const inputDepthNearestVec4 = Math.floor(convInfo.inChannels / 4) * 4; + const inputDepthVec4Remainder = convInfo.inChannels % 4; + this.userCode = ` + const ivec3 strides = ivec3(${strideDepth}, ${strideHeight}, ${strideWidth}); + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int d2 = coords.u; + + ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; + int xFCorner = xFRCCorner.x; + int xRCorner = xFRCCorner.y; + int xCCorner = xFRCCorner.z; + + // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get + // y(yF, yR, yC, d2). ? = to be determined. : = across all + // values in that axis. + float dotProd = 0.0; + for (int wF = 0; wF < ${filterDepth}; wF++) { + int xF = xFCorner + wF * ${dilationDepth}; + + if (xF < 0 || xF >= ${convInfo.inDepth}) { + continue; + } + + for (int wR = 0; wR < ${filterHeight}; wR++) { + int xR = xRCorner + wR * ${dilationHeight}; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${filterWidth}; wC++) { + int xC = xCCorner + wC * ${dilationWidth}; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + for (int d1 = 0; d1 < ${inputDepthNearestVec4}; d1 += 4) { + vec4 xValues = vec4( + getX(batch, xF, xR, xC, d1), + getX(batch, xF, xR, xC, d1 + 1), + getX(batch, xF, xR, xC, d1 + 2), + getX(batch, xF, xR, xC, d1 + 3) + ); + vec4 wValues = vec4( + getW(wF, wR, wC, d1, d2), + getW(wF, wR, wC, d1 + 1, d2), + getW(wF, wR, wC, d1 + 2, d2), + getW(wF, wR, wC, d1 + 3, d2) + ); + + dotProd += dot(xValues, wValues); + } + + if (${inputDepthVec4Remainder === 1}) { + dotProd += + getX(batch, xF, xR, xC, ${inputDepthNearestVec4}) * + getW(wF, wR, wC, ${inputDepthNearestVec4}, d2); + } else if (${inputDepthVec4Remainder === 2}) { + vec2 xValues = vec2( + getX(batch, xF, xR, xC, ${inputDepthNearestVec4}), + getX(batch, xF, xR, xC, ${inputDepthNearestVec4} + 1) + ); + vec2 wValues = vec2( + getW(wF, wR, wC, ${inputDepthNearestVec4}, d2), + getW(wF, wR, wC, ${inputDepthNearestVec4} + 1, d2) + ); + dotProd += dot(xValues, wValues); + } else if (${inputDepthVec4Remainder === 3}) { + vec3 xValues = vec3( + getX(batch, xF, xR, xC, ${inputDepthNearestVec4}), + getX(batch, xF, xR, xC, ${inputDepthNearestVec4} + 1), + getX(batch, xF, xR, xC, ${inputDepthNearestVec4} + 2) + ); + vec3 wValues = vec3( + getW(wF, wR, wC, ${inputDepthNearestVec4}, d2), + getW(wF, wR, wC, ${inputDepthNearestVec4} + 1, d2), + getW(wF, wR, wC, ${inputDepthNearestVec4} + 2, d2) + ); + dotProd += dot(xValues, wValues); + } + } + } + } + setOutput(dotProd); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/im2col_packed_gpu.js + init_define_BUILD_VERSION(); + var Im2ColPackedProgram = class { + constructor(outputShape, convInfo) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.customUniforms = [ + { name: "inputShape", type: "ivec4" }, + { name: "pad", type: "ivec2" }, + { name: "stride", type: "ivec2" }, + { name: "dilation", type: "ivec2" }, + { name: "inChannels", type: "int" }, + { name: "itemsPerBlockRow", type: "int" }, + { name: "outWidth", type: "int" } + ]; + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + const { dataFormat } = convInfo; + const glsl = getGlslDifferences(); + const isChannelsLast = dataFormat === "channelsLast"; + const rowDim = isChannelsLast ? 1 : 2; + const colDim = isChannelsLast ? 2 : 3; + const boundsCheckingSnippet = this.enableShapeUniforms ? "if(blockIndex < outShape[2] && pos < outShape[1]) {" : `if(blockIndex < ${outputShape[2]} && pos < ${outputShape[1]}) {`; + let unrolled = ``; + for (let row = 0; row <= 1; row++) { + for (let col = 0; col <= 1; col++) { + unrolled += ` + blockIndex = rc.z + ${col}; + pos = rc.y + ${row}; + + ${boundsCheckingSnippet} + offsetY = int(blockIndex / outWidth) * stride[0] - pad[0]; + d0 = offsetY + dilation[0] * (pos / itemsPerBlockRow); + + if(d0 < inputShape[${rowDim}] && d0 >= 0) { + // Use custom imod instead mod. On Intel GPU, mod may generate + // unexpected value. + // https://github.com/tensorflow/tfjs/issues/5447 + offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1]; + d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) / + inChannels); + + if(d1 < inputShape[${colDim}] && d1 >= 0) { + + ch = imod(pos, inChannels); + + if (${isChannelsLast}) { + innerDims = vec2(d1, ch); + result[${row * 2 + col}] = getChannel( + getA(rc.x, d0, int(innerDims.x), + int(innerDims.y)), innerDims); + } else { + innerDims = vec2(d0, d1); + result[${row * 2 + col}] = getChannel( + getA(rc.x, ch, int(innerDims.x), + int(innerDims.y)), innerDims); + } + } + } + } + `; + } + } + this.userCode = ` + void main() { + ivec3 rc = getOutputCoords(); + + vec4 result = vec4(0); + + int blockIndex, pos, offsetY, d0, offsetX, d1, ch; + vec2 innerDims; + + ${unrolled} + + ${glsl.output} = result; + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D_impl.js + function getShapeForBatchMatMul(shape, isChannelsLast) { + const length = shape.length; + if (length >= 3) { + return isChannelsLast ? [ + ...shape.slice(0, -3), + shape[length - 3] * shape[length - 2], + shape[length - 1] + ] : [ + ...shape.slice(0, -3), + shape[length - 3], + shape[length - 2] * shape[length - 1] + ]; + } else if (!isChannelsLast && length === 1 && shape[0] > 1) { + return [shape[0], 1]; + } else { + return null; + } + } + function conv2dByMatMul({ x, filter, convInfo, backend: backend2, bias = null, preluActivationWeights = null, leakyreluAlpha = 0, activation = null }) { + const xShape = x.shape; + const xTexData = backend2.texData.get(x.dataId); + const sharedMatMulDim = convInfo.inChannels; + const outerShapeX = xShape[0] * xShape[1] * xShape[2]; + const outerShapeFilter = convInfo.outChannels; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const transposeA = false; + const transposeB = false; + let out; + const intermediates = []; + if (preluActivationWeights != null) { + const targetShape = getShapeForBatchMatMul(preluActivationWeights.shape, isChannelsLast); + if (targetShape != null) { + preluActivationWeights = reshape3({ + inputs: { x: preluActivationWeights }, + backend: backend2, + attrs: { shape: targetShape } + }); + intermediates.push(preluActivationWeights); + } + } + if (bias != null) { + const targetShape = getShapeForBatchMatMul(bias.shape, isChannelsLast); + if (targetShape != null) { + bias = reshape3({ inputs: { x: bias }, backend: backend2, attrs: { shape: targetShape } }); + intermediates.push(bias); + } + } + const batchMatMulWillBeUnpacked = (outerShapeX === 1 || outerShapeFilter === 1) && sharedMatMulDim > MATMUL_SHARED_DIM_THRESHOLD; + const canOptimize = !batchMatMulWillBeUnpacked && xTexData.isPacked && isChannelsLast && xTexData.texture != null && xShape[2] % 2 !== 0 && util_exports.arraysEqual(xTexData.shape.slice(-3), xShape.slice(-3)); + if (canOptimize) { + const targetShape = xShape[0] * xShape[1] * (xShape[2] + 1); + const xReshaped = { + dataId: x.dataId, + shape: [1, targetShape, convInfo.inChannels], + dtype: x.dtype + }; + const originalXTexDataShape = xTexData.shape; + xTexData.shape = xTexData.shape.slice(); + xTexData.shape[xTexData.shape.length - 2]++; + util_exports.assert(isReshapeFree(xTexData.shape, xReshaped.shape), () => `packed reshape ${xTexData.shape} to ${xReshaped.shape} isn't free`); + const filterReshaped = reshape3({ + inputs: { x: filter }, + backend: backend2, + attrs: { shape: [1, convInfo.inChannels, convInfo.outChannels] } + }); + intermediates.push(filterReshaped); + const pointwiseConv = batchMatMulImpl({ + a: xReshaped, + b: filterReshaped, + backend: backend2, + transposeA, + transposeB, + bias, + activation, + preluActivationWeights, + leakyreluAlpha + }); + const pointwiseConvTexData = backend2.texData.get(pointwiseConv.dataId); + util_exports.assert(pointwiseConvTexData.isPacked, () => "batchMatMul result is expected to be packed"); + xTexData.shape = originalXTexDataShape; + pointwiseConvTexData.shape = convInfo.outShape; + out = identity2({ inputs: { x: pointwiseConv }, backend: backend2 }); + out.shape = convInfo.outShape; + intermediates.push(pointwiseConv); + } else { + const numCols = convInfo.outHeight * convInfo.outWidth; + const xReshaped = reshape3({ + inputs: { x }, + backend: backend2, + attrs: { + shape: isChannelsLast ? [convInfo.batchSize, numCols, convInfo.inChannels] : [convInfo.batchSize, convInfo.inChannels, numCols] + } + }); + const filterReshaped = reshape3({ + inputs: { x: filter }, + backend: backend2, + attrs: { shape: [1, convInfo.inChannels, convInfo.outChannels] } + }); + const result = batchMatMulImpl({ + a: isChannelsLast ? xReshaped : filterReshaped, + b: isChannelsLast ? filterReshaped : xReshaped, + transposeA: !isChannelsLast, + transposeB, + backend: backend2, + bias, + activation, + preluActivationWeights, + leakyreluAlpha + }); + out = reshape3({ inputs: { x: result }, backend: backend2, attrs: { shape: convInfo.outShape } }); + intermediates.push(xReshaped); + intermediates.push(filterReshaped); + intermediates.push(result); + } + for (const i of intermediates) { + backend2.disposeIntermediateTensorInfo(i); + } + return out; + } + function conv2dWithIm2Row({ x, filter, convInfo, backend: backend2, bias = null, preluActivationWeights = null, leakyreluAlpha = 0, activation = null }) { + const { filterWidth, filterHeight, inChannels, outWidth, outHeight, dataFormat } = convInfo; + const isChannelsLast = dataFormat === "channelsLast"; + const sharedDim = filterWidth * filterHeight * inChannels; + const numCols = outHeight * outWidth; + const x2ColShape = [convInfo.batchSize, sharedDim, numCols]; + const transposeA = true; + const transposeB = false; + const intermediates = []; + if (preluActivationWeights != null) { + const targetShape = getShapeForBatchMatMul(preluActivationWeights.shape, isChannelsLast); + if (targetShape != null) { + preluActivationWeights = reshape3({ + inputs: { x: preluActivationWeights }, + backend: backend2, + attrs: { shape: targetShape } + }); + intermediates.push(preluActivationWeights); + } + } + if (bias != null) { + const targetShape = getShapeForBatchMatMul(bias.shape, isChannelsLast); + if (targetShape != null) { + bias = reshape3({ inputs: { x: bias }, backend: backend2, attrs: { shape: targetShape } }); + intermediates.push(bias); + } + } + const w2Row = reshape3({ + inputs: { x: filter }, + backend: backend2, + attrs: { shape: [1, sharedDim, util_exports.sizeFromShape(filter.shape) / sharedDim] } + }); + intermediates.push(w2Row); + const im2ColProgram = new Im2ColPackedProgram(x2ColShape, convInfo); + const customValues = [ + x.shape, + [convInfo.padInfo.top, convInfo.padInfo.left], + [convInfo.strideHeight, convInfo.strideWidth], + [convInfo.dilationHeight, convInfo.dilationWidth], + [convInfo.inChannels], + [convInfo.filterWidth * convInfo.inChannels], + [convInfo.outWidth] + ]; + const im2Col = backend2.runWebGLProgram(im2ColProgram, [x], "float32", customValues); + const im2ColReshaped = reshape3({ inputs: { x: im2Col }, backend: backend2, attrs: { shape: x2ColShape } }); + intermediates.push(im2Col); + intermediates.push(im2ColReshaped); + const hasBias = bias != null; + const hasPreluActivationWeights = preluActivationWeights != null; + const hasLeakyreluAlpha = activation === "leakyrelu"; + const fusedActivation = activation ? mapActivationToShaderProgram(activation, true) : null; + const matmulProgram = new MatMulPackedProgram(isChannelsLast ? im2ColReshaped.shape : w2Row.shape, isChannelsLast ? w2Row.shape : im2ColReshaped.shape, isChannelsLast ? [convInfo.batchSize, numCols, convInfo.outChannels] : [convInfo.batchSize, convInfo.outChannels, numCols], transposeA, transposeB, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha); + const inputs = isChannelsLast ? [im2ColReshaped, w2Row] : [w2Row, im2ColReshaped]; + if (bias) { + inputs.push(bias); + } + if (hasPreluActivationWeights) { + inputs.push(preluActivationWeights); + } + if (hasLeakyreluAlpha) { + const $leakyreluAlpha = backend2.makeTensorInfo([], "float32", util_exports.createScalarValue(leakyreluAlpha, "float32")); + inputs.push($leakyreluAlpha); + intermediates.push($leakyreluAlpha); + } + const product = backend2.runWebGLProgram(matmulProgram, inputs, "float32"); + const out = reshape3({ inputs: { x: product }, backend: backend2, attrs: { shape: convInfo.outShape } }); + intermediates.push(product); + for (const i of intermediates) { + backend2.disposeIntermediateTensorInfo(i); + } + return out; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D.js + function conv2d3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dataFormat, dilations, dimRoundingMode } = attrs; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode, false, $dataFormat); + let out; + if (convInfo.filterHeight === 1 && convInfo.filterWidth === 1 && convInfo.dilationHeight === 1 && convInfo.dilationWidth === 1 && convInfo.strideHeight === 1 && convInfo.strideWidth === 1 && (convInfo.padInfo.type === "SAME" || convInfo.padInfo.type === "VALID")) { + out = conv2dByMatMul({ x, filter, convInfo, backend: backend2 }); + } else if (env().getBool("WEBGL_CONV_IM2COL")) { + out = conv2dWithIm2Row({ x, filter, convInfo, backend: backend2 }); + } else { + const program = new Conv2DProgram(convInfo); + out = backend2.runWebGLProgram(program, [x, filter], "float32"); + } + const outReshaped = reshape3({ inputs: { x: out }, backend: backend2, attrs: { shape: convInfo.outShape } }); + backend2.disposeIntermediateTensorInfo(out); + return outReshaped; + } + var conv2DConfig2 = { + kernelName: Conv2D, + backendName: "webgl", + kernelFunc: conv2d3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2DBackpropFilter.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_backprop_gpu.js + init_define_BUILD_VERSION(); + var Conv2DDerFilterProgram = class { + constructor(convInfo) { + this.variableNames = ["x", "dy"]; + this.outputShape = convInfo.filterShape; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int wR = coords.x; + int wC = coords.y; + int d1 = coords.z; + int d2 = coords.w; + + // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + + for (int b = 0; b < ${convInfo.batchSize}; b++) { + for (int yR = 0; yR < ${convInfo.outHeight}; yR++) { + int xR = wR + yR * ${strideHeight} - ${padTop}; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int yC = 0; yC < ${convInfo.outWidth}; yC++) { + int xC = wC + yC * ${strideWidth} - ${padLeft}; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + if (${isChannelsLast}) { + float dyValue = getDy(b, yR, yC, d2); + float xValue = getX(b, xR, xC, d1); + dotProd += (xValue * dyValue); + } else { + float dyValue = getDy(b, d2, yR, yC); + float xValue = getX(b, d1, xR, xC); + dotProd += (xValue * dyValue); + } + + } + } + } + setOutput(dotProd); + } + `; + } + }; + var Conv2DDerInputProgram = class { + constructor(convInfo) { + this.variableNames = ["dy", "W"]; + this.outputShape = convInfo.inShape; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const padTop = filterHeight - 1 - convInfo.padInfo.top; + const padLeft = filterWidth - 1 - convInfo.padInfo.left; + const rowDim = isChannelsLast ? 1 : 2; + const colDim = isChannelsLast ? 2 : 3; + const channelDim = isChannelsLast ? 3 : 1; + this.userCode = ` + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords[0]; + int d1 = coords[${channelDim}]; + + ivec2 dyCorner = ivec2(coords[${rowDim}], coords[${colDim}]) - pads; + int dyRCorner = dyCorner.x; + int dyCCorner = dyCorner.y; + + // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + for (int wR = 0; wR < ${filterHeight}; wR++) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + int wRPerm = ${filterHeight} - 1 - wR; + + for (int wC = 0; wC < ${filterWidth}; wC++) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + int wCPerm = ${filterWidth} - 1 - wC; + + for (int d2 = 0; d2 < ${convInfo.outChannels}; d2++) { + + if (${isChannelsLast}) { + float xValue = getDy(batch, idyR, idyC, d2); + float wValue = getW(wRPerm, wCPerm, d1, d2); + dotProd += xValue * wValue; + } else { + float xValue = getDy(batch, d2, idyR, idyC); + float wValue = getW(wRPerm, wCPerm, d1, d2); + dotProd += xValue * wValue; + } + + } + } + } + setOutput(dotProd); + } + `; + } + }; + var Conv3DDerFilterProgram = class { + constructor(convInfo) { + this.variableNames = ["x", "dy"]; + this.outputShape = convInfo.filterShape; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const padFront = convInfo.padInfo.front; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + this.userCode = ` + void main() { + ivec5 coords = getOutputCoords(); + int wF = coords.x; + int wR = coords.y; + int wC = coords.z; + int d1 = coords.w; + int d2 = coords.u; + + float dotProd = 0.0; + + for (int b = 0; b < ${convInfo.batchSize}; b++) { + for (int yF = 0; yF < ${convInfo.outDepth}; yF++) { + int xF = wF + yF * ${strideDepth} - ${padFront}; + + if (xF < 0 || xF >= ${convInfo.inDepth}) { + continue; + } + + for (int yR = 0; yR < ${convInfo.outHeight}; yR++) { + int xR = wR + yR * ${strideHeight} - ${padTop}; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int yC = 0; yC < ${convInfo.outWidth}; yC++) { + int xC = wC + yC * ${strideWidth} - ${padLeft}; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + float dyValue = getDy(b, yF, yR, yC, d2); + float xValue = getX(b, xF, xR, xC, d1); + dotProd += (xValue * dyValue); + } + } + } + } + setOutput(dotProd); + } + `; + } + }; + var Conv3DDerInputProgram = class { + constructor(convInfo) { + this.variableNames = ["dy", "W"]; + this.outputShape = convInfo.inShape; + const filterDepth = convInfo.filterDepth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const padFront = filterDepth - 1 - convInfo.padInfo.front; + const padTop = filterHeight - 1 - convInfo.padInfo.top; + const padLeft = filterWidth - 1 - convInfo.padInfo.left; + this.userCode = ` + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int d1 = coords.u; + + + ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; + int dyFCorner = dyCorner.x; + int dyRCorner = dyCorner.y; + int dyCCorner = dyCorner.z; + + float dotProd = 0.0; + for (int wF = 0; wF < ${filterDepth}; wF++) { + float dyF = float(dyFCorner + wF) / ${strideDepth}.0; + + if (dyF < 0.0 || dyF >= ${convInfo.outDepth}.0 || fract(dyF) > 0.0) { + continue; + } + int idyF = int(dyF); + + int wFPerm = ${filterDepth} - 1 - wF; + + for (int wR = 0; wR < ${filterHeight}; wR++) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || + fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + int wRPerm = ${filterHeight} - 1 - wR; + + for (int wC = 0; wC < ${filterWidth}; wC++) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + int wCPerm = ${filterWidth} - 1 - wC; + + for (int d2 = 0; d2 < ${convInfo.outChannels}; d2++) { + float xValue = getDy(batch, idyF, idyR, idyC, d2); + float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2); + dotProd += xValue * wValue; + } + } + } + } + setOutput(dotProd); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2DBackpropFilter.js + function conv2DBackpropFilter3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, pad: pad3, dataFormat, dimRoundingMode, filterShape } = attrs; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filterShape, strides, 1, pad3, dimRoundingMode, false, $dataFormat); + const program = new Conv2DDerFilterProgram(convInfo); + return backend2.runWebGLProgram(program, [x, dy], "float32"); + } + var conv2DBackpropFilterConfig2 = { + kernelName: Conv2DBackpropFilter, + backendName: "webgl", + kernelFunc: conv2DBackpropFilter3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2DBackpropInput.js + init_define_BUILD_VERSION(); + function conv2DBackpropInput3(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { inputShape, strides, pad: pad3, dataFormat, dimRoundingMode } = attrs; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(inputShape, filter.shape, strides, 1, pad3, dimRoundingMode, false, $dataFormat); + const program = new Conv2DDerInputProgram(convInfo); + return backend2.runWebGLProgram(program, [dy, filter], "float32"); + } + var conv2DBackpropInputConfig2 = { + kernelName: Conv2DBackpropInput, + backendName: "webgl", + kernelFunc: conv2DBackpropInput3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3D.js + init_define_BUILD_VERSION(); + function conv3D2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dilations } = attrs; + const convInfo = backend_util_exports.computeConv3DInfo(x.shape, filter.shape, strides, dilations, pad3); + const program = new Conv3DProgram(convInfo); + return backend2.runWebGLProgram(program, [x, filter], "float32"); + } + var conv3DConfig2 = { + kernelName: Conv3D, + backendName: "webgl", + kernelFunc: conv3D2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3DBackpropFilterV2.js + init_define_BUILD_VERSION(); + function conv3DBackpropFilterV22(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, pad: pad3, filterShape } = attrs; + const convInfo = backend_util_exports.computeConv3DInfo(x.shape, filterShape, strides, 1, pad3); + const program = new Conv3DDerFilterProgram(convInfo); + return backend2.runWebGLProgram(program, [x, dy], "float32"); + } + var conv3DBackpropFilterV2Config2 = { + kernelName: Conv3DBackpropFilterV2, + backendName: "webgl", + kernelFunc: conv3DBackpropFilterV22 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3DBackpropInputV2.js + init_define_BUILD_VERSION(); + function conv3DBackpropInput2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { pad: pad3, strides, inputShape } = attrs; + const convInfo = backend_util_exports.computeConv3DInfo(inputShape, filter.shape, strides, 1, pad3); + const program = new Conv3DDerInputProgram(convInfo); + return backend2.runWebGLProgram(program, [dy, filter], "float32"); + } + var conv3DBackpropInputConfig = { + kernelName: Conv3DBackpropInputV2, + backendName: "webgl", + kernelFunc: conv3DBackpropInput2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cos.js + init_define_BUILD_VERSION(); + var COS = CHECK_NAN_SNIPPET_UNARY + ` + return cos(x); +`; + var cos3 = unaryKernelFunc2({ opSnippet: COS }); + var cosConfig2 = { + kernelName: Cos, + backendName: "webgl", + kernelFunc: cos3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cosh.js + init_define_BUILD_VERSION(); + var COSH = ` + float e2x = exp(-x); + return (e2x + 1.0 / e2x) / 2.0; +`; + var cosh3 = unaryKernelFunc2({ opSnippet: COSH }); + var coshConfig2 = { + kernelName: Cosh, + backendName: "webgl", + kernelFunc: cosh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/CropAndResize.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/crop_and_resize_gpu.js + init_define_BUILD_VERSION(); + var CropAndResizeProgram = class { + constructor(imageShape, boxShape, cropSize, method, extrapolationValue) { + this.variableNames = ["Image", "Boxes", "BoxInd"]; + this.outputShape = []; + const [batch, imageHeight, imageWidth, depth] = imageShape; + const [numBoxes] = boxShape; + const [cropHeight, cropWidth] = cropSize; + this.outputShape = [numBoxes, cropHeight, cropWidth, depth]; + const methodId = method === "bilinear" ? 1 : 0; + const [inputHeightFloat, inputWidthFloat] = [`${imageHeight - 1}.0`, `${imageWidth - 1}.0`]; + const [heightRatio, heightScale, inY] = cropHeight > 1 ? [ + `${(imageHeight - 1) / (cropHeight - 1)}`, + "(y2-y1) * height_ratio", + `y1*${inputHeightFloat} + float(y)*(height_scale)` + ] : [ + "0.0", + "0.0", + `0.5 * (y1+y2) * ${inputHeightFloat}` + ]; + const [widthRatio, widthScale, inX] = cropWidth > 1 ? [ + `${(imageWidth - 1) / (cropWidth - 1)}`, + "(x2-x1) * width_ratio", + `x1*${inputWidthFloat} + float(x)*(width_scale)` + ] : [ + "0.0", + "0.0", + `0.5 * (x1+x2) * ${inputWidthFloat}` + ]; + this.userCode = ` + const float height_ratio = float(${heightRatio}); + const float width_ratio = float(${widthRatio}); + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int y = coords[1]; + int x = coords[2]; + int d = coords[3]; + + // get box vals + float y1 = getBoxes(b,0); + float x1 = getBoxes(b,1); + float y2 = getBoxes(b,2); + float x2 = getBoxes(b,3); + + // get image in batch index + int bInd = round(getBoxInd(b)); + if(bInd < 0 || bInd >= ${batch}) { + return; + } + + float height_scale = ${heightScale}; + float width_scale = ${widthScale}; + + float in_y = ${inY}; + if( in_y < 0.0 || in_y > ${inputHeightFloat} ) { + setOutput(float(${extrapolationValue})); + return; + } + float in_x = ${inX}; + if( in_x < 0.0 || in_x > ${inputWidthFloat} ) { + setOutput(float(${extrapolationValue})); + return; + } + + vec2 sourceFracIndexCR = vec2(in_x,in_y); + if(${methodId} == 1) { + // Compute the four integer indices. + ivec2 sourceFloorCR = ivec2(sourceFracIndexCR); + ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR)); + + float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d); + float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d); + float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d); + float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d); + + vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR); + + float top = topLeft + (topRight - topLeft) * fracCR.x; + float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x; + float newValue = top + (bottom - top) * fracCR.y; + setOutput(newValue); + } else { + // Compute the coordinators of nearest neighbor point. + ivec2 sourceNearestCR = ivec2(floor( + sourceFracIndexCR + vec2(0.5,0.5))); + float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d); + setOutput(newValue); + } + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/CropAndResize.js + var cropAndResize3 = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { image: image2, boxes, boxInd } = inputs; + const { cropSize, method, extrapolationValue } = attrs; + const program = new CropAndResizeProgram(image2.shape, boxes.shape, cropSize, method, extrapolationValue); + return backend2.runWebGLProgram(program, [image2, boxes, boxInd], "float32"); + }; + var cropAndResizeConfig2 = { + kernelName: CropAndResize, + backendName: "webgl", + kernelFunc: cropAndResize3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cumprod.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/cum_gpu.js + init_define_BUILD_VERSION(); + var CumOpType; + (function(CumOpType2) { + CumOpType2["Prod"] = "*"; + CumOpType2["Sum"] = "+"; + })(CumOpType || (CumOpType = {})); + var CumProgram = class { + constructor(op2, outputShape, exclusive, reverse5) { + this.op = op2; + this.outputShape = outputShape; + this.variableNames = ["x"]; + this.customUniforms = [{ name: "index", type: "float" }]; + const rank = this.outputShape.length; + const initVal = this.op === CumOpType.Prod ? "1.0" : "0.0"; + const val = exclusive ? initVal : `getX(${getCoords2(rank, "coords", this.op)})`; + const length = this.outputShape[this.outputShape.length - 1]; + let condition = ""; + let idxString = ""; + if (exclusive) { + condition = reverse5 ? `end != ${length - 1}` : "end != 0"; + idxString = reverse5 ? "end + 1" : "end - 1"; + } else { + condition = reverse5 ? `end + pow2 < ${length}` : "end >= pow2"; + idxString = reverse5 ? "end + pow2" : "end - pow2"; + } + this.userCode = ` + void main() { + ${getCoordsDataType(rank)} coords = getOutputCoords(); + int end = ${getFinalCoord(rank, "coords", this.op)}; + float val = ${val}; + int pow2 = int(pow(2.0, index)); + if (${condition}) { + int idx = ${idxString}; + ${getFinalCoord(rank, "coords", this.op)} = idx; + val ${this.op}= getX(${getCoords2(rank, "coords", this.op)}); + } + setOutput(val); + } + `; + } + }; + function getCoords2(rank, name, op2) { + if (rank === 1) { + return `${name}`; + } else if (rank === 2) { + return `${name}.x, ${name}.y`; + } else if (rank === 3) { + return `${name}.x, ${name}.y, ${name}.z`; + } else if (rank === 4) { + return `${name}.x, ${name}.y, ${name}.z, ${name}.w`; + } else { + throw new Error(`Cumulative ${op2} for rank ${rank} is not yet supported`); + } + } + function getFinalCoord(rank, name, op2) { + if (rank === 1) { + return `${name}`; + } else if (rank === 2) { + return `${name}.y`; + } else if (rank === 3) { + return `${name}.z`; + } else if (rank === 4) { + return `${name}.w`; + } else { + throw new Error(`Cumulative ${op2} for rank ${rank} is not yet supported`); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cum_impl.js + init_define_BUILD_VERSION(); + function cumImpl(op2, x, backend2, axis, exclusive, reverse5) { + const xRank = x.shape.length; + const permutation = backend_util_exports.getAxesPermutation([axis], xRank); + let permutedX = x; + if (permutation != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutation } }); + } + const permutedAxis = backend_util_exports.getInnerMostAxes(1, xRank)[0]; + if (permutedAxis !== xRank - 1) { + throw new Error(`WebGL cumprod shader expects an inner-most axis=${x.shape.length - 1} but got axis=${axis}`); + } + const size = permutedX.shape[permutedAxis]; + let result = identity2({ inputs: { x: permutedX }, backend: backend2 }); + for (let i = 0; i <= Math.ceil(Math.log2(size)) - 1; i++) { + const program = new CumProgram(op2, permutedX.shape, false, reverse5); + const customValues = [[i]]; + const prevResult = result; + result = backend2.runWebGLProgram(program, [result], result.dtype, customValues); + backend2.disposeIntermediateTensorInfo(prevResult); + } + if (exclusive) { + const program = new CumProgram(op2, permutedX.shape, exclusive, reverse5); + const prevResult = result; + result = backend2.runWebGLProgram(program, [result], result.dtype); + backend2.disposeIntermediateTensorInfo(prevResult); + } + if (permutation != null) { + const reversePermutation = backend_util_exports.getUndoAxesPermutation(permutation); + const reverseTransposedResult = transpose3({ inputs: { x: result }, backend: backend2, attrs: { perm: reversePermutation } }); + backend2.disposeIntermediateTensorInfo(result); + backend2.disposeIntermediateTensorInfo(permutedX); + return reverseTransposedResult; + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cumprod.js + function cumprod3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + return cumImpl(CumOpType.Prod, x, backend2, axis, exclusive, reverse5); + } + var cumprodConfig2 = { + kernelName: Cumprod, + backendName: "webgl", + kernelFunc: cumprod3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cumsum.js + init_define_BUILD_VERSION(); + function cumsum3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + return cumImpl(CumOpType.Sum, x, backend2, axis, exclusive, reverse5); + } + var cumsumConfig2 = { + kernelName: Cumsum, + backendName: "webgl", + kernelFunc: cumsum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DenseBincount.js + init_define_BUILD_VERSION(); + function denseBincount2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, weights } = inputs; + const { size, binaryOutput } = attrs; + if (x.shape.length === 1) { + const xVals = backend2.readSync(x.dataId); + const weightsVals = backend2.readSync(weights.dataId); + const outVals = bincountImplCPU(xVals, weightsVals, weights.dtype, weights.shape, size); + return backend2.makeTensorInfo([size], weights.dtype, outVals); + } else if (x.shape.length === 2) { + const xBuf = backend2.bufferSync(x); + const weightsBuf = backend2.bufferSync(weights); + const outBuf = bincountReduceImplCPU(xBuf, weightsBuf, size, binaryOutput); + return backend2.makeTensorInfo(outBuf.shape, weights.dtype, outBuf.values); + } + throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${x.shape.length}.`); + } + var denseBincountConfig2 = { + kernelName: DenseBincount, + backendName: "webgl", + kernelFunc: denseBincount2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthToSpace.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/depth_to_space_gpu.js + init_define_BUILD_VERSION(); + var DepthToSpaceProgram = class { + constructor(outputShape, blockSize, dataFormat) { + this.variableNames = ["x"]; + this.outputShape = []; + this.outputShape = outputShape; + this.blockSize = blockSize; + this.dataFormat = dataFormat; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int h = ${this.getHeightCoordString()}; + int w = ${this.getWidthCoordString()}; + int d = ${this.getDepthCoordString()}; + + int in_h = h / ${blockSize}; + int offset_h = imod(h, ${blockSize}); + int in_w = w / ${blockSize}; + int offset_w = imod(w, ${blockSize}); + int offset_d = (offset_h * ${blockSize} + offset_w) * + ${this.getOutputDepthSize()}; + int in_d = d + offset_d; + + float result = ${this.getInputSamplingString()}; + setOutput(result); + } + `; + } + getHeightCoordString() { + if (this.dataFormat === "NHWC") { + return `coords[1]`; + } else { + return `coords[2]`; + } + } + getWidthCoordString() { + if (this.dataFormat === "NHWC") { + return `coords[2]`; + } else { + return `coords[3]`; + } + } + getDepthCoordString() { + if (this.dataFormat === "NHWC") { + return `coords[3]`; + } else { + return `coords[1]`; + } + } + getOutputDepthSize() { + if (this.dataFormat === "NHWC") { + return this.outputShape[3]; + } else { + return this.outputShape[1]; + } + } + getInputSamplingString() { + if (this.dataFormat === "NHWC") { + return `getX(b, in_h, in_w, in_d)`; + } else { + return `getX(b, in_d, in_h, in_w)`; + } + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthToSpace.js + function depthToSpace3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockSize, dataFormat } = attrs; + const batchSize = x.shape[0]; + const inputHeight = dataFormat === "NHWC" ? x.shape[1] : x.shape[2]; + const inputWidth = dataFormat === "NHWC" ? x.shape[2] : x.shape[3]; + const inputDepth = dataFormat === "NHWC" ? x.shape[3] : x.shape[1]; + const outputHeight = inputHeight * blockSize; + const outputWidth = inputWidth * blockSize; + const outputDepth = inputDepth / (blockSize * blockSize); + const outputShape = dataFormat === "NHWC" ? [batchSize, outputHeight, outputWidth, outputDepth] : [batchSize, outputDepth, outputHeight, outputWidth]; + const program = new DepthToSpaceProgram(outputShape, blockSize, dataFormat); + return backend2.runWebGLProgram(program, [x], x.dtype); + } + var depthToSpaceConfig2 = { + kernelName: DepthToSpace, + backendName: "webgl", + kernelFunc: depthToSpace3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNative.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_gpu_depthwise.js + init_define_BUILD_VERSION(); + var DepthwiseConv2DProgram = class { + constructor(convInfo, addBias = false, activation = null, hasPreluActivation = false, hasLeakyReluAlpha = false) { + this.variableNames = ["x", "W"]; + this.customUniforms = [ + { name: "pads", type: "ivec2" }, + { name: "strides", type: "ivec2" }, + { name: "dilations", type: "ivec2" }, + { name: "inDims", type: "ivec2" } + ]; + this.outputShape = convInfo.outShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const channelMul = convInfo.outChannels / convInfo.inChannels; + let activationSnippet = "", applyActivationSnippet = ""; + if (activation) { + if (hasPreluActivation) { + activationSnippet = `float activation(float a) { + float b = getPreluActivationWeightsAtOutCoords(); + ${activation} + }`; + } else if (hasLeakyReluAlpha) { + activationSnippet = `float activation(float a) { + float b = getLeakyreluAlphaAtOutCoords(); + ${activation} + }`; + } else { + activationSnippet = ` + float activation(float x) { + ${activation} + } + `; + } + applyActivationSnippet = `result = activation(result);`; + } + const addBiasSnippet = addBias ? "result += getBiasAtOutCoords();" : ""; + if (addBias) { + this.variableNames.push("bias"); + } + if (hasPreluActivation) { + this.variableNames.push("preluActivationWeights"); + } + if (hasLeakyReluAlpha) { + this.variableNames.push("leakyreluAlpha"); + } + this.userCode = ` + ${activationSnippet} + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords.x; + ivec2 xRCCorner = coords.yz * strides - pads; + int d2 = coords.w; + int d1 = d2 / ${channelMul}; + int q = d2 - d1 * ${channelMul}; + + int xRCorner = xRCCorner.x; + int xCCorner = xRCCorner.y; + + // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations. + for (int wR = 0; wR < ${filterHeight}; wR++) { + int xR = xRCorner + wR * dilations[0]; + + if (xR < 0 || xR >= inDims[0]) { + continue; + } + + for (int wC = 0; wC < ${filterWidth}; wC++) { + int xC = xCCorner + wC * dilations[1]; + + if (xC < 0 || xC >= inDims[1]) { + continue; + } + + float xVal = getX(batch, xR, xC, d1); + float wVal = getW(wR, wC, d1, q); + dotProd += xVal * wVal; + } + } + + float result = dotProd; + ${addBiasSnippet} + ${applyActivationSnippet} + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_packed_gpu_depthwise.js + init_define_BUILD_VERSION(); + var DepthwiseConvPacked2DProgram = class { + constructor(convInfo, addBias = false, activation = null, hasPreluActivation = false, hasLeakyReluAlpha = false) { + this.variableNames = ["x", "W"]; + this.packedInputs = true; + this.packedOutput = true; + this.customUniforms = [ + { name: "pads", type: "ivec2" }, + { name: "strides", type: "ivec2" }, + { name: "dilations", type: "ivec2" }, + { name: "inDims", type: "ivec2" } + ]; + this.outputShape = convInfo.outShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + const channelMul = convInfo.outChannels / convInfo.inChannels; + const padLeft = convInfo.padInfo.left; + const strideWidth = convInfo.strideWidth; + const dilationWidth = convInfo.dilationWidth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const texelsAcross = filterWidth; + let mainLoop = ` + int xR; int xC; int xCOffset; + vec4 wTexel; vec4 previous; vec4 final;`; + for (let c = 0; c < filterWidth; c++) { + mainLoop += ` + vec4 xTexelC${c * 2}; + int xTexelC${c * 2}Ready; + vec4 xTexelC${c * 2 + 1}; + int xTexelC${c * 2 + 1}Ready; + vec4 xC${c};`; + } + mainLoop += ` + for (int r = 0; r < ${filterHeight}; r++) { + `; + for (let c = 0; c < filterWidth; c++) { + mainLoop += ` + xTexelC${c * 2} = vec4(0.0); + xTexelC${c * 2}Ready = 0; + xTexelC${c * 2 + 1} = vec4(0.0); + xTexelC${c * 2 + 1}Ready = 0; + xC${c} = vec4(0.0);`; + } + mainLoop += ` + xR = xRCorner + r * dilations[0]; + if (xR >=0 && xR < inDims[0]) { + `; + for (let texelC = 0; texelC < (texelsAcross + 1) / 2; texelC++) { + const colIndex = texelC * 2; + mainLoop += ` + xC = xCCorner + ${colIndex * dilationWidth}; + `; + if (strideWidth === 1) { + if (colIndex < filterWidth) { + if (padLeft % 2 === 1) { + mainLoop += ` + xCOffset = xC + 1; + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex}Ready == 0) { + xTexelC${colIndex} = getX(batch, xR, xCOffset, d1); + + // Need to manually clear unused channels in case + // we're reading from recycled texture. + if (xCOffset + 1 >= inDims[1]) { + xTexelC${colIndex}.zw = vec2(0.0); + } + xTexelC${colIndex}Ready = 1; + } + `; + if (dilationWidth === 1 && colIndex > 0) { + mainLoop += ` + xC${colIndex} = vec4(xTexelC${colIndex - 2}.zw, xTexelC${colIndex}.xy); + `; + } else { + mainLoop += ` + xCOffset = xC + 1 - 2; + + if (xCOffset >= 0 && xCOffset < inDims[1]) { + previous = getX(batch, xR, xCOffset, d1); + + // Need to manually clear unused channels in case + // we're reading from recycled texture. + if (xCOffset + 1 >= inDims[1]) { + previous.zw = vec2(0.0); + } + + xC${colIndex} = vec4(previous.zw, xTexelC${colIndex}.xy); + } else { + xC${colIndex} = vec4(0.0, 0.0, xTexelC${colIndex}.xy); + } + `; + } + } else { + mainLoop += ` + if (xC >= 0 && xC < inDims[1] && xTexelC${colIndex}Ready == 0) { + xTexelC${colIndex} = getX(batch, xR, xC, d1); + if (xC + 1 >= inDims[1]) { + xTexelC${colIndex}.zw = vec2(0.0); + } + xTexelC${colIndex}Ready = 1; + } + + xC${colIndex} = xTexelC${colIndex}; + `; + } + if (colIndex + 1 < filterWidth) { + const nextTexelOffset = padLeft % 2 === 0 ? util_exports.nearestLargerEven(dilationWidth) : dilationWidth; + if (dilationWidth % 2 === 0 && padLeft % 2 === 1 || dilationWidth % 2 !== 0 && padLeft % 2 !== 1) { + mainLoop += ` + xCOffset = xC + imod(pads[1], 2) + ${nextTexelOffset}; + + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex + 1}Ready == 0) { + xTexelC${colIndex + 1} = getX(batch, xR, xCOffset, d1); + + // Need to manually clear unused channels in case + // we're reading from recycled texture. + if (xCOffset + 1 >= inDims[1]) { + xTexelC${colIndex + 1}.zw = vec2(0.0); + } + xTexelC${colIndex + 1}Ready = 1; + } + `; + if (dilationWidth > 1) { + mainLoop += ` + xCOffset -= 2; + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex}Ready == 0) { + xTexelC${colIndex} = getX(batch, xR, xCOffset, d1); + xTexelC${colIndex}Ready = 1; + } + `; + } + mainLoop += ` + xC${colIndex + 1} = vec4(xTexelC${colIndex}.zw, xTexelC${colIndex + 1}.xy); + `; + } else { + if (nextTexelOffset === 1) { + mainLoop += ` + xC${colIndex + 1} = xTexelC${colIndex}; + `; + } else { + mainLoop += ` + xCOffset = xC + ${nextTexelOffset}; + + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex + 1}Ready == 0) { + xTexelC${colIndex + 1} = getX(batch, xR, xCOffset, d1); + if (xCOffset + 1 >= inDims[1]) { + xTexelC${colIndex + 1}.zw = vec2(0.0); + } + xTexelC${colIndex + 1}Ready = 1; + } + + xC${colIndex + 1} = xTexelC${colIndex + 1}; + `; + } + } + } + } + } else { + if (colIndex < filterWidth) { + if (padLeft % 2 === 1) { + mainLoop += ` + xCOffset = xC + 1 - strides[1]; + if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex}Ready == 0) { + xTexelC${colIndex} = getX(batch, xR, xCOffset, d1); + // Need to manually clear unused channels in case + // we're reading from recycled texture. + if (xCOffset + 1 >= inDims[1]) { + xTexelC${colIndex}.zw = vec2(0.0); + } + xTexelC${colIndex}Ready = 1; + } + + if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${colIndex + 1}Ready == 0) { + xTexelC${colIndex + 1} = getX(batch, xR, xC + 1, d1); + // Need to manually clear unused channels in case + // we're reading from recycled texture. + if (xC + 2 >= inDims[1]) { + xTexelC${colIndex + 1}.zw = vec2(0.0); + } + xTexelC${colIndex + 1}Ready = 1; + } + + xC${colIndex} = vec4(xTexelC${colIndex}.zw, xTexelC${colIndex + 1}.zw); + `; + if (colIndex + 1 < filterWidth) { + mainLoop += ` + final = vec4(0.0); + xCOffset = xC + 1 + strides[1]; + if(xCOffset >= 0 && xCOffset < inDims[1]) { + final = getX(batch, xR, xCOffset, d1); + } + xC${colIndex + 1} = vec4(xTexelC${colIndex + 1}.xy, final.xy); + `; + } + } else { + mainLoop += ` + if(xC >= 0 && xC < inDims[1] && xTexelC${colIndex}Ready == 0) { + xTexelC${colIndex} = getX(batch, xR, xC, d1); + if (xC + 1 >= inDims[1]) { + xTexelC${colIndex}.zw = vec2(0.0); + } + xTexelC${colIndex}Ready = 1; + } + + xCOffset = xC + strides[1]; + if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex + 1}Ready == 0) { + xTexelC${colIndex + 1} = getX(batch, xR, xCOffset, d1); + if (xCOffset + 1 >= inDims[1]) { + xTexelC${colIndex + 1}.zw = vec2(0.); + } + xTexelC${colIndex + 1}Ready = 1; + } + + xC${colIndex} = vec4( + xTexelC${colIndex}.xy, xTexelC${colIndex + 1}.xy); + `; + if (colIndex + 1 < filterWidth) { + mainLoop += ` + xC${colIndex + 1} = vec4(xTexelC${colIndex}.zw, xTexelC${colIndex + 1}.zw); + `; + } + } + } + } + if (colIndex < filterWidth) { + mainLoop += ` + wTexel = getW(r, ${colIndex}, d1, q); + dotProd += xC${colIndex} * vec4(wTexel.xz, wTexel.xz); + `; + if (colIndex + 1 < filterWidth) { + mainLoop += ` + wTexel = getW(r, ${colIndex + 1}, d1, q); + dotProd += xC${colIndex + 1} * vec4(wTexel.xz, wTexel.xz); + `; + } + } + } + mainLoop += ` + } + `; + mainLoop += ` + } + `; + let activationSnippet = "", applyActivationSnippet = ""; + if (activation) { + if (hasPreluActivation) { + activationSnippet = `vec4 activation(vec4 a) { + vec4 b = getPreluActivationWeightsAtOutCoords(); + ${activation} + }`; + } else if (hasLeakyReluAlpha) { + activationSnippet = `vec4 activation(vec4 a) { + vec4 b = getLeakyreluAlphaAtOutCoords(); + ${activation} + }`; + } else { + activationSnippet = `vec4 activation(vec4 x) { + ${activation} + }`; + } + applyActivationSnippet = `result = activation(result);`; + } + const addBiasSnippet = addBias ? "result += getBiasAtOutCoords();" : ""; + if (addBias) { + this.variableNames.push("bias"); + } + if (hasPreluActivation) { + this.variableNames.push("preluActivationWeights"); + } + if (hasLeakyReluAlpha) { + this.variableNames.push("leakyreluAlpha"); + } + this.userCode = ` + ${activationSnippet} + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords.x; + ivec2 xRCCorner = coords.yz * strides - pads; + int d2 = coords.w; + int d1 = d2 / ${channelMul}; + int q = d2 - d1 * ${channelMul}; + int xRCorner = xRCCorner.x; + int xCCorner = xRCCorner.y; + + //intialize dotProd with a small epsilon seems to reduce GPU accuracy loss. + vec4 dotProd = vec4(0.000000000000001); + + ${mainLoop} + + vec4 result = dotProd - vec4(0.000000000000001); + ${addBiasSnippet} + ${applyActivationSnippet} + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNative.js + function depthwiseConv2dNative2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dilations, dimRoundingMode } = attrs; + let $dilations = dilations; + if ($dilations == null) { + $dilations = [1, 1]; + } + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, $dilations), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${strides} and dilations '${$dilations}'`); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad3, dimRoundingMode, true); + let program; + if (env().getBool("WEBGL_PACK_DEPTHWISECONV") && convInfo.strideWidth <= 2 && convInfo.outChannels / convInfo.inChannels === 1) { + program = new DepthwiseConvPacked2DProgram(convInfo); + } else { + program = new DepthwiseConv2DProgram(convInfo); + } + const customValues = [ + [convInfo.padInfo.top, convInfo.padInfo.left], + [convInfo.strideHeight, convInfo.strideWidth], + [convInfo.dilationHeight, convInfo.dilationWidth], + [convInfo.inHeight, convInfo.inWidth] + ]; + return backend2.runWebGLProgram(program, [x, filter], "float32", customValues); + } + var depthwiseConv2dNativeConfig2 = { + kernelName: DepthwiseConv2dNative, + backendName: "webgl", + kernelFunc: depthwiseConv2dNative2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_backprop_gpu_depthwise.js + init_define_BUILD_VERSION(); + var DepthwiseConv2DDerFilterProgram = class { + constructor(convInfo) { + this.variableNames = ["x", "dy"]; + this.outputShape = convInfo.filterShape; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const channelMul = convInfo.outChannels / convInfo.inChannels; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int wR = coords.x; + int wC = coords.y; + int d1 = coords.z; + int dm = coords.w; + int d2 = d1 * ${channelMul} + dm; + + float dotProd = 0.0; + + // TO DO: Vec4 over the batch size + for (int b = 0; b < ${convInfo.batchSize}; b++) { + for (int yR = 0; yR < ${convInfo.outHeight}; yR++) { + int xR = wR + yR * ${strideHeight} - ${padTop}; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int yC = 0; yC < ${convInfo.outWidth}; yC++) { + int xC = wC + yC * ${strideWidth} - ${padLeft}; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + float dyValue = getDy(b, yR, yC, d2); + float xValue = getX(b, xR, xC, d1); + dotProd += (xValue * dyValue); + } + } + } + setOutput(dotProd); + } + `; + } + }; + var DepthwiseConv2DDerInputProgram = class { + constructor(convInfo) { + this.variableNames = ["dy", "W"]; + this.outputShape = convInfo.inShape; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const padTop = filterHeight - 1 - convInfo.padInfo.top; + const padLeft = filterWidth - 1 - convInfo.padInfo.left; + const channelMul = convInfo.outChannels / convInfo.inChannels; + this.userCode = ` + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords[0]; + int d1 = coords[3]; + ivec2 dyCorner = coords.yz - pads; + int dyRCorner = dyCorner.x; + int dyCCorner = dyCorner.y; + + float dotProd = 0.0; + + for (int wR = 0; wR < ${filterHeight}; wR++) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + int wRPerm = ${filterHeight} - 1 - wR; + + for (int wC = 0; wC < ${filterWidth}; wC++) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + int wCPerm = ${filterWidth} - 1 - wC; + + // TO DO: Vec4 over the channelMul + for (int dm = 0; dm < ${channelMul}; dm++) { + int d2 = d1 * ${channelMul} + dm; + float xValue = getDy(batch, idyR, idyC, d2); + float wValue = getW(wRPerm, wCPerm, d1, dm); + dotProd += xValue * wValue; + } + } + } + setOutput(dotProd); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js + function depthwiseConv2dNativeBackpropFilter3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, dilations, pad: pad3, dimRoundingMode, filterShape } = attrs; + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filterShape, strides, dilations, pad3, dimRoundingMode, true); + const program = new DepthwiseConv2DDerFilterProgram(convInfo); + return backend2.runWebGLProgram(program, [x, dy], "float32"); + } + var depthwiseConv2dNativeBackpropFilterConfig2 = { + kernelName: DepthwiseConv2dNativeBackpropFilter, + backendName: "webgl", + kernelFunc: depthwiseConv2dNativeBackpropFilter3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNativeBackpropInput.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNativeBackpropInput3(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { strides, dilations, pad: pad3, dimRoundingMode, inputShape } = attrs; + const convInfo = backend_util_exports.computeConv2DInfo(inputShape, filter.shape, strides, dilations, pad3, dimRoundingMode, true); + const program = new DepthwiseConv2DDerInputProgram(convInfo); + return backend2.runWebGLProgram(program, [dy, filter], "float32"); + } + var depthwiseConv2dNativeBackpropInputConfig2 = { + kernelName: DepthwiseConv2dNativeBackpropInput, + backendName: "webgl", + kernelFunc: depthwiseConv2dNativeBackpropInput3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Diag.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/diag_gpu.js + init_define_BUILD_VERSION(); + var DiagProgram = class { + constructor(size) { + this.variableNames = ["X"]; + this.outputShape = [size, size]; + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0; + setOutput(val); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Diag.js + function diag2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + const outShape = [...x.shape, ...x.shape]; + const xSize = util_exports.sizeFromShape(x.shape); + const flat = reshape3({ inputs: { x }, backend: backend2, attrs: { shape: [xSize] } }); + const program = new DiagProgram(xSize); + const res = backend2.runWebGLProgram(program, [flat], flat.dtype); + const out = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape: outShape } }); + backend2.disposeIntermediateTensorInfo(flat); + backend2.disposeIntermediateTensorInfo(res); + return out; + } + var diagConfig2 = { + kernelName: Diag, + backendName: "webgl", + kernelFunc: diag2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Dilation2D.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/dilation_gpu.js + init_define_BUILD_VERSION(); + var Dilation2DProgram = class { + constructor(convInfo) { + this.variableNames = ["x", "W"]; + this.outputShape = convInfo.outShape; + const { inHeight, inWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth } = convInfo; + const { top: padTop, left: padLeft } = padInfo; + this.userCode = ` + const ivec2 strides = ivec2(${strideHeight}, ${strideWidth}); + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + const float neg_infinity = -3.4e38; + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords.x; + int d1 = coords.w; + ivec2 outTopLeftCorner = + coords.yz * strides - pads; + int hBeg = outTopLeftCorner.x; + int wBeg = outTopLeftCorner.y; + + float curVal = neg_infinity; + for (int h = 0; h < ${filterHeight}; h++) { + int hIn = hBeg + h * ${dilationHeight}; + + if (hIn >= 0 && hIn < ${inHeight}) { + for (int w = 0; w < ${filterWidth}; w++) { + int wIn = wBeg + w * ${dilationWidth}; + + if (wIn >= 0 && wIn < ${inWidth}) { + float xVal = getX(batch, hIn, wIn, d1); + float wVal = getW(h, w, d1); + + float val = xVal + wVal; + if (val > curVal) { + curVal = val; + } + } + } + } + } + + float result = curVal; + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Dilation2D.js + function dilation2D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dilations } = attrs; + const convInfo = backend_util_exports.computeDilation2DInfo(x.shape, filter.shape, strides, pad3, "NHWC", dilations); + let out; + const program = new Dilation2DProgram(convInfo); + out = backend2.runWebGLProgram(program, [x, filter], "float32"); + const outReshaped = reshape3({ inputs: { x: out }, backend: backend2, attrs: { shape: convInfo.outShape } }); + backend2.disposeIntermediateTensorInfo(out); + return outReshaped; + } + var dilation2DConfig2 = { + kernelName: Dilation2D, + backendName: "webgl", + kernelFunc: dilation2D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Einsum.js + init_define_BUILD_VERSION(); + function einsum2(args) { + const { inputs, backend: backend2, attrs } = args; + const { equation } = attrs; + const tensors = inputs; + const { allDims, summedDims, idDims } = backend_util_exports.decodeEinsumEquation(equation, tensors.length); + backend_util_exports.checkEinsumDimSizes(allDims.length, idDims, tensors); + const { path, steps } = backend_util_exports.getEinsumComputePath(summedDims, idDims); + const nSteps = steps.length; + let out = null; + let numDimsRemaining = allDims.length; + const tensorsToDispose = []; + for (let i = 0; i < nSteps; ++i) { + for (const idTerm of steps[i]) { + const { permutationIndices: perm, expandDims: dimsToExpand } = backend_util_exports.getEinsumPermutation(numDimsRemaining, idDims[idTerm]); + let x; + if (backend_util_exports.isIdentityPermutation(perm)) { + x = tensors[idTerm]; + } else { + x = transpose3({ inputs: { x: tensors[idTerm] }, backend: backend2, attrs: { perm } }); + tensorsToDispose.push(x); + } + const targetShape = x.shape.slice(); + for (let k = 0; k < dimsToExpand.length; ++k) { + targetShape.splice(dimsToExpand[k], 0, 1); + } + if (!util_exports.arraysEqual(x.shape, targetShape)) { + x = reshape3({ inputs: { x }, backend: backend2, attrs: { shape: targetShape } }); + tensorsToDispose.push(x); + } + if (out === null) { + out = x; + } else { + out = multiply2({ inputs: { a: x, b: out }, backend: backend2 }); + tensorsToDispose.push(out); + } + } + if (i < nSteps - 1) { + if (path[i] >= 0) { + out = sum4({ + inputs: { x: out }, + backend: backend2, + attrs: { + axis: path[i] - (allDims.length - numDimsRemaining), + keepDims: false + } + }); + tensorsToDispose.push(out); + } + numDimsRemaining--; + } + } + for (const tensorInfo of tensorsToDispose) { + if (tensorInfo === out) { + continue; + } + backend2.disposeIntermediateTensorInfo(tensorInfo); + } + return out; + } + var einsumConfig2 = { + kernelName: Einsum, + backendName: "webgl", + kernelFunc: einsum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Elu.js + init_define_BUILD_VERSION(); + var ELU4 = `return (x >= 0.0) ? x : (exp(x) - 1.0);`; + var ELU_PACKED = ` + vec4 result; + + result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); + result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0); + result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0); + result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); + + return result; +`; + var elu4 = unaryKernelFunc2({ opSnippet: ELU4, packedOpSnippet: ELU_PACKED }); + var eluConfig2 = { + kernelName: Elu, + backendName: "webgl", + kernelFunc: elu4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/EluGrad.js + init_define_BUILD_VERSION(); + var ELU_DER = `return (b >= 1.0) ? a : a * (b + 1.0);`; + var ELU_DER_PACKED = ` + vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); + return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); +`; + var eluGrad2 = (args) => { + const { inputs, backend: backend2 } = args; + const { dy, y } = inputs; + const program = env().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new BinaryOpPackedProgram(ELU_DER_PACKED, dy.shape, y.shape) : new BinaryOpProgram(ELU_DER, dy.shape, y.shape); + return backend2.runWebGLProgram(program, [dy, y], dy.dtype); + }; + var eluGradConfig3 = { + kernelName: EluGrad, + backendName: "webgl", + kernelFunc: eluGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Equal.js + init_define_BUILD_VERSION(); + var PACKED_EQUAL = ` + return vec4(equal(a, b)); +`; + var EQUAL = `return float(a == b);`; + var equal3 = binaryKernelFunc2({ + opSnippet: EQUAL, + packedOpSnippet: PACKED_EQUAL, + dtype: "bool", + cpuKernelImpl: equalImplCPU + }); + var equalConfig2 = { + kernelName: Equal, + backendName: "webgl", + kernelFunc: equal3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Erf.js + init_define_BUILD_VERSION(); + var ERF = ` + // Error function is calculated approximately with elementary function. + // See "Handbook of Mathematical Functions with Formulas, + // Graphs, and Mathematical Tables", Abramowitz and Stegun. + float p = ${backend_util_exports.ERF_P}; + float a1 = ${backend_util_exports.ERF_A1}; + float a2 = ${backend_util_exports.ERF_A2}; + float a3 = ${backend_util_exports.ERF_A3}; + float a4 = ${backend_util_exports.ERF_A4}; + float a5 = ${backend_util_exports.ERF_A5}; + + float sign = sign(x); + x = abs(x); + float t = 1.0 / (1.0 + p * x); + return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x)); +`; + var erf3 = unaryKernelFunc2({ opSnippet: ERF }); + var erfConfig2 = { + kernelName: Erf, + backendName: "webgl", + kernelFunc: erf3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Exp.js + init_define_BUILD_VERSION(); + var EXP = CHECK_NAN_SNIPPET_UNARY + ` + return exp(x); +`; + var EXP_PACKED = ` + vec4 result = exp(x); + bvec4 isNaN = isnan(x); + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var exp3 = unaryKernelFunc2({ + opSnippet: EXP, + packedOpSnippet: EXP_PACKED, + cpuKernelImpl: expImplCPU, + dtype: "float32" + }); + var expConfig2 = { + kernelName: Exp, + backendName: "webgl", + kernelFunc: exp3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ExpandDims.js + init_define_BUILD_VERSION(); + function expandDims4(args) { + const { inputs, attrs, backend: backend2 } = args; + const { dim } = attrs; + const { input: input2 } = inputs; + const inputRank = input2.shape.length; + const newShape = input2.shape.slice(); + let $dim = dim; + if (dim < 0) { + util_exports.assert(-(inputRank + 1) <= dim, () => `Axis must be in the interval [${-(inputRank + 1)}, ${inputRank}]`); + $dim = inputRank + dim + 1; + } + newShape.splice($dim, 0, 1); + return reshape3({ inputs: { x: input2 }, backend: backend2, attrs: { shape: newShape } }); + } + var expandDimsConfig2 = { + kernelName: ExpandDims, + backendName: "webgl", + kernelFunc: expandDims4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Expm1.js + init_define_BUILD_VERSION(); + var EXPM1 = `return exp(x) - 1.0;`; + var expm13 = unaryKernelFunc2({ opSnippet: EXPM1, packedOpSnippet: EXPM1, cpuKernelImpl: expm1ImplCPU }); + var expm1Config2 = { + kernelName: Expm1, + backendName: "webgl", + kernelFunc: expm13 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/fft_gpu.js + init_define_BUILD_VERSION(); + var FFTProgram = class { + constructor(component, inputShape, inverse) { + this.variableNames = ["real", "imag"]; + const innerDim = inputShape[1]; + this.outputShape = inputShape; + const exponentMultiplierSnippet = inverse ? `2.0 * ${Math.PI}` : `-2.0 * ${Math.PI}`; + const resultDenominator = inverse ? `${innerDim}.0` : "1.0"; + let opString; + if (component === "real") { + opString = "return real * expR - imag * expI;"; + } else if (component === "imag") { + opString = "return real * expI + imag * expR;"; + } else { + throw new Error(`FFT component must be either "real" or "imag", got ${component}.`); + } + this.userCode = ` + const float exponentMultiplier = ${exponentMultiplierSnippet}; + + float unaryOpComplex(float real, float expR, float imag, float expI) { + ${opString} + } + + float mulMatDFT(int batch, int index) { + float indexRatio = float(index) / float(${innerDim}); + float exponentMultiplierTimesIndexRatio = + exponentMultiplier * indexRatio; + + float result = 0.0; + + for (int i = 0; i < ${innerDim}; i++) { + // x = (-2|2 * PI / N) * index * i; + float x = exponentMultiplierTimesIndexRatio * float(i); + float expR = cos(x); + float expI = sin(x); + float real = getReal(batch, i); + float imag = getImag(batch, i); + + result += + unaryOpComplex(real, expR, imag, expI) / ${resultDenominator}; + } + + return result; + } + + void main() { + ivec2 coords = getOutputCoords(); + setOutput(mulMatDFT(coords[0], coords[1])); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT_impl.js + function fftImpl2(x, inverse, backend2) { + const xData = backend2.texData.get(x.dataId); + const inputSize = util_exports.sizeFromShape(x.shape); + const innerDimensionSize = x.shape[x.shape.length - 1]; + const batch = inputSize / innerDimensionSize; + const input2D = reshape3({ inputs: { x }, backend: backend2, attrs: { shape: [batch, innerDimensionSize] } }); + const xShape = input2D.shape; + const realProgram = new FFTProgram("real", xShape, inverse); + const imagProgram = new FFTProgram("imag", xShape, inverse); + const inputs = [ + { + dataId: xData.complexTensorInfos.real.dataId, + dtype: xData.complexTensorInfos.real.dtype, + shape: xShape + }, + { + dataId: xData.complexTensorInfos.imag.dataId, + dtype: xData.complexTensorInfos.imag.dtype, + shape: xShape + } + ]; + const realPart = backend2.runWebGLProgram(realProgram, inputs, "float32"); + const imagPart = backend2.runWebGLProgram(imagProgram, inputs, "float32"); + const complexOutput = complex3({ inputs: { real: realPart, imag: imagPart }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(imagPart); + const complexOutputReshaped = reshape3({ inputs: { x: complexOutput }, backend: backend2, attrs: { shape: x.shape } }); + backend2.disposeIntermediateTensorInfo(input2D); + backend2.disposeIntermediateTensorInfo(complexOutput); + return complexOutputReshaped; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT.js + function fft3(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + return fftImpl2(input2, false, backend2); + } + var fftConfig2 = { + kernelName: FFT, + backendName: "webgl", + kernelFunc: fft3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Fill.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/fill_gpu.js + init_define_BUILD_VERSION(); + var FillProgram = class { + constructor(shape, value) { + this.outputShape = []; + this.customUniforms = [{ name: "value", type: "float" }]; + this.variableNames = ["x"]; + this.outputShape = shape; + this.userCode = ` + void main() { + // Input can be obtained from uniform value. + setOutput(value); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Fill.js + function fill3(args) { + const { backend: backend2, attrs } = args; + const { shape, value } = attrs; + let { dtype } = attrs; + dtype = dtype || util_exports.inferDtype(value); + if (dtype === "string") { + const values = util_exports.getArrayFromDType(dtype, util_exports.sizeFromShape(shape)); + values.fill(value); + return backend2.makeTensorInfo(shape, dtype, values); + } else { + const program = new FillProgram(shape, value); + const customValues = [[value]]; + return backend2.runWebGLProgram(program, [], dtype, customValues); + } + } + var fillConfig2 = { + kernelName: Fill, + backendName: "webgl", + kernelFunc: fill3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FlipLeftRight.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/flip_left_right_gpu.js + init_define_BUILD_VERSION(); + var FlipLeftRightProgram = class { + constructor(imageShape) { + this.variableNames = ["Image"]; + this.outputShape = []; + const imageWidth = imageShape[2]; + this.outputShape = imageShape; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int x = coords[2]; + + int coordX = ${imageWidth} - x - 1; + float outputValue; + if(coordX >= 0 && coordX < ${imageWidth}) { + outputValue = getImage(coords[0], coords[1], coordX, coords[3]); + } else { + outputValue = getImage(coords[0], coords[1], coords[2], coords[3]); + } + setOutput(outputValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FlipLeftRight.js + var flipLeftRightConfig2 = { + kernelName: FlipLeftRight, + backendName: "webgl", + kernelFunc: ({ inputs, backend: backend2 }) => { + const { image: image2 } = inputs; + const webglBackend = backend2; + const program = new FlipLeftRightProgram(image2.shape); + const output = webglBackend.runWebGLProgram(program, [image2], image2.dtype); + return output; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Floor.js + init_define_BUILD_VERSION(); + var FLOOR = `return floor(x);`; + var floor3 = unaryKernelFunc2({ opSnippet: FLOOR, packedOpSnippet: FLOOR, cpuKernelImpl: floorImplCPU }); + var floorConfig2 = { + kernelName: Floor, + backendName: "webgl", + kernelFunc: floor3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FloorDiv.js + init_define_BUILD_VERSION(); + var INT_DIV = ` + float s = sign(a) * sign(b); + int ia = round(a); + int ib = round(b); + if (ib != 0) { + // Windows (D3D) wants guaranteed non-zero int division at compile-time. + return float(idiv(ia, ib, s)); + } else { + return NAN; + } +`; + var INT_DIV_PACKED = ` + ivec4 ia = round(a); + ivec4 ib = round(b); + bvec4 cond = notEqual(ib, ivec4(0)); + ivec4 result = ivec4(0); + vec4 s = sign(a) * sign(b); + + // Windows (D3D) wants guaranteed non-zero int division at compile-time. + if (cond[0]) { + result[0] = idiv(ia[0], ib[0], s[0]); + } + if (cond[1]) { + result[1] = idiv(ia[1], ib[1], s[1]); + } + if (cond[2]) { + result[2] = idiv(ia[2], ib[2], s[2]); + } + if (cond[3]) { + result[3] = idiv(ia[3], ib[3], s[3]); + } + return vec4(result); +`; + var floorDiv3 = binaryKernelFunc2({ opSnippet: INT_DIV, packedOpSnippet: INT_DIV_PACKED, dtype: "int32" }); + var floorDivConfig2 = { + kernelName: FloorDiv, + backendName: "webgl", + kernelFunc: floorDiv3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels_utils/from_pixels_gpu.js + init_define_BUILD_VERSION(); + var FromPixelsProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + const glsl = getGlslDifferences(); + const [height, width] = outputShape; + this.outputShape = outputShape; + this.userCode = ` + void main() { + ivec3 coords = getOutputCoords(); + int texR = coords[0]; + int texC = coords[1]; + int depth = coords[2]; + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${width}.0, ${height}.0); + + vec4 values = ${glsl.texture2D}(A, uv); + float value; + if (depth == 0) { + value = values.r; + } else if (depth == 1) { + value = values.g; + } else if (depth == 2) { + value = values.b; + } else if (depth == 3) { + value = values.a; + } + + setOutput(floor(value * 255.0 + 0.5)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels_utils/from_pixels_packed_gpu.js + init_define_BUILD_VERSION(); + var FromPixelsPackedProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = false; + this.packedOutput = true; + const glsl = getGlslDifferences(); + const [height, width] = outputShape; + this.outputShape = outputShape; + this.userCode = ` + void main() { + ivec3 coords = getOutputCoords(); + int texR = coords[0]; + int texC = coords[1]; + int depth = coords[2]; + + vec4 result = vec4(0.); + + for(int row=0; row<=1; row++) { + for(int col=0; col<=1; col++) { + texC = coords[1] + row; + depth = coords[2] + col; + + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${width}.0, ${height}.0); + vec4 values = ${glsl.texture2D}(A, uv); + float value; + if (depth == 0) { + value = values.r; + } else if (depth == 1) { + value = values.g; + } else if (depth == 2) { + value = values.b; + } else if (depth == 3) { + value = values.a; + } + + result[row * 2 + col] = floor(value * 255.0 + 0.5); + } + } + + ${glsl.output} = result; + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels.js + var fromPixelsConfig = { + kernelName: FromPixels, + backendName: "webgl", + kernelFunc: fromPixels + }; + var fromPixels2DContext; + function fromPixels(args) { + const { inputs, backend: backend2, attrs } = args; + let { pixels } = inputs; + const { numChannels } = attrs; + const isVideo = typeof HTMLVideoElement !== "undefined" && pixels instanceof HTMLVideoElement; + const isImage = typeof HTMLImageElement !== "undefined" && pixels instanceof HTMLImageElement; + const [width, height] = isVideo ? [ + pixels.videoWidth, + pixels.videoHeight + ] : [pixels.width, pixels.height]; + const texShape = [height, width]; + const outShape = [height, width, numChannels]; + if (isImage || isVideo) { + if (fromPixels2DContext == null) { + fromPixels2DContext = document.createElement("canvas").getContext("2d"); + } + fromPixels2DContext.canvas.width = width; + fromPixels2DContext.canvas.height = height; + fromPixels2DContext.drawImage(pixels, 0, 0, width, height); + pixels = fromPixels2DContext.canvas; + } + const tempPixelHandle = backend2.makeTensorInfo(texShape, "int32"); + backend2.texData.get(tempPixelHandle.dataId).usage = TextureUsage.PIXELS; + backend2.gpgpu.uploadPixelDataToTexture(backend2.getTexture(tempPixelHandle.dataId), pixels); + const program = env().getBool("WEBGL_PACK") ? new FromPixelsPackedProgram(outShape) : new FromPixelsProgram(outShape); + const res = backend2.runWebGLProgram(program, [tempPixelHandle], "int32"); + backend2.disposeData(tempPixelHandle.dataId); + return res; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FusedConv2D.js + init_define_BUILD_VERSION(); + function fusedConv2d(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dataFormat, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode, false, $dataFormat); + let out; + const intermediates = []; + if (convInfo.filterHeight === 1 && convInfo.filterWidth === 1 && convInfo.dilationHeight === 1 && convInfo.dilationWidth === 1 && convInfo.strideHeight === 1 && convInfo.strideWidth === 1 && (convInfo.padInfo.type === "SAME" || convInfo.padInfo.type === "VALID")) { + out = conv2dByMatMul({ + x, + filter, + convInfo, + backend: backend2, + bias, + activation, + preluActivationWeights, + leakyreluAlpha + }); + } else if (env().getBool("WEBGL_CONV_IM2COL")) { + out = conv2dWithIm2Row({ + x, + filter, + convInfo, + backend: backend2, + bias, + activation, + preluActivationWeights, + leakyreluAlpha + }); + } else { + const hasBias = bias != null; + const hasPreluActivationWeights = preluActivationWeights != null; + const hasLeakyreluAlpha = activation === "leakyrelu"; + const fusedActivation = activation ? mapActivationToShaderProgram(activation, false) : null; + const program = new Conv2DProgram(convInfo, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha); + const inputs2 = [x, filter]; + const alignInputWithDataFormat = (input2, dataFormat2) => { + if (dataFormat2 === "NCHW" && input2.shape.length === 1 && input2.shape[0] !== 1) { + const alignedInput = reshape3({ + inputs: { x: input2 }, + backend: backend2, + attrs: { shape: [input2.shape[0], 1, 1] } + }); + intermediates.push(alignedInput); + return alignedInput; + } + return input2; + }; + if (hasBias) { + inputs2.push(alignInputWithDataFormat(bias, dataFormat)); + } + if (hasPreluActivationWeights) { + inputs2.push(alignInputWithDataFormat(preluActivationWeights, dataFormat)); + } + if (hasLeakyreluAlpha) { + const $leakyreluAlpha = backend2.makeTensorInfo([], "float32", util_exports.createScalarValue(leakyreluAlpha, "float32")); + inputs2.push($leakyreluAlpha); + intermediates.push($leakyreluAlpha); + } + out = backend2.runWebGLProgram(program, inputs2, "float32"); + } + const outReshaped = reshape3({ inputs: { x: out }, backend: backend2, attrs: { shape: convInfo.outShape } }); + intermediates.push(out); + intermediates.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return outReshaped; + } + var fusedConv2DConfig2 = { + kernelName: FusedConv2D, + backendName: "webgl", + kernelFunc: fusedConv2d + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FusedDepthwiseConv2D.js + init_define_BUILD_VERSION(); + function fusedDepthwiseConv2D2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs; + const intermediates = []; + let $dilations = dilations; + if ($dilations == null) { + $dilations = [1, 1]; + } + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, $dilations), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${strides} and dilations '${$dilations}'`); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad3, dimRoundingMode, true); + const shouldPackDepthwiseConv = env().getBool("WEBGL_PACK_DEPTHWISECONV") && convInfo.strideWidth <= 2 && convInfo.outChannels / convInfo.inChannels === 1; + const fusedActivation = activation ? mapActivationToShaderProgram(activation, shouldPackDepthwiseConv) : null; + const programInputs = [x, filter]; + const hasBias = bias != null; + const hasPreluActivationWeights = preluActivationWeights != null; + const hasLeakyreluAlpha = activation === "leakyrelu"; + if (hasBias) { + programInputs.push(bias); + } + if (hasPreluActivationWeights) { + programInputs.push(preluActivationWeights); + } + if (hasLeakyreluAlpha) { + const $leakyreluAlpha = backend2.makeTensorInfo([], "float32", util_exports.createScalarValue(leakyreluAlpha, "float32")); + programInputs.push($leakyreluAlpha); + intermediates.push($leakyreluAlpha); + } + let program; + if (shouldPackDepthwiseConv) { + program = new DepthwiseConvPacked2DProgram(convInfo, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha); + } else { + program = new DepthwiseConv2DProgram(convInfo, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha); + } + const customValues = [ + [convInfo.padInfo.top, convInfo.padInfo.left], + [convInfo.strideHeight, convInfo.strideWidth], + [convInfo.dilationHeight, convInfo.dilationWidth], + [convInfo.inHeight, convInfo.inWidth] + ]; + const result = backend2.runWebGLProgram(program, programInputs, "float32", customValues); + intermediates.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var fusedDepthwiseConv2DConfig2 = { + kernelName: FusedDepthwiseConv2D, + backendName: "webgl", + kernelFunc: fusedDepthwiseConv2D2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherNd.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gather_nd_gpu.js + init_define_BUILD_VERSION(); + var GatherNDProgram = class { + constructor(sliceDim, strides, shape, paramsShape) { + this.sliceDim = sliceDim; + this.strides = strides; + this.paramsShape = paramsShape; + this.variableNames = ["x", "indices"]; + this.outputShape = shape; + const stridesType = getCoordsDataType(strides.length); + const dtype = getCoordsDataType(shape.length); + const strideString = this.sliceDim > 1 ? "strides[j]" : "strides"; + const paramsShapeType = getCoordsDataType(paramsShape.length); + const paramsShapeString = paramsShape.length > 1 ? "paramsShape[j]" : "paramsShape"; + this.userCode = ` + ${stridesType} strides = ${stridesType}(${this.strides}); + ${paramsShapeType} paramsShape = ${paramsShapeType}(${this.paramsShape}); + void main() { + ${dtype} coords = getOutputCoords(); + int flattenIndex = 0; + bool out_of_bounds = false; + for (int j = 0; j < ${this.sliceDim}; j++) { + int index = round(getIndices(coords[0], j)); + out_of_bounds = out_of_bounds || index < 0; + out_of_bounds = out_of_bounds || index >= ${paramsShapeString}; + flattenIndex += index * ${strideString}; + } + setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1])); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherNd.js + function gatherNd2(args) { + const { inputs, backend: backend2 } = args; + const { params, indices } = inputs; + const indicesShape = indices.shape; + const sliceRank = indicesShape[indicesShape.length - 1]; + const paramsSize = util_exports.sizeFromShape(params.shape); + const [resultShape, numSlices, sliceSize, strides] = backend_util_exports.prepareAndValidate(params, indices); + const flattenIndices = reshape3({ inputs: { x: indices }, backend: backend2, attrs: { shape: [numSlices, sliceRank] } }); + const flattenX = reshape3({ + inputs: { x: params }, + backend: backend2, + attrs: { shape: [util_exports.sizeFromShape(params.shape) / sliceSize, sliceSize] } + }); + if (backend2.shouldExecuteOnCPU([params, indices]) || params.dtype === "string") { + const indicesData = backend2.readSync(indices.dataId); + const paramsBuf = backend2.bufferSync(params); + const outValue = gatherNdImplCPU(indicesData, paramsBuf, params.dtype, numSlices, sliceRank, sliceSize, strides, params.shape, paramsSize); + return backend2.makeTensorInfo(resultShape, params.dtype, outValue.values); + } + const program = new GatherNDProgram(sliceRank, strides, [numSlices, sliceSize], params.shape); + const res = backend2.runWebGLProgram(program, [flattenX, flattenIndices], flattenX.dtype); + const reshaped = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape: resultShape } }); + backend2.disposeIntermediateTensorInfo(flattenIndices); + backend2.disposeIntermediateTensorInfo(flattenX); + backend2.disposeIntermediateTensorInfo(res); + return reshaped; + } + var gatherNdConfig2 = { + kernelName: GatherNd, + backendName: "webgl", + kernelFunc: gatherNd2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherV2.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gather_gpu.js + init_define_BUILD_VERSION(); + var GatherProgram = class { + constructor(aShape, outputShape) { + this.variableNames = ["A", "indices"]; + this.outputShape = outputShape; + this.rank = outputShape.length; + const dtype = getCoordsDataType(this.rank); + const sourceCoords = getSourceCoords2(aShape, 2); + this.userCode = ` + void main() { + ${dtype} resRC = getOutputCoords(); + int index = int(getIndices(resRC.x, resRC.z)); + float inBounds = (index >= 0) && (index < ${aShape[2]}) ? 1.0 : 0.0; + setOutput(inBounds * getA(${sourceCoords})); + } + `; + } + }; + function getSourceCoords2(aShape, axis) { + const currentCoords = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"]; + const sourceCoords = []; + for (let i = 0; i < aShape.length; i++) { + if (i === 2) { + sourceCoords.push("index"); + } else { + sourceCoords.push(`${currentCoords[i]}`); + } + } + return sourceCoords.join(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherV2.js + function gatherV22(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, indices } = inputs; + const { axis, batchDims } = attrs; + const parsedAxis = util_exports.parseAxisParam(axis, x.shape)[0]; + if (env().get("DEBUG")) { + const indicesVals = backend2.readSync(indices.dataId); + const axisDim = x.shape[parsedAxis]; + for (let i = 0; i < indicesVals.length; ++i) { + const index = indicesVals[i]; + util_exports.assert(index <= axisDim - 1 && index >= 0, () => `GatherV2: the index value ${index} is not in [0, ${axisDim - 1}]`); + } + } + const shapeInfo = backend_util_exports.segment_util.collectGatherOpShapeInfo(x, indices, parsedAxis, batchDims); + const indicesSize = util_exports.sizeFromShape(indices.shape); + const toDispose = []; + const flattenX = reshape3({ + inputs: { x }, + backend: backend2, + attrs: { + shape: [ + shapeInfo.batchSize, + shapeInfo.outerSize, + shapeInfo.dimSize, + shapeInfo.sliceSize + ] + } + }); + const flattenIndex = reshape3({ + inputs: { x: indices }, + backend: backend2, + attrs: { shape: [shapeInfo.batchSize, indicesSize / shapeInfo.batchSize] } + }); + toDispose.push(flattenX); + toDispose.push(flattenIndex); + const flattenOutputShape = [ + shapeInfo.batchSize, + shapeInfo.outerSize, + indicesSize / shapeInfo.batchSize, + shapeInfo.sliceSize + ]; + if (backend2.shouldExecuteOnCPU([x, indices]) || x.dtype === "string") { + const indicesBuf = backend2.bufferSync(flattenIndex); + const xBuf = backend2.bufferSync(flattenX); + const outBuf = gatherV2ImplCPU(xBuf, indicesBuf, flattenOutputShape); + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return backend2.makeTensorInfo(shapeInfo.outputShape, outBuf.dtype, outBuf.values); + } + const program = new GatherProgram(flattenX.shape, flattenOutputShape); + const res = backend2.runWebGLProgram(program, [flattenX, flattenIndex], flattenX.dtype); + toDispose.push(res); + const reshaped = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape: shapeInfo.outputShape } }); + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return reshaped; + } + var gatherV2Config2 = { + kernelName: GatherV2, + backendName: "webgl", + kernelFunc: gatherV22 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Greater.js + init_define_BUILD_VERSION(); + var GREATER = `return float(a > b);`; + var GREATER_PACKED = ` + return vec4(greaterThan(a, b)); +`; + var greater3 = binaryKernelFunc2({ + opSnippet: GREATER, + packedOpSnippet: GREATER_PACKED, + cpuKernelImpl: greaterImplCPU, + dtype: "bool" + }); + var greaterConfig2 = { + kernelName: Greater, + backendName: "webgl", + kernelFunc: greater3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GreaterEqual.js + init_define_BUILD_VERSION(); + var GREATER_EQUAL = `return float(a >= b);`; + var GREATER_EQUAL_PACKED = ` + return vec4(greaterThanEqual(a, b)); +`; + var greaterEqual3 = binaryKernelFunc2({ + opSnippet: GREATER_EQUAL, + packedOpSnippet: GREATER_EQUAL_PACKED, + dtype: "bool", + cpuKernelImpl: greaterEqualImplCPU + }); + var greaterEqualConfig2 = { + kernelName: GreaterEqual, + backendName: "webgl", + kernelFunc: greaterEqual3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IFFT.js + init_define_BUILD_VERSION(); + function ifft3(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + return fftImpl2(input2, true, backend2); + } + var ifftConfig2 = { + kernelName: IFFT, + backendName: "webgl", + kernelFunc: ifft3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsFinite.js + init_define_BUILD_VERSION(); + var IS_FINITE = `return float(!isnan(x) && !isinf(x));`; + var isFinite4 = unaryKernelFunc2({ opSnippet: IS_FINITE, dtype: "bool" }); + var isFiniteConfig2 = { + kernelName: IsFinite, + backendName: "webgl", + kernelFunc: isFinite4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsInf.js + init_define_BUILD_VERSION(); + var IS_INF = `return float(isinf(x));`; + var isInf3 = unaryKernelFunc2({ opSnippet: IS_INF, dtype: "bool" }); + var isInfConfig2 = { + kernelName: IsInf, + backendName: "webgl", + kernelFunc: isInf3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsNaN.js + init_define_BUILD_VERSION(); + var IS_NAN = `return float(isnan(x));`; + var isNaN4 = unaryKernelFunc2({ opSnippet: IS_NAN, dtype: "bool" }); + var isNaNConfig2 = { + kernelName: IsNan, + backendName: "webgl", + kernelFunc: isNaN4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Less.js + init_define_BUILD_VERSION(); + var LESS = `return float(a < b);`; + var LESS_PACKED = ` + return vec4(lessThan(a, b)); +`; + var less3 = binaryKernelFunc2({ + opSnippet: LESS, + packedOpSnippet: LESS_PACKED, + cpuKernelImpl: lessImplCPU, + dtype: "bool" + }); + var lessConfig2 = { + kernelName: Less, + backendName: "webgl", + kernelFunc: less3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LessEqual.js + init_define_BUILD_VERSION(); + var LESS_EQUAL = `return float(a <= b);`; + var LESS_EQUAL_PACKED = ` + return vec4(lessThanEqual(a, b)); +`; + var lessEqual3 = binaryKernelFunc2({ + opSnippet: LESS_EQUAL, + packedOpSnippet: LESS_EQUAL_PACKED, + cpuKernelImpl: lessEqualImplCPU, + dtype: "bool" + }); + var lessEqualConfig2 = { + kernelName: LessEqual, + backendName: "webgl", + kernelFunc: lessEqual3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LinSpace.js + init_define_BUILD_VERSION(); + function linSpace2(args) { + const { backend: backend2, attrs } = args; + const { start, stop, num } = attrs; + const outVals = linSpaceImplCPU(start, stop, num); + return backend2.makeTensorInfo([outVals.length], "float32", outVals); + } + var linSpaceConfig2 = { + kernelName: LinSpace, + backendName: "webgl", + kernelFunc: linSpace2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Log.js + init_define_BUILD_VERSION(); + var LOG = CHECK_NAN_SNIPPET_UNARY + ` + return x < 0.0 ? 0./0. : log(x); +`; + var LOG_PACKED = ` + vec4 result = log(x); + bvec4 isNaN = isnan(x); + result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r); + result.g = isNaN.g ? x.g : (x.g < 0.0 ? 0./0. : result.g); + result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b); + result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a); + return result; +`; + var log4 = unaryKernelFunc2({ opSnippet: LOG, packedOpSnippet: LOG_PACKED, cpuKernelImpl: logImplCPU }); + var logConfig2 = { + kernelName: Log, + backendName: "webgl", + kernelFunc: log4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Log1p.js + init_define_BUILD_VERSION(); + var LOG1P = CHECK_NAN_SNIPPET_UNARY + ` + return log(1.0 + x); +`; + var log1p3 = unaryKernelFunc2({ opSnippet: LOG1P }); + var log1pConfig2 = { + kernelName: Log1p, + backendName: "webgl", + kernelFunc: log1p3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalAnd.js + init_define_BUILD_VERSION(); + var LOGICAL_AND = `return float(a >= 1.0 && b >= 1.0);`; + var LOGICAL_AND_PACKED = ` + return vec4( + vec4(greaterThanEqual(a, vec4(1.0))) * + vec4(greaterThanEqual(b, vec4(1.0)))); +`; + var logicalAnd3 = binaryKernelFunc2({ + opSnippet: LOGICAL_AND, + packedOpSnippet: LOGICAL_AND_PACKED, + dtype: "bool" + }); + var logicalAndConfig2 = { + kernelName: LogicalAnd, + backendName: "webgl", + kernelFunc: logicalAnd3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalNot.js + init_define_BUILD_VERSION(); + var LOGICAL_NOT = `return float(!(x >= 1.0));`; + var logicalNot3 = unaryKernelFunc2({ opSnippet: LOGICAL_NOT }); + var logicalNotConfig2 = { + kernelName: LogicalNot, + backendName: "webgl", + kernelFunc: logicalNot3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalOr.js + init_define_BUILD_VERSION(); + var LOGICAL_OR = `return float(a >= 1.0 || b >= 1.0);`; + var LOGICAL_OR_PACKED = ` + return min( + vec4(greaterThanEqual(a, vec4(1.0))) + + vec4(greaterThanEqual(b, vec4(1.0))), + vec4(1.0)); +`; + var logicalOr3 = binaryKernelFunc2({ opSnippet: LOGICAL_OR, packedOpSnippet: LOGICAL_OR_PACKED, dtype: "bool" }); + var logicalOrConfig2 = { + kernelName: LogicalOr, + backendName: "webgl", + kernelFunc: logicalOr3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRN.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_gpu.js + init_define_BUILD_VERSION(); + var LRNProgram = class { + constructor(xShape, radius, bias, alpha, beta) { + this.variableNames = ["x"]; + this.outputShape = []; + const rad = radius; + const maxD = xShape[3] - 1; + this.outputShape = xShape; + let powOperator; + const basis = `float(${bias}) + float(${alpha}) * sum`; + if (beta === 0.5) { + powOperator = `inversesqrt(${basis})`; + } else if (beta === 1) { + powOperator = `1.0/(${basis})`; + } else { + powOperator = `exp(log(${basis}) * float(-${beta}));`; + } + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int r = coords[1]; + int c = coords[2]; + int d = coords[3]; + float x = getX(b, r, c, d); + float sum = 0.0; + for (int j = -${rad}; j <= ${rad}; j++) { + int idx = d + j; + if (idx >= 0 && idx <= ${maxD}) { + float z = getX(b, r, c, idx); + sum += z * z; + } + } + float val = x * ${powOperator}; + setOutput(val); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_packed_gpu.js + init_define_BUILD_VERSION(); + var LRNPackedProgram = class { + constructor(xShape, radius, bias, alpha, beta) { + this.variableNames = ["x"]; + this.outputShape = []; + this.packedInputs = true; + this.packedOutput = true; + const rad = radius; + const maxD = xShape[3] - 1; + this.outputShape = xShape; + let powOperator; + const basis = `float(${bias}) + float(${alpha}) * sum`; + if (beta === 0.5) { + powOperator = `inversesqrt(${basis})`; + } else if (beta === 1) { + powOperator = `1.0/(${basis})`; + } else { + powOperator = `exp(log(${basis}) * float(-${beta}));`; + } + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords.x; + int r = coords.y; + int c = coords.z; + int d = coords.w; + + bool hasNextCol = d < ${this.outputShape[3]}; + bool hasNextRow = c < ${this.outputShape[2]}; + + vec4 sum = vec4(0.); + vec4 xFragAtOutputCoords = getX(b, r, c, d); + + vec4 xAtOutputCoords = vec4( + getChannel(xFragAtOutputCoords, vec2(c, d)), + hasNextCol ? + getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0, + hasNextRow ? + getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0, + (hasNextRow && hasNextCol) ? + getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0 + ); + + int firstChannel = d - ${rad}; + vec2 cache = vec2(0.); + if(firstChannel >= 0){ + vec4 firstChannelFrag = getX(b, r, c, firstChannel); + cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel)); + if(hasNextRow){ + cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel)); + } + } + + ivec2 depth = ivec2(d, d + 1); + for (int j = - ${rad}; j <= ${rad}; j++) { + ivec2 idx = depth + j; + bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0)); + bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${maxD})); + + bool depthInRange = aboveLowerBound.x && belowUpperBound.x; + bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y; + + if(depthInRange || depthPlusOneInRange){ + vec4 z = vec4(0.); + vec4 xFragAtCurrentDepth; + z.xz = cache.xy; + if(depthPlusOneInRange && hasNextCol){ + xFragAtCurrentDepth = idx.y != d ? + getX(b, r, c, idx.y) : xFragAtOutputCoords; + z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y)); + if(hasNextRow){ + z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y)); + } + } + cache.xy = z.yw; + sum += z * z; + } + } + vec4 result = xAtOutputCoords * ${powOperator}; + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRN.js + var lrn = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { depthRadius, bias, alpha, beta } = attrs; + const program = env().getBool("WEBGL_PACK_NORMALIZATION") ? new LRNPackedProgram(x.shape, depthRadius, bias, alpha, beta) : new LRNProgram(x.shape, depthRadius, bias, alpha, beta); + return backend2.runWebGLProgram(program, [x], x.dtype); + }; + var LRNConfig2 = { + kernelName: LRN, + backendName: "webgl", + kernelFunc: lrn + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRNGrad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_grad_gpu.js + init_define_BUILD_VERSION(); + var LRNGradProgram = class { + constructor(inputShape, depthRadius, bias, alpha, beta) { + this.variableNames = ["inputImage", "outputImage", "dy"]; + this.outputShape = []; + this.outputShape = inputShape; + this.depth = inputShape[3]; + this.depthRadius = depthRadius; + this.bias = bias; + this.alpha = alpha; + this.beta = beta; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int r = coords[1]; + int c = coords[2]; + + float result = 0.0; + for (int d = 0; d < ${this.depth}; ++d) { + int depthBegin = int(max(0.0, float(d - ${depthRadius}))); + int depthEnd = int(min(float(${this.depth}), + float(d + ${depthRadius} + 1))); + + const int MIN_DEPTH_BEGIN = 0; + const int MAX_DEPTH_END = ${this.depth}; + + float norm = 0.0; + for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) { + if (k < depthBegin){ + continue; + } + else if (k >= depthBegin && k < depthEnd) { + norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k); + } + else { + break; + } + } + + norm = float(${alpha}) * norm + float(${bias}); + + for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){ + if (k < depthBegin){ + continue; + } + else if (k >= depthBegin && k < depthEnd){ + float dyi = -2.0 * float(${alpha}) + * float(${beta}) + * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d) + / norm; + if (k == d) { + dyi += pow(norm, -1.0 * ${beta}); + } + if (k == coords[3]) { + dyi *= getDy(b, r, c, d); + result += dyi; + } + } + else { + break; + } + } + } + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRNGrad.js + var lrnGrad = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { x, y, dy } = inputs; + const { depthRadius, bias, alpha, beta } = attrs; + const program = new LRNGradProgram(x.shape, depthRadius, bias, alpha, beta); + return backend2.runWebGLProgram(program, [x, y, dy], x.dtype); + }; + var LRNGradConfig2 = { + kernelName: LRNGrad, + backendName: "webgl", + kernelFunc: lrnGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Max.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Max_impl.js + init_define_BUILD_VERSION(); + function maxImpl2(x, reduceShape, outShape, backend2) { + const inSize = util_exports.sizeFromShape(reduceShape); + const xSize = util_exports.sizeFromShape(x.shape); + const batchSize = xSize / inSize; + const reshapedInput = reshape3({ inputs: { x }, attrs: { shape: [batchSize, inSize] }, backend: backend2 }); + const reduced = reduce(reshapedInput, x.dtype, "max", backend2); + const reshapedOutput = reshape3({ inputs: { x: reduced }, attrs: { shape: outShape }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(reshapedInput); + backend2.disposeIntermediateTensorInfo(reduced); + return reshapedOutput; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Max.js + function max4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { reductionIndices, keepDims } = attrs; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(reductionIndices, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + const maxInputIsTransposed = permutedAxes != null; + const shouldExecuteOnCPU = backend2.shouldExecuteOnCPU([x]); + let maxInput = x; + if (maxInputIsTransposed) { + if (shouldExecuteOnCPU) { + const xTexData = backend2.texData.get(maxInput.dataId); + const values = xTexData.values; + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = x.shape[permutedAxes[i]]; + } + const maxInputValues = transposeImplCPU(values, x.shape, x.dtype, permutedAxes, newShape); + maxInput = backend2.makeTensorInfo(newShape, x.dtype); + const maxInputData = backend2.texData.get(maxInput.dataId); + maxInputData.values = maxInputValues; + } else { + maxInput = transposeImpl2(x, permutedAxes, backend2); + } + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("max", axes, xRank); + const [maxOutShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(maxInput.shape, axes); + let outShape = maxOutShape; + if (keepDims) { + outShape = backend_util_exports.expandShapeToKeepDim(maxOutShape, origAxes); + } + let out; + if (shouldExecuteOnCPU) { + const xTexData = backend2.texData.get(maxInput.dataId); + const values = xTexData.values; + const outValues = maxImplCPU(values, util_exports.sizeFromShape(reduceShape), outShape, x.dtype); + out = backend2.makeTensorInfo(outShape, x.dtype); + const outData = backend2.texData.get(out.dataId); + outData.values = outValues; + } else { + out = maxImpl2(maxInput, reduceShape, outShape, backend2); + } + if (maxInputIsTransposed) { + backend2.disposeIntermediateTensorInfo(maxInput); + } + return out; + } + var maxConfig2 = { + kernelName: Max, + backendName: "webgl", + kernelFunc: max4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Maximum.js + init_define_BUILD_VERSION(); + var MAXIMUM = CHECK_NAN_SNIPPET2 + ` + return max(a, b); +`; + var MAXIMUM_PACKED = ` + vec4 result = vec4(max(a, b)); + vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); + ` + CHECK_NAN_SNIPPET3 + ` + return result; +`; + var maximum3 = binaryKernelFunc2({ + opSnippet: MAXIMUM, + packedOpSnippet: MAXIMUM_PACKED, + cpuKernelImpl: maximumImplCPU + }); + var maximumConfig2 = { + kernelName: Maximum, + backendName: "webgl", + kernelFunc: maximum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool.js + init_define_BUILD_VERSION(); + function maxPool3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + assertNotComplex2(x, "maxPool"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = 1; + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 && util_exports.arraysEqual(convInfo.inShape, convInfo.outShape)) { + return identity2({ inputs: { x }, backend: backend2 }); + } + const maxPoolProgram = new Pool2DProgram(convInfo, "max", false); + return backend2.runWebGLProgram(maxPoolProgram, [x], x.dtype); + } + var maxPoolConfig2 = { + kernelName: MaxPool, + backendName: "webgl", + kernelFunc: maxPool3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool3D.js + init_define_BUILD_VERSION(); + function maxPool3d2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { filterSize, strides, pad: pad3, dataFormat, dimRoundingMode } = attrs; + const dilations = [1, 1, 1]; + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode, dataFormat); + const maxPoolProgram = new Pool3DProgram(convInfo, "max", false); + return backend2.runWebGLProgram(maxPoolProgram, [x], x.dtype); + } + var maxPool3DConfig2 = { + kernelName: MaxPool3D, + backendName: "webgl", + kernelFunc: maxPool3d2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool3DGrad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/max_pool_backprop_gpu.js + init_define_BUILD_VERSION(); + var MaxPool2DBackpropProgram = class { + constructor(convInfo) { + this.variableNames = ["dy", "maxPos"]; + this.outputShape = convInfo.inShape; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const lastIndex = effectiveFilterHeight * effectiveFilterWidth - 1; + this.userCode = ` + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + + ivec2 dyRCCorner = coords.yz - pads; + int dyRCorner = dyRCCorner.x; + int dyCCorner = dyRCCorner.y; + + // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + for (int wC = 0; wC < ${effectiveFilterWidth}; wC++) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + float dyValue = getDy(b, idyR, idyC, d); + int maxPosValue = ${lastIndex} - int(getMaxPos(b, idyR, idyC, d)); + + // Get the current value, check it against the value from the + // position matrix. + int curPosValue = wR * ${effectiveFilterWidth} + wC; + float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); + + dotProd += dyValue * mask; + } + } + setOutput(dotProd); + } + `; + } + }; + var MaxPool3DBackpropProgram = class { + constructor(convInfo) { + this.variableNames = ["dy", "maxPos"]; + this.outputShape = convInfo.inShape; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const lastIndex = effectiveFilterDepth * effectiveFilterHeight * effectiveFilterWidth - 1; + this.userCode = ` + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int ch = coords.u; + + ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; + int dyDCorner = dyCorner.x; + int dyRCorner = dyCorner.y; + int dyCCorner = dyCorner.z; + + // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get + // dx(xD, xR, xC, ch). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + + for (int wD = 0; wD < ${effectiveFilterDepth}; + wD += ${dilationDepth}) { + float dyD = float(dyDCorner + wD) / ${strideDepth}.0; + + if (dyD < 0.0 || dyD >= ${convInfo.outDepth}.0 || fract(dyD) > 0.0) { + continue; + } + int idyD = int(dyD); + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || + fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + for (int wC = 0; wC < ${effectiveFilterWidth}; + wC += ${dilationWidth}) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + float dyValue = getDy(batch, idyD, idyR, idyC, ch); + int maxPosValue = ${lastIndex} - + int(getMaxPos(batch, idyD, idyR, idyC, ch)); + + // Get the current value, check it against the value from the + // position matrix. + int curPosValue = + wD * ${effectiveFilterHeight} * ${effectiveFilterWidth} + + wR * ${effectiveFilterWidth} + wC; + float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); + + dotProd += dyValue * mask; + } + } + } + setOutput(dotProd); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool3DGrad.js + function maxPool3DGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const x = input2; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = [1, 1, 1]; + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + const maxPool3dPositionsProgram = new Pool3DProgram(convInfo, "max", true); + const maxPool3dPositions2 = backend2.runWebGLProgram(maxPool3dPositionsProgram, [x], x.dtype); + const maxPoolBackpropProgram = new MaxPool3DBackpropProgram(convInfo); + const result = backend2.runWebGLProgram(maxPoolBackpropProgram, [dy, maxPool3dPositions2], x.dtype); + backend2.disposeIntermediateTensorInfo(maxPool3dPositions2); + return result; + } + var maxPool3DGradConfig3 = { + kernelName: MaxPool3DGrad, + backendName: "webgl", + kernelFunc: maxPool3DGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolGrad.js + init_define_BUILD_VERSION(); + function maxPoolGrad3(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2, output } = inputs; + const x = input2; + assertNotComplex2([input2, output], "maxPoolGrad"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const getPositions = true; + const maxPoolPositionsProgram = new Pool2DProgram(convInfo, "max", getPositions); + const maxPoolPositions2 = backend2.runWebGLProgram(maxPoolPositionsProgram, [x], x.dtype); + const maxPoolBackPropProgram = new MaxPool2DBackpropProgram(convInfo); + const result = backend2.runWebGLProgram(maxPoolBackPropProgram, [dy, maxPoolPositions2], x.dtype); + backend2.disposeIntermediateTensorInfo(maxPoolPositions2); + return result; + } + var maxPoolGradConfig3 = { + kernelName: MaxPoolGrad, + backendName: "webgl", + kernelFunc: maxPoolGrad3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolWithArgmax.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolWithArgmax_impl.js + init_define_BUILD_VERSION(); + function maxPoolWithArgmaxImpl2(x, includeBatchInIndex, convInfo, backend2) { + let program = new Pool2DProgram(convInfo, "max", false); + const poolOutput = backend2.runWebGLProgram(program, [x], "float32"); + program = new Pool2DProgram(convInfo, "max", true, true, includeBatchInIndex); + const indexOutput = backend2.runWebGLProgram(program, [x], "float32"); + return [poolOutput, indexOutput]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolWithArgmax.js + var maxPoolWithArgmaxConfig2 = { + kernelName: MaxPoolWithArgmax, + backendName: "webgl", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { x } = inputs; + const { filterSize, strides, pad: pad3, includeBatchInIndex } = attrs; + const webglBackend = backend2; + util_exports.assert(x.shape.length === 4, () => `Error in maxPool: input must be rank 4 but got rank ${x.shape.length}.`); + const dilations = [1, 1]; + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, dilations, pad3); + const [result, indexes] = maxPoolWithArgmaxImpl2(x, includeBatchInIndex, convInfo, webglBackend); + return [result, indexes]; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mean.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mean_impl.js + init_define_BUILD_VERSION(); + function meanImpl(x, reduceShape, outShape, backend2) { + const inSize = util_exports.sizeFromShape(reduceShape); + const xSize = util_exports.sizeFromShape(x.shape); + const batchSize = xSize / inSize; + const reshapedInput = reshape3({ inputs: { x }, attrs: { shape: [batchSize, inSize] }, backend: backend2 }); + const reduced = reduce(reshapedInput, "float32", "mean", backend2); + const reshapedOutput = reshape3({ inputs: { x: reduced }, attrs: { shape: outShape }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(reshapedInput); + backend2.disposeIntermediateTensorInfo(reduced); + return reshapedOutput; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mean.js + var meanConfig2 = { + kernelName: Mean, + backendName: "webgl", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { x } = inputs; + const { keepDims, axis } = attrs; + const webglBackend = backend2; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + const meanInputIsTransposed = permutedAxes != null; + const shouldExecuteOnCPU = webglBackend.shouldExecuteOnCPU([x]); + const intermediates = []; + let meanInput = x; + if (meanInputIsTransposed) { + if (shouldExecuteOnCPU) { + const xTexData = webglBackend.texData.get(meanInput.dataId); + const values = xTexData.values; + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = x.shape[permutedAxes[i]]; + } + const meanInputValues = transposeImplCPU(values, x.shape, x.dtype, permutedAxes, newShape); + meanInput = webglBackend.makeTensorInfo(newShape, x.dtype); + const meanInputData = webglBackend.texData.get(meanInput.dataId); + meanInputData.values = meanInputValues; + } else { + meanInput = transposeImpl2(x, permutedAxes, webglBackend); + } + intermediates.push(meanInput); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("sum", axes, xRank); + const [meanOutShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(meanInput.shape, axes); + let outShape = meanOutShape; + if (keepDims) { + outShape = backend_util_exports.expandShapeToKeepDim(meanOutShape, origAxes); + } + const out = meanImpl(meanInput, reduceShape, outShape, webglBackend); + for (const i of intermediates) { + webglBackend.disposeIntermediateTensorInfo(i); + } + return out; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Min.js + init_define_BUILD_VERSION(); + function min4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let permutedX = x; + if (permutedAxes != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("min", axes, xRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(permutedX.shape, axes); + const inSize = util_exports.sizeFromShape(reduceShape); + const a2D = reshape3({ inputs: { x: permutedX }, backend: backend2, attrs: { shape: [-1, inSize] } }); + const reduced = reduce(a2D, a2D.dtype, "min", backend2); + let res; + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: newShape } }); + } else { + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: outShape } }); + } + backend2.disposeIntermediateTensorInfo(a2D); + backend2.disposeIntermediateTensorInfo(reduced); + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo(permutedX); + } + return res; + } + var minConfig2 = { + kernelName: Min, + backendName: "webgl", + kernelFunc: min4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Minimum.js + init_define_BUILD_VERSION(); + var MINIMUM = CHECK_NAN_SNIPPET2 + ` + return min(a, b); +`; + var MINIMUM_PACKED = ` + vec4 result = vec4(min(a, b)); + vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); + ` + CHECK_NAN_SNIPPET3 + ` + return result; +`; + var minimum3 = binaryKernelFunc2({ + opSnippet: MINIMUM, + packedOpSnippet: MINIMUM_PACKED, + cpuKernelImpl: minimumImplCPU + }); + var minimumConfig2 = { + kernelName: Minimum, + backendName: "webgl", + kernelFunc: minimum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MirrorPad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/mirror_pad_gpu.js + init_define_BUILD_VERSION(); + var MirrorPadProgram = class { + constructor(xShape, paddings, mode) { + this.variableNames = ["x"]; + this.outputShape = paddings.map((p2, i) => p2[0] + xShape[i] + p2[1]); + const rank = xShape.length; + const dtype = getCoordsDataType(rank); + const start = paddings.map((p2) => p2[0]).join(","); + const end = paddings.map((p2, i) => p2[0] + xShape[i]).join(","); + const unpackedCoords = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, rank); + const offset = mode === "reflect" ? 0 : 1; + if (rank === 1) { + this.userCode = ` + int start = ${start}; + int end = ${end}; + + void main() { + int outC = getOutputCoords(); + if (outC < start) { + outC = start * 2 - outC - ${offset}; + } else if(outC >= end) { + outC = (end - 1) * 2 - outC + ${offset}; + } + setOutput(getX(outC - start)); + } + `; + return; + } + this.userCode = ` + ${dtype} start = ${dtype}(${start}); + ${dtype} end = ${dtype}(${end}); + + void main() { + ${dtype} outC = getOutputCoords(); + for (int i = 0; i < ${rank}; i++) { + if (outC[i] < start[i]) { + outC[i] = start[i] * 2 - outC[i] - ${offset}; + } else if(outC[i] >= end[i]) { + outC[i] = (end[i] - 1) * 2 - outC[i] + ${offset}; + } + } + ${dtype} coords = outC - start; + setOutput(getX(${unpackedCoords})); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/mirror_pad_packed_gpu.js + init_define_BUILD_VERSION(); + var MirrorPadPackedProgram = class { + constructor(xShape, paddings, mode) { + this.variableNames = ["x"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = paddings.map((p2, i) => p2[0] + xShape[i] + p2[1]); + const rank = xShape.length; + const dtype = getCoordsDataType(rank); + const start = paddings.map((p2) => p2[0]).join(","); + const end = paddings.map((p2, i) => p2[0] + xShape[i]).join(","); + const coords2 = getChannels("rc", rank); + const source = getChannels("source", rank); + const cLimit = `${coords2[rank - 1]} < ${this.outputShape[rank - 1]}`; + const innerDims = rank === 1 ? "source" : `vec2(${source.slice(-2).join()})`; + const offset = mode === "reflect" ? 0 : 1; + let mainLoop = ""; + if (rank === 1) { + const padSetup = ` + ${dtype} source = rc; + if (source < start) { + source = start * 2 - source - ${offset}; + } else if (source >= end) { + source = (end - 1) * 2 - source + ${offset}; + } + source -= start; + `; + mainLoop = ` + ${dtype} rc = outputLoc; + ${padSetup} + result[0] = getChannel(getX(${source.join()}), ${innerDims}); + ${coords2[rank - 1]} += 1; + if(${cLimit}) { + ${padSetup} + result[1] = getChannel(getX(${source.join()}), ${innerDims}); + } + `; + } else { + const padSetup = ` + ${dtype} source = rc; + ${dtype} lt = ${dtype}(lessThan(source, start)); + ${dtype} gte = ${dtype}(greaterThanEqual(source, end)); + ${dtype} orig = 1 - (lt + gte); + source = orig * source + + lt * (start * 2 - source - ${offset}) + + gte * ((end - 1) * 2 - source + ${offset}); + source -= start; + `; + mainLoop = ` + ${dtype} rc = outputLoc; + ${padSetup} + result[0] = getChannel(getX(${source.join()}), ${innerDims}); + ${coords2[rank - 1]} += 1; + if(${cLimit}) { + ${padSetup} + result[1] = getChannel(getX(${source.join()}), ${innerDims}); + } + rc = outputLoc; + ${coords2[rank - 2]} += 1; + if(${coords2[rank - 2]} < ${this.outputShape[rank - 2]}) { + ${padSetup} + result[2] = getChannel(getX(${source.join()}), ${innerDims}); + ${coords2[rank - 1]} += 1; + if(${cLimit}) { + ${padSetup} + result[3] = getChannel(getX(${source.join()}), ${innerDims}); + } + } + `; + } + this.userCode = ` + const ${dtype} start = ${dtype}(${start}); + const ${dtype} end = ${dtype}(${end}); + + void main() { + ${dtype} outputLoc = getOutputCoords(); + vec4 result = vec4(0.); + ${mainLoop} + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MirrorPad.js + var mirrorPadKernelFunc = ({ inputs, backend: backend2, attrs }) => { + const { x } = inputs; + const { paddings, mode } = attrs; + const program = env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new MirrorPadPackedProgram(x.shape, paddings, mode) : new MirrorPadProgram(x.shape, paddings, mode); + const output = backend2.runWebGLProgram(program, [x], x.dtype); + return output; + }; + var mirrorPadConfig2 = { + kernelName: MirrorPad, + backendName: "webgl", + kernelFunc: mirrorPadKernelFunc + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mod.js + init_define_BUILD_VERSION(); + var MOD = `if (b == 0.0) return NAN; + return mod(a, b);`; + var MOD_PACKED = ` + vec4 result = mod(a, b); + vec4 isNaN = vec4(equal(b, vec4(0.0))); + ` + CHECK_NAN_SNIPPET3 + ` + return result; +`; + var mod3 = binaryKernelFunc2({ + opSnippet: MOD, + packedOpSnippet: MOD_PACKED + }); + var modConfig2 = { + kernelName: Mod, + backendName: "webgl", + kernelFunc: mod3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multinomial.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/multinomial_gpu.js + init_define_BUILD_VERSION(); + var MultinomialProgram = class { + constructor(batchSize, numOutcomes, numSamples) { + this.variableNames = ["probs"]; + this.customUniforms = [{ name: "seed", type: "float" }]; + this.outputShape = [batchSize, numSamples]; + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + + float r = random(seed); + float cdf = 0.0; + + for (int i = 0; i < ${numOutcomes - 1}; i++) { + cdf += getProbs(batch, i); + + if (r < cdf) { + setOutput(float(i)); + return; + } + } + + // If no other event happened, last event happened. + setOutput(float(${numOutcomes - 1})); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Softmax.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RealDiv.js + init_define_BUILD_VERSION(); + var DIV = ` +if (a == b) { + return 1.0; +}; +return a / b;`; + var DIV_PACKED = ` + // vec4 one = vec4(equal(a, b)); + // return one + (vec4(1.0) - one) * a / b; + vec4 result = a / b; + if(a.x == b.x) { + result.x = 1.; + } + if(a.y == b.y) { + result.y = 1.; + } + if(a.z == b.z) { + result.z = 1.; + } + if(a.w == b.w) { + result.w = 1.; + } + + return result; +`; + var realDiv = binaryKernelFunc2({ opSnippet: DIV, packedOpSnippet: DIV_PACKED, checkOutOfBounds: true }); + var realDivConfig2 = { + kernelName: RealDiv, + backendName: "webgl", + kernelFunc: realDiv + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sub.js + init_define_BUILD_VERSION(); + var SUB = "return a - b;"; + var sub3 = binaryKernelFunc2({ + opSnippet: SUB, + packedOpSnippet: SUB, + supportsComplex: true, + cpuKernelImpl: subImplCPU + }); + var subConfig2 = { + kernelName: Sub, + backendName: "webgl", + kernelFunc: sub3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Softmax.js + function softmax3(args) { + const { inputs, backend: backend2, attrs } = args; + const { logits } = inputs; + const { dim } = attrs; + const axes = util_exports.parseAxisParam([dim], logits.shape); + const maxLogit = max4({ + inputs: { x: logits }, + backend: backend2, + attrs: { reductionIndices: axes, keepDims: false } + }); + const expandedShape = backend_util_exports.expandShapeToKeepDim(maxLogit.shape, axes); + const maxLogitsReshaped = reshape3({ inputs: { x: maxLogit }, backend: backend2, attrs: { shape: expandedShape } }); + const a = sub3({ inputs: { a: logits, b: maxLogitsReshaped }, backend: backend2 }); + const b = exp3({ inputs: { x: a }, backend: backend2 }); + const sumExp = sum4({ inputs: { x: b }, backend: backend2, attrs: { axis: axes, keepDims: false } }); + const sumExpReshaped = reshape3({ inputs: { x: sumExp }, backend: backend2, attrs: { shape: expandedShape } }); + const res = realDiv({ inputs: { a: b, b: sumExpReshaped }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(maxLogit); + backend2.disposeIntermediateTensorInfo(maxLogitsReshaped); + backend2.disposeIntermediateTensorInfo(a); + backend2.disposeIntermediateTensorInfo(b); + backend2.disposeIntermediateTensorInfo(sumExp); + backend2.disposeIntermediateTensorInfo(sumExpReshaped); + return res; + } + var softmaxConfig2 = { + kernelName: Softmax, + backendName: "webgl", + kernelFunc: softmax3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multinomial.js + function multinomial2(args) { + const { inputs, backend: backend2, attrs } = args; + const { logits } = inputs; + const { numSamples, seed, normalized } = attrs; + const probs = normalized ? logits : softmax3({ inputs: { logits }, backend: backend2, attrs: { dim: logits.shape.length - 1 } }); + const batchSize = probs.shape[0]; + const numOutcomes = probs.shape[1]; + const program = new MultinomialProgram(batchSize, numOutcomes, numSamples); + const customValues = [[seed]]; + const res = backend2.runWebGLProgram(program, [probs], "int32", customValues); + if (!normalized) { + backend2.disposeIntermediateTensorInfo(probs); + } + return res; + } + var multinomialConfig2 = { + kernelName: Multinomial, + backendName: "webgl", + kernelFunc: multinomial2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Neg.js + init_define_BUILD_VERSION(); + var NEG = CHECK_NAN_SNIPPET + ` + return -x; +`; + var NEG_PACKED = ` + vec4 result = -x; + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + function neg3(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (backend2.shouldExecuteOnCPU([x])) { + const xData = backend2.texData.get(x.dataId); + const [outValues, newShape] = negImplCPU(xData.values, x.shape, x.dtype); + return backend2.makeTensorInfo(newShape, x.dtype, outValues); + } + let program; + if (env().getBool("WEBGL_PACK_UNARY_OPERATIONS")) { + program = new UnaryOpPackedProgram(x.shape, NEG_PACKED); + } else { + program = new UnaryOpProgram(x.shape, NEG); + } + return backend2.runWebGLProgram(program, [x], x.dtype); + } + var negConfig2 = { + kernelName: Neg, + backendName: "webgl", + kernelFunc: neg3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV3.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV3Impl3 = kernel_impls_exports.nonMaxSuppressionV3Impl; + function nonMaxSuppressionV32(args) { + backend_util_exports.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold } = attrs; + const boxesVals = backend2.readSync(boxes.dataId); + const scoresVals = backend2.readSync(scores.dataId); + const { selectedIndices } = nonMaxSuppressionV3Impl3(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold); + return backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)); + } + var nonMaxSuppressionV3Config2 = { + kernelName: NonMaxSuppressionV3, + backendName: "webgl", + kernelFunc: nonMaxSuppressionV32 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV4.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV4Impl3 = kernel_impls_exports.nonMaxSuppressionV4Impl; + function nonMaxSuppressionV42(args) { + backend_util_exports.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize } = attrs; + const boxesVals = backend2.readSync(boxes.dataId); + const scoresVals = backend2.readSync(scores.dataId); + const { selectedIndices, validOutputs } = nonMaxSuppressionV4Impl3(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize); + return [ + backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)), + backend2.makeTensorInfo([], "int32", new Int32Array([validOutputs])) + ]; + } + var nonMaxSuppressionV4Config2 = { + kernelName: NonMaxSuppressionV4, + backendName: "webgl", + kernelFunc: nonMaxSuppressionV42 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV5.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV5Impl3 = kernel_impls_exports.nonMaxSuppressionV5Impl; + function nonMaxSuppressionV52(args) { + backend_util_exports.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma } = attrs; + const boxesVals = backend2.readSync(boxes.dataId); + const scoresVals = backend2.readSync(scores.dataId); + const maxOutputSizeVal = maxOutputSize; + const iouThresholdVal = iouThreshold; + const scoreThresholdVal = scoreThreshold; + const softNmsSigmaVal = softNmsSigma; + const { selectedIndices, selectedScores } = nonMaxSuppressionV5Impl3(boxesVals, scoresVals, maxOutputSizeVal, iouThresholdVal, scoreThresholdVal, softNmsSigmaVal); + return [ + backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)), + backend2.makeTensorInfo([selectedScores.length], "float32", new Float32Array(selectedScores)) + ]; + } + var nonMaxSuppressionV5Config2 = { + kernelName: NonMaxSuppressionV5, + backendName: "webgl", + kernelFunc: nonMaxSuppressionV52 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OneHot.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/onehot_gpu.js + init_define_BUILD_VERSION(); + var OneHotProgram = class { + constructor(numIndices, depth, onValue, offValue) { + this.variableNames = ["indices"]; + this.outputShape = [numIndices, depth]; + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + int index = round(getIndices(coords.x)); + setOutput(mix(float(${offValue}), float(${onValue}), + float(index == coords.y))); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OneHot.js + var oneHot3 = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { indices } = inputs; + const { depth, onValue, offValue } = attrs; + const indicesSize = util_exports.sizeFromShape(indices.shape); + const program = new OneHotProgram(indicesSize, depth, onValue, offValue); + const reshaped = reshape3({ inputs: { x: indices }, backend: backend2, attrs: { shape: [indicesSize] } }); + const result = backend2.runWebGLProgram(program, [reshaped], indices.dtype); + backend2.disposeIntermediateTensorInfo(reshaped); + const outShape = [...indices.shape, depth]; + const out = reshape3({ inputs: { x: result }, backend: backend2, attrs: { shape: outShape } }); + backend2.disposeIntermediateTensorInfo(result); + return out; + }; + var oneHotConfig2 = { + kernelName: OneHot, + backendName: "webgl", + kernelFunc: oneHot3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OnesLike.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ZerosLike.js + init_define_BUILD_VERSION(); + function zerosLike3(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (x.dtype === "complex64") { + const realPart = real3({ inputs: { input: x }, backend: backend2 }); + const r = zerosLike3({ inputs: { x: realPart }, backend: backend2 }); + const imagPart = imag3({ inputs: { input: x }, backend: backend2 }); + const i = zerosLike3({ inputs: { x: imagPart }, backend: backend2 }); + const result = complex3({ inputs: { real: r, imag: i }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(r); + backend2.disposeIntermediateTensorInfo(imagPart); + backend2.disposeIntermediateTensorInfo(i); + return result; + } else { + return fill3({ + attrs: { + shape: x.shape, + dtype: x.dtype, + value: x.dtype === "string" ? "" : 0 + }, + backend: backend2 + }); + } + } + var zerosLikeConfig2 = { + kernelName: ZerosLike, + backendName: "webgl", + kernelFunc: zerosLike3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OnesLike.js + function onesLike3(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (x.dtype === "string") { + throw new Error("onesLike is not supported under string dtype"); + } else if (x.dtype === "complex64") { + const realPart = real3({ inputs: { input: x }, backend: backend2 }); + const r = onesLike3({ inputs: { x: realPart }, backend: backend2 }); + const imagPart = imag3({ inputs: { input: x }, backend: backend2 }); + const i = zerosLike3({ inputs: { x: imagPart }, backend: backend2 }); + const result = complex3({ inputs: { real: r, imag: i }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(r); + backend2.disposeIntermediateTensorInfo(imagPart); + backend2.disposeIntermediateTensorInfo(i); + return result; + } else { + return fill3({ attrs: { shape: x.shape, dtype: x.dtype, value: 1 }, backend: backend2 }); + } + } + var onesLikeConfig2 = { + kernelName: OnesLike, + backendName: "webgl", + kernelFunc: onesLike3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Pack.js + init_define_BUILD_VERSION(); + function pack2(args) { + const { inputs, backend: backend2, attrs } = args; + const { axis } = attrs; + if (inputs.length === 1) { + return expandDims4({ inputs: { input: inputs[0] }, backend: backend2, attrs: { dim: axis } }); + } + const shape = inputs[0].shape; + const dtype = inputs[0].dtype; + inputs.forEach((t) => { + util_exports.assertShapesMatch(shape, t.shape, "All tensors passed to stack must have matching shapes"); + util_exports.assert(dtype === t.dtype, () => "All tensors passed to stack must have matching dtypes"); + }); + const intermediateTensorInfos = []; + const expandedTensors = inputs.map((t) => { + const expandedT = expandDims4({ inputs: { input: t }, backend: backend2, attrs: { dim: axis } }); + intermediateTensorInfos.push(expandedT); + return expandedT; + }); + const result = concat3({ inputs: expandedTensors, backend: backend2, attrs: { axis } }); + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var packConfig2 = { + kernelName: Pack, + backendName: "webgl", + kernelFunc: pack2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/PadV2.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/pad_gpu.js + init_define_BUILD_VERSION(); + var PadProgram = class { + constructor(xShape, paddings, constantValue) { + this.variableNames = ["x"]; + this.customUniforms = [{ name: "value", type: "float" }]; + this.outputShape = paddings.map((p2, i) => p2[0] + xShape[i] + p2[1]); + const rank = xShape.length; + const type = getCoordsDataType(rank); + const start = paddings.map((p2) => p2[0]).join(","); + const end = paddings.map((p2, i) => p2[0] + xShape[i]).join(","); + const unpackedCoords = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, rank); + if (rank === 1) { + this.userCode = ` + int start = ${start}; + int end = ${end}; + + void main() { + int outC = getOutputCoords(); + if (outC < start || outC >= end) { + setOutput(value); + } else { + setOutput(getX(outC - start)); + } + } + `; + return; + } + this.userCode = ` + ${type} start = ${type}(${start}); + ${type} end = ${type}(${end}); + + void main() { + ${type} outC = getOutputCoords(); + if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) { + setOutput(value); + } else { + ${type} coords = outC - start; + setOutput(getX(${unpackedCoords})); + } + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/pad_packed_gpu.js + init_define_BUILD_VERSION(); + var PadPackedProgram = class { + constructor(xShape, paddings, constantValue) { + this.variableNames = ["x"]; + this.packedInputs = true; + this.packedOutput = true; + this.customUniforms = [{ name: "value", type: "float" }]; + this.outputShape = paddings.map((p2, i) => p2[0] + xShape[i] + p2[1]); + const rank = xShape.length; + const dtype = getCoordsDataType(rank); + const start = paddings.map((p2) => p2[0]).join(","); + const end = paddings.map((p2, i) => p2[0] + xShape[i]).join(","); + const coords2 = getChannels("rc", rank); + const source = getChannels("source", rank); + const cLimit = `${coords2[rank - 1]} < ${this.outputShape[rank - 1]}`; + const innerDims = rank === 1 ? "source" : `vec2(${source.slice(-2).join()})`; + const componentSetup = [ + `${dtype} rc = outputLoc;`, + `${coords2[rank - 1]} += 1; + if(${cLimit}) { + `, + rank === 1 ? "" : `} + rc = outputLoc; + ${coords2[rank - 2]} += 1; + if(${coords2[rank - 2]} < ${this.outputShape[rank - 2]}) {`, + rank === 1 ? "" : ` ${coords2[rank - 1]} += 1; + if(${cLimit}) {` + ]; + const paddingArea = rank === 1 ? "rc < start || rc >= end" : "any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))"; + let mainLoop = ""; + for (let i = 0, j = rank === 1 ? 2 : 4; i < j; i++) { + mainLoop += ` + ${componentSetup[i]} + if (${paddingArea}) { + result[${i}] = float(value); + } else { + ${dtype} source = rc - start; + result[${i}] = getChannel(getX(${source.join()}), ${innerDims}); + } + `; + } + mainLoop += rank === 1 ? `} ` : `}}`; + this.userCode = ` + const ${dtype} start = ${dtype}(${start}); + const ${dtype} end = ${dtype}(${end}); + + void main() { + ${dtype} outputLoc = getOutputCoords(); + vec4 result = vec4(0.); + ${mainLoop} + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/PadV2.js + var padV22 = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { paddings, constantValue } = attrs; + if (util_exports.sizeFromShape(x.shape) === 0) { + const outputShape = paddings.map((p2, i) => p2[0] + x.shape[i] + p2[1]); + return fill3({ + backend: backend2, + attrs: { shape: outputShape, value: constantValue, dtype: x.dtype } + }); + } + const program = env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new PadPackedProgram(x.shape, paddings, constantValue) : new PadProgram(x.shape, paddings, constantValue); + const customValues = [[constantValue]]; + return backend2.runWebGLProgram(program, [x], x.dtype, customValues); + }; + var padV2Config2 = { + kernelName: PadV2, + backendName: "webgl", + kernelFunc: padV22 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Pow.js + init_define_BUILD_VERSION(); + var POW = ` + if(a < 0.0 && floor(b) < b){ + return NAN; + } + if (b == 0.0) { + return 1.0; + } + return (round(mod(b, 2.0)) != 1) ? + pow(abs(a), b) : sign(a) * pow(abs(a), b); +`; + var POW_PACKED = ` + // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. + vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); + vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); + vec4 result = multiplier * pow(abs(a), b); + + // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS + bvec4 isExpZero = equal(b, vec4(0.0)); + result.r = isExpZero.r ? 1.0 : result.r; + result.g = isExpZero.g ? 1.0 : result.g; + result.b = isExpZero.b ? 1.0 : result.b; + result.a = isExpZero.a ? 1.0 : result.a; + + vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b)); + ` + CHECK_NAN_SNIPPET3 + ` + return result; +`; + var pow3 = binaryKernelFunc2({ opSnippet: POW, packedOpSnippet: POW_PACKED }); + var powConfig2 = { + kernelName: Pow, + backendName: "webgl", + kernelFunc: pow3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Prod.js + init_define_BUILD_VERSION(); + function prod3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + const xRank = x.shape.length; + const toDispose = []; + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let permutedX = x; + if (permutedAxes != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + toDispose.push(permutedX); + } + backend_util_exports.assertAxesAreInnerMostDims("prod", axes, xRank); + let res; + if (backend2.shouldExecuteOnCPU([permutedX])) { + const xVals = backend2.texData.get(permutedX.dataId).values; + const { outVals, outShape, outDtype } = prodImplCPU(permutedX.shape, permutedX.dtype, xVals, axes); + res = backend2.makeTensorInfo(outShape, outDtype, outVals); + } else { + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(permutedX.shape, axes); + const inSize = util_exports.sizeFromShape(reduceShape); + const a2D = reshape3({ inputs: { x: permutedX }, backend: backend2, attrs: { shape: [-1, inSize] } }); + const outputDType = sumOutType(x.dtype); + const reduced = reduce(a2D, outputDType, "prod", backend2); + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: outShape } }); + toDispose.push(a2D); + toDispose.push(reduced); + } + if (keepDims) { + toDispose.push(res); + const newShape = backend_util_exports.expandShapeToKeepDim(res.shape, origAxes); + res = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape: newShape } }); + } + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return res; + } + var prodConfig2 = { + kernelName: Prod, + backendName: "webgl", + kernelFunc: prod3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Range.js + init_define_BUILD_VERSION(); + var range4 = (args) => { + const { backend: backend2, attrs } = args; + const { start, stop, step: step5, dtype } = attrs; + const values = rangeImplCPU(start, stop, step5, dtype); + return backend2.makeTensorInfo([values.length], dtype, values); + }; + var rangeConfig2 = { + kernelName: Range, + backendName: "webgl", + kernelFunc: range4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reciprocal.js + init_define_BUILD_VERSION(); + var RECIPROCAL = `return 1.0 / x;`; + var reciprocal3 = unaryKernelFunc2({ opSnippet: RECIPROCAL }); + var reciprocalConfig2 = { + kernelName: Reciprocal, + backendName: "webgl", + kernelFunc: reciprocal3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Relu.js + init_define_BUILD_VERSION(); + var RELU3 = CHECK_NAN_SNIPPET + ` + return (x < 0.0) ? 0.0 : x; +`; + var RELU_PACKED = ` + vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var relu3 = unaryKernelFunc2({ opSnippet: RELU3, packedOpSnippet: RELU_PACKED }); + var reluConfig2 = { + kernelName: Relu, + backendName: "webgl", + kernelFunc: relu3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Relu6.js + init_define_BUILD_VERSION(); + var RELU63 = CHECK_NAN_SNIPPET + ` + return (x < 0.0) ? 0.0 : min(6.0, x); +`; + var RELU6_PACKED = ` + vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var relu63 = unaryKernelFunc2({ opSnippet: RELU63, packedOpSnippet: RELU6_PACKED }); + var relu6Config2 = { + kernelName: Relu6, + backendName: "webgl", + kernelFunc: relu63 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinear.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_gpu.js + init_define_BUILD_VERSION(); + var ResizeBilinearProgram = class { + constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) { + this.variableNames = ["A"]; + this.outputShape = []; + const [batch, oldHeight, oldWidth, depth] = inputShape; + this.outputShape = [batch, newHeight, newWidth, depth]; + const effectiveInSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + let sourceFracIndexRC; + if (halfPixelCenters) { + sourceFracIndexRC = `(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)`; + } else { + sourceFracIndexRC = `vec2(yRC) * effectiveInputOverOutputRatioRC`; + } + this.userCode = ` + const vec2 effectiveInputOverOutputRatioRC = vec2( + ${effectiveInSize[0] / effectiveOutSize[0]}, + ${effectiveInSize[1] / effectiveOutSize[1]}); + const vec2 inputShapeRC = vec2(${oldHeight}.0, ${oldWidth}.0); + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + ivec2 yRC = coords.yz; + + // Fractional source index. + vec2 sourceFracIndexRC = ${sourceFracIndexRC}; + + // Compute the four integer indices. + ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0))); + ivec2 sourceCeilRC = ivec2( + min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); + + float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d); + float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d); + float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d); + float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d); + + vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC); + + float top = topLeft + (topRight - topLeft) * fracRC.y; + float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y; + float newValue = top + (bottom - top) * fracRC.x; + + setOutput(newValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_packed_gpu.js + init_define_BUILD_VERSION(); + var ResizeBilinearPackedProgram = class { + constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = []; + const [batch, oldHeight, oldWidth, depth] = inputShape; + this.outputShape = [batch, newHeight, newWidth, depth]; + const effectiveInSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + let sourceFracIndexRC; + if (halfPixelCenters) { + sourceFracIndexRC = `(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)`; + } else { + sourceFracIndexRC = `vec3(yRC) * effectiveInputOverOutputRatioRC`; + } + this.userCode = ` + const vec3 effectiveInputOverOutputRatioRC = vec3( + ${effectiveInSize[0] / effectiveOutSize[0]}, + ${effectiveInSize[1] / effectiveOutSize[1]}, + ${effectiveInSize[1] / effectiveOutSize[1]}); + const vec3 inputShapeRC = vec3(${oldHeight}.0, ${oldWidth}.0, + ${oldWidth}.0); + + float getAValue(int b, int r, int c, int d) { + return getChannel(getA(b, r, c, d), vec2(c, d)); + } + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + // Calculate values for next column in yRC.z. + ivec3 yRC = coords.yzz + ivec3(0, 0, 1); + + // Fractional source index. + vec3 sourceFracIndexRC = ${sourceFracIndexRC}; + + // Compute the four integer indices. + ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0))); + ivec3 sourceCeilRC = ivec3( + min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); + + // Should we calculate next column and row elements in 2x2 packed cell. + bool hasNextCol = d < ${depth - 1}; + bool hasNextRow = coords.z < ${newWidth - 1}; + + // In parallel, construct four corners for all four components in + // packed 2x2 cell. + vec4 topLeft = vec4( + getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d), + hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1) + : 0.0, + hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d) + : 0.0, + (hasNextRow && hasNextCol) ? + getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0); + + vec4 bottomLeft = vec4( + getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d), + hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1) + : 0.0, + hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d) + : 0.0, + (hasNextRow && hasNextCol) ? + getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0); + + vec4 topRight = vec4( + getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d), + hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1) + : 0.0, + hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d) + : 0.0, + (hasNextRow && hasNextCol) ? + getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0); + + vec4 bottomRight = vec4( + getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d), + hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1) + : 0.0, + hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d) + : 0.0, + (hasNextRow && hasNextCol) ? + getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0); + + vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC); + + vec4 top = mix(topLeft, topRight, fracRC.yyzz); + vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz); + vec4 newValue = mix(top, bottom, fracRC.x); + + setOutput(newValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinear.js + function resizeBilinear3(args) { + const { inputs, backend: backend2, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + const [newHeight, newWidth] = size; + const program = env().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new ResizeBilinearPackedProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters) : new ResizeBilinearProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters); + return backend2.runWebGLProgram(program, [images], "float32"); + } + var resizeBilinearConfig2 = { + kernelName: ResizeBilinear, + backendName: "webgl", + kernelFunc: resizeBilinear3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinearGrad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_backprop_gpu.js + init_define_BUILD_VERSION(); + var ResizeBilinearBackpropProgram = class { + constructor(dyShape, inputShape, alignCorners) { + this.variableNames = ["dy"]; + this.outputShape = []; + this.outputShape = inputShape; + const [, xHeight, xWidth] = inputShape; + const [, yHeight, yWidth] = dyShape; + const effectiveXSize = [ + alignCorners && yHeight > 1 ? xHeight - 1 : xHeight, + alignCorners && yWidth > 1 ? xWidth - 1 : xWidth + ]; + const effectiveYSize = [ + alignCorners && yHeight > 1 ? yHeight - 1 : yHeight, + alignCorners && yWidth > 1 ? yWidth - 1 : yWidth + ]; + const heightScale = effectiveXSize[0] / effectiveYSize[0]; + const widthScale = effectiveXSize[1] / effectiveYSize[1]; + const invHeightScale = 1 / heightScale; + const invWidthScale = 1 / widthScale; + const winHeight = Math.ceil(invHeightScale) * 2 + 2; + const winWidth = Math.ceil(invWidthScale) * 2 + 2; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + int r = coords[1]; + int c = coords[2]; + + float accumulator = 0.0; + + const float heightScale = float(${heightScale}); + const float widthScale = float(${widthScale}); + + const float invHeightScale = float(${invHeightScale}); + const float invWidthScale = float(${invWidthScale}); + + const int winHeight = int(${winHeight}); + const int winWidth = int(${winWidth}); + + // Compute bounds for where in dy we will look + float startRLerp = floor(float(r) * invHeightScale); + int startDyR = int(startRLerp - float(winHeight / 2)); + + float startCLerp = floor(float(c) * invWidthScale); + int startDyC = int(startCLerp - float(winWidth / 2)); + + // Loop over dy + for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { + int dyR = dyROffset + startDyR; + + // Guard against the window exceeding the bounds of dy + if (dyR < 0 || dyR >= ${yHeight}) { + continue; + } + + for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { + int dyC = dyCOffset + startDyC; + + // Guard against the window exceeding the bounds of dy + if (dyC < 0 || dyC >= ${yWidth}) { + continue; + } + + float dxR = float(dyR) * heightScale; + int topDxRIndex = int(floor(dxR)); + int bottomDxRIndex = int(min(ceil(dxR), ${xHeight - 1}.0)); + float dxRLerp = dxR - float(topDxRIndex); + float inverseDxRLerp = 1.0 - dxRLerp; + + float dxC = float(dyC) * widthScale; + int leftDxCIndex = int(floor(dxC)); + int rightDxCIndex = int(min(ceil(dxC), ${xWidth - 1}.0)); + float dxCLerp = dxC - float(leftDxCIndex); + float inverseDxCLerp = 1.0 - dxCLerp; + + if (r == topDxRIndex && c == leftDxCIndex) { + // topLeft + accumulator += + getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp; + } + + if (r == topDxRIndex && c == rightDxCIndex) { + // topRight + accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp; + } + + if (r == bottomDxRIndex && c == leftDxCIndex) { + // bottomLeft + accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp; + } + + if (r == bottomDxRIndex && c == rightDxCIndex) { + // bottomRight + accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp; + } + } + } + // End loop over dy + + setOutput(accumulator); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinearGrad.js + function resizeBilinearGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { images, dy } = inputs; + const { alignCorners } = attrs; + const program = new ResizeBilinearBackpropProgram(dy.shape, images.shape, alignCorners); + return backend2.runWebGLProgram(program, [dy], dy.dtype); + } + var resizeBilinearGradConfig3 = { + kernelName: ResizeBilinearGrad, + backendName: "webgl", + kernelFunc: resizeBilinearGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighbor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_gpu.js + init_define_BUILD_VERSION(); + var ResizeNearestNeighborProgram = class { + constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) { + this.variableNames = ["A"]; + this.outputShape = []; + const [batch, oldHeight, oldWidth, depth] = inputShape; + this.outputShape = [batch, newHeight, newWidth, depth]; + const effectiveInSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + const roundBase = alignCorners ? "0.5" : "0.0"; + let sourceFracIndexRC; + if (halfPixelCenters) { + sourceFracIndexRC = `max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))`; + } else { + sourceFracIndexRC = `vec2(yRC) * effectiveInputOverOutputRatioRC`; + } + this.userCode = ` + const vec2 effectiveInputOverOutputRatioRC = vec2( + ${effectiveInSize[0] / effectiveOutSize[0]}, + ${effectiveInSize[1] / effectiveOutSize[1]}); + const vec2 inputShapeRC = vec2(${oldHeight}.0, ${oldWidth}.0); + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + ivec2 yRC = coords.yz; + + // Fractional source index. + vec2 sourceFracIndexRC = ${sourceFracIndexRC}; + + // Compute the coordinators of nearest neighbor point. + ivec2 sourceNearestRC = ivec2( + min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${roundBase}))); + float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d); + + setOutput(newValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_packed_gpu.js + init_define_BUILD_VERSION(); + var ResizeNearestNeighborPackedProgram = class { + constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = []; + const [batch, oldHeight, oldWidth, depth] = inputShape; + this.outputShape = [batch, newHeight, newWidth, depth]; + const effectiveInSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + const roundBase = alignCorners ? "0.5" : "0.0"; + let sourceFracIndexRC; + if (halfPixelCenters) { + sourceFracIndexRC = `max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))`; + } else { + sourceFracIndexRC = `vec3(yRC) * effectiveInputOverOutputRatioRC`; + } + this.userCode = ` + const vec3 effectiveInputOverOutputRatioRC = vec3( + ${effectiveInSize[0] / effectiveOutSize[0]}, + ${effectiveInSize[1] / effectiveOutSize[1]}, + ${effectiveInSize[1] / effectiveOutSize[1]}); + const vec3 inputShapeRC = vec3(${oldHeight}.0, ${oldWidth}.0, + ${oldWidth}.0); + + float getAValue(int b, int r, int c, int d) { + return getChannel(getA(b, r, c, d), vec2(c, d)); + } + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + // Calculate values for next column in yRC.z. + ivec3 yRC = coords.yzz + ivec3(0, 0, 1); + + // Fractional source index. + vec3 sourceFracIndexRC = ${sourceFracIndexRC}; + + // Compute the coordinators of nearest neighbor point. + ivec3 sourceNearestRC = ivec3( + min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${roundBase}))); + + // Should we calculate next column and row elements in 2x2 packed cell. + bool hasNextCol = d < ${depth - 1}; + bool hasNextRow = coords.z < ${newWidth - 1}; + + vec4 newValue = vec4( + getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d), + hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1) + : 0.0, + hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d) + : 0.0, + (hasNextRow && hasNextCol) ? + getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0); + + setOutput(newValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighbor.js + function resizeNearestNeighbor3(args) { + const { inputs, backend: backend2, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + const [newHeight, newWidth] = size; + const program = env().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new ResizeNearestNeighborPackedProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters) : new ResizeNearestNeighborProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters); + return backend2.runWebGLProgram(program, [images], images.dtype); + } + var resizeNearestNeighborConfig2 = { + kernelName: ResizeNearestNeighbor, + backendName: "webgl", + kernelFunc: resizeNearestNeighbor3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighborGrad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_backprop_gpu.js + init_define_BUILD_VERSION(); + var ResizeNearestNeigborBackpropProgram = class { + constructor(dyShape, inputShape, alignCorners) { + this.variableNames = ["dy"]; + this.outputShape = []; + this.outputShape = inputShape; + const [, xHeight, xWidth] = inputShape; + const [, yHeight, yWidth] = dyShape; + const effectiveXSize = [ + alignCorners && yHeight > 1 ? xHeight - 1 : xHeight, + alignCorners && yWidth > 1 ? xWidth - 1 : xWidth + ]; + const effectiveYSize = [ + alignCorners && yHeight > 1 ? yHeight - 1 : yHeight, + alignCorners && yWidth > 1 ? yWidth - 1 : yWidth + ]; + const heightScale = effectiveXSize[0] / effectiveYSize[0]; + const widthScale = effectiveXSize[1] / effectiveYSize[1]; + const invHeightScale = 1 / heightScale; + const invWidthScale = 1 / widthScale; + const winHeight = Math.ceil(invHeightScale) * 2 + 2; + const winWidth = Math.ceil(invWidthScale) * 2 + 2; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + int r = coords[1]; + int c = coords[2]; + + float accumulator = 0.0; + + const float heightScale = float(${heightScale}); + const float widthScale = float(${widthScale}); + + const float invHeightScale = float(${invHeightScale}); + const float invWidthScale = float(${invWidthScale}); + + const int winHeight = int(${winHeight}); + const int winWidth = int(${winWidth}); + + // Compute bounds for where in dy we will look + float startRLerp = floor(float(r) * invHeightScale); + int startDyR = int(floor(startRLerp - float(winHeight / 2))); + + float startCLerp = floor(float(c) * invWidthScale); + int startDyC = int(floor(startCLerp - float(winWidth / 2))); + + // Loop over dy + for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { + int dyR = dyROffset + startDyR; + + // Guard against the window exceeding the bounds of dy + if (dyR < 0 || dyR >= ${yHeight}) { + continue; + } + + for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { + int dyC = dyCOffset + startDyC; + + // Guard against the window exceeding the bounds of dy + if (dyC < 0 || dyC >= ${yWidth}) { + continue; + } + + float sourceFracRow = + float(${effectiveXSize[0]}) * + (float(dyR) / float(${effectiveYSize[0]})); + + float sourceFracCol = + float(${effectiveXSize[1]}) * + (float(dyC) / float(${effectiveYSize[1]})); + + int sourceNearestRow = int(min( + float(int(${xHeight}) - 1), + ${alignCorners} ? float(round(sourceFracRow)) : + float(floor(sourceFracRow)))); + + int sourceNearestCol = int(min( + float(int(${xWidth}) - 1), + ${alignCorners} ? float(round(sourceFracCol)) : + float(floor(sourceFracCol)))); + + if (r == sourceNearestRow && c == sourceNearestCol) { + accumulator += getDy(b, dyR, dyC, d); + } + } + } + // End loop over dy + + setOutput(accumulator); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighborGrad.js + function resizeNearestNeighborGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { images, dy } = inputs; + const { alignCorners } = attrs; + const program = new ResizeNearestNeigborBackpropProgram(dy.shape, images.shape, alignCorners); + return backend2.runWebGLProgram(program, [dy], dy.dtype); + } + var resizeNearestNeighborGradConfig3 = { + kernelName: ResizeNearestNeighborGrad, + backendName: "webgl", + kernelFunc: resizeNearestNeighborGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reverse.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/reverse_gpu.js + init_define_BUILD_VERSION(); + var ReverseProgram = class { + constructor(xShape, axis) { + this.variableNames = ["x"]; + const rank = xShape.length; + if (rank > 4) { + throw new Error(`WebGL backend: Reverse of rank-${rank} tensor is not yet supported`); + } + this.outputShape = xShape; + if (rank === 1) { + this.userCode = ` + void main() { + int coord = getOutputCoords(); + setOutput(getX(${xShape[0]} - coord - 1)); + } + `; + return; + } + const getInCoord = (i) => { + if (axis.indexOf(i) !== -1 && xShape[i] !== 1) { + return `${xShape[i]} - coords[${i}] - 1`; + } + return `coords[${i}]`; + }; + const inCoords = xShape.map((_, i) => getInCoord(i)).join(","); + const type = getCoordsDataType(rank); + this.userCode = ` + void main() { + ${type} coords = getOutputCoords(); + setOutput(getX(${inCoords})); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/reverse_packed_gpu.js + init_define_BUILD_VERSION(); + var ReversePackedProgram = class { + constructor(xShape, axis) { + this.variableNames = ["x"]; + this.packedInputs = true; + this.packedOutput = true; + const rank = xShape.length; + if (rank > 4) { + throw new Error(`WebGL backend: Reverse of rank-${rank} tensor is not yet supported`); + } + this.outputShape = xShape; + const channels = getChannels("rc", rank); + const nextColumn = `${channels[rank - 1]} + 1 < ${this.outputShape[rank - 1]}`; + const nextRow = `${channels[rank - 2]} + 1 < ${this.outputShape[rank - 2]}`; + const type = getCoordsDataType(rank); + if (rank === 1) { + this.userCode = ` + void main(){ + int rc = getOutputCoords(); + vec4 result = vec4(0.); + result.r = getChannel(getX(${xShape[0]} - rc - 1), + ${xShape[0]} - rc - 1); + if(${nextColumn}){ + result.g = getChannel(getX(${xShape[0]} - (rc + 1) - 1), + ${xShape[0]} - (rc + 1) - 1); + } + setOutput(result); + } + `; + } else { + this.userCode = ` + void main() { + ${type} rc = getOutputCoords(); + vec4 result = vec4(0.); + result.r = ${getR(channels.slice())}; + if(${nextColumn}){ + result.g = ${getG(channels.slice())}; + } + if(${nextRow}) { + result.b = ${getB(channels.slice())}; + if(${nextColumn}) { + result.a = ${getA(channels.slice())}; + } + } + setOutput(result); + } + `; + } + function getR(channels2) { + return getChannel(channels2); + } + function getG(channels2) { + channels2[rank - 1] = "(" + channels2[rank - 1] + ` + 1)`; + return getChannel(channels2); + } + function getB(channels2) { + channels2[rank - 2] = "(" + channels2[rank - 2] + ` + 1)`; + return getChannel(channels2); + } + function getA(channels2) { + channels2[rank - 1] = "(" + channels2[rank - 1] + ` + 1)`; + channels2[rank - 2] = "(" + channels2[rank - 2] + ` + 1)`; + return getChannel(channels2); + } + function getChannel(channels2) { + const inCoordsArray = xShape.map((_, i) => getInCoord(i, channels2)); + const inCoords = inCoordsArray.join(","); + const innerDims = inCoordsArray.slice(-2).join(","); + return `getChannel(getX(${inCoords}), vec2(${innerDims}))`; + } + function getInCoord(i, channels1) { + if (axis.indexOf(i) !== -1 && xShape[i] !== 1) { + return `${xShape[i]} - ${channels1[i]} - 1`; + } else { + return `${channels1[i]}`; + } + } + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reverse.js + function reverse3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { dims } = attrs; + const xRank = x.shape.length; + const $dims = util_exports.parseAxisParam(dims, x.shape); + if (xRank === 0) { + return identity2({ inputs: { x }, backend: backend2 }); + } + const program = env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new ReversePackedProgram(x.shape, $dims) : new ReverseProgram(x.shape, $dims); + return backend2.runWebGLProgram(program, [x], x.dtype); + } + var reverseConfig2 = { + kernelName: Reverse, + backendName: "webgl", + kernelFunc: reverse3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RotateWithOffset.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/rotate_gpu.js + init_define_BUILD_VERSION(); + var RotateProgram = class { + constructor(imageShape, fillValue) { + this.variableNames = ["Image"]; + this.outputShape = []; + this.customUniforms = [{ name: "params", type: "vec4" }]; + const imageHeight = imageShape[1]; + const imageWidth = imageShape[2]; + this.outputShape = imageShape; + let fillSnippet = ""; + if (typeof fillValue === "number") { + fillSnippet = `float outputValue = ${fillValue.toFixed(2)};`; + } else { + fillSnippet = ` + vec3 fill = vec3(${fillValue.join(",")}); + float outputValue = fill[coords[3]];`; + } + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int x = coords[2]; + int y = coords[1]; + float coordXFloat = (float(x) - params[0]) * params[3] - + (float(y) - params[1]) * params[2]; + float coordYFloat = (float(x) - params[0]) * params[2] + + (float(y) - params[1]) * params[3]; + int coordX = int(round(coordXFloat + params[0])); + int coordY = int(round(coordYFloat + params[1])); + ${fillSnippet} + if(coordX >= 0 && coordX < ${imageWidth} && coordY >= 0 && coordY < ${imageHeight}) { + outputValue = getImage(coords[0], coordY, coordX, coords[3]); + } + setOutput(outputValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RotateWithOffset.js + var rotateWithOffsetConfig2 = { + kernelName: RotateWithOffset, + backendName: "webgl", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { image: image2 } = inputs; + const { radians, fillValue, center } = attrs; + const webglBackend = backend2; + const program = new RotateProgram(image2.shape, fillValue); + const [centerX, centerY] = backend_util_exports.getImageCenter(center, image2.shape[1], image2.shape[2]); + const customValues = [[centerX, centerY, Math.sin(radians), Math.cos(radians)]]; + const output = webglBackend.runWebGLProgram(program, [image2], image2.dtype, customValues); + return output; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Round.js + init_define_BUILD_VERSION(); + var ROUND = ` + // OpenGL ES does not support round function. + // The algorithm is based on banker's rounding. + float base = floor(x); + if ((x - base) < 0.5) { + return floor(x); + } else if ((x - base) > 0.5) { + return ceil(x); + } else { + if (mod(base, 2.0) == 0.0) { + return base; + } else { + return base + 1.0; + } + } +`; + var round4 = unaryKernelFunc2({ opSnippet: ROUND }); + var roundConfig2 = { + kernelName: Round, + backendName: "webgl", + kernelFunc: round4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Rsqrt.js + init_define_BUILD_VERSION(); + var RSQRT = `return inversesqrt(x);`; + var rsqrt3 = unaryKernelFunc2({ opSnippet: RSQRT, cpuKernelImpl: rsqrtImplCPU }); + var rsqrtConfig2 = { + kernelName: Rsqrt, + backendName: "webgl", + kernelFunc: rsqrt3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ScatterNd.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/scatter_gpu.js + init_define_BUILD_VERSION(); + var ScatterProgram = class { + constructor(updateSize, sliceDim, indicesRank, updatesRank, strides, shape, summingDupeIndex = true) { + this.variableNames = ["updates", "indices", "defaultValue"]; + this.outputShape = shape; + const stridesType = getCoordsDataType(strides.length); + const dtype = getCoordsDataType(shape.length); + let indicesString = ""; + if (indicesRank === 1) { + indicesString = "i"; + } else if (indicesRank === 2) { + indicesString = "i, j"; + } + const indicesSnippet = `getIndices(${indicesString})`; + let updatesString = ""; + if (updatesRank === 1) { + updatesString = "i"; + } else if (updatesRank === 2) { + updatesString = "i, coords[1]"; + } + const updatesSnippet = `getUpdates(${updatesString})`; + const strideString = sliceDim > 1 ? "strides[j]" : "strides"; + this.userCode = ` + ${stridesType} strides = ${stridesType}(${strides}); + + void main() { + ${dtype} coords = getOutputCoords(); + float sum = 0.0; + bool found = false; + for (int i = 0; i < ${updateSize}; i++) { + int flattenedIndex = 0; + for (int j = 0; j < ${sliceDim}; j++) { + int index = round(${indicesSnippet}); + flattenedIndex += index * ${strideString}; + } + if (flattenedIndex == coords[0]) { + sum += ${updatesSnippet}; + found = true; + } + } + setOutput(mix(getDefaultValue(), sum, float(found))); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ScatterNd.js + function scatterNd2(args) { + const { inputs, backend: backend2, attrs } = args; + const { indices, updates } = inputs; + const { shape } = attrs; + const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util_exports.calculateShapes(updates, indices, shape); + const flattenShape = [outputSize / sliceSize, sliceSize]; + if (outputSize === 0) { + return backend2.makeTensorInfo(shape, indices.dtype); + } + const flattenIndices = reshape3({ inputs: { x: indices }, backend: backend2, attrs: { shape: [numUpdates, sliceRank] } }); + const flattenX = reshape3({ inputs: { x: updates }, backend: backend2, attrs: { shape: [numUpdates, sliceSize] } }); + const defaultValue = backend2.makeTensorInfo([], "float32", new Float32Array([0])); + const program = new ScatterProgram(numUpdates, sliceRank, flattenIndices.shape.length, flattenX.shape.length, strides, flattenShape); + const res = backend2.runWebGLProgram(program, [flattenX, flattenIndices, defaultValue], flattenX.dtype); + const reshaped = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape } }); + backend2.disposeIntermediateTensorInfo(flattenIndices); + backend2.disposeIntermediateTensorInfo(flattenX); + backend2.disposeIntermediateTensorInfo(res); + backend2.disposeIntermediateTensorInfo(defaultValue); + return reshaped; + } + var scatterNdConfig2 = { + kernelName: ScatterNd, + backendName: "webgl", + kernelFunc: scatterNd2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SearchSorted.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/search_sorted_gpu.js + init_define_BUILD_VERSION(); + var SearchSortedProgram = class { + constructor(batchSize, numInputs, numValues, side) { + this.variableNames = ["sortedSequence", "values"]; + this.customUniforms = [{ name: "numInputs", type: "int" }]; + this.outputShape = [batchSize, numValues]; + const webGL2LoopHead = "while (left < right) {"; + const webGL1LoopHead = `for (int i = 0; i < ${Math.ceil(Math.log2(numInputs + 1))}; ++i) { if (left >= right) break;`; + const loopHead = env().getNumber("WEBGL_VERSION") === 2 ? webGL2LoopHead : webGL1LoopHead; + const boundComparator = side === "left" ? "<" : "<="; + this.userCode = ` + int findBound(int batch, float value) { + int left = 0; + int right = numInputs; + int mid; + ${loopHead} + mid = (left + right) / 2; + if (getSortedSequence(batch, mid) ${boundComparator} value) { + left = mid + 1; + } else { + right = mid; + } + } + return right; + } + + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int valueIndex = coords[1]; + + float value = getValues(batch, valueIndex); + + setOutput(float(findBound(batch, value))); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SearchSorted.js + function searchSorted2(args) { + const { inputs, backend: backend2, attrs } = args; + const { sortedSequence, values } = inputs; + const { side } = attrs; + const program = new SearchSortedProgram(sortedSequence.shape[0], sortedSequence.shape[1], values.shape[1], side); + const customValues = [[sortedSequence.shape[1]]]; + return backend2.runWebGLProgram(program, [sortedSequence, values], "int32", customValues); + } + var searchSortedConfig2 = { + kernelName: SearchSorted, + backendName: "webgl", + kernelFunc: searchSorted2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Select.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/select_gpu.js + init_define_BUILD_VERSION(); + var SelectProgram = class { + constructor(cRank, shape, rank) { + this.variableNames = ["c", "a", "b"]; + this.outputShape = shape; + let cCoords; + let abCoords; + if (rank > 4) { + throw Error(`Where for rank ${rank} is not yet supported`); + } + if (rank === 1) { + abCoords = `resRC`; + cCoords = `resRC`; + } else { + const currentCoords = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"]; + const cCoordVars = []; + const abCoordVars = []; + for (let i = 0; i < shape.length; i++) { + abCoordVars.push(`${currentCoords[i]}`); + if (i < cRank) { + cCoordVars.push(`${currentCoords[i]}`); + } + } + cCoords = cCoordVars.join(); + abCoords = abCoordVars.join(); + } + const dtype = getCoordsDataType(rank); + this.userCode = ` + void main() { + ${dtype} resRC = getOutputCoords(); + float cVal = getC(${cCoords}); + if (cVal >= 1.0) { + setOutput(getA(${abCoords})); + } else { + setOutput(getB(${abCoords})); + } + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Select.js + function select3(args) { + const { inputs, backend: backend2 } = args; + const { condition, t, e } = inputs; + const program = new SelectProgram(condition.shape.length, t.shape, t.shape.length); + return backend2.runWebGLProgram(program, [condition, t, e], upcastType(t.dtype, e.dtype)); + } + var selectConfig2 = { + kernelName: Select, + backendName: "webgl", + kernelFunc: select3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Selu.js + init_define_BUILD_VERSION(); + var SELU = ` + // Stable and Attracting Fixed Point (0, 1) for Normalized Weights. + // see: https://arxiv.org/abs/1706.02515 + float scaleAlpha = ${backend_util_exports.SELU_SCALEALPHA}; + float scale = ${backend_util_exports.SELU_SCALE}; + return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); +`; + var selu3 = unaryKernelFunc2({ opSnippet: SELU }); + var seluConfig2 = { + kernelName: Selu, + backendName: "webgl", + kernelFunc: selu3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sigmoid.js + init_define_BUILD_VERSION(); + var SIGMOID3 = CHECK_NAN_SNIPPET_UNARY + ` + return 1.0 / (1.0 + exp(-1.0 * x)); +`; + var SIGMOID_PACKED = ` + vec4 result = 1.0 / (1.0 + exp(-1.0 * x)); + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var sigmoid3 = unaryKernelFunc2({ + opSnippet: SIGMOID3, + packedOpSnippet: SIGMOID_PACKED, + cpuKernelImpl: sigmoidImplCPU + }); + var sigmoidConfig2 = { + kernelName: Sigmoid, + backendName: "webgl", + kernelFunc: sigmoid3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sign.js + init_define_BUILD_VERSION(); + var SIGN = ` + if (isnan(x)) { return 0.0; } + return sign(x); +`; + var sign3 = unaryKernelFunc2({ opSnippet: SIGN }); + var signConfig2 = { + kernelName: Sign, + backendName: "webgl", + kernelFunc: sign3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sin.js + init_define_BUILD_VERSION(); + var SIN = CHECK_NAN_SNIPPET_UNARY + ` + return sin(x); +`; + var sin3 = unaryKernelFunc2({ opSnippet: SIN }); + var sinConfig2 = { + kernelName: Sin, + backendName: "webgl", + kernelFunc: sin3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sinh.js + init_define_BUILD_VERSION(); + var SINH = ` + float e2x = exp(x); + return (e2x - 1.0 / e2x) / 2.0; +`; + var sinh3 = unaryKernelFunc2({ opSnippet: SINH }); + var sinhConfig2 = { + kernelName: Sinh, + backendName: "webgl", + kernelFunc: sinh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Softplus.js + init_define_BUILD_VERSION(); + var SOFTPLUS = ` + float epsilon = 1.1920928955078125e-7; + float threshold = log(epsilon) + 2.0; + + bool too_large = x > -threshold; + bool too_small = x < threshold; + + float result; + float exp_x = exp(x); + + if (too_large){ + result = x; + } + else if (too_small){ + result = exp_x; + } + else{ + result = log(exp_x + 1.0); + } + return result; +`; + var softplus3 = unaryKernelFunc2({ opSnippet: SOFTPLUS }); + var softplusConfig2 = { + kernelName: Softplus, + backendName: "webgl", + kernelFunc: softplus3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SpaceToBatchND.js + init_define_BUILD_VERSION(); + var spaceToBatchND3 = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, paddings } = attrs; + util_exports.assert(x.shape.length <= 4, () => "spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"); + const prod5 = blockShape.reduce((a, b) => a * b); + const completePaddings = [[0, 0]]; + completePaddings.push(...paddings); + for (let i = 1 + blockShape.length; i < x.shape.length; ++i) { + completePaddings.push([0, 0]); + } + const toDispose = []; + const paddedX = padV22({ + inputs: { x }, + backend: backend2, + attrs: { paddings: completePaddings, constantValue: 0 } + }); + const reshapedPaddedShape = backend_util_exports.getReshaped(paddedX.shape, blockShape, prod5, false); + const permutedReshapedPaddedPermutation = backend_util_exports.getPermuted(reshapedPaddedShape.length, blockShape.length, false); + const flattenShape = backend_util_exports.getReshapedPermuted(paddedX.shape, blockShape, prod5, false); + const reshapedPaddedX = reshape3({ inputs: { x: paddedX }, backend: backend2, attrs: { shape: reshapedPaddedShape } }); + const paddedXT = transpose3({ + inputs: { x: reshapedPaddedX }, + backend: backend2, + attrs: { perm: permutedReshapedPaddedPermutation } + }); + const result = reshape3({ inputs: { x: paddedXT }, backend: backend2, attrs: { shape: flattenShape } }); + toDispose.push(paddedX); + toDispose.push(reshapedPaddedX); + toDispose.push(paddedXT); + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + }; + var spaceToBatchNDConfig2 = { + kernelName: SpaceToBatchND, + backendName: "webgl", + kernelFunc: spaceToBatchND3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseFillEmptyRows.js + init_define_BUILD_VERSION(); + function sparseFillEmptyRows2(args) { + const { inputs, backend: backend2 } = args; + const { indices, values, denseShape, defaultValue } = inputs; + if (denseShape.shape.length !== 1) { + throw new Error(`Dense shape must be a vector, saw: + ${denseShape.shape}`); + } + if (indices.shape.length !== 2) { + throw new Error(`Indices must be a matrix, saw: + ${indices.shape}`); + } + if (values.shape.length !== 1) { + throw new Error(`Values must be a vector, saw: + ${values.shape}`); + } + if (defaultValue.shape.length !== 0) { + throw new Error(`Default value must be a scalar, saw: + ${defaultValue.shape}`); + } + const $indices = backend2.readSync(indices.dataId); + const $values = backend2.readSync(values.dataId); + const $denseShape = backend2.readSync(denseShape.dataId); + const $defaultValue = backend2.readSync(defaultValue.dataId)[0]; + const [outputIndices, outputIndicesShape, outputValues, emptyRowIndicator, reverseIndexMap] = sparseFillEmptyRowsImplCPU($indices, indices.shape, indices.dtype, $values, values.dtype, $denseShape, $defaultValue); + return [ + backend2.makeTensorInfo(outputIndicesShape, indices.dtype, outputIndices), + backend2.makeTensorInfo([outputIndicesShape[0]], values.dtype, outputValues), + backend2.makeTensorInfo([emptyRowIndicator.length], "bool", new Uint8Array(emptyRowIndicator.map((value) => Number(value)))), + backend2.makeTensorInfo([reverseIndexMap.length], indices.dtype, new Int32Array(reverseIndexMap)) + ]; + } + var sparseFillEmptyRowsConfig2 = { + kernelName: SparseFillEmptyRows, + backendName: "webgl", + kernelFunc: sparseFillEmptyRows2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseReshape.js + init_define_BUILD_VERSION(); + function sparseReshape2(args) { + const { inputs, backend: backend2 } = args; + const { inputIndices, inputShape, newShape } = inputs; + if (inputIndices.shape.length !== 2) { + throw new Error(`Input indices should be a matrix but received shape ${inputIndices.shape}`); + } + if (inputShape.shape.length !== 1) { + throw new Error(`Input shape should be a vector but received shape ${inputShape.shape}`); + } + if (newShape.shape.length !== 1) { + throw new Error(`Target shape should be a vector but received shape ${newShape.shape}`); + } + const $inputShape = Array.from(backend2.readSync(inputShape.dataId)); + const $inputIndices = backend2.readSync(inputIndices.dataId); + const targetShape = Array.from(backend2.readSync(newShape.dataId)); + const [newIndices, indicesShape, outputShape] = sparseReshapeImplCPU($inputIndices, inputIndices.shape, inputIndices.dtype, $inputShape, targetShape); + return [ + backend2.makeTensorInfo(indicesShape, inputIndices.dtype, newIndices), + backend2.makeTensorInfo([outputShape.length], newShape.dtype, new Int32Array(outputShape)) + ]; + } + var sparseReshapeConfig2 = { + kernelName: SparseReshape, + backendName: "webgl", + kernelFunc: sparseReshape2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseSegmentMean.js + init_define_BUILD_VERSION(); + function sparseSegmentMean2(args) { + const { inputs, backend: backend2 } = args; + const { data, indices, segmentIds } = inputs; + if (data.shape.length < 1) { + throw new Error(`Data should be at least 1 dimensional but received scalar`); + } + if (indices.shape.length !== 1) { + throw new Error(`Indices should be a vector but received shape + ${indices.shape}`); + } + if (segmentIds.shape.length !== 1) { + throw new Error(`Segment ids should be a vector but received shape + ${segmentIds.shape}`); + } + const $data = backend2.readSync(data.dataId); + const $indices = backend2.readSync(indices.dataId); + const $segmentIds = backend2.readSync(segmentIds.dataId); + const [outputData, outputDataShape] = sparseSegmentReductionImplCPU($data, data.shape, data.dtype, $indices, $segmentIds, true); + return backend2.makeTensorInfo(outputDataShape, data.dtype, outputData); + } + var sparseSegmentMeanConfig2 = { + kernelName: SparseSegmentMean, + backendName: "webgl", + kernelFunc: sparseSegmentMean2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseSegmentSum.js + init_define_BUILD_VERSION(); + function sparseSegmentSum2(args) { + const { inputs, backend: backend2 } = args; + const { data, indices, segmentIds } = inputs; + if (data.shape.length < 1) { + throw new Error(`Data should be at least 1 dimensional but received scalar`); + } + if (indices.shape.length !== 1) { + throw new Error(`Indices should be a vector but received shape + ${indices.shape}`); + } + if (segmentIds.shape.length !== 1) { + throw new Error(`Segment ids should be a vector but received shape + ${segmentIds.shape}`); + } + const $data = backend2.readSync(data.dataId); + const $indices = backend2.readSync(indices.dataId); + const $segmentIds = backend2.readSync(segmentIds.dataId); + const [outputData, outputDataShape] = sparseSegmentReductionImplCPU($data, data.shape, data.dtype, $indices, $segmentIds); + return backend2.makeTensorInfo(outputDataShape, data.dtype, outputData); + } + var sparseSegmentSumConfig2 = { + kernelName: SparseSegmentSum, + backendName: "webgl", + kernelFunc: sparseSegmentSum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseToDense.js + init_define_BUILD_VERSION(); + function sparseToDense2(args) { + const { inputs, backend: backend2, attrs } = args; + const { sparseIndices, sparseValues, defaultValue } = inputs; + const { outputShape } = attrs; + const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util_exports.calculateShapes(sparseValues, sparseIndices, outputShape); + const sumDupeIndices = false; + if (sparseValues.dtype === "string") { + const indicesBuf = backend2.bufferSync(sparseIndices); + const updatesBuf = backend2.bufferSync(sparseValues); + const $defaultValue = util_exports.decodeString(backend2.readSync(defaultValue.dataId)[0]); + const outBuf = scatterImplCPU(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices); + return backend2.makeTensorInfo(outputShape, outBuf.dtype, outBuf.values); + } + const program = new ScatterProgram(numUpdates, sliceRank, sparseIndices.shape.length, sparseValues.shape.length, strides, [outputSize, 1], sumDupeIndices); + const res = backend2.runWebGLProgram(program, [sparseValues, sparseIndices, defaultValue], sparseValues.dtype); + const reshaped = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape: outputShape } }); + backend2.disposeIntermediateTensorInfo(res); + return reshaped; + } + var sparseToDenseConfig2 = { + kernelName: SparseToDense, + backendName: "webgl", + kernelFunc: sparseToDense2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SplitV.js + init_define_BUILD_VERSION(); + function splitV2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { numOrSizeSplits, axis } = attrs; + const $axis = util_exports.parseAxisParam(axis, x.shape)[0]; + const splitSizes = backend_util_exports.prepareSplitSize(x, numOrSizeSplits, $axis); + const xRank = x.shape.length; + const begin = new Array(xRank).fill(0); + const size = x.shape.slice(); + return splitSizes.map((s) => { + const sliceSize = [...size]; + sliceSize[$axis] = s; + const sliceT = slice3({ inputs: { x }, backend: backend2, attrs: { begin, size: sliceSize } }); + begin[$axis] += s; + return sliceT; + }); + } + var splitVConfig2 = { + kernelName: SplitV, + backendName: "webgl", + kernelFunc: splitV2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sqrt.js + init_define_BUILD_VERSION(); + var SQRT = `return sqrt(x);`; + var sqrt3 = unaryKernelFunc2({ opSnippet: SQRT, packedOpSnippet: SQRT, cpuKernelImpl: sqrtImplCPU }); + var sqrtConfig2 = { + kernelName: Sqrt, + backendName: "webgl", + kernelFunc: sqrt3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Square.js + init_define_BUILD_VERSION(); + var SQUARE = `return x * x;`; + var square3 = unaryKernelFunc2({ opSnippet: SQUARE }); + var squareConfig2 = { + kernelName: Square, + backendName: "webgl", + kernelFunc: square3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SquaredDifference.js + init_define_BUILD_VERSION(); + var SQUARED_DIFFERENCE = "return (a - b) * (a - b);"; + var squaredDifference3 = binaryKernelFunc2({ opSnippet: SQUARED_DIFFERENCE, packedOpSnippet: SQUARED_DIFFERENCE }); + var squaredDifferenceConfig2 = { + kernelName: SquaredDifference, + backendName: "webgl", + kernelFunc: squaredDifference3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Step.js + init_define_BUILD_VERSION(); + function step3({ inputs, attrs, backend: backend2 }) { + const { x } = inputs; + const opSnippet = CHECK_NAN_SNIPPET + ` + return x > 0.0 ? 1.0 : float(${attrs.alpha}); + `; + const program = new UnaryOpProgram(x.shape, opSnippet); + return backend2.runWebGLProgram(program, [x], x.dtype); + } + var stepConfig2 = { + kernelName: Step, + backendName: "webgl", + kernelFunc: step3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StridedSlice.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/strided_slice_gpu.js + init_define_BUILD_VERSION(); + var StridedSliceProgram = class { + constructor(begin, strides, size) { + this.variableNames = ["x"]; + this.outputShape = size; + const rank = size.length; + const inputDtype = getCoordsDataType(size.length); + const dtype = getCoordsDataType(size.length); + let newCoords = ""; + if (rank === 1) { + newCoords = "coords * strides + begin"; + } else { + let outputAxis = 0; + newCoords = size.map((_, i) => { + outputAxis++; + return size.length === 1 ? `coords * strides[${i}] + begin[${i}]` : `coords[${outputAxis - 1}] * strides[${i}] + begin[${i}]`; + }).join(","); + } + this.userCode = ` + ${inputDtype} begin = ${inputDtype}(${begin}); + ${inputDtype} strides = ${inputDtype}(${strides}); + + void main() { + ${dtype} coords = getOutputCoords(); + setOutput(getX(${newCoords})); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StridedSlice.js + function stridedSlice3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask } = attrs; + const { finalShapeSparse, finalShape, isIdentity, sliceDim0, isSimpleSlice, begin: $begin, end: $end, strides: $strides } = slice_util_exports.sliceInfo(x.shape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask); + let result; + if (isIdentity) { + result = reshape3({ inputs: { x }, backend: backend2, attrs: { shape: finalShape } }); + } else if (sliceDim0 || isSimpleSlice) { + util_exports.assert(x.shape.length >= 1, () => `Input must have rank at least 1, got: ${x.shape.length}`); + const size = slice_util_exports.computeOutShape($begin, $end, $strides); + const sliced = slice3({ inputs: { x }, backend: backend2, attrs: { begin: $begin, size } }); + result = reshape3({ inputs: { x: sliced }, backend: backend2, attrs: { shape: finalShape } }); + backend2.disposeIntermediateTensorInfo(sliced); + } else { + const shouldExecuteOnCPU = backend2.shouldExecuteOnCPU([x]); + if (shouldExecuteOnCPU) { + const values = backend2.readSync(x.dataId); + const xBuf = buffer(x.shape, x.dtype, values); + const resultValues = stridedSliceImplCPU(finalShapeSparse, xBuf, $strides, $begin); + result = backend2.makeTensorInfo(finalShape, x.dtype, resultValues.values); + } else { + const program = new StridedSliceProgram($begin, $strides, finalShapeSparse); + result = backend2.runWebGLProgram(program, [x], x.dtype); + } + } + const resultReshaped = reshape3({ inputs: { x: result }, backend: backend2, attrs: { shape: finalShape } }); + backend2.disposeIntermediateTensorInfo(result); + return resultReshaped; + } + var stridedSliceConfig2 = { + kernelName: StridedSlice, + backendName: "webgl", + kernelFunc: stridedSlice3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StringNGrams.js + init_define_BUILD_VERSION(); + function stringNGrams2(args) { + const { inputs, backend: backend2, attrs } = args; + const { separator, nGramWidths, leftPad, rightPad: rightPad2, padWidth, preserveShortSequences } = attrs; + const { data, dataSplits } = inputs; + const $data = backend2.readSync(data.dataId); + const $dataSplits = backend2.readSync(dataSplits.dataId); + const [nGrams, nGramsSplits] = stringNGramsImplCPU($data, $dataSplits, separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences); + return [ + backend2.makeTensorInfo([nGrams.length], "string", nGrams), + backend2.makeTensorInfo(dataSplits.shape, "int32", nGramsSplits) + ]; + } + var stringNGramsConfig2 = { + kernelName: StringNGrams, + backendName: "webgl", + kernelFunc: stringNGrams2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StringSplit.js + init_define_BUILD_VERSION(); + function stringSplit2(args) { + const { inputs, backend: backend2, attrs } = args; + const { skipEmpty } = attrs; + const { input: input2, delimiter } = inputs; + if (input2.dtype !== "string") { + throw new Error("Input must be of datatype string"); + } + if (input2.shape.length !== 1) { + throw new Error(`Input must be a vector, got shape: ${input2.shape}`); + } + if (delimiter.shape.length !== 0) { + throw new Error(`Delimiter must be a scalar, got shape: ${delimiter.shape}`); + } + const $input = backend2.readSync(input2.dataId); + const $delimiter = backend2.readSync(delimiter.dataId)[0]; + const [indices, values, shape] = stringSplitImplCPU($input, $delimiter, skipEmpty); + const outputSize = values.length; + return [ + backend2.makeTensorInfo([outputSize, 2], "int32", indices), + backend2.makeTensorInfo([outputSize], "string", values), + backend2.makeTensorInfo([2], "int32", new Int32Array(shape)) + ]; + } + var stringSplitConfig2 = { + kernelName: StringSplit, + backendName: "webgl", + kernelFunc: stringSplit2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StringToHashBucketFast.js + init_define_BUILD_VERSION(); + function stringToHashBucketFast2(args) { + const { inputs, backend: backend2, attrs } = args; + const { numBuckets } = attrs; + const { input: input2 } = inputs; + if (input2.dtype !== "string") { + throw new Error("Input must be of datatype string"); + } + if (numBuckets <= 0) { + throw new Error(`Number of buckets must be at least 1`); + } + const $input = backend2.readSync(input2.dataId); + const output = stringToHashBucketFastImplCPU($input, numBuckets); + return backend2.makeTensorInfo(input2.shape, "int32", output); + } + var stringToHashBucketFastConfig2 = { + kernelName: StringToHashBucketFast, + backendName: "webgl", + kernelFunc: stringToHashBucketFast2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tan.js + init_define_BUILD_VERSION(); + var TAN = `return tan(x);`; + var tan3 = unaryKernelFunc2({ opSnippet: TAN }); + var tanConfig2 = { + kernelName: Tan, + backendName: "webgl", + kernelFunc: tan3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tanh.js + init_define_BUILD_VERSION(); + var TANH = ` + float e2x = exp(-2.0 * abs(x)); + return sign(x) * (1.0 - e2x) / (1.0 + e2x); +`; + var tanh4 = unaryKernelFunc2({ opSnippet: TANH }); + var tanhConfig2 = { + kernelName: Tanh, + backendName: "webgl", + kernelFunc: tanh4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tile.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/tile_gpu.js + init_define_BUILD_VERSION(); + var TileProgram = class { + constructor(aShape, reps) { + this.variableNames = ["A"]; + const outputShape = new Array(aShape.length); + for (let i = 0; i < outputShape.length; i++) { + outputShape[i] = aShape[i] * reps[i]; + } + this.outputShape = outputShape; + this.rank = outputShape.length; + const dtype = getCoordsDataType(this.rank); + const sourceCoords = getSourceCoords3(aShape); + this.userCode = ` + void main() { + ${dtype} resRC = getOutputCoords(); + setOutput(getA(${sourceCoords})); + } + `; + } + }; + function getSourceCoords3(aShape) { + const rank = aShape.length; + if (rank > 5) { + throw Error(`Tile for rank ${rank} is not yet supported`); + } + if (rank === 1) { + return `imod(resRC, ${aShape[0]})`; + } + const currentCoords = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u"]; + const sourceCoords = []; + for (let i = 0; i < aShape.length; i++) { + sourceCoords.push(`imod(${currentCoords[i]}, ${aShape[i]})`); + } + return sourceCoords.join(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tile.js + function tile4(params) { + const { inputs, backend: backend2, attrs } = params; + const { x } = inputs; + const { reps } = attrs; + if (x.dtype === "string" || x.shape.length > 5) { + const data = backend2.readSync(x.dataId); + const value = x.dtype === "string" ? data.map((d) => util_exports.decodeString(d)) : data; + const buf = buffer(x.shape, x.dtype, value); + const outBuf = tileImplCPU(buf, reps); + return backend2.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values); + } + const program = new TileProgram(x.shape, reps); + const output = backend2.runWebGLProgram(program, [x], x.dtype); + return output; + } + var tileConfig2 = { + kernelName: Tile, + backendName: "webgl", + kernelFunc: tile4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/TopK.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/top_k_gpu.js + init_define_BUILD_VERSION(); + var SwapProgram = class { + constructor(shape) { + this.variableNames = ["x", "indices"]; + this.customUniforms = [ + { name: "n", type: "int" }, + { name: "firstPass", type: "int" }, + { name: "negativeInf", type: "float" }, + { name: "dir", type: "int" }, + { name: "inc", type: "int" } + ]; + this.outputShape = shape; + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int elemIdx = coords[1]; + + // We compare elements pair-wise within a group of size 2 * inc. + // The comparing rule for each group alternates between ascending + // and descending. Within each group, we compare each pair at + // positions i and i+inc. To decide whether an element at position i + // is x0 or x1, we mod it by 2 * inc, if the result is smaller than + // inc, it is in the first half of the group, we denote it as x0, + // otherwise we denote it as x1. + // For example, as shown in the Bitonic top K paper referenced above, + // Figure5(a) shows that element[1] is in the + // second half of the group when group size is 2, but it is in the + // first half of the group when group size is 4. + + bool isFirstInPair = imod(elemIdx, 2 * inc) < inc; + int i = isFirstInPair ? elemIdx : elemIdx - inc; + + int i0 = firstPass == 1 ? i : int(getIndices(batch, i)); + int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc)); + float x0 = i0 < n ? getX(batch, i0) : negativeInf; + float x1 = i1 < n ? getX(batch, i1) : negativeInf; + + // Denotes which direction indices are in (ascending or descending). + bool reverse = imod(elemIdx, 2 * dir) >= dir; + bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0); + if (reverse == isGreater) { // Elements in opposite order of direction + int iTemp = i0; + i0 = i1; + i1 = iTemp; + } + if (isFirstInPair) { + setOutput(float(i0)); + } else { + setOutput(float(i1)); + } + } + `; + } + }; + var MergeProgram = class { + constructor(shape) { + this.variableNames = ["x", "indices"]; + this.customUniforms = [ + { name: "n", type: "int" }, + { name: "firstPass", type: "int" }, + { name: "k", type: "int" } + ]; + this.outputShape = shape; + this.userCode = ` + void main() { + // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ... + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int elemIdx = coords[1]; + + // The output size is half of the previous size. + // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _ (k=4), + // we only need to output the indices at positions |, the indices at + // positions _ can be thrown away, see Figure5(b) After Phase 2 + // (Merge phase) in the Bitonic Top K paper referenced above. + // For example, the paper shows we only need to output the orange bars. + // The output sequence should look like this | | | | | | | |. + // Because the sequence is halved, to map the output index back + // to the previous sequence to find the corresponding value, + // we need to double the index. When we double the index, + // we basically interpolate a position, so 2i looks like + // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position + // of each 2k positions by - elemIdx % k. E.g. for output at + // index 4,5,6,7, we want to get the corresponding element at + // original index 8,9,10,11, for output at index 8,9,10,11, + // we want to get the corresponding element at original index + // 16,17,18,19, so on and so forth. + + int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k)); + int i0 = firstPass == 1 ? i : int(getIndices(batch, i)); + int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k)); + + float x0 = getX(batch, i0); + float x1 = i1 < n ? getX(batch, i1) : x0; + + setOutput(x0 >= x1 ? float(i0) : float(i1)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/TopK.js + function disposeIntermediateTensorInfoOrNull(backend2, tensorInfo) { + if (tensorInfo !== null) { + backend2.disposeIntermediateTensorInfo(tensorInfo); + } + } + function roundUpToPow2(num) { + let pow22 = 1; + while (pow22 < num) { + pow22 *= 2; + } + return pow22; + } + function topK2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { k, sorted } = attrs; + const TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD = env().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"); + const TOPK_K_CPU_HANDOFF_THRESHOLD = env().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"); + const xShape = x.shape; + const lastDim = xShape[xShape.length - 1]; + if (backend2.shouldExecuteOnCPU([x]) || lastDim < TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD || k > TOPK_K_CPU_HANDOFF_THRESHOLD) { + const xVals = backend2.readSync(x.dataId); + const [allTopKVals, allTopKIndices] = topKImplCPU(xVals, xShape, x.dtype, k, sorted); + return [ + backend2.makeTensorInfo(allTopKVals.shape, allTopKVals.dtype, allTopKVals.values), + backend2.makeTensorInfo(allTopKIndices.shape, allTopKIndices.dtype, allTopKIndices.values) + ]; + } + if (k === 0) { + xShape[xShape.length - 1] = 0; + return [ + backend2.makeTensorInfo(xShape, x.dtype, []), + backend2.makeTensorInfo(xShape, "int32", []) + ]; + } + if (lastDim === 1) { + return [ + x, + fill3({ attrs: { shape: xShape, dtype: "int32", value: 0 }, backend: backend2 }) + ]; + } + const xtexData = backend2.texData.get(x.dataId); + const xIsPacked = xtexData !== null && xtexData.isPacked; + const xUnPacked = xIsPacked ? backend2.unpackTensor(x) : x; + const xSize = util_exports.sizeFromShape(xShape); + const batch = xSize / lastDim; + const x2D = reshape3({ inputs: { x: xUnPacked }, attrs: { shape: [batch, lastDim] }, backend: backend2 }); + if (xIsPacked) { + disposeIntermediateTensorInfoOrNull(backend2, xUnPacked); + } + const kPow2 = roundUpToPow2(k); + const lastDimPow2 = roundUpToPow2(lastDim); + let indices = null; + const getInputs = () => indices === null ? [x2D, x2D] : [x2D, indices]; + const runSwap = (dir, inc, shape) => { + const inputs2 = getInputs(); + const program = new SwapProgram(shape); + const fistPass = indices === null ? 1 : 0; + const customValues = [[lastDim], [fistPass], [Number.NEGATIVE_INFINITY], [dir], [inc]]; + const prevIndices2 = indices; + indices = backend2.runWebGLProgram(program, inputs2, "int32", customValues); + disposeIntermediateTensorInfoOrNull(backend2, prevIndices2); + }; + for (let len = 1; len < kPow2; len *= 2) { + const dir = len * 2; + for (let inc = len; inc >= 1; inc /= 2) { + runSwap(dir, inc, [batch, lastDimPow2]); + } + } + for (let indicesSize = lastDimPow2; indicesSize > kPow2; indicesSize /= 2) { + const inputs2 = getInputs(); + const mergeProgram = new MergeProgram([batch, indicesSize / 2]); + const firstPass = indices === null ? 1 : 0; + const customValues = [[lastDim], [firstPass], [kPow2]]; + const prevIndices2 = indices; + indices = backend2.runWebGLProgram(mergeProgram, inputs2, "int32", customValues); + disposeIntermediateTensorInfoOrNull(backend2, prevIndices2); + const len = kPow2 / 2; + const dir = len * 2; + for (let inc = len; inc >= 1; inc /= 2) { + runSwap(dir, inc, indices.shape); + } + } + let prevIndices = indices; + indices = slice3({ inputs: { x: indices }, backend: backend2, attrs: { begin: 0, size: [batch, k] } }); + disposeIntermediateTensorInfoOrNull(backend2, prevIndices); + let values = gatherV22({ inputs: { x: x2D, indices }, backend: backend2, attrs: { axis: 1, batchDims: 1 } }); + disposeIntermediateTensorInfoOrNull(backend2, x2D); + const newShape = xShape.slice(0, -1); + newShape.push(k); + prevIndices = indices; + indices = reshape3({ inputs: { x: indices }, attrs: { shape: newShape }, backend: backend2 }); + disposeIntermediateTensorInfoOrNull(backend2, prevIndices); + const prevValues = values; + values = reshape3({ inputs: { x: values }, attrs: { shape: newShape }, backend: backend2 }); + disposeIntermediateTensorInfoOrNull(backend2, prevValues); + return [values, indices]; + } + var topKConfig2 = { + kernelName: TopK, + backendName: "webgl", + kernelFunc: topK2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transform.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/transform_gpu.js + init_define_BUILD_VERSION(); + var TransformProgram = class { + constructor(imageHeight, imageWidth, interpolation, fillMode, fillValue, outShape) { + this.variableNames = ["Image", "Transforms"]; + this.outputShape = outShape; + const interpolationModeId = interpolation === "nearest" ? 1 : 2; + let fillModeId; + switch (fillMode) { + case "constant": + fillModeId = 1; + break; + case "reflect": + fillModeId = 2; + break; + case "wrap": + fillModeId = 3; + break; + case "nearest": + fillModeId = 4; + break; + default: + fillModeId = 1; + break; + } + this.userCode = ` + float mapCoord(float outCoord, float len) { + float inCoord = outCoord; + if(${fillModeId} == 2) { + if (inCoord < 0.0) { + if (len <= 1.0) { + inCoord = 0.0; + } else { + float sz2 = 2.0 * len; + if (inCoord < sz2) { + inCoord = sz2 * float(int(float(-inCoord / sz2))) + + inCoord; + } + inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0; + } + } else if (inCoord > len - 1.0) { + if (len <= 1.0) { + inCoord = 0.0; + } else { + float sz2 = 2.0 * len; + inCoord -= sz2 * float(int(float(inCoord / sz2))); + if (inCoord >= len) { + inCoord = sz2 - inCoord - 1.0; + } + } + } + return clamp(inCoord, 0.0, len - 1.0); + } else if (${fillModeId} == 3) { + if (inCoord < 0.0) { + if (len <= 1.0) { + inCoord = 0.0; + } else { + float sz = len - 1.0; + inCoord += len * (float(int(float(-inCoord / sz))) + 1.0); + } + } else if (inCoord > len - 1.0) { + if (len <= 1.0) { + inCoord = 0.0; + } else { + float sz = len - 1.0; + inCoord -= len * float(int(float(inCoord / sz))); + } + } + return clamp(inCoord, 0.0, len - 1.0); + } else if (${fillModeId} == 4) { + return clamp(outCoord, 0.0, len - 1.0); + } else { + return outCoord; + } + } + + float readWithFillValue(int batch, int coordY, int coordX, + int channel) { + float outputValue; + if (0 <= coordY && coordY < ${imageHeight} && 0 <= coordX && coordX < ${imageWidth}) { + outputValue = getImage(batch, coordY, coordX, channel); + } else { + outputValue = float(${fillValue}); + } + return outputValue; + } + + void main() { + ivec4 coords = getOutputCoords(); + float outputValue; + int batch = coords[0]; + int x = coords[2]; + int y = coords[1]; + int channel = coords[3]; + float xf = float(x); + float yf = float(y); + float a1 = getTransforms(batch, 0); + float a2 = getTransforms(batch, 1); + float a3 = getTransforms(batch, 2); + float b1 = getTransforms(batch, 3); + float b2 = getTransforms(batch, 4); + float b3 = getTransforms(batch, 5); + float c1 = getTransforms(batch, 6); + float c2 = getTransforms(batch, 7); + float projection = c1 * xf + c2 * yf + 1.0; + if (projection == 0.0) { + outputValue = float(${fillValue}); + } else { + float inX = (a1 * xf + a2 * yf + a3) / projection; + float inY = (b1 * xf + b2 * yf + b3) / projection; + float mapX = mapCoord(inX, float(${imageWidth})); + float mapY = mapCoord(inY, float(${imageHeight})); + + if (${interpolationModeId} == 1) { + int coordY = int(round(mapY)); + int coordX = int(round(mapX)); + outputValue = readWithFillValue(batch, coordY, coordX, + channel); + } else { + float yFloor = floor(mapY); + float xFloor = floor(mapX); + float yCeil = yFloor + 1.0; + float xCeil = xFloor + 1.0; + float valueYFloor = (xCeil - mapX) * + readWithFillValue(batch, int(yFloor), int(xFloor), channel) + + (mapX - xFloor) * + readWithFillValue(batch, int(yFloor), int(xCeil), channel); + float valueYCeil = (xCeil - mapX) * + readWithFillValue(batch, int(yCeil), int(xFloor), channel) + + (mapX - xFloor) * + readWithFillValue(batch, int(yCeil), int(xCeil), channel); + outputValue = (yCeil - mapY) * valueYFloor + + (mapY - yFloor) * valueYCeil; + } + } + setOutput(outputValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transform.js + function transform3(args) { + const { inputs, backend: backend2, attrs } = args; + const { image: image2, transforms } = inputs; + const { interpolation, fillMode, fillValue, outputShape } = attrs; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const [outHeight, outWidth] = outputShape != null ? outputShape : [imageHeight, imageWidth]; + const outShape = [ + batch, + outHeight, + outWidth, + numChannels + ]; + const program = new TransformProgram(imageHeight, imageWidth, interpolation, fillMode, fillValue, outShape); + return backend2.runWebGLProgram(program, [image2, transforms], "float32"); + } + var transformConfig2 = { + kernelName: Transform, + backendName: "webgl", + kernelFunc: transform3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Unique.js + init_define_BUILD_VERSION(); + function unique4(args) { + const { inputs, attrs, backend: backend2 } = args; + const { axis } = attrs; + const { x } = inputs; + assertNotComplex2(x, "unique"); + console.warn("WARNING: ", "UI might be locked temporarily as data is being downloaded"); + const values = backend2.readSync(x.dataId); + const { outputValues, outputShape, indices } = uniqueImplCPU(values, axis, x.shape, x.dtype); + return [ + backend2.makeTensorInfo(outputShape, x.dtype, outputValues), + backend2.makeTensorInfo([indices.length], "int32", indices) + ]; + } + var uniqueConfig2 = { + kernelName: Unique, + backendName: "webgl", + kernelFunc: unique4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Unpack.js + init_define_BUILD_VERSION(); + function unpack2(args) { + const { inputs, backend: backend2, attrs } = args; + const { value } = inputs; + let { axis } = attrs; + if (axis < 0) { + axis += value.shape.length; + } + const x = value; + const xRank = x.shape.length; + const num = value.shape[axis]; + const outShape = new Array(xRank - 1); + let outIndex = 0; + for (let i = 0; i < xRank; i++) { + if (i !== axis) { + outShape[outIndex++] = x.shape[i]; + } + } + const toDispose = []; + const begin = new Array(xRank).fill(0); + const size = x.shape.slice(); + size[axis] = 1; + const res = new Array(num); + for (let i = 0; i < res.length; i++) { + begin[axis] = i; + const sliced = slice3({ inputs: { x }, backend: backend2, attrs: { begin, size } }); + const reshaped = reshape3({ inputs: { x: sliced }, backend: backend2, attrs: { shape: outShape } }); + res[i] = reshaped; + toDispose.push(sliced); + } + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return res; + } + var unpackConfig2 = { + kernelName: Unpack, + backendName: "webgl", + kernelFunc: unpack2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/UnsortedSegmentSum.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/segment_gpu.js + init_define_BUILD_VERSION(); + var SegmentOpProgram = class { + constructor(segOpInfo, segOpType) { + this.variableNames = ["x", "segmentIds"]; + const windowSize = segOpInfo.windowSize; + const batchSize = segOpInfo.batchSize; + const inSize = segOpInfo.inSize; + const numSegments = segOpInfo.numSegments; + const outSize = numSegments * Math.ceil(inSize / windowSize); + this.outputShape = [batchSize, outSize]; + const initializationValue = "0.0"; + const returnValue = `sumValue`; + const windowSizeNearestVec4 = Math.floor(windowSize / 4) * 4; + const windowSizeVec4Remainder = windowSize % 4; + const updateSnippet = ` + sumValue += dot(values, segFilter); + `; + let checkValueOutOfBounds = ""; + if (inSize % windowSize > 0) { + checkValueOutOfBounds = ` + if (inIdx < 0 || inIdx >= ${inSize}) { + return initializationValue; + } + `; + } + let checkSegmentIdOutOfBounds = ""; + if (inSize % windowSize > 0) { + checkSegmentIdOutOfBounds = ` + if (inIdx < 0 || inIdx >= ${inSize}) { + return -1.0; + } + `; + } + this.userCode = ` + const float initializationValue = ${initializationValue}; + + float getValue(int batch, int inIdx) { + ${checkValueOutOfBounds} + return getX(batch, inIdx); + } + + float getSegmentIdAtIndex(int inIdx) { + ${checkSegmentIdOutOfBounds} + return getSegmentIds(inIdx); + } + + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int outIdx = coords[1]; + int inOffset = int(floor(float(outIdx) / float( + ${numSegments})) * float(${windowSize})); + int currentSeg = int(mod(float(outIdx), float(${numSegments}))); + + float sumValue = 0.0; + + for (int i = 0; i < ${windowSizeNearestVec4}; i += 4) { + int inIdx = inOffset + i; + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), + getValue(batch, inIdx + 3) + ); + + vec4 segFilter = vec4( + int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0 + ); + + ${updateSnippet} + } + + int inIdx = inOffset + ${windowSizeNearestVec4}; + if (${windowSizeVec4Remainder === 1}) { + vec4 values = vec4( + getValue(batch, inIdx), + initializationValue, + initializationValue, + initializationValue + ); + + int inIdxSeg = int(getSegmentIdAtIndex(inIdx)); + + vec4 segFilter = vec4( + int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, + 0, + 0, + 0 + ); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 2}) { + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + initializationValue, + initializationValue + ); + + vec4 segFilter = vec4( + int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, + 0, + 0 + ); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 3}) { + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), + initializationValue + ); + + vec4 segFilter = vec4( + int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, + 0 + ); + + ${updateSnippet} + } + setOutput(${returnValue}); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/UnsortedSegmentSum.js + function unsortedSegmentSum3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, segmentIds } = inputs; + const { numSegments } = attrs; + const xRank = x.shape.length; + const toDispose = []; + let axis = 0; + const permutation = backend_util_exports.getAxesPermutation([axis], xRank); + let permutedX = x; + if (permutation != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutation } }); + toDispose.push(permutedX); + axis = backend_util_exports.getInnerMostAxes(1, xRank)[0]; + } + const outShape = backend_util_exports.segment_util.computeOutShape(permutedX.shape, axis, numSegments); + const inSize = util_exports.sizeFromShape([permutedX.shape[axis]]); + const a2D = reshape3({ inputs: { x: permutedX }, backend: backend2, attrs: { shape: [-1, inSize] } }); + toDispose.push(a2D); + const outputDType = sumOutType(x.dtype); + const segOpCompute = (x2, segOpType, segmentIds2, dtype, numSegments2) => { + const batchSize = x2.shape[0]; + const inSize2 = x2.shape[1]; + const windowSize = backend_util_exports.segment_util.segOpComputeOptimalWindowSize(inSize2, numSegments2); + const segOpInfo = { windowSize, inSize: inSize2, batchSize, numSegments: numSegments2 }; + const program = new SegmentOpProgram(segOpInfo, segOpType); + const output = backend2.compileAndRun(program, [x2, segmentIds2], dtype); + toDispose.push(output); + if (output.shape[1] === numSegments2) { + return output; + } + const rangeInfo = range4({ + backend: backend2, + attrs: { start: 0, stop: numSegments2, step: 1, dtype: "float32" } + }); + const tileInfo = tile4({ + inputs: { x: rangeInfo }, + backend: backend2, + attrs: { reps: [inSize2 / windowSize] } + }); + toDispose.push(rangeInfo); + toDispose.push(tileInfo); + const result2 = segOpCompute(output, segOpType, tileInfo, dtype, numSegments2); + return result2; + }; + const segOpResult = segOpCompute(a2D, "unsortedSegmentSum", segmentIds, outputDType, numSegments); + const reshaped = reshape3({ inputs: { x: segOpResult }, backend: backend2, attrs: { shape: outShape } }); + let result = reshaped; + if (permutation != null) { + toDispose.push(reshaped); + const perm = backend_util_exports.getUndoAxesPermutation(permutation); + result = transpose3({ inputs: { x: result }, backend: backend2, attrs: { perm } }); + } + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var unsortedSegmentSumConfig2 = { + kernelName: UnsortedSegmentSum, + backendName: "webgl", + kernelFunc: unsortedSegmentSum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/register_all_kernels.js + var kernelConfigs2 = [ + _fusedMatMulConfig2, + absConfig2, + acosConfig2, + acoshConfig2, + addConfig2, + addNConfig2, + allConfig2, + anyConfig2, + argMaxConfig2, + argMinConfig2, + asinConfig2, + asinhConfig2, + atanConfig2, + atan2Config2, + atanhConfig2, + avgPoolConfig2, + avgPool3DConfig2, + avgPool3DGradConfig3, + avgPoolGradConfig3, + batchMatMulConfig2, + batchNormConfig2, + batchToSpaceNDConfig2, + bincountConfig2, + broadcastArgsConfig2, + castConfig2, + ceilConfig2, + clipByValueConfig2, + complexConfig2, + complexAbsConfig2, + concatConfig2, + conv2DConfig2, + conv2DBackpropFilterConfig2, + conv2DBackpropInputConfig2, + conv3DConfig2, + conv3DBackpropFilterV2Config2, + conv3DBackpropInputConfig, + cosConfig2, + coshConfig2, + cropAndResizeConfig2, + cumprodConfig2, + cumsumConfig2, + denseBincountConfig2, + depthToSpaceConfig2, + depthwiseConv2dNativeConfig2, + depthwiseConv2dNativeBackpropFilterConfig2, + depthwiseConv2dNativeBackpropInputConfig2, + diagConfig2, + dilation2DConfig2, + einsumConfig2, + eluConfig2, + eluGradConfig3, + equalConfig2, + erfConfig2, + expConfig2, + expandDimsConfig2, + expm1Config2, + fftConfig2, + fillConfig2, + flipLeftRightConfig2, + floorConfig2, + floorDivConfig2, + fromPixelsConfig, + fusedConv2DConfig2, + fusedDepthwiseConv2DConfig2, + gatherNdConfig2, + gatherV2Config2, + greaterConfig2, + greaterEqualConfig2, + identityConfig2, + ifftConfig2, + imagConfig2, + isFiniteConfig2, + isInfConfig2, + isNaNConfig2, + leakyReluConfig2, + lessConfig2, + lessEqualConfig2, + linSpaceConfig2, + logConfig2, + log1pConfig2, + logicalAndConfig2, + logicalNotConfig2, + logicalOrConfig2, + LRNConfig2, + LRNGradConfig2, + maxConfig2, + maximumConfig2, + maxPoolConfig2, + maxPool3DConfig2, + maxPool3DGradConfig3, + maxPoolGradConfig3, + maxPoolWithArgmaxConfig2, + meanConfig2, + minConfig2, + minimumConfig2, + mirrorPadConfig2, + modConfig2, + multinomialConfig2, + multiplyConfig2, + negConfig2, + nonMaxSuppressionV3Config2, + nonMaxSuppressionV4Config2, + nonMaxSuppressionV5Config2, + notEqualConfig2, + oneHotConfig2, + onesLikeConfig2, + packConfig2, + padV2Config2, + powConfig2, + preluConfig2, + prodConfig2, + rangeConfig2, + realConfig2, + realDivConfig2, + reciprocalConfig2, + reluConfig2, + relu6Config2, + reshapeConfig2, + resizeBilinearConfig2, + resizeBilinearGradConfig3, + resizeNearestNeighborConfig2, + resizeNearestNeighborGradConfig3, + reverseConfig2, + rotateWithOffsetConfig2, + roundConfig2, + rsqrtConfig2, + scatterNdConfig2, + searchSortedConfig2, + selectConfig2, + seluConfig2, + sigmoidConfig2, + signConfig2, + sinConfig2, + sinhConfig2, + sliceConfig2, + softmaxConfig2, + softplusConfig2, + spaceToBatchNDConfig2, + sparseFillEmptyRowsConfig2, + sparseReshapeConfig2, + sparseSegmentMeanConfig2, + sparseSegmentSumConfig2, + sparseToDenseConfig2, + splitVConfig2, + sqrtConfig2, + squareConfig2, + squaredDifferenceConfig2, + stepConfig2, + stridedSliceConfig2, + stringNGramsConfig2, + stringSplitConfig2, + stringToHashBucketFastConfig2, + subConfig2, + sumConfig2, + tanConfig2, + tanhConfig2, + tileConfig2, + topKConfig2, + transformConfig2, + transposeConfig2, + uniqueConfig2, + unpackConfig2, + unsortedSegmentSumConfig2, + zerosLikeConfig2 + ]; + for (const kernelConfig of kernelConfigs2) { + registerKernel(kernelConfig); + } + + // node_modules/.pnpm/@tensorflow+tfjs@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs/dist/version.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/register_all_kernels.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/_FusedMatMul.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/types.js + init_define_BUILD_VERSION(); + var CppDType; + (function(CppDType2) { + CppDType2[CppDType2["float32"] = 0] = "float32"; + CppDType2[CppDType2["int32"] = 1] = "int32"; + CppDType2[CppDType2["bool"] = 2] = "bool"; + CppDType2[CppDType2["string"] = 3] = "string"; + CppDType2[CppDType2["complex64"] = 4] = "complex64"; + })(CppDType || (CppDType = {})); + var FusableActivation; + (function(FusableActivation2) { + FusableActivation2[FusableActivation2["linear"] = 0] = "linear"; + FusableActivation2[FusableActivation2["relu"] = 1] = "relu"; + FusableActivation2[FusableActivation2["relu6"] = 2] = "relu6"; + FusableActivation2[FusableActivation2["prelu"] = 3] = "prelu"; + FusableActivation2[FusableActivation2["leakyrelu"] = 4] = "leakyrelu"; + FusableActivation2[FusableActivation2["sigmoid"] = 5] = "sigmoid"; + FusableActivation2[FusableActivation2["elu"] = 6] = "elu"; + })(FusableActivation || (FusableActivation = {})); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/_FusedMatMul.js + var wasmFusedMatMul; + function setup(backend2) { + wasmFusedMatMul = backend2.wasm.cwrap(_FusedMatMul, null, [ + "number", + "array", + "number", + "number", + "array", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function fusedBatchMatMul(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b, bias, preluActivationWeights } = inputs; + if (a.dtype !== "float32" || b.dtype !== "float32") { + throw new Error(`_FusedMatMul for non non-float32 tensors not yet supported.`); + } + const { transposeA, transposeB, activation, leakyreluAlpha } = attrs; + const aId = backend2.dataIdMap.get(a.dataId).id; + const bId = backend2.dataIdMap.get(b.dataId).id; + let biasId = 0; + if (bias != null) { + const biasData = backend2.dataIdMap.get(bias.dataId); + if (biasData.shape.length !== 1) { + throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${biasData.shape.length}.`); + } + biasId = biasData.id; + } + const preluActivationWeightsId = preluActivationWeights == null ? 0 : backend2.dataIdMap.get(preluActivationWeights.dataId).id; + const fusedActivation = FusableActivation[activation]; + if (fusedActivation == null) { + throw new Error(`${activation} activation not yet supported for FusedConv2D in the wasm backend.`); + } + const leftDim = transposeA ? a.shape[2] : a.shape[1]; + const rightDim = transposeB ? b.shape[1] : b.shape[2]; + const batchDims = broadcast_util_exports.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2)); + const out = backend2.makeOutput([...batchDims, leftDim, rightDim], a.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const aShapeBytes = new Uint8Array(new Int32Array(a.shape).buffer); + const bShapeBytes = new Uint8Array(new Int32Array(b.shape).buffer); + wasmFusedMatMul(aId, aShapeBytes, a.shape.length, bId, bShapeBytes, b.shape.length, transposeA, transposeB, fusedActivation, biasId, preluActivationWeightsId, leakyreluAlpha || 0, outId); + return out; + } + var _fusedMatMulConfig3 = { + kernelName: _FusedMatMul, + backendName: "wasm", + setupFunc: setup, + kernelFunc: fusedBatchMatMul + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Abs.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/unary_kernel.js + init_define_BUILD_VERSION(); + function createUnaryKernelConfig(kernelName, outType) { + let wasmFunc9; + function setupFunc3(backend2) { + wasmFunc9 = backend2.wasm.cwrap(kernelName, null, [ + "number", + "number", + "number" + ]); + } + function kernelFunc3(args) { + const { backend: backend2, inputs: { x } } = args; + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(x.shape, outType || x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + if (util_exports.sizeFromShape(out.shape) === 0) { + return out; + } + wasmFunc9(xId, CppDType[x.dtype], outId); + return out; + } + return { kernelName, backendName: "wasm", setupFunc: setupFunc3, kernelFunc: kernelFunc3 }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Abs.js + var absConfig3 = createUnaryKernelConfig(Abs); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Add.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/binary_kernel.js + init_define_BUILD_VERSION(); + function createBinaryKernelConfig(kernelName, supportsFullBroadcast19, dtype) { + let wasmFunc9; + function setupFunc3(backend2) { + wasmFunc9 = backend2.wasm.cwrap(kernelName, null, [ + "number", + "array", + "number", + "number", + "array", + "number", + "number", + "number" + ]); + } + function kernelFunc3(args) { + const { backend: backend2, inputs } = args; + const { a, b } = inputs; + const aId = backend2.dataIdMap.get(a.dataId).id; + const bId = backend2.dataIdMap.get(b.dataId).id; + const outputType = dtype != null ? dtype : a.dtype; + const newShape = backend_util_exports.assertAndGetBroadcastShape(a.shape, b.shape); + const out = backend2.makeOutput(newShape, outputType); + if (util_exports.sizeFromShape(newShape) === 0) { + return out; + } + const aShapeBytes = new Uint8Array(new Int32Array(a.shape).buffer); + const bShapeBytes = new Uint8Array(new Int32Array(b.shape).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + const kernelFunc4 = () => wasmFunc9(aId, aShapeBytes, a.shape.length, bId, bShapeBytes, b.shape.length, CppDType[a.dtype], outId); + kernelFunc4(); + return out; + } + return { kernelName, backendName: "wasm", setupFunc: setupFunc3, kernelFunc: kernelFunc3 }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Add.js + var supportsFullBroadcast = true; + var addConfig3 = createBinaryKernelConfig(Add, supportsFullBroadcast); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/AddN.js + init_define_BUILD_VERSION(); + var wasmFunc; + function setupFunc(backend2) { + wasmFunc = backend2.wasm.cwrap(AddN, null, [ + "array", + "number", + "number", + "number" + ]); + } + function addn(args) { + const { inputs, backend: backend2 } = args; + const out = backend2.makeOutput(inputs[0].shape, inputs[0].dtype); + if (util_exports.sizeFromShape(out.shape) === 0) { + return out; + } + const inputIds = inputs.map((x) => backend2.dataIdMap.get(x.dataId).id); + const inputIdsBytes = new Uint8Array(new Int32Array(inputIds).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmFunc(inputIdsBytes, inputIds.length, CppDType[out.dtype], outId); + return out; + } + var addNConfig3 = { + kernelName: AddN, + backendName: "wasm", + setupFunc, + kernelFunc: addn + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/All.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/kernel_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Transpose.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Identity.js + init_define_BUILD_VERSION(); + function identity3(args) { + const { inputs: { x }, backend: backend2 } = args; + const out = backend2.makeOutput(x.shape, x.dtype); + const inVals = backend2.typedArrayFromHeap(x); + const outVals = backend2.typedArrayFromHeap(out); + outVals.set(inVals); + return out; + } + var identityConfig3 = { + kernelName: Identity, + backendName: "wasm", + kernelFunc: identity3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Transpose.js + var wasmTranspose; + function setup2(backend2) { + wasmTranspose = backend2.wasm.cwrap(Transpose, null, [ + "number", + "array", + "number", + "number", + "number", + "array", + "number" + ]); + } + function transpose4(args) { + const { inputs, backend: backend2, attrs } = args; + const [reducedShape, perm] = removeOneSizeDims(inputs.x.shape, attrs.perm); + let permIsNoOp = true; + for (let i = 0; i < perm.length; i++) { + if (perm[i] !== i) { + permIsNoOp = false; + } + } + const outShape = computeOutShape4(inputs.x.shape, attrs.perm); + const x = { + dataId: inputs.x.dataId, + shape: reducedShape, + dtype: inputs.x.dtype + }; + if (permIsNoOp) { + const cloned = identity3({ inputs, backend: backend2 }); + cloned.shape = outShape; + return cloned; + } + const out = backend2.makeOutput(outShape, x.dtype); + const xId = backend2.dataIdMap.get(x.dataId).id; + const outId = backend2.dataIdMap.get(out.dataId).id; + const permBytes = new Uint8Array(new Int32Array(perm).buffer); + const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + wasmTranspose(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], outId, permBytes, perm.length); + return out; + } + function computeOutShape4(inShape, perm) { + const outShape = new Array(inShape.length); + for (let i = 0; i < outShape.length; i++) { + outShape[i] = inShape[perm[i]]; + } + return outShape; + } + function removeOneSizeDims(shape, perm) { + const newShape = []; + const newPerm = []; + for (let i = 0; i < shape.length; ++i) { + if (shape[i] !== 1) { + newShape.push(shape[i]); + } + if (shape[perm[i]] !== 1) { + newPerm.push(perm[i]); + } + } + for (let i = 0; i < newPerm.length; ++i) { + let minValIdx = -1; + for (let j = 0; j < newPerm.length; ++j) { + if (newPerm[j] >= i && (minValIdx === -1 || newPerm[minValIdx] > newPerm[j])) { + minValIdx = j; + } + } + newPerm[minValIdx] = i; + } + return [newShape, newPerm]; + } + var transposeConfig3 = { + kernelName: Transpose, + backendName: "wasm", + kernelFunc: transpose4, + setupFunc: setup2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/kernel_utils.js + function permuteAxesAndTranspose(x, axis, backend2) { + const xShape = x.shape; + const xRank = x.shape.length; + const originalAxes = util_exports.parseAxisParam(axis, xShape); + let axes = originalAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let xTransposed = null; + let inputWasTransposed = false; + if (permutedAxes != null) { + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = xShape[permutedAxes[i]]; + } + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + xTransposed = transpose4({ inputs: { x }, attrs: { perm: permutedAxes }, backend: backend2 }); + const xId = backend2.dataIdMap.get(x.dataId).id; + const transposedId = backend2.dataIdMap.get(xTransposed.dataId).id; + if (transposedId !== xId) { + inputWasTransposed = true; + } + } + return { transposed: xTransposed, originalAxes, axes, inputWasTransposed }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/All.js + var wasmAll; + function setup3(backend2) { + wasmAll = backend2.wasm.cwrap(All, null, ["number, number, number"]); + } + function all4(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + input2 = transposed; + inputId = transposedId; + } + const inputRank = input2.shape.length; + backend_util_exports.assertAxesAreInnerMostDims("all", axes, inputRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, x.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmAll(inputId, reduceSize, outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var allConfig3 = { + kernelName: All, + backendName: "wasm", + setupFunc: setup3, + kernelFunc: all4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Any.js + init_define_BUILD_VERSION(); + var wasmAny; + function setup4(backend2) { + wasmAny = backend2.wasm.cwrap(Any, null, ["number, number, number"]); + } + function any4(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + input2 = transposed; + inputId = transposedId; + } + const inputRank = input2.shape.length; + backend_util_exports.assertAxesAreInnerMostDims("any", axes, inputRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, x.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmAny(inputId, reduceSize, outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var anyConfig3 = { + kernelName: Any, + backendName: "wasm", + setupFunc: setup4, + kernelFunc: any4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ArgMax.js + init_define_BUILD_VERSION(); + var wasmFunc2; + function setup5(backend2) { + wasmFunc2 = backend2.wasm.cwrap(ArgMax, null, [ + "number", + "number", + "number", + "number", + "number" + ]); + } + function argmax(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + if (transposedId !== xId) { + input2 = transposed; + inputId = transposedId; + } + } + const outShape = input2.shape.slice(0, -1); + const out = backend2.makeOutput(outShape, "int32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const outerSize = util_exports.sizeFromShape(out.shape); + const innerSize = input2.shape[axes[0]]; + wasmFunc2(inputId, CppDType[input2.dtype], outerSize, innerSize, outId); + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + return out; + } + var argMaxConfig3 = { + kernelName: ArgMax, + backendName: "wasm", + kernelFunc: argmax, + setupFunc: setup5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/AvgPool.js + init_define_BUILD_VERSION(); + var wasmAvgPool; + function setup6(backend2) { + wasmAvgPool = backend2.wasm.cwrap(AvgPool, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function avgPool4(args) { + const { inputs, attrs, backend: backend2 } = args; + const x = inputs.x; + const xId = backend2.dataIdMap.get(x.dataId).id; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const channels = convInfo.inChannels; + if (convInfo.dataFormat !== "channelsLast") { + throw new Error(`wasm backend does not support dataFormat:'${convInfo.dataFormat}'. Please use 'channelsLast'.`); + } + if (convInfo.dilationWidth !== 1 || convInfo.dilationHeight !== 1) { + throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${convInfo.dilationHeight}, ${convInfo.dilationWidth}].`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmAvgPool(xId, x.shape[0], x.shape[1], x.shape[2], filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, strideHeight, strideWidth, channels, outId); + return out; + } + var avgPoolConfig3 = { + kernelName: AvgPool, + backendName: "wasm", + setupFunc: setup6, + kernelFunc: avgPool4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BatchMatMul.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Reshape.js + init_define_BUILD_VERSION(); + function reshape4(args) { + const { inputs, attrs } = args; + const { x } = inputs; + const { shape } = attrs; + const xSize = util_exports.sizeFromShape(x.shape); + const $shape = util_exports.inferFromImplicitShape(shape, xSize); + util_exports.assert(xSize === util_exports.sizeFromShape($shape), () => `new shape: ${$shape}, old shape: ${x.shape}. New shape and old shape must have the same number of elements.`); + args.backend.incRef(x.dataId); + return { dataId: x.dataId, shape: $shape, dtype: x.dtype }; + } + var reshapeConfig3 = { + kernelName: Reshape, + backendName: "wasm", + kernelFunc: reshape4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BatchMatMul.js + var wasmBatchMatMul; + function setup7(backend2) { + wasmBatchMatMul = backend2.wasm.cwrap(BatchMatMul, null, [ + "number", + "array", + "number", + "number", + "array", + "number", + "number", + "number", + "number" + ]); + } + function batchMatMul3(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b } = inputs; + const { transposeA, transposeB } = attrs; + if (a.dtype !== "float32" || b.dtype !== "float32") { + throw new Error(`BatchMatMul for non non-float32 tensors not yet supported.`); + } + const aRank = a.shape.length; + const bRank = b.shape.length; + const innerShapeA = transposeA ? a.shape[aRank - 2] : a.shape[aRank - 1]; + const innerShapeB = transposeB ? b.shape[bRank - 1] : b.shape[bRank - 2]; + const outerShapeA = transposeA ? a.shape[aRank - 1] : a.shape[aRank - 2]; + const outerShapeB = transposeB ? b.shape[bRank - 2] : b.shape[bRank - 1]; + const outerDimsA = a.shape.slice(0, -2); + const outerDimsB = b.shape.slice(0, -2); + const batchDimA = util_exports.sizeFromShape(outerDimsA); + const batchDimB = util_exports.sizeFromShape(outerDimsB); + const outShapeOuterDims = broadcast_util_exports.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2)); + const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]); + util_exports.assert(innerShapeA === innerShapeB, () => `Error in matMul: inner shapes (${innerShapeA}) and (${innerShapeB}) of Tensors with shapes ${a.shape} and ${b.shape} and transposeA=${transposeA} and transposeB=${transposeB} must match.`); + const a3dShape = transposeA ? [batchDimA, innerShapeA, outerShapeA] : [batchDimA, outerShapeA, innerShapeA]; + const b3dShape = transposeB ? [batchDimB, outerShapeB, innerShapeB] : [batchDimB, innerShapeB, outerShapeB]; + const a3d = reshape4({ inputs: { x: a }, backend: backend2, attrs: { shape: a3dShape } }); + const b3d = reshape4({ inputs: { x: b }, backend: backend2, attrs: { shape: b3dShape } }); + const a3dId = backend2.dataIdMap.get(a3d.dataId).id; + const b3dId = backend2.dataIdMap.get(b3d.dataId).id; + const leftDim = transposeA ? a3d.shape[2] : a3d.shape[1]; + const rightDim = transposeB ? b3d.shape[1] : b3d.shape[2]; + const batchDim = Math.max(batchDimA, batchDimB); + const out = backend2.makeOutput([batchDim, leftDim, rightDim], a3d.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const aShapeBytes = new Uint8Array(new Int32Array(a3d.shape).buffer); + const bShapeBytes = new Uint8Array(new Int32Array(b3d.shape).buffer); + wasmBatchMatMul(a3dId, aShapeBytes, a3d.shape.length, b3dId, bShapeBytes, b3d.shape.length, transposeA, transposeB, outId); + backend2.disposeData(a3d.dataId); + backend2.disposeData(b3d.dataId); + out.shape = outShape; + return out; + } + var batchMatMulConfig3 = { + kernelName: BatchMatMul, + backendName: "wasm", + setupFunc: setup7, + kernelFunc: batchMatMul3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BatchToSpaceND.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Slice.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernel_utils/shared.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Slice.js + function slice4(args) { + const { inputs: { x }, attrs: { begin, size }, backend: backend2 } = args; + const [begin_, size_] = slice_util_exports.parseSliceParams(x, begin, size); + const isContinous = slice_util_exports.isSliceContinous(x.shape, begin_, size_); + const xVals = backend2.readSync(x.dataId); + const out = backend2.makeOutput(size_, x.dtype); + const xStrides = util_exports.computeStrides(x.shape); + const outData = backend2.dataIdMap.get(out.dataId); + if (isContinous) { + const flatOffset = slice_util_exports.computeFlatOffset(begin_, xStrides); + if (x.dtype === "string") { + outData.stringBytes = xVals.slice(flatOffset, flatOffset + util_exports.sizeFromShape(size_)); + } else { + const outVals2 = backend2.typedArrayFromHeap(out); + outVals2.set(xVals.subarray(flatOffset, flatOffset + util_exports.sizeFromShape(size_))); + } + return out; + } + if (x.dtype === "string") { + const res = sliceImpl(xVals, begin_, size_, x.shape, x.dtype); + outData.stringBytes = res; + return out; + } + const outVals = backend2.typedArrayFromHeap(out); + const rank = x.shape.length; + if (rank === 2) { + slice2d2(xVals, xStrides[0], outVals, begin_, size_); + } else if (rank === 3) { + slice3d2(xVals, xStrides[0], xStrides[1], outVals, begin_, size_); + } else if (rank === 4) { + slice4d2(xVals, xStrides[0], xStrides[1], xStrides[2], outVals, begin_, size_); + } else { + const res = sliceImpl(xVals, begin_, size_, x.shape, x.dtype); + outVals.set(res); + } + return out; + } + function slice2d2(xVals, xStride, outVals, begin, size) { + let outOffset = 0; + const beginI = begin[0]; + const beginJ = begin[1]; + const endI = beginI + size[0]; + for (let i = beginI; i < endI; i++) { + const xOffset = i * xStride + beginJ; + outVals.set(xVals.subarray(xOffset, xOffset + size[1]), outOffset); + outOffset += size[1]; + } + } + function slice3d2(xVals, xStride1, xStride2, outVals, begin, size) { + let outOffset = 0; + const beginI = begin[0]; + const beginJ = begin[1]; + const beginK = begin[2]; + const endI = beginI + size[0]; + const endJ = beginJ + size[1]; + for (let i = beginI; i < endI; i++) { + for (let j = beginJ; j < endJ; j++) { + const xOffset = i * xStride1 + j * xStride2 + beginK; + outVals.set(xVals.subarray(xOffset, xOffset + size[2]), outOffset); + outOffset += size[2]; + } + } + } + function slice4d2(xVals, xStride1, xStride2, xStride3, outVals, begin, size) { + let outOffset = 0; + const beginI = begin[0]; + const beginJ = begin[1]; + const beginK = begin[2]; + const endI = beginI + size[0]; + const endJ = beginJ + size[1]; + const endK = beginK + size[2]; + const beginL = begin[3]; + for (let i = beginI; i < endI; i++) { + for (let j = beginJ; j < endJ; j++) { + for (let k = beginK; k < endK; k++) { + const xOffset = i * xStride1 + j * xStride2 + k * xStride3 + beginL; + outVals.set(xVals.subarray(xOffset, xOffset + size[3]), outOffset); + outOffset += size[3]; + } + } + } + } + var sliceConfig3 = { + kernelName: Slice, + backendName: "wasm", + kernelFunc: slice4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BatchToSpaceND.js + function batchToSpaceND4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, crops } = attrs; + const prod5 = blockShape.reduce((a, b) => a * b); + const reshaped = backend_util_exports.getReshaped(x.shape, blockShape, prod5); + const permuted = backend_util_exports.getPermuted(reshaped.length, blockShape.length); + const reshapedPermuted = backend_util_exports.getReshapedPermuted(x.shape, blockShape, prod5); + const sliceBeginCoords = backend_util_exports.getSliceBeginCoords(crops, blockShape.length); + const sliceSize = backend_util_exports.getSliceSize(reshapedPermuted, crops, blockShape.length); + const xReshaped = reshape4({ inputs: { x }, backend: backend2, attrs: { shape: reshaped } }); + const xTransposed = transpose4({ inputs: { x: xReshaped }, backend: backend2, attrs: { perm: permuted } }); + const xTransposedReshaped = reshape4({ inputs: { x: xTransposed }, backend: backend2, attrs: { shape: reshapedPermuted } }); + const result = slice4({ + inputs: { x: xTransposedReshaped }, + backend: backend2, + attrs: { begin: sliceBeginCoords, size: sliceSize } + }); + backend2.disposeData(xReshaped.dataId); + backend2.disposeData(xTransposed.dataId); + backend2.disposeData(xReshaped.dataId); + return result; + } + var batchToSpaceNDConfig3 = { + kernelName: BatchToSpaceND, + backendName: "wasm", + kernelFunc: batchToSpaceND4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cast.js + init_define_BUILD_VERSION(); + function cast5(args) { + const { inputs: { x }, attrs: { dtype }, backend: backend2 } = args; + const out = backend2.makeOutput(x.shape, dtype); + const inVals = backend2.typedArrayFromHeap(x); + const outVals = backend2.typedArrayFromHeap(out); + outVals.set(inVals); + return out; + } + var castConfig3 = { + kernelName: Cast, + backendName: "wasm", + kernelFunc: cast5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Ceil.js + init_define_BUILD_VERSION(); + var ceilConfig3 = createUnaryKernelConfig(Ceil); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ClipByValue.js + init_define_BUILD_VERSION(); + var wasmClip; + function setup8(backend2) { + wasmClip = backend2.wasm.cwrap(ClipByValue, null, [ + "number", + "number", + "number", + "number" + ]); + } + function clip(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { clipValueMin, clipValueMax } = attrs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(x.shape, x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmClip(xId, clipValueMin, clipValueMax, outId); + return out; + } + var clipByValueConfig3 = { + kernelName: ClipByValue, + backendName: "wasm", + setupFunc: setup8, + kernelFunc: clip + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Concat.js + init_define_BUILD_VERSION(); + function concat4(args) { + const { inputs, backend: backend2 } = args; + const axis = util_exports.parseAxisParam(args.attrs.axis, inputs[0].shape)[0]; + let outShape = backend_util_exports.computeOutShape(inputs.map((t) => t.shape), axis); + const $inputs = inputs.filter((t) => util_exports.sizeFromShape(t.shape) > 0); + if ($inputs.length === 1) { + return identity3({ inputs: { x: $inputs[0] }, backend: backend2 }); + } + const out = backend2.makeOutput(outShape, inputs[0].dtype); + if (util_exports.sizeFromShape(outShape) === 0) { + return out; + } + const shapes = $inputs.map((t) => t.shape); + backend_util_exports.assertParamsConsistent(shapes, axis); + if ($inputs[0].dtype === "string") { + const inputs2D = $inputs.map((t) => { + const innerSize = util_exports.sizeFromShape(t.shape.slice(axis)); + const shape = [-1, innerSize]; + return reshape4({ inputs: { x: t }, backend: backend2, attrs: { shape } }); + }); + const inputsValShapes = inputs2D.map((t) => { + return { vals: backend2.readSync(t.dataId), shape: t.shape }; + }); + outShape = backend_util_exports.computeOutShape(inputs2D.map((t) => t.shape), 1); + const simplyConcat = inputs2D[0].shape[0] === 1; + const outVals2 = concatImpl(inputsValShapes, outShape, inputs[0].dtype, simplyConcat); + const finalOutShape = backend_util_exports.computeOutShape($inputs.map((t) => t.shape), axis); + out.shape = finalOutShape; + const outData = backend2.dataIdMap.get(out.dataId); + outData.stringBytes = backend_util_exports.fromStringArrayToUint8(outVals2); + inputs2D.forEach((t) => backend2.disposeData(t.dataId)); + return out; + } + const batchDim = util_exports.sizeFromShape($inputs[0].shape.slice(0, axis)); + let sumInnerDims = 0; + const innerDims = $inputs.map((input2) => { + const innerDim = util_exports.sizeFromShape(input2.shape.slice(axis)); + sumInnerDims += innerDim; + return innerDim; + }); + const inVals = $inputs.map((input2) => backend2.typedArrayFromHeap(input2)); + const outVals = backend2.typedArrayFromHeap(out); + for (let b = 0; b < batchDim; b++) { + let outOffset = b * sumInnerDims; + for (let i = 0; i < inVals.length; i++) { + const innerDim = innerDims[i]; + const inOffset = b * innerDim; + const vals = inVals[i].subarray(inOffset, inOffset + innerDim); + outVals.set(vals, outOffset); + outOffset += innerDim; + } + } + return out; + } + var concatConfig3 = { + kernelName: Concat, + backendName: "wasm", + kernelFunc: concat4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Conv2D.js + init_define_BUILD_VERSION(); + var wasmConv2d; + function setup9(backend2) { + wasmConv2d = backend2.wasm.cwrap(Conv2D, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function conv2d4(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x, filter } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const filterId = backend2.dataIdMap.get(filter.dataId).id; + const { strides, dilations, pad: pad3, dimRoundingMode, dataFormat } = attrs; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode, false, $dataFormat); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const inputChannels = convInfo.inChannels; + const outputChannels = convInfo.outChannels; + const isSamePad = convInfo.padInfo.type === "SAME" ? 1 : 0; + if (convInfo.dataFormat !== "channelsLast") { + throw new Error(`wasm backend Conv2D does not support dataFormat:'${convInfo.dataFormat}'. Please use 'channelsLast'.`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmConv2d(xId, x.shape[0], x.shape[1], x.shape[2], filterId, filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, outId); + return out; + } + var conv2DConfig3 = { + kernelName: Conv2D, + backendName: "wasm", + setupFunc: setup9, + kernelFunc: conv2d4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Conv2DBackpropInput.js + init_define_BUILD_VERSION(); + var wasmConv2DBackpropInput; + function setup10(backend2) { + wasmConv2DBackpropInput = backend2.wasm.cwrap(Conv2DBackpropInput, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function conv2DBackpropInput4(args) { + const { backend: backend2, inputs, attrs } = args; + const { dy, filter } = inputs; + const { strides, pad: pad3, dataFormat, dimRoundingMode, inputShape } = attrs; + const dilations = 1; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(inputShape, filter.shape, strides, dilations, pad3, dimRoundingMode, false, $dataFormat); + const { batchSize, filterHeight, filterWidth, inChannels, inHeight, inWidth, outChannels, outHeight, outWidth, strideHeight, strideWidth } = convInfo; + const topPad = filterHeight - 1 - convInfo.padInfo.top; + const leftPad = filterWidth - 1 - convInfo.padInfo.left; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const dxStrides = util_exports.computeStrides(convInfo.inShape); + const dyStrides = util_exports.computeStrides(dy.shape); + const [fltS0, fltS1, fltS2] = util_exports.computeStrides(filter.shape); + const xBatchStride = dxStrides[0]; + const xRowStride = isChannelsLast ? dxStrides[1] : dxStrides[2]; + const xColStride = isChannelsLast ? dxStrides[2] : 1; + const xChannelStride = isChannelsLast ? 1 : dxStrides[1]; + const yBatchStride = dyStrides[0]; + const yRowStride = isChannelsLast ? dyStrides[1] : dyStrides[2]; + const yColStride = isChannelsLast ? dyStrides[2] : 1; + const yChannelStride = isChannelsLast ? 1 : dyStrides[1]; + const out = backend2.makeOutput(convInfo.inShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const dyId = backend2.dataIdMap.get(dy.dataId).id; + const filterId = backend2.dataIdMap.get(filter.dataId).id; + wasmConv2DBackpropInput(dyId, filterId, batchSize, filterHeight, filterWidth, inHeight, inWidth, inChannels, outHeight, outWidth, outChannels, strideHeight, strideWidth, topPad, leftPad, fltS0, fltS1, fltS2, xBatchStride, xRowStride, xColStride, xChannelStride, yBatchStride, yRowStride, yColStride, yChannelStride, outId); + return out; + } + var conv2DBackpropInputConfig3 = { + kernelName: Conv2DBackpropInput, + backendName: "wasm", + setupFunc: setup10, + kernelFunc: conv2DBackpropInput4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cos.js + init_define_BUILD_VERSION(); + var cosConfig3 = createUnaryKernelConfig(Cos); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cosh.js + init_define_BUILD_VERSION(); + var coshConfig3 = createUnaryKernelConfig(Cosh); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/CropAndResize.js + init_define_BUILD_VERSION(); + var InterpolationMethod; + (function(InterpolationMethod2) { + InterpolationMethod2[InterpolationMethod2["bilinear"] = 0] = "bilinear"; + InterpolationMethod2[InterpolationMethod2["nearest"] = 1] = "nearest"; + })(InterpolationMethod || (InterpolationMethod = {})); + var wasmCropAndResize; + function setup11(backend2) { + wasmCropAndResize = backend2.wasm.cwrap(CropAndResize, null, [ + "number", + "number", + "number", + "number", + "array", + "number", + "number", + "number", + "number", + "number" + ]); + } + function cropAndResize4(args) { + const { backend: backend2, inputs, attrs } = args; + const { method, extrapolationValue, cropSize } = attrs; + const { image: image2, boxes, boxInd } = inputs; + const numBoxes = boxes.shape[0]; + const [cropHeight, cropWidth] = cropSize; + const outShape = [numBoxes, cropHeight, cropWidth, image2.shape[3]]; + let imagesData = backend2.dataIdMap.get(image2.dataId); + let castedData; + if (image2.dtype !== "float32") { + castedData = cast5({ backend: backend2, inputs: { x: image2 }, attrs: { dtype: "float32" } }); + imagesData = backend2.dataIdMap.get(castedData.dataId); + } + const imagesId = imagesData.id; + const boxesId = backend2.dataIdMap.get(boxes.dataId).id; + const boxIndId = backend2.dataIdMap.get(boxInd.dataId).id; + const out = backend2.makeOutput(outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const imagesShapeBytes = new Uint8Array(new Int32Array(image2.shape).buffer); + wasmCropAndResize(imagesId, boxesId, boxIndId, numBoxes, imagesShapeBytes, cropHeight, cropWidth, InterpolationMethod[method], extrapolationValue, outId); + if (castedData != null) { + backend2.disposeData(castedData.dataId); + } + return out; + } + var cropAndResizeConfig3 = { + kernelName: CropAndResize, + backendName: "wasm", + setupFunc: setup11, + kernelFunc: cropAndResize4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cumprod.js + init_define_BUILD_VERSION(); + var wasmCumprod; + function setup12(backend2) { + wasmCumprod = backend2.wasm.cwrap(Cumprod, null, [ + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function cumprod4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + const xRank = x.shape.length; + util_exports.assert(x.dtype === "float32" || x.dtype === "int32", () => `cumprod does not support ${x.dtype} tensors in the WASM backend`); + const permutation = backend_util_exports.getAxesPermutation([axis], xRank); + let permutedX = x; + if (permutation !== null) { + permutedX = transpose4({ inputs: { x }, attrs: { perm: permutation }, backend: backend2 }); + } + const permutedAxis = backend_util_exports.getInnerMostAxes(1, xRank)[0]; + backend_util_exports.assertAxesAreInnerMostDims("cumprod", [permutedAxis], xRank); + const permutedOut = backend2.makeOutput(permutedX.shape, permutedX.dtype); + const finalDim = permutedX.shape[permutedAxis]; + const permutedXId = backend2.dataIdMap.get(permutedX.dataId).id; + const permutedOutId = backend2.dataIdMap.get(permutedOut.dataId).id; + wasmCumprod(permutedXId, exclusive ? 1 : 0, reverse5 ? 1 : 0, finalDim, permutedOutId, CppDType[x.dtype]); + let out = permutedOut; + if (permutation !== null) { + const undoPermutation = backend_util_exports.getUndoAxesPermutation(permutation); + out = transpose4({ inputs: { x: permutedOut }, attrs: { perm: undoPermutation }, backend: backend2 }); + backend2.disposeData(permutedX.dataId); + backend2.disposeData(permutedOut.dataId); + } + return out; + } + var cumprodConfig3 = { + kernelName: Cumprod, + backendName: "wasm", + setupFunc: setup12, + kernelFunc: cumprod4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cumsum.js + init_define_BUILD_VERSION(); + var wasmCumsum; + function setup13(backend2) { + wasmCumsum = backend2.wasm.cwrap(Cumsum, null, [ + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function cumsum4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + const xRank = x.shape.length; + util_exports.assert(x.dtype === "float32" || x.dtype === "int32", () => `cumsum does not support ${x.dtype} tensors in the WASM backend`); + const permutation = backend_util_exports.getAxesPermutation([axis], xRank); + let permutedX = x; + if (permutation !== null) { + permutedX = transpose4({ inputs: { x }, attrs: { perm: permutation }, backend: backend2 }); + } + const permutedAxis = backend_util_exports.getInnerMostAxes(1, xRank)[0]; + backend_util_exports.assertAxesAreInnerMostDims("cumsum", [permutedAxis], xRank); + const permutedOut = backend2.makeOutput(permutedX.shape, permutedX.dtype); + const finalDim = permutedX.shape[permutedAxis]; + const permutedXId = backend2.dataIdMap.get(permutedX.dataId).id; + const permutedOutId = backend2.dataIdMap.get(permutedOut.dataId).id; + wasmCumsum(permutedXId, exclusive ? 1 : 0, reverse5 ? 1 : 0, finalDim, permutedOutId, CppDType[x.dtype]); + let out = permutedOut; + if (permutation !== null) { + const undoPermutation = backend_util_exports.getUndoAxesPermutation(permutation); + out = transpose4({ inputs: { x: permutedOut }, attrs: { perm: undoPermutation }, backend: backend2 }); + backend2.disposeData(permutedX.dataId); + backend2.disposeData(permutedOut.dataId); + } + return out; + } + var cumsumConfig3 = { + kernelName: Cumsum, + backendName: "wasm", + setupFunc: setup13, + kernelFunc: cumsum4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/DepthToSpace.js + init_define_BUILD_VERSION(); + var wasmDepthToSpace; + function setup14(backend2) { + wasmDepthToSpace = backend2.wasm.cwrap(DepthToSpace, null, [ + "number", + "number", + "number", + "array", + "number", + "array", + "array", + "number", + "number" + ]); + } + function depthToSpace4(args) { + const { backend: backend2, inputs, attrs } = args; + const { x } = inputs; + const { blockSize, dataFormat } = attrs; + const batchSize = x.shape[0]; + const inputHeight = dataFormat === "NHWC" ? x.shape[1] : x.shape[2]; + const inputWidth = dataFormat === "NHWC" ? x.shape[2] : x.shape[3]; + const inputDepth = dataFormat === "NHWC" ? x.shape[3] : x.shape[1]; + const outputHeight = inputHeight * blockSize; + const outputWidth = inputWidth * blockSize; + const outputDepth = inputDepth / (blockSize * blockSize); + const outputShape = dataFormat === "NHWC" ? [batchSize, outputHeight, outputWidth, outputDepth] : [batchSize, outputDepth, outputHeight, outputWidth]; + const out = backend2.makeOutput(outputShape, "float32"); + const xData = backend2.dataIdMap.get(x.dataId); + const xId = xData.id; + const xStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(x.shape)).buffer); + const outputShapeBytes = new Uint8Array(new Int32Array(outputShape).buffer); + const outStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(outputShape)).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + const channelsLast = dataFormat === "NHWC" ? 1 : 0; + wasmDepthToSpace(xId, blockSize, channelsLast, xStridesBytes, x.shape.length - 1, outputShapeBytes, outStridesBytes, outputShape.length, outId); + return out; + } + var depthToSpaceConfig3 = { + kernelName: DepthToSpace, + backendName: "wasm", + setupFunc: setup14, + kernelFunc: depthToSpace4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/DepthwiseConv2dNative.js + init_define_BUILD_VERSION(); + var wasmDepthwiseConv2d; + function setup15(backend2) { + wasmDepthwiseConv2d = backend2.wasm.cwrap(DepthwiseConv2dNative, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function depthwiseConv2d4(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x, filter } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const filterId = backend2.dataIdMap.get(filter.dataId).id; + const { strides, dilations, pad: pad3, dimRoundingMode } = attrs; + const $dilations = dilations == null ? [1, 1] : dilations; + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad3, dimRoundingMode, true); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const inputChannels = convInfo.inChannels; + const outputChannels = convInfo.outChannels; + const isSamePad = convInfo.padInfo.type === "SAME" ? 1 : 0; + if (convInfo.dataFormat !== "channelsLast") { + throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${convInfo.dataFormat}'. Please use 'channelsLast'.`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmDepthwiseConv2d(xId, x.shape[0], x.shape[1], x.shape[2], filterId, filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, outId); + return out; + } + var depthwiseConv2dNativeConfig3 = { + kernelName: DepthwiseConv2dNative, + backendName: "wasm", + setupFunc: setup15, + kernelFunc: depthwiseConv2d4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Elu.js + init_define_BUILD_VERSION(); + var eluConfig3 = createUnaryKernelConfig(Elu); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Equal.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast2 = false; + var equalConfig3 = createBinaryKernelConfig(Equal, supportsFullBroadcast2, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Exp.js + init_define_BUILD_VERSION(); + var expConfig3 = createUnaryKernelConfig(Exp, "float32"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ExpandDims.js + init_define_BUILD_VERSION(); + function expandDims5(args) { + const { inputs, attrs, backend: backend2 } = args; + const { input: input2 } = inputs; + const { dim } = attrs; + const inputRank = input2.shape.length; + const newShape = input2.shape.slice(); + let $dim = dim; + if (dim < 0) { + util_exports.assert(-(inputRank + 1) <= dim, () => `Axis must be in the interval [${-(inputRank + 1)}, ${inputRank}]`); + $dim = inputRank + dim + 1; + } + newShape.splice($dim, 0, 1); + return reshape4({ inputs: { x: input2 }, backend: backend2, attrs: { shape: newShape } }); + } + var expandDimsConfig3 = { + kernelName: ExpandDims, + backendName: "wasm", + kernelFunc: expandDims5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Fill.js + init_define_BUILD_VERSION(); + function fill4(args) { + const { attrs: { shape, value, dtype }, backend: backend2 } = args; + const out = backend2.makeOutput(shape, dtype); + const outVals = backend2.typedArrayFromHeap(out); + outVals.fill(value); + return out; + } + var fillConfig3 = { + kernelName: Fill, + backendName: "wasm", + kernelFunc: fill4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FlipLeftRight.js + init_define_BUILD_VERSION(); + var wasmFlipLeftRight; + function setup16(backend2) { + wasmFlipLeftRight = backend2.wasm.cwrap(FlipLeftRight, null, [ + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function flipLeftRight2(args) { + const { inputs, backend: backend2 } = args; + const { image: image2 } = inputs; + const out = backend2.makeOutput(image2.shape, image2.dtype); + const imageId = backend2.dataIdMap.get(image2.dataId).id; + const outId = backend2.dataIdMap.get(out.dataId).id; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + wasmFlipLeftRight(imageId, batch, imageHeight, imageWidth, numChannels, outId); + return out; + } + var flipLeftRightConfig3 = { + kernelName: FlipLeftRight, + backendName: "wasm", + kernelFunc: flipLeftRight2, + setupFunc: setup16 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Floor.js + init_define_BUILD_VERSION(); + var floorConfig3 = createUnaryKernelConfig(Floor); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FloorDiv.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast3 = false; + var floorDivConfig3 = createBinaryKernelConfig(FloorDiv, supportsFullBroadcast3); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FusedBatchNorm.js + init_define_BUILD_VERSION(); + var wasmBatchNorm; + function setup17(backend2) { + wasmBatchNorm = backend2.wasm.cwrap(FusedBatchNorm, null, ["number", "number", "number", "number", "number", "number", "number"]); + } + function fusedBatchNorm(args) { + const { backend: backend2, inputs, attrs } = args; + const { varianceEpsilon } = attrs; + const { x, mean: mean4, variance, offset, scale: scale2 } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const meanId = backend2.dataIdMap.get(mean4.dataId).id; + const varianceId = backend2.dataIdMap.get(variance.dataId).id; + const offsetId = offset != null ? backend2.dataIdMap.get(offset.dataId).id : 0; + const scaleId = scale2 != null ? backend2.dataIdMap.get(scale2.dataId).id : 0; + const out = backend2.makeOutput(x.shape, x.dtype); + if (util_exports.sizeFromShape(x.shape) === 0) { + return out; + } + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmBatchNorm(xId, meanId, varianceId, offsetId, scaleId, varianceEpsilon, outId); + return out; + } + var fusedBatchNormConfig = { + kernelName: FusedBatchNorm, + backendName: "wasm", + setupFunc: setup17, + kernelFunc: fusedBatchNorm + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FusedConv2D.js + init_define_BUILD_VERSION(); + var wasmFusedConv2d; + function setup18(backend2) { + wasmFusedConv2d = backend2.wasm.cwrap(FusedConv2D, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function fusedConv2d2(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dilations, dataFormat, dimRoundingMode, activation, leakyreluAlpha } = attrs; + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode); + const fusedActivation = FusableActivation[activation]; + if (fusedActivation == null) { + throw new Error(`${activation} activation not yet supported for FusedConv2D in the wasm backend.`); + } + const xId = backend2.dataIdMap.get(x.dataId).id; + const filterId = backend2.dataIdMap.get(filter.dataId).id; + const outputChannels = convInfo.outChannels; + let biasId = 0; + if (bias != null) { + const biasData = backend2.dataIdMap.get(bias.dataId); + if (biasData.shape.length !== 1) { + throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${biasData.shape.length}.`); + } + if (biasData.shape[0] !== outputChannels) { + throw new Error(`FusedConv2D bias shape (${biasData.shape}) does not match the number of output channels (${outputChannels})`); + } + biasId = biasData.id; + } + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const inputChannels = convInfo.inChannels; + const isSamePad = convInfo.padInfo.type === "SAME" ? 1 : 0; + const batchSize = convInfo.batchSize; + const inHeight = convInfo.inHeight; + const inWidth = convInfo.inWidth; + if (dataFormat !== "NHWC") { + throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${dataFormat}'. Please use 'NHWC'.`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const preluActivationWeightsId = preluActivationWeights == null ? 0 : backend2.dataIdMap.get(preluActivationWeights.dataId).id; + wasmFusedConv2d(xId, batchSize, inHeight, inWidth, filterId, filterHeight, filterWidth, biasId, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, fusedActivation, preluActivationWeightsId, leakyreluAlpha || 0, outId); + return out; + } + var fusedConv2DConfig3 = { + kernelName: FusedConv2D, + backendName: "wasm", + setupFunc: setup18, + kernelFunc: fusedConv2d2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FusedDepthwiseConv2D.js + init_define_BUILD_VERSION(); + var wasmFusedDepthwiseConv2d; + function setup19(backend2) { + wasmFusedDepthwiseConv2d = backend2.wasm.cwrap(FusedDepthwiseConv2D, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function fusedDepthwiseConv2d(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dilations, dataFormat, dimRoundingMode, activation, leakyreluAlpha } = attrs; + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode, true); + const fusedActivation = FusableActivation[activation]; + if (fusedActivation == null) { + throw new Error(`${activation} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`); + } + const xId = backend2.dataIdMap.get(x.dataId).id; + const filterId = backend2.dataIdMap.get(filter.dataId).id; + const outputChannels = convInfo.outChannels; + let biasId = 0; + if (bias != null) { + const biasData = backend2.dataIdMap.get(bias.dataId); + if (biasData.shape.length !== 1) { + throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${biasData.shape.length}.`); + } + if (biasData.shape[0] !== outputChannels) { + throw new Error(`FusedDepthwiseConv2D bias shape (${biasData.shape}) does not match the number of output channels (${outputChannels})`); + } + biasId = biasData.id; + } + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const inputChannels = convInfo.inChannels; + const isSamePad = convInfo.padInfo.type === "SAME" ? 1 : 0; + const batchSize = convInfo.batchSize; + const inHeight = convInfo.inHeight; + const inWidth = convInfo.inWidth; + if (dataFormat !== "NHWC") { + throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${dataFormat}'. Please use 'NHWC'.`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const preluActivationWeightsId = preluActivationWeights == null ? 0 : backend2.dataIdMap.get(preluActivationWeights.dataId).id; + wasmFusedDepthwiseConv2d(xId, batchSize, inHeight, inWidth, filterId, filterHeight, filterWidth, biasId, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, fusedActivation, preluActivationWeightsId, leakyreluAlpha || 0, outId); + return out; + } + var fusedDepthwiseConv2DConfig3 = { + kernelName: FusedDepthwiseConv2D, + backendName: "wasm", + setupFunc: setup19, + kernelFunc: fusedDepthwiseConv2d + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/GatherNd.js + init_define_BUILD_VERSION(); + var wasmGatherNd; + function setup20(backend2) { + wasmGatherNd = backend2.wasm.cwrap(GatherNd, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "array", + "number" + ]); + } + function gatherNd3(args) { + const { backend: backend2, inputs } = args; + const { params, indices } = inputs; + const [resultShape, numSlices, sliceSize, strides] = gather_nd_util_exports.prepareAndValidate(params, indices); + const out = backend2.makeOutput(resultShape, params.dtype); + if (numSlices === 0) { + return out; + } + const indicesShape = indices.shape; + const sliceRank = indicesShape[indicesShape.length - 1]; + const xData = backend2.dataIdMap.get(params.dataId); + const xId = xData.id; + const indicesData = backend2.dataIdMap.get(indices.dataId); + const indicesId = indicesData.id; + const stridesBytes = new Uint8Array(new Int32Array(strides).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmGatherNd(xId, CppDType[params.dtype], indicesId, numSlices, sliceRank, sliceSize, stridesBytes, outId); + return out; + } + var gatherNdConfig3 = { + kernelName: GatherNd, + backendName: "wasm", + setupFunc: setup20, + kernelFunc: gatherNd3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/GatherV2.js + init_define_BUILD_VERSION(); + var wasmGather; + function setup21(backend2) { + wasmGather = backend2.wasm.cwrap("Gather", null, [ + "number", + "number", + "array", + "number", + "number", + "number", + "array", + "number" + ]); + } + function gatherV23(args) { + const { backend: backend2, inputs, attrs } = args; + const { x, indices } = inputs; + const { axis, batchDims } = attrs; + const parsedAxis = util_exports.parseAxisParam(axis, x.shape)[0]; + const indicesVals = backend2.readSync(indices.dataId); + const axisDim = x.shape[parsedAxis]; + for (let i = 0; i < indicesVals.length; ++i) { + const index = indicesVals[i]; + util_exports.assert(index <= axisDim - 1 && index >= 0, () => `GatherV2: the index value ${index} is not in [0, ${axisDim - 1}]`); + } + const shapeInfo = backend_util_exports.segment_util.collectGatherOpShapeInfo(x, indices, parsedAxis, batchDims); + const flattenX = reshape4({ + inputs: { x }, + attrs: { + shape: [ + shapeInfo.batchSize, + shapeInfo.outerSize, + shapeInfo.dimSize, + shapeInfo.sliceSize + ] + }, + backend: backend2 + }); + const indicesSize = util_exports.sizeFromShape(indices.shape); + const flattenIndex = reshape4({ + inputs: { x: indices }, + attrs: { shape: [shapeInfo.batchSize, indicesSize / shapeInfo.batchSize] }, + backend: backend2 + }); + const flattenOutputShape = [ + shapeInfo.batchSize, + shapeInfo.outerSize, + indicesSize / shapeInfo.batchSize, + shapeInfo.sliceSize + ]; + const out = backend2.makeOutput(flattenOutputShape, x.dtype); + if (util_exports.sizeFromShape(x.shape) === 0) { + return out; + } + const stridesSize = flattenX.shape.length - 1; + const xData = backend2.dataIdMap.get(flattenX.dataId); + const xId = xData.id; + const indicesData = backend2.dataIdMap.get(flattenIndex.dataId); + const indicesId = indicesData.id; + const outId = backend2.dataIdMap.get(out.dataId).id; + const xStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(flattenX.shape)).buffer); + const outStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(flattenOutputShape)).buffer); + wasmGather(xId, CppDType[x.dtype], xStridesBytes, stridesSize, indicesId, shapeInfo.batchSize, outStridesBytes, outId); + backend2.disposeData(flattenX.dataId); + backend2.disposeData(flattenIndex.dataId); + out.shape = shapeInfo.outputShape; + return out; + } + var gatherV2Config3 = { + kernelName: GatherV2, + backendName: "wasm", + setupFunc: setup21, + kernelFunc: gatherV23 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Greater.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast4 = false; + var greaterConfig3 = createBinaryKernelConfig(Greater, supportsFullBroadcast4, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/GreaterEqual.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast5 = false; + var greaterEqualConfig3 = createBinaryKernelConfig(GreaterEqual, supportsFullBroadcast5, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LeakyRelu.js + init_define_BUILD_VERSION(); + var wasmFunc3; + function setupFunc2(backend2) { + wasmFunc3 = backend2.wasm.cwrap(LeakyRelu, null, [ + "number", + "number", + "number", + "number" + ]); + } + function leakyRelu4(args) { + const { inputs: { x }, attrs: { alpha }, backend: backend2 } = args; + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(x.shape, "float32"); + if (util_exports.sizeFromShape(x.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmFunc3(xId, CppDType[x.dtype], alpha, outId); + } + return out; + } + var leakyReluConfig3 = { + kernelName: LeakyRelu, + backendName: "wasm", + setupFunc: setupFunc2, + kernelFunc: leakyRelu4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Less.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast6 = false; + var lessConfig3 = createBinaryKernelConfig(Less, supportsFullBroadcast6, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LessEqual.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast7 = false; + var lessEqualConfig3 = createBinaryKernelConfig(LessEqual, supportsFullBroadcast7, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Log.js + init_define_BUILD_VERSION(); + var logConfig3 = createUnaryKernelConfig(Log); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalAnd.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast8 = false; + var logicalAndConfig3 = createBinaryKernelConfig(LogicalAnd, supportsFullBroadcast8, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalNot.js + init_define_BUILD_VERSION(); + var logicalNotConfig3 = createUnaryKernelConfig(LogicalNot); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalOr.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast9 = false; + var logicalOrConfig3 = createBinaryKernelConfig(LogicalOr, supportsFullBroadcast9, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalXor.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast10 = false; + var logicalXorConfig = createBinaryKernelConfig(LogicalXor, supportsFullBroadcast10, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Max.js + init_define_BUILD_VERSION(); + var wasmMax; + function setup22(backend2) { + wasmMax = backend2.wasm.cwrap(Max, null, [ + "number", + "number", + "number", + "number" + ]); + } + function max5(args) { + const { backend: backend2, inputs, attrs } = args; + const { reductionIndices: axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + input2 = transposed; + inputId = transposedId; + } + const inputRank = input2.shape.length; + backend_util_exports.assertAxesAreInnerMostDims("max", axes, inputRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, x.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmMax(inputId, CppDType[x.dtype], reduceSize, outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var maxConfig3 = { + kernelName: Max, + backendName: "wasm", + setupFunc: setup22, + kernelFunc: max5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Maximum.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast11 = false; + var maximumConfig3 = createBinaryKernelConfig(Maximum, supportsFullBroadcast11); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/MaxPool.js + init_define_BUILD_VERSION(); + var wasmMaxPool; + function setup23(backend2) { + wasmMaxPool = backend2.wasm.cwrap(MaxPool, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function maxPool4(args) { + const { inputs, attrs, backend: backend2 } = args; + const x = inputs.x; + const xId = backend2.dataIdMap.get(x.dataId).id; + util_exports.assert(x.dtype === "float32", () => `Error in MaxPool: only float32 input is supported. Got ${x.dtype}.`); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const inputChannels = convInfo.inChannels; + const outputChannels = convInfo.outChannels; + if (convInfo.dataFormat !== "channelsLast") { + throw new Error(`wasm backend does not support dataFormat:'${convInfo.dataFormat}'. Please use 'channelsLast'.`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmMaxPool(xId, x.shape[0], x.shape[1], x.shape[2], filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, outId); + return out; + } + var maxPoolConfig3 = { + kernelName: MaxPool, + backendName: "wasm", + setupFunc: setup23, + kernelFunc: maxPool4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Mean.js + init_define_BUILD_VERSION(); + var wasmMean; + function setup24(backend2) { + wasmMean = backend2.wasm.cwrap(Mean, null, ["number, number, number"]); + } + function mean3(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + let reductionAxes = axes; + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + if (transposedId !== xId) { + input2 = transposed; + inputId = transposedId; + reductionAxes = backend_util_exports.getInnerMostAxes(reductionAxes.length, input2.shape.length); + } + } + backend_util_exports.assertAxesAreInnerMostDims("mean", reductionAxes, input2.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, reductionAxes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + let castedInput = input2; + if (input2.dtype !== "float32") { + castedInput = cast5({ backend: backend2, inputs: { x: input2 }, attrs: { dtype: "float32" } }); + inputId = backend2.dataIdMap.get(castedInput.dataId).id; + } + const out = backend2.makeOutput(outShape, "float32"); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmMean(inputId, reduceSize, outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + if (input2.dtype !== "float32") { + backend2.disposeData(castedInput.dataId); + } + return out; + } + var meanConfig3 = { + kernelName: Mean, + backendName: "wasm", + setupFunc: setup24, + kernelFunc: mean3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Min.js + init_define_BUILD_VERSION(); + var wasmMin; + function setup25(backend2) { + wasmMin = backend2.wasm.cwrap(Min, null, [ + "number", + "number", + "number", + "number" + ]); + } + function min5(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + if (transposedId !== xId) { + input2 = transposed; + inputId = transposedId; + } + } + const inputRank = input2.shape.length; + backend_util_exports.assertAxesAreInnerMostDims("min", axes, inputRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, input2.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmMin(inputId, CppDType[x.dtype], reduceSize, outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var minConfig3 = { + kernelName: Min, + backendName: "wasm", + setupFunc: setup25, + kernelFunc: min5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Minimum.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast12 = false; + var minimumConfig3 = createBinaryKernelConfig(Minimum, supportsFullBroadcast12); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/MirrorPad.js + init_define_BUILD_VERSION(); + var MirrorPaddingMode; + (function(MirrorPaddingMode2) { + MirrorPaddingMode2[MirrorPaddingMode2["reflect"] = 0] = "reflect"; + MirrorPaddingMode2[MirrorPaddingMode2["symmetric"] = 1] = "symmetric"; + })(MirrorPaddingMode || (MirrorPaddingMode = {})); + var wasmMirrorPad; + function setup26(backend2) { + wasmMirrorPad = backend2.wasm.cwrap(MirrorPad, null, [ + "number", + "array", + "number", + "number", + "array", + "array", + "number", + "number" + ]); + } + function mirrorPad3(args) { + const { inputs: { x }, backend: backend2, attrs: { paddings, mode } } = args; + const outShape = paddings.map((p2, i) => p2[0] + x.shape[i] + p2[1]); + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(outShape, x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + const prePaddingsFlat = paddings.map((padTuple) => padTuple[0]); + const postPaddingsFlat = paddings.map((padTuple) => padTuple[1]); + const prePaddingsBytes = new Uint8Array(new Int32Array(prePaddingsFlat).buffer); + const postPaddingsBytes = new Uint8Array(new Int32Array(postPaddingsFlat).buffer); + wasmMirrorPad(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], prePaddingsBytes, postPaddingsBytes, MirrorPaddingMode[mode], outId); + return out; + } + var mirrorPadConfig3 = { + kernelName: MirrorPad, + backendName: "wasm", + kernelFunc: mirrorPad3, + setupFunc: setup26 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Multiply.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast13 = true; + var multiplyConfig3 = createBinaryKernelConfig(Multiply, supportsFullBroadcast13); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Neg.js + init_define_BUILD_VERSION(); + var negConfig3 = createUnaryKernelConfig(Neg); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppressionV3.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppression_util.js + init_define_BUILD_VERSION(); + function parseResultStruct(backend2, resOffset) { + const result = new Int32Array(backend2.wasm.HEAPU8.buffer, resOffset, 4); + const pSelectedIndices = result[0]; + const selectedSize = result[1]; + const pSelectedScores = result[2]; + const pValidOutputs = result[3]; + backend2.wasm._free(resOffset); + return { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppressionV3.js + var wasmFunc4; + function setup27(backend2) { + wasmFunc4 = backend2.wasm.cwrap( + NonMaxSuppressionV3, + "number", + [ + "number", + "number", + "number", + "number", + "number" + ] + ); + } + function kernelFunc(args) { + const { backend: backend2, inputs, attrs } = args; + const { iouThreshold, maxOutputSize, scoreThreshold } = attrs; + const { boxes, scores } = inputs; + const boxesId = backend2.dataIdMap.get(boxes.dataId).id; + const scoresId = backend2.dataIdMap.get(scores.dataId).id; + const resOffset = wasmFunc4(boxesId, scoresId, maxOutputSize, iouThreshold, scoreThreshold); + const { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs } = parseResultStruct(backend2, resOffset); + backend2.wasm._free(pSelectedScores); + backend2.wasm._free(pValidOutputs); + const selectedIndicesTensor = backend2.makeOutput([selectedSize], "int32", pSelectedIndices); + return selectedIndicesTensor; + } + var nonMaxSuppressionV3Config3 = { + kernelName: NonMaxSuppressionV3, + backendName: "wasm", + setupFunc: setup27, + kernelFunc + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppressionV4.js + init_define_BUILD_VERSION(); + var wasmFunc5; + function setup28(backend2) { + wasmFunc5 = backend2.wasm.cwrap( + NonMaxSuppressionV4, + "number", + [ + "number", + "number", + "number", + "number", + "number", + "bool" + ] + ); + } + function nonMaxSuppressionV43(args) { + const { backend: backend2, inputs, attrs } = args; + const { iouThreshold, maxOutputSize, scoreThreshold, padToMaxOutputSize } = attrs; + const { boxes, scores } = inputs; + const boxesId = backend2.dataIdMap.get(boxes.dataId).id; + const scoresId = backend2.dataIdMap.get(scores.dataId).id; + const resOffset = wasmFunc5(boxesId, scoresId, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize); + const { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs } = parseResultStruct(backend2, resOffset); + backend2.wasm._free(pSelectedScores); + const selectedIndicesTensor = backend2.makeOutput([selectedSize], "int32", pSelectedIndices); + const validOutputsTensor = backend2.makeOutput([], "int32", pValidOutputs); + return [selectedIndicesTensor, validOutputsTensor]; + } + var nonMaxSuppressionV4Config3 = { + kernelName: NonMaxSuppressionV4, + backendName: "wasm", + setupFunc: setup28, + kernelFunc: nonMaxSuppressionV43 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppressionV5.js + init_define_BUILD_VERSION(); + var wasmFunc6; + function setup29(backend2) { + wasmFunc6 = backend2.wasm.cwrap( + NonMaxSuppressionV5, + "number", + [ + "number", + "number", + "number", + "number", + "number", + "number" + ] + ); + } + function kernelFunc2(args) { + const { backend: backend2, inputs, attrs } = args; + const { iouThreshold, maxOutputSize, scoreThreshold, softNmsSigma } = attrs; + const { boxes, scores } = inputs; + const boxesId = backend2.dataIdMap.get(boxes.dataId).id; + const scoresId = backend2.dataIdMap.get(scores.dataId).id; + const resOffset = wasmFunc6(boxesId, scoresId, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma); + const { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs } = parseResultStruct(backend2, resOffset); + backend2.wasm._free(pValidOutputs); + const selectedIndicesTensor = backend2.makeOutput([selectedSize], "int32", pSelectedIndices); + const selectedScoresTensor = backend2.makeOutput([selectedSize], "float32", pSelectedScores); + return [selectedIndicesTensor, selectedScoresTensor]; + } + var nonMaxSuppressionV5Config3 = { + kernelName: NonMaxSuppressionV5, + backendName: "wasm", + setupFunc: setup29, + kernelFunc: kernelFunc2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NotEqual.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast14 = false; + var notEqualConfig3 = createBinaryKernelConfig(NotEqual, supportsFullBroadcast14, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/OneHot.js + init_define_BUILD_VERSION(); + var wasmOneHot; + function setup30(backend2) { + wasmOneHot = backend2.wasm.cwrap(OneHot, null, [ + "number", + "number", + "number", + "number", + "number" + ]); + } + function oneHot4(args) { + const { inputs, backend: backend2, attrs } = args; + const { indices } = inputs; + const { depth, onValue, offValue } = attrs; + const out = backend2.makeOutput([...indices.shape, depth], "int32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const indicesData = backend2.dataIdMap.get(indices.dataId); + const indicesId = indicesData.id; + wasmOneHot(indicesId, depth, onValue, offValue, outId); + return out; + } + var oneHotConfig3 = { + kernelName: OneHot, + backendName: "wasm", + setupFunc: setup30, + kernelFunc: oneHot4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/OnesLike.js + init_define_BUILD_VERSION(); + function onesLike4(args) { + const { inputs: { x }, backend: backend2 } = args; + const out = backend2.makeOutput(x.shape, x.dtype); + const outVals = backend2.typedArrayFromHeap(out); + outVals.fill(1); + return out; + } + var onesLikeConfig3 = { + kernelName: OnesLike, + backendName: "wasm", + kernelFunc: onesLike4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Pack.js + init_define_BUILD_VERSION(); + function pack3(args) { + const { inputs, backend: backend2, attrs } = args; + const { axis } = attrs; + if (inputs.length === 1) { + return expandDims5({ inputs: { input: inputs[0] }, backend: backend2, attrs: { dim: axis } }); + } + const shape = inputs[0].shape; + const dtype = inputs[0].dtype; + inputs.forEach((t) => { + util_exports.assertShapesMatch(shape, t.shape, "All tensors passed to stack must have matching shapes"); + util_exports.assert(dtype === t.dtype, () => "All tensors passed to stack must have matching dtypes"); + }); + const intermediateTensorInfos = []; + const expandedTensors = inputs.map((t) => { + const expandedT = expandDims5({ inputs: { input: t }, backend: backend2, attrs: { dim: axis } }); + intermediateTensorInfos.push(expandedT); + return expandedT; + }); + const result = concat4({ inputs: expandedTensors, backend: backend2, attrs: { axis } }); + intermediateTensorInfos.forEach((t) => backend2.disposeData(t.dataId)); + return result; + } + var packConfig3 = { + kernelName: Pack, + backendName: "wasm", + kernelFunc: pack3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/PadV2.js + init_define_BUILD_VERSION(); + var wasmPadV2; + function setup31(backend2) { + wasmPadV2 = backend2.wasm.cwrap(PadV2, null, [ + "number", + "array", + "number", + "number", + "array", + "array", + "number", + "number" + ]); + } + function pad2(args) { + const { inputs: { x }, backend: backend2, attrs: { paddings, constantValue } } = args; + const outShape = paddings.map((p2, i) => p2[0] + x.shape[i] + p2[1]); + if (util_exports.sizeFromShape(x.shape) === 0) { + return fill4({ + backend: backend2, + attrs: { shape: outShape, value: constantValue, dtype: x.dtype } + }); + } + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(outShape, x.dtype); + const outTensorData = backend2.dataIdMap.get(out.dataId); + const outId = outTensorData.id; + const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + const prePaddingsFlat = paddings.map((padTuple) => padTuple[0]); + const postPaddingsFlat = paddings.map((padTuple) => padTuple[1]); + const prePaddingsBytes = new Uint8Array(new Int32Array(prePaddingsFlat).buffer); + const postPaddingsBytes = new Uint8Array(new Int32Array(postPaddingsFlat).buffer); + wasmPadV2(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], prePaddingsBytes, postPaddingsBytes, constantValue, outId); + return out; + } + var padV2Config3 = { + kernelName: PadV2, + backendName: "wasm", + kernelFunc: pad2, + setupFunc: setup31 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Pow.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast15 = false; + var powConfig3 = createBinaryKernelConfig(Pow, supportsFullBroadcast15); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Prelu.js + init_define_BUILD_VERSION(); + var wasmPrelu; + function setup32(backend2) { + wasmPrelu = backend2.wasm.cwrap(Prelu, null, [ + "number", + "number", + "number" + ]); + } + function prelu4(args) { + const { inputs, backend: backend2 } = args; + const { x, alpha } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const weightsId = backend2.dataIdMap.get(alpha.dataId).id; + let inputId = xId; + const input2 = x; + let castedInput = input2; + if (input2.dtype !== "float32") { + castedInput = cast5({ backend: backend2, inputs: { x }, attrs: { dtype: "float32" } }); + inputId = backend2.dataIdMap.get(castedInput.dataId).id; + } + const out = backend2.makeOutput(x.shape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmPrelu(inputId, weightsId, outId); + if (input2.dtype !== "float32") { + backend2.disposeData(castedInput.dataId); + } + return out; + } + var preluConfig3 = { + kernelName: Prelu, + backendName: "wasm", + setupFunc: setup32, + kernelFunc: prelu4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Prod.js + init_define_BUILD_VERSION(); + var wasmProd; + function setup33(backend2) { + wasmProd = backend2.wasm.cwrap(Prod, null, [ + "number", + "number", + "number", + "number" + ]); + } + function prod4(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + let reductionAxes = axes; + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + if (transposedId !== xId) { + input2 = transposed; + inputId = transposedId; + reductionAxes = backend_util_exports.getInnerMostAxes(reductionAxes.length, input2.shape.length); + } + } + backend_util_exports.assertAxesAreInnerMostDims("prod", reductionAxes, input2.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, reductionAxes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, input2.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmProd(inputId, reduceSize, CppDType[out.dtype], outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var prodConfig3 = { + kernelName: Prod, + backendName: "wasm", + setupFunc: setup33, + kernelFunc: prod4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Range.js + init_define_BUILD_VERSION(); + var range5 = (args) => { + const { backend: backend2, attrs } = args; + const { start, stop, step: step5, dtype } = attrs; + const values = rangeImpl(start, stop, step5, dtype); + const out = backend2.makeOutput([values.length], dtype); + const outVals = backend2.typedArrayFromHeap(out); + outVals.set(values); + return out; + }; + var rangeConfig3 = { + kernelName: Range, + backendName: "wasm", + kernelFunc: range5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/RealDiv.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast16 = true; + var realDivConfig3 = createBinaryKernelConfig(RealDiv, supportsFullBroadcast16); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Relu.js + init_define_BUILD_VERSION(); + var reluConfig3 = createUnaryKernelConfig(Relu); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Relu6.js + init_define_BUILD_VERSION(); + var relu6Config3 = createUnaryKernelConfig(Relu6); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ResizeBilinear.js + init_define_BUILD_VERSION(); + var wasmResizeBilinear; + function setup34(backend2) { + wasmResizeBilinear = backend2.wasm.cwrap(ResizeBilinear, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function resizeBilinear4(args) { + const { backend: backend2, inputs, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + const [newHeight, newWidth] = size; + const [batch, oldHeight, oldWidth, numChannels] = images.shape; + const outShape = [batch, newHeight, newWidth, numChannels]; + let xData = backend2.dataIdMap.get(images.dataId); + let castedData; + if (xData.dtype !== "float32") { + castedData = cast5({ backend: backend2, inputs: { x: images }, attrs: { dtype: "float32" } }); + xData = backend2.dataIdMap.get(castedData.dataId); + } + const xId = xData.id; + const out = backend2.makeOutput(outShape, "float32"); + if (util_exports.sizeFromShape(images.shape) === 0) { + return out; + } + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmResizeBilinear(xId, batch, oldHeight, oldWidth, numChannels, newHeight, newWidth, alignCorners ? 1 : 0, halfPixelCenters ? 1 : 0, outId); + if (castedData != null) { + backend2.disposeData(castedData.dataId); + } + return out; + } + var resizeBilinearConfig3 = { + kernelName: ResizeBilinear, + backendName: "wasm", + setupFunc: setup34, + kernelFunc: resizeBilinear4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ResizeNearestNeighbor.js + init_define_BUILD_VERSION(); + var wasmResizeNearestNeighbor; + function setup35(backend2) { + wasmResizeNearestNeighbor = backend2.wasm.cwrap(ResizeNearestNeighbor, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function resizeNearestNeighbor4(args) { + const { backend: backend2, inputs, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + const [newHeight, newWidth] = size; + const [batch, oldHeight, oldWidth, numChannels] = images.shape; + const outShape = [batch, newHeight, newWidth, numChannels]; + const out = backend2.makeOutput(outShape, "float32"); + if (util_exports.sizeFromShape(images.shape) === 0) { + return out; + } + let xData = backend2.dataIdMap.get(images.dataId); + let castedData; + if (xData.dtype !== "float32") { + castedData = cast5({ + backend: backend2, + inputs: { x: images }, + attrs: { dtype: "float32" } + }); + xData = backend2.dataIdMap.get(castedData.dataId); + } + const xId = xData.id; + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmResizeNearestNeighbor(xId, batch, oldHeight, oldWidth, numChannels, newHeight, newWidth, alignCorners ? 1 : 0, halfPixelCenters ? 1 : 0, outId); + if (castedData != null) { + backend2.disposeData(castedData.dataId); + } + return out; + } + var resizeNearestNeighborConfig3 = { + kernelName: ResizeNearestNeighbor, + backendName: "wasm", + setupFunc: setup35, + kernelFunc: resizeNearestNeighbor4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Reverse.js + init_define_BUILD_VERSION(); + var wasmReverse; + function setup36(backend2) { + wasmReverse = backend2.wasm.cwrap(Reverse, null, [ + "number", + "array", + "number", + "array", + "number", + "number" + ]); + } + function reverse4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { dims } = attrs; + const axes = util_exports.parseAxisParam(dims, x.shape); + if (x.shape.length === 0) { + return identity3({ inputs: { x }, backend: backend2 }); + } + const out = backend2.makeOutput(x.shape, x.dtype); + const xId = backend2.dataIdMap.get(x.dataId).id; + const outId = backend2.dataIdMap.get(out.dataId).id; + const axesBytes = new Uint8Array(new Int32Array(axes).buffer); + const outShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + wasmReverse(xId, axesBytes, axes.length, outShapeBytes, x.shape.length, outId); + const reshaped = reshape4({ inputs: { x: out }, attrs: { shape: x.shape }, backend: backend2 }); + backend2.disposeData(out.dataId); + return reshaped; + } + var reverseConfig3 = { + kernelName: Reverse, + backendName: "wasm", + kernelFunc: reverse4, + setupFunc: setup36 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/RotateWithOffset.js + init_define_BUILD_VERSION(); + var wasmRotate; + function setup37(backend2) { + wasmRotate = backend2.wasm.cwrap(RotateWithOffset, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "array", + "number", + "number" + ]); + } + function rotateWithOffset2(args) { + const { inputs, backend: backend2, attrs } = args; + const { image: image2 } = inputs; + const { radians, fillValue, center } = attrs; + const out = backend2.makeOutput(image2.shape, image2.dtype); + const imageId = backend2.dataIdMap.get(image2.dataId).id; + const outId = backend2.dataIdMap.get(out.dataId).id; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const [centerX, centerY] = backend_util_exports.getImageCenter(center, imageHeight, imageWidth); + const fillIsBlack = fillValue === 0; + const fullOpacityValue = 255; + const fillValues2 = typeof fillValue === "number" ? [fillValue, fillValue, fillValue, fillIsBlack ? 0 : fullOpacityValue] : [...fillValue, fullOpacityValue]; + const fillBytes = new Uint8Array(new Int32Array(fillValues2).buffer); + wasmRotate(imageId, batch, imageHeight, imageWidth, numChannels, radians, centerX, centerY, fillBytes, fillValues2.length, outId); + return out; + } + var rotateWithOffsetConfig3 = { + kernelName: RotateWithOffset, + backendName: "wasm", + kernelFunc: rotateWithOffset2, + setupFunc: setup37 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Round.js + init_define_BUILD_VERSION(); + var roundConfig3 = createUnaryKernelConfig(Round); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Rsqrt.js + init_define_BUILD_VERSION(); + var rsqrtConfig3 = createUnaryKernelConfig(Rsqrt); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ScatterNd.js + init_define_BUILD_VERSION(); + var wasmScatterNd; + function setup38(backend2) { + wasmScatterNd = backend2.wasm.cwrap(ScatterNd, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "array", + "number", + "number" + ]); + } + function scatterNd3(args) { + const { backend: backend2, inputs, attrs } = args; + const { indices, updates } = inputs; + const { shape } = attrs; + const out = backend2.makeOutput(shape, updates.dtype); + if (util_exports.sizeFromShape(shape) === 0) { + return out; + } + const { sliceRank, numUpdates, sliceSize, strides, outputSize } = scatter_nd_util_exports.calculateShapes(updates, indices, shape); + const indicesData = backend2.dataIdMap.get(indices.dataId); + const indicesId = indicesData.id; + const updatesData = backend2.dataIdMap.get(updates.dataId); + const updatesId = updatesData.id; + const stridesBytes = new Uint8Array(new Int32Array(strides).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmScatterNd(indicesId, updatesId, CppDType[updates.dtype], sliceRank, numUpdates, sliceSize, stridesBytes, outputSize, outId); + return out; + } + var scatterNdConfig3 = { + kernelName: ScatterNd, + backendName: "wasm", + setupFunc: setup38, + kernelFunc: scatterNd3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Select.js + init_define_BUILD_VERSION(); + var wasmSelect; + function setup39(backend2) { + wasmSelect = backend2.wasm.cwrap("SelectV2", null, [ + "number", + "number", + "number", + "number", + "number" + ]); + } + function select4(args) { + const { inputs, backend: backend2 } = args; + const { condition, t, e } = inputs; + const conditionId = backend2.dataIdMap.get(condition.dataId).id; + const tId = backend2.dataIdMap.get(t.dataId).id; + const eId = backend2.dataIdMap.get(e.dataId).id; + const out = backend2.makeOutput(t.shape, t.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const cRank = condition.shape.length; + const tRank = t.shape.length; + const offset = cRank === 0 || cRank > 1 || tRank === 1 ? 1 : util_exports.sizeFromShape(t.shape.slice(1)); + wasmSelect(conditionId, tId, eId, offset, outId); + return out; + } + var selectConfig3 = { + kernelName: Select, + backendName: "wasm", + kernelFunc: select4, + setupFunc: setup39 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sigmoid.js + init_define_BUILD_VERSION(); + var wasmFunc7; + function setup40(backend2) { + wasmFunc7 = backend2.wasm.cwrap(Sigmoid, null, ["number", "number"]); + } + function sigmoid4(args) { + const { backend: backend2, inputs: { x } } = args; + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(x.shape, x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + if (util_exports.sizeFromShape(out.shape) === 0) { + return out; + } + wasmFunc7(xId, outId); + return out; + } + var sigmoidConfig3 = { + kernelName: "Sigmoid", + backendName: "wasm", + setupFunc: setup40, + kernelFunc: sigmoid4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sin.js + init_define_BUILD_VERSION(); + var sinConfig3 = createUnaryKernelConfig(Sin); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Softmax.js + init_define_BUILD_VERSION(); + var wasmFunc8; + function setup41(backend2) { + wasmFunc8 = backend2.wasm.cwrap(Softmax, null, [ + "number", + "number", + "number", + "number" + ]); + } + function softmax4(args) { + const { backend: backend2, inputs: { logits }, attrs: { dim } } = args; + const xId = backend2.dataIdMap.get(logits.dataId).id; + const out = backend2.makeOutput(logits.shape, logits.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const channels = logits.shape[dim]; + const batch = util_exports.sizeFromShape(logits.shape) / channels; + if (util_exports.sizeFromShape(out.shape) === 0) { + return out; + } + wasmFunc8(xId, outId, channels, batch); + return out; + } + var softmaxConfig3 = { + kernelName: Softmax, + backendName: "wasm", + setupFunc: setup41, + kernelFunc: softmax4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SpaceToBatchND.js + init_define_BUILD_VERSION(); + function spaceToBatchND4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, paddings } = attrs; + const prod5 = util_exports.sizeFromShape(blockShape); + const completePaddings = [[0, 0]]; + completePaddings.push(...paddings); + for (let i = 1 + blockShape.length; i < x.shape.length; ++i) { + completePaddings.push([0, 0]); + } + const paddedX = padV2Config3.kernelFunc({ + inputs: { x }, + backend: backend2, + attrs: { paddings: completePaddings, constantValue: 0 } + }); + const reshapedPaddedShape = backend_util_exports.getReshaped(paddedX.shape, blockShape, prod5, false); + const permutedReshapedPaddedPermutation = backend_util_exports.getPermuted(reshapedPaddedShape.length, blockShape.length, false); + const flattenShape = backend_util_exports.getReshapedPermuted(paddedX.shape, blockShape, prod5, false); + const reshapeInputs = { x: paddedX }; + const reshapeAttrs = { shape: reshapedPaddedShape }; + const paddedXReshaped = reshape4({ inputs: reshapeInputs, backend: backend2, attrs: reshapeAttrs }); + const transposeInputs = { x: paddedXReshaped }; + const transposeAttrs = { perm: permutedReshapedPaddedPermutation }; + const paddedXT = transpose4({ inputs: transposeInputs, backend: backend2, attrs: transposeAttrs }); + const resultReshapeInputs = { x: paddedXT }; + const resultReshapeAttrs = { shape: flattenShape }; + const result = reshape4({ inputs: resultReshapeInputs, backend: backend2, attrs: resultReshapeAttrs }); + backend2.disposeData(paddedX.dataId); + backend2.disposeData(paddedXReshaped.dataId); + backend2.disposeData(paddedXT.dataId); + return result; + } + var spaceToBatchNDConfig3 = { + kernelName: SpaceToBatchND, + backendName: "wasm", + kernelFunc: spaceToBatchND4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseFillEmptyRows.js + init_define_BUILD_VERSION(); + var wasmSparseFillEmptyRows; + function setup42(backend2) { + wasmSparseFillEmptyRows = backend2.wasm.cwrap("SparseFillEmptyRows", "number", [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function sparseFillEmptyRows3(args) { + const { backend: backend2, inputs } = args; + const { indices, values, denseShape, defaultValue } = inputs; + const indicesCount = indices.shape[0]; + const rank = indices.shape[1]; + const denseRows = backend2.readSync(denseShape.dataId)[0]; + const maxOutputIndicesShape = [indicesCount + denseRows, rank]; + const indicesId = backend2.dataIdMap.get(indices.dataId).id; + const valuesId = backend2.dataIdMap.get(values.dataId).id; + const defaultValueId = backend2.dataIdMap.get(defaultValue.dataId).id; + const outputIndices = backend2.makeOutput(maxOutputIndicesShape, indices.dtype); + const outputIndicesId = backend2.dataIdMap.get(outputIndices.dataId).id; + const outputValues = backend2.makeOutput(maxOutputIndicesShape.slice(0, 1), values.dtype); + const outputValuesId = backend2.dataIdMap.get(outputValues.dataId).id; + const emptyRowIndicator = backend2.makeOutput([denseRows], "bool"); + const emptyRowIndicatorId = backend2.dataIdMap.get(emptyRowIndicator.dataId).id; + const reverseIndexMap = backend2.makeOutput([indicesCount], indices.dtype); + const reverseIndexMapId = backend2.dataIdMap.get(reverseIndexMap.dataId).id; + const exceptionValues = backend2.makeOutput([4], "int32"); + const exceptionValuesId = backend2.dataIdMap.get(exceptionValues.dataId).id; + const outputRows = wasmSparseFillEmptyRows(indicesId, valuesId, CppDType[values.dtype], indicesCount, denseRows, rank, defaultValueId, outputIndicesId, outputValuesId, emptyRowIndicatorId, reverseIndexMapId, exceptionValuesId); + const exceptionValuesArray = backend2.readSync(exceptionValues.dataId); + let exceptionMessage; + switch (exceptionValuesArray[0]) { + case 1: { + exceptionMessage = backend_util_exports.getSparseFillEmptyRowsIndicesDenseShapeMismatch(exceptionValuesArray[1]); + break; + } + case 2: { + exceptionMessage = backend_util_exports.getSparseFillEmptyRowsNegativeIndexErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]); + break; + } + case 3: + exceptionMessage = backend_util_exports.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2], exceptionValuesArray[3]); + break; + default: + exceptionMessage = ""; + } + backend2.disposeData(exceptionValues.dataId); + if (exceptionMessage) { + backend2.disposeData(outputIndices.dataId); + backend2.disposeData(outputValues.dataId); + backend2.disposeData(emptyRowIndicator.dataId); + backend2.disposeData(reverseIndexMap.dataId); + throw new Error(exceptionMessage); + } + let resizedIndices = outputIndices; + let resizedValues = outputValues; + if (outputRows !== maxOutputIndicesShape[0]) { + resizedIndices = slice4({ + inputs: { x: outputIndices }, + attrs: { begin: 0, size: [outputRows, rank] }, + backend: backend2 + }); + resizedValues = slice4({ + inputs: { x: outputValues }, + attrs: { begin: 0, size: outputRows }, + backend: backend2 + }); + backend2.disposeData(outputIndices.dataId); + backend2.disposeData(outputValues.dataId); + } + return [resizedIndices, resizedValues, emptyRowIndicator, reverseIndexMap]; + } + var sparseFillEmptyRowsConfig3 = { + kernelName: SparseFillEmptyRows, + backendName: "wasm", + setupFunc: setup42, + kernelFunc: sparseFillEmptyRows3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseReshape.js + init_define_BUILD_VERSION(); + var wasmSparseReshape; + function setup43(backend2) { + wasmSparseReshape = backend2.wasm.cwrap(SparseReshape, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function sparseReshape3(args) { + const { backend: backend2, inputs } = args; + const { inputIndices, inputShape, newShape } = inputs; + if (inputIndices.shape.length !== 2) { + throw new Error(`Input indices should be a matrix but received shape + ${inputIndices.shape}`); + } + if (inputShape.shape.length !== 1) { + throw new Error(`Input shape should be a vector but received shape + ${inputShape.shape}`); + } + if (newShape.shape.length !== 1) { + throw new Error(`Target shape should be a vector but received shape ${newShape.shape}`); + } + const inputIndicesId = backend2.dataIdMap.get(inputIndices.dataId).id; + const inputShapeId = backend2.dataIdMap.get(inputShape.dataId).id; + const newShapeId = backend2.dataIdMap.get(newShape.dataId).id; + const nnz = inputIndices.shape[0]; + const outputRank = util_exports.sizeFromShape(newShape.shape); + const newIndices = backend2.makeOutput([nnz, outputRank], inputIndices.dtype); + const newIndicesId = backend2.dataIdMap.get(newIndices.dataId).id; + const outputShape = backend2.makeOutput([outputRank], newShape.dtype); + const outputShapeId = backend2.dataIdMap.get(outputShape.dataId).id; + const exceptionValues = backend2.makeOutput([3], "int32"); + const exceptionValuesId = backend2.dataIdMap.get(exceptionValues.dataId).id; + wasmSparseReshape(inputIndicesId, inputShapeId, newShapeId, nnz, newIndicesId, outputShapeId, exceptionValuesId); + const exceptionValuesArray = backend2.readSync(exceptionValues.dataId); + let exceptionMessage; + switch (exceptionValuesArray[0]) { + case 0: { + exceptionMessage = backend_util_exports.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]); + break; + } + case 1: { + exceptionMessage = backend_util_exports.getSparseReshapeNegativeOutputDimErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]); + break; + } + case 2: + exceptionMessage = backend_util_exports.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage(); + break; + case 3: { + const inputShapeValues = Array.from(backend2.readSync(inputShape.dataId)), outputShapeValues = Array.from(backend2.readSync(outputShape.dataId)); + exceptionMessage = backend_util_exports.getSparseReshapeInputOutputMultipleErrorMessage(inputShapeValues, outputShapeValues); + break; + } + case 4: { + const inputShapeValues = Array.from(backend2.readSync(inputShape.dataId)), outputShapeValues = Array.from(backend2.readSync(outputShape.dataId)); + exceptionMessage = backend_util_exports.getSparseReshapeInputOutputMismatchErrorMessage(inputShapeValues, outputShapeValues); + break; + } + default: + exceptionMessage = ""; + } + backend2.disposeData(exceptionValues.dataId); + if (exceptionMessage) { + backend2.disposeData(newIndices.dataId); + backend2.disposeData(outputShape.dataId); + throw new Error(exceptionMessage); + } + return [newIndices, outputShape]; + } + var sparseReshapeConfig3 = { + kernelName: SparseReshape, + backendName: "wasm", + setupFunc: setup43, + kernelFunc: sparseReshape3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseSegmentMean.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseSegmentReduction.js + init_define_BUILD_VERSION(); + var wasmSparseSegmentReduction; + function setup44(backend2) { + wasmSparseSegmentReduction = backend2.wasm.cwrap("SparseSegmentReduction", null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function sparseSegmentReduction(args, isMean) { + const { backend: backend2, inputs } = args; + const { data, indices, segmentIds } = inputs; + const numIndices = indices.shape[0]; + const segmentIdsBack = backend2.readSync(segmentIds.dataId, numIndices - 1, numIndices)[0]; + const lastSegmentIdPlusOne = numIndices > 0 ? segmentIdsBack + 1 : 0; + const outputRows = lastSegmentIdPlusOne; + if (outputRows < 0) { + throw new Error(backend_util_exports.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + } + const outputShape = data.shape.slice(); + outputShape[0] = outputRows; + const dataId = backend2.dataIdMap.get(data.dataId).id; + const indicesId = backend2.dataIdMap.get(indices.dataId).id; + const segmentIdsId = backend2.dataIdMap.get(segmentIds.dataId).id; + const output = backend2.makeOutput(outputShape, data.dtype); + const outputId = backend2.dataIdMap.get(output.dataId).id; + const exceptionValues = backend2.makeOutput([4], "int32"); + const exceptionValuesId = backend2.dataIdMap.get(exceptionValues.dataId).id; + wasmSparseSegmentReduction(dataId, CppDType[data.dtype], data.shape[0], indicesId, segmentIdsId, outputId, exceptionValuesId, isMean, 0); + const exceptionValuesArray = backend2.readSync(exceptionValues.dataId); + let exceptionMessage; + switch (exceptionValuesArray[0]) { + case 0: { + exceptionMessage = backend_util_exports.getSparseSegmentReductionNegativeSegmentIdsErrorMessage(); + break; + } + case 1: { + exceptionMessage = backend_util_exports.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage(); + break; + } + case 2: + exceptionMessage = backend_util_exports.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]); + break; + case 3: + exceptionMessage = backend_util_exports.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2], exceptionValuesArray[3]); + break; + default: + exceptionMessage = ""; + } + backend2.disposeData(exceptionValues.dataId); + if (exceptionMessage) { + backend2.disposeData(output.dataId); + throw new Error(exceptionMessage); + } + return output; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseSegmentMean.js + function sparseSegmentMean3(args) { + return sparseSegmentReduction(args, true); + } + var sparseSegmentMeanConfig3 = { + kernelName: SparseSegmentMean, + backendName: "wasm", + setupFunc: setup44, + kernelFunc: sparseSegmentMean3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseSegmentSum.js + init_define_BUILD_VERSION(); + function sparseSegmentSum3(args) { + return sparseSegmentReduction(args, false); + } + var sparseSegmentSumConfig3 = { + kernelName: SparseSegmentSum, + backendName: "wasm", + setupFunc: setup44, + kernelFunc: sparseSegmentSum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SplitV.js + init_define_BUILD_VERSION(); + function splitV3(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x } = inputs; + const { numOrSizeSplits, axis } = attrs; + const $axis = util_exports.parseAxisParam(axis, x.shape)[0]; + const splitSizes = backend_util_exports.prepareSplitSize(x, numOrSizeSplits, $axis); + const begin = new Array(x.shape.length).fill(0); + const size = x.shape.slice(); + return splitSizes.map((s) => { + const xSliceSize = [...size]; + xSliceSize[$axis] = s; + const xSlice = slice4({ inputs: { x }, attrs: { begin, size: xSliceSize }, backend: backend2 }); + begin[$axis] += s; + return xSlice; + }); + } + var splitVConfig3 = { + kernelName: SplitV, + backendName: "wasm", + kernelFunc: splitV3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sqrt.js + init_define_BUILD_VERSION(); + var sqrtConfig3 = createUnaryKernelConfig(Sqrt); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Square.js + init_define_BUILD_VERSION(); + var squareConfig3 = createUnaryKernelConfig(Square); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SquaredDifference.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast17 = true; + var squaredDifferenceConfig3 = createBinaryKernelConfig(SquaredDifference, supportsFullBroadcast17); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Step.js + init_define_BUILD_VERSION(); + var wasmStep; + function setup45(backend2) { + wasmStep = backend2.wasm.cwrap(Step, null, [ + "number", + "number", + "number", + "number" + ]); + } + function step4(args) { + const { backend: backend2, inputs, attrs } = args; + const { alpha } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(x.shape, x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmStep(xId, alpha, CppDType[x.dtype], outId); + return out; + } + var stepConfig3 = { + kernelName: Step, + backendName: "wasm", + setupFunc: setup45, + kernelFunc: step4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StridedSlice.js + init_define_BUILD_VERSION(); + var wasmStridedSlice; + function setup46(backend2) { + wasmStridedSlice = backend2.wasm.cwrap(StridedSlice, null, [ + "number", + "array", + "number", + "array", + "array", + "array", + "array", + "array", + "number", + "number" + ]); + } + function stridedSlice4(args) { + const { backend: backend2, inputs, attrs } = args; + const { x } = inputs; + const { begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask } = attrs; + const { finalShapeSparse, finalShape, isIdentity, sliceDim0, isSimpleSlice, begin: $begin, end: $end, strides: $strides } = slice_util_exports.sliceInfo(x.shape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask); + let result; + if (isIdentity) { + result = reshape4({ inputs: { x }, backend: backend2, attrs: { shape: finalShape } }); + } else if (sliceDim0 || isSimpleSlice) { + util_exports.assert(x.shape.length >= 1, () => `Input must have rank at least 1, got: ${x.shape.length}`); + const size = slice_util_exports.computeOutShape($begin, $end, $strides); + const sliced = slice4({ inputs: { x }, backend: backend2, attrs: { begin: $begin, size } }); + result = reshape4({ inputs: { x: sliced }, backend: backend2, attrs: { shape: finalShape } }); + backend2.disposeData(sliced.dataId); + } else { + const out = backend2.makeOutput(finalShapeSparse, "float32"); + const xId = backend2.dataIdMap.get(x.dataId).id; + const xStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(x.shape)).buffer); + const beginBytes = new Uint8Array(new Int32Array($begin).buffer); + const endBytes = new Uint8Array(new Int32Array($end).buffer); + const stridesBytes = new Uint8Array(new Int32Array($strides).buffer); + const outputShapeBytes = new Uint8Array(new Int32Array(finalShapeSparse).buffer); + const outStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(finalShapeSparse)).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmStridedSlice(xId, xStridesBytes, x.shape.length, beginBytes, endBytes, stridesBytes, outputShapeBytes, outStridesBytes, finalShapeSparse.length, outId); + result = reshape4({ inputs: { x: out }, backend: backend2, attrs: { shape: finalShape } }); + backend2.disposeData(out.dataId); + } + return result; + } + var stridedSliceConfig3 = { + kernelName: StridedSlice, + backendName: "wasm", + setupFunc: setup46, + kernelFunc: stridedSlice4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StringNGrams.js + init_define_BUILD_VERSION(); + function stringNGrams3(args) { + const { backend: backend2, inputs, attrs } = args; + const { data, dataSplits } = inputs; + const { separator, nGramWidths, leftPad, rightPad: rightPad2, padWidth, preserveShortSequences } = attrs; + const $data = backend2.readSync(data.dataId); + const $dataSplits = backend2.readSync(dataSplits.dataId); + const [nGrams, nGramsSplits] = stringNGramsImpl($data, $dataSplits, separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences); + const nGramsOut = backend2.makeOutput([nGrams.length], "string"); + const nGramsOutData = backend2.dataIdMap.get(nGramsOut.dataId); + nGramsOutData.stringBytes = nGrams; + const nGramsSplitsOut = backend2.makeOutput(dataSplits.shape, "int32"); + const nGramsSplitsOutVals = backend2.typedArrayFromHeap(nGramsSplitsOut); + nGramsSplitsOutVals.set(nGramsSplits); + return [nGramsOut, nGramsSplitsOut]; + } + var stringNGramsConfig3 = { + kernelName: StringNGrams, + backendName: "wasm", + kernelFunc: stringNGrams3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StringSplit.js + init_define_BUILD_VERSION(); + function stringSplit3(args) { + const { backend: backend2, inputs, attrs } = args; + const { input: input2, delimiter } = inputs; + const { skipEmpty } = attrs; + const inputVals = backend2.readSync(input2.dataId); + const delimiterVals = backend2.readSync(delimiter.dataId); + const [indices, values, shape] = stringSplitImpl(inputVals, delimiterVals[0], skipEmpty); + const outputSize = values.length; + const indicesOut = backend2.makeOutput([outputSize, 2], "int32"); + const indicesOutVals = backend2.typedArrayFromHeap(indicesOut); + indicesOutVals.set(indices); + const valuesOut = backend2.makeOutput([outputSize], "string"); + const valuesOutData = backend2.dataIdMap.get(valuesOut.dataId); + valuesOutData.stringBytes = values; + const shapeOut = backend2.makeOutput([2], "int32"); + const shapeOutVals = backend2.typedArrayFromHeap(shapeOut); + shapeOutVals.set(shape); + return [indicesOut, valuesOut, shapeOut]; + } + var stringSplitConfig3 = { + kernelName: StringSplit, + backendName: "wasm", + kernelFunc: stringSplit3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StringToHashBucketFast.js + init_define_BUILD_VERSION(); + function stringToHashBucketFast3(args) { + const { backend: backend2, inputs, attrs } = args; + const { input: input2 } = inputs; + const { numBuckets } = attrs; + const inputVals = backend2.readSync(input2.dataId); + const values = stringToHashBucketFastImpl(inputVals, numBuckets); + const out = backend2.makeOutput(input2.shape, "int32"); + const outVals = backend2.typedArrayFromHeap(out); + outVals.set(values); + return out; + } + var stringToHashBucketFastConfig3 = { + kernelName: StringToHashBucketFast, + backendName: "wasm", + kernelFunc: stringToHashBucketFast3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sub.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast18 = true; + var subConfig3 = createBinaryKernelConfig(Sub, supportsFullBroadcast18); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sum.js + init_define_BUILD_VERSION(); + var wasmSum; + function setup47(backend2) { + wasmSum = backend2.wasm.cwrap(Sum, null, [ + "number", + "number", + "number", + "number" + ]); + } + function sum5(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + let reductionAxes = axes; + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + if (transposedId !== xId) { + input2 = transposed; + inputId = transposedId; + reductionAxes = backend_util_exports.getInnerMostAxes(reductionAxes.length, input2.shape.length); + } + } + backend_util_exports.assertAxesAreInnerMostDims("sum", reductionAxes, input2.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, reductionAxes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, input2.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmSum(inputId, reduceSize, CppDType[out.dtype], outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var sumConfig3 = { + kernelName: Sum, + backendName: "wasm", + setupFunc: setup47, + kernelFunc: sum5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Tan.js + init_define_BUILD_VERSION(); + var tanConfig3 = createUnaryKernelConfig(Tan); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Tanh.js + init_define_BUILD_VERSION(); + var tanhConfig3 = createUnaryKernelConfig(Tanh); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Tile.js + init_define_BUILD_VERSION(); + var wasmTile; + function setup48(backend2) { + wasmTile = backend2.wasm.cwrap(Tile, null, [ + "number", + "array", + "number", + "array", + "number", + "number" + ]); + } + function tile5(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const { reps } = attrs; + const newShape = new Array(x.shape.length); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = x.shape[i] * reps[i]; + } + const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + const newShapeBytes = new Uint8Array(new Int32Array(newShape).buffer); + const out = backend2.makeOutput(newShape, x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmTile(xId, xShapeBytes, x.shape.length, newShapeBytes, newShape.length, CppDType[out.dtype], outId); + return out; + } + var tileConfig3 = { + kernelName: Tile, + backendName: "wasm", + setupFunc: setup48, + kernelFunc: tile5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/TopK.js + init_define_BUILD_VERSION(); + var wasmTopK; + function setup49(backend2) { + wasmTopK = backend2.wasm.cwrap(TopK, null, [ + "number", + "array", + "number", + "number", + "number", + "bool", + "number", + "number" + ]); + } + var topk2 = ({ inputs, backend: backend2, attrs }) => { + const { x } = inputs; + const { k, sorted } = attrs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + const outputShape = x.shape.slice(); + outputShape[outputShape.length - 1] = k; + const outValues = backend2.makeOutput(outputShape, x.dtype); + const outValuesId = backend2.dataIdMap.get(outValues.dataId).id; + const outIndices = backend2.makeOutput(outputShape, "int32"); + const outIndicesId = backend2.dataIdMap.get(outIndices.dataId).id; + wasmTopK(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], k, sorted, outValuesId, outIndicesId); + return [outValues, outIndices]; + }; + var topKConfig3 = { + kernelName: TopK, + backendName: "wasm", + setupFunc: setup49, + kernelFunc: topk2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Transform.js + init_define_BUILD_VERSION(); + var wasmTransform; + function setup50(backend2) { + wasmTransform = backend2.wasm.cwrap(Transform, null, [ + "number", + "number", + "bool", + "number", + "number", + "number", + "number", + "number", + "number", + "array", + "number", + "number", + "number", + "number", + "number" + ]); + } + function transform4(args) { + const { backend: backend2, inputs, attrs } = args; + const { image: image2, transforms } = inputs; + const { interpolation, fillMode, fillValue, outputShape } = attrs; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const [outHeight, outWidth] = outputShape != null ? outputShape : [imageHeight, imageWidth]; + const outShape = [ + batch, + outHeight, + outWidth, + numChannels + ]; + const strides = new Uint8Array(new Int32Array(util_exports.computeStrides(image2.shape)).buffer); + const out = backend2.makeOutput(outShape, image2.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const imageData = backend2.dataIdMap.get(image2.dataId); + const imageId = imageData.id; + const transformsData = backend2.dataIdMap.get(transforms.dataId); + const transformsId = transformsData.id; + const interpolationModeId = interpolation === "nearest" ? 1 : 2; + let fillModeId; + switch (fillMode) { + case "constant": + fillModeId = 1; + break; + case "reflect": + fillModeId = 2; + break; + case "wrap": + fillModeId = 3; + break; + case "nearest": + fillModeId = 4; + break; + default: + fillModeId = 1; + break; + } + wasmTransform(imageId, transformsId, transforms.shape[0] > 1, batch, outHeight, outWidth, numChannels, imageWidth, imageHeight, strides, image2.shape.length - 1, interpolationModeId, fillModeId, fillValue, outId); + return out; + } + var transformConfig3 = { + kernelName: Transform, + backendName: "wasm", + setupFunc: setup50, + kernelFunc: transform4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Unpack.js + init_define_BUILD_VERSION(); + function unpack3(args) { + const { inputs, backend: backend2, attrs } = args; + const { value } = inputs; + let { axis } = attrs; + if (axis < 0) { + axis += value.shape.length; + } + const numOutputs = value.shape[axis]; + const rank = value.shape.length; + const outShape = new Array(rank - 1); + let outIndex = 0; + for (let i = 0; i < rank; i++) { + if (i !== axis) { + outShape[outIndex++] = value.shape[i]; + } + } + const outs = new Array(numOutputs); + const begin = new Array(rank).fill(0); + const size = value.shape.slice(); + size[axis] = 1; + for (let i = 0; i < outs.length; i++) { + begin[axis] = i; + outs[i] = slice4({ inputs: { x: value }, attrs: { begin, size }, backend: backend2 }); + } + return outs.map(({ dataId, dtype }) => ({ dataId, dtype, shape: outShape })); + } + var unpackConfig3 = { + kernelName: Unpack, + backendName: "wasm", + kernelFunc: unpack3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ZerosLike.js + init_define_BUILD_VERSION(); + function zerosLike4(args) { + const { inputs: { x }, backend: backend2 } = args; + const out = backend2.makeOutput(x.shape, x.dtype); + const outVals = backend2.typedArrayFromHeap(out); + outVals.fill(0); + return out; + } + var zerosLikeConfig3 = { + kernelName: ZerosLike, + backendName: "wasm", + kernelFunc: zerosLike4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/register_all_kernels.js + var kernelConfigs3 = [ + _fusedMatMulConfig3, + absConfig3, + addConfig3, + addNConfig3, + allConfig3, + anyConfig3, + argMaxConfig3, + avgPoolConfig3, + batchMatMulConfig3, + batchToSpaceNDConfig3, + castConfig3, + ceilConfig3, + clipByValueConfig3, + concatConfig3, + conv2DConfig3, + conv2DBackpropInputConfig3, + cosConfig3, + coshConfig3, + cropAndResizeConfig3, + cumprodConfig3, + cumsumConfig3, + depthToSpaceConfig3, + depthwiseConv2dNativeConfig3, + eluConfig3, + equalConfig3, + expConfig3, + expandDimsConfig3, + fillConfig3, + flipLeftRightConfig3, + floorConfig3, + floorDivConfig3, + fusedBatchNormConfig, + fusedConv2DConfig3, + fusedDepthwiseConv2DConfig3, + gatherNdConfig3, + gatherV2Config3, + greaterConfig3, + greaterEqualConfig3, + identityConfig3, + leakyReluConfig3, + lessConfig3, + lessEqualConfig3, + logConfig3, + logicalAndConfig3, + logicalNotConfig3, + logicalOrConfig3, + logicalXorConfig, + maxConfig3, + maximumConfig3, + maxPoolConfig3, + meanConfig3, + minConfig3, + minimumConfig3, + mirrorPadConfig3, + multiplyConfig3, + negConfig3, + nonMaxSuppressionV3Config3, + nonMaxSuppressionV4Config3, + nonMaxSuppressionV5Config3, + notEqualConfig3, + oneHotConfig3, + onesLikeConfig3, + packConfig3, + padV2Config3, + powConfig3, + preluConfig3, + prodConfig3, + rangeConfig3, + realDivConfig3, + reluConfig3, + relu6Config3, + reshapeConfig3, + resizeBilinearConfig3, + resizeNearestNeighborConfig3, + reverseConfig3, + rotateWithOffsetConfig3, + roundConfig3, + rsqrtConfig3, + scatterNdConfig3, + selectConfig3, + sigmoidConfig3, + sinConfig3, + sliceConfig3, + softmaxConfig3, + spaceToBatchNDConfig3, + sparseFillEmptyRowsConfig3, + sparseReshapeConfig3, + sparseSegmentMeanConfig3, + sparseSegmentSumConfig3, + splitVConfig3, + sqrtConfig3, + squareConfig3, + squaredDifferenceConfig3, + stepConfig3, + stridedSliceConfig3, + stringNGramsConfig3, + stringSplitConfig3, + stringToHashBucketFastConfig3, + subConfig3, + sumConfig3, + tanConfig3, + tanhConfig3, + tileConfig3, + topKConfig3, + transformConfig3, + transposeConfig3, + unpackConfig3, + zerosLikeConfig3 + ]; + for (const kernelConfig of kernelConfigs3) { + registerKernel(kernelConfig); + } + + init_define_BUILD_VERSION(); + // node_modules/@tensorflow/tfjs-backend-wasm/dist/flags_wasm.js + init_define_BUILD_VERSION(); + var ENV6 = env(); + ENV6.registerFlag( + "WASM_HAS_SIMD_SUPPORT", + async () => WebAssembly.validate(new Uint8Array([ + 0, + 97, + 115, + 109, + 1, + 0, + 0, + 0, + 1, + 4, + 1, + 96, + 0, + 0, + 3, + 2, + 1, + 0, + 10, + 9, + 1, + 7, + 0, + 65, + 0, + 253, + 15, + 26, + 11 + ])) + ); + ENV6.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT", async () => { + if (ENV6.get("IS_NODE")) { + return false; + } + try { + new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)); + return WebAssembly.validate(new Uint8Array([ + 0, + 97, + 115, + 109, + 1, + 0, + 0, + 0, + 1, + 4, + 1, + 96, + 0, + 0, + 3, + 2, + 1, + 0, + 5, + 4, + 1, + 3, + 1, + 1, + 10, + 11, + 1, + 9, + 0, + 65, + 0, + 254, + 16, + 2, + 0, + 26, + 11 + ])); + } catch (e) { + return false; + } + }); + + // node_modules/@tensorflow/tfjs-backend-wasm/dist/backend_wasm.js + init_define_BUILD_VERSION(); + var wasmFactoryThreadedSimd_import = __toESM(require_tfjs_backend_wasm_threaded_simd()); + var import_tfjs_backend_wasm_threaded_simd_worker = __toESM(require_tfjs_backend_wasm_threaded_simd_worker()); + var wasmFactory_import = __toESM(require_tfjs_backend_wasm()); + var wasmFactoryThreadedSimd = wasmFactoryThreadedSimd_import.default || wasmFactoryThreadedSimd_import; + var wasmFactory = wasmFactory_import.default || wasmFactory_import; + var BackendWasm = class extends KernelBackend { + constructor(wasm) { + super(); + this.wasm = wasm; + this.dataIdNextNumber = 1; + this.wasm.tfjs.initWithThreadsCount(threadsCount); + actualThreadsCount = this.wasm.tfjs.getThreadsCount(); + this.dataIdMap = new DataStorage(this, engine()); + } + write(values, shape, dtype) { + const dataId = { id: this.dataIdNextNumber++ }; + this.move(dataId, values, shape, dtype, 1); + return dataId; + } + numDataIds() { + return this.dataIdMap.numDataIds(); + } + async time(f) { + const start = util_exports.now(); + f(); + const kernelMs = util_exports.now() - start; + return { kernelMs }; + } + move(dataId, values, shape, dtype, refCount) { + const id = this.dataIdNextNumber++; + if (dtype === "string") { + const stringBytes = values; + this.dataIdMap.set(dataId, { id, stringBytes, shape, dtype, memoryOffset: null, refCount }); + return; + } + const size = util_exports.sizeFromShape(shape); + const numBytes = size * util_exports.bytesPerElement(dtype); + const memoryOffset = this.wasm._malloc(numBytes); + this.dataIdMap.set(dataId, { id, memoryOffset, shape, dtype, refCount }); + this.wasm.tfjs.registerTensor(id, size, memoryOffset); + if (values != null) { + this.wasm.HEAPU8.set(new Uint8Array(values.buffer, values.byteOffset, numBytes), memoryOffset); + } + } + async read(dataId) { + return this.readSync(dataId); + } + readSync(dataId, start, end) { + const { memoryOffset, dtype, shape, stringBytes } = this.dataIdMap.get(dataId); + if (dtype === "string") { + if ((start == null || start === 0) && (end == null || end >= stringBytes.length)) { + return stringBytes; + } + return stringBytes.slice(start, end); + } + start = start || 0; + end = end || util_exports.sizeFromShape(shape); + const bytesPerElement2 = util_exports.bytesPerElement(dtype); + const bytes = this.wasm.HEAPU8.slice(memoryOffset + start * bytesPerElement2, memoryOffset + end * bytesPerElement2); + return typedArrayFromBuffer(bytes.buffer, dtype); + } + disposeData(dataId, force = false) { + if (this.dataIdMap.has(dataId)) { + const data = this.dataIdMap.get(dataId); + data.refCount--; + if (!force && data.refCount > 0) { + return false; + } + this.wasm._free(data.memoryOffset); + this.wasm.tfjs.disposeData(data.id); + this.dataIdMap.delete(dataId); + } + return true; + } + refCount(dataId) { + if (this.dataIdMap.has(dataId)) { + const tensorData = this.dataIdMap.get(dataId); + return tensorData.refCount; + } + return 0; + } + incRef(dataId) { + const data = this.dataIdMap.get(dataId); + if (data != null) { + data.refCount++; + } + } + floatPrecision() { + return 32; + } + getMemoryOffset(dataId) { + return this.dataIdMap.get(dataId).memoryOffset; + } + dispose() { + this.wasm.tfjs.dispose(); + if ("PThread" in this.wasm) { + this.wasm.PThread.terminateAllThreads(); + } + this.wasm = null; + } + memory() { + return { unreliable: false }; + } + makeOutput(shape, dtype, memoryOffset) { + let dataId; + if (memoryOffset == null) { + dataId = this.write(null, shape, dtype); + } else { + const id = this.dataIdNextNumber++; + dataId = { id }; + this.dataIdMap.set(dataId, { id, memoryOffset, shape, dtype, refCount: 1 }); + const size = util_exports.sizeFromShape(shape); + this.wasm.tfjs.registerTensor(id, size, memoryOffset); + } + return { dataId, shape, dtype }; + } + typedArrayFromHeap({ shape, dtype, dataId }) { + const buffer2 = this.wasm.HEAPU8.buffer; + const { memoryOffset } = this.dataIdMap.get(dataId); + const size = util_exports.sizeFromShape(shape); + switch (dtype) { + case "float32": + return new Float32Array(buffer2, memoryOffset, size); + case "int32": + return new Int32Array(buffer2, memoryOffset, size); + case "bool": + return new Uint8Array(buffer2, memoryOffset, size); + default: + throw new Error(`Unknown dtype ${dtype}`); + } + } + }; + function createInstantiateWasmFunc(path) { + return (imports, callback) => { + util_exports.fetch(path, { credentials: "same-origin" }).then((response) => { + if (!response["ok"]) { + imports.env.a(`failed to load wasm binary file at '${path}'`); + } + response.arrayBuffer().then((binary) => { + WebAssembly.instantiate(binary, imports).then((output) => { + callback(output.instance, output.module); + }); + }); + }); + return {}; + }; + } + function getPathToWasmBinary(simdSupported, threadsSupported, wasmModuleFolder) { + if (wasmPath != null) { + return wasmPath; + } + let path = "tfjs-backend-wasm.wasm"; + if (simdSupported && threadsSupported) { + path = "tfjs-backend-wasm-threaded-simd.wasm"; + } else if (simdSupported) { + path = "tfjs-backend-wasm-simd.wasm"; + } + if (wasmFileMap != null) { + if (wasmFileMap[path] != null) { + return wasmFileMap[path]; + } + } + return wasmModuleFolder + path; + } + async function init() { + const [simdSupported, threadsSupported] = await Promise.all([ + env().getAsync("WASM_HAS_SIMD_SUPPORT"), + env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT") + ]); + return new Promise((resolve, reject) => { + const factoryConfig = {}; + factoryConfig.locateFile = (path, prefix) => { + if (path.endsWith(".worker.js")) { + const response = import_tfjs_backend_wasm_threaded_simd_worker.wasmWorkerContents.replace(/\n/g, "\\n"); + const blob = new Blob([response], { type: "application/javascript" }); + return URL.createObjectURL(blob); + } + if (path.endsWith(".wasm")) { + return getPathToWasmBinary(simdSupported, threadsSupported, wasmPathPrefix != null ? wasmPathPrefix : prefix); + } + return prefix + path; + }; + if (customFetch) { + factoryConfig.instantiateWasm = createInstantiateWasmFunc(getPathToWasmBinary(simdSupported, threadsSupported, wasmPathPrefix != null ? wasmPathPrefix : "")); + } + let initialized = false; + factoryConfig.onAbort = () => { + if (initialized) { + return; + } + if (initAborted) { + return; + } + initAborted = true; + const rejectMsg = "Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"; + reject({ message: rejectMsg }); + }; + let wasm; + if (threadsSupported && simdSupported && wasmPath == null) { + factoryConfig.mainScriptUrlOrBlob = new Blob([`var WasmBackendModuleThreadedSimd = ` + wasmFactoryThreadedSimd.toString()], { type: "text/javascript" }); + wasm = wasmFactoryThreadedSimd(factoryConfig); + } else { + wasm = wasmFactory(factoryConfig); + } + wasm.then((module) => { + initialized = true; + initAborted = false; + const voidReturnType = null; + module.tfjs = { + init: module.cwrap("init", null, []), + initWithThreadsCount: module.cwrap("init_with_threads_count", null, ["number"]), + getThreadsCount: module.cwrap("get_threads_count", "number", []), + registerTensor: module.cwrap("register_tensor", null, [ + "number", + "number", + "number" + ]), + disposeData: module.cwrap("dispose_data", voidReturnType, ["number"]), + dispose: module.cwrap("dispose", voidReturnType, []) + }; + resolve({ wasm: module }); + }).catch(reject); + }); + } + function typedArrayFromBuffer(buffer2, dtype) { + switch (dtype) { + case "float32": + return new Float32Array(buffer2); + case "int32": + return new Int32Array(buffer2); + case "bool": + return new Uint8Array(buffer2); + default: + throw new Error(`Unknown dtype ${dtype}`); + } + } + var wasmBinaryNames = [ + "tfjs-backend-wasm.wasm", + "tfjs-backend-wasm-simd.wasm", + "tfjs-backend-wasm-threaded-simd.wasm" + ]; + var wasmPath = null; + var wasmPathPrefix = null; + var wasmFileMap = {}; + var initAborted = false; + var customFetch = false; + function setWasmPaths(prefixOrFileMap, usePlatformFetch = false) { + if (initAborted) { + throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`"); + } + if (typeof prefixOrFileMap === "string") { + wasmPathPrefix = prefixOrFileMap; + } else { + wasmFileMap = prefixOrFileMap; + const missingPaths = wasmBinaryNames.filter((name) => wasmFileMap[name] == null); + if (missingPaths.length > 0) { + throw new Error(`There were no entries found for the following binaries: ${missingPaths.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`); + } + } + customFetch = usePlatformFetch; + } + var threadsCount = -1; + var actualThreadsCount = -1; + + init_define_BUILD_VERSION(); + // node_modules/@tensorflow/tfjs-backend-wasm/dist/base.js + var WASM_PRIORITY = 2; + registerBackend("wasm", async () => { + const { wasm } = await init(); + return new BackendWasm(wasm); + }, WASM_PRIORITY); + + // src/model.json + var model_default = { format: "layers-model", generatedBy: "keras v2.13.1", convertedBy: "TensorFlow.js Converter v4.10.0", modelTopology: { keras_version: "2.13.1", backend: "tensorflow", model_config: { class_name: "Functional", config: { name: "model", trainable: true, layers: [{ class_name: "InputLayer", config: { batch_input_shape: [null, 300, 80, 1], dtype: "float32", sparse: false, ragged: false, name: "image" }, name: "image", inbound_nodes: [] }, { class_name: "Conv2D", config: { name: "Conv1", trainable: true, dtype: "float32", filters: 32, kernel_size: [3, 3], strides: [1, 1], padding: "same", data_format: "channels_last", dilation_rate: [1, 1], groups: 1, activation: "relu", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "HeNormal", config: { seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, kernel_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, bias_constraint: null }, name: "Conv1", inbound_nodes: [[["image", 0, 0, {}]]] }, { class_name: "MaxPooling2D", config: { name: "pool1", trainable: true, dtype: "float32", pool_size: [2, 2], padding: "valid", strides: [2, 2], data_format: "channels_last" }, name: "pool1", inbound_nodes: [[["Conv1", 0, 0, {}]]] }, { class_name: "Conv2D", config: { name: "Conv2", trainable: true, dtype: "float32", filters: 64, kernel_size: [3, 3], strides: [1, 1], padding: "same", data_format: "channels_last", dilation_rate: [1, 1], groups: 1, activation: "relu", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "HeNormal", config: { seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, kernel_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, bias_constraint: null }, name: "Conv2", inbound_nodes: [[["pool1", 0, 0, {}]]] }, { class_name: "MaxPooling2D", config: { name: "pool2", trainable: true, dtype: "float32", pool_size: [2, 2], padding: "valid", strides: [2, 2], data_format: "channels_last" }, name: "pool2", inbound_nodes: [[["Conv2", 0, 0, {}]]] }, { class_name: "Reshape", config: { name: "reshape", trainable: true, dtype: "float32", target_shape: [75, 1280] }, name: "reshape", inbound_nodes: [[["pool2", 0, 0, {}]]] }, { class_name: "Dense", config: { name: "dense1", trainable: true, dtype: "float32", units: 64, activation: "relu", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "GlorotUniform", config: { seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, kernel_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, bias_constraint: null }, name: "dense1", inbound_nodes: [[["reshape", 0, 0, {}]]] }, { class_name: "Dropout", config: { name: "dropout_9", trainable: true, dtype: "float32", rate: 0.2, noise_shape: null, seed: null }, name: "dropout_9", inbound_nodes: [[["dense1", 0, 0, {}]]] }, { class_name: "Bidirectional", config: { name: "bidirectional_19", trainable: true, dtype: "float32", layer: { module: "keras.layers", class_name: "LSTM", config: { name: "lstm_19", trainable: true, dtype: "float32", return_sequences: true, return_state: false, go_backwards: false, stateful: false, unroll: false, time_major: false, units: 128, activation: "tanh", recurrent_activation: "sigmoid", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "GlorotUniform", config: { seed: null }, registered_name: null }, recurrent_initializer: { module: "keras.initializers", class_name: "Orthogonal", config: { gain: 1, seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, unit_forget_bias: true, kernel_regularizer: null, recurrent_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, recurrent_constraint: null, bias_constraint: null, dropout: 0.25, recurrent_dropout: 0, implementation: 2 }, registered_name: null }, merge_mode: "concat" }, name: "bidirectional_19", inbound_nodes: [[["dropout_9", 0, 0, {}]]] }, { class_name: "Bidirectional", config: { name: "bidirectional_20", trainable: true, dtype: "float32", layer: { module: "keras.layers", class_name: "LSTM", config: { name: "lstm_20", trainable: true, dtype: "float32", return_sequences: true, return_state: false, go_backwards: false, stateful: false, unroll: false, time_major: false, units: 64, activation: "tanh", recurrent_activation: "sigmoid", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "GlorotUniform", config: { seed: null }, registered_name: null }, recurrent_initializer: { module: "keras.initializers", class_name: "Orthogonal", config: { gain: 1, seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, unit_forget_bias: true, kernel_regularizer: null, recurrent_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, recurrent_constraint: null, bias_constraint: null, dropout: 0.25, recurrent_dropout: 0, implementation: 2 }, registered_name: null }, merge_mode: "concat" }, name: "bidirectional_20", inbound_nodes: [[["bidirectional_19", 0, 0, {}]]] }, { class_name: "Dense", config: { name: "dense2", trainable: true, dtype: "float32", units: 24, activation: "softmax", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "GlorotUniform", config: { seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, kernel_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, bias_constraint: null }, name: "dense2", inbound_nodes: [[["bidirectional_20", 0, 0, {}]]] }], input_layers: [["image", 0, 0]], output_layers: [["dense2", 0, 0]] } } }, weightsManifest: [{ paths: ["group1-shard1of1.bin"], weights: [{ name: "Conv1/kernel", shape: [3, 3, 1, 32], dtype: "float32" }, { name: "Conv1/bias", shape: [32], dtype: "float32" }, { name: "Conv2/kernel", shape: [3, 3, 32, 64], dtype: "float32" }, { name: "Conv2/bias", shape: [64], dtype: "float32" }, { name: "bidirectional_19/forward_lstm_19/lstm_cell_58/kernel", shape: [64, 512], dtype: "float32" }, { name: "bidirectional_19/forward_lstm_19/lstm_cell_58/recurrent_kernel", shape: [128, 512], dtype: "float32" }, { name: "bidirectional_19/forward_lstm_19/lstm_cell_58/bias", shape: [512], dtype: "float32" }, { name: "bidirectional_19/backward_lstm_19/lstm_cell_59/kernel", shape: [64, 512], dtype: "float32" }, { name: "bidirectional_19/backward_lstm_19/lstm_cell_59/recurrent_kernel", shape: [128, 512], dtype: "float32" }, { name: "bidirectional_19/backward_lstm_19/lstm_cell_59/bias", shape: [512], dtype: "float32" }, { name: "bidirectional_20/forward_lstm_20/lstm_cell_61/kernel", shape: [256, 256], dtype: "float32" }, { name: "bidirectional_20/forward_lstm_20/lstm_cell_61/recurrent_kernel", shape: [64, 256], dtype: "float32" }, { name: "bidirectional_20/forward_lstm_20/lstm_cell_61/bias", shape: [256], dtype: "float32" }, { name: "bidirectional_20/backward_lstm_20/lstm_cell_62/kernel", shape: [256, 256], dtype: "float32" }, { name: "bidirectional_20/backward_lstm_20/lstm_cell_62/recurrent_kernel", shape: [64, 256], dtype: "float32" }, { name: "bidirectional_20/backward_lstm_20/lstm_cell_62/bias", shape: [256], dtype: "float32" }, { name: "dense1/kernel", shape: [1280, 64], dtype: "float32" }, { name: "dense1/bias", shape: [64], dtype: "float32" }, { name: "dense2/kernel", shape: [128, 24], dtype: "float32" }, { name: "dense2/bias", shape: [24], dtype: "float32" }] }] }; + + // src/ccl.ts + init_define_BUILD_VERSION(); + function connectedComponentLabeling(binaryImage, width, height) { + const labels = Array(binaryImage.length).fill(0); + const linked = []; + let nextLabel = 1; + function find(x) { + if (x !== linked[x]) { + linked[x] = find(linked[x]); + } + return linked[x]; + } + function union(x, y) { + linked[find(x)] = find(y); + } + function getNeighbors(row, col) { + const neighbors = []; + if (row > 0 && labels[(row - 1) * width + col] > 0) { + neighbors.push(labels[(row - 1) * width + col]); + } + if (col > 0 && labels[row * width + col - 1] > 0) { + neighbors.push(labels[row * width + col - 1]); + } + if (row > 0 && col > 0 && labels[(row - 1) * width + col - 1] > 0) { + neighbors.push(labels[(row - 1) * width + col - 1]); + } + if (row > 0 && col < width - 1 && labels[(row - 1) * width + col + 1] > 0) { + neighbors.push(labels[(row - 1) * width + col + 1]); + } + return neighbors; + } + for (let row = 0; row < height; row++) { + for (let col = 0; col < width; col++) { + const idx = row * width + col; + if (binaryImage[idx] !== 0) { + const neighbors = getNeighbors(row, col); + if (neighbors.length === 0) { + linked[nextLabel] = nextLabel; + labels[idx] = nextLabel; + nextLabel++; + } else { + neighbors.sort(); + const smallestLabel = neighbors[0]; + labels[idx] = smallestLabel; + for (const neighbor of neighbors) { + if (neighbor !== smallestLabel) { + union(smallestLabel, neighbor); + } + } + } + } + } + } + for (let idx = 0; idx < binaryImage.length; idx++) { + if (binaryImage[idx] !== 0) { + labels[idx] = find(labels[idx]); + } + } + return labels; + } + function computeBounds(labels, width, height) { + const bounds = {}; + for (let row = 0; row < height; row++) { + for (let col = 0; col < width; col++) { + const idx = row * width + col; + const label = labels[idx]; + if (label > 0) { + if (!bounds[label]) { + bounds[label] = { minRow: row, minCol: col, maxRow: row, maxCol: col, area: 1 }; + } else { + if (row < bounds[label].minRow) + bounds[label].minRow = row; + if (col < bounds[label].minCol) + bounds[label].minCol = col; + if (row > bounds[label].maxRow) + bounds[label].maxRow = row; + if (col > bounds[label].maxCol) + bounds[label].maxCol = col; + ++bounds[label].area; + } + } + } + } + return bounds; + } + + // src/main.ts + var charset = [" ", "0", "2", "4", "5", "8", "A", "D", "G", "H", "J", "K", "M", "N", "P", "R", "S", "T", "V", "W", "X", "Y"]; + var weightsData; + var model2; + enableProdMode(); + var wasmToUrl = (wasm) => { + const blb = new Blob([wasm], { type: "application/wasm" }); + return URL.createObjectURL(blb); + }; + var backendloaded = (async () => { + try { + if (true) { + weightsData = (await Promise.resolve().then(() => (init_group1_shard1of1(), group1_shard1of1_exports))).default; + const tfwasmthreadedsimd = (await Promise.resolve().then(() => (init_tfjs_backend_wasm_threaded_simd(), tfjs_backend_wasm_threaded_simd_exports))).default; + const tfwasmsimd = (await Promise.resolve().then(() => (init_tfjs_backend_wasm_simd(), tfjs_backend_wasm_simd_exports))).default; + const tfwasm = (await Promise.resolve().then(() => (init_tfjs_backend_wasm(), tfjs_backend_wasm_exports))).default; + setWasmPaths({ + "tfjs-backend-wasm.wasm": wasmToUrl(tfwasm), + "tfjs-backend-wasm-simd.wasm": wasmToUrl(tfwasmsimd), + "tfjs-backend-wasm-threaded-simd.wasm": wasmToUrl(tfwasmthreadedsimd) + }); + } else { + weightsData = new Uint8Array(await (await fetch(chrome.runtime.getURL("./group1-shard1of1.bin"))).arrayBuffer()); + const args = { + "tfjs-backend-wasm.wasm": chrome.runtime.getURL("tfjs-backend-wasm.wasm"), + "tfjs-backend-wasm-simd.wasm": chrome.runtime.getURL("tfjs-backend-wasm-simd.wasm"), + "tfjs-backend-wasm-threaded-simd.wasm": chrome.runtime.getURL("tfjs-backend-wasm-threaded-simd.wasm") + }; + setWasmPaths(args); + } + const l = await setBackend("wasm"); + console.log("tf backend loaded", l); + } catch (err) { + console.log("tf err", err); + } + })(); + function toggle(obj, v) { + if (v) + obj.style.display = ""; + else + obj.style.display = "none"; + } + var iohander = { + load: function() { + return new Promise((resolve, reject) => { + resolve({ + modelTopology: model_default.modelTopology, + weightSpecs: model_default.weightsManifest[0].weights, + weightData: weightsData.buffer, + format: model_default.format, + generatedBy: model_default.generatedBy, + convertedBy: model_default.convertedBy + }); + }); + } + }; + async function load() { + model2 = await loadLayersModel(iohander); + return model2; + } + function pxlBlackOrWhite(r, g, b) { + return r + g + b > 384 ? 0 : 1; + } + function getBoundries(imgdata) { + const data = imgdata.data; + const width = imgdata.width; + let i = data.length - 1; + let cl = 0; + let cr = 0; + const chkArray = []; + let opq = true; + while (i > 0) { + const a = data[i] > 128; + if (a !== opq) { + if (data[i - 4] > 128 === opq) { + i -= 4; + continue; + } + if (a) { + const pos = (i + 1) / 4; + const x = pos % width; + const y = (pos - x) / width; + const clr = pxlBlackOrWhite(data[i - 1], data[i - 2], data[i - 3]); + chkArray.push([x, y, clr]); + cr += 1; + } else { + const pos = (i - 3) / 4; + const x = pos % width; + const y = (pos - x) / width; + const clr = pxlBlackOrWhite(data[i + 1], data[i + 2], data[i + 3]); + chkArray.push([x, y, clr]); + cl += 1; + } + opq = a; + } + i -= 4; + } + return chkArray; + } + function getBestPos(bgdata, chkArray, slideWidth) { + const data = bgdata.data; + const width = bgdata.width; + let bestSimilarity = 0; + let bestPos = 0; + for (let s = 0; s <= slideWidth; s += 1) { + let similarity = 0; + const amount = chkArray.length; + for (let p2 = 0; p2 < amount; p2 += 1) { + const chk = chkArray[p2]; + const x = chk[0] + s; + const y = chk[1]; + const clr = chk[2]; + const off = (y * width + x) * 4; + const bgclr = pxlBlackOrWhite(data[off], data[off + 1], data[off + 2]); + if (bgclr === clr) { + similarity += 1; + } + } + if (similarity > bestSimilarity) { + bestSimilarity = similarity; + bestPos = s; + } + } + return bestPos / slideWidth * 100; + } + async function getImageDataFromURI(uri) { + const image2 = await imageFromUri(uri); + if (!image2) + throw new Error("No image"); + const canvas = document.createElement("canvas"); + canvas.width = image2.width; + canvas.height = image2.height; + const ctx = canvas.getContext("2d"); + ctx.drawImage(image2, 0, 0); + return ctx.getImageData(0, 0, canvas.width, canvas.height); + } + async function slideCaptcha(tfgElement, tbgElement, sliderElement) { + const tbgUri = tbgElement.style.backgroundImage.slice(5, -2); + const tfgUri = tfgElement.style.backgroundImage.slice(5, -2); + const igd = await getImageDataFromURI(tfgUri); + const chkArray = getBoundries(igd); + const sigd = await getImageDataFromURI(tbgUri); + const slideWidth = sigd.width - igd.width; + const sliderPos = getBestPos(sigd, chkArray, slideWidth); + sliderElement.value = "" + sliderPos; + sliderElement.dispatchEvent(new Event("input"), { bubbles: true }); + return 0 - sliderPos / 2; + } + async function imageFromCanvas(img, bg, off) { + const h = img.height; + const w = img.width; + const th = 80; + const ph = 0; + const pw = 16; + const scale2 = th / h; + const canvas = document.createElement("canvas"); + const cw = w * scale2 + pw * 2; + canvas.width = cw >= 300 ? 300 : cw; + canvas.height = th; + const ctx = canvas.getContext("2d", { willReadFrequently: true }); + ctx.fillStyle = "rgb(238,238,238)"; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.translate(canvas.width / 2, canvas.height / 2); + const draw = function(off2) { + if (bg) { + const border = 4; + ctx.drawImage( + bg, + -off2 + border, + 0, + w - border * 2, + h, + -w / 2 + border, + -h / 2, + w - border * 2, + h + ); + } + ctx.drawImage(img, -w / 2, -h / 2, w, h); + }; + if (bg && off == null) { + off = await slideCaptcha(document.getElementById("t-fg"), document.getElementById("t-bg"), document.getElementById("t-slider")); + } + draw(off || 0); + return ctx.getImageData(0, 0, canvas.width, canvas.height); + } + function toMonochrome(px) { + const ret = Array(px.length >> 2); + for (let i = 0; i < px.length; i += 4) { + ret[i >> 2] = +(px[i] < 128); + } + return ret; + } + var greedyCTCDecode = (yPred) => tidy(() => yPred.argMax(-1).arraySync()); + function processCTCDecodedSequence(decodedSequence, blankLabel = 0) { + const result = []; + let prevLabel = blankLabel; + for (const label of decodedSequence) { + if (label !== blankLabel && label !== prevLabel) { + result.push(label); + } + prevLabel = label; + } + return result; + } + function indicesToSymbols(decodedIndices) { + return decodedIndices.map((index) => charset[index - 1] || ""); + } + async function predict(img, bg, off) { + if (!model2) { + model2 = await load(); + } + const image2 = await imageFromCanvas(img, bg, off); + if (!image2) + throw new Error("Failed to gen image"); + const mono = toMonochrome(image2.data); + console.log(mono.reduce((a, b) => a + b), 0); + const labels = connectedComponentLabeling(mono, image2.width, image2.height); + const props = computeBounds(labels, image2.width, image2.height); + const sortedByArea = Object.entries(props).sort((a, b) => a[1].area - b[1].area); + const n = 8; + let eightBiggest = sortedByArea.slice(0, -n); + for (const [label, region] of eightBiggest) { + for (let y = region.minRow; y <= region.maxRow; ++y) { + for (let x = region.minCol; x <= region.maxCol; ++x) { + if (labels[y * image2.width + x] === +label) { + labels[y * image2.width + x] = 0; + } + } + } + } + eightBiggest = sortedByArea.slice(-n); + for (const [label, region] of eightBiggest) { + if (region.maxRow - region.minRow > 20) { + continue; + } + for (let y = region.minRow; y <= region.maxRow; ++y) { + for (let x = region.minCol; x <= region.maxCol; ++x) { + if (labels[y * image2.width + x] === +label) { + labels[y * image2.width + x] = 0; + } + } + } + } + for (const [label, region] of eightBiggest) { + if (region.maxRow - region.minRow <= 20) { + continue; + } + for (let y = region.minRow; y <= region.maxRow; ++y) { + for (let x = region.minCol; x <= region.maxCol; ++x) { + if (labels[y * image2.width + x] === +label) { + labels[y * image2.width + x] = 1; + } + } + } + } + const filtered2 = tensor3d(labels, [image2.height, image2.width, 1]).concat(zeros([80, 300 - image2.width, 1]), 1); + const prediction = model2.predict(filtered2.transpose([1, 0, 2]).expandDims(0)); + let d; + if (!Array.isArray(prediction)) { + const v = greedyCTCDecode(prediction); + console.log(v); + const s = processCTCDecodedSequence(v[0], charset.length + 1); + return indicesToSymbols(s).join("").trim(); + } else + throw new Error("unexpected inference"); + return ""; + } + async function imageFromUri(uri) { + if (uri.startsWith('url("')) { + uri = uri.substr(5, uri.length - 7); + } + if (!uri.startsWith("data:")) { + return null; + } + const img = new Image(); + await new Promise((r) => { + img.onload = r; + img.src = uri; + }); + return img; + } + async function predictUri(uri, uribg, bgoff) { + const img = await imageFromUri(uri); + const bg = uribg ? await imageFromUri(uribg) : null; + const off = bgoff ? parseInt(bgoff) : null; + return await predict(img, bg, off); + } + //var solveButton = document.createElement("input"); + //solveButton.id = "t-auto-solve"; + //solveButton.value = "Solve"; + //solveButton.type = "button"; + //solveButton.style.fontSize = "11px"; + //solveButton.style.padding = "0 2px"; + //solveButton.style.margin = "0px 0px 0px 6px"; + //solveButton.style.height = "18px"; + //solveButton.onclick = async function() { + // solve(true); + //}; + //var altsDiv = document.createElement("div"); + //altsDiv.id = "t-auto-options"; + //altsDiv.style.margin = "0"; + //altsDiv.style.padding = "0"; + //var storedPalceholder; + var overrides = {}; + function placeAfter(elem, sibling) { + if (elem.parentElement !== sibling.parentElement) { + setTimeout(function() { + sibling.parentElement?.insertBefore(elem, sibling.nextElementSibling); + }, 1); + } + } + var previousText = null; + async function solve(force) { + const resp = document.getElementById("t-resp"); + if (!resp) + return; + const bg = document.getElementById("t-bg"); + if (!bg) + return; + const fg = document.getElementById("t-fg"); + if (!fg) + return; + const help = document.getElementById("t-help"); + if (!help) + return; + await backendloaded; + //placeAfter(solveButton, resp); + //placeAfter(altsDiv, help); + //setTimeout(function() { + // toggle(solveButton, bg.style.backgroundImage); + //}, 1); + const text = fg.style.backgroundImage; + if (!text) { + // altsDiv.innerHTML = ""; + return; + } + if (text === previousText && !force) + return; + previousText = text; + //altsDiv.innerHTML = ""; + //if (!storedPalceholder) + // storedPalceholder = resp.placeholder; + //resp.placeholder = "solving captcha..."; + overrides = {}; + const result = await predictUri( + text, + bg.style.backgroundImage, + force ? bg.style.backgroundPositionX : null + ); + //resp.placeholder = storedPalceholder; + resp.value = result; + } + //var observer = new MutationObserver(async function(mutationsList, observer2) { + // solve(false); + //}); + //observer.observe(document.body, { + // attributes: true, + // childList: true, + // subtree: true + //}); +//})(); +/** + * @license + * Copyright 2017 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2018 Google LLC + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + * ============================================================================= + */ +/** + * @license + * Copyright 2018 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ============================================================================= + */ +/** + * @license + * Copyright 2018 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2019 Google LLC + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + * ============================================================================= + */ +/** + * @license + * Copyright 2019 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ============================================================================= + */ +/** + * @license + * Copyright 2019 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2019 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2020 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2020 Google LLC + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + * ============================================================================= + */ +/** + * @license + * Copyright 2020 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2020 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2021 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2021 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2022 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2022 Google LLC + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + * ============================================================================= + */ +/** + * @license + * Copyright 2022 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2022 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** @license See the LICENSE file. */ diff --git a/Kuroba/app/src/main/ic_launcher-web.png b/Kuroba/app/src/main/ic_launcher-web.png new file mode 100644 index 0000000000..247ae709d7 Binary files /dev/null and b/Kuroba/app/src/main/ic_launcher-web.png differ diff --git a/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/ImageSource.java b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/ImageSource.java new file mode 100644 index 0000000000..0ec35141d1 --- /dev/null +++ b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/ImageSource.java @@ -0,0 +1,307 @@ +package com.davemorrissey.labs.subscaleview; + +import android.content.ContentResolver; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Rect; +import android.net.Uri; + +import androidx.annotation.NonNull; + +import org.jetbrains.annotations.Nullable; + +import java.io.*; +import java.net.URLDecoder; + +import okio.Buffer; + +/** + * Helper class used to set the source and additional attributes from a variety of sources. Supports + * use of a bitmap, asset, resource, external file or any other URI. + *

+ * When you are using a preview image, you must set the dimensions of the full size image on the + * ImageSource object for the full size image using the {@link #dimensions(int, int)} method. + */ +@SuppressWarnings({"unused", "WeakerAccess"}) +public final class ImageSource { + + public static final String FILE_PREFIX = "file://"; + public static final String ASSET_PREFIX = FILE_PREFIX + "/android_asset/"; + public static final String RESOURCE_PREFIX = ContentResolver.SCHEME_ANDROID_RESOURCE + "://"; + + private final Uri uri; + private final Bitmap bitmap; + private final Buffer buffer; + + private boolean tile; + private int sWidth; + private int sHeight; + private Rect sRegion; + private boolean cached; + + private ImageSource(Bitmap bitmap, boolean cached) { + this.bitmap = bitmap; + this.uri = null; + this.buffer = null; + this.tile = false; + this.sWidth = bitmap.getWidth(); + this.sHeight = bitmap.getHeight(); + this.cached = cached; + } + + private ImageSource(@NonNull Uri uri) { + // #114 If file doesn't exist, attempt to url decode the URI and try again + String uriString = uri.toString(); + if (uriString.startsWith(FILE_PREFIX)) { + File uriFile = new File(uriString.substring(FILE_PREFIX.length() - 1)); + if (!uriFile.exists()) { + try { + uri = Uri.parse(URLDecoder.decode(uriString, "UTF-8")); + } catch (UnsupportedEncodingException e) { + // Fallback to encoded URI. This exception is not expected. + } + } + } + this.bitmap = null; + this.uri = uri; + this.buffer = null; + this.tile = true; + } + + private ImageSource(Context context, int resource) { + this.bitmap = null; + this.uri = + Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + context.getPackageName() + "/" + resource); + this.buffer = null; + this.tile = true; + } + + private ImageSource(Buffer buffer) { + this.bitmap = null; + this.uri = null; + this.buffer = buffer; + this.tile = true; + } + + /** + * Create an instance from a resource. The correct resource for the device screen resolution will be used. + * + * @param resId resource ID. + * @return an {@link ImageSource} instance. + */ + @NonNull + public static ImageSource resource(Context context, int resId) { + return new ImageSource(context, resId); + } + + /** + * Create an instance from an asset name. + * + * @param assetName asset name. + * @return an {@link ImageSource} instance. + */ + @NonNull + public static ImageSource asset(@NonNull String assetName) { + if (assetName == null) { + throw new NullPointerException("Asset name must not be null"); + } + return uri(ASSET_PREFIX + assetName); + } + + /** + * Create an instance from a URI. If the URI does not start with a scheme, it's assumed to be the URI + * of a file. + * + * @param uri image URI. + * @return an {@link ImageSource} instance. + */ + @NonNull + public static ImageSource uri(@NonNull String uri) { + if (uri == null) { + throw new NullPointerException("Uri must not be null"); + } + if (!uri.contains("://")) { + if (uri.startsWith("/")) { + uri = uri.substring(1); + } + uri = FILE_PREFIX + uri; + } + return new ImageSource(Uri.parse(uri)); + } + + /** + * Create an instance from a URI. + * + * @param uri image URI. + * @return an {@link ImageSource} instance. + */ + @NonNull + public static ImageSource uri(@NonNull Uri uri) { + if (uri == null) { + throw new NullPointerException("Uri must not be null"); + } + return new ImageSource(uri); + } + + /** + * Provide a loaded bitmap for display. + * + * @param bitmap bitmap to be displayed. + * @return an {@link ImageSource} instance. + */ + @NonNull + public static ImageSource bitmap(@NonNull Bitmap bitmap) { + if (bitmap == null) { + throw new NullPointerException("Bitmap must not be null"); + } + return new ImageSource(bitmap, false); + } + + /** + * Provide a loaded and cached bitmap for display. This bitmap will not be recycled when it is no + * longer needed. Use this method if you loaded the bitmap with an image loader such as Picasso + * or Volley. + * + * @param bitmap bitmap to be displayed. + * @return an {@link ImageSource} instance. + */ + @NonNull + public static ImageSource cachedBitmap(@NonNull Bitmap bitmap) { + if (bitmap == null) { + throw new NullPointerException("Bitmap must not be null"); + } + return new ImageSource(bitmap, true); + } + + /** + * Create an instance from a byte buffer + * + * @param buffer Byte buffer + * @return an {@link ImageSource} instance. + */ + @NonNull + public static ImageSource buffer(@NonNull Buffer buffer) { + if (buffer == null) { + throw new NullPointerException("Buffer cannot be null"); + } + return new ImageSource(buffer); + } + + /** + * Enable tiling of the image. This does not apply to preview images which are always loaded as a single bitmap., + * and tiling cannot be disabled when displaying a region of the source image. + * + * @return this instance for chaining. + */ + @NonNull + public ImageSource tilingEnabled() { + return tiling(true); + } + + /** + * Disable tiling of the image. This does not apply to preview images which are always loaded as a single bitmap, + * and tiling cannot be disabled when displaying a region of the source image. + * + * @return this instance for chaining. + */ + @NonNull + public ImageSource tilingDisabled() { + return tiling(false); + } + + /** + * Enable or disable tiling of the image. This does not apply to preview images which are always loaded as a single bitmap, + * and tiling cannot be disabled when displaying a region of the source image. + * + * @param tile whether tiling should be enabled. + * @return this instance for chaining. + */ + @NonNull + public ImageSource tiling(boolean tile) { + this.tile = tile; + return this; + } + + /** + * Use a region of the source image. Region must be set independently for the full size image and the preview if + * you are using one. + * + * @param sRegion the region of the source image to be displayed. + * @return this instance for chaining. + */ + @NonNull + public ImageSource region(Rect sRegion) { + this.sRegion = sRegion; + setInvariants(); + return this; + } + + /** + * Declare the dimensions of the image. This is only required for a full size image, when you are specifying a URI + * and also a preview image. When displaying a bitmap object, or not using a preview, you do not need to declare + * the image dimensions. Note if the declared dimensions are found to be incorrect, the view will reset. + * + * @param sWidth width of the source image. + * @param sHeight height of the source image. + * @return this instance for chaining. + */ + @NonNull + public ImageSource dimensions(int sWidth, int sHeight) { + if (bitmap == null) { + this.sWidth = sWidth; + this.sHeight = sHeight; + } + setInvariants(); + return this; + } + + private void setInvariants() { + if (this.sRegion != null) { + this.tile = true; + this.sWidth = this.sRegion.width(); + this.sHeight = this.sRegion.height(); + } + } + + public Uri getUri() { + return uri; + } + + public Bitmap getBitmap() { + return bitmap; + } + + public @Nullable InputStream getBufferStream() { + if (buffer != null) { + return buffer.peek().inputStream(); + } else { + return null; + } + } + + public void clearBuffer() { + if (buffer != null) { + buffer.close(); + } + } + + public boolean getTile() { + return tile; + } + + public int getSWidth() { + return sWidth; + } + + public int getSHeight() { + return sHeight; + } + + public Rect getSRegion() { + return sRegion; + } + + public boolean isCached() { + return cached; + } +} diff --git a/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/ImageViewState.java b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/ImageViewState.java new file mode 100644 index 0000000000..307da27db9 --- /dev/null +++ b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/ImageViewState.java @@ -0,0 +1,43 @@ +package com.davemorrissey.labs.subscaleview; + +import android.graphics.PointF; + +import androidx.annotation.NonNull; + +import java.io.Serializable; + +/** + * Wraps the scale, center and orientation of a displayed image for easy restoration on screen rotate. + */ +@SuppressWarnings("WeakerAccess") +public class ImageViewState + implements Serializable { + + private final float scale; + + private final float centerX; + + private final float centerY; + + private final int orientation; + + public ImageViewState(float scale, @NonNull PointF center, int orientation) { + this.scale = scale; + this.centerX = center.x; + this.centerY = center.y; + this.orientation = orientation; + } + + public float getScale() { + return scale; + } + + @NonNull + public PointF getCenter() { + return new PointF(centerX, centerY); + } + + public int getOrientation() { + return orientation; + } +} diff --git a/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java new file mode 100644 index 0000000000..5b45ba481f --- /dev/null +++ b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java @@ -0,0 +1,3405 @@ +package com.davemorrissey.labs.subscaleview; + +import android.content.ContentResolver; +import android.content.Context; +import android.content.res.TypedArray; +import android.database.Cursor; +import android.graphics.*; +import android.graphics.Paint.Style; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Handler; +import android.provider.MediaStore; +import android.util.*; +import android.view.*; + +import androidx.annotation.*; +import androidx.exifinterface.media.ExifInterface; + +import com.davemorrissey.labs.subscaleview.decoder.ImageDecoder; +import com.davemorrissey.labs.subscaleview.decoder.*; +import com.github.adamantcheese.chan.R; +import com.github.adamantcheese.chan.utils.Logger; + +import java.lang.ref.WeakReference; +import java.util.*; +import java.util.concurrent.Executor; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +/** + *

+ * Displays an image subsampled as necessary to avoid loading too much image data into memory. After zooming in, + * a set of image tiles subsampled at higher resolution are loaded and displayed over the base layer. During pan and + * zoom, tiles off screen or higher/lower resolution than required are discarded from memory. + *

+ * Tiles are no larger than the max supported bitmap size, so with large images tiling may be used even when zoomed out. + *

+ * v prefixes - coordinates, translations and distances measured in screen (view) pixels + *
+ * s prefixes - coordinates, translations and distances measured in rotated and cropped source image pixels (scaled) + *
+ * f prefixes - coordinates, translations and distances measured in original unrotated, uncropped source file pixels + *

+ * View project on GitHub + *

+ * This code has been modified from the original source to include a single finger hold/second finger tap event to rotate the image by 90 + * degrees per tap event. Additionally, the preferred bitmap config is defaulted to ARGB_8888. And also the + * Logger logging resource class has been used in place of Android's Log. + *

+ */ +@SuppressWarnings("unused") +public class SubsamplingScaleImageView + extends View { + /** + * Attempt to use EXIF information on the image to rotate it. Works for external files only. + */ + public static final int ORIENTATION_USE_EXIF = -1; + /** + * Display the image file in its native orientation. + */ + public static final int ORIENTATION_0 = 0; + /** + * Rotate the image 90 degrees clockwise. + */ + public static final int ORIENTATION_90 = 90; + /** + * Rotate the image 180 degrees. + */ + public static final int ORIENTATION_180 = 180; + /** + * Rotate the image 270 degrees clockwise. + */ + public static final int ORIENTATION_270 = 270; + + private static final List VALID_ORIENTATIONS = + Arrays.asList(ORIENTATION_0, ORIENTATION_90, ORIENTATION_180, ORIENTATION_270, ORIENTATION_USE_EXIF); + + /** + * During zoom animation, keep the point of the image that was tapped in the same place, and scale the image around it. + */ + public static final int ZOOM_FOCUS_FIXED = 1; + /** + * During zoom animation, move the point of the image that was tapped to the center of the screen. + */ + public static final int ZOOM_FOCUS_CENTER = 2; + /** + * Zoom in to and center the tapped point immediately without animating. + */ + public static final int ZOOM_FOCUS_CENTER_IMMEDIATE = 3; + + private static final List VALID_ZOOM_STYLES = + Arrays.asList(ZOOM_FOCUS_FIXED, ZOOM_FOCUS_CENTER, ZOOM_FOCUS_CENTER_IMMEDIATE); + + /** + * Quadratic ease out. Not recommended for scale animation, but good for panning. + */ + public static final int EASE_OUT_QUAD = 1; + /** + * Quadratic ease in and out. + */ + public static final int EASE_IN_OUT_QUAD = 2; + + private static final List VALID_EASING_STYLES = Arrays.asList(EASE_IN_OUT_QUAD, EASE_OUT_QUAD); + + /** + * Don't allow the image to be panned off screen. As much of the image as possible is always displayed, centered in the view when it is smaller. This is the best option for galleries. + */ + public static final int PAN_LIMIT_INSIDE = 1; + /** + * Allows the image to be panned until it is just off screen, but no further. The edge of the image will stop when it is flush with the screen edge. + */ + public static final int PAN_LIMIT_OUTSIDE = 2; + /** + * Allows the image to be panned until a corner reaches the center of the screen but no further. Useful when you want to pan any spot on the image to the exact center of the screen. + */ + public static final int PAN_LIMIT_CENTER = 3; + + private static final List VALID_PAN_LIMITS = + Arrays.asList(PAN_LIMIT_INSIDE, PAN_LIMIT_OUTSIDE, PAN_LIMIT_CENTER); + + /** + * Scale the image so that both dimensions of the image will be equal to or less than the corresponding dimension of the view. The image is then centered in the view. This is the default behaviour and best for galleries. + */ + public static final int SCALE_TYPE_CENTER_INSIDE = 1; + /** + * Scale the image uniformly so that both dimensions of the image will be equal to or larger than the corresponding dimension of the view. The image is then centered in the view. + */ + public static final int SCALE_TYPE_CENTER_CROP = 2; + /** + * Scale the image so that both dimensions of the image will be equal to or less than the maxScale and equal to or larger than minScale. The image is then centered in the view. + */ + public static final int SCALE_TYPE_CUSTOM = 3; + /** + * Scale the image so that both dimensions of the image will be equal to or larger than the corresponding dimension of the view. The top left is shown. + */ + public static final int SCALE_TYPE_START = 4; + + private static final List VALID_SCALE_TYPES = + Arrays.asList(SCALE_TYPE_CENTER_CROP, SCALE_TYPE_CENTER_INSIDE, SCALE_TYPE_CUSTOM, SCALE_TYPE_START); + + /** + * State change originated from animation. + */ + public static final int ORIGIN_ANIM = 1; + /** + * State change originated from touch gesture. + */ + public static final int ORIGIN_TOUCH = 2; + /** + * State change originated from a fling momentum anim. + */ + public static final int ORIGIN_FLING = 3; + /** + * State change originated from a double tap zoom anim. + */ + public static final int ORIGIN_DOUBLE_TAP_ZOOM = 4; + + // Bitmap (preview or full image) + private Bitmap bitmap; + + // Whether the bitmap is a preview image + private boolean bitmapIsPreview; + + // Specifies if a cache handler is also referencing the bitmap. Do not recycle if so. + private boolean bitmapIsCached; + + // source of full size image + private ImageSource source; + + // Sample size used to display the whole image when fully zoomed out + private int fullImageSampleSize; + + // Map of zoom level to tile grid + private Map> tileMap; + + // Image orientation setting + private int orientation = ORIENTATION_0; + + // Max scale allowed (prevent infinite zoom) + private float maxScale = 2F; + + // Min scale allowed (prevent infinite zoom) + private float minScale = minScale(); + + // Density to reach before loading higher resolution tiles + private int minimumTileDpi = -1; + + // Pan limiting style + private int panLimit = PAN_LIMIT_INSIDE; + + // Minimum scale type + private int minimumScaleType = SCALE_TYPE_CENTER_INSIDE; + + // overrides for the dimensions of the generated tiles + public static final int TILE_SIZE_AUTO = Integer.MAX_VALUE; + private int maxTileWidth = TILE_SIZE_AUTO; + private int maxTileHeight = TILE_SIZE_AUTO; + + // An executor service for loading of images + private Executor executor = AsyncTask.THREAD_POOL_EXECUTOR; + + // Whether tiles should be loaded while gestures and animations are still in progress + private boolean eagerLoadingEnabled = true; + + // Gesture detection settings + private boolean panEnabled = true; + private boolean zoomEnabled = true; + private boolean quickScaleEnabled = true; + + // Double tap zoom behaviour + private float doubleTapZoomScale = 1F; + private int doubleTapZoomStyle = ZOOM_FOCUS_FIXED; + private int doubleTapZoomDuration = 500; + + // Current scale and scale at start of zoom + private float scale; + private float scaleStart; + + // Screen coordinate of top-left corner of source image + private PointF vTranslate; + private PointF vTranslateStart; + private PointF vTranslateBefore; + + // Source coordinate to center on, used when new position is set externally before view is ready + private Float pendingScale; + private PointF sPendingCenter; + private PointF sRequestedCenter; + + // Source image dimensions and orientation - dimensions relate to the unrotated image + private int sOrientation; + private Rect pRegion; + + // Is two-finger zooming in progress + private boolean isZooming; + // Is one-finger panning in progress + private boolean isPanning; + // Is quick-scale gesture in progress + private boolean isQuickScaling; + // Max touches used in current gesture + private int maxTouchCount; + + // Fling detector + private GestureDetector detector; + private GestureDetector singleDetector; + + // Tile and image decoding + private ImageRegionDecoder decoder; + private final ReadWriteLock decoderLock = new ReentrantReadWriteLock(true); + private DecoderFactory bitmapDecoderFactory = + new CompatDecoderFactory(SkiaImageDecoder.class); + private DecoderFactory regionDecoderFactory = + new CompatDecoderFactory(SkiaImageRegionDecoder.class); + + // Debug values + private PointF vCenterStart; + private float vDistStart; + + // Current quickscale state + private final float quickScaleThreshold; + private float quickScaleLastDistance; + private boolean quickScaleMoved; + private PointF quickScaleVLastPoint; + private PointF quickScaleSCenter; + private PointF quickScaleVStart; + + // Scale and center animation tracking + private Anim anim; + + // Whether a ready notification has been sent to subclasses + private boolean readySent; + // Whether a base layer loaded notification has been sent to subclasses + private boolean imageLoadedSent; + + // Event listener + private OnImageEventListener onImageEventListener; + + // Scale and center listener + private OnStateChangedListener onStateChangedListener; + + // Long click listener + private OnLongClickListener onLongClickListener; + + // Long click handler + private final Handler handler; + private static final int MESSAGE_LONG_CLICK = 1; + + // Paint objects created once and reused for efficiency + private Paint bitmapPaint; + private Paint tileBgPaint; + + // Volatile fields used to reduce object creation + private ScaleAndTranslate satTemp; + private Matrix matrix; + private RectF sRect; + private final float[] srcArray = new float[8]; + private final float[] dstArray = new float[8]; + + //The logical density of the display + private final float density; + + // A global preference for bitmap format, available to decoder classes that respect it; defaulted to ARGB_8888 + private static Bitmap.Config preferredBitmapConfig = Bitmap.Config.ARGB_8888; + + public SubsamplingScaleImageView(Context context, AttributeSet attr) { + super(context, attr); + density = getResources().getDisplayMetrics().density; + setMinimumDpi(160); + setDoubleTapZoomDpi(160); + setMinimumTileDpi(320); + setGestureDetector(context); + this.handler = new Handler(message -> { + if (message.what == MESSAGE_LONG_CLICK && onLongClickListener != null) { + maxTouchCount = 0; + SubsamplingScaleImageView.super.setOnLongClickListener(onLongClickListener); + performLongClick(); + SubsamplingScaleImageView.super.setOnLongClickListener(null); + } + return true; + }); + // Handle XML attributes + if (attr != null) { + TypedArray typedAttr = getContext().obtainStyledAttributes(attr, R.styleable.SubsamplingScaleImageView); + if (typedAttr.hasValue(R.styleable.SubsamplingScaleImageView_assetName)) { + String assetName = typedAttr.getString(R.styleable.SubsamplingScaleImageView_assetName); + if (assetName != null && assetName.length() > 0) { + setImage(ImageSource.asset(assetName).tilingEnabled()); + } + } + if (typedAttr.hasValue(R.styleable.SubsamplingScaleImageView_src)) { + int resId = typedAttr.getResourceId(R.styleable.SubsamplingScaleImageView_src, 0); + if (resId > 0) { + setImage(ImageSource.resource(context, resId).tilingEnabled()); + } + } + if (typedAttr.hasValue(R.styleable.SubsamplingScaleImageView_panEnabled)) { + setPanEnabled(typedAttr.getBoolean(R.styleable.SubsamplingScaleImageView_panEnabled, true)); + } + if (typedAttr.hasValue(R.styleable.SubsamplingScaleImageView_zoomEnabled)) { + this.zoomEnabled = typedAttr.getBoolean(R.styleable.SubsamplingScaleImageView_zoomEnabled, true); + } + if (typedAttr.hasValue(R.styleable.SubsamplingScaleImageView_quickScaleEnabled)) { + this.quickScaleEnabled = + typedAttr.getBoolean(R.styleable.SubsamplingScaleImageView_quickScaleEnabled, true); + } + if (typedAttr.hasValue(R.styleable.SubsamplingScaleImageView_tileBackgroundColor)) { + setTileBackgroundColor(typedAttr.getColor(R.styleable.SubsamplingScaleImageView_tileBackgroundColor, + Color.argb(0, 0, 0, 0) + )); + } + typedAttr.recycle(); + } + + quickScaleThreshold = + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, context.getResources().getDisplayMetrics()); + } + + public SubsamplingScaleImageView(Context context) { + this(context, null); + } + + /** + * Get the current preferred configuration for decoding bitmaps. {@link ImageDecoder} and {@link ImageRegionDecoder} + * instances can read this and use it when decoding images. + * + * @return the preferred bitmap configuration, or null if none has been set. + */ + public static Bitmap.Config getPreferredBitmapConfig() { + return preferredBitmapConfig; + } + + /** + * Set a global preferred bitmap config shared by all view instances and applied to new instances + * initialised after the call is made. This is a hint only; the bundled {@link ImageDecoder} and + * {@link ImageRegionDecoder} classes all respect this (except when they were constructed with + * an instance-specific config) but custom decoder classes will not. + * + * @param preferredBitmapConfig the bitmap configuration to be used by future instances of the view. Pass null to restore the default. + */ + public static void setPreferredBitmapConfig(Bitmap.Config preferredBitmapConfig) { + SubsamplingScaleImageView.preferredBitmapConfig = preferredBitmapConfig; + } + + /** + * Sets the image orientation. It's best to call this before setting the image file or asset, because it may waste + * loading of tiles. However, this can be freely called at any time. + * + * @param orientation orientation to be set. See ORIENTATION_ static fields for valid values. This function allows for any 90 degree increment however. + */ + public final void setOrientation(int orientation) { + if (orientation % 90 != 0 && orientation != ORIENTATION_USE_EXIF) + throw new IllegalArgumentException("Invalid orientation: " + orientation); + // adjust to within bounds + if (orientation != ORIENTATION_USE_EXIF) { + while (orientation < 0) { + orientation = 360 + orientation; + } + while (orientation >= 360) { + orientation = orientation - 360; + } + } + this.orientation = orientation; + reset(false); + invalidate(); + requestLayout(); + } + + /** + * Set the image source from a bitmap, resource, asset, file or other URI. + * + * @param imageSource Image source. + */ + public final void setImage(@NonNull ImageSource imageSource) { + setImage(imageSource, null, null); + } + + /** + * Set the image source from a bitmap, resource, asset, file or other URI, starting with a given orientation + * setting, scale and center. This is the best method to use when you want scale and center to be restored + * after screen orientation change; it avoids any redundant loading of tiles in the wrong orientation. + * + * @param imageSource Image source. + * @param state State to be restored. Nullable. + */ + public final void setImage(@NonNull ImageSource imageSource, ImageViewState state) { + setImage(imageSource, null, state); + } + + /** + * Set the image source from a bitmap, resource, asset, file or other URI, providing a preview image to be + * displayed until the full size image is loaded. + *

+ * You must declare the dimensions of the full size image by calling {@link ImageSource#dimensions(int, int)} + * on the imageSource object. The preview source will be ignored if you don't provide dimensions, + * and if you provide a bitmap for the full size image. + * + * @param imageSource Image source. Dimensions must be declared. + * @param previewSource Optional source for a preview image to be displayed and allow interaction while the full size image loads. + */ + public final void setImage(@NonNull ImageSource imageSource, ImageSource previewSource) { + setImage(imageSource, previewSource, null); + } + + /** + * Set the image source from a bitmap, resource, asset, file or other URI, providing a preview image to be + * displayed until the full size image is loaded, starting with a given orientation setting, scale and center. + * This is the best method to use when you want scale and center to be restored after screen orientation change; + * it avoids any redundant loading of tiles in the wrong orientation. + *

+ * You must declare the dimensions of the full size image by calling {@link ImageSource#dimensions(int, int)} + * on the imageSource object. The preview source will be ignored if you don't provide dimensions, + * and if you provide a bitmap for the full size image. + * + * @param imageSource Image source. Dimensions must be declared. + * @param previewSource Optional source for a preview image to be displayed and allow interaction while the full size image loads. + * @param state State to be restored. Nullable. + */ + public final void setImage(@NonNull ImageSource imageSource, ImageSource previewSource, ImageViewState state) { + if (imageSource == null) { + throw new NullPointerException("imageSource must not be null"); + } + + reset(true); + if (state != null) {restoreState(state);} + + if (previewSource != null) { + if (imageSource.getBitmap() != null) { + throw new IllegalArgumentException( + "Preview image cannot be used when a bitmap is provided for the main image"); + } + if (imageSource.getSWidth() <= 0 || imageSource.getSHeight() <= 0) { + throw new IllegalArgumentException( + "Preview image cannot be used unless dimensions are provided for the main image"); + } + this.pRegion = previewSource.getSRegion(); + if (previewSource.getBitmap() != null) { + this.bitmapIsCached = previewSource.isCached(); + onPreviewLoaded(previewSource.getBitmap()); + } else { + BitmapLoadTask task = new BitmapLoadTask(this, getContext(), bitmapDecoderFactory, previewSource, true); + execute(task); + } + } + + source = imageSource; + + if (imageSource.getBitmap() != null && imageSource.getSRegion() != null) { + onImageLoaded(Bitmap.createBitmap(imageSource.getBitmap(), + imageSource.getSRegion().left, + imageSource.getSRegion().top, + imageSource.getSRegion().width(), + imageSource.getSRegion().height() + ), ORIENTATION_0, false); + } else if (imageSource.getBitmap() != null) { + onImageLoaded(imageSource.getBitmap(), ORIENTATION_0, imageSource.isCached()); + } else { + if (imageSource.getTile() || imageSource.getSRegion() != null) { + // Load the bitmap using tile decoding. + TilesInitTask task = new TilesInitTask(this, getContext(), regionDecoderFactory, imageSource); + execute(task); + } else { + // Load the bitmap as a single image. + BitmapLoadTask task = new BitmapLoadTask(this, getContext(), bitmapDecoderFactory, imageSource, false); + execute(task); + } + } + } + + /** + * Reset all state before setting/changing image or setting new rotation. + */ + private void reset(boolean newImage) { + scale = 0f; + scaleStart = 0f; + vTranslate = null; + vTranslateStart = null; + vTranslateBefore = null; + pendingScale = 0f; + sPendingCenter = null; + sRequestedCenter = null; + isZooming = false; + isPanning = false; + isQuickScaling = false; + maxTouchCount = 0; + fullImageSampleSize = 0; + vCenterStart = null; + vDistStart = 0; + quickScaleLastDistance = 0f; + quickScaleMoved = false; + quickScaleSCenter = null; + quickScaleVLastPoint = null; + quickScaleVStart = null; + anim = null; + satTemp = null; + matrix = null; + sRect = null; + if (newImage) { + if (source != null) { + source.clearBuffer(); + } + source = null; + decoderLock.writeLock().lock(); + try { + if (decoder != null) { + decoder.recycle(); + decoder = null; + } + } finally { + decoderLock.writeLock().unlock(); + } + if (bitmap != null && !bitmapIsCached) { + bitmap.recycle(); + } + if (bitmap != null && bitmapIsCached && onImageEventListener != null) { + onImageEventListener.onPreviewReleased(); + } + sOrientation = 0; + pRegion = null; + readySent = false; + imageLoadedSent = false; + bitmap = null; + bitmapIsPreview = false; + bitmapIsCached = false; + } + if (tileMap != null) { + for (Map.Entry> tileMapEntry : tileMap.entrySet()) { + for (Tile tile : tileMapEntry.getValue()) { + tile.visible = false; + if (tile.bitmap != null) { + tile.bitmap.recycle(); + tile.bitmap = null; + } + } + } + tileMap = null; + } + setGestureDetector(getContext()); + } + + private void setGestureDetector(final Context context) { + this.detector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + if (panEnabled && readySent && vTranslate != null && e1 != null && e2 != null && (Math.abs(e1.getX() + - e2.getX()) > 50 || Math.abs(e1.getY() - e2.getY()) > 50) && (Math.abs(velocityX) > 500 + || Math.abs(velocityY) > 500) && !isZooming) { + PointF vTranslateEnd = + new PointF(vTranslate.x + (velocityX * 0.25f), vTranslate.y + (velocityY * 0.25f)); + float sCenterXEnd = ((getWidth() / 2.0f) - vTranslateEnd.x) / scale; + float sCenterYEnd = ((getHeight() / 2.0f) - vTranslateEnd.y) / scale; + new AnimationBuilder(new PointF(sCenterXEnd, sCenterYEnd)) + .withEasing(EASE_OUT_QUAD) + .withPanLimited() + .withOrigin(ORIGIN_FLING) + .start(); + return true; + } + return super.onFling(e1, e2, velocityX, velocityY); + } + + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + performClick(); + return true; + } + + @Override + public boolean onDoubleTap(MotionEvent e) { + if (zoomEnabled && readySent && vTranslate != null) { + // Hacky solution for #15 - after a double tap the GestureDetector gets in a state + // where the next fling is ignored, so here we replace it with a new one. + setGestureDetector(context); + if (quickScaleEnabled) { + // Store quick scale params. This will become either a double tap zoom or a + // quick scale depending on whether the user swipes. + vCenterStart = new PointF(e.getX(), e.getY()); + vTranslateStart = new PointF(vTranslate.x, vTranslate.y); + scaleStart = scale; + isQuickScaling = true; + isZooming = true; + quickScaleLastDistance = -1F; + quickScaleSCenter = viewToSourceCoord(vCenterStart); + quickScaleVStart = new PointF(e.getX(), e.getY()); + quickScaleVLastPoint = new PointF(quickScaleSCenter.x, quickScaleSCenter.y); + quickScaleMoved = false; + // We need to get events in onTouchEvent after this. + return false; + } else { + // Start double tap zoom animation. + doubleTapZoom(viewToSourceCoord(new PointF(e.getX(), e.getY())), + new PointF(e.getX(), e.getY()) + ); + return true; + } + } + return super.onDoubleTapEvent(e); + } + }); + + singleDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + performClick(); + return true; + } + }); + } + + /** + * On resize, preserve center and scale. Various behaviours are possible, override this method to use another. + */ + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + PointF sCenter = getCenter(); + if (readySent && sCenter != null) { + this.anim = null; + this.pendingScale = scale; + this.sPendingCenter = sCenter; + } + } + + /** + * Measures the width and height of the view, preserving the aspect ratio of the image displayed if wrap_content is + * used. The image will scale within this box, not resizing the view as it is zoomed. + */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec); + int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); + int parentWidth = MeasureSpec.getSize(widthMeasureSpec); + int parentHeight = MeasureSpec.getSize(heightMeasureSpec); + boolean resizeWidth = widthSpecMode != MeasureSpec.EXACTLY; + boolean resizeHeight = heightSpecMode != MeasureSpec.EXACTLY; + int width = parentWidth; + int height = parentHeight; + if (source != null && source.getSWidth() > 0 && source.getSHeight() > 0) { + if (resizeWidth && resizeHeight) { + width = sWidth(); + height = sHeight(); + } else if (resizeHeight) { + height = (int) ((((double) sHeight() / (double) sWidth()) * width)); + } else if (resizeWidth) { + width = (int) ((((double) sWidth() / (double) sHeight()) * height)); + } + } + width = Math.max(width, getSuggestedMinimumWidth()); + height = Math.max(height, getSuggestedMinimumHeight()); + setMeasuredDimension(width, height); + } + + /** + * Handle touch events. One finger pans, and two finger pinch and zoom plus panning. + */ + @Override + public boolean onTouchEvent(@NonNull MotionEvent event) { + // During non-interruptible anims, ignore all touch events + if (anim != null && !anim.interruptible) { + requestDisallowInterceptTouchEvent(true); + return true; + } else { + if (anim != null && anim.listener != null) { + try { + anim.listener.onInterruptedByUser(); + } catch (Exception e) { + Logger.w(this, "Error thrown by animation listener", e); + } + } + anim = null; + } + + // Abort if not ready + if (vTranslate == null) { + if (singleDetector != null) { + singleDetector.onTouchEvent(event); + } + return true; + } + // Detect flings, taps and double taps + if (!isQuickScaling && (detector == null || detector.onTouchEvent(event))) { + isZooming = false; + isPanning = false; + maxTouchCount = 0; + return true; + } + + if (vTranslateStart == null) {vTranslateStart = new PointF(0, 0);} + if (vTranslateBefore == null) {vTranslateBefore = new PointF(0, 0);} + if (vCenterStart == null) {vCenterStart = new PointF(0, 0);} + + // Store current values so we can send an event if they change + float scaleBefore = scale; + vTranslateBefore.set(vTranslate); + + boolean handled = onTouchEventInternal(event); + sendStateChanged(scaleBefore, vTranslateBefore, ORIGIN_TOUCH); + return handled || super.onTouchEvent(event); + } + + @SuppressWarnings("deprecation") + private boolean onTouchEventInternal(@NonNull MotionEvent event) { + int touchCount = event.getPointerCount(); + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + case MotionEvent.ACTION_POINTER_1_DOWN: + case MotionEvent.ACTION_POINTER_2_DOWN: + anim = null; + requestDisallowInterceptTouchEvent(true); + maxTouchCount = Math.max(maxTouchCount, touchCount); + if (touchCount >= 2) { + if (zoomEnabled) { + // Start pinch to zoom. Calculate distance between touch points and center point of the pinch. + float distance = distance(event.getX(0), event.getX(1), event.getY(0), event.getY(1)); + scaleStart = scale; + vDistStart = distance; + vTranslateStart.set(vTranslate.x, vTranslate.y); + vCenterStart.set((event.getX(0) + event.getX(1)) / 2, (event.getY(0) + event.getY(1)) / 2); + } else { + // Abort all gestures on second touch + maxTouchCount = 0; + } + // Cancel long click timer + handler.removeMessages(MESSAGE_LONG_CLICK); + } else if (!isQuickScaling) { + // Start one-finger pan + vTranslateStart.set(vTranslate.x, vTranslate.y); + vCenterStart.set(event.getX(), event.getY()); + + // Start long click timer + handler.sendEmptyMessageDelayed(MESSAGE_LONG_CLICK, 600); + } + return true; + case MotionEvent.ACTION_MOVE: + boolean consumed = false; + if (maxTouchCount > 0) { + if (touchCount >= 2) { + // Calculate new distance between touch points, to scale and pan relative to start values. + float vDistEnd = distance(event.getX(0), event.getX(1), event.getY(0), event.getY(1)); + float vCenterEndX = (event.getX(0) + event.getX(1)) / 2; + float vCenterEndY = (event.getY(0) + event.getY(1)) / 2; + + if (zoomEnabled && (distance(vCenterStart.x, vCenterEndX, vCenterStart.y, vCenterEndY) > 5 + || Math.abs(vDistEnd - vDistStart) > 5 + || isPanning)) { + isZooming = true; + isPanning = true; + consumed = true; + + double previousScale = scale; + scale = Math.min(maxScale, (vDistEnd / vDistStart) * scaleStart); + + if (scale <= minScale()) { + // Minimum scale reached so don't pan. Adjust start settings so any expand will zoom in. + vDistStart = vDistEnd; + scaleStart = minScale(); + vCenterStart.set(vCenterEndX, vCenterEndY); + vTranslateStart.set(vTranslate); + } else if (panEnabled) { + // Translate to place the source image coordinate that was at the center of the pinch at the start + // at the center of the pinch now, to give simultaneous pan + zoom. + float vLeftStart = vCenterStart.x - vTranslateStart.x; + float vTopStart = vCenterStart.y - vTranslateStart.y; + float vLeftNow = vLeftStart * (scale / scaleStart); + float vTopNow = vTopStart * (scale / scaleStart); + vTranslate.x = vCenterEndX - vLeftNow; + vTranslate.y = vCenterEndY - vTopNow; + if ((previousScale * sHeight() < getHeight() && scale * sHeight() >= getHeight()) || ( + previousScale * sWidth() < getWidth() + && scale * sWidth() >= getWidth())) { + fitToBounds(true); + vCenterStart.set(vCenterEndX, vCenterEndY); + vTranslateStart.set(vTranslate); + scaleStart = scale; + vDistStart = vDistEnd; + } + } else if (sRequestedCenter != null) { + // With a center specified from code, zoom around that point. + vTranslate.x = (getWidth() / 2.0f) - (scale * sRequestedCenter.x); + vTranslate.y = (getHeight() / 2.0f) - (scale * sRequestedCenter.y); + } else { + // With no requested center, scale around the image center. + vTranslate.x = (getWidth() / 2.0f) - (scale * (sWidth() / 2.0f)); + vTranslate.y = (getHeight() / 2.0f) - (scale * (sHeight() / 2.0f)); + } + + fitToBounds(true); + refreshRequiredTiles(eagerLoadingEnabled); + } + } else if (isQuickScaling) { + // One finger zoom + // Stole Google's Magical Formula™ to make sure it feels the exact same + float dist = Math.abs(quickScaleVStart.y - event.getY()) * 2 + quickScaleThreshold; + + if (quickScaleLastDistance == -1f) { + quickScaleLastDistance = dist; + } + boolean isUpwards = event.getY() > quickScaleVLastPoint.y; + quickScaleVLastPoint.set(0, event.getY()); + + float spanDiff = Math.abs(1 - (dist / quickScaleLastDistance)) * 0.5f; + + if (spanDiff > 0.03f || quickScaleMoved) { + quickScaleMoved = true; + + float multiplier = 1; + if (quickScaleLastDistance > 0) { + multiplier = isUpwards ? (1 + spanDiff) : (1 - spanDiff); + } + + double previousScale = scale; + scale = Math.max(minScale(), Math.min(maxScale, scale * multiplier)); + + if (panEnabled) { + float vLeftStart = vCenterStart.x - vTranslateStart.x; + float vTopStart = vCenterStart.y - vTranslateStart.y; + float vLeftNow = vLeftStart * (scale / scaleStart); + float vTopNow = vTopStart * (scale / scaleStart); + vTranslate.x = vCenterStart.x - vLeftNow; + vTranslate.y = vCenterStart.y - vTopNow; + if ((previousScale * sHeight() < getHeight() && scale * sHeight() >= getHeight()) || ( + previousScale * sWidth() < getWidth() + && scale * sWidth() >= getWidth())) { + fitToBounds(true); + vCenterStart.set(sourceToViewCoord(quickScaleSCenter)); + vTranslateStart.set(vTranslate); + scaleStart = scale; + dist = 0; + } + } else if (sRequestedCenter != null) { + // With a center specified from code, zoom around that point. + vTranslate.x = (getWidth() / 2.0f) - (scale * sRequestedCenter.x); + vTranslate.y = (getHeight() / 2.0f) - (scale * sRequestedCenter.y); + } else { + // With no requested center, scale around the image center. + vTranslate.x = (getWidth() / 2.0f) - (scale * (sWidth() / 2.0f)); + vTranslate.y = (getHeight() / 2.0f) - (scale * (sHeight() / 2.0f)); + } + } + + quickScaleLastDistance = dist; + + fitToBounds(true); + refreshRequiredTiles(eagerLoadingEnabled); + + consumed = true; + } else if (!isZooming) { + // One finger pan - translate the image. We do this calculation even with pan disabled so click + // and long click behaviour is preserved. + float dx = Math.abs(event.getX() - vCenterStart.x); + float dy = Math.abs(event.getY() - vCenterStart.y); + + //On the Samsung S6 long click event does not work, because the dx > 5 usually true + float offset = density * 5; + if (dx > offset || dy > offset || isPanning) { + consumed = true; + vTranslate.x = vTranslateStart.x + (event.getX() - vCenterStart.x); + vTranslate.y = vTranslateStart.y + (event.getY() - vCenterStart.y); + + float lastX = vTranslate.x; + float lastY = vTranslate.y; + fitToBounds(true); + boolean atXEdge = lastX != vTranslate.x; + boolean atYEdge = lastY != vTranslate.y; + boolean edgeXSwipe = atXEdge && dx > dy && !isPanning; + boolean edgeYSwipe = atYEdge && dy > dx && !isPanning; + boolean yPan = lastY == vTranslate.y && dy > offset * 3; + if (!edgeXSwipe && !edgeYSwipe && (!atXEdge || !atYEdge || yPan || isPanning)) { + isPanning = true; + } else if (dx > offset || dy > offset) { + // Haven't panned the image, and we're at the left or right edge. Switch to page swipe. + maxTouchCount = 0; + handler.removeMessages(MESSAGE_LONG_CLICK); + requestDisallowInterceptTouchEvent(false); + } + if (!panEnabled) { + vTranslate.x = vTranslateStart.x; + vTranslate.y = vTranslateStart.y; + requestDisallowInterceptTouchEvent(false); + } + + refreshRequiredTiles(eagerLoadingEnabled); + } + } + } + if (consumed) { + handler.removeMessages(MESSAGE_LONG_CLICK); + invalidate(); + return true; + } + break; + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_POINTER_UP: + case MotionEvent.ACTION_POINTER_2_UP: + handler.removeMessages(MESSAGE_LONG_CLICK); + if (isQuickScaling) { + isQuickScaling = false; + if (!quickScaleMoved) { + doubleTapZoom(quickScaleSCenter, vCenterStart); + } + } + if (maxTouchCount > 0 && (isZooming || isPanning)) { + if (isZooming && touchCount == 2) { + // Convert from zoom to pan with remaining touch + isPanning = true; + vTranslateStart.set(vTranslate.x, vTranslate.y); + if (event.getActionIndex() == 1) { + vCenterStart.set(event.getX(0), event.getY(0)); + } else { + vCenterStart.set(event.getX(1), event.getY(1)); + } + } + if (touchCount < 3) { + // End zooming when only one touch point + isZooming = false; + } + if (touchCount < 2) { + // End panning when no touch points + isPanning = false; + maxTouchCount = 0; + } + // Trigger load of tiles now required + refreshRequiredTiles(true); + return true; + } + if (touchCount == 2 && !isPanning) { + // Perform rotate 90 degree action; set scale back to default and center + // Direction is based on where the first and second fingers are positioned relative to each other + // Tap left side of the first tap to rotate clockwise, right to rotate counterclockwise + float scaleX = getWidth() / (float) getSWidth(); + float scaleY = getHeight() / (float) getSHeight(); + setScaleAndCenter(getAppliedOrientation() % 180 == 0 ? scaleY : scaleX, getCenter()); + setOrientation((getAppliedOrientation() + (event.getX(0) > event.getX(1) ? 90 : -90)) % 360); + } + if (touchCount == 1) { + isZooming = false; + isPanning = false; + maxTouchCount = 0; + } + return true; + } + return false; + } + + private void requestDisallowInterceptTouchEvent(boolean disallowIntercept) { + ViewParent parent = getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(disallowIntercept); + } + } + + /** + * Double tap zoom handler triggered from gesture detector or on touch, depending on whether + * quick scale is enabled. + */ + private void doubleTapZoom(PointF sCenter, PointF vFocus) { + if (!panEnabled) { + if (sRequestedCenter != null) { + // With a center specified from code, zoom around that point. + sCenter.x = sRequestedCenter.x; + sCenter.y = sRequestedCenter.y; + } else { + // With no requested center, scale around the image center. + sCenter.x = sWidth() / 2.0f; + sCenter.y = sHeight() / 2.0f; + } + } + float doubleTapZoomScale = Math.min(maxScale, SubsamplingScaleImageView.this.doubleTapZoomScale); + boolean zoomIn = (scale <= doubleTapZoomScale * 0.9) || scale == minScale; + float targetScale = zoomIn ? doubleTapZoomScale : minScale(); + if (doubleTapZoomStyle == ZOOM_FOCUS_CENTER_IMMEDIATE) { + setScaleAndCenter(targetScale, sCenter); + } else if (doubleTapZoomStyle == ZOOM_FOCUS_CENTER || !zoomIn || !panEnabled) { + new AnimationBuilder(targetScale, sCenter) + .withInterruptible(false) + .withDuration(doubleTapZoomDuration) + .withOrigin(ORIGIN_DOUBLE_TAP_ZOOM) + .start(); + } else if (doubleTapZoomStyle == ZOOM_FOCUS_FIXED) { + new AnimationBuilder(targetScale, sCenter, vFocus) + .withInterruptible(false) + .withDuration(doubleTapZoomDuration) + .withOrigin(ORIGIN_DOUBLE_TAP_ZOOM) + .start(); + } + invalidate(); + } + + /** + * Draw method should not be called until the view has dimensions so the first calls are used as triggers to calculate + * the scaling and tiling required. Once the view is setup, tiles are displayed as they are loaded. + */ + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + createPaints(); + + // If image or view dimensions are not known yet, abort. + if (source == null + || source.getSWidth() == 0 + || source.getSHeight() == 0 + || getWidth() == 0 + || getHeight() == 0) { + return; + } + + // When using tiles, on first render with no tile map ready, initialise it and kick off async base image loading. + if (tileMap == null && decoder != null) { + initialiseBaseLayer(getMaxBitmapDimensions(canvas)); + } + + // If image has been loaded or supplied as a bitmap, onDraw may be the first time the view has + // dimensions and therefore the first opportunity to set scale and translate. If this call returns + // false there is nothing to be drawn so return immediately. + if (!checkReady()) { + return; + } + + // Set scale and translate before draw. + preDraw(); + + // If animating scale, calculate current scale and center with easing equations + if (anim != null && anim.vFocusStart != null) { + // Store current values so we can send an event if they change + float scaleBefore = scale; + if (vTranslateBefore == null) {vTranslateBefore = new PointF(0, 0);} + vTranslateBefore.set(vTranslate); + + long scaleElapsed = System.currentTimeMillis() - anim.time; + boolean finished = scaleElapsed > anim.duration; + scaleElapsed = Math.min(scaleElapsed, anim.duration); + scale = ease(anim.easing, scaleElapsed, anim.scaleStart, anim.scaleEnd - anim.scaleStart, anim.duration); + + // Apply required animation to the focal point + float vFocusNowX = ease(anim.easing, + scaleElapsed, + anim.vFocusStart.x, + anim.vFocusEnd.x - anim.vFocusStart.x, + anim.duration + ); + float vFocusNowY = ease(anim.easing, + scaleElapsed, + anim.vFocusStart.y, + anim.vFocusEnd.y - anim.vFocusStart.y, + anim.duration + ); + // Find out where the focal point is at this scale and adjust its position to follow the animation path + vTranslate.x -= sourceToViewX(anim.sCenterEnd.x) - vFocusNowX; + vTranslate.y -= sourceToViewY(anim.sCenterEnd.y) - vFocusNowY; + + // For translate anims, showing the image non-centered is never allowed, for scaling anims it is during the animation. + fitToBounds(finished || (anim.scaleStart == anim.scaleEnd)); + sendStateChanged(scaleBefore, vTranslateBefore, anim.origin); + refreshRequiredTiles(finished); + if (finished) { + if (anim.listener != null) { + try { + anim.listener.onComplete(); + } catch (Exception e) { + Logger.w(this, "Error thrown by animation listener", e); + } + } + anim = null; + } + invalidate(); + } + + if (tileMap != null && isBaseLayerReady()) { + + // Optimum sample size for current scale + int sampleSize = Math.min(fullImageSampleSize, calculateInSampleSize(scale)); + + // First check for missing tiles - if there are any we need the base layer underneath to avoid gaps + boolean hasMissingTiles = false; + for (Map.Entry> tileMapEntry : tileMap.entrySet()) { + if (tileMapEntry.getKey() == sampleSize) { + for (Tile tile : tileMapEntry.getValue()) { + if (tile.visible && (tile.loading || tile.bitmap == null)) { + hasMissingTiles = true; + break; + } + } + } + } + + // Render all loaded tiles. LinkedHashMap used for bottom up rendering - lower res tiles underneath. + for (Map.Entry> tileMapEntry : tileMap.entrySet()) { + if (tileMapEntry.getKey() == sampleSize || hasMissingTiles) { + for (Tile tile : tileMapEntry.getValue()) { + sourceToViewRect(tile.sRect, tile.vRect); + if (!tile.loading && tile.bitmap != null) { + if (tileBgPaint != null) { + canvas.drawRect(tile.vRect, tileBgPaint); + } + if (matrix == null) {matrix = new Matrix();} + matrix.reset(); + setMatrixArray(srcArray, + 0, + 0, + tile.bitmap.getWidth(), + 0, + tile.bitmap.getWidth(), + tile.bitmap.getHeight(), + 0, + tile.bitmap.getHeight() + ); + if (getRequiredRotation() == ORIENTATION_0) { + setMatrixArray(dstArray, + tile.vRect.left, + tile.vRect.top, + tile.vRect.right, + tile.vRect.top, + tile.vRect.right, + tile.vRect.bottom, + tile.vRect.left, + tile.vRect.bottom + ); + } else if (getRequiredRotation() == ORIENTATION_90) { + setMatrixArray(dstArray, + tile.vRect.right, + tile.vRect.top, + tile.vRect.right, + tile.vRect.bottom, + tile.vRect.left, + tile.vRect.bottom, + tile.vRect.left, + tile.vRect.top + ); + } else if (getRequiredRotation() == ORIENTATION_180) { + setMatrixArray(dstArray, + tile.vRect.right, + tile.vRect.bottom, + tile.vRect.left, + tile.vRect.bottom, + tile.vRect.left, + tile.vRect.top, + tile.vRect.right, + tile.vRect.top + ); + } else if (getRequiredRotation() == ORIENTATION_270) { + setMatrixArray(dstArray, + tile.vRect.left, + tile.vRect.bottom, + tile.vRect.left, + tile.vRect.top, + tile.vRect.right, + tile.vRect.top, + tile.vRect.right, + tile.vRect.bottom + ); + } + matrix.setPolyToPoly(srcArray, 0, dstArray, 0, 4); + canvas.drawBitmap(tile.bitmap, matrix, bitmapPaint); + } + } + } + } + } else if (bitmap != null && !bitmap.isRecycled()) { + int sWidth = source == null ? 0 : source.getSWidth(); + int sHeight = source == null ? 0 : source.getSHeight(); + + float xScale = scale, yScale = scale; + if (bitmapIsPreview) { + xScale = scale * ((float) sWidth / bitmap.getWidth()); + yScale = scale * ((float) sHeight / bitmap.getHeight()); + } + + if (matrix == null) {matrix = new Matrix();} + matrix.reset(); + matrix.postScale(xScale, yScale); + matrix.postRotate(getRequiredRotation()); + matrix.postTranslate(vTranslate.x, vTranslate.y); + + if (getRequiredRotation() == ORIENTATION_180) { + matrix.postTranslate(scale * sWidth, scale * sHeight); + } else if (getRequiredRotation() == ORIENTATION_90) { + matrix.postTranslate(scale * sHeight, 0); + } else if (getRequiredRotation() == ORIENTATION_270) { + matrix.postTranslate(0, scale * sWidth); + } + + if (tileBgPaint != null) { + if (sRect == null) {sRect = new RectF();} + sRect.set(0f, + 0f, + bitmapIsPreview ? bitmap.getWidth() : sWidth, + bitmapIsPreview ? bitmap.getHeight() : sHeight + ); + matrix.mapRect(sRect); + canvas.drawRect(sRect, tileBgPaint); + } + canvas.drawBitmap(bitmap, matrix, bitmapPaint); + } + } + + /** + * Helper method for setting the values of a tile matrix array. + */ + private static void setMatrixArray( + float[] array, float f0, float f1, float f2, float f3, float f4, float f5, float f6, float f7 + ) { + array[0] = f0; + array[1] = f1; + array[2] = f2; + array[3] = f3; + array[4] = f4; + array[5] = f5; + array[6] = f6; + array[7] = f7; + } + + /** + * Checks whether the base layer of tiles or full size bitmap is ready. + */ + private boolean isBaseLayerReady() { + if (bitmap != null && !bitmapIsPreview) { + return true; + } else if (tileMap != null) { + boolean baseLayerReady = true; + for (Map.Entry> tileMapEntry : tileMap.entrySet()) { + if (tileMapEntry.getKey() == fullImageSampleSize) { + for (Tile tile : tileMapEntry.getValue()) { + if (tile.loading || tile.bitmap == null) { + baseLayerReady = false; + break; + } + } + } + } + return baseLayerReady; + } + return false; + } + + /** + * Check whether view and image dimensions are known and either a preview, full size image or + * base layer tiles are loaded. First time, send ready event to listener. The next draw will + * display an image. + */ + private boolean checkReady() { + boolean ready = getWidth() > 0 + && getHeight() > 0 + && source != null + && source.getSWidth() > 0 + && source.getSHeight() > 0 + && (bitmap != null || isBaseLayerReady()); + if (!readySent && ready) { + preDraw(); + readySent = true; + onReady(); + if (onImageEventListener != null) { + onImageEventListener.onReady(); + } + } + return ready; + } + + /** + * Check whether either the full size bitmap or base layer tiles are loaded. First time, send image + * loaded event to listener. + */ + private boolean checkImageLoaded() { + boolean imageLoaded = isBaseLayerReady(); + if (!imageLoadedSent && imageLoaded) { + preDraw(); + imageLoadedSent = true; + onImageLoaded(); + if (onImageEventListener != null) { + onImageEventListener.onImageLoaded(); + } + } + return imageLoaded; + } + + /** + * Creates Paint objects once when first needed. + */ + private void createPaints() { + if (bitmapPaint == null) { + bitmapPaint = new Paint(); + bitmapPaint.setAntiAlias(true); + bitmapPaint.setFilterBitmap(true); + bitmapPaint.setDither(true); + } + } + + /** + * Called on first draw when the view has dimensions. Calculates the initial sample size and starts async loading of + * the base layer image - the whole source subsampled as necessary. + */ + private synchronized void initialiseBaseLayer(@NonNull Point maxTileDimensions) { + satTemp = new ScaleAndTranslate(0f, new PointF(0, 0)); + fitToBounds(true, satTemp); + + // Load double resolution - next level will be split into four tiles and at the center all four are required, + // so don't bother with tiling until the next level 16 tiles are needed. + fullImageSampleSize = calculateInSampleSize(satTemp.scale); + if (fullImageSampleSize > 1) { + fullImageSampleSize /= 2; + } + + if (fullImageSampleSize == 1 + && source.getSRegion() == null + && sWidth() < maxTileDimensions.x + && sHeight() < maxTileDimensions.y) { + + // Whole image is required at native resolution, and is smaller than the canvas max bitmap size. + // Use BitmapDecoder for better image support. + decoder.recycle(); + decoder = null; + BitmapLoadTask task = new BitmapLoadTask(this, getContext(), bitmapDecoderFactory, source, false); + execute(task); + } else { + + initialiseTileMap(maxTileDimensions); + + List baseGrid = tileMap.get(fullImageSampleSize); + for (Tile baseTile : baseGrid) { + TileLoadTask task = new TileLoadTask(this, decoder, baseTile); + execute(task); + } + refreshRequiredTiles(true); + } + } + + /** + * Loads the optimum tiles for display at the current scale and translate, so the screen can be filled with tiles + * that are at least as high resolution as the screen. Frees up bitmaps that are now off the screen. + * + * @param load Whether to load the new tiles needed. Use false while scrolling/panning for performance. + */ + private void refreshRequiredTiles(boolean load) { + if (decoder == null || tileMap == null) {return;} + + int sampleSize = Math.min(fullImageSampleSize, calculateInSampleSize(scale)); + + // Load tiles of the correct sample size that are on screen. Discard tiles off screen, and those that are higher + // resolution than required, or lower res than required but not the base layer, so the base layer is always present. + for (Map.Entry> tileMapEntry : tileMap.entrySet()) { + for (Tile tile : tileMapEntry.getValue()) { + if (tile.sampleSize < sampleSize || (tile.sampleSize > sampleSize + && tile.sampleSize != fullImageSampleSize)) { + tile.visible = false; + if (tile.bitmap != null) { + tile.bitmap.recycle(); + tile.bitmap = null; + } + } + if (tile.sampleSize == sampleSize) { + if (tileVisible(tile)) { + tile.visible = true; + if (!tile.loading && tile.bitmap == null && load) { + TileLoadTask task = new TileLoadTask(this, decoder, tile); + execute(task); + } + } else if (tile.sampleSize != fullImageSampleSize) { + tile.visible = false; + if (tile.bitmap != null) { + tile.bitmap.recycle(); + tile.bitmap = null; + } + } + } else if (tile.sampleSize == fullImageSampleSize) { + tile.visible = true; + } + } + } + } + + /** + * Determine whether tile is visible. + */ + private boolean tileVisible(Tile tile) { + float sVisLeft = viewToSourceX(0), sVisRight = viewToSourceX(getWidth()), sVisTop = viewToSourceY(0), + sVisBottom = viewToSourceY(getHeight()); + return !(sVisLeft > tile.sRect.right + || tile.sRect.left > sVisRight + || sVisTop > tile.sRect.bottom + || tile.sRect.top > sVisBottom); + } + + /** + * Sets scale and translate ready for the next draw. + */ + private void preDraw() { + if (getWidth() == 0 + || getHeight() == 0 + || source == null + || source.getSWidth() <= 0 + || source.getSHeight() <= 0) { + return; + } + + // If waiting to translate to new center position, set translate now + if (sPendingCenter != null && pendingScale != null) { + scale = pendingScale; + if (vTranslate == null) { + vTranslate = new PointF(); + } + vTranslate.x = (getWidth() / 2.0f) - (scale * sPendingCenter.x); + vTranslate.y = (getHeight() / 2.0f) - (scale * sPendingCenter.y); + sPendingCenter = null; + pendingScale = null; + fitToBounds(true); + refreshRequiredTiles(true); + } + + // On first display of base image set up position, and in other cases make sure scale is correct. + fitToBounds(false); + } + + /** + * Calculates sample size to fit the source image in given bounds. + */ + private int calculateInSampleSize(float scale) { + if (minimumTileDpi > 0) { + DisplayMetrics metrics = getResources().getDisplayMetrics(); + float averageDpi = (metrics.xdpi + metrics.ydpi) / 2; + scale = (minimumTileDpi / averageDpi) * scale; + } + + int reqWidth = (int) (sWidth() * scale); + int reqHeight = (int) (sHeight() * scale); + + // Raw height and width of image + int inSampleSize = 1; + if (reqWidth == 0 || reqHeight == 0) { + return 32; + } + + if (sHeight() > reqHeight || sWidth() > reqWidth) { + + // Calculate ratios of height and width to requested height and width + final int heightRatio = Math.round((float) sHeight() / (float) reqHeight); + final int widthRatio = Math.round((float) sWidth() / (float) reqWidth); + + // Choose the smallest ratio as inSampleSize value, this will guarantee + // a final image with both dimensions larger than or equal to the + // requested height and width. + inSampleSize = Math.min(heightRatio, widthRatio); + } + + // We want the actual sample size that will be used, so round down to nearest power of 2. + int power = 1; + while (power * 2 < inSampleSize) { + power = power * 2; + } + + return power; + } + + /** + * Adjusts hypothetical future scale and translate values to keep scale within the allowed range and the image on screen. Minimum scale + * is set so one dimension fills the view and the image is centered on the other dimension. Used to calculate what the target of an + * animation should be. + * + * @param center Whether the image should be centered in the dimension it's too small to fill. While animating this can be false to avoid changes in direction as bounds are reached. + * @param sat The scale we want and the translation we're aiming for. The values are adjusted to be valid. + */ + private void fitToBounds(boolean center, ScaleAndTranslate sat) { + if (panLimit == PAN_LIMIT_OUTSIDE && isReady()) { + center = false; + } + + PointF vTranslate = sat.vTranslate; + float scale = limitedScale(sat.scale); + float scaleWidth = scale * sWidth(); + float scaleHeight = scale * sHeight(); + + if (panLimit == PAN_LIMIT_CENTER && isReady()) { + vTranslate.x = Math.max(vTranslate.x, getWidth() / 2.0f - scaleWidth); + vTranslate.y = Math.max(vTranslate.y, getHeight() / 2.0f - scaleHeight); + } else if (center) { + vTranslate.x = Math.max(vTranslate.x, getWidth() - scaleWidth); + vTranslate.y = Math.max(vTranslate.y, getHeight() - scaleHeight); + } else { + vTranslate.x = Math.max(vTranslate.x, -scaleWidth); + vTranslate.y = Math.max(vTranslate.y, -scaleHeight); + } + + // Asymmetric padding adjustments + float xPaddingRatio = + getPaddingLeft() > 0 || getPaddingRight() > 0 ? getPaddingLeft() / (float) (getPaddingLeft() + + getPaddingRight()) : 0.5f; + float yPaddingRatio = getPaddingTop() > 0 || getPaddingBottom() > 0 ? getPaddingTop() / (float) (getPaddingTop() + + getPaddingBottom()) : 0.5f; + + float maxTx; + float maxTy; + if (panLimit == PAN_LIMIT_CENTER && isReady()) { + maxTx = Math.max(0, getWidth() / 2); + maxTy = Math.max(0, getHeight() / 2); + } else if (center) { + maxTx = Math.max(0, (getWidth() - scaleWidth) * xPaddingRatio); + maxTy = Math.max(0, (getHeight() - scaleHeight) * yPaddingRatio); + } else { + maxTx = Math.max(0, getWidth()); + maxTy = Math.max(0, getHeight()); + } + + vTranslate.x = Math.min(vTranslate.x, maxTx); + vTranslate.y = Math.min(vTranslate.y, maxTy); + + sat.scale = scale; + } + + /** + * Adjusts current scale and translate values to keep scale within the allowed range and the image on screen. Minimum scale + * is set so one dimension fills the view and the image is centered on the other dimension. + * + * @param center Whether the image should be centered in the dimension it's too small to fill. While animating this can be false to avoid changes in direction as bounds are reached. + */ + private void fitToBounds(boolean center) { + boolean init = false; + if (vTranslate == null) { + init = true; + vTranslate = new PointF(0, 0); + } + if (satTemp == null) { + satTemp = new ScaleAndTranslate(0, new PointF(0, 0)); + } + satTemp.scale = scale; + satTemp.vTranslate.set(vTranslate); + fitToBounds(center, satTemp); + scale = satTemp.scale; + vTranslate.set(satTemp.vTranslate); + if (init && minimumScaleType != SCALE_TYPE_START) { + vTranslate.set(vTranslateForSCenter(sWidth() / 2.0f, sHeight() / 2.0f, scale)); + } + } + + /** + * Once source image and view dimensions are known, creates a map of sample size to tile grid. + */ + private void initialiseTileMap(Point maxTileDimensions) { + this.tileMap = new LinkedHashMap<>(); + int sampleSize = fullImageSampleSize; + int xTiles = 1; + int yTiles = 1; + while (true) { + int sTileWidth = sWidth() / xTiles; + int sTileHeight = sHeight() / yTiles; + int subTileWidth = sTileWidth / sampleSize; + int subTileHeight = sTileHeight / sampleSize; + while (subTileWidth + xTiles + 1 > maxTileDimensions.x || (subTileWidth > getWidth() * 1.25 + && sampleSize < fullImageSampleSize)) { + xTiles += 1; + sTileWidth = sWidth() / xTiles; + subTileWidth = sTileWidth / sampleSize; + } + while (subTileHeight + yTiles + 1 > maxTileDimensions.y || (subTileHeight > getHeight() * 1.25 + && sampleSize < fullImageSampleSize)) { + yTiles += 1; + sTileHeight = sHeight() / yTiles; + subTileHeight = sTileHeight / sampleSize; + } + List tileGrid = new ArrayList<>(xTiles * yTiles); + for (int x = 0; x < xTiles; x++) { + for (int y = 0; y < yTiles; y++) { + Tile tile = new Tile(); + tile.sampleSize = sampleSize; + tile.visible = sampleSize == fullImageSampleSize; + tile.sRect = new Rect(x * sTileWidth, + y * sTileHeight, + x == xTiles - 1 ? sWidth() : (x + 1) * sTileWidth, + y == yTiles - 1 ? sHeight() : (y + 1) * sTileHeight + ); + tile.vRect = new Rect(0, 0, 0, 0); + tile.fileSRect = new Rect(tile.sRect); + tileGrid.add(tile); + } + } + tileMap.put(sampleSize, tileGrid); + if (sampleSize == 1) { + break; + } else { + sampleSize /= 2; + } + } + } + + /** + * Async task used to get image details without blocking the UI thread. + */ + private static class TilesInitTask + extends AsyncTask { + private final WeakReference viewRef; + private final WeakReference contextRef; + private final WeakReference> decoderFactoryRef; + private final ImageSource source; + private ImageRegionDecoder decoder; + private Exception exception; + + TilesInitTask( + SubsamplingScaleImageView view, + Context context, + DecoderFactory decoderFactory, + ImageSource source + ) { + this.viewRef = new WeakReference<>(view); + this.contextRef = new WeakReference<>(context); + this.decoderFactoryRef = new WeakReference<>(decoderFactory); + this.source = source; + } + + @Override + protected int[] doInBackground(Void... params) { + try { + Context context = contextRef.get(); + DecoderFactory decoderFactory = decoderFactoryRef.get(); + SubsamplingScaleImageView view = viewRef.get(); + if (context != null && decoderFactory != null && view != null) { + decoder = decoderFactory.make(); + Point dimensions = decoder.init(context, source); + int sWidth = dimensions.x; + int sHeight = dimensions.y; + int exifOrientation = view.getExifOrientation(context, source); + if (view.source != null && view.source.getSRegion() != null) { + Rect sRegion = view.source.getSRegion(); + sRegion.left = Math.max(0, sRegion.left); + sRegion.top = Math.max(0, sRegion.top); + sRegion.right = Math.min(sWidth, sRegion.right); + sRegion.bottom = Math.min(sHeight, sRegion.bottom); + sWidth = sRegion.width(); + sHeight = sRegion.height(); + } + return new int[]{sWidth, sHeight, exifOrientation}; + } + } catch (Exception e) { + Logger.e(this, "Failed to initialise bitmap decoder", e); + this.exception = e; + } + return null; + } + + @Override + protected void onPostExecute(int[] xyo) { + final SubsamplingScaleImageView view = viewRef.get(); + if (view != null) { + if (decoder != null && xyo != null && xyo.length == 3) { + view.onTilesInited(decoder, xyo[0], xyo[1], xyo[2]); + } else if (exception != null && view.onImageEventListener != null) { + view.onImageEventListener.onImageLoadError(exception); + } + } + } + } + + /** + * Called by worker task when decoder is ready and image size and EXIF orientation is known. + */ + private synchronized void onTilesInited(ImageRegionDecoder decoder, int sWidth, int sHeight, int sOrientation) { + // If actual dimensions don't match the declared size, reset everything. + if (source != null && source.getSWidth() > 0 && source.getSHeight() > 0 && (source.getSWidth() != sWidth + || source.getSHeight() != sHeight)) { + reset(false); + if (bitmap != null) { + if (!bitmapIsCached) { + bitmap.recycle(); + } + bitmap = null; + if (onImageEventListener != null && bitmapIsCached) { + onImageEventListener.onPreviewReleased(); + } + bitmapIsPreview = false; + bitmapIsCached = false; + } + } + this.decoder = decoder; + this.source.dimensions(sWidth, sHeight); + this.sOrientation = sOrientation; + checkReady(); + if (!checkImageLoaded() + && maxTileWidth > 0 + && maxTileWidth != TILE_SIZE_AUTO + && maxTileHeight > 0 + && maxTileHeight != TILE_SIZE_AUTO + && getWidth() > 0 + && getHeight() > 0) { + initialiseBaseLayer(new Point(maxTileWidth, maxTileHeight)); + } + invalidate(); + requestLayout(); + } + + /** + * Async task used to load images without blocking the UI thread. + */ + private static class TileLoadTask + extends AsyncTask { + private final WeakReference viewRef; + private final WeakReference decoderRef; + private final WeakReference tileRef; + private Exception exception; + + TileLoadTask(SubsamplingScaleImageView view, ImageRegionDecoder decoder, Tile tile) { + this.viewRef = new WeakReference<>(view); + this.decoderRef = new WeakReference<>(decoder); + this.tileRef = new WeakReference<>(tile); + tile.loading = true; + } + + @Override + protected Bitmap doInBackground(Void... params) { + try { + SubsamplingScaleImageView view = viewRef.get(); + ImageRegionDecoder decoder = decoderRef.get(); + Tile tile = tileRef.get(); + if (decoder != null && tile != null && view != null && decoder.isReady() && tile.visible) { + view.decoderLock.readLock().lock(); + try { + if (decoder.isReady()) { + // Update tile's file sRect according to rotation + view.fileSRect(tile.sRect, tile.fileSRect); + if (view.source.getSRegion() != null) { + tile.fileSRect.offset(view.source.getSRegion().left, view.source.getSRegion().top); + } + return decoder.decodeRegion(tile.fileSRect, tile.sampleSize); + } else { + tile.loading = false; + } + } finally { + view.decoderLock.readLock().unlock(); + } + } else if (tile != null) { + tile.loading = false; + } + } catch (Exception e) { + Logger.e(this, "Failed to decode tile", e); + this.exception = e; + } catch (OutOfMemoryError e) { + Logger.e(this, "Failed to decode tile - OutOfMemoryError", e); + this.exception = new RuntimeException(e); + } + return null; + } + + @Override + protected void onPostExecute(Bitmap bitmap) { + final SubsamplingScaleImageView subsamplingScaleImageView = viewRef.get(); + final Tile tile = tileRef.get(); + if (subsamplingScaleImageView != null && tile != null) { + if (bitmap != null) { + tile.bitmap = bitmap; + tile.loading = false; + subsamplingScaleImageView.onTileLoaded(); + } else if (exception != null && subsamplingScaleImageView.onImageEventListener != null) { + subsamplingScaleImageView.onImageEventListener.onTileLoadError(exception); + } + } + } + } + + /** + * Called by worker task when a tile has loaded. Redraws the view. + */ + private synchronized void onTileLoaded() { + checkReady(); + checkImageLoaded(); + if (isBaseLayerReady() && bitmap != null) { + if (!bitmapIsCached) { + bitmap.recycle(); + } + bitmap = null; + if (onImageEventListener != null && bitmapIsCached) { + onImageEventListener.onPreviewReleased(); + } + bitmapIsPreview = false; + bitmapIsCached = false; + } + invalidate(); + } + + /** + * Async task used to load bitmap without blocking the UI thread. + */ + private static class BitmapLoadTask + extends AsyncTask { + private final WeakReference viewRef; + private final WeakReference contextRef; + private final WeakReference> decoderFactoryRef; + private final ImageSource source; + private final boolean preview; + private Bitmap bitmap; + private Exception exception; + + BitmapLoadTask( + SubsamplingScaleImageView view, + Context context, + DecoderFactory decoderFactory, + ImageSource source, + boolean preview + ) { + this.viewRef = new WeakReference<>(view); + this.contextRef = new WeakReference<>(context); + this.decoderFactoryRef = new WeakReference<>(decoderFactory); + this.source = source; + this.preview = preview; + } + + @Override + protected Integer doInBackground(Void... params) { + try { + Context context = contextRef.get(); + DecoderFactory decoderFactory = decoderFactoryRef.get(); + SubsamplingScaleImageView view = viewRef.get(); + if (context != null && decoderFactory != null && view != null) { + bitmap = decoderFactory.make().decode(context, source); + return view.getExifOrientation(context, source); + } + } catch (Exception e) { + Logger.e(this, "Failed to load bitmap", e); + this.exception = e; + } catch (OutOfMemoryError e) { + Logger.e(this, "Failed to load bitmap - OutOfMemoryError", e); + this.exception = new RuntimeException(e); + } + return null; + } + + @Override + protected void onPostExecute(Integer orientation) { + SubsamplingScaleImageView subsamplingScaleImageView = viewRef.get(); + if (subsamplingScaleImageView != null) { + if (bitmap != null && orientation != null) { + if (preview) { + subsamplingScaleImageView.onPreviewLoaded(bitmap); + } else { + subsamplingScaleImageView.onImageLoaded(bitmap, orientation, false); + } + } else if (exception != null && subsamplingScaleImageView.onImageEventListener != null) { + if (preview) { + subsamplingScaleImageView.onImageEventListener.onPreviewLoadError(exception); + } else { + subsamplingScaleImageView.onImageEventListener.onImageLoadError(exception); + } + } + } + } + } + + /** + * Called by worker task when preview image is loaded. + */ + private synchronized void onPreviewLoaded(Bitmap previewBitmap) { + if (bitmap != null || imageLoadedSent) { + previewBitmap.recycle(); + return; + } + if (pRegion != null) { + bitmap = Bitmap.createBitmap(previewBitmap, pRegion.left, pRegion.top, pRegion.width(), pRegion.height()); + } else { + bitmap = previewBitmap; + } + bitmapIsPreview = true; + if (checkReady()) { + invalidate(); + requestLayout(); + } + } + + /** + * Called by worker task when full size image bitmap is ready (tiling is disabled). + */ + private synchronized void onImageLoaded(Bitmap bitmap, int sOrientation, boolean bitmapIsCached) { + // If actual dimensions don't match the declared size, reset everything. + if (source != null && source.getSWidth() > 0 && source.getSHeight() > 0 && (source.getSWidth() + != bitmap.getWidth() || source.getSHeight() != bitmap.getHeight())) { + reset(false); + } + if (this.bitmap != null && !this.bitmapIsCached) { + this.bitmap.recycle(); + } + + if (this.bitmap != null && this.bitmapIsCached && onImageEventListener != null) { + onImageEventListener.onPreviewReleased(); + } + + this.bitmapIsPreview = false; + this.bitmapIsCached = bitmapIsCached; + this.bitmap = bitmap; + this.source.dimensions(bitmap.getWidth(), bitmap.getHeight()); + this.sOrientation = sOrientation; + boolean ready = checkReady(); + boolean imageLoaded = checkImageLoaded(); + if (ready || imageLoaded) { + invalidate(); + requestLayout(); + } + } + + /** + * Helper method for load tasks. Examines the EXIF info on the image file to determine the orientation. + * This will only work for external files, not assets, resources or other URIs. + */ + @AnyThread + private int getExifOrientation(Context context, ImageSource source) { + int exifOrientation = ORIENTATION_0; + String sourceUri = source.getUri() != null ? source.getUri().toString() : ""; + if (sourceUri.startsWith(ContentResolver.SCHEME_CONTENT)) { + Cursor cursor = null; + try { + String[] columns = {MediaStore.Images.Media.ORIENTATION}; + cursor = context.getContentResolver().query(Uri.parse(sourceUri), columns, null, null, null); + if (cursor != null) { + if (cursor.moveToFirst()) { + int orientation = cursor.getInt(0); + if (VALID_ORIENTATIONS.contains(orientation) && orientation != ORIENTATION_USE_EXIF) { + exifOrientation = orientation; + } else { + Logger.w(this, "Unsupported orientation: " + orientation); + } + } + } + } catch (Exception e) { + Logger.w(this, "Could not get orientation of image from media store"); + } finally { + if (cursor != null) { + cursor.close(); + } + } + } else if (sourceUri.startsWith(ImageSource.FILE_PREFIX) && !sourceUri.startsWith(ImageSource.ASSET_PREFIX)) { + try { + ExifInterface exifInterface = + new ExifInterface(sourceUri.substring(ImageSource.FILE_PREFIX.length() - 1)); + int orientationAttr = + exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); + if (orientationAttr == ExifInterface.ORIENTATION_NORMAL + || orientationAttr == ExifInterface.ORIENTATION_UNDEFINED) { + exifOrientation = ORIENTATION_0; + } else if (orientationAttr == ExifInterface.ORIENTATION_ROTATE_90) { + exifOrientation = ORIENTATION_90; + } else if (orientationAttr == ExifInterface.ORIENTATION_ROTATE_180) { + exifOrientation = ORIENTATION_180; + } else if (orientationAttr == ExifInterface.ORIENTATION_ROTATE_270) { + exifOrientation = ORIENTATION_270; + } else { + Logger.w(this, "Unsupported EXIF orientation: " + orientationAttr); + } + } catch (Exception e) { + Logger.w(this, "Could not get EXIF orientation of image"); + } + } else if (source.getBufferStream() != null) { + try { + ExifInterface exifInterface = new ExifInterface(source.getBufferStream()); + int orientationAttr = + exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); + if (orientationAttr == ExifInterface.ORIENTATION_NORMAL + || orientationAttr == ExifInterface.ORIENTATION_UNDEFINED) { + exifOrientation = ORIENTATION_0; + } else if (orientationAttr == ExifInterface.ORIENTATION_ROTATE_90) { + exifOrientation = ORIENTATION_90; + } else if (orientationAttr == ExifInterface.ORIENTATION_ROTATE_180) { + exifOrientation = ORIENTATION_180; + } else if (orientationAttr == ExifInterface.ORIENTATION_ROTATE_270) { + exifOrientation = ORIENTATION_270; + } else { + Logger.w(this, "Unsupported EXIF orientation: " + orientationAttr); + } + } catch (Exception e) { + Logger.w(this, "Could not get EXIF orientation of image"); + } + } + return exifOrientation; + } + + private void execute(AsyncTask asyncTask) { + asyncTask.executeOnExecutor(executor); + } + + private static class Tile { + + private Rect sRect; + private int sampleSize; + private Bitmap bitmap; + private boolean loading; + private boolean visible; + + // Volatile fields instantiated once then updated before use to reduce GC. + private Rect vRect; + private Rect fileSRect; + } + + private static class Anim { + + private float scaleStart; // Scale at start of anim + private float scaleEnd; // Scale at end of anim (target) + private PointF sCenterStart; // Source center point at start + private PointF sCenterEnd; // Source center point at end, adjusted for pan limits + private PointF sCenterEndRequested; // Source center point that was requested, without adjustment + private PointF vFocusStart; // View point that was double tapped + private PointF vFocusEnd; // Where the view focal point should be moved to during the anim + private long duration = 500; // How long the anim takes + private boolean interruptible = true; // Whether the anim can be interrupted by a touch + private int easing = EASE_IN_OUT_QUAD; // Easing style + private int origin = ORIGIN_ANIM; // Animation origin (API, double tap or fling) + private long time = System.currentTimeMillis(); // Start time + private OnAnimationEventListener listener; // Event listener + } + + private static class ScaleAndTranslate { + private ScaleAndTranslate(float scale, PointF vTranslate) { + this.scale = scale; + this.vTranslate = vTranslate; + } + + private float scale; + private final PointF vTranslate; + } + + /** + * Set scale, center and orientation from saved state. + */ + private void restoreState(ImageViewState state) { + if (state != null && VALID_ORIENTATIONS.contains(state.getOrientation())) { + this.orientation = state.getOrientation(); + this.pendingScale = state.getScale(); + this.sPendingCenter = state.getCenter(); + invalidate(); + } + } + + /** + * By default the View automatically calculates the optimal tile size. Set this to override this, and force an upper limit to the dimensions of the generated tiles. Passing {@link #TILE_SIZE_AUTO} will re-enable the default behaviour. + * + * @param maxPixels Maximum tile size X and Y in pixels. + */ + public void setMaxTileSize(int maxPixels) { + this.maxTileWidth = maxPixels; + this.maxTileHeight = maxPixels; + } + + /** + * By default the View automatically calculates the optimal tile size. Set this to override this, and force an upper limit to the dimensions of the generated tiles. Passing {@link #TILE_SIZE_AUTO} will re-enable the default behaviour. + * + * @param maxPixelsX Maximum tile width. + * @param maxPixelsY Maximum tile height. + */ + public void setMaxTileSize(int maxPixelsX, int maxPixelsY) { + this.maxTileWidth = maxPixelsX; + this.maxTileHeight = maxPixelsY; + } + + /** + * Use canvas max bitmap width and height instead of the default 2048, to avoid redundant tiling. + */ + @NonNull + private Point getMaxBitmapDimensions(Canvas canvas) { + return new Point(Math.min(canvas.getMaximumBitmapWidth(), maxTileWidth), + Math.min(canvas.getMaximumBitmapHeight(), maxTileHeight) + ); + } + + /** + * Get source width taking rotation into account. + */ + public int sWidth() { + if (source == null) return 0; + int rotation = getRequiredRotation(); + if (rotation == 90 || rotation == 270) { + return source.getSHeight(); + } else { + return source.getSWidth(); + } + } + + /** + * Get source height taking rotation into account. + */ + public int sHeight() { + if (source == null) return 0; + int rotation = getRequiredRotation(); + if (rotation == 90 || rotation == 270) { + return source.getSWidth(); + } else { + return source.getSHeight(); + } + } + + /** + * Converts source rectangle from tile, which treats the image file as if it were in the correct orientation already, + * to the rectangle of the image that needs to be loaded. + */ + @SuppressWarnings("SuspiciousNameCombination") + @AnyThread + private void fileSRect(Rect sRect, Rect target) { + int sHeight = source.getSHeight(); + int sWidth = source.getSWidth(); + if (getRequiredRotation() == 0) { + target.set(sRect); + } else if (getRequiredRotation() == 90) { + target.set(sRect.top, sHeight - sRect.right, sRect.bottom, sHeight - sRect.left); + } else if (getRequiredRotation() == 180) { + target.set(sWidth - sRect.right, sHeight - sRect.bottom, sWidth - sRect.left, sHeight - sRect.top); + } else { + target.set(sWidth - sRect.bottom, sRect.left, sWidth - sRect.top, sRect.right); + } + } + + /** + * Determines the rotation to be applied to tiles, based on EXIF orientation or chosen setting. + */ + @AnyThread + private int getRequiredRotation() { + if (orientation == ORIENTATION_USE_EXIF) { + return sOrientation; + } else { + return orientation; + } + } + + /** + * Pythagoras distance between two points. + */ + private static float distance(float x0, float x1, float y0, float y1) { + float x = x0 - x1; + float y = y0 - y1; + return (float) Math.sqrt(x * x + y * y); + } + + /** + * Releases all resources the view is using and resets the state, nulling any fields that use significant memory. + * After you have called this method, the view can be re-used by setting a new image. Settings are remembered + * but state (scale and center) is forgotten. You can restore these yourself if required. + */ + public void recycle() { + reset(true); + bitmapPaint = null; + tileBgPaint = null; + } + + /** + * Convert screen to source x coordinate. + */ + private float viewToSourceX(float vx) { + if (vTranslate == null) {return Float.NaN;} + return (vx - vTranslate.x) / scale; + } + + /** + * Convert screen to source y coordinate. + */ + private float viewToSourceY(float vy) { + if (vTranslate == null) {return Float.NaN;} + return (vy - vTranslate.y) / scale; + } + + /** + * Converts a rectangle within the view to the corresponding rectangle from the source file, taking + * into account the current scale, translation, orientation and clipped region. This can be used + * to decode a bitmap from the source file. + *

+ * This method will only work when the image has fully initialised, after {@link #isReady()} returns + * true. It is not guaranteed to work with preloaded bitmaps. + *

+ * The result is written to the fRect argument. Re-use a single instance for efficiency. + * + * @param vRect rectangle representing the view area to interpret. + * @param fRect rectangle instance to which the result will be written. Re-use for efficiency. + */ + public void viewToFileRect(Rect vRect, Rect fRect) { + if (vTranslate == null || !readySent) { + return; + } + fRect.set((int) viewToSourceX(vRect.left), + (int) viewToSourceY(vRect.top), + (int) viewToSourceX(vRect.right), + (int) viewToSourceY(vRect.bottom) + ); + fileSRect(fRect, fRect); + fRect.set(Math.max(0, fRect.left), + Math.max(0, fRect.top), + Math.min(source.getSWidth(), fRect.right), + Math.min(source.getSHeight(), fRect.bottom) + ); + if (source.getSRegion() != null) { + fRect.offset(source.getSRegion().left, source.getSRegion().top); + } + } + + /** + * Find the area of the source file that is currently visible on screen, taking into account the + * current scale, translation, orientation and clipped region. This is a convenience method; see + * {@link #viewToFileRect(Rect, Rect)}. + * + * @param fRect rectangle instance to which the result will be written. Re-use for efficiency. + */ + public void visibleFileRect(Rect fRect) { + if (vTranslate == null || !readySent) { + return; + } + fRect.set(0, 0, getWidth(), getHeight()); + viewToFileRect(fRect, fRect); + } + + /** + * Convert screen coordinate to source coordinate. + * + * @param vxy view X/Y coordinate. + * @return a coordinate representing the corresponding source coordinate. + */ + public final PointF viewToSourceCoord(PointF vxy) { + return viewToSourceCoord(vxy.x, vxy.y, new PointF()); + } + + /** + * Convert screen coordinate to source coordinate. + * + * @param vx view X coordinate. + * @param vy view Y coordinate. + * @return a coordinate representing the corresponding source coordinate. + */ + public final PointF viewToSourceCoord(float vx, float vy) { + return viewToSourceCoord(vx, vy, new PointF()); + } + + /** + * Convert screen coordinate to source coordinate. + * + * @param vxy view coordinates to convert. + * @param sTarget target object for result. The same instance is also returned. + * @return source coordinates. This is the same instance passed to the sTarget param. + */ + public final PointF viewToSourceCoord(PointF vxy, @NonNull PointF sTarget) { + return viewToSourceCoord(vxy.x, vxy.y, sTarget); + } + + /** + * Convert screen coordinate to source coordinate. + * + * @param vx view X coordinate. + * @param vy view Y coordinate. + * @param sTarget target object for result. The same instance is also returned. + * @return source coordinates. This is the same instance passed to the sTarget param. + */ + public final PointF viewToSourceCoord(float vx, float vy, @NonNull PointF sTarget) { + sTarget.set(viewToSourceX(vx), viewToSourceY(vy)); + return sTarget; + } + + /** + * Convert source to view x coordinate. + */ + private float sourceToViewX(float sx) { + if (vTranslate == null) {return Float.NaN;} + return (sx * scale) + vTranslate.x; + } + + /** + * Convert source to view y coordinate. + */ + private float sourceToViewY(float sy) { + if (vTranslate == null) {return Float.NaN;} + return (sy * scale) + vTranslate.y; + } + + /** + * Convert source coordinate to view coordinate. + * + * @param sxy source coordinates to convert. + * @return view coordinates. + */ + public final PointF sourceToViewCoord(PointF sxy) { + return sourceToViewCoord(sxy.x, sxy.y, new PointF()); + } + + /** + * Convert source coordinate to view coordinate. + * + * @param sx source X coordinate. + * @param sy source Y coordinate. + * @return view coordinates. + */ + public final PointF sourceToViewCoord(float sx, float sy) { + return sourceToViewCoord(sx, sy, new PointF()); + } + + /** + * Convert source coordinate to view coordinate. + * + * @param sxy source coordinates to convert. + * @param vTarget target object for result. The same instance is also returned. + * @return view coordinates. This is the same instance passed to the vTarget param. + */ + @SuppressWarnings("UnusedReturnValue") + public final PointF sourceToViewCoord(PointF sxy, @NonNull PointF vTarget) { + return sourceToViewCoord(sxy.x, sxy.y, vTarget); + } + + /** + * Convert source coordinate to view coordinate. + * + * @param sx source X coordinate. + * @param sy source Y coordinate. + * @param vTarget target object for result. The same instance is also returned. + * @return view coordinates. This is the same instance passed to the vTarget param. + */ + public final PointF sourceToViewCoord(float sx, float sy, @NonNull PointF vTarget) { + vTarget.set(sourceToViewX(sx), sourceToViewY(sy)); + return vTarget; + } + + /** + * Convert source rect to screen rect, integer values. + */ + private void sourceToViewRect(@NonNull Rect sRect, @NonNull Rect vTarget) { + vTarget.set((int) sourceToViewX(sRect.left), + (int) sourceToViewY(sRect.top), + (int) sourceToViewX(sRect.right), + (int) sourceToViewY(sRect.bottom) + ); + } + + /** + * Get the translation required to place a given source coordinate at the center of the screen, with the center + * adjusted for asymmetric padding. Accepts the desired scale as an argument, so this is independent of current + * translate and scale. The result is fitted to bounds, putting the image point as near to the screen center as permitted. + */ + @NonNull + private PointF vTranslateForSCenter(float sCenterX, float sCenterY, float scale) { + int vxCenter = getPaddingLeft() + (getWidth() - getPaddingRight() - getPaddingLeft()) / 2; + int vyCenter = getPaddingTop() + (getHeight() - getPaddingBottom() - getPaddingTop()) / 2; + if (satTemp == null) { + satTemp = new ScaleAndTranslate(0, new PointF(0, 0)); + } + satTemp.scale = scale; + satTemp.vTranslate.set(vxCenter - (sCenterX * scale), vyCenter - (sCenterY * scale)); + fitToBounds(true, satTemp); + return satTemp.vTranslate; + } + + /** + * Given a requested source center and scale, calculate what the actual center will have to be to keep the image in + * pan limits, keeping the requested center as near to the middle of the screen as allowed. + */ + @NonNull + private PointF limitedSCenter(float sCenterX, float sCenterY, float scale, @NonNull PointF sTarget) { + PointF vTranslate = vTranslateForSCenter(sCenterX, sCenterY, scale); + int vxCenter = getPaddingLeft() + (getWidth() - getPaddingRight() - getPaddingLeft()) / 2; + int vyCenter = getPaddingTop() + (getHeight() - getPaddingBottom() - getPaddingTop()) / 2; + float sx = (vxCenter - vTranslate.x) / scale; + float sy = (vyCenter - vTranslate.y) / scale; + sTarget.set(sx, sy); + return sTarget; + } + + /** + * Returns the minimum allowed scale. + */ + private float minScale() { + int vPadding = getPaddingBottom() + getPaddingTop(); + int hPadding = getPaddingLeft() + getPaddingRight(); + if (minimumScaleType == SCALE_TYPE_CENTER_CROP || minimumScaleType == SCALE_TYPE_START) { + return Math.max((getWidth() - hPadding) / (float) sWidth(), (getHeight() - vPadding) / (float) sHeight()); + } else if (minimumScaleType == SCALE_TYPE_CUSTOM && minScale > 0) { + return minScale; + } else { + return Math.min((getWidth() - hPadding) / (float) sWidth(), (getHeight() - vPadding) / (float) sHeight()); + } + } + + /** + * Adjust a requested scale to be within the allowed limits. + */ + private float limitedScale(float targetScale) { + targetScale = Math.max(minScale(), targetScale); + targetScale = Math.min(maxScale, targetScale); + return targetScale; + } + + /** + * Apply a selected type of easing. + * + * @param type Easing type, from static fields + * @param time Elapsed time + * @param from Start value + * @param change Target value + * @param duration Anm duration + * @return Current value + */ + private float ease(int type, long time, float from, float change, long duration) { + switch (type) { + case EASE_IN_OUT_QUAD: + return easeInOutQuad(time, from, change, duration); + case EASE_OUT_QUAD: + return easeOutQuad(time, from, change, duration); + default: + throw new IllegalStateException("Unexpected easing type: " + type); + } + } + + /** + * Quadratic easing for fling. With thanks to Robert Penner - http://gizma.com/easing/ + * + * @param time Elapsed time + * @param from Start value + * @param change Target value + * @param duration Anm duration + * @return Current value + */ + private static float easeOutQuad(long time, float from, float change, long duration) { + float progress = (float) time / (float) duration; + return -change * progress * (progress - 2) + from; + } + + /** + * Quadratic easing for scale and center animations. With thanks to Robert Penner - http://gizma.com/easing/ + * + * @param time Elapsed time + * @param from Start value + * @param change Target value + * @param duration Anm duration + * @return Current value + */ + private static float easeInOutQuad(long time, float from, float change, long duration) { + float timeF = time / (duration / 2f); + if (timeF < 1) { + return (change / 2f * timeF * timeF) + from; + } else { + timeF--; + return (-change / 2f) * (timeF * (timeF - 2) - 1) + from; + } + } + + /** + * For debug overlays. Scale pixel value according to screen density. + */ + private int px(int px) { + return (int) (density * px); + } + + /** + * Swap the default region decoder implementation for one of your own. You must do this before setting the image file or + * asset, and you cannot use a custom decoder when using layout XML to set an asset name. Your class must have a + * public default constructor. + * + * @param regionDecoderClass The {@link ImageRegionDecoder} implementation to use. + */ + public final void setRegionDecoderClass(@NonNull Class regionDecoderClass) { + if (regionDecoderClass == null) { + throw new IllegalArgumentException("Decoder class cannot be set to null"); + } + this.regionDecoderFactory = new CompatDecoderFactory<>(regionDecoderClass); + } + + /** + * Swap the default region decoder implementation for one of your own. You must do this before setting the image file or + * asset, and you cannot use a custom decoder when using layout XML to set an asset name. + * + * @param regionDecoderFactory The {@link DecoderFactory} implementation that produces {@link ImageRegionDecoder} + * instances. + */ + public final void setRegionDecoderFactory( + @NonNull DecoderFactory regionDecoderFactory + ) { + if (regionDecoderFactory == null) { + throw new IllegalArgumentException("Decoder factory cannot be set to null"); + } + this.regionDecoderFactory = regionDecoderFactory; + } + + /** + * Swap the default bitmap decoder implementation for one of your own. You must do this before setting the image file or + * asset, and you cannot use a custom decoder when using layout XML to set an asset name. Your class must have a + * public default constructor. + * + * @param bitmapDecoderClass The {@link ImageDecoder} implementation to use. + */ + public final void setBitmapDecoderClass(@NonNull Class bitmapDecoderClass) { + if (bitmapDecoderClass == null) { + throw new IllegalArgumentException("Decoder class cannot be set to null"); + } + this.bitmapDecoderFactory = new CompatDecoderFactory<>(bitmapDecoderClass); + } + + /** + * Swap the default bitmap decoder implementation for one of your own. You must do this before setting the image file or + * asset, and you cannot use a custom decoder when using layout XML to set an asset name. + * + * @param bitmapDecoderFactory The {@link DecoderFactory} implementation that produces {@link ImageDecoder} instances. + */ + public final void setBitmapDecoderFactory(@NonNull DecoderFactory bitmapDecoderFactory) { + if (bitmapDecoderFactory == null) { + throw new IllegalArgumentException("Decoder factory cannot be set to null"); + } + this.bitmapDecoderFactory = bitmapDecoderFactory; + } + + /** + * Calculate how much further the image can be panned in each direction. The results are set on + * the supplied {@link RectF} and expressed as screen pixels. For example, if the image cannot be + * panned any further towards the left, the value of {@link RectF#left} will be set to 0. + * + * @param vTarget target object for results. Re-use for efficiency. + */ + public final void getPanRemaining(RectF vTarget) { + if (!isReady() || vTranslate == null || vTarget == null) { + return; + } + + float scaleWidth = scale * sWidth(); + float scaleHeight = scale * sHeight(); + + if (panLimit == PAN_LIMIT_CENTER) { + vTarget.top = Math.max(0, -(vTranslate.y - (getHeight() / 2.0f))); + vTarget.left = Math.max(0, -(vTranslate.x - (getWidth() / 2.0f))); + vTarget.bottom = Math.max(0, vTranslate.y - ((getHeight() / 2.0f) - scaleHeight)); + vTarget.right = Math.max(0, vTranslate.x - ((getWidth() / 2.0f) - scaleWidth)); + } else if (panLimit == PAN_LIMIT_OUTSIDE) { + vTarget.top = Math.max(0, -(vTranslate.y - getHeight())); + vTarget.left = Math.max(0, -(vTranslate.x - getWidth())); + vTarget.bottom = Math.max(0, vTranslate.y + scaleHeight); + vTarget.right = Math.max(0, vTranslate.x + scaleWidth); + } else { + vTarget.top = Math.max(0, -vTranslate.y); + vTarget.left = Math.max(0, -vTranslate.x); + vTarget.bottom = Math.max(0, (scaleHeight + vTranslate.y) - getHeight()); + vTarget.right = Math.max(0, (scaleWidth + vTranslate.x) - getWidth()); + } + } + + /** + * Set the pan limiting style. See static fields. Normally {@link #PAN_LIMIT_INSIDE} is best, for image galleries. + * + * @param panLimit a pan limit constant. See static fields. + */ + public final void setPanLimit(int panLimit) { + if (!VALID_PAN_LIMITS.contains(panLimit)) { + throw new IllegalArgumentException("Invalid pan limit: " + panLimit); + } + this.panLimit = panLimit; + if (isReady()) { + fitToBounds(true); + invalidate(); + } + } + + /** + * Set the minimum scale type. See static fields. Normally {@link #SCALE_TYPE_CENTER_INSIDE} is best, for image galleries. + * + * @param scaleType a scale type constant. See static fields. + */ + public final void setMinimumScaleType(int scaleType) { + if (!VALID_SCALE_TYPES.contains(scaleType)) { + throw new IllegalArgumentException("Invalid scale type: " + scaleType); + } + this.minimumScaleType = scaleType; + if (isReady()) { + fitToBounds(true); + invalidate(); + } + } + + /** + * Set the maximum scale allowed. A value of 1 means 1:1 pixels at maximum scale. You may wish to set this according + * to screen density - on a retina screen, 1:1 may still be too small. Consider using {@link #setMinimumDpi(int)}, + * which is density aware. + * + * @param maxScale maximum scale expressed as a source/view pixels ratio. + */ + public final void setMaxScale(float maxScale) { + this.maxScale = maxScale; + } + + /** + * Set the minimum scale allowed. A value of 1 means 1:1 pixels at minimum scale. You may wish to set this according + * to screen density. Consider using {@link #setMaximumDpi(int)}, which is density aware. + * + * @param minScale minimum scale expressed as a source/view pixels ratio. + */ + public final void setMinScale(float minScale) { + this.minScale = minScale; + } + + /** + * This is a screen density aware alternative to {@link #setMaxScale(float)}; it allows you to express the maximum + * allowed scale in terms of the minimum pixel density. This avoids the problem of 1:1 scale still being + * too small on a high density screen. A sensible starting point is 160 - the default used by this view. + * + * @param dpi Source image pixel density at maximum zoom. + */ + public final void setMinimumDpi(int dpi) { + DisplayMetrics metrics = getResources().getDisplayMetrics(); + float averageDpi = (metrics.xdpi + metrics.ydpi) / 2; + this.maxScale = averageDpi / dpi; + } + + /** + * This is a screen density aware alternative to {@link #setMinScale(float)}; it allows you to express the minimum + * allowed scale in terms of the maximum pixel density. + * + * @param dpi Source image pixel density at minimum zoom. + */ + public final void setMaximumDpi(int dpi) { + DisplayMetrics metrics = getResources().getDisplayMetrics(); + float averageDpi = (metrics.xdpi + metrics.ydpi) / 2; + this.minScale = averageDpi / dpi; + } + + /** + * Returns the maximum allowed scale. + * + * @return the maximum scale as a source/view pixels ratio. + */ + public float getMaxScale() { + return maxScale; + } + + /** + * Returns the minimum allowed scale. + * + * @return the minimum scale as a source/view pixels ratio. + */ + public final float getMinScale() { + return minScale(); + } + + /** + * By default, image tiles are at least as high resolution as the screen. For a retina screen this may not be + * necessary, and may increase the likelihood of an OutOfMemoryError. This method sets a DPI at which higher + * resolution tiles should be loaded. Using a lower number will on average use less memory but result in a lower + * quality image. 160-240dpi will usually be enough. This should be called before setting the image source, + * because it affects which tiles get loaded. When using an untiled source image this method has no effect. + * + * @param minimumTileDpi Tile loading threshold. + */ + public void setMinimumTileDpi(int minimumTileDpi) { + DisplayMetrics metrics = getResources().getDisplayMetrics(); + float averageDpi = (metrics.xdpi + metrics.ydpi) / 2; + this.minimumTileDpi = (int) Math.min(averageDpi, minimumTileDpi); + if (isReady()) { + reset(false); + invalidate(); + } + } + + /** + * Returns the source point at the center of the view. + * + * @return the source coordinates current at the center of the view. + */ + public final PointF getCenter() { + int mX = getWidth() / 2; + int mY = getHeight() / 2; + return viewToSourceCoord(mX, mY); + } + + /** + * Returns the current scale value. + * + * @return the current scale as a source/view pixels ratio. + */ + public final float getScale() { + return scale; + } + + /** + * Externally change the scale and translation of the source image. This may be used with getCenter() and getScale() + * to restore the scale and zoom after a screen rotate. + * + * @param scale New scale to set. + * @param sCenter New source image coordinate to center on the screen, subject to boundaries. + */ + public final void setScaleAndCenter(float scale, @Nullable PointF sCenter) { + this.anim = null; + this.pendingScale = scale; + this.sPendingCenter = sCenter; + this.sRequestedCenter = sCenter; + invalidate(); + } + + /** + * Fully zoom out and return the image to the middle of the screen. This might be useful if you have a view pager + * and want images to be reset when the user has moved to another page. + */ + public final void resetScaleAndCenter() { + this.anim = null; + this.pendingScale = limitedScale(0); + if (isReady()) { + this.sPendingCenter = new PointF(sWidth() / 2.0f, sHeight() / 2.0f); + } else { + this.sPendingCenter = new PointF(0, 0); + } + invalidate(); + } + + /** + * Call to find whether the view is initialised, has dimensions, and will display an image on + * the next draw. If a preview has been provided, it may be the preview that will be displayed + * and the full size image may still be loading. If no preview was provided, this is called once + * the base layer tiles of the full size image are loaded. + * + * @return true if the view is ready to display an image and accept touch gestures. + */ + public final boolean isReady() { + return readySent; + } + + /** + * Called once when the view is initialised, has dimensions, and will display an image on the + * next draw. This is triggered at the same time as {@link OnImageEventListener#onReady()} but + * allows a subclass to receive this event without using a listener. + */ + @SuppressWarnings("EmptyMethod") + protected void onReady() { + + } + + /** + * Call to find whether the main image (base layer tiles where relevant) have been loaded. Before + * this event the view is blank unless a preview was provided. + * + * @return true if the main image (not the preview) has been loaded and is ready to display. + */ + public final boolean isImageLoaded() { + return imageLoadedSent; + } + + /** + * Called once when the full size image or its base layer tiles have been loaded. + */ + @SuppressWarnings("EmptyMethod") + protected void onImageLoaded() { + + } + + /** + * Get source width, ignoring orientation. If {@link #getOrientation()} returns 90 or 270, you can use {@link #getSHeight()} + * for the apparent width. + * + * @return the source image width in pixels. + */ + public final int getSWidth() { + return source == null ? 0 : source.getSWidth(); + } + + /** + * Get source height, ignoring orientation. If {@link #getOrientation()} returns 90 or 270, you can use {@link #getSWidth()} + * for the apparent height. + * + * @return the source image height in pixels. + */ + public final int getSHeight() { + return source == null ? 0 : source.getSHeight(); + } + + /** + * Returns the orientation setting. This can return {@link #ORIENTATION_USE_EXIF}, in which case it doesn't tell you + * the applied orientation of the image. For that, use {@link #getAppliedOrientation()}. + * + * @return the orientation setting. See static fields. + */ + public final int getOrientation() { + return orientation; + } + + /** + * Returns the actual orientation of the image relative to the source file. This will be based on the source file's + * EXIF orientation if you're using ORIENTATION_USE_EXIF. Values are 0, 90, 180, 270. + * + * @return the orientation applied after EXIF information has been extracted. See static fields. + */ + public final int getAppliedOrientation() { + return getRequiredRotation(); + } + + /** + * Get the current state of the view (scale, center, orientation) for restoration after rotate. Will return null if + * the view is not ready. + * + * @return an {@link ImageViewState} instance representing the current position of the image. null if the view isn't ready. + */ + @Nullable + public final ImageViewState getState() { + if (vTranslate != null && source != null && source.getSWidth() > 0 && source.getSHeight() > 0) { + return new ImageViewState(getScale(), getCenter(), getOrientation()); + } + return null; + } + + /** + * Returns true if zoom gesture detection is enabled. + * + * @return true if zoom gesture detection is enabled. + */ + public final boolean isZoomEnabled() { + return zoomEnabled; + } + + /** + * Enable or disable zoom gesture detection. Disabling zoom locks the the current scale. + * + * @param zoomEnabled true to enable zoom gestures, false to disable. + */ + public final void setZoomEnabled(boolean zoomEnabled) { + this.zoomEnabled = zoomEnabled; + } + + /** + * Returns true if double tap & swipe to zoom is enabled. + * + * @return true if double tap & swipe to zoom is enabled. + */ + public final boolean isQuickScaleEnabled() { + return quickScaleEnabled; + } + + /** + * Enable or disable double tap & swipe to zoom. + * + * @param quickScaleEnabled true to enable quick scale, false to disable. + */ + public final void setQuickScaleEnabled(boolean quickScaleEnabled) { + this.quickScaleEnabled = quickScaleEnabled; + } + + /** + * Returns true if pan gesture detection is enabled. + * + * @return true if pan gesture detection is enabled. + */ + public final boolean isPanEnabled() { + return panEnabled; + } + + /** + * Enable or disable pan gesture detection. Disabling pan causes the image to be centered. Pan + * can still be changed from code. + * + * @param panEnabled true to enable panning, false to disable. + */ + public final void setPanEnabled(boolean panEnabled) { + this.panEnabled = panEnabled; + if (!panEnabled && vTranslate != null) { + vTranslate.x = (getWidth() / 2.0f) - (scale * (sWidth() / 2.0f)); + vTranslate.y = (getHeight() / 2.0f) - (scale * (sHeight() / 2.0f)); + if (isReady()) { + refreshRequiredTiles(true); + invalidate(); + } + } + } + + /** + * Set a solid color to render behind tiles, useful for displaying transparent PNGs. + * + * @param tileBgColor Background color for tiles. + */ + public final void setTileBackgroundColor(int tileBgColor) { + if (Color.alpha(tileBgColor) == 0) { + tileBgPaint = null; + } else { + tileBgPaint = new Paint(); + tileBgPaint.setStyle(Style.FILL); + tileBgPaint.setColor(tileBgColor); + } + invalidate(); + } + + /** + * Set the scale the image will zoom in to when double tapped. This also the scale point where a double tap is interpreted + * as a zoom out gesture - if the scale is greater than 90% of this value, a double tap zooms out. Avoid using values + * greater than the max zoom. + * + * @param doubleTapZoomScale New value for double tap gesture zoom scale. + */ + public final void setDoubleTapZoomScale(float doubleTapZoomScale) { + this.doubleTapZoomScale = doubleTapZoomScale; + } + + /** + * A density aware alternative to {@link #setDoubleTapZoomScale(float)}; this allows you to express the scale the + * image will zoom in to when double tapped in terms of the image pixel density. Values lower than the max scale will + * be ignored. A sensible starting point is 160 - the default used by this view. + * + * @param dpi New value for double tap gesture zoom scale. + */ + public final void setDoubleTapZoomDpi(int dpi) { + DisplayMetrics metrics = getResources().getDisplayMetrics(); + float averageDpi = (metrics.xdpi + metrics.ydpi) / 2; + this.doubleTapZoomScale = averageDpi / dpi; + } + + /** + * Set the type of zoom animation to be used for double taps. See static fields. + * + * @param doubleTapZoomStyle New value for zoom style. + */ + public final void setDoubleTapZoomStyle(int doubleTapZoomStyle) { + if (!VALID_ZOOM_STYLES.contains(doubleTapZoomStyle)) { + throw new IllegalArgumentException("Invalid zoom style: " + doubleTapZoomStyle); + } + this.doubleTapZoomStyle = doubleTapZoomStyle; + } + + /** + * Set the duration of the double tap zoom animation. + * + * @param durationMs Duration in milliseconds. + */ + public final void setDoubleTapZoomDuration(int durationMs) { + this.doubleTapZoomDuration = Math.max(0, durationMs); + } + + /** + *

+ * Provide an {@link Executor} to be used for loading images. By default, {@link AsyncTask#THREAD_POOL_EXECUTOR} + * is used to minimise contention with other background work the app is doing. You can also choose + * to use {@link AsyncTask#SERIAL_EXECUTOR} if you want to limit concurrent background tasks. + * Alternatively you can supply an {@link Executor} of your own to avoid any contention. It is + * strongly recommended to use a single executor instance for the life of your application, not + * one per view instance. + *

+ * Warning: If you are using a custom implementation of {@link ImageRegionDecoder}, and you + * supply an executor with more than one thread, you must make sure your implementation supports + * multi-threaded bitmap decoding or has appropriate internal synchronization. From SDK 21, Android's + * {@link android.graphics.BitmapRegionDecoder} uses an internal lock so it is thread safe but + * there is no advantage to using multiple threads. + *

+ * + * @param executor an {@link Executor} for image loading. + */ + public void setExecutor(@NonNull Executor executor) { + if (executor == null) { + throw new NullPointerException("Executor must not be null"); + } + this.executor = executor; + } + + /** + * Enable or disable eager loading of tiles that appear on screen during gestures or animations, + * while the gesture or animation is still in progress. By default this is enabled to improve + * responsiveness, but it can result in tiles being loaded and discarded more rapidly than + * necessary and reduce the animation frame rate on old/cheap devices. Disable this on older + * devices if you see poor performance. Tiles will then be loaded only when gestures and animations + * are completed. + * + * @param eagerLoadingEnabled true to enable loading during gestures, false to delay loading until gestures end + */ + public void setEagerLoadingEnabled(boolean eagerLoadingEnabled) { + this.eagerLoadingEnabled = eagerLoadingEnabled; + } + + /** + * Check if an image has been set. The image may not have been loaded and displayed yet. + * + * @return If an image is currently set. + */ + public boolean hasImage() { + return source != null || bitmap != null; + } + + /** + * {@inheritDoc} + */ + @Override + public void setOnLongClickListener(OnLongClickListener onLongClickListener) { + this.onLongClickListener = onLongClickListener; + } + + /** + * Add a listener allowing notification of load and error events. Extend {@link DefaultOnImageEventListener} + * to simplify implementation. + * + * @param onImageEventListener an {@link OnImageEventListener} instance. + */ + public void setOnImageEventListener(OnImageEventListener onImageEventListener) { + this.onImageEventListener = onImageEventListener; + } + + /** + * Add a listener for pan and zoom events. Extend {@link DefaultOnStateChangedListener} to simplify + * implementation. + * + * @param onStateChangedListener an {@link OnStateChangedListener} instance. + */ + public void setOnStateChangedListener(OnStateChangedListener onStateChangedListener) { + this.onStateChangedListener = onStateChangedListener; + } + + private void sendStateChanged(float oldScale, PointF oldVTranslate, int origin) { + if (onStateChangedListener != null && scale != oldScale) { + onStateChangedListener.onScaleChanged(scale, origin); + } + if (onStateChangedListener != null && !vTranslate.equals(oldVTranslate)) { + onStateChangedListener.onCenterChanged(getCenter(), origin); + } + } + + /** + * Creates a panning animation builder, that when started will animate the image to place the given coordinates of + * the image in the center of the screen. If doing this would move the image beyond the edges of the screen, the + * image is instead animated to move the center point as near to the center of the screen as is allowed - it's + * guaranteed to be on screen. + * + * @param sCenter Target center point + * @return {@link AnimationBuilder} instance. Call {@link SubsamplingScaleImageView.AnimationBuilder#start()} to start the anim. + */ + @Nullable + public AnimationBuilder animateCenter(PointF sCenter) { + if (!isReady()) { + return null; + } + return new AnimationBuilder(sCenter); + } + + /** + * Creates a scale animation builder, that when started will animate a zoom in or out. If this would move the image + * beyond the panning limits, the image is automatically panned during the animation. + * + * @param scale Target scale. + * @return {@link AnimationBuilder} instance. Call {@link SubsamplingScaleImageView.AnimationBuilder#start()} to start the anim. + */ + @Nullable + public AnimationBuilder animateScale(float scale) { + if (!isReady()) { + return null; + } + return new AnimationBuilder(scale); + } + + /** + * Creates a scale animation builder, that when started will animate a zoom in or out. If this would move the image + * beyond the panning limits, the image is automatically panned during the animation. + * + * @param scale Target scale. + * @param sCenter Target source center. + * @return {@link AnimationBuilder} instance. Call {@link SubsamplingScaleImageView.AnimationBuilder#start()} to start the anim. + */ + @Nullable + public AnimationBuilder animateScaleAndCenter(float scale, PointF sCenter) { + if (!isReady()) { + return null; + } + return new AnimationBuilder(scale, sCenter); + } + + /** + * Builder class used to set additional options for a scale animation. Create an instance using {@link #animateScale(float)}, + * then set your options and call {@link #start()}. + */ + public final class AnimationBuilder { + + private final float targetScale; + private final PointF targetSCenter; + private final PointF vFocus; + private long duration = 500; + private int easing = EASE_IN_OUT_QUAD; + private int origin = ORIGIN_ANIM; + private boolean interruptible = true; + private boolean panLimited = true; + private OnAnimationEventListener listener; + + private AnimationBuilder(PointF sCenter) { + this.targetScale = scale; + this.targetSCenter = sCenter; + this.vFocus = null; + } + + private AnimationBuilder(float scale) { + this.targetScale = scale; + this.targetSCenter = getCenter(); + this.vFocus = null; + } + + private AnimationBuilder(float scale, PointF sCenter) { + this.targetScale = scale; + this.targetSCenter = sCenter; + this.vFocus = null; + } + + private AnimationBuilder(float scale, PointF sCenter, PointF vFocus) { + this.targetScale = scale; + this.targetSCenter = sCenter; + this.vFocus = vFocus; + } + + /** + * Desired duration of the anim in milliseconds. Default is 500. + * + * @param duration duration in milliseconds. + * @return this builder for method chaining. + */ + @NonNull + public AnimationBuilder withDuration(long duration) { + this.duration = duration; + return this; + } + + /** + * Whether the animation can be interrupted with a touch. Default is true. + * + * @param interruptible interruptible flag. + * @return this builder for method chaining. + */ + @NonNull + public AnimationBuilder withInterruptible(boolean interruptible) { + this.interruptible = interruptible; + return this; + } + + /** + * Set the easing style. See static fields. {@link #EASE_IN_OUT_QUAD} is recommended, and the default. + * + * @param easing easing style. + * @return this builder for method chaining. + */ + @NonNull + public AnimationBuilder withEasing(int easing) { + if (!VALID_EASING_STYLES.contains(easing)) { + throw new IllegalArgumentException("Unknown easing type: " + easing); + } + this.easing = easing; + return this; + } + + /** + * Add an animation event listener. + * + * @param listener The listener. + * @return this builder for method chaining. + */ + @NonNull + public AnimationBuilder withOnAnimationEventListener(OnAnimationEventListener listener) { + this.listener = listener; + return this; + } + + /** + * Only for internal use. When set to true (default), the animation proceeds towards the actual end point - the + * nearest point to the center allowed by pan limits. When false, animation is in the direction of the requested + * end point and is stopped when the limit for each axis is reached. The latter behaviour is used for flings but + * nothing else. + */ + @NonNull + private AnimationBuilder withPanLimited() { + this.panLimited = false; + return this; + } + + /** + * Only for internal use. Indicates what caused the animation. + */ + @NonNull + private AnimationBuilder withOrigin(int origin) { + this.origin = origin; + return this; + } + + /** + * Starts the animation. + */ + public void start() { + if (anim != null && anim.listener != null) { + try { + anim.listener.onInterruptedByNewAnim(); + } catch (Exception e) { + Logger.w(this, "Error thrown by animation listener", e); + } + } + + int vxCenter = getPaddingLeft() + (getWidth() - getPaddingRight() - getPaddingLeft()) / 2; + int vyCenter = getPaddingTop() + (getHeight() - getPaddingBottom() - getPaddingTop()) / 2; + float targetScale = limitedScale(this.targetScale); + PointF targetSCenter = panLimited + ? limitedSCenter(this.targetSCenter.x, this.targetSCenter.y, targetScale, new PointF()) + : this.targetSCenter; + anim = new Anim(); + anim.scaleStart = scale; + anim.scaleEnd = targetScale; + anim.time = System.currentTimeMillis(); + anim.sCenterEndRequested = targetSCenter; + anim.sCenterStart = getCenter(); + anim.sCenterEnd = targetSCenter; + anim.vFocusStart = sourceToViewCoord(targetSCenter); + anim.vFocusEnd = new PointF(vxCenter, vyCenter); + anim.duration = duration; + anim.interruptible = interruptible; + anim.easing = easing; + anim.origin = origin; + anim.time = System.currentTimeMillis(); + anim.listener = listener; + + if (vFocus != null) { + // Calculate where translation will be at the end of the anim + float vTranslateXEnd = vFocus.x - (targetScale * anim.sCenterStart.x); + float vTranslateYEnd = vFocus.y - (targetScale * anim.sCenterStart.y); + ScaleAndTranslate satEnd = + new ScaleAndTranslate(targetScale, new PointF(vTranslateXEnd, vTranslateYEnd)); + // Fit the end translation into bounds + fitToBounds(true, satEnd); + // Adjust the position of the focus point at end so image will be in bounds + anim.vFocusEnd = new PointF(vFocus.x + (satEnd.vTranslate.x - vTranslateXEnd), + vFocus.y + (satEnd.vTranslate.y - vTranslateYEnd) + ); + } + + invalidate(); + } + } + + /** + * An event listener for animations, allows events to be triggered when an animation completes, + * is aborted by another animation starting, or is aborted by a touch event. Note that none of + * these events are triggered if the activity is paused, the image is swapped, or in other cases + * where the view's internal state gets wiped or draw events stop. + */ + @SuppressWarnings("EmptyMethod") + public interface OnAnimationEventListener { + + /** + * The animation has completed, having reached its endpoint. + */ + void onComplete(); + + /** + * The animation has been aborted before reaching its endpoint because the user touched the screen. + */ + void onInterruptedByUser(); + + /** + * The animation has been aborted before reaching its endpoint because a new animation has been started. + */ + void onInterruptedByNewAnim(); + } + + /** + * Default implementation of {@link OnAnimationEventListener} for extension. This does nothing in any method. + */ + public static class DefaultOnAnimationEventListener + implements OnAnimationEventListener { + + @Override + public void onComplete() {} + + @Override + public void onInterruptedByUser() {} + + @Override + public void onInterruptedByNewAnim() {} + } + + /** + * An event listener, allowing subclasses and activities to be notified of significant events. + */ + @SuppressWarnings("EmptyMethod") + public interface OnImageEventListener { + + /** + * Called when the dimensions of the image and view are known, and either a preview image, + * the full size image, or base layer tiles are loaded. This indicates the scale and translate + * are known and the next draw will display an image. This event can be used to hide a loading + * graphic, or inform a subclass that it is safe to draw overlays. + */ + void onReady(); + + /** + * Called when the full size image is ready. When using tiling, this means the lowest resolution + * base layer of tiles are loaded, and when tiling is disabled, the image bitmap is loaded. + * This event could be used as a trigger to enable gestures if you wanted interaction disabled + * while only a preview is displayed, otherwise for most cases {@link #onReady()} is the best + * event to listen to. + */ + void onImageLoaded(); + + /** + * Called when a preview image could not be loaded. This method cannot be relied upon; certain + * encoding types of supported image formats can result in corrupt or blank images being loaded + * and displayed with no detectable error. The view will continue to load the full size image. + * + * @param e The exception thrown. This error is logged by the view. + */ + void onPreviewLoadError(Exception e); + + /** + * Indicates an error initialising the decoder when using a tiling, or when loading the full + * size bitmap when tiling is disabled. This method cannot be relied upon; certain encoding + * types of supported image formats can result in corrupt or blank images being loaded and + * displayed with no detectable error. + * + * @param e The exception thrown. This error is also logged by the view. + */ + void onImageLoadError(Exception e); + + /** + * Called when an image tile could not be loaded. This method cannot be relied upon; certain + * encoding types of supported image formats can result in corrupt or blank images being loaded + * and displayed with no detectable error. Most cases where an unsupported file is used will + * result in an error caught by {@link #onImageLoadError(Exception)}. + * + * @param e The exception thrown. This error is logged by the view. + */ + void onTileLoadError(Exception e); + + /** + * Called when a bitmap set using ImageSource.cachedBitmap is no longer being used by the View. + * This is useful if you wish to manage the bitmap after the preview is shown + */ + void onPreviewReleased(); + } + + /** + * Default implementation of {@link OnImageEventListener} for extension. This does nothing in any method. + */ + public static class DefaultOnImageEventListener + implements OnImageEventListener { + + @Override + public void onReady() {} + + @Override + public void onImageLoaded() {} + + @Override + public void onPreviewLoadError(Exception e) {} + + @Override + public void onImageLoadError(Exception e) {} + + @Override + public void onTileLoadError(Exception e) {} + + @Override + public void onPreviewReleased() {} + } + + /** + * An event listener, allowing activities to be notified of pan and zoom events. Initialisation + * and calls made by your code do not trigger events; touch events and animations do. Methods in + * this listener will be called on the UI thread and may be called very frequently - your + * implementation should return quickly. + */ + @SuppressWarnings("EmptyMethod") + public interface OnStateChangedListener { + + /** + * The scale has changed. Use with {@link #getMaxScale()} and {@link #getMinScale()} to determine + * whether the image is fully zoomed in or out. + * + * @param newScale The new scale. + * @param origin Where the event originated from - one of {@link #ORIGIN_ANIM}, {@link #ORIGIN_TOUCH}. + */ + void onScaleChanged(float newScale, int origin); + + /** + * The source center has been changed. This can be a result of panning or zooming. + * + * @param newCenter The new source center point. + * @param origin Where the event originated from - one of {@link #ORIGIN_ANIM}, {@link #ORIGIN_TOUCH}. + */ + void onCenterChanged(PointF newCenter, int origin); + } + + /** + * Default implementation of {@link OnStateChangedListener}. This does nothing in any method. + */ + public static class DefaultOnStateChangedListener + implements OnStateChangedListener { + + @Override + public void onCenterChanged(PointF newCenter, int origin) {} + + @Override + public void onScaleChanged(float newScale, int origin) {} + } +} diff --git a/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java new file mode 100644 index 0000000000..65f16eae26 --- /dev/null +++ b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java @@ -0,0 +1,53 @@ +package com.davemorrissey.labs.subscaleview.decoder; + +import android.graphics.Bitmap; + +import androidx.annotation.NonNull; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +/** + * Compatibility factory to instantiate decoders with empty public constructors. + * + * @param The base type of the decoder this factory will produce. + */ +@SuppressWarnings("WeakerAccess") +public class CompatDecoderFactory + implements DecoderFactory { + + private final Class clazz; + private final Bitmap.Config bitmapConfig; + + /** + * Construct a factory for the given class. This must have a default constructor. + * + * @param clazz a class that implements {@link ImageDecoder} or {@link ImageRegionDecoder}. + */ + public CompatDecoderFactory(@NonNull Class clazz) { + this(clazz, null); + } + + /** + * Construct a factory for the given class. This must have a constructor that accepts a {@link Bitmap.Config} instance. + * + * @param clazz a class that implements {@link ImageDecoder} or {@link ImageRegionDecoder}. + * @param bitmapConfig bitmap configuration to be used when loading images. + */ + public CompatDecoderFactory(@NonNull Class clazz, Bitmap.Config bitmapConfig) { + this.clazz = clazz; + this.bitmapConfig = bitmapConfig; + } + + @Override + @NonNull + public T make() + throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { + if (bitmapConfig == null) { + return clazz.newInstance(); + } else { + Constructor ctor = clazz.getConstructor(Bitmap.Config.class); + return ctor.newInstance(bitmapConfig); + } + } +} diff --git a/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java new file mode 100644 index 0000000000..94a45566f1 --- /dev/null +++ b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java @@ -0,0 +1,27 @@ +package com.davemorrissey.labs.subscaleview.decoder; + +import androidx.annotation.NonNull; + +import java.lang.reflect.InvocationTargetException; + +/** + * Interface for {@link ImageDecoder} and {@link ImageRegionDecoder} factories. + * + * @param the class of decoder that will be produced. + */ +public interface DecoderFactory { + + /** + * Produce a new instance of a decoder with type {@link T}. + * + * @return a new instance of your decoder. + * + * @throws IllegalAccessException if the factory class cannot be instantiated. + * @throws InstantiationException if the factory class cannot be instantiated. + * @throws NoSuchMethodException if the factory class cannot be instantiated. + * @throws InvocationTargetException if the factory class cannot be instantiated. + */ + @NonNull + T make() + throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException; +} diff --git a/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/ImageDecoder.java b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/ImageDecoder.java new file mode 100644 index 0000000000..b853433e71 --- /dev/null +++ b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/ImageDecoder.java @@ -0,0 +1,34 @@ +package com.davemorrissey.labs.subscaleview.decoder; + +import android.content.Context; +import android.graphics.Bitmap; + +import androidx.annotation.NonNull; + +import com.davemorrissey.labs.subscaleview.ImageSource; + +/** + * Interface for image decoding classes, allowing the default {@link android.graphics.BitmapFactory} + * based on the Skia library to be replaced with a custom class. + */ +public interface ImageDecoder { + + /** + * Decode an image. The URI of the image source can be in one of the following formats: + *
+ * File: file:///scard/picture.jpg + *
+ * Asset: file:///android_asset/picture.png + *
+ * Resource: android.resource://com.example.app/drawable/picture + * + * @param context Application context + * @param source Image source of the image + * @return the decoded bitmap + * + * @throws Exception if decoding fails. + */ + @NonNull + Bitmap decode(Context context, @NonNull ImageSource source) + throws Exception; +} diff --git a/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/ImageRegionDecoder.java b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/ImageRegionDecoder.java new file mode 100644 index 0000000000..bb04b888a6 --- /dev/null +++ b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/ImageRegionDecoder.java @@ -0,0 +1,66 @@ +package com.davemorrissey.labs.subscaleview.decoder; + +import android.content.Context; +import android.graphics.*; + +import androidx.annotation.NonNull; + +import com.davemorrissey.labs.subscaleview.ImageSource; + +/** + * Interface for image decoding classes, allowing the default {@link android.graphics.BitmapRegionDecoder} + * based on the Skia library to be replaced with a custom class. + */ +public interface ImageRegionDecoder { + + /** + * Initialise the decoder. When possible, perform initial setup work once in this method. The + * dimensions of the image must be returned. The URI in the image source can be in one of the following formats: + *
+ * File: file:///scard/picture.jpg + *
+ * Asset: file:///android_asset/picture.png + *
+ * Resource: android.resource://com.example.app/drawable/picture + * + * @param context Application context. A reference may be held, but must be cleared on recycle. + * @param source Image source of the image. + * @return Dimensions of the image. + * + * @throws Exception if initialisation fails. + */ + @NonNull + Point init(Context context, @NonNull ImageSource source) + throws Exception; + + /** + *

+ * Decode a region of the image with the given sample size. This method is called off the UI + * thread so it can safely load the image on the current thread. It is called from + * {@link android.os.AsyncTask}s running in an executor that may have multiple threads, so + * implementations must be thread safe. Adding synchronized to the method signature + * is the simplest way to achieve this, but bear in mind the {@link #recycle()} method can be + * called concurrently. + *

+ * See {@link SkiaImageRegionDecoder} for an example of internal locking and synchronization. + *

+ * + * @param sRect Source image rectangle to decode. + * @param sampleSize Sample size. + * @return The decoded region. It is safe to return null if decoding fails. + */ + @NonNull + Bitmap decodeRegion(@NonNull Rect sRect, int sampleSize); + + /** + * Status check. Should return false before initialisation and after recycle. + * + * @return true if the decoder is ready to be used. + */ + boolean isReady(); + + /** + * This method will be called when the decoder is no longer required. It should clean up any resources still in use. + */ + void recycle(); +} diff --git a/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/SkiaImageDecoder.java b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/SkiaImageDecoder.java new file mode 100644 index 0000000000..1abd4e4f3b --- /dev/null +++ b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/SkiaImageDecoder.java @@ -0,0 +1,109 @@ +package com.davemorrissey.labs.subscaleview.decoder; + +import android.content.ContentResolver; +import android.content.Context; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.text.TextUtils; + +import androidx.annotation.*; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; + +import java.io.InputStream; +import java.util.List; + +/** + * Default implementation of {@link com.davemorrissey.labs.subscaleview.decoder.ImageDecoder} + * using Android's {@link android.graphics.BitmapFactory}, based on the Skia library. This + * works well in most circumstances and has reasonable performance, however it has some problems + * with grayscale, indexed and CMYK images. + */ +public class SkiaImageDecoder + implements ImageDecoder { + + private final Bitmap.Config bitmapConfig; + + @Keep + @SuppressWarnings("unused") + public SkiaImageDecoder() { + this(null); + } + + @SuppressWarnings({"WeakerAccess", "SameParameterValue"}) + public SkiaImageDecoder(@Nullable Bitmap.Config bitmapConfig) { + Bitmap.Config globalBitmapConfig = SubsamplingScaleImageView.getPreferredBitmapConfig(); + if (bitmapConfig != null) { + this.bitmapConfig = bitmapConfig; + } else if (globalBitmapConfig != null) { + this.bitmapConfig = globalBitmapConfig; + } else { + this.bitmapConfig = Bitmap.Config.RGB_565; + } + } + + @Override + @NonNull + public Bitmap decode(Context context, @NonNull ImageSource source) + throws Exception { + Uri sourceUri = source.getUri(); + String uriString = sourceUri != null ? sourceUri.toString() : ""; + BitmapFactory.Options options = new BitmapFactory.Options(); + Bitmap bitmap = null; + options.inPreferredConfig = bitmapConfig; + if (uriString.startsWith(ImageSource.RESOURCE_PREFIX)) { + Resources res; + String packageName = sourceUri.getAuthority(); + if (context.getPackageName().equals(packageName)) { + res = context.getResources(); + } else { + PackageManager pm = context.getPackageManager(); + res = pm.getResourcesForApplication(packageName); + } + + int id = 0; + List segments = sourceUri.getPathSegments(); + int size = segments.size(); + if (size == 2 && segments.get(0).equals("drawable")) { + String resName = segments.get(1); + id = res.getIdentifier(resName, "drawable", packageName); + } else if (size == 1 && TextUtils.isDigitsOnly(segments.get(0))) { + try { + id = Integer.parseInt(segments.get(0)); + } catch (NumberFormatException ignored) { + } + } + + bitmap = BitmapFactory.decodeResource(context.getResources(), id, options); + } else if (uriString.startsWith(ImageSource.ASSET_PREFIX)) { + String assetName = uriString.substring(ImageSource.ASSET_PREFIX.length()); + bitmap = BitmapFactory.decodeStream(context.getAssets().open(assetName), null, options); + } else if (uriString.startsWith(ImageSource.FILE_PREFIX)) { + bitmap = BitmapFactory.decodeFile(uriString.substring(ImageSource.FILE_PREFIX.length()), options); + } else if (sourceUri != null) { + InputStream inputStream = null; + try { + ContentResolver contentResolver = context.getContentResolver(); + inputStream = contentResolver.openInputStream(sourceUri); + bitmap = BitmapFactory.decodeStream(inputStream, null, options); + } finally { + if (inputStream != null) { + try {inputStream.close();} catch (Exception e) { /* Ignore */ } + } + } + } else if (source.getBufferStream() != null) { + try { + bitmap = BitmapFactory.decodeStream(source.getBufferStream(), null, options); + } catch (Exception ignored) {} + } + if (bitmap == null) { + throw new RuntimeException( + "Skia image region decoder returned null bitmap - image format may not be supported"); + } + return bitmap; + } +} diff --git a/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/SkiaImageRegionDecoder.java b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/SkiaImageRegionDecoder.java new file mode 100644 index 0000000000..ac67075c48 --- /dev/null +++ b/Kuroba/app/src/main/java/com/davemorrissey/labs/subscaleview/decoder/SkiaImageRegionDecoder.java @@ -0,0 +1,163 @@ +package com.davemorrissey.labs.subscaleview.decoder; + +import static android.content.res.AssetManager.ACCESS_RANDOM; + +import android.content.ContentResolver; +import android.content.Context; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.graphics.*; +import android.net.Uri; +import android.text.TextUtils; + +import androidx.annotation.*; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; + +import java.io.InputStream; +import java.util.List; +import java.util.concurrent.locks.*; + +/** + * Default implementation of {@link com.davemorrissey.labs.subscaleview.decoder.ImageRegionDecoder} + * using Android's {@link android.graphics.BitmapRegionDecoder}, based on the Skia library. This + * works well in most circumstances and has reasonable performance due to the cached decoder instance, + * however it has some problems with grayscale, indexed and CMYK images. + *

+ * A {@link ReadWriteLock} is used to delegate responsibility for multi threading behaviour to the + * {@link BitmapRegionDecoder} instance on SDK >= 21, whilst allowing this class to block until no + * tiles are being loaded before recycling the decoder. In practice, {@link BitmapRegionDecoder} is + * synchronized internally so this has no real impact on performance. + */ +public class SkiaImageRegionDecoder + implements ImageRegionDecoder { + + private BitmapRegionDecoder decoder; + private final ReadWriteLock decoderLock = new ReentrantReadWriteLock(true); + + private final Bitmap.Config bitmapConfig; + + @Keep + @SuppressWarnings("unused") + public SkiaImageRegionDecoder() { + this(null); + } + + @SuppressWarnings({"WeakerAccess", "SameParameterValue"}) + public SkiaImageRegionDecoder(@Nullable Bitmap.Config bitmapConfig) { + Bitmap.Config globalBitmapConfig = SubsamplingScaleImageView.getPreferredBitmapConfig(); + if (bitmapConfig != null) { + this.bitmapConfig = bitmapConfig; + } else if (globalBitmapConfig != null) { + this.bitmapConfig = globalBitmapConfig; + } else { + this.bitmapConfig = Bitmap.Config.RGB_565; + } + } + + @Override + @NonNull + public Point init(Context context, @NonNull ImageSource source) + throws Exception { + Uri sourceUri = source.getUri(); + String uriString = sourceUri != null ? sourceUri.toString() : ""; + if (uriString.startsWith(ImageSource.RESOURCE_PREFIX)) { + Resources res; + String packageName = sourceUri.getAuthority(); + if (context.getPackageName().equals(packageName)) { + res = context.getResources(); + } else { + PackageManager pm = context.getPackageManager(); + res = pm.getResourcesForApplication(packageName); + } + + int id = 0; + List segments = sourceUri.getPathSegments(); + int size = segments.size(); + if (size == 2 && segments.get(0).equals("drawable")) { + String resName = segments.get(1); + id = res.getIdentifier(resName, "drawable", packageName); + } else if (size == 1 && TextUtils.isDigitsOnly(segments.get(0))) { + try { + id = Integer.parseInt(segments.get(0)); + } catch (NumberFormatException ignored) { + } + } + + decoder = BitmapRegionDecoder.newInstance(context.getResources().openRawResource(id), false); + } else if (uriString.startsWith(ImageSource.ASSET_PREFIX)) { + String assetName = uriString.substring(ImageSource.ASSET_PREFIX.length()); + decoder = BitmapRegionDecoder.newInstance(context.getAssets().open(assetName, ACCESS_RANDOM), false); + } else if (uriString.startsWith(ImageSource.FILE_PREFIX)) { + decoder = BitmapRegionDecoder.newInstance(uriString.substring(ImageSource.FILE_PREFIX.length()), false); + } else if (sourceUri != null) { + InputStream inputStream = null; + try { + ContentResolver contentResolver = context.getContentResolver(); + inputStream = contentResolver.openInputStream(sourceUri); + if (inputStream == null) { + throw new Exception("Content resolver returned null stream. Unable to initialise with uri."); + } + decoder = BitmapRegionDecoder.newInstance(inputStream, false); + } finally { + if (inputStream != null) { + try {inputStream.close();} catch (Exception e) { /* Ignore */ } + } + } + } else if (source.getBufferStream() != null) { + try { + decoder = BitmapRegionDecoder.newInstance(source.getBufferStream(), false); + } catch (Exception ignored) {} + } + return new Point(decoder.getWidth(), decoder.getHeight()); + } + + @Override + @NonNull + public Bitmap decodeRegion(@NonNull Rect sRect, int sampleSize) { + getDecodeLock().lock(); + try { + if (decoder != null && !decoder.isRecycled()) { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inSampleSize = sampleSize; + options.inPreferredConfig = bitmapConfig; + Bitmap bitmap = decoder.decodeRegion(sRect, options); + if (bitmap == null) { + throw new RuntimeException( + "Skia image decoder returned null bitmap - image format may not be supported"); + } + return bitmap; + } else { + throw new IllegalStateException("Cannot decode region after decoder has been recycled"); + } + } finally { + getDecodeLock().unlock(); + } + } + + @Override + public synchronized boolean isReady() { + return decoder != null && !decoder.isRecycled(); + } + + @Override + public synchronized void recycle() { + decoderLock.writeLock().lock(); + try { + decoder.recycle(); + decoder = null; + } finally { + decoderLock.writeLock().unlock(); + } + } + + /** + * Before SDK 21, BitmapRegionDecoder was not synchronized internally. Any attempt to decode + * regions from multiple threads with one decoder instance causes a segfault. For old versions + * use the write lock to enforce single threaded decoding. + */ + private Lock getDecodeLock() { + return decoderLock.readLock(); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/Chan.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/Chan.java new file mode 100644 index 0000000000..a52dbb6ab2 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/Chan.java @@ -0,0 +1,193 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan; + +import static com.github.adamantcheese.chan.Chan.ActivityForegroundStatus.IN_BACKGROUND; +import static com.github.adamantcheese.chan.Chan.ActivityForegroundStatus.IN_FOREGROUND; +import static com.github.adamantcheese.chan.utils.AndroidUtils.postToEventBus; +import static com.github.adamantcheese.chan.utils.StringUtils.exceptionToString; +import static java.lang.Thread.currentThread; + +import android.app.Activity; +import android.app.Application; +import android.os.*; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.core.di.*; +import com.github.adamantcheese.chan.core.manager.BoardManager; +import com.github.adamantcheese.chan.core.manager.SettingNotificationManager; +import com.github.adamantcheese.chan.core.repository.BitmapRepository; +import com.github.adamantcheese.chan.core.repository.SiteRepository; +import com.github.adamantcheese.chan.features.notifications.*; +import com.github.adamantcheese.chan.ui.widget.CancellableToast; +import com.github.adamantcheese.chan.utils.*; + +import org.codejargon.feather.Feather; +import org.greenrobot.eventbus.EventBus; + +import java.io.IOException; + +import javax.inject.Inject; + +import io.reactivex.exceptions.UndeliverableException; +import io.reactivex.plugins.RxJavaPlugins; + +public class Chan + extends Application + implements DefaultActivityLifecycleCallbacks { + private boolean isInForeground; + private final Handler handler = new Handler(Looper.getMainLooper()); + + @Inject + SiteRepository siteRepository; + + @Inject + BoardManager boardManger; + + private static Feather feather; + + public static T instance(Class tClass) { + return feather.instance(tClass); + } + + public static void inject(T instance) { + feather.injectFields(instance); + } + + @Override + public void onCreate() { + super.onCreate(); + registerActivityLifecycleCallbacks(this); + + EventBus.builder().logNoSubscriberMessages(false).installDefaultEventBus(); + AndroidUtils.init(this); + BitmapRepository.initialize(this); + SettingNotificationManager.postNotification(null); + + WatchNotification.setupChannel(); + SavingNotification.setupChannel(); + LastPageNotification.setupChannel(); + + feather = Feather.with(new AppModule(), new RepositoryModule(), new ManagerModule()); + feather.injectFields(this); + + siteRepository.initialize(); + boardManger.initialize(); + + RxJavaPlugins.setErrorHandler(e -> { + if (e instanceof UndeliverableException) { + e = e.getCause(); + } + + if (e == null) { + return; + } + + if (e instanceof IOException) { + // fine, irrelevant network problem or API that throws on cancellation + return; + } + if (e instanceof InterruptedException) { + // fine, some blocking code was interrupted by a dispose call + return; + } + if (e instanceof RuntimeException && e.getCause() instanceof InterruptedException) { + // fine, DB synchronous call (via runTask) was interrupted when a reactive stream + // was disposed of. + return; + } + if ((e instanceof NullPointerException) || (e instanceof IllegalArgumentException)) { + // that's likely a bug in the application + currentThread().getUncaughtExceptionHandler().uncaughtException(currentThread(), e); + return; + } + if (e instanceof IllegalStateException) { + // that's a bug in RxJava or in a custom operator + currentThread().getUncaughtExceptionHandler().uncaughtException(currentThread(), e); + return; + } + + // Do not exit the app here! Most of the time an exception that comes here is not a + // fatal one. We only want to log and report them to analyze later. The app should be + // able to continue running after that. + Logger.e("APP", "RxJava undeliverable exception", e); + }); + + Thread.setDefaultUncaughtExceptionHandler((t, e) -> { + //if there's any uncaught crash stuff, just dump them to the log and exit immediately + String errorText = exceptionToString(e); + + Logger.e("UNCAUGHT", errorText); + Logger.e("UNCAUGHT", "------------------------------"); + Logger.e("UNCAUGHT", "END OF CURRENT RUNTIME MESSAGES"); + Logger.e("UNCAUGHT", "------------------------------"); + Logger.e("UNCAUGHT", "Android API Level: " + Build.VERSION.SDK_INT); + Logger.e("UNCAUGHT", "App Version: " + BuildConfigUtils.VERSION); + Logger.e("UNCAUGHT", "Phone Model: " + Build.MANUFACTURER + " " + Build.MODEL); + + if (e instanceof OutOfMemoryError) { + Logger.e("UNCAUGHT", "Out of memory! Memory stats:"); + Runtime runtime = Runtime.getRuntime(); + long usedMemInMB = (runtime.totalMemory() - runtime.freeMemory()) / 1048576L; + long maxHeapSizeInMB = runtime.maxMemory() / 1048576L; + long availHeapSizeInMB = maxHeapSizeInMB - usedMemInMB; + Logger.e("UNCAUGHT", "Used memory (MB): " + usedMemInMB); + Logger.e("UNCAUGHT", "Max memory (MB): " + maxHeapSizeInMB); + Logger.e("UNCAUGHT", "Available memory (MB): " + availHeapSizeInMB); + } + + System.exit(999); + }); + } + + public boolean getActivityInForeground() { + return isInForeground; + } + + @Override + public void onActivityResumed(@NonNull Activity activity) { + isInForeground = true; + postToEventBus(IN_FOREGROUND); + postEventBusOneSecondMessage(); + } + + @Override + public void onActivityPaused(@NonNull Activity activity) { + isInForeground = false; + postToEventBus(IN_BACKGROUND); + handler.removeCallbacks(this::postEventBusOneSecondMessage); + } + + @Override + public void onActivityDestroyed(@NonNull Activity activity) { + BitmapRepository.cleanup(); + BackgroundUtils.cleanup(); + CancellableToast.cleanup(); + handler.removeCallbacks(this::postEventBusOneSecondMessage); + } + + public enum ActivityForegroundStatus { + IN_FOREGROUND, + IN_BACKGROUND + } + + private void postEventBusOneSecondMessage() { + EventBus.getDefault().post("TICK"); + handler.postDelayed(this::postEventBusOneSecondMessage, 1000); + } +} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/state/ChanState.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ChanState.java similarity index 87% rename from Clover/app/src/main/java/org/floens/chan/ui/state/ChanState.java rename to Kuroba/app/src/main/java/com/github/adamantcheese/chan/ChanState.java index 37dbca396e..d3c2d21b9b 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/state/ChanState.java +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ChanState.java @@ -1,6 +1,5 @@ /* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,14 +14,15 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.floens.chan.ui.state; +package com.github.adamantcheese.chan; import android.os.Parcel; import android.os.Parcelable; -import org.floens.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.model.orm.Loadable; -public class ChanState implements Parcelable { +public class ChanState + implements Parcelable { public Loadable board; public Loadable thread; diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/DefaultActivityLifecycleCallbacks.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/DefaultActivityLifecycleCallbacks.java new file mode 100644 index 0000000000..9151054e2e --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/DefaultActivityLifecycleCallbacks.java @@ -0,0 +1,25 @@ +package com.github.adamantcheese.chan; + +import android.app.Activity; +import android.app.Application; +import android.os.Bundle; + +import androidx.annotation.NonNull; + +public interface DefaultActivityLifecycleCallbacks + extends Application.ActivityLifecycleCallbacks { + + default void onActivityStarted(@NonNull Activity activity) {} + + default void onActivityStopped(@NonNull Activity activity) {} + + default void onActivityCreated(@NonNull Activity activity, Bundle savedInstanceState) {} + + default void onActivityResumed(@NonNull Activity activity) {} + + default void onActivityPaused(@NonNull Activity activity) {} + + default void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {} + + default void onActivityDestroyed(@NonNull Activity activity) {} +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/StartActivity.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/StartActivity.java new file mode 100644 index 0000000000..d04fe4e303 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/StartActivity.java @@ -0,0 +1,631 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan; + +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; +import static com.github.adamantcheese.chan.Chan.ActivityForegroundStatus.IN_BACKGROUND; +import static com.github.adamantcheese.chan.Chan.inject; +import static com.github.adamantcheese.chan.core.settings.ChanSettings.LayoutMode.AUTO; +import static com.github.adamantcheese.chan.core.settings.ChanSettings.LayoutMode.PHONE; +import static com.github.adamantcheese.chan.core.settings.ChanSettings.LayoutMode.SLIDE; +import static com.github.adamantcheese.chan.core.settings.ChanSettings.LayoutMode.SPLIT; +import static com.github.adamantcheese.chan.ui.widget.CancellableToast.showToast; +import static com.github.adamantcheese.chan.ui.widget.DefaultAlertDialog.getDefaultAlertBuilder; +import static com.github.adamantcheese.chan.utils.AndroidUtils.isAndroid10; +import static com.github.adamantcheese.chan.utils.AndroidUtils.isTablet; +import static com.github.adamantcheese.chan.utils.AndroidUtils.openLink; +import static java.util.concurrent.TimeUnit.HOURS; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.net.Uri; +import android.nfc.*; +import android.os.Bundle; +import android.view.*; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.util.Pair; +import androidx.lifecycle.DefaultLifecycleObserver; +import androidx.lifecycle.LifecycleOwner; + +import com.github.adamantcheese.chan.controller.Controller; +import com.github.adamantcheese.chan.controller.NavigationController; +import com.github.adamantcheese.chan.core.database.DatabaseLoadableManager; +import com.github.adamantcheese.chan.core.database.DatabaseUtils; +import com.github.adamantcheese.chan.core.manager.*; +import com.github.adamantcheese.chan.core.model.orm.*; +import com.github.adamantcheese.chan.core.net.NetUtils; +import com.github.adamantcheese.chan.core.repository.SiteRepository; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.core.site.SiteResolver; +import com.github.adamantcheese.chan.features.embedding.EmbeddingEngine; +import com.github.adamantcheese.chan.ui.controller.*; +import com.github.adamantcheese.chan.ui.helper.ImagePickDelegate; +import com.github.adamantcheese.chan.ui.helper.RuntimePermissionsHelper; +import com.github.adamantcheese.chan.ui.helper.ThemeHelper; +import com.github.adamantcheese.chan.utils.Logger; +import com.github.k1rakishou.fsaf.FileChooser; +import com.github.k1rakishou.fsaf.callback.FSAFActivityCallbacks; + +import org.greenrobot.eventbus.*; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.util.List; +import java.util.Stack; + +import javax.inject.Inject; + +import kotlin.jvm.functions.Function1; + +public class StartActivity + extends AppCompatActivity + implements NfcAdapter.CreateNdefMessageCallback, FSAFActivityCallbacks, DefaultLifecycleObserver { + private static final String STATE_KEY = "chan_state"; + + private final Stack stack = new Stack<>(); + + private DrawerController drawerController; + private NavigationController mainNavigationController; + private BrowseController browseController; + + private ImagePickDelegate imagePickDelegate; + private RuntimePermissionsHelper runtimePermissionsHelper; + private UpdateManager updateManager; + + private boolean intentMismatchWorkaroundActive = false; + + public static boolean loadedFromURL = false; + private int currentNightModeBits; + + @Inject + DatabaseLoadableManager databaseLoadableManager; + @Inject + SiteRepository siteRepository; + @Inject + FileChooser fileChooser; + @Inject + SiteResolver siteResolver; + @Inject + WatchManager watchManager; + @Inject + FilterWatchManager filterWatchManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + currentNightModeBits = this.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; + super.onCreate(savedInstanceState); + getLifecycle().addObserver(this); + + inject(this); + + if (intentMismatchWorkaround()) { + return; + } + + // sets up the singleton + EmbeddingEngine setup = new EmbeddingEngine(this, EmbeddingEngine.getDefaultEmbedders()); + getLifecycle().addObserver(setup); + + ThemeHelper.init(); + ThemeHelper.setupContext(this); + fileChooser.setCallbacks(this); + imagePickDelegate = new ImagePickDelegate(this); + runtimePermissionsHelper = new RuntimePermissionsHelper(this); + updateManager = new UpdateManager(this); + + // Setup base controllers, and decide if to use the split layout for tablets + drawerController = new DrawerController(this); + drawerController.onCreate(); + drawerController.onShow(); + + setupLayout(); + + setContentView(drawerController.view); + pushController(drawerController); + + NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this); + if (adapter != null) { + adapter.setNdefPushMessageCallback(this, this); + } + + setupFromStateOrFreshLaunch(savedInstanceState); + updateManager.autoUpdateCheck(); + + if (ChanSettings.fullUserRotationEnable.get()) { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER); + } + } + + private void setupFromStateOrFreshLaunch(Bundle savedInstanceState) { + boolean handled; + if (savedInstanceState != null) { + handled = restoreFromSavedState(savedInstanceState); + } else { + handled = restoreFromUrl(); + } + + // Not from a state or from an url, launch the setup controller if no boards are setup up yet, + // otherwise load the default saved board. + if (!handled) { + restoreFresh(); + } + } + + private void restoreFresh() { + if (siteRepository.all().getAll().isEmpty()) { + browseController.showSitesNotSetup(); + } else { + browseController.loadWithDefaultBoard(); + } + } + + private boolean restoreFromUrl() { + final Uri data = getIntent().getData(); + // Start from an url launch. + if (data != null) { + final Loadable loadableResult = siteResolver.resolveLoadableForUrl(data.toString()); + + if (loadableResult != null) { + loadedFromURL = true; + + browseController.setBoard(loadableResult.board); + + if (loadableResult.isThreadMode()) { + browseController.showThread(loadableResult); + } + return true; + } else { + getDefaultAlertBuilder(this) + .setMessage(getString(R.string.open_link_not_matched, BuildConfig.APP_LABEL)) + .setPositiveButton(R.string.ok, (dialog, which) -> openLink(data.toString())) + .show(); + } + } + + return false; + } + + private boolean restoreFromSavedState(Bundle savedInstanceState) { + // Restore the activity state from the previously saved state. + ChanState chanState = savedInstanceState.getParcelable(STATE_KEY); + if (chanState == null) { + Logger.e(this, "savedInstanceState was not null, but no ChanState was found!"); + } else { + Pair boardThreadPair = resolveChanState(chanState); + + if (boardThreadPair.first != null) { + browseController.setBoard(boardThreadPair.first.board); + + if (boardThreadPair.second != null) { + browseController.showThread(boardThreadPair.second); + } + return true; + } + } + + return false; + } + + private Pair resolveChanState(ChanState state) { + Loadable boardLoadable = resolveLoadable(state.board, false); + Loadable threadLoadable = resolveLoadable(state.thread, true); + + return new Pair<>(boardLoadable, threadLoadable); + } + + private Loadable resolveLoadable(Loadable stateLoadable, boolean forThread) { + // invalid (no state saved). + if (stateLoadable.mode != (forThread ? Loadable.Mode.THREAD : Loadable.Mode.CATALOG)) { + return null; + } + + Site site = siteRepository.forId(stateLoadable.siteId); + if (site != null) { + Board board = site.board(stateLoadable.boardCode); + if (board != null) { + stateLoadable.site = site; + stateLoadable.board = board; + if (forThread && stateLoadable.id == 0) { + stateLoadable = databaseLoadableManager.get(stateLoadable); + } + + return stateLoadable; + } + } + + return null; + } + + private void setupLayout() { + mainNavigationController = new StyledToolbarNavigationController(this); + + ChanSettings.LayoutMode layoutMode = ChanSettings.layoutMode.get(); + if (layoutMode == AUTO) { + if (isTablet()) { + layoutMode = SPLIT; + } else { + layoutMode = SLIDE; + } + } + + switch (layoutMode) { + case SPLIT: + SplitNavigationController split = new SplitNavigationController(this); + split.setEmptyView((ViewGroup) LayoutInflater.from(this).inflate(R.layout.layout_split_empty, null)); + + drawerController.setChildController(split); + + split.setLeftController(mainNavigationController); + break; + case PHONE: + case SLIDE: + drawerController.setChildController(mainNavigationController); + break; + } + + browseController = new BrowseController(this); + + if (layoutMode == SLIDE || layoutMode == PHONE) { + ThreadSlideController slideController = new ThreadSlideController(this); + slideController.setEmptyView((ViewGroup) LayoutInflater + .from(this) + .inflate(R.layout.layout_split_empty, null)); + mainNavigationController.pushController(slideController, false); + slideController.setLeftController(browseController); + } else { + mainNavigationController.pushController(browseController, false); + } + } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + // Handle WatchNotification clicks + // pop any image viewers + popAllControllerClass(ImageViewerNavigationController.class); + if (intent.getExtras() != null) { + int pinId = intent.getExtras().getInt("pin_id", -2); + if (pinId != -2 && mainNavigationController.getTop() instanceof BrowseController) { + if (pinId == -1) { + drawerController.onMenuClicked(); + } else { + Pin pin = watchManager.findPinById(pinId); + if (pin != null) { + browseController.showThread(pin.loadable); + } + } + } else if (pinId != -2 && mainNavigationController.getTop() instanceof ThreadSlideController) { + if (pinId == -1) { + drawerController.onMenuClicked(); + } else { + Pin pin = watchManager.findPinById(pinId); + if (pin != null) { + List controllers = mainNavigationController.childControllers; + for (Controller controller : controllers) { + if (controller instanceof ViewThreadController) { + ((ViewThreadController) controller).loadThread(pin.loadable); + break; + } else if (controller instanceof ThreadSlideController) { + ThreadSlideController slideNav = (ThreadSlideController) controller; + if (slideNav.getRightController() instanceof ViewThreadController) { + ((ViewThreadController) slideNav.getRightController()).loadThread(pin.loadable); + } else { + ViewThreadController v = new ViewThreadController(this, pin.loadable); + slideNav.setRightController(v); + } + slideNav.switchToController(false); + break; + } + } + } + } + } + } + } + + @Override + public boolean dispatchKeyEvent(@NonNull KeyEvent event) { + if (event.getKeyCode() == KeyEvent.KEYCODE_MENU && event.getAction() == KeyEvent.ACTION_DOWN) { + drawerController.onMenuClicked(); + return true; + } + + return stack.peek().dispatchKeyEvent(event) || super.dispatchKeyEvent(event); + } + + @Override + protected void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + + Loadable board = browseController.getLoadable(); + if (board == null) { + Logger.e(this, "Can not save instance state, the board loadable is null"); + } else { + Loadable thread = null; + + if (drawerController.childControllers.get(0) instanceof SplitNavigationController) { + SplitNavigationController dblNav = (SplitNavigationController) drawerController.childControllers.get(0); + if (dblNav.getRightController() instanceof NavigationController) { + NavigationController rightNavigationController = (NavigationController) dblNav.getRightController(); + for (Controller controller : rightNavigationController.childControllers) { + if (controller instanceof ViewThreadController) { + thread = ((ViewThreadController) controller).getLoadable(); + break; + } + } + } + } else { + List controllers = mainNavigationController.childControllers; + for (Controller controller : controllers) { + if (controller instanceof ViewThreadController) { + thread = ((ViewThreadController) controller).getLoadable(); + break; + } else if (controller instanceof ThreadSlideController) { + ThreadSlideController slideNav = (ThreadSlideController) controller; + if (slideNav.getRightController() instanceof ViewThreadController) { + thread = ((ViewThreadController) slideNav.getRightController()).getLoadable(); + break; + } + } + } + } + + if (thread == null) { + // Make the parcel happy + thread = Loadable.dummyLoadable(); + } + + outState.putParcelable(STATE_KEY, new ChanState(board.clone(), thread.clone())); + } + } + + @Override + public NdefMessage createNdefMessage(NfcEvent event) { + Controller threadController = null; + if (drawerController.childControllers.get(0) instanceof DoubleNavigationController) { + SplitNavigationController splitNavigationController = + (SplitNavigationController) drawerController.childControllers.get(0); + if (splitNavigationController.rightController instanceof NavigationController) { + NavigationController rightNavigationController = + (NavigationController) splitNavigationController.rightController; + for (Controller controller : rightNavigationController.childControllers) { + if (controller instanceof NfcAdapter.CreateNdefMessageCallback) { + threadController = controller; + break; + } + } + } + } + + if (threadController == null) { + threadController = mainNavigationController.getTop(); + } + + if (threadController instanceof NfcAdapter.CreateNdefMessageCallback) { + return ((NfcAdapter.CreateNdefMessageCallback) threadController).createNdefMessage(event); + } else { + return null; + } + } + + public void pushController(Controller controller) { + stack.push(controller); + } + + public boolean isControllerAdded(Function1 predicate) { + for (Controller controller : stack) { + if (predicate.invoke(controller)) { + return true; + } + } + + return false; + } + + public void popController(Controller controller) { + stack.remove(controller); + } + + public void popAllControllerClass(Class controllerClass) { + for (Controller controller : stack) { + if (controller.getClass().equals(controllerClass)) { + controller.stopPresenting(); + } + } + } + + public ViewGroup getContentView() { + return findViewById(android.R.id.content); + } + + public ImagePickDelegate getImagePickDelegate() { + return imagePickDelegate; + } + + public UpdateManager getUpdateManager() { + return updateManager; + } + + public RuntimePermissionsHelper getRuntimePermissionsHelper() { + return runtimePermissionsHelper; + } + + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + + if (isAndroid10() + && (newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK) != currentNightModeBits + && ThemeHelper.areDayAndNightThemesDifferent()) { + restartApp(); + } + + for (Controller controller : stack) { + controller.onConfigurationChanged(newConfig); + } + } + + @Override + public void onBackPressed() { + if (!stack.peek().onBack()) { + super.onBackPressed(); + } + } + + @Override + public void onRequestPermissionsResult( + int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + runtimePermissionsHelper.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + + if (intentMismatchWorkaround()) { + return; + } + + fileChooser.removeCallbacks(); + + while (!stack.isEmpty()) { + Controller controller = stack.pop(); + + controller.onHide(); + controller.onDestroy(); + } + + NetUtils.applicationClient.dispatcher().cancelAll(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (fileChooser.onActivityResult(requestCode, resultCode, data)) { + return; + } + + imagePickDelegate.onActivityResult(requestCode, resultCode, data); + } + + private boolean intentMismatchWorkaround() { + // Workaround for an intent mismatch that causes a new activity instance to be started + // every time the app is launched from the launcher. + // See https://issuetracker.google.com/issues/36907463 + // Still unfixed as of 5/15/2019 + if (intentMismatchWorkaroundActive) { + return true; + } + + if (!isTaskRoot()) { + Intent intent = getIntent(); + if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(intent.getAction())) { + Logger.w(this, "Workaround for intent mismatch."); + intentMismatchWorkaroundActive = true; + finish(); + return true; + } + } + return false; + } + + public void restartApp() { + Intent intent = new Intent(this, StartActivity.class); + intent.addFlags(FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + finish(); + + Runtime.getRuntime().exit(0); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEvent(Chan.ActivityForegroundStatus status) { + if (status == IN_BACKGROUND) { + DatabaseUtils.runTaskAsync(databaseLoadableManager.purgeOld()); + File requestedFiles = new File(getCacheDir(), "requested"); + File[] files = requestedFiles.listFiles(); + if (files == null) return; + for (File f : files) { + if (System.currentTimeMillis() > f.lastModified() + HOURS.toMillis(1)) { + f.delete(); + } + } + } + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEvent(ActivityToastMessage toastMessage) { + showToast(this, toastMessage.message, toastMessage.toastLength); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEvent(ActivityAlertDialogMessage dialogMessage) { + dialogMessage.show(this); + } + + @Override + public void fsafStartActivityForResult(@NotNull Intent intent, int requestCode) { + startActivityForResult(intent, requestCode); + } + + @Override + public void onStart(@NonNull LifecycleOwner owner) { + EventBus.getDefault().register(this); + } + + @Override + public void onStop(@NonNull LifecycleOwner owner) { + EventBus.getDefault().unregister(this); + } + + public static class ActivityToastMessage { + public String message; + public int toastLength; + + public ActivityToastMessage(String message, int toastLength) { + this.message = message; + this.toastLength = toastLength; + } + } + + public static class ActivityAlertDialogMessage { + private final String toShow; + + public ActivityAlertDialogMessage(String message) { + toShow = message; + } + + public void show(Context context) { + AlertDialog test = getDefaultAlertBuilder(context) + .setMessage(toShow) + .setPositiveButton(R.string.ok, (dialog, which) -> dialog.dismiss()) + .create(); + test.setCanceledOnTouchOutside(true); + test.show(); + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/Controller.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/Controller.java new file mode 100644 index 0000000000..bea0ac0d03 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/Controller.java @@ -0,0 +1,257 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.controller; + +import static android.view.View.GONE; +import static android.view.View.VISIBLE; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import static com.github.adamantcheese.chan.Chan.inject; +import static com.github.adamantcheese.chan.utils.AndroidUtils.removeFromParentView; + +import android.content.Context; +import android.content.res.Configuration; +import android.view.KeyEvent; +import android.view.ViewGroup; + +import androidx.annotation.CallSuper; + +import com.github.adamantcheese.chan.StartActivity; +import com.github.adamantcheese.chan.controller.transition.FadeInTransition; +import com.github.adamantcheese.chan.controller.transition.FadeOutTransition; +import com.github.adamantcheese.chan.ui.controller.DoubleNavigationController; +import com.github.adamantcheese.chan.ui.toolbar.NavigationItem; +import com.github.adamantcheese.chan.ui.toolbar.Toolbar; + +import java.util.ArrayList; +import java.util.List; + +import kotlin.jvm.functions.Function1; + +public abstract class Controller { + public Context context; + public ViewGroup view; + + public NavigationItem navigation = new NavigationItem(); + + public Controller parentController; + + public List childControllers = new ArrayList<>(); + + // NavigationControllers members + public Controller previousSiblingController; + public NavigationController navigationController; + + public DoubleNavigationController doubleNavigationController; + + /** + * Controller that this controller is presented by. + */ + public Controller presentedByController; + + /** + * Controller that this controller is presenting. + */ + public Controller presentingThisController; + + public boolean alive = false; + private boolean shown = false; + + public Controller(Context context) { + this.context = context; + // for any controller, injection is taken care of here so the user can just specify the needed injections without + // having to worry about this + inject(this); + } + + @CallSuper + public void onCreate() { + alive = true; + } + + @CallSuper + public void onShow() { + shown = true; + + view.setVisibility(VISIBLE); + + for (Controller controller : childControllers) { + if (!controller.shown) { + controller.onShow(); + } + } + } + + @CallSuper + public void onHide() { + shown = false; + + view.setVisibility(GONE); + + for (Controller controller : childControllers) { + if (controller.shown) { + controller.onHide(); + } + } + } + + @CallSuper + public void onDestroy() { + alive = false; + + while (childControllers.size() > 0) { + removeChildController(childControllers.get(0)); + } + + removeFromParentView(view); + } + + public void addChildController(Controller controller) { + childControllers.add(controller); + controller.parentController = this; + if (doubleNavigationController != null) { + controller.doubleNavigationController = doubleNavigationController; + } + if (navigationController != null) { + controller.navigationController = navigationController; + } + controller.onCreate(); + } + + public void removeChildController(Controller controller) { + controller.onDestroy(); + childControllers.remove(controller); + } + + public void attachToParentView(ViewGroup parentView) { + if (view.getParent() != null) { + removeFromParentView(view); + } + + if (parentView != null) { + attachToView(parentView); + } + } + + public void onConfigurationChanged(Configuration newConfig) { + for (Controller controller : childControllers) { + controller.onConfigurationChanged(newConfig); + } + } + + public boolean dispatchKeyEvent(KeyEvent event) { + for (int i = childControllers.size() - 1; i >= 0; i--) { + Controller controller = childControllers.get(i); + if (controller.dispatchKeyEvent(event)) { + return true; + } + } + + return false; + } + + /** + * @return true if the back press was handled by the controller, false to pass it on + */ + public boolean onBack() { + for (int i = childControllers.size() - 1; i >= 0; i--) { + Controller controller = childControllers.get(i); + if (controller.onBack()) { + return true; + } + } + + return false; + } + + public void presentController(Controller controller) { + presentController(controller, true); + } + + public void presentController(Controller controller, boolean animated) { + ViewGroup contentView = ((StartActivity) context).getContentView(); + presentingThisController = controller; + controller.presentedByController = this; + + controller.onCreate(); + controller.attachToView(contentView); + + if (animated) { + ControllerTransition transition = new FadeInTransition(); + transition.to = controller; + transition.setCallback(transition1 -> controller.onShow()); + transition.perform(); + } else { + controller.onShow(); + } + + ((StartActivity) context).pushController(controller); + } + + public boolean isAlreadyPresenting(Function1 predicate) { + return ((StartActivity) context).isControllerAdded(predicate); + } + + public void stopPresenting() { + stopPresenting(true); + } + + public void stopPresenting(boolean animated) { + if (animated) { + ControllerTransition transition = new FadeOutTransition(); + transition.from = this; + transition.setCallback(transition1 -> finishPresenting()); + transition.perform(); + } else { + finishPresenting(); + } + + ((StartActivity) context).popController(this); + presentedByController.presentingThisController = null; + } + + private void finishPresenting() { + onHide(); + onDestroy(); + } + + public Controller getTop() { + if (childControllers.size() > 0) { + return childControllers.get(childControllers.size() - 1); + } else { + return null; + } + } + + public Toolbar getToolbar() { + return null; + } + + private void attachToView(ViewGroup parentView) { + ViewGroup.LayoutParams params = view.getLayoutParams(); + + if (params == null) { + params = new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT); + } else { + params.width = MATCH_PARENT; + params.height = MATCH_PARENT; + } + + view.setLayoutParams(params); + + parentView.addView(view, view.getLayoutParams()); + } +} diff --git a/Clover/app/src/main/java/org/floens/chan/controller/ControllerTransition.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/ControllerTransition.java similarity index 85% rename from Clover/app/src/main/java/org/floens/chan/controller/ControllerTransition.java rename to Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/ControllerTransition.java index 99a85223dc..0d0a101195 100644 --- a/Clover/app/src/main/java/org/floens/chan/controller/ControllerTransition.java +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/ControllerTransition.java @@ -1,6 +1,5 @@ /* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,15 +14,13 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.floens.chan.controller; +package com.github.adamantcheese.chan.controller; public abstract class ControllerTransition { private Callback callback; public Controller from; public Controller to; - public boolean destroyFrom; - public boolean viewOver = true; public abstract void perform(); diff --git a/Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/NavigationController.java similarity index 80% rename from Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java rename to Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/NavigationController.java index 1b461bb605..e97741641e 100644 --- a/Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/NavigationController.java @@ -1,6 +1,5 @@ /* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,16 +14,17 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.floens.chan.controller; +package com.github.adamantcheese.chan.controller; import android.content.Context; import android.view.KeyEvent; import android.view.ViewGroup; -import org.floens.chan.controller.transition.PopControllerTransition; -import org.floens.chan.controller.transition.PushControllerTransition; +import com.github.adamantcheese.chan.controller.transition.PopControllerTransition; +import com.github.adamantcheese.chan.controller.transition.PushControllerTransition; -public abstract class NavigationController extends Controller { +public abstract class NavigationController + extends Controller { protected ViewGroup container; protected ControllerTransition controllerTransition; @@ -48,7 +48,7 @@ public boolean pushController(final Controller to, ControllerTransition controll final Controller from = getTop(); if (from == null && controllerTransition != null) { - throw new IllegalArgumentException("Cannot animate push when from is null"); + controllerTransition = null; //can't animate push if from is null, just disable the animation } transition(from, to, true, controllerTransition); @@ -108,12 +108,14 @@ public void endSwipeTransition(final Controller from, final Controller to, boole blockingInput = false; } - public void transition(final Controller from, final Controller to, final boolean pushing, ControllerTransition controllerTransition) { + public void transition( + final Controller from, final Controller to, final boolean pushing, ControllerTransition controllerTransition + ) { if (this.controllerTransition != null || blockingInput) { throw new IllegalArgumentException("Cannot transition while another transition is in progress."); } - if (!pushing && childControllers.size() == 0) { + if (!pushing && childControllers.isEmpty()) { throw new IllegalArgumentException("Cannot pop with no controllers left"); } @@ -136,24 +138,11 @@ public void transition(final Controller from, final Controller to, final boolean controllerTransition.to = to; blockingInput = true; this.controllerTransition = controllerTransition; - controllerTransition.setCallback(new ControllerTransition.Callback() { - @Override - public void onControllerTransitionCompleted(ControllerTransition transition) { - finishTransition(from, pushing); - } - }); + controllerTransition.setCallback(transition -> finishTransition(from, pushing)); controllerTransition.perform(); } else { finishTransition(from, pushing); } - - if (to != null) { - if (pushing) { - controllerPushed(to); - } else { - controllerPopped(to); - } - } } private void finishTransition(Controller from, boolean pushing) { @@ -169,12 +158,6 @@ private void finishTransition(Controller from, boolean pushing) { blockingInput = false; } - protected void controllerPushed(Controller controller) { - } - - protected void controllerPopped(Controller controller) { - } - public boolean onBack() { if (blockingInput) return true; diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/FadeInTransition.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/FadeInTransition.java new file mode 100644 index 0000000000..c3e42cfa87 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/FadeInTransition.java @@ -0,0 +1,43 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.controller.transition; + +import android.animation.*; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; + +import com.github.adamantcheese.chan.controller.ControllerTransition; + +public class FadeInTransition + extends ControllerTransition { + @Override + public void perform() { + Animator toAlpha = ObjectAnimator.ofFloat(to.view, View.ALPHA, 0f, 1f); + toAlpha.setInterpolator(new AccelerateDecelerateInterpolator()); + + toAlpha.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + onCompleted(); + } + }); + + AnimatorSet set = new AnimatorSet(); + set.playTogether(toAlpha); + set.start(); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/FadeOutTransition.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/FadeOutTransition.java new file mode 100644 index 0000000000..ae2cd76beb --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/FadeOutTransition.java @@ -0,0 +1,43 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.controller.transition; + +import android.animation.*; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; + +import com.github.adamantcheese.chan.controller.ControllerTransition; + +public class FadeOutTransition + extends ControllerTransition { + @Override + public void perform() { + Animator toAlpha = ObjectAnimator.ofFloat(from.view, View.ALPHA, 1f, 0f); + toAlpha.setInterpolator(new AccelerateDecelerateInterpolator()); + + toAlpha.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + onCompleted(); + } + }); + + AnimatorSet set = new AnimatorSet(); + set.playTogether(toAlpha); + set.start(); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/PopControllerTransition.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/PopControllerTransition.java new file mode 100644 index 0000000000..9fbfc21305 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/PopControllerTransition.java @@ -0,0 +1,52 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.controller.transition; + +import android.animation.*; +import android.view.View; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.DecelerateInterpolator; + +import com.github.adamantcheese.chan.controller.ControllerTransition; + +public class PopControllerTransition + extends ControllerTransition { + @Override + public void perform() { + Animator toAlpha = ObjectAnimator.ofFloat(to.view, View.ALPHA, to.view.getAlpha(), 1f); + toAlpha.setInterpolator(new DecelerateInterpolator()); // new PathInterpolator(0f, 0f, 0.2f, 1f) + + Animator fromY = ObjectAnimator.ofFloat(from.view, View.TRANSLATION_Y, 0f, from.view.getHeight() * 0.05f); + fromY.setInterpolator(new AccelerateInterpolator(2.5f)); + + fromY.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + onCompleted(); + } + }); + + Animator fromAlpha = ObjectAnimator.ofFloat(from.view, View.ALPHA, from.view.getAlpha(), 0f); + fromAlpha.setInterpolator(new AccelerateInterpolator(2f)); + fromAlpha.setStartDelay(100); + fromAlpha.setDuration(200); + + AnimatorSet set = new AnimatorSet(); + set.playTogether(/*toAlpha, */fromY, fromAlpha); + set.start(); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/PushControllerTransition.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/PushControllerTransition.java new file mode 100644 index 0000000000..aa49aa2bd6 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/transition/PushControllerTransition.java @@ -0,0 +1,50 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.controller.transition; + +import android.animation.*; +import android.view.View; +import android.view.animation.DecelerateInterpolator; + +import androidx.core.view.OneShotPreDrawListener; + +import com.github.adamantcheese.chan.controller.ControllerTransition; + +public class PushControllerTransition + extends ControllerTransition { + @Override + public void perform() { + OneShotPreDrawListener.add(to.view, () -> { + Animator toAlpha = ObjectAnimator.ofFloat(to.view, View.ALPHA, 0f, 1f); + toAlpha.setInterpolator(new DecelerateInterpolator(2f)); + + Animator toY = ObjectAnimator.ofFloat(to.view, View.TRANSLATION_Y, to.view.getHeight() * 0.08f, 0f); + toY.setInterpolator(new DecelerateInterpolator(2.5f)); + + toY.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + onCompleted(); + } + }); + + AnimatorSet set = new AnimatorSet(); + set.playTogether(/*fromAlpha, */toAlpha, toY); + set.start(); + }); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/ui/NavigationControllerContainerLayout.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/ui/NavigationControllerContainerLayout.java new file mode 100644 index 0000000000..435feb1fc2 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/ui/NavigationControllerContainerLayout.java @@ -0,0 +1,364 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.controller.ui; + +import static com.github.adamantcheese.chan.utils.AndroidUtils.dp; +import static com.github.adamantcheese.chan.utils.AndroidUtils.isAndroid10; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.res.Configuration; +import android.graphics.*; +import android.util.AttributeSet; +import android.view.*; +import android.widget.FrameLayout; +import android.widget.Scroller; + +import androidx.core.view.ViewCompat; + +import com.github.adamantcheese.chan.controller.Controller; +import com.github.adamantcheese.chan.controller.NavigationController; +import com.github.adamantcheese.chan.features.gesture_editor.Android10GesturesExclusionZonesHolder; +import com.github.adamantcheese.chan.features.gesture_editor.ExclusionZone; +import com.github.adamantcheese.chan.utils.AndroidUtils; + +import java.util.*; + +public class NavigationControllerContainerLayout + extends FrameLayout { + private NavigationController navigationController; + + private final int slopPixels; + + /** + * How many pixels we should move a finger to the right before we start moving the whole controller to the right + * when a controller is being swiped. (The lower it is the easier it is to start moving the controller which may + * make it harder to click other views) + */ + private final float minimalMovedPixels; + private final int maxFlingPixels; + + private boolean swipeEnabled = true; + + // The event used in onInterceptTouchEvent to track the initial down event + private MotionEvent interceptedEvent; + + // The tracking is blocked when the user has moved too much in the y direction + private boolean blockTracking = false; + + // Is the top controller being tracked and moved + private boolean tracking = false; + + // The controller being tracked, corresponds with tracking + private Controller trackingController; + + // The controller behind the tracking controller + private Controller behindTrackingController; + + // The position of the touch after tracking has started, used to calculate the total offset from + private int trackStartPosition; + + // Tracks the motion when tracking + private VelocityTracker velocityTracker; + + // Used to fling and scroll the tracking view + private final Scroller scroller; + + // Indicate if the controller should be popped after the animation ends + private boolean finishTransitionAfterAnimation = false; + + // Paint, draw rect and position for drawing the shadow + // The shadow is only drawn when tracking is true + private final Paint shadowPaint; + private final Rect shadowRect = new Rect(); + private int shadowPosition; + + public NavigationControllerContainerLayout(Context context) { + this(context, null); + } + + public NavigationControllerContainerLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public NavigationControllerContainerLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + ViewConfiguration viewConfiguration = ViewConfiguration.get(getContext()); + slopPixels = viewConfiguration.getScaledTouchSlop(); + maxFlingPixels = viewConfiguration.getScaledMaximumFlingVelocity(); + minimalMovedPixels = dp(context, 10); + scroller = new Scroller(getContext()); + shadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + } + + public void setSwipeEnabled(boolean swipeEnabled) { + this.swipeEnabled = swipeEnabled; + } + + public void setNavigationController(NavigationController navigationController) { + this.navigationController = navigationController; + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + + if (AndroidUtils.isAndroid10()) { + // To trigger onLayout() which will call provideAndroid10GesturesExclusionZones() + requestLayout(); + } + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + if (!swipeEnabled || tracking || navigationController.isBlockingInput() || (navigationController.getTop() + != null + && navigationController.getTop().navigation != null + && !navigationController.getTop().navigation.swipeable) || getBelowTop() == null) { + return false; + } + + int actionMasked = event.getActionMasked(); + + if (actionMasked != MotionEvent.ACTION_DOWN && interceptedEvent == null) { + // Action down wasn't called here, ignore + return false; + } + + switch (actionMasked) { + case MotionEvent.ACTION_DOWN: + interceptedEvent = MotionEvent.obtain(event); + break; + case MotionEvent.ACTION_MOVE: { + float x = (event.getX() - interceptedEvent.getX()); + float y = (event.getY() - interceptedEvent.getY()); + + if (Math.abs(y) >= slopPixels || interceptedEvent.getX() < dp(20)) { + blockTracking = true; + } + + if (!blockTracking && x >= minimalMovedPixels && Math.abs(x) > Math.abs(y)) { + startTracking(event); + + return true; + } + break; + } + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: { + interceptedEvent.recycle(); + interceptedEvent = null; + blockTracking = false; + break; + } + } + + return false; + } + + @Override + public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) { + if (disallowIntercept) { + if (interceptedEvent != null) { + interceptedEvent.recycle(); + interceptedEvent = null; + } + blockTracking = false; + if (tracking) { + endTracking(true); + } + } + + super.requestDisallowInterceptTouchEvent(disallowIntercept); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (!tracking || velocityTracker == null) { // tracking already ended + return false; + } + + int translationX = Math.max(0, ((int) event.getX()) - trackStartPosition); + setTopControllerTranslation(translationX); + + velocityTracker.addMovement(event); + + switch (event.getActionMasked()) { + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: { + scroller.forceFinished(true); + + velocityTracker.addMovement(event); + velocityTracker.computeCurrentVelocity(1000); + float velocity = velocityTracker.getXVelocity(); + + if (translationX > 0) { + boolean doFlingAway = false; + + if ((velocity > 0 && Math.abs(velocity) > dp(800) && Math.abs(velocity) < maxFlingPixels) + || translationX >= getWidth() * 3 / 4) { + velocity = Math.max(dp(2000), velocity); + + scroller.fling(translationX, 0, (int) velocity, 0, 0, Integer.MAX_VALUE, 0, 0); + + // Make sure the animation always goes past the end + if (scroller.getFinalX() < getWidth()) { + scroller.startScroll(translationX, 0, getWidth(), 0, 2000); + } + + doFlingAway = true; + } + + if (doFlingAway) { + this.finishTransitionAfterAnimation = true; + } else { + scroller.forceFinished(true); + scroller.startScroll(translationX, 0, -translationX, 0, 250); + this.finishTransitionAfterAnimation = false; + } + + ViewCompat.postOnAnimation(this, flingRunnable); + } else { + // User swiped back to the left + endTracking(false); + } + + velocityTracker.recycle(); + velocityTracker = null; + + break; + } + } + + return true; + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + + if (tracking) { + float alpha = Math.min(1f, Math.max(0f, 0.5f - (shadowPosition / (float) getWidth()) * 0.5f)); + shadowPaint.setColor(Color.argb((int) (alpha * 255f), 0, 0, 0)); + shadowRect.set(0, 0, shadowPosition, getHeight()); + canvas.drawRect(shadowRect, shadowPaint); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + + // We should check that changed is true, otherwise there will be way too may events, we don't + // want that many. + if (!isInEditMode() && isAndroid10() && changed) { + // This shouldn't be called very often (like once per configuration change or even + // less often) so it's okay to allocate lists. Just to not use this method in onDraw + provideAndroid10GesturesExclusionZones(); + } + } + + @SuppressLint("NewApi") // this method is only called by methods that already check this condition + private void provideAndroid10GesturesExclusionZones() { + Map> zonesMap = Android10GesturesExclusionZonesHolder.getZones(); + if (zonesMap.size() > 0) { + int orientation = getContext().getResources().getConfiguration().orientation; + Set zones = zonesMap.get(orientation); + + if (zones != null && zones.size() > 0) { + List rects = new ArrayList<>(); + + for (ExclusionZone exclusionZone : zones) { + rects.add(exclusionZone.getZoneRect()); + } + + setSystemGestureExclusionRects(rects); + } + } + } + + private void startTracking(MotionEvent startEvent) { + if (tracking) return; //this method was already called previously + + tracking = true; + trackingController = navigationController.getTop(); + behindTrackingController = getBelowTop(); + + interceptedEvent.recycle(); + interceptedEvent = null; + + trackStartPosition = (int) startEvent.getX(); + velocityTracker = VelocityTracker.obtain(); + velocityTracker.addMovement(startEvent); + + navigationController.beginSwipeTransition(trackingController, behindTrackingController); + } + + private void endTracking(boolean finishTransition) { + if (!tracking) return; //this method was already called previously + + navigationController.endSwipeTransition(trackingController, behindTrackingController, finishTransition); + tracking = false; + trackingController = null; + behindTrackingController = null; + } + + private final Runnable flingRunnable = new Runnable() { + @Override + public void run() { + if (!tracking) + return; //this method was called one extra time, but it isn't needed anymore. return to prevent a race condition + + boolean finished = false; + + if (scroller.computeScrollOffset()) { + float translationX = scroller.getCurrX(); + + setTopControllerTranslation((int) translationX); + + // The view is not visible anymore. End it before the fling completely finishes. + if (translationX >= getWidth()) { + finished = true; + } + } else { + finished = true; + } + + if (!finished) { + ViewCompat.postOnAnimation(NavigationControllerContainerLayout.this, flingRunnable); + } else { + endTracking(finishTransitionAfterAnimation); + } + } + }; + + private void setTopControllerTranslation(int translationX) { + shadowPosition = translationX; + trackingController.view.setTranslationX(translationX); + navigationController.swipeTransitionProgress(translationX / (float) getWidth()); + invalidate(); + } + + private Controller getBelowTop() { + if (navigationController.childControllers.size() >= 2) { + return navigationController.childControllers.get(navigationController.childControllers.size() - 2); + } else { + return null; + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseBoardManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseBoardManager.java new file mode 100644 index 0000000000..ff4221e22e --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseBoardManager.java @@ -0,0 +1,176 @@ +package com.github.adamantcheese.chan.core.database; + +import androidx.core.util.Pair; + +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.SiteModel; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Boards; +import com.j256.ormlite.stmt.*; + +import java.util.*; +import java.util.concurrent.Callable; + +public class DatabaseBoardManager { + DatabaseHelper helper; + + public DatabaseBoardManager(DatabaseHelper helper) { + this.helper = helper; + } + + public Callable update(final Board board) { + return () -> { + helper.getBoardDao().update(board); + + return null; + }; + } + + public Callable updateAll(final Boards boards) { + return () -> { + for (Board board : boards) { + helper.getBoardDao().update(board); + } + + return null; + }; + } + + public Callable updateOrders(final Boards boards) { + return () -> { + SelectArg id = new SelectArg(); + SelectArg order = new SelectArg(); + + UpdateBuilder updateBuilder = helper.getBoardDao().updateBuilder(); + updateBuilder.where().eq("id", id); + updateBuilder.updateColumnValue("order", order); + PreparedUpdate statement = updateBuilder.prepare(); + + for (int i = 0; i < boards.size(); i++) { + Board board = boards.get(i); + + id.setValue(board.id); + order.setValue(i); + helper.getBoardDao().update(statement); + } + + return null; + }; + } + + public Callable createAll(final Site site, final Boards boards) { + return () -> { + List allFromDb = helper.getBoardDao().queryForEq("site", site.id()); + Map byCodeFromDb = new HashMap<>(); + for (Board board : allFromDb) { + byCodeFromDb.put(board.code, board); + board.site = site; + } + + Boards toCreate = new Boards(); + List> toUpdate = new ArrayList<>(); + for (Board board : boards) { + if (byCodeFromDb.containsKey(board.code)) { + Board dbBoard = byCodeFromDb.get(board.code); + if (!dbBoard.equals(board)) { + toUpdate.add(new Pair<>(dbBoard, board)); + } + } else { + toCreate.add(board); + } + } + + if (!toCreate.isEmpty()) { + for (Board board : toCreate) { + helper.getBoardDao().create(board); + } + } + + if (!toUpdate.isEmpty()) { + for (Pair pair : toUpdate) { + Board dbBoard = pair.first; + Board newPropertiesBoard = pair.second; + + dbBoard.updateExcludingUserFields(newPropertiesBoard); + helper.getBoardDao().update(dbBoard); + } + } + + return !toCreate.isEmpty() || !toUpdate.isEmpty(); + }; + } + + public Callable>> getBoardsForAllSitesOrdered(List sites) { + return () -> { + // Query the orders of the sites. + QueryBuilder q = helper.getSiteModelDao().queryBuilder(); + q.selectColumns("id", "order"); + List modelsWithOrder = q.query(); + Map ordering = new HashMap<>(); + for (SiteModel siteModel : modelsWithOrder) { + ordering.put(siteModel.id, siteModel.order); + } + + List sitesOrdered = new ArrayList<>(sites); + // Sort the given sites array with these orders. + Collections.sort(sitesOrdered, (lhs, rhs) -> ordering.get(lhs.id()) - ordering.get(rhs.id())); + + // Query all boards belonging to any of these sites. + List siteIds = new ArrayList<>(sitesOrdered.size()); + for (Site site : sitesOrdered) { + siteIds.add(site.id()); + } + List allBoards = helper.getBoardDao().queryBuilder().where().in("site", siteIds).query(); + + // Map the boards from siteId to a list of boards. + Map sitesById = new HashMap<>(); + for (Site site : sites) { + sitesById.put(site.id(), site); + } + Map bySite = new HashMap<>(); + for (Board board : allBoards) { + board.site = sitesById.get(board.siteId); + + Boards boards = bySite.get(board.siteId); + if (boards == null) { + boards = new Boards(); + bySite.put(board.siteId, boards); + } + boards.add(board); + } + + // And map the site to the board, and order these boards. + List> res = new ArrayList<>(); + for (Site site : sitesOrdered) { + Boards siteBoards = bySite.get(site.id()); + if (siteBoards == null) siteBoards = new Boards(); + Collections.sort(siteBoards, (lhs, rhs) -> lhs.order - rhs.order); + res.add(new Pair<>(site, siteBoards)); + } + return res; + }; + } + + public Callable getSiteSavedBoards(final Site site) { + return () -> { + List boards = + helper.getBoardDao().queryBuilder().where().eq("site", site.id()).and().eq("saved", true).query(); + for (int i = 0; i < boards.size(); i++) { + Board board = boards.get(i); + board.site = site; + } + return new Boards(boards); + }; + } + + public Callable deleteBoards(Site site) { + return () -> { + DeleteBuilder builder = helper.getBoardDao().deleteBuilder(); + + builder.where().eq("site", site.id()); + builder.delete(); + + return null; + }; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseFilterManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseFilterManager.java new file mode 100644 index 0000000000..68a5aa09df --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseFilterManager.java @@ -0,0 +1,70 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.database; + +import com.github.adamantcheese.chan.core.model.orm.Filter; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Filters; +import com.j256.ormlite.dao.Dao.CreateOrUpdateStatus; + +import java.util.concurrent.Callable; + +public class DatabaseFilterManager { + DatabaseHelper helper; + + public DatabaseFilterManager(DatabaseHelper helper) { + this.helper = helper; + } + + public Callable updateFilters(final Filters filters) { + return () -> { + for (Filter filter : filters) { + helper.getFilterDao().update(filter); + } + return filters; + }; + } + + public Callable deleteFilter(final Filter filter) { + return () -> { + helper.getFilterDao().delete(filter); + return null; + }; + } + + public Callable createOrUpdateFilter(final Filter filter) { + return () -> helper.getFilterDao().createOrUpdate(filter); + } + + public Callable createFilters(final Filters filters) { + return () -> helper.getFilterDao().create(filters); + } + + public Callable getFilters() { + return () -> new Filters(helper.getFilterDao().queryForAll()); + } + + public Callable getCount() { + return () -> (int) helper.getFilterDao().countOf(); + } + + public Callable deleteFilters(Filters filtersToDelete) { + return () -> { + helper.getFilterDao().delete(filtersToDelete); + return null; + }; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseHelper.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseHelper.java new file mode 100644 index 0000000000..dc88a5f8a2 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseHelper.java @@ -0,0 +1,816 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.database; + +import static com.github.adamantcheese.chan.utils.AndroidUtils.getAppContext; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getPreferences; + +import android.database.sqlite.SQLiteDatabase; +import android.text.TextUtils; + +import com.github.adamantcheese.chan.core.model.orm.*; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.core.settings.PersistableChanState; +import com.github.adamantcheese.chan.core.settings.primitives.*; +import com.github.adamantcheese.chan.core.settings.provider.SettingProvider; +import com.github.adamantcheese.chan.core.settings.provider.SharedPreferencesSettingProvider; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Filters; +import com.github.adamantcheese.chan.utils.Logger; +import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; +import com.j256.ormlite.dao.Dao; +import com.j256.ormlite.dao.GenericRawResults; +import com.j256.ormlite.stmt.DeleteBuilder; +import com.j256.ormlite.stmt.Where; +import com.j256.ormlite.support.ConnectionSource; +import com.j256.ormlite.table.TableUtils; + +import java.io.ByteArrayOutputStream; +import java.io.ObjectOutputStream; +import java.lang.reflect.Constructor; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import okio.ByteString; + +public class DatabaseHelper + extends OrmLiteSqliteOpenHelper { + private static final String TAG = "DatabaseHelper"; + + private static final String DATABASE_NAME = "ChanDB"; + private static final int DATABASE_VERSION = 59; + + public DatabaseHelper() { + super(getAppContext(), DATABASE_NAME, null, DATABASE_VERSION); + } + + private Dao getDaoForClass(Class c) { + try { + return getDao(c); + } catch (Exception e) { + Logger.e(this, "Failed to get DAO for " + c.getSimpleName(), e); + return null; + } + } + + public Dao getPinDao() { + return getDaoForClass(Pin.class); + } + + public Dao getLoadableDao() { + return getDaoForClass(Loadable.class); + } + + public Dao getSavedReplyDao() { + return getDaoForClass(SavedReply.class); + } + + public Dao getBoardDao() { + return getDaoForClass(Board.class); + } + + public Dao getPostHideDao() { + return getDaoForClass(PostHide.class); + } + + public Dao getFilterDao() { + return getDaoForClass(Filter.class); + } + + public Dao getSiteModelDao() { + return getDaoForClass(SiteModel.class); + } + + @Override + public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { + try { + createTables(); + } catch (SQLException e) { + Logger.e(this, "Error creating db", e); + throw new RuntimeException(e); + } + } + + public void createTables() + throws SQLException { + TableUtils.createTable(connectionSource, Pin.class); + TableUtils.createTable(connectionSource, Loadable.class); + TableUtils.createTable(connectionSource, SavedReply.class); + TableUtils.createTable(connectionSource, Board.class); + TableUtils.createTable(connectionSource, PostHide.class); + TableUtils.createTable(connectionSource, Filter.class); + TableUtils.createTable(connectionSource, SiteModel.class); + } + + public void dropTables() + throws SQLException { + TableUtils.dropTable(connectionSource, Pin.class, true); + TableUtils.dropTable(connectionSource, Loadable.class, true); + TableUtils.dropTable(connectionSource, SavedReply.class, true); + TableUtils.dropTable(connectionSource, Board.class, true); + TableUtils.dropTable(connectionSource, PostHide.class, true); + TableUtils.dropTable(connectionSource, Filter.class, true); + TableUtils.dropTable(connectionSource, SiteModel.class, true); + } + + @Override + public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { + try { + dropTables(); + createTables(); + } catch (Exception e) { + super.onDowngrade(db, oldVersion, newVersion); + } + } + + /** + * When modifying the database columns do no forget to change the {@link com.github.adamantcheese.chan.core.model.export.ExportedAppSettings} as well + * and add your handler in {@link com.github.adamantcheese.chan.core.repository.ImportExportRepository} onUpgrade method + */ + @Override + public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) { + Logger.i(this, "Upgrading database from " + oldVersion + " to " + newVersion); + + if (oldVersion < 25) { + try { + getBoardDao().executeRawNoArgs("CREATE INDEX board_site_idx ON board(site);"); + getBoardDao().executeRawNoArgs("CREATE INDEX board_saved_idx ON board(saved);"); + getBoardDao().executeRawNoArgs("CREATE INDEX board_value_idx ON board(value);"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 25", e); + } + } + + if (oldVersion < 26) { + try { + getPostHideDao().executeRawNoArgs("ALTER TABLE threadhide RENAME TO posthide;"); + getPostHideDao().executeRawNoArgs("ALTER TABLE posthide ADD COLUMN whole_thread INTEGER default 0"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 26", e); + } + } + + if (oldVersion < 27) { + try { + // Create indexes for PostHides to speed up posts filtering + getPostHideDao().executeRawNoArgs("CREATE INDEX posthide_site_idx ON posthide(site);"); + getPostHideDao().executeRawNoArgs("CREATE INDEX posthide_board_idx ON posthide(board);"); + getPostHideDao().executeRawNoArgs("CREATE INDEX posthide_no_idx ON posthide(no);"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 27", e); + } + } + + if (oldVersion < 28) { + try { + getPostHideDao().executeRawNoArgs("ALTER TABLE posthide ADD COLUMN hide INTEGER default 0"); + getPostHideDao().executeRawNoArgs( + "ALTER TABLE posthide ADD COLUMN hide_replies_to_this_post INTEGER default 0"); + getFilterDao().executeRawNoArgs("ALTER TABLE filter ADD COLUMN apply_to_replies INTEGER default 0"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 28", e); + } + } + + if (oldVersion < 29) { + try { + getPostHideDao().executeRawNoArgs("ALTER TABLE posthide ADD COLUMN thread_no INTEGER default 0"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 29", e); + } + } + + if (oldVersion < 30) { + try { + getBoardDao().executeRawNoArgs("BEGIN TRANSACTION;\n" + + "CREATE TEMPORARY TABLE board_backup(archive,bumplimit,value,codeTags,cooldownImages,cooldownReplies,cooldownThreads,countryFlags,customSpoilers,description,id,imageLimit,mathTags,maxCommentChars,maxFileSize,maxWebmSize,key,order,pages,perPage,preuploadCaptcha,saved,site,spoilers,userIds,workSafe);\n" + + "INSERT INTO board_backup SELECT archive,bumplimit,value,codeTags,cooldownImages,cooldownReplies,cooldownThreads,countryFlags,customSpoilers,description,id,imageLimit,mathTags,maxCommentChars,maxFileSize,maxWebmSize,key,order,pages,perPage,preuploadCaptcha,saved,site,spoilers,userIds,workSafe FROM board;\n" + + "DROP TABLE board;\n" + + "CREATE TABLE board(archive,bumplimit,value,codeTags,cooldownImages,cooldownReplies,cooldownThreads,countryFlags,customSpoilers,description,id,imageLimit,mathTags,maxCommentChars,maxFileSize,maxWebmSize,key,order,pages,perPage,preuploadCaptcha,saved,site,spoilers,userIds,workSafe);\n" + + "INSERT INTO board SELECT archive,bumplimit,value,codeTags,cooldownImages,cooldownReplies,cooldownThreads,countryFlags,customSpoilers,description,id,imageLimit,mathTags,maxCommentChars,maxFileSize,maxWebmSize,key,order,pages,perPage,preuploadCaptcha,saved,site,spoilers,userIds,workSafe FROM board_backup;\n" + + "DROP TABLE board_backup;\n" + + "COMMIT;"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 30", e); + } + } + + if (oldVersion < 31) { + try { + getLoadableDao().executeRawNoArgs("UPDATE loadable SET mode = 1 WHERE mode = 2"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 31", e); + } + } + + if (oldVersion < 32) { + try { + getFilterDao().executeRawNoArgs("ALTER TABLE filter ADD COLUMN \"order\" INTEGER"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 32", e); + } + } + + //33 set the new captcha window to default, but it's always on now so this was removed + + if (oldVersion < 34) { + try { + getFilterDao().executeRawNoArgs("ALTER TABLE filter ADD COLUMN onlyOnOP INTEGER default 0"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 34", e); + } + } + + if (oldVersion < 35) { + try { + getFilterDao().executeRawNoArgs("ALTER TABLE filter ADD COLUMN applyToSaved INTEGER default 0"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 35", e); + } + } + + if (oldVersion < 36) { + try { + getFilterDao().executeRawNoArgs( + "CREATE TABLE `saved_thread` (`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `loadable_id` INTEGER NOT NULL , `last_saved_post_no` INTEGER NOT NULL DEFAULT 0, `is_fully_downloaded` INTEGER NOT NULL DEFAULT 0 , `is_stopped` INTEGER NOT NULL DEFAULT 0);"); + getFilterDao().executeRawNoArgs("CREATE INDEX loadable_id_idx ON saved_thread(loadable_id);"); + + // Because pins now has different type (the ones that watch threads and ones that + // download them (also they can do both at the same time)) we need to use DEFAULT 1 + // to set flag WatchNewPosts for all of the old pins + getFilterDao().executeRawNoArgs("ALTER TABLE pin ADD COLUMN pin_type INTEGER NOT NULL DEFAULT 1"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 36", e); + } + } + + if (oldVersion < 37) { + try { + //reset all settings, key was never saved which caused issues + getSiteModelDao().executeRawNoArgs("UPDATE site SET userSettings='{}'"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 37", e); + } + } + + if (oldVersion < 38) { + try { + Logger.i(this, "Removing Chan55"); + deleteSiteByRegistryID(7); + Logger.i(this, "Removed Chan55 successfully"); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 38", e); + } + } + + if (oldVersion < 39) { + try { + Logger.i(this, "Removing 8Chan"); + deleteSiteByRegistryID(1); + Logger.i(this, "Removed 8Chan successfully"); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 39", e); + } + } + + if (oldVersion < 40) { + try { + //disable Youtube link parsing if it was enabled in a previous version to prevent issues + ChanSettings.enableEmbedding.set(false); + + //remove arisuchan boards that don't exist anymore + Where where = getBoardDao().queryBuilder().where(); + where.and(where.eq("site", 3), where.or( + where.eq("value", "cyb"), + where.eq("value", "feels"), + where.eq("value", "x"), + where.eq("value", "z") + )); + List toRemove = where.query(); + for (Board b : toRemove) { + if (b != null) { + deleteBoard(b); + } + } + + //some descriptions changed for arisuchan + try { + Board art = getBoardDao().queryForEq("key", "art and design").get(0); + if (art != null) { + art.name = "art and creative"; + getBoardDao().update(art); + } + } catch (Exception ignored) { + } + try { + Board sci = getBoardDao().queryForEq("key", "science and technology").get(0); + if (sci != null) { + sci.name = "technology"; + getBoardDao().update(sci); + } + } catch (Exception ignored) { + } + try { + Board diy = getBoardDao().queryForEq("key", "diy and projects").get(0); + if (diy != null) { + diy.name = "shape your world"; + getBoardDao().update(diy); + } + } catch (Exception ignored) { + } + try { + Board ru = getBoardDao().queryForEq("key", "киберпанк-доска").get(0); + if (ru != null) { + ru.name = "Киберпанк"; + getBoardDao().update(ru); + } + } catch (Exception ignored) { + } + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 40", e); + } + } + + if (oldVersion < 41) { + //enable the following as default for 4.10.2 + ChanSettings.parsePostImageLinks.set(true); + ChanSettings.enableEmbedding.set(true); + } + + if (oldVersion < 42) { + try { + //remove wired-7 boards that don't exist anymore + Where where = getBoardDao().queryBuilder().where(); + where.and(where.eq("site", 6), where.eq("value", "18")); + List toRemove = where.query(); + for (Board b : toRemove) { + if (b != null) { + deleteBoard(b); + } + } + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 42", e); + } + } + + if (oldVersion < 43) { + try { + Logger.i(this, "Removing Arisuchan"); + deleteSiteByRegistryID(3); + Logger.i(this, "Removed Arisuchan successfully"); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 43", e); + } + } + + if (oldVersion < 44) { + try { + SettingProvider p = new SharedPreferencesSettingProvider(getPreferences()); + // the PersistableChanState class was added, so some settings are being moved over there + // get settings from before the move + IntegerSetting watchLastCount = + getSettingForKey(p, "preference_watch_last_count", IntegerSetting.class, Integer.class); + IntegerSetting previousVersion = + getSettingForKey(p, "preference_previous_version", IntegerSetting.class, Integer.class); + LongSetting updateCheckTime = getSettingForKey(p, "update_check_time", LongSetting.class, Long.class); + StringSetting previousDevHash = + getSettingForKey(p, "previous_dev_hash", StringSetting.class, String.class); + StringSetting filterWatchIgnores = + getSettingForKey(p, "filter_watch_last_ignored_set", StringSetting.class, String.class); + StringSetting youtubeTitleCache = + getSettingForKey(p, "yt_title_cache", StringSetting.class, String.class); + StringSetting youtubeDurCache = getSettingForKey(p, "yt_dur_cache", StringSetting.class, String.class); + + // update a few of them + PersistableChanState.watchLastCount.setSync(watchLastCount.get()); + PersistableChanState.previousVersion.setSync(previousVersion.get()); + PersistableChanState.updateCheckTime.setSync(updateCheckTime.get()); + PersistableChanState.previousDevHash.setSync(previousDevHash.get()); + + // remove them; they are now in PersistableChanState + p.removeSync(watchLastCount.getKey()); + p.removeSync(previousVersion.getKey()); + p.removeSync(updateCheckTime.getKey()); + p.removeSync(previousDevHash.getKey()); + p.removeSync(filterWatchIgnores.getKey()); + p.removeSync(youtubeTitleCache.getKey()); + p.removeSync(youtubeDurCache.getKey()); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 44", e); + } + } + + if (oldVersion < 45) { + try { + getLoadableDao().executeRawNoArgs( + "ALTER TABLE loadable ADD COLUMN lastLoadDate TIMESTAMP default '1970-01-01 00:00:01'"); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); + String currentTime = format.format(GregorianCalendar.getInstance().getTime()); + getLoadableDao().executeRawNoArgs("UPDATE loadable SET lastLoadDate='" + currentTime + "'"); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 45", e); + } + } + + if (oldVersion < 46) { + try { + //sqlite doesn't have a proper modify command to remove the NOT NULL constraint from thumbnailUrl + getPinDao().executeRawNoArgs("ALTER TABLE pin RENAME TO pin_old"); // rename existing table + TableUtils.createTable(connectionSource, Pin.class); // recreate table + getPinDao().executeRawNoArgs("INSERT INTO pin SELECT * FROM pin_old"); // copy table + getPinDao().executeRawNoArgs("DROP TABLE pin_old"); // delete old table + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 46", e); + } + } + + if (oldVersion < 47) { + //can't directly use gson here, gotta use regex instead + //noinspection RegExpRedundantEscape I don't know why, but for some reason Android fails to compile this without the redundant escape?? + Pattern config = Pattern.compile("\\{\"internal_site_id\":(\\d+),\"external\":.+?\\}"); + try { + getSiteModelDao().executeRawNoArgs("ALTER TABLE site ADD COLUMN classID INTEGER default -1"); + + GenericRawResults configs = getSiteModelDao().queryRaw("SELECT id,configuration FROM site"); + List results = configs.getResults(); + for (String[] res : results) { + Matcher m = config.matcher(res[1]); // 0 is id, 1 is the raw result + if (m.matches()) { // shouldn't fail + getSiteModelDao().executeRawNoArgs("UPDATE site SET classID = " + + Integer.parseInt(m.group(1)) + + " WHERE id = " + + res[0]); + } + } + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 47", e); + } + } + + if (oldVersion < 48) { + try { + // add thumbnails to loadables + getLoadableDao().executeRawNoArgs("ALTER TABLE loadable ADD COLUMN thumbnailUrl STRING default NULL"); + // delete thumbnails from pins + getPinDao().executeRawNoArgs("BEGIN TRANSACTION;\n" + + "CREATE TEMPORARY TABLE pin_backup(id,loadable,watching,watchLastCount,watchNewCount,quoteLastCount,quoteNewCount,isError,thumbnailUrl,order,archived,pin_type);\n" + + "INSERT INTO pin_backup SELECT id,loadable,watching,watchLastCount,watchNewCount,quoteLastCount,quoteNewCount,isError,thumbnailUrl,order,archived,pin_type FROM board;\n" + + "DROP TABLE pin;\n" + + "CREATE TABLE pin(id,loadable,watching,watchLastCount,watchNewCount,quoteLastCount,quoteNewCount,isError,order,archived,pin_type);\n" + + "INSERT INTO pin SELECT id,loadable,watching,watchLastCount,watchNewCount,quoteLastCount,quoteNewCount,isError,order,archived,pin_type FROM pin_backup;\n" + + "DROP TABLE pin_backup;\n" + + "COMMIT;"); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 48", e); + } + } + + if (oldVersion < 49) { + try { + database.execSQL("DROP TABLE history"); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 49", e); + } + } + + if (oldVersion < 50) { + try { + DeleteBuilder deleteBuilder = getLoadableDao().deleteBuilder(); + deleteBuilder.where().eq("title", ""); + deleteBuilder.delete(); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 50", e); + } + } + + if (oldVersion < 51) { + try { + // delete pin_type from pins + getPinDao().executeRawNoArgs("BEGIN TRANSACTION;\n" + + "CREATE TEMPORARY TABLE pin_backup(id,loadable,watching,watchLastCount,watchNewCount,quoteLastCount,quoteNewCount,isError,order,archived,pin_type);\n" + + "INSERT INTO pin_backup SELECT id,loadable,watching,watchLastCount,watchNewCount,quoteLastCount,quoteNewCount,isError,order,archived,pin_type FROM board;\n" + + "DROP TABLE pin;\n" + + "CREATE TABLE pin(id,loadable,watching,watchLastCount,watchNewCount,quoteLastCount,quoteNewCount,isError,order,archived);\n" + + "INSERT INTO pin SELECT id,loadable,watching,watchLastCount,watchNewCount,quoteLastCount,quoteNewCount,isError,order,archived FROM pin_backup;\n" + + "DROP TABLE pin_backup;\n" + + "COMMIT;"); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 51", e); + } + } + + if (oldVersion < 52) { + try { + database.execSQL("DROP TABLE saved_thread"); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 52", e); + } + } + + if (oldVersion < 53) { + try { + // add forced anon field to board + getBoardDao().executeRawNoArgs("ALTER TABLE board ADD COLUMN forcedAnon INTEGER default 0"); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 53", e); + } + } + + if (oldVersion < 54) { + try { + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + ObjectOutputStream stream1 = new ObjectOutputStream(stream); + stream1.writeObject(new HashMap()); + stream1.close(); + ByteString out = ByteString.of(stream.toByteArray()); + stream.close(); + getBoardDao().executeRawNoArgs("ALTER TABLE board ADD COLUMN boardFlags BLOB NOT NULL default x'" + + out.hex() + + "'"); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 54", e); + } + } + + if (oldVersion < 55) { + ChanSettings.watchBackgroundInterval.reset(); + } + + if (oldVersion < 56) { + try { + //remove wired-7 boards that don't exist anymore + Where where = getBoardDao().queryBuilder().where(); + where.and(where.eq("site", 6), where.or(where.eq("value", "i"), where.eq("value", "pol"))); + List toRemove = where.query(); + for (Board b : toRemove) { + if (b != null) { + deleteBoard(b); + } + } + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 56", e); + } + } + + if (oldVersion < 57) { + try { + Logger.i(this, "Removing 420Chan"); + deleteSiteByRegistryID(9); + Logger.i(this, "Removed 420Chan successfully"); + } catch (Exception e) { + Logger.e(this, "Error upgrading to version 57", e); + } + } + + if (oldVersion < 58) { + try { + getFilterDao().executeRawNoArgs("ALTER TABLE filter ADD COLUMN label STRING default ''"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 58", e); + } + } + + if (oldVersion < 59) { + try { + getFilterDao().executeRawNoArgs("ALTER TABLE filter ADD COLUMN negative_pattern STRING default ''"); + } catch (SQLException e) { + Logger.e(this, "Error upgrading to version 59", e); + } + } + } + + @Override + public void onConfigure(SQLiteDatabase db) { + db.enableWriteAheadLogging(); + } + + public void reset() { + Logger.i(this, "Resetting database!"); + + if (getAppContext().deleteDatabase(DATABASE_NAME)) { + Logger.i(this, "Deleted database!"); + } + } + + /** + * This method deletes a site by the id it was given in SiteRegistry, but in the database rather than in the application + * This is useful for when a site's classes have been removed from the application + * + * @param id The ID given in SiteRegistry before this site's class was removed + */ + public void deleteSiteByRegistryID(int id) + throws SQLException { + //NOTE: most of this is a copy of the methods used by the runtime version, but condensed down into one method + //convert the SiteRegistry id to the actual database id + List allSites = getSiteModelDao().queryForAll(); + SiteModel toDelete = null; + for (SiteModel siteModel : allSites) { + if (siteModel.classID == id) { + toDelete = siteModel; + break; + } + } + //if we can't find it then it doesn't exist so we don't need to delete anything + if (toDelete == null) return; + + //filters + Filters filtersToDelete = new Filters(); + + for (Filter filter : getFilterDao().queryForAll()) { + if (filter.allBoards || TextUtils.isEmpty(filter.boards)) { + continue; + } + + for (String uniqueId : filter.boards.split(",")) { + String[] split = uniqueId.split(":"); + if (split.length == 2 && Integer.parseInt(split[0]) == toDelete.id) { + filtersToDelete.add(filter); + break; + } + } + } + + Set filterIdSet = new HashSet<>(); + for (Filter filter : filtersToDelete) { + filterIdSet.add(filter.id); + } + + DeleteBuilder filterDelete = getFilterDao().deleteBuilder(); + filterDelete.where().in("id", filterIdSet); + + int deletedCountFilters = filterDelete.delete(); + if (deletedCountFilters != filterIdSet.size()) { + throw new IllegalStateException("Deleted count didn't equal filterIdList.size(). (deletedCount = " + + deletedCountFilters + + "), " + + "(filterIdSet = " + + filterIdSet.size() + + ")"); + } + + //boards + DeleteBuilder boardDelete = getBoardDao().deleteBuilder(); + boardDelete.where().eq("site", toDelete.id); + boardDelete.delete(); + + //loadables (saved threads, pins, history, loadables) + List siteLoadables = getLoadableDao().queryForEq("site", toDelete.id); + if (!siteLoadables.isEmpty()) { + Set loadableIdSet = new HashSet<>(); + for (Loadable loadable : siteLoadables) { + loadableIdSet.add(loadable.id); + } + //pins + DeleteBuilder pinDelete = getPinDao().deleteBuilder(); + pinDelete.where().in("loadable_id", loadableIdSet); + pinDelete.delete(); + + //loadables + DeleteBuilder loadableDelete = getLoadableDao().deleteBuilder(); + loadableDelete.where().in("id", loadableIdSet); + + int deletedCountLoadables = loadableDelete.delete(); + if (loadableIdSet.size() != deletedCountLoadables) { + throw new IllegalStateException("Deleted count didn't equal loadableIdSet.size(). (deletedCount = " + + deletedCountLoadables + + "), (loadableIdSet = " + + loadableIdSet.size() + + ")"); + } + } + + //saved replies + DeleteBuilder savedReplyDelete = getSavedReplyDao().deleteBuilder(); + savedReplyDelete.where().eq("site", toDelete.id); + savedReplyDelete.delete(); + + //thread hides + DeleteBuilder threadHideDelete = getPostHideDao().deleteBuilder(); + threadHideDelete.where().eq("site", toDelete.id); + threadHideDelete.delete(); + + //site itself + DeleteBuilder siteDelete = getSiteModelDao().deleteBuilder(); + siteDelete.where().eq("id", toDelete.id); + siteDelete.delete(); + } + + /** + * Deletes a board on a given site when the site no longer supports the given board + */ + public void deleteBoard(Board board) + throws SQLException { + //filters + for (Filter filter : getFilterDao().queryForAll()) { + if (filter.allBoards || TextUtils.isEmpty(filter.boards)) { + continue; + } + + List keep = new ArrayList<>(); + for (String uniqueId : filter.boards.split(",")) { + String[] split = uniqueId.split(":"); + if (!(split.length == 2 && Integer.parseInt(split[0]) == board.siteId && split[1].equals(board.code))) { + keep.add(uniqueId); + } + } + filter.boards = TextUtils.join(",", keep); + //disable, but don't delete filters in case they're still wanted + if (TextUtils.isEmpty(filter.boards)) { + filter.enabled = false; + } + + getFilterDao().update(filter); + } + + //loadables (saved threads, pins, history, loadables) + List siteLoadables = getLoadableDao().queryForEq("site", board.siteId); + if (!siteLoadables.isEmpty()) { + Set loadableIdSet = new HashSet<>(); + for (Loadable loadable : siteLoadables) { + //only get the loadables with the same board code + if (loadable.boardCode.equals(board.code)) { + loadableIdSet.add(loadable.id); + } + } + //pins + DeleteBuilder pinDelete = getPinDao().deleteBuilder(); + pinDelete.where().in("loadable_id", loadableIdSet); + pinDelete.delete(); + + //loadables + DeleteBuilder loadableDelete = getLoadableDao().deleteBuilder(); + loadableDelete.where().in("id", loadableIdSet); + + int deletedCountLoadables = loadableDelete.delete(); + if (loadableIdSet.size() != deletedCountLoadables) { + throw new IllegalStateException("Deleted count didn't equal loadableIdSet.size(). (deletedCount = " + + deletedCountLoadables + + "), (loadableIdSet = " + + loadableIdSet.size() + + ")"); + } + } + + //saved replies + DeleteBuilder savedReplyDelete = getSavedReplyDao().deleteBuilder(); + savedReplyDelete.where().eq("site", board.siteId).and().eq("board", board.code); + savedReplyDelete.delete(); + + //thread hides + DeleteBuilder threadHideDelete = getPostHideDao().deleteBuilder(); + threadHideDelete.where().eq("site", board.siteId).and().eq("board", board.code); + threadHideDelete.delete(); + + //board itself + DeleteBuilder boardDelete = getBoardDao().deleteBuilder(); + boardDelete.where().eq("site", board.siteId).and().eq("value", board.code); + boardDelete.delete(); + } + + /** + * @param p the provider to get the setting from + * @param key the key for the setting + * @param type the class of the setting, see parameter T; pass in Setting.class for whatever setting class you need + * @param the type of the setting, should extend Setting + * @return the setting requested, or null + */ + public static T getSettingForKey(SettingProvider p, String key, Class type, Class def) { + if (!Setting.class.isAssignableFrom(type)) return null; + try { + Constructor c = type.getConstructor(SettingProvider.class, String.class, def); + c.setAccessible(true); + Object defArg = null; + if (Integer.class.equals(def)) { + defArg = 0; + } else if (Long.class.equals(def)) { + defArg = 0L; + } else if (String.class.equals(def)) { + defArg = ""; + } else if (Boolean.class.equals(def)) { + defArg = Boolean.FALSE; + } + T returnSetting = c.newInstance(p, key, defArg); + c.setAccessible(false); + return returnSetting; + } catch (Exception e) { + Logger.e(TAG, "Reflection failed", e); + return null; + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseHideManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseHideManager.java new file mode 100644 index 0000000000..310a976b54 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseHideManager.java @@ -0,0 +1,368 @@ +package com.github.adamantcheese.chan.core.database; + +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.orm.PostHide; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.utils.Logger; +import com.github.adamantcheese.chan.utils.PostUtils; +import com.j256.ormlite.stmt.DeleteBuilder; +import com.j256.ormlite.table.TableUtils; + +import java.sql.SQLException; +import java.util.*; +import java.util.concurrent.Callable; + +public class DatabaseHideManager { + private static final long TRIM_TRIGGER = 25000; + private static final long TRIM_COUNT = 5000; + + DatabaseHelper helper; + + public DatabaseHideManager(DatabaseHelper helper) { + this.helper = helper; + DatabaseUtils.runTaskAsync(DatabaseUtils.trimTable(helper.getPostHideDao(), TRIM_TRIGGER, TRIM_COUNT)); + } + + /** + * Searches for hidden posts in the PostHide table then checks whether there are posts with a reply + * to already hidden posts and if there are hides them as well. + */ + public List filterHiddenPosts(List posts, int siteId, String board) { + return DatabaseUtils.runTask(() -> { + List postNoList = new ArrayList<>(posts.size()); + for (Post post : posts) { + postNoList.add(post.no); + } + + Map postsFastLookupMap = new LinkedHashMap<>(); + for (Post post : posts) { + postsFastLookupMap.put(post.no, post); + } + + applyFiltersToReplies(posts, postsFastLookupMap); + + Map hiddenPostsLookupMap = getHiddenPosts(siteId, board, postNoList); + + // find replies to hidden posts and add them to the PostHide table in the database + // and to the hiddenPostsLookupMap + hideRepliesToAlreadyHiddenPosts(postsFastLookupMap, hiddenPostsLookupMap); + + List resultList = new ArrayList<>(); + + // filter out hidden posts + for (Post post : postsFastLookupMap.values()) { + if (post.filterRemove) { + // this post is already filtered by some custom filter + continue; + } + + PostHide hiddenPost = findHiddenPost(hiddenPostsLookupMap, post, siteId, board); + if (hiddenPost != null) { + if (hiddenPost.hide) { + // hide post + Post newPost = rebuildPostWithCustomFilter(post, + new int[]{0}, + true, + false, + false, + hiddenPost.hideRepliesToThisPost, + false + ); + + resultList.add(newPost); + } else { + // remove post + if (post.isOP) { + // hide OP post only if the user hid the whole thread + if (!hiddenPost.wholeThread) { + resultList.add(post); + } + } + } + } else { + // no record of hidden post in the DB + resultList.add(post); + } + } + //return posts that are NOT hidden + return resultList; + }); + } + + private void hideRepliesToAlreadyHiddenPosts( + Map postsFastLookupMap, Map hiddenPostsLookupMap + ) + throws SQLException { + + List newHiddenPosts = new ArrayList<>(); + + for (Post post : postsFastLookupMap.values()) { + if (hiddenPostsLookupMap.containsKey(post.no)) { + continue; + } + + for (Integer replyNo : post.repliesTo) { + if (hiddenPostsLookupMap.containsKey(replyNo)) { + PostHide parentHiddenPost = hiddenPostsLookupMap.get(replyNo); + Post parentPost = postsFastLookupMap.get(replyNo); + + if (!parentPost.filterReplies || !parentHiddenPost.hideRepliesToThisPost) { + continue; + } + + PostHide newHiddenPost = PostHide.hidePost(post, false, parentHiddenPost.hide, true); + hiddenPostsLookupMap.put(newHiddenPost.no, newHiddenPost); + newHiddenPosts.add(newHiddenPost); + + //post is already hidden no need to check other replies + break; + } + } + } + + if (newHiddenPosts.isEmpty()) { + return; + } + + for (PostHide postHide : newHiddenPosts) { + helper.getPostHideDao().createIfNotExists(postHide); + } + } + + private void applyFiltersToReplies(List posts, Map postsFastLookupMap) { + for (Post post : posts) { + if (post.isOP) continue; //skip the OP + + if (post.hasFilterParameters()) { + if (post.filterRemove && post.filterStub) { + Logger.wtf(this, "Post has both filterRemove and filterStub flags"); + continue; + } + + applyPostFilterActionToChildPosts(post, postsFastLookupMap); + } + } + } + + private Map getHiddenPosts(int siteId, String board, List postNoList) + throws SQLException { + + Set hiddenInDatabase = new HashSet<>(helper + .getPostHideDao() + .queryBuilder() + .where() + .in("no", postNoList) + .and() + .eq("site", siteId) + .and() + .eq("board", board) + .query()); + + Map hiddenMap = new HashMap<>(); + + for (PostHide postHide : hiddenInDatabase) { + hiddenMap.put(postHide.no, postHide); + } + + return hiddenMap; + } + + /** + * Takes filter parameters from the post and assigns them to all posts in the current reply chain. + * If some post already has another filter's parameters - does not overwrite them. + * Returns a chain of hidden posts. + */ + private void applyPostFilterActionToChildPosts(Post parentPost, Map postsFastLookupMap) { + if (postsFastLookupMap.isEmpty() || !parentPost.filterReplies) { + // do nothing with replies if filtering is disabled for replies + return; + } + + // find all replies to the post recursively + Set postWithAllReplies = + PostUtils.findPostWithReplies(parentPost.no, new ArrayList<>(postsFastLookupMap.values())); + + for (Post p : postWithAllReplies) { + if (p.no == parentPost.no) { + // do nothing with the parent post + continue; + } + + Post childPost = postsFastLookupMap.get(p.no); + if (childPost == null) { + // cross-thread post + continue; + } + + // do not overwrite filter parameters from another filter + if (!childPost.hasFilterParameters()) { + Post newPost = rebuildPostWithCustomFilter(childPost, + parentPost.filterHighlightedColors, + parentPost.filterStub, + parentPost.filterRemove, + parentPost.filterWatch, + true, + parentPost.filterSaved + ); + + // assign the filter parameters to the child post + postsFastLookupMap.put(p.no, newPost); + } + } + } + + /** + * Rebuilds a child post with custom filter parameters + */ + private Post rebuildPostWithCustomFilter( + Post childPost, + int[] filterHighlightedColors, + boolean filterStub, + boolean filterRemove, + boolean filterWatch, + boolean filterReplies, + boolean filterSaved + ) { + Post n = new Post.Builder() + .board(childPost.board) + .posterId(childPost.id) + .opId(childPost.opId) + .no(childPost.no) + .op(childPost.isOP) + .replies(childPost.replies) + .images(childPost.imagesCount) + .uniqueIps(childPost.uniqueIps) + .sticky(childPost.sticky) + .archived(childPost.archived) + .lastModified(childPost.lastModified) + .closed(childPost.closed) + .subject(childPost.subject) + .name(childPost.name) + .comment(childPost.comment) + .tripcode(childPost.tripcode) + .setUnixTimestampSeconds(childPost.time) + .images(childPost.images) + .moderatorCapcode(childPost.capcode) + .setHttpIcons(childPost.httpIcons) + .filter(filterHighlightedColors, + filterStub, + filterRemove, + filterWatch, + filterReplies, + false, + filterSaved + ) + .isSavedReply(childPost.isSavedReply) + .spans(childPost.subjectSpan, childPost.nameTripcodeIdCapcodeSpan) + .repliesTo(childPost.repliesTo) + .build(); + // reassign these, as they are only otherwise set elsewhere but should remain as-is + n.repliesFrom.addAll(childPost.repliesFrom); + n.deleted = childPost.deleted; + n.title = childPost.title; + return n; + } + + @Nullable + private PostHide findHiddenPost(Map hiddenPostsLookupMap, Post post, int siteId, String board) { + if (hiddenPostsLookupMap.isEmpty()) { + return null; + } + + PostHide maybeHiddenPost = hiddenPostsLookupMap.get(post.no); + if (maybeHiddenPost != null && maybeHiddenPost.site == siteId && maybeHiddenPost.board.equals(board)) { + return maybeHiddenPost; + } + + return null; + } + + public Callable addThreadHide(PostHide hide) { + return () -> { + if (contains(hide)) { + return null; + } + + helper.getPostHideDao().createIfNotExists(hide); + + return null; + }; + } + + public Callable addPostsHide(List hideList) { + return () -> { + for (PostHide postHide : hideList) { + if (contains(postHide)) continue; + helper.getPostHideDao().createIfNotExists(postHide); + } + + return null; + }; + } + + public Callable removePostHide(PostHide hide) { + return removePostsHide(Collections.singletonList(hide)); + } + + public Callable removePostsHide(List hideList) { + return () -> { + for (PostHide postHide : hideList) { + DeleteBuilder deleteBuilder = helper.getPostHideDao().deleteBuilder(); + + deleteBuilder + .where() + .eq("no", postHide.no) + .and() + .eq("site", postHide.site) + .and() + .eq("board", postHide.board); + + deleteBuilder.delete(); + } + + return null; + }; + } + + private boolean contains(PostHide hide) + throws SQLException { + PostHide inDb = helper + .getPostHideDao() + .queryBuilder() + .where() + .eq("no", hide.no) + .and() + .eq("site", hide.site) + .and() + .eq("board", hide.board) + .queryForFirst(); + + //if this thread is already hidden - do nothing + return inDb != null; + } + + public Callable clearAllThreadHides() { + return () -> { + TableUtils.clearTable(helper.getConnectionSource(), PostHide.class); + + return null; + }; + } + + public List getRemovedPostsWithThreadNo(int threadNo) + throws SQLException { + return helper.getPostHideDao().queryBuilder().where().eq("thread_no", threadNo).and().eq("hide", false).query(); + } + + public Callable deleteThreadHides(Site site) { + return () -> { + DeleteBuilder builder = helper.getPostHideDao().deleteBuilder(); + builder.where().eq("site", site.id()); + builder.delete(); + + return null; + }; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseLoadableManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseLoadableManager.java new file mode 100644 index 0000000000..c01a2c8770 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseLoadableManager.java @@ -0,0 +1,232 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.database; + +import android.annotation.SuppressLint; + +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.repository.SiteRepository; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.features.theme.Highlightable; +import com.j256.ormlite.stmt.*; +import com.j256.ormlite.support.DatabaseConnection; + +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.Callable; + +public class DatabaseLoadableManager { + private final DatabaseHelper helper; + private final SiteRepository siteRepository; + + private static final long HISTORY_LIMIT = 250L; + @SuppressLint("ConstantLocale") + public static final SimpleDateFormat EPOCH_DATE_FORMAT = + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); + public static final Date EPOCH_DATE; + + static { + Date temp; + try { + temp = EPOCH_DATE_FORMAT.parse("1970-01-01 00:00:01"); + } catch (ParseException e) { + temp = new Date(1000); + } + EPOCH_DATE = temp; + } + + public DatabaseLoadableManager(DatabaseHelper helper, SiteRepository siteRepository) { + this.helper = helper; + this.siteRepository = siteRepository; + } + + /** + * All loadables that are not gotten from a database (like from any of the Loadable.for...() factory methods) + * need to go through this method to correctly get a loadable if it already existed in the db. + *

It will search the database for existing loadables of the mode is THREAD, and return one of those if there is + * else it will create the loadable in the database and return the given loadable. + * + * @param loadable Loadable to search from that was not yet gotten from the db. + * @return a loadable ready to use. + */ + public Loadable get(final Loadable loadable) { + if (loadable.id != 0) { + return loadable; + } + + // We only cache THREAD loadables in the db + if (loadable.isCatalogMode()) { + return loadable; + } else { + return DatabaseUtils.runTask(getLoadable(loadable)); + } + } + + /** + * Call this when you use a thread loadable as a foreign object on your table + * + * @param loadable Loadable that only has its id loaded + * @return a loadable ready to use. + * + * @throws SQLException database error + */ + public Loadable refreshForeign(final Loadable loadable) + throws SQLException { + if (loadable.id == 0) { + throw new IllegalArgumentException("This only works loadables that have their id loaded"); + } + + // refresh contents + helper.getLoadableDao().refresh(loadable); + updateLoadableFields(loadable); + return loadable; + } + + private Callable getLoadable(final Loadable loadable) { + return () -> { + QueryBuilder builder = helper.getLoadableDao().queryBuilder(); + List results = builder + .where() + .eq("site", loadable.siteId) + .and() + .eq("mode", loadable.mode) + .and() + .eq("board", loadable.boardCode) + .and() + .eq("no", loadable.no) + .query(); + + Loadable result = results.isEmpty() ? loadable : results.get(0); + if (results.isEmpty()) { + helper.getLoadableDao().create(loadable); + } + + updateLoadableFields(result); + return result; + }; + } + + private void updateLoadableFields(Loadable loadable) + throws SQLException { + // TODO #1407, sometimes loadable.siteId is 0 instead of a number > 0 + loadable.site = siteRepository.forId(loadable.siteId); + loadable.board = loadable.site.board(loadable.boardCode); + loadable.lastLoadDate = + ChanSettings.showHistory.get() ? GregorianCalendar.getInstance().getTime() : loadable.lastLoadDate; + helper.getLoadableDao().update(loadable); + } + + public Callable> getLoadables(Site site) { + return () -> helper.getLoadableDao().queryForEq("site", site.id()); + } + + public Callable deleteLoadables(List siteLoadables) { + return () -> { + helper.getLoadableDao().delete(siteLoadables); + return null; + }; + } + + public Callable updateLoadable(Loadable updatedLoadable, boolean commit) { + return () -> { + if (updatedLoadable.isThreadMode()) { + if (commit) { + DatabaseConnection connection = helper.getLoadableDao().startThreadConnection(); + helper.getLoadableDao().update(updatedLoadable); + connection.commit(null); + helper.getLoadableDao().endThreadConnection(connection); + } else { + helper.getLoadableDao().update(updatedLoadable); + } + } + return null; + }; + } + + /** + * Called when the application goes into the background, to purge any old loadables that won't be used anymore; keeps + * the database clean and small. Avoids purging pin loadables. + */ + public Callable purgeOld() { + return () -> { + DatabaseConnection connection = helper.getLoadableDao().startThreadConnection(); + Calendar oneMonthAgo = GregorianCalendar.getInstance(); + oneMonthAgo.add(Calendar.MONTH, -1); + + DeleteBuilder builder = helper.getLoadableDao().deleteBuilder(); + builder + .where() + .lt("lastLoadDate", oneMonthAgo.getTime()) + .and() + .notIn("id", helper.getPinDao().queryBuilder().selectColumns("loadable_id")); + builder.delete(); + + connection.commit(null); + helper.getLoadableDao().endThreadConnection(connection); + return null; + }; + } + + /** + * @return A callable that "clears" history by setting the last load date to far in the past for all non-pin associated loadables. + */ + public Callable clearHistory() { + return () -> { + UpdateBuilder builder = + helper.getLoadableDao().updateBuilder().updateColumnValue("lastLoadDate", EPOCH_DATE); + builder.where().notIn("id", helper.getPinDao().queryBuilder().selectColumns("loadable_id")); + builder.update(); + return null; + }; + } + + /** + * @return A callable that returns a list of history, ignoring pins. + */ + public Callable> getHistory() { + return () -> { + List history = new ArrayList<>(); + for (Loadable l : helper + .getLoadableDao() + .queryBuilder() + .orderBy("lastLoadDate", false) + .limit(HISTORY_LIMIT) + .where() + .notIn("id", helper.getPinDao().queryBuilder().selectColumns("loadable_id")) + .and() + .ne("lastLoadDate", EPOCH_DATE) + .query()) { + l.site = siteRepository.forId(l.siteId); + l.board = l.site.board(l.boardCode); + history.add(new History(l)); + } + return history; + }; + } + + public static class History + extends Highlightable { + public final Loadable loadable; + + public History(Loadable l) { + loadable = l; + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabasePinManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabasePinManager.java new file mode 100644 index 0000000000..ef8494902d --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabasePinManager.java @@ -0,0 +1,100 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.database; + +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.model.orm.Pin; +import com.j256.ormlite.stmt.DeleteBuilder; + +import java.util.*; +import java.util.concurrent.Callable; + +public class DatabasePinManager { + DatabaseHelper helper; + private final DatabaseLoadableManager databaseLoadableManager; + + public DatabasePinManager(DatabaseHelper helper, DatabaseLoadableManager databaseLoadableManager) { + this.helper = helper; + this.databaseLoadableManager = databaseLoadableManager; + } + + public Callable createPin(final Pin pin) { + if (pin.loadable.id == 0) { + throw new IllegalArgumentException("Pin loadable is not yet in the db"); + } + + return () -> { + helper.getPinDao().create(pin); + return pin; + }; + } + + public Callable deletePin(final Pin pin) { + return deletePins(Collections.singletonList(pin)); + } + + public Callable deletePins(final List pins) { + return () -> { + helper.getPinDao().delete(pins); + return null; + }; + } + + public Callable updatePin(final Pin pin) { + return () -> { + helper.getPinDao().update(pin); + return pin; + }; + } + + public Callable> updatePins(final List pins) { + return () -> { + for (Pin pin : pins) { + helper.getPinDao().update(pin); + } + + return null; + }; + } + + public Callable> getPins() { + return () -> { + List list = helper.getPinDao().queryForAll(); + for (int i = 0; i < list.size(); i++) { + Pin p = list.get(i); + p.loadable = databaseLoadableManager.refreshForeign(p.loadable); + } + return list; + }; + } + + public Callable deletePinsFromLoadables(List siteLoadables) { + return () -> { + Set loadableIdSet = new HashSet<>(); + + for (Loadable loadable : siteLoadables) { + loadableIdSet.add(loadable.id); + } + + DeleteBuilder builder = helper.getPinDao().deleteBuilder(); + builder.where().in("loadable_id", loadableIdSet); + builder.delete(); + + return null; + }; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseSavedReplyManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseSavedReplyManager.java new file mode 100644 index 0000000000..3bb5a7f90a --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseSavedReplyManager.java @@ -0,0 +1,133 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.database; + +import androidx.annotation.AnyThread; + +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.SavedReply; +import com.github.adamantcheese.chan.core.site.Site; +import com.j256.ormlite.stmt.DeleteBuilder; + +import java.util.*; +import java.util.concurrent.Callable; + +/** + * Saved replies are posts-password combinations used to track what posts are posted by the app, + * and used to delete posts. + */ +public class DatabaseSavedReplyManager { + private static final long TRIM_TRIGGER = 250; + private static final long TRIM_COUNT = 50; + + DatabaseHelper helper; + + // map of post number to saved replies + private final Map> savedRepliesByNo = new HashMap<>(); + + public DatabaseSavedReplyManager(DatabaseHelper helper) { + this.helper = helper; + DatabaseUtils.runTask(DatabaseUtils.trimTable(helper.getSavedReplyDao(), TRIM_TRIGGER, TRIM_COUNT)); + DatabaseUtils.runTask(() -> { + final List all = helper.getSavedReplyDao().queryForAll(); + + synchronized (savedRepliesByNo) { + savedRepliesByNo.clear(); + for (SavedReply savedReply : all) { + List list = savedRepliesByNo.get(savedReply.no); + if (list == null) { + list = new ArrayList<>(1); + savedRepliesByNo.put(savedReply.no, list); + } + + list.add(savedReply); + } + } + return null; + }); + } + + /** + * Check if the given board-no combination is in the database.
+ * This is unlike other methods in that it immediately returns the result instead of + * a Callable. This method is thread-safe and optimized. + * + * @param board board of the post + * @param postNo post number + * @return {@code true} if the post is in the saved reply database, {@code false} otherwise. + */ + @AnyThread + public boolean isSaved(Board board, int postNo) { + return getSavedReply(board, postNo) != null; + } + + public Callable saveReply(SavedReply savedReply) { + return () -> { + helper.getSavedReplyDao().create(savedReply); + synchronized (savedRepliesByNo) { + List list = savedRepliesByNo.get(savedReply.no); + if (list == null) { + list = new ArrayList<>(1); + savedRepliesByNo.put(savedReply.no, list); + } + + list.add(savedReply); + } + return savedReply; + }; + } + + public Callable unsaveReply(SavedReply savedReply) { + return () -> { + helper.getSavedReplyDao().delete(savedReply); + synchronized (savedRepliesByNo) { + List list = savedRepliesByNo.get(savedReply.no); + if (list != null) { + list.remove(savedReply); + if (list.isEmpty()) { + savedRepliesByNo.remove(savedReply.no); + } + } + } + return savedReply; + }; + } + + public SavedReply getSavedReply(Board board, int postNo) { + synchronized (savedRepliesByNo) { + if (savedRepliesByNo.containsKey(postNo)) { + List items = savedRepliesByNo.get(postNo); + for (SavedReply item : items) { + if (item.board.equals(board.code) && item.siteId == board.siteId) { + return item; + } + } + } + return null; + } + } + + public Callable deleteSavedReplies(Site site) { + return () -> { + DeleteBuilder builder = helper.getSavedReplyDao().deleteBuilder(); + builder.where().eq("site", site.id()); + builder.delete(); + + return null; + }; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseSiteManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseSiteManager.java new file mode 100644 index 0000000000..9b16c677a6 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseSiteManager.java @@ -0,0 +1,96 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.database; + +import com.github.adamantcheese.chan.core.model.orm.SiteModel; +import com.github.adamantcheese.chan.core.site.Site; +import com.j256.ormlite.stmt.DeleteBuilder; + +import java.util.*; +import java.util.concurrent.Callable; + +public class DatabaseSiteManager { + DatabaseHelper helper; + + public DatabaseSiteManager(DatabaseHelper helper) { + this.helper = helper; + } + + public Callable get(int id) { + return () -> helper.getSiteModelDao().queryForId(id); + } + + public Callable> getAll() { + return () -> helper.getSiteModelDao().queryForAll(); + } + + public Callable getForClassID(int classID) { + return () -> helper.getSiteModelDao().queryBuilder().where().eq("classID", classID).queryForFirst(); + } + + public Callable getCount() { + return () -> (int) helper.getSiteModelDao().countOf(); + } + + public Callable add(final SiteModel site) { + return () -> { + helper.getSiteModelDao().create(site); + return site; + }; + } + + public Callable update(final SiteModel site) { + return () -> { + helper.getSiteModelDao().update(site); + return site; + }; + } + + public Callable> getOrdering() { + return () -> { + List modelsWithOrder = + helper.getSiteModelDao().queryBuilder().selectColumns("id", "order").query(); + Map ordering = new HashMap<>(); + for (SiteModel siteModel : modelsWithOrder) { + ordering.put(siteModel.id, siteModel.order); + } + return ordering; + }; + } + + public Callable updateOrdering(final List siteIdsWithCorrectOrder) { + return () -> { + for (int i = 0; i < siteIdsWithCorrectOrder.size(); i++) { + Integer id = siteIdsWithCorrectOrder.get(i); + SiteModel m = get(id).call(); + m.order = i; + update(m).call(); + } + return null; + }; + } + + public Callable deleteSite(Site site) { + return () -> { + DeleteBuilder builder = helper.getSiteModelDao().deleteBuilder(); + builder.where().eq("id", site.id()); + builder.delete(); + + return null; + }; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseUtils.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseUtils.java new file mode 100644 index 0000000000..1da10a745b --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/DatabaseUtils.java @@ -0,0 +1,136 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.database; + +import static com.github.adamantcheese.chan.Chan.instance; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.utils.BackgroundUtils; +import com.github.adamantcheese.chan.utils.Logger; +import com.j256.ormlite.dao.Dao; +import com.j256.ormlite.misc.TransactionManager; + +import java.sql.SQLException; +import java.util.concurrent.*; + +public class DatabaseUtils { + // The database only allows for one connection at a time, so we use this to schedule all database operations. + private static final ExecutorService databaseExecutor = Executors.newSingleThreadExecutor(); + + /** + * Summary of the database tables row count, for the developer screen. + * + * @return list of all tables and their row count. + */ + public static String getDatabaseSummary() { + String o = ""; + + DatabaseHelper helper = instance(DatabaseHelper.class); + try { + o += "Loadable rows: " + helper.getLoadableDao().countOf() + "\n"; + o += "Pin rows: " + helper.getPinDao().countOf() + "\n"; + o += "SavedReply rows: " + helper.getSavedReplyDao().countOf() + "\n"; + o += "Board rows: " + helper.getBoardDao().countOf() + "\n"; + o += "PostHide rows: " + helper.getPostHideDao().countOf() + "\n"; + o += "Filter rows: " + helper.getFilterDao().countOf() + "\n"; + o += "Site rows: " + helper.getSiteModelDao().countOf() + "\n"; + } catch (SQLException e) { + e.printStackTrace(); + } + + return o; + } + + /** + * Trim a table with the specified trigger and trim count. + * + * @param dao {@link Dao} to use. + * @param trigger Trim if there are more rows than {@code trigger}. + * @param trim Count of rows to trim. + */ + public static Callable trimTable(Dao dao, long trigger, long trim) { + return () -> { + try { + long count = dao.countOf(); + if (count > trigger) { + dao.executeRawNoArgs("DELETE FROM " + + dao.getTableName() + + " WHERE id IN (SELECT id FROM " + + dao.getTableName() + + " ORDER BY id ASC LIMIT " + + trim + + ")"); + } + } catch (SQLException e) { + Logger.w("DatabaseManager", "Error trimming table " + dao.getTableName(), e); + } + return null; + }; + } + + public static void runTaskAsync(final Callable taskCallable) { + runTaskAsync(taskCallable, result -> {}); + } + + public static void runTaskAsync(final Callable taskCallable, final TaskResult taskResult) { + databaseExecutor.submit(new DatabaseCallable<>(taskCallable, taskResult)); + } + + public static T runTask(final Callable taskCallable) { + try { + return databaseExecutor.submit(new DatabaseCallable<>(taskCallable, result -> {})).get(); + } catch (InterruptedException e) { + // Since we don't rethrow InterruptedException we need to at least restore the + // "interrupted" flag. + Thread.currentThread().interrupt(); + throw new RuntimeException(e); + } catch (ExecutionException e) { + throw new RuntimeException(e); + } + } + + private static class DatabaseCallable + implements Callable { + private final Callable task; + private final TaskResult result; + + public DatabaseCallable(Callable task, @NonNull TaskResult result) { + this.task = task; + this.result = result; + } + + @Override + public T call() { + try { + DatabaseHelper databaseHelper = instance(DatabaseHelper.class); + synchronized (databaseHelper.getConnectionSource()) { + final T res = TransactionManager.callInTransaction(databaseHelper.getConnectionSource(), task); + BackgroundUtils.runOnMainThread(() -> result.onComplete(res)); + return res; + } + } catch (Exception e) { + Logger.e(this, "executeTask", e); + throw new RuntimeException(e); + } + } + } + + public interface TaskResult { + void onComplete(T result); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/HttpUrlType.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/HttpUrlType.java new file mode 100644 index 0000000000..17088e9d59 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/database/HttpUrlType.java @@ -0,0 +1,57 @@ +package com.github.adamantcheese.chan.core.database; + +import androidx.annotation.NonNull; + +import com.j256.ormlite.field.FieldType; +import com.j256.ormlite.field.SqlType; +import com.j256.ormlite.field.types.BaseDataType; +import com.j256.ormlite.support.DatabaseResults; + +import java.sql.SQLException; + +import okhttp3.HttpUrl; + +public class HttpUrlType + extends BaseDataType { + + private static final HttpUrlType singleton = new HttpUrlType(); + private static final Class[] associatedClassNames = new Class[]{HttpUrl.class}; + + public static HttpUrlType getSingleton() { + return singleton; + } + + private HttpUrlType() { + super(SqlType.STRING, associatedClassNames); + } + + @Override + public Object javaToSqlArg(FieldType fieldType, @NonNull Object javaObject) { + return javaObject.toString(); + } + + @Override + public Object parseDefaultString(FieldType fieldType, String defaultStr) { + return defaultStr; + } + + @Override + public Object resultToSqlArg(FieldType fieldType, DatabaseResults results, int columnPos) + throws SQLException { + return results.getString(columnPos); + } + + @Override + public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) { + try { + return HttpUrl.get((String) sqlArg); + } catch (Exception e) { + return null; + } + } + + @Override + public boolean isAppropriateId() { + return false; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/di/AppModule.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/di/AppModule.java new file mode 100644 index 0000000000..0f785fba28 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/di/AppModule.java @@ -0,0 +1,147 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.di; + +import static com.github.adamantcheese.chan.utils.AndroidUtils.getAppContext; +import static com.github.k1rakishou.fsaf.BadPathSymbolResolutionStrategy.ReplaceBadSymbols; +import static com.github.k1rakishou.fsaf.BadPathSymbolResolutionStrategy.ThrowAnException; + +import com.github.adamantcheese.chan.BuildConfig; +import com.github.adamantcheese.chan.core.database.*; +import com.github.adamantcheese.chan.core.repository.SiteRepository; +import com.github.adamantcheese.chan.core.saver.ImageSaver; +import com.github.adamantcheese.chan.core.site.SiteResolver; +import com.github.adamantcheese.chan.ui.settings.SavedFilesBaseDirectory; +import com.github.adamantcheese.chan.utils.Logger; +import com.github.k1rakishou.fsaf.*; +import com.github.k1rakishou.fsaf.manager.base_directory.DirectoryManager; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import org.codejargon.feather.Provides; + +import java.io.File; + +import javax.inject.Singleton; + +public class AppModule { + public static final String DI_TAG = "Dependency Injection"; + + public static final Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + @Provides + @Singleton + public DatabaseHelper provideDatabaseHelper() { + Logger.d(AppModule.DI_TAG, "Database helper"); + return new DatabaseHelper(); + } + + @Provides + @Singleton + public DatabaseLoadableManager provideDatabaseLoadableManager( + DatabaseHelper helper, SiteRepository siteRepository + ) { + Logger.d(AppModule.DI_TAG, "Database loadable manager"); + return new DatabaseLoadableManager(helper, siteRepository); + } + + @Provides + @Singleton + public DatabasePinManager provideDatabasePinManager( + DatabaseHelper helper, DatabaseLoadableManager databaseLoadableManager + ) { + Logger.d(AppModule.DI_TAG, "Database pin manager"); + return new DatabasePinManager(helper, databaseLoadableManager); + } + + @Provides + @Singleton + public DatabaseSavedReplyManager provideDatabaseSavedReplyManager(DatabaseHelper helper) { + Logger.d(AppModule.DI_TAG, "Database saved reply manager"); + return new DatabaseSavedReplyManager(helper); + } + + @Provides + @Singleton + public DatabaseFilterManager provideDatabaseFilterManager(DatabaseHelper helper) { + Logger.d(AppModule.DI_TAG, "Database filter manager"); + return new DatabaseFilterManager(helper); + } + + @Provides + @Singleton + public DatabaseBoardManager provideDatabaseBoardManager(DatabaseHelper helper) { + Logger.d(AppModule.DI_TAG, "Database board manager"); + return new DatabaseBoardManager(helper); + } + + @Provides + @Singleton + public DatabaseSiteManager provideDatabaseSiteManager(DatabaseHelper helper) { + Logger.d(AppModule.DI_TAG, "Database site manager"); + return new DatabaseSiteManager(helper); + } + + @Provides + @Singleton + public DatabaseHideManager provideDatabaseHideManager(DatabaseHelper helper) { + Logger.d(AppModule.DI_TAG, "Database hide manager"); + return new DatabaseHideManager(helper); + } + + @Provides + @Singleton + public SiteResolver provideSiteResolver(SiteRepository siteRepository) { + Logger.d(AppModule.DI_TAG, "Site resolver"); + return new SiteResolver(siteRepository); + } + + @Provides + @Singleton + public ImageSaver provideImageSaver(FileManager fileManager) { + Logger.d(DI_TAG, "Image saver"); + return new ImageSaver(fileManager); + } + + @Provides + @Singleton + public FileManager provideFileManager() { + DirectoryManager directoryManager = new DirectoryManager(getAppContext()); + + BadPathSymbolResolutionStrategy resolutionStrategy = + BuildConfig.DEV_BUILD ? ThrowAnException : ReplaceBadSymbols; + + FileManager fileManager = new FileManager(getAppContext(), resolutionStrategy, directoryManager); + fileManager.registerBaseDir(SavedFilesBaseDirectory.class, new SavedFilesBaseDirectory()); + + return fileManager; + } + + @Provides + @Singleton + public FileChooser provideFileChooser() { + return new FileChooser(getAppContext()); + } + + public static File getCacheDir() { + File cacheDir = getAppContext().getCacheDir(); + if (!cacheDir.exists() && !cacheDir.mkdirs()) { + Logger.e(DI_TAG, "cache dir creation failed, this may fail catastrophically!"); + } + return cacheDir; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/di/ManagerModule.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/di/ManagerModule.java new file mode 100644 index 0000000000..e1bb542463 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/di/ManagerModule.java @@ -0,0 +1,61 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.di; + +import com.github.adamantcheese.chan.core.database.DatabaseFilterManager; +import com.github.adamantcheese.chan.core.database.DatabasePinManager; +import com.github.adamantcheese.chan.core.manager.*; +import com.github.adamantcheese.chan.core.repository.BoardRepository; +import com.github.adamantcheese.chan.utils.Logger; + +import org.codejargon.feather.Provides; + +import javax.inject.Singleton; + +public class ManagerModule { + @Provides + @Singleton + public BoardManager provideBoardManager(BoardRepository boardRepository) { + Logger.d(AppModule.DI_TAG, "Board manager"); + return new BoardManager(boardRepository); + } + + @Provides + @Singleton + public FilterEngine provideFilterEngine(DatabaseFilterManager databaseFilterManager) { + Logger.d(AppModule.DI_TAG, "Filter engine"); + return new FilterEngine(databaseFilterManager); + } + + @Provides + @Singleton + public WatchManager provideWatchManager( + DatabasePinManager databasePinManager + ) { + Logger.d(AppModule.DI_TAG, "Watch manager"); + return new WatchManager(databasePinManager); + } + + @Provides + @Singleton + public FilterWatchManager provideFilterWatchManager( + BoardRepository boardRepository, FilterEngine filterEngine, WatchManager watchManager + ) { + Logger.d(AppModule.DI_TAG, "Filter watch manager"); + return new FilterWatchManager(boardRepository, filterEngine, watchManager); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/di/RepositoryModule.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/di/RepositoryModule.java new file mode 100644 index 0000000000..11a3808567 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/di/RepositoryModule.java @@ -0,0 +1,54 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.di; + +import com.github.adamantcheese.chan.core.database.*; +import com.github.adamantcheese.chan.core.repository.*; +import com.github.adamantcheese.chan.utils.Logger; +import com.github.k1rakishou.fsaf.FileManager; + +import org.codejargon.feather.Provides; + +import javax.inject.Singleton; + +public class RepositoryModule { + + @Provides + @Singleton + public ImportExportRepository provideImportExportRepository( + DatabaseHelper databaseHelper, FileManager fileManager + ) { + Logger.d(AppModule.DI_TAG, "Import export repository"); + return new ImportExportRepository(databaseHelper, fileManager); + } + + @Provides + @Singleton + public SiteRepository provideSiteRepository(DatabaseSiteManager databaseSiteManager) { + Logger.d(AppModule.DI_TAG, "Site repository"); + return new SiteRepository(databaseSiteManager); + } + + @Provides + @Singleton + public BoardRepository provideBoardRepository( + DatabaseBoardManager databaseBoardManager, SiteRepository siteRepository + ) { + Logger.d(AppModule.DI_TAG, "Board repository"); + return new BoardRepository(databaseBoardManager, siteRepository); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/ArchivesManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/ArchivesManager.java new file mode 100644 index 0000000000..367d9e7cc5 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/ArchivesManager.java @@ -0,0 +1,169 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.manager; + +import static com.github.adamantcheese.chan.utils.AndroidUtils.getAppContext; + +import android.annotation.SuppressLint; +import android.content.res.AssetManager; +import android.util.JsonReader; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.net.NetUtils; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.ResponseResult; +import com.github.adamantcheese.chan.core.site.archives.*; +import com.github.adamantcheese.chan.core.site.sites.chan4.Chan4; +import com.github.adamantcheese.chan.utils.Logger; + +import org.jetbrains.annotations.Nullable; + +import java.io.InputStreamReader; +import java.util.*; + +import okhttp3.HttpUrl; + +public class ArchivesManager + implements NetUtilsClasses.Converter, JsonReader>, + ResponseResult> { + private List archivesList; + + private final Map> jsonMapping = new HashMap<>(); + + @SuppressLint("StaticFieldLeak") + private static ArchivesManager instance; + + public static ArchivesManager getInstance() { + if (instance == null) { + instance = new ArchivesManager(); + } + return instance; + } + + private ArchivesManager() { + // fuuka does not provide an easy API, and is only used for warosu + jsonMapping.put("fuuka", null); + // foolfuuka is currently the de-facto archiver of choice + jsonMapping.put("foolfuuka", FoolFuukaArchive.class); + // ayase is a replacement for foolfuuka, but currently has no sites and the implementation throws NotImplementedErrors + jsonMapping.put("ayase", AyaseArchive.class); + + //setup the archives list from the internal file, populated when you build the application + AssetManager assetManager = getAppContext().getAssets(); + try { + // archives.json should only contain FoolFuuka archives, as no other proper archiving software with an API seems to exist + try (JsonReader reader = new JsonReader(new InputStreamReader(assetManager.open("archives.json")))) { + archivesList = convert(reader); + } + } catch (Exception e) { + Logger.w(this, "Unable to load/parse internal archives list", e); + } + + // fresh copy request, in case of updates (infrequent) + NetUtils.makeJsonRequest( + HttpUrl.get("https://4chenz.github.io/archives.json/archives.json"), + this, + this, + NetUtilsClasses.ONE_DAY_CACHE + ); + } + + public List archivesForBoard(Board b) { + List result = new ArrayList<>(); + if (archivesList == null || !(b.site instanceof Chan4)) return result; //4chan only + for (ExternalSiteArchive a : archivesList) { + for (String code : a.boardCodes) { + if (code.equals(b.code)) { + result.add(a); + break; + } + } + } + return result; + } + + @Nullable + public ExternalSiteArchive archiveForDomain(@NonNull String domain) { + for (ExternalSiteArchive a : archivesList) { + if (a.domain.contains(domain)) return a; + } + return null; + } + + @Override + public List convert(JsonReader reader) + throws Exception { + List archives = new ArrayList<>(); + + reader.beginArray(); + while (reader.hasNext()) { + reader.beginObject(); + String name = ""; + String domain = ""; + String software = ""; + List boardCodes = Collections.emptyList(); + boolean search = false; + while (reader.hasNext()) { + switch (reader.nextName()) { + case "name": + name = reader.nextString(); + break; + case "domain": + domain = reader.nextString(); + break; + case "software": + software = reader.nextString(); + break; + case "boards": + boardCodes = new ArrayList<>(); + reader.beginArray(); + while (reader.hasNext()) { + boardCodes.add(reader.nextString()); + } + reader.endArray(); + break; + case "search": + search = true; + reader.skipValue(); + break; + default: + reader.skipValue(); + break; + } + } + reader.endObject(); + Class archiveClass = jsonMapping.get(software); + if (archiveClass != null) { + archives.add(archiveClass + .getConstructor(String.class, String.class, List.class, boolean.class) + .newInstance(domain, name, boardCodes, search)); + } + } + reader.endArray(); + return archives; + } + + @Override + public void onFailure(Exception e) {} + + @Override + public void onSuccess(List result) { + archivesList = result; + } +} diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/BoardManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/BoardManager.java similarity index 77% rename from Clover/app/src/main/java/org/floens/chan/core/manager/BoardManager.java rename to Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/BoardManager.java index 56c5a69f27..f6a14515f2 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/BoardManager.java +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/BoardManager.java @@ -1,6 +1,5 @@ /* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,16 +14,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.floens.chan.core.manager; +package com.github.adamantcheese.chan.core.manager; -import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.repository.BoardRepository; -import org.floens.chan.core.site.Site; - -import java.util.List; - -import javax.inject.Inject; -import javax.inject.Singleton; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.repository.BoardRepository; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Boards; /** *

Keeps track of {@link Board}s in the system. @@ -38,13 +33,9 @@ *

All boards have a {@link Board#saved} flag indicating if it should be visible in the user's * favorite board list, along with a {@link Board#order} in which they appear. */ -@Singleton public class BoardManager { - private static final String TAG = "BoardManager"; - private final BoardRepository boardRepository; - @Inject public BoardManager(BoardRepository boardRepository) { this.boardRepository = boardRepository; } @@ -53,7 +44,7 @@ public void initialize() { boardRepository.initialize(); } - public void updateAvailableBoardsForSite(Site site, List boards) { + public void updateAvailableBoardsForSite(Site site, Boards boards) { boardRepository.updateAvailableBoardsForSite(site, boards); } @@ -69,11 +60,11 @@ public Board getBoard(Site site, String code) { return boardRepository.getFromCode(site, code); } - public List getSiteBoards(Site site) { + public Boards getSiteBoards(Site site) { return boardRepository.getSiteBoards(site); } - public List getSiteSavedBoards(Site site) { + public Boards getSiteSavedBoards(Site site) { return boardRepository.getSiteSavedBoards(site); } @@ -82,10 +73,10 @@ public BoardRepository.SitesBoards getAllBoardsObservable() { } public BoardRepository.SitesBoards getSavedBoardsObservable() { - return boardRepository.getSaved(); + return boardRepository.getSavedObservable(); } - public void updateBoardOrders(List boards) { + public void updateBoardOrders(Boards boards) { boardRepository.updateBoardOrders(boards); } @@ -93,7 +84,7 @@ public void setSaved(Board board, boolean saved) { boardRepository.setSaved(board, saved); } - public void setAllSaved(List boards, boolean saved) { + public void setAllSaved(Boards boards, boolean saved) { boardRepository.setAllSaved(boards, saved); } } diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/ChanLoaderManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/ChanLoaderManager.java new file mode 100644 index 0000000000..2ec8b6e893 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/ChanLoaderManager.java @@ -0,0 +1,110 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.manager; + +import android.util.LruCache; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.core.model.ChanThread; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.ResponseResult; +import com.github.adamantcheese.chan.core.site.loader.ChanThreadLoader; +import com.github.adamantcheese.chan.utils.BackgroundUtils; + +import java.util.HashMap; +import java.util.Map; + +/** + * ChanLoaderManager is a manager/factory for ChanLoaders. Only ChanLoaders for threads are cached. + * Only one instance of this class should exist, and is dependency injected; as a result, the methods inside are synchronized. + *

Each reference to a loader is a {@link ResponseResult}, these references can be obtained with + * {@link #obtain(Loadable, ResponseResult)} and released with {@link #release(ChanThreadLoader, ResponseResult)}. + * A loader is only cached if it has no more listeners, therefore you can call {@link #obtain(Loadable, ResponseResult)} + * as many times as you want as long as you call release an equal amount of times.
+ *
+ * The internal cache here acts as a sort of cache for recently visited threads, preserving their already processed API + * responses and allows threads to be returned quickly and switched between with minimal overhead. + *
+ * In addition, this class acts as a sort of "reply draft" cache; this is effectively the only place that loadables should + * have a constant reference to them held. As a result, reply drafts are available in the following situations:

+ * 1) You are currently viewing a thread. When you navigate away from that thread, it will be available until it is ejected + * from the thread loader cache (ie you may visit up to {@link #THREAD_LOADERS_CACHE_SIZE} threads before your draft is + * deleted). This is filter-watch safe ie filter watches won't prematurely remove your draft.
+ * 2) Pins have their loadables and drafts managed by {@link WatchManager} and are never erased.
+ * 3) You are writing up a new thread. If you navigate away from a board, YOUR DRAFT WILL BE DELETED. This is a result of + * catalog loaders not being cached, which means their loadable (and therefore draft) is no longer referenced and garbage + * collected as a result. + */ +public class ChanLoaderManager { + public static final int THREAD_LOADERS_CACHE_SIZE = 25; + + //map between a loadable and a chan loader instance for it, currently in use + private static final Map threadLoaders = new HashMap<>(); + //chan loader cache for released loadables + private static final LruCache threadLoadersCache = + new LruCache<>(THREAD_LOADERS_CACHE_SIZE); + + @NonNull + public static synchronized ChanThreadLoader obtain( + @NonNull Loadable loadable, ResponseResult listener + ) { + BackgroundUtils.ensureMainThread(); + + ChanThreadLoader chanLoader; + if (loadable.isThreadMode()) { + chanLoader = threadLoaders.get(loadable); + if (chanLoader == null) { + chanLoader = threadLoadersCache.get(loadable); + if (chanLoader != null) { + threadLoadersCache.remove(loadable); + threadLoaders.put(loadable, chanLoader); + } + } + + if (chanLoader == null) { + chanLoader = new ChanThreadLoader(loadable); + threadLoaders.put(loadable, chanLoader); + } + } else { + chanLoader = new ChanThreadLoader(loadable); + } + + chanLoader.addListener(listener); + + return chanLoader; + } + + public static synchronized void release(@NonNull ChanThreadLoader chanLoader, ResponseResult listener) { + BackgroundUtils.ensureMainThread(); + + Loadable loadable = chanLoader.getLoadable(); + if (loadable.isThreadMode()) { + ChanThreadLoader foundChanLoader = threadLoaders.get(loadable); + if (foundChanLoader == null) { + throw new IllegalStateException("The released loader does not exist"); + } + + if (chanLoader.removeListener(listener)) { + threadLoaders.remove(loadable); + threadLoadersCache.put(loadable, chanLoader); + } + } else { + chanLoader.removeListener(listener); + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/FilterEngine.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/FilterEngine.java new file mode 100644 index 0000000000..3d0ad59251 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/FilterEngine.java @@ -0,0 +1,315 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.manager; + +import static com.github.adamantcheese.chan.core.manager.FilterEngine.FilterAction.HIDE; +import static com.github.adamantcheese.chan.core.manager.FilterEngine.FilterAction.REMOVE; +import static com.github.adamantcheese.chan.core.manager.FilterEngine.FilterAction.WATCH; +import static com.github.adamantcheese.chan.core.manager.FilterType.*; +import static com.github.adamantcheese.chan.core.site.SiteEndpoints.IconType.BOARD_FLAG; +import static com.github.adamantcheese.chan.core.site.SiteEndpoints.IconType.COUNTRY_FLAG; + +import android.text.TextUtils; + +import androidx.annotation.AnyThread; +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.core.database.DatabaseFilterManager; +import com.github.adamantcheese.chan.core.database.DatabaseUtils; +import com.github.adamantcheese.chan.core.model.*; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Filter; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Boards; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Filters; +import com.github.adamantcheese.chan.utils.Logger; +import com.github.adamantcheese.chan.utils.StringUtils; +import com.j256.ormlite.dao.Dao.CreateOrUpdateStatus; + +import java.util.*; +import java.util.regex.*; + +public class FilterEngine { + public enum FilterAction { + HIDE, + COLOR, + REMOVE, + WATCH; + + public static String actionName(FilterAction action) { + return StringUtils.caseAndSpace(action.name() + " post", null, true); + } + } + + private final DatabaseFilterManager databaseFilterManager; + + private final Map patternCache = Collections.synchronizedMap(new HashMap<>()); + + public FilterEngine(DatabaseFilterManager databaseFilterManager) { + this.databaseFilterManager = databaseFilterManager; + } + + public void deleteFilter(Filter filter) { + DatabaseUtils.runTask(databaseFilterManager.deleteFilter(filter)); + } + + public CreateOrUpdateStatus createOrUpdateFilter(Filter filter) { + return DatabaseUtils.runTask(databaseFilterManager.createOrUpdateFilter(filter)); + } + + public Filters getAllFilters() { + try { + return DatabaseUtils.runTask(databaseFilterManager.getFilters()); + } catch (Exception e) { + Logger.w(this, "Couldn't get all filters. Returning empty list."); + return new Filters(); + } + } + + public Filters getEnabledFilters() { + Filters filters = getAllFilters(); + for (Iterator iterator = filters.iterator(); iterator.hasNext(); ) { + Filter filter = iterator.next(); + if (!filter.enabled) { + iterator.remove(); + } + } + return filters; + } + + public Filters getEnabledWatchFilters() { + Filters watchFilters = getEnabledFilters(); + for (Iterator iterator = watchFilters.iterator(); iterator.hasNext(); ) { + Filter f = iterator.next(); + if (f.action != WATCH.ordinal()) { + iterator.remove(); + } + } + return watchFilters; + } + + @AnyThread + public boolean matchesBoard(Filter filter, Board board) { + if (filter.allBoards || TextUtils.isEmpty(filter.boards)) { + return true; + } else { + for (String uniqueId : filter.boards.split(",")) { + if (board.matchesUniqueId(uniqueId)) { + return true; + } + } + return false; + } + } + + public int getFilterBoardCount(Filter filter) { + if (filter.allBoards) { + return -1; + } else { + return filter.boards.split(",").length; + } + } + + public void saveBoardsToFilter(Boards appliedBoards, boolean all, Filter filter) { + filter.allBoards = all; + if (all) { + filter.boards = ""; + } else { + List boardsString = new ArrayList<>(appliedBoards.size()); + for (int i = 0; i < appliedBoards.size(); i++) { + boardsString.add(appliedBoards.get(i).boardUniqueId()); + } + filter.boards = TextUtils.join(",", boardsString); + } + } + + /** + * @param filter the filter to use + * @param post the post content to test against + * @return true if the filter matches and should be applied to the content, false if not + */ + @AnyThread + public boolean matches(Filter filter, Post.Builder post) { + if (!post.moderatorCapcode.isEmpty() || post.sticky) return false; + if (filter.onlyOnOP && !post.op) return false; + if (filter.applyToSaved && !post.isSavedReply) return false; + + if (matches(filter, TRIPCODE, post.tripcode, false)) return true; + if (matches(filter, NAME, post.getName(), false)) return true; + if (matches(filter, COMMENT, post.comment, false)) return true; + if (matches(filter, ID, post.posterId, false)) return true; + if (matches(filter, SUBJECT, post.getSubject(), false)) return true; + for (PostImage image : post.images) { + if (matches(filter, IMAGE_HASH, image.fileHash, false)) { + //for filtering image hashes, we don't want to apply the post-level filter unless the user set it as such + //this takes care of it at an image level, either flagging it to be hidden, which applies a + //custom spoiler image, or removes the image from the post entirely since this is a Post.Builder instance + if (filter.action == HIDE.ordinal()) { + image.hidden = true; + } else if (filter.action == REMOVE.ordinal()) { + post.images.remove(image); + } + return ChanSettings.applyImageFilterToPost.get(); + } + } + + //figure out if the post has a flag code, if so check the filter + String flagCode = ""; + for (PostHttpIcon icon : post.httpIcons) { + if (icon.type == COUNTRY_FLAG) { + flagCode = icon.code; + break; + } + if (icon.type == BOARD_FLAG) { + flagCode = icon.code; + break; + } + } + if (!flagCode.isEmpty() && matches(filter, FLAG_CODE, flagCode, false)) { + return true; + } + + if (post.images != null) { + StringBuilder files = new StringBuilder(); + for (PostImage image : post.images) { + files.append(image.filename).append(" "); + } + String fnames = files.toString(); + return !fnames.isEmpty() && matches(filter, FILENAME, fnames, false); + } + + return false; + } + + public boolean matches(Filter filter, FilterType type, CharSequence text, boolean forceCompile) { + return getMatchResult(filter, type, text, forceCompile) != null; + } + + @AnyThread + public MatchResult getMatchResult(Filter filter, FilterType type, CharSequence text, boolean forceCompile) { + if ((filter.type & type.flag) == 0) return null; + if (text == null) return null; + + Pattern pattern = null; + Pattern negativePattern = null; + synchronized (patternCache) { + if (!forceCompile) { + pattern = patternCache.get(filter.pattern); + negativePattern = patternCache.get(filter.negativePattern); + } + + int extraFlags = type == FLAG_CODE ? Pattern.CASE_INSENSITIVE : 0; + + if (pattern == null) { + pattern = compile(filter.pattern, extraFlags); + if (pattern != null) { + patternCache.put(filter.pattern, pattern); + Logger.d(this, "Resulting positive pattern: " + pattern.pattern()); + } + } + + if (negativePattern == null) { + negativePattern = compile(filter.negativePattern, extraFlags); + if (negativePattern != null) { + patternCache.put(filter.negativePattern, negativePattern); + Logger.d(this, "Resulting negative pattern: " + negativePattern.pattern()); + } + } + } + + if (pattern != null) { + Matcher matcher = pattern.matcher(text); + boolean matched = matcher.find(); + if (negativePattern != null) { + Matcher negativeMatcher = negativePattern.matcher(text); + matched = matched && !negativeMatcher.find(); + } + return matched ? matcher.toMatchResult() : null; + } else { + Logger.d(this, "Invalid pattern"); + return null; + } + } + + private static final Pattern isRegexPattern = Pattern.compile("^/(.*)/([mi]*)?$"); + private static final Pattern filterFilthyPattern = Pattern.compile("([.^$*+?()\\]\\[{}\\\\|\\-])"); + // an escaped \ and an escaped *, to replace an escaped * from escapeRegex + private static final Pattern wildcardPattern = Pattern.compile("\\\\\\*"); + + @AnyThread + @Nullable + public Pattern compile(String rawPattern, int extraPatternFlags) { + if (TextUtils.isEmpty(rawPattern)) { + return null; + } + + Pattern pattern; + + Matcher isRegex = isRegexPattern.matcher(rawPattern); + if (isRegex.matches()) { + // This is a /Pattern/ + String flagsGroup = isRegex.group(2); + int flags = 0; + if (flagsGroup.contains("i")) { + flags |= Pattern.CASE_INSENSITIVE; + } + if (flagsGroup.contains("m")) { + flags |= Pattern.MULTILINE; + } + if (extraPatternFlags != 0) { + flags |= extraPatternFlags; + } + + try { + //Don't allow an empty regex string (would match everything) + pattern = isRegex.group(1).length() > 0 ? Pattern.compile(isRegex.group(1), flags) : null; + } catch (PatternSyntaxException e) { + return null; + } + } else if (rawPattern.length() >= 2 + && rawPattern.charAt(0) == '"' + && rawPattern.charAt(rawPattern.length() - 1) == '"') { + // "matches an exact sentence" + String text = escapeRegex(rawPattern.substring(1, rawPattern.length() - 1)); + //Don't allow only double quotes (would match everything) + pattern = rawPattern.length() != 2 ? Pattern.compile(text, Pattern.CASE_INSENSITIVE) : null; + } else { + String[] words = rawPattern.split(" "); + StringBuilder text = new StringBuilder(); + for (int i = 0, wordsLength = words.length; i < wordsLength; i++) { + String word = words[i]; + // Find a word (bounded by \b), replacing any * with \S* + text + .append("(\\b") + .append(wildcardPattern.matcher(escapeRegex(word)).replaceAll("\\\\S*")) + .append("\\b)"); + // Allow multiple words by joining them with | + if (i < words.length - 1) { + text.append("|"); + } + } + //Don't allow only spaces (would match everything after split) + pattern = !TextUtils.isEmpty(text) ? Pattern.compile(text.toString(), Pattern.CASE_INSENSITIVE) : null; + } + + return pattern; + } + + public static String escapeRegex(String filthy) { + return filterFilthyPattern.matcher(filthy).replaceAll("\\\\$1"); // Escape regex special characters with a \ + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/FilterType.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/FilterType.java new file mode 100644 index 0000000000..2adb14bff2 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/FilterType.java @@ -0,0 +1,58 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.manager; + +import com.github.adamantcheese.chan.utils.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class doesn't use BitSet as it is saved in the database and using ordinals for database saving is a bad idea. + * If the order of these ever changes, everything will be messed up. + */ +public enum FilterType { + TRIPCODE(0x1), + NAME(0x2), + COMMENT(0x4), + ID(0x8), + SUBJECT(0x10), + FILENAME(0x20), + FLAG_CODE(0x40), + IMAGE_HASH(0x80); + + public final int flag; + + FilterType(int flag) { + this.flag = flag; + } + + public static List forFlags(int flag) { + List enabledTypes = new ArrayList<>(); + for (FilterType filterType : values()) { + if ((filterType.flag & flag) != 0) { + enabledTypes.add(filterType); + } + } + return enabledTypes; + } + + @Override + public String toString() { + return StringUtils.caseAndSpace(this.name(), "_", true); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/FilterWatchManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/FilterWatchManager.java new file mode 100644 index 0000000000..6d1701aebe --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/FilterWatchManager.java @@ -0,0 +1,270 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.manager; + +import static com.github.adamantcheese.chan.core.di.AppModule.getCacheDir; +import static com.github.adamantcheese.chan.ui.helper.RefreshUIMessage.Reason.FILTERS_CHANGED; + +import androidx.annotation.MainThread; + +import com.github.adamantcheese.chan.core.di.AppModule; +import com.github.adamantcheese.chan.core.model.ChanThread; +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.orm.*; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; +import com.github.adamantcheese.chan.core.repository.BoardRepository; +import com.github.adamantcheese.chan.core.site.loader.ChanThreadLoader; +import com.github.adamantcheese.chan.ui.helper.PostHelper; +import com.github.adamantcheese.chan.ui.helper.RefreshUIMessage; +import com.github.adamantcheese.chan.utils.*; +import com.google.gson.reflect.TypeToken; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + +import java.io.*; +import java.lang.reflect.Type; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +public class FilterWatchManager + implements WakeManager.Wakeable { + private final BoardRepository boardRepository; + private final FilterEngine filterEngine; + private final WatchManager watchManager; + + //filterLoaders keeps track of ChanThreadLoaders so they can be cleared correctly each alarm trigger + //ignoredPosts keeps track of threads pinned by the filter manager and ignores them for future alarm triggers + //this lets you unpin threads that are pinned by the filter pin manager and not have them come back + //note that ignoredPosts is currently only saved while the application is running and not in the database + private final List filterLoaders = new ArrayList<>(); + private final Set ignoredPosts = Collections.synchronizedSet(new HashSet<>()); + //keep track of how many boards we've checked and their posts so we can cut out things from the ignored posts + private final AtomicInteger numBoardsChecked = new AtomicInteger(); + private final Set lastCheckedPosts = Collections.synchronizedSet(new HashSet<>()); + private final Set externallyCheckedPosts = Collections.synchronizedSet(new HashSet<>()); + private final AtomicBoolean processing = new AtomicBoolean(false); + + private static final Type IGNORED_TYPE = new TypeToken>() {}.getType(); + private static final File CACHED_IGNORES = new File(getCacheDir(), "filter_watch_ignores.json"); + + public FilterWatchManager( + BoardRepository boardRepository, FilterEngine filterEngine, WatchManager watchManager + ) { + this.boardRepository = boardRepository; + this.filterEngine = filterEngine; + this.watchManager = watchManager; + + if (!filterEngine.getEnabledWatchFilters().isEmpty()) { + WakeManager.getInstance().registerWakeable(this); + } + + try (FileReader reader = new FileReader(CACHED_IGNORES)) { + Set previousIgnore = AppModule.gson.fromJson(reader, IGNORED_TYPE); + if (previousIgnore != null) ignoredPosts.addAll(previousIgnore); + } catch (Exception e) { + CACHED_IGNORES.delete(); // bad file probably + } + + EventBus.getDefault().register(this); + } + + @Subscribe + public void onEvent(RefreshUIMessage message) { + if (message.reason != FILTERS_CHANGED) return; + if (filterEngine.getEnabledWatchFilters().isEmpty()) { + WakeManager.getInstance().unregisterWakeable(this); + } else { + WakeManager.getInstance().registerWakeable(this); + } + } + + @Override + public void onWake() { + if (!processing.get()) { + processing.set(true); + WakeManager.getInstance().manageLock(true, FilterWatchManager.this); + populateFilterLoaders(); + if (filterLoaders.isEmpty()) { + WakeManager.getInstance().manageLock(false, FilterWatchManager.this); + } else { + Logger.i( + this, + "Processing " + + numBoardsChecked + + " filter loaders, started at " + + StringUtils.getCurrentTimeDefaultLocale() + ); + for (ChanThreadLoader loader : filterLoaders) { + loader.requestFreshData(); + } + } + } + } + + private void populateFilterLoaders() { + for (ChanThreadLoader loader : filterLoaders) { + loader.clearListeners(); + } + filterLoaders.clear(); + //get a set of boards to background load + Set boards = new HashSet<>(); + for (BoardRepository.SiteBoards siteBoard : boardRepository.getSaved()) { + for (Board b : siteBoard.boards) { + if (boardMatchAnyWatchFilters(b)) boards.add(b); + } + } + numBoardsChecked.set(boards.size()); + + for (Board b : boards) { + filterLoaders.add(setupLoader(Loadable.forCatalog(b))); + } + } + + @MainThread + public void checkExternalThread(Loadable loadableForThread) { + CatalogPost postForThread = new CatalogPost(loadableForThread); + if (!externallyCheckedPosts.contains(postForThread) && boardMatchAnyWatchFilters(loadableForThread.board)) { + Logger.i(this, "Following linked thread: " + loadableForThread.title); + externallyCheckedPosts.add(postForThread); + setupLoader(loadableForThread).requestFreshData(); + } + } + + private boolean boardMatchAnyWatchFilters(Board b) { + for (Filter f : filterEngine.getEnabledWatchFilters()) { + if (filterEngine.matchesBoard(f, b)) { + return true; + } + } + return false; + } + + private ChanThreadLoader setupLoader(Loadable loadable) { + CatalogLoader backgroundLoader = new CatalogLoader(loadable); + ChanThreadLoader catalogLoader = new ChanThreadLoader(loadable); + catalogLoader.addListener(backgroundLoader); + return catalogLoader; + } + + private class CatalogLoader + implements NetUtilsClasses.ResponseResult { + private final boolean onlyCheckOp; // externally loaded threads only check the OP + + private CatalogLoader(Loadable loadable) { + this.onlyCheckOp = loadable.isThreadMode(); + } + + @Override + public void onSuccess(ChanThread result) { + List toCheck = onlyCheckOp ? Collections.singletonList(result.getOp()) : result.getPosts(); + for (Post p : toCheck) { + CatalogPost catalogPost = new CatalogPost(p); + //make pins for the necessary stuff + if (p.filterWatch && !ignoredPosts.contains(catalogPost)) { + final Loadable pinLoadable = + Loadable.forThread(p.board, p.no, PostHelper.getTitle(p, result.loadable)); + pinLoadable.thumbnailUrl = p.image() == null ? null : p.image().getThumbnailUrl(); + BackgroundUtils.runOnMainThread(() -> { + watchManager.createPin(pinLoadable); + Pin newPin = watchManager.getPinByLoadable(pinLoadable); + if (newPin != null) { + WatchManager.PinWatcher pinWatcher = watchManager.getPinWatcher(newPin); + if (pinWatcher != null) { + pinWatcher.update(true); + } + } + }); + ignoredPosts.add(catalogPost); + } + if (!onlyCheckOp) { + //add all posts to ignore + lastCheckedPosts.add(catalogPost); + } + } + if (!onlyCheckOp) { + Logger.i( + this, + "Filter loader for /" + result.loadable.boardCode + "/ processed, left " + numBoardsChecked + ); + } + checkComplete(); + } + + @Override + public void onFailure(Exception error) { + if (!onlyCheckOp) { + Logger.i(this, "Filter loader failed, left " + numBoardsChecked, error); + } + checkComplete(); + } + + private void checkComplete() { + if (!onlyCheckOp) { + if (numBoardsChecked.decrementAndGet() != 0) return; + lastCheckedPosts.addAll(externallyCheckedPosts); + ignoredPosts.retainAll(lastCheckedPosts); + lastCheckedPosts.clear(); + processing.set(false); + Logger.i( + this, + "Finished processing filter loaders, ended at " + StringUtils.getCurrentTimeDefaultLocale() + ); + WakeManager.getInstance().manageLock(false, FilterWatchManager.this); + } + try (FileWriter writer = new FileWriter(CACHED_IGNORES)) { + AppModule.gson.toJson(ignoredPosts, IGNORED_TYPE, writer); + } catch (Exception e) { + CACHED_IGNORES.delete(); + } + } + } + + private static class CatalogPost { + private final int siteId; + private final String boardCode; + private final int no; + + public CatalogPost(Post p) { + siteId = p.board.site.id(); + boardCode = p.boardCode; + no = p.no; + } + + public CatalogPost(Loadable l) { + siteId = l.board.site.id(); + boardCode = l.boardCode; + no = l.no; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + CatalogPost that = (CatalogPost) o; + return Objects.equals(siteId, that.siteId) + && Objects.equals(boardCode, that.boardCode) + && Objects.equals(no, that.no); + } + + @Override + public int hashCode() { + return Objects.hash(siteId, boardCode, no); + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/SettingNotificationManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/SettingNotificationManager.java new file mode 100644 index 0000000000..73f01c224f --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/SettingNotificationManager.java @@ -0,0 +1,84 @@ +package com.github.adamantcheese.chan.core.manager; + +import android.annotation.SuppressLint; + +import androidx.annotation.ColorInt; + +import com.github.adamantcheese.chan.R; + +import org.greenrobot.eventbus.EventBus; + +import java.util.BitSet; + +public class SettingNotificationManager { + public static void postNotification(SettingNotificationType notification) { + SettingNotification currentType = EventBus.getDefault().getStickyEvent(SettingNotification.class); + if (currentType == null) { + currentType = new SettingNotification(); + } + SettingNotification newType = currentType.addType(notification); + EventBus.getDefault().postSticky(newType); + } + + public static void cancelNotification(SettingNotificationType notification) { + SettingNotification currentType = EventBus.getDefault().getStickyEvent(SettingNotification.class); + if (currentType == null) { + currentType = new SettingNotification(); + } + SettingNotification newType = currentType.removeType(notification); + EventBus.getDefault().postSticky(newType); + } + + /** + * A notification type, to be posted + */ + @SuppressLint("ResourceAsColor") + public enum SettingNotificationType { + // higher priority notifications should go at the bottom of the list, as those colors will be returned first + APK_UPDATE(R.color.md_green_500); + + int color; + + SettingNotificationType(@ColorInt int color) { + this.color = color; + } + } + + public static class SettingNotification { + private final BitSet activeTypes = new BitSet(SettingNotificationType.values().length); + + public SettingNotification() {} + + public SettingNotification addType(SettingNotificationType type) { + if (type == null) return this; + activeTypes.set(type.ordinal()); + return this; + } + + public SettingNotification removeType(SettingNotificationType type) { + if (type == null) return this; + activeTypes.clear(type.ordinal()); + return this; + } + + public boolean contains(SettingNotification other) { + if (other == null) return false; + BitSet intermediate = (BitSet) activeTypes.clone(); + intermediate.and(other.activeTypes); + return intermediate.cardinality() > 0; + } + + public boolean hasActiveTypes() { + return activeTypes.cardinality() > 0; + } + + public int getColor() { + for (int i = SettingNotificationType.values().length - 1; i >= 0; i--) { + if (activeTypes.get(i)) { + return SettingNotificationType.values()[i].color; + } + } + return android.R.color.transparent; + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/UpdateManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/UpdateManager.java new file mode 100644 index 0000000000..a80983e27d --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/UpdateManager.java @@ -0,0 +1,303 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.manager; + +import static com.github.adamantcheese.chan.BuildConfig.*; +import static com.github.adamantcheese.chan.core.manager.SettingNotificationManager.SettingNotificationType.APK_UPDATE; +import static com.github.adamantcheese.chan.features.html_styling.impl.CommonStyleActions.NO_OP; +import static com.github.adamantcheese.chan.features.html_styling.StyledHtml.prepare; +import static com.github.adamantcheese.chan.ui.widget.CancellableToast.showToast; +import static com.github.adamantcheese.chan.ui.widget.DefaultAlertDialog.getDefaultAlertBuilder; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getString; +import static com.github.adamantcheese.chan.utils.AndroidUtils.openIntent; +import static java.util.concurrent.TimeUnit.DAYS; + +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.text.method.LinkMovementMethod; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.core.content.FileProvider; + +import com.github.adamantcheese.chan.BuildConfig; +import com.github.adamantcheese.chan.R; +import com.github.adamantcheese.chan.core.net.*; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.ResponseResult; +import com.github.adamantcheese.chan.core.net.UpdateApiParser.UpdateApiResponse; +import com.github.adamantcheese.chan.core.settings.PersistableChanState; +import com.github.adamantcheese.chan.features.html_styling.impl.CommonCSSActions; +import com.github.adamantcheese.chan.features.html_styling.impl.HtmlNodeTreeAction; +import com.github.adamantcheese.chan.utils.BackgroundUtils; +import com.github.adamantcheese.chan.utils.Logger; + +import java.io.File; + +import okhttp3.Call; +import okhttp3.HttpUrl; + +/** + * Calls the update API and downloads and requests installs of APK files. + *

The APK files are downloaded to the public Download directory, and the default APK install + * screen is launched after downloading. + */ +public class UpdateManager { + private ProgressDialog updateDownloadDialog; + private final Context context; + + @Nullable + private Call updateDownload; + + public UpdateManager(Context context) { + this.context = context; + } + + /** + * Runs every time onCreate is called on the StartActivity. + */ + public void autoUpdateCheck() { + if (!DEV_BUILD && PersistableChanState.previousVersion.get() < VERSION_CODE) { + // Show dialog because release updates are infrequent so it's fine + CharSequence text = + new HtmlNodeTreeAction(CommonCSSActions.HEADER_TAG_RELATIVE_SIZE, NO_OP).style(prepare("

" + + BuildConfig.APP_LABEL + + " was updated to " + + VERSION_NAME + + ".

", ""), null); + final AlertDialog dialog = + getDefaultAlertBuilder(context).setMessage(text).setPositiveButton(R.string.ok, null).create(); + dialog.setCanceledOnTouchOutside(true); + dialog.show(); + + PersistableChanState.previousVersion.setSync(VERSION_CODE); + cancelApkUpdateNotification(); + + return; + } + + if (DEV_BUILD && !PersistableChanState.previousDevHash.get().equals(COMMIT_HASH)) { + // Show toast because dev updates may happen every day (to avoid alert dialog spam) + showToast(context, BuildConfig.APP_LABEL + " was updated to the latest commit."); + + PersistableChanState.previousDevHash.setSync(COMMIT_HASH); + cancelApkUpdateNotification(); + + return; + } + + runUpdateApi(false); + } + + public void manualUpdateCheck() { + runUpdateApi(true); + } + + private void runUpdateApi(final boolean manual) { + if (!manual) { + long lastUpdateTime = PersistableChanState.updateCheckTime.get(); + long interval = DAYS.toMillis(UPDATE_DELAY); + long now = System.currentTimeMillis(); + long delta = (lastUpdateTime + interval) - now; + if (delta > 0) { + if (PersistableChanState.hasNewApkUpdate.get()) { + notifyNewApkUpdate(); + } + return; + } else { + PersistableChanState.updateCheckTime.setSync(now); + } + } + + Logger.i(this, "Calling update API"); + if (!DEV_BUILD) { + NetUtils.makeJsonRequest(HttpUrl.get(UPDATE_API_ENDPOINT), + new NetUtilsClasses.MainThreadResponseResult<>(new ResponseResult() { + @Override + public void onFailure(Exception e) { + failedUpdate(manual); + } + + @Override + public void onSuccess(UpdateApiResponse result) { + if (!processUpdateApiResponse(result, manual) + && manual + && BackgroundUtils.isInForeground()) { + showToast(context, + getString(R.string.update_none, BuildConfig.APP_LABEL), + Toast.LENGTH_LONG + ); + } + } + }), + new UpdateApiParser(), + NetUtilsClasses.NO_CACHE + ); + } else { + NetUtils.makeJsonRequest(HttpUrl.get(DEV_API_ENDPOINT), + new NetUtilsClasses.MainThreadResponseResult<>(new ResponseResult() { + @Override + public void onFailure(Exception e) { + failedUpdate(manual); + } + + @Override + public void onSuccess(UpdateApiResponse result) { + if (result.commitHash.equals(COMMIT_HASH)) { + //same version and commit, no update needed + if (manual && BackgroundUtils.isInForeground()) { + showToast(context, + getString(R.string.update_none, BuildConfig.APP_LABEL), + Toast.LENGTH_LONG + ); + } + + cancelApkUpdateNotification(); + } else { + processUpdateApiResponse(result, manual); + } + } + }), + new UpdateApiParser(), + NetUtilsClasses.NO_CACHE + ); + } + } + + private boolean processUpdateApiResponse(UpdateApiResponse response, boolean manual) { + if ((response.versionCode > VERSION_CODE || DEV_BUILD) && BackgroundUtils.isInForeground()) { + + // Do not spam dialogs if this is not the manual update check, use the notifications instead + if (manual) { + boolean concat = !response.updateTitle.isEmpty(); + CharSequence updateMessage = + concat ? TextUtils.concat(response.updateTitle, "; ", response.body) : response.body; + AlertDialog dialog = getDefaultAlertBuilder(context) + .setTitle(BuildConfig.APP_LABEL + " " + response.versionCodeString + " available") + .setMessage(updateMessage) + .setNegativeButton(R.string.update_later, null) + .setPositiveButton(R.string.update_install, (dialog1, which) -> { + updateDownloadDialog = new ProgressDialog(context); + updateDownloadDialog.setCanceledOnTouchOutside(true); + updateDownloadDialog.setOnDismissListener((d) -> { + showToast(context, "Download will continue in background."); + updateDownloadDialog = null; + }); + updateDownloadDialog.setTitle(R.string.update_install_downloading); + updateDownloadDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + updateDownloadDialog.setProgressNumberFormat(""); + updateDownloadDialog.show(); + doUpdate(response); + }) + .create(); + dialog.setCanceledOnTouchOutside(false); + dialog.show(); + ((TextView) dialog.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance()); + } + notifyNewApkUpdate(); + return true; + } + + cancelApkUpdateNotification(); + return false; + } + + private void notifyNewApkUpdate() { + PersistableChanState.hasNewApkUpdate.setSync(true); + SettingNotificationManager.postNotification(APK_UPDATE); + } + + private void cancelApkUpdateNotification() { + PersistableChanState.hasNewApkUpdate.setSync(false); + SettingNotificationManager.cancelNotification(APK_UPDATE); + } + + private void failedUpdate(boolean manual) { + Logger.w(this, "Failed to process " + (DEV_BUILD ? "dev" : "stable") + " API call for updating"); + if (manual && BackgroundUtils.isInForeground()) { + getDefaultAlertBuilder(context) + .setTitle(R.string.update_check_failed) + .setPositiveButton(R.string.ok, null) + .show(); + } + } + + /** + * Install the APK file specified in {@code update}. This methods needs the storage permission. + * + * @param response that contains the APK file URL + */ + public void doUpdate(UpdateApiResponse response) { + BackgroundUtils.ensureMainThread(); + + if (updateDownload != null) { + updateDownload.cancel(); + updateDownload = null; + } + + updateDownload = NetUtils.makeFileRequest(response.apkURL, + BuildConfig.APP_LABEL + "_" + response.versionCodeString, + "apk", + new NetUtilsClasses.MainThreadResponseResult<>(new ResponseResult() { + @Override + public void onFailure(Exception e) { + if (!BackgroundUtils.isInForeground()) return; + + if (updateDownloadDialog != null) { + updateDownloadDialog.setOnDismissListener(null); + updateDownloadDialog.dismiss(); + updateDownloadDialog = null; + } + getDefaultAlertBuilder(context) + .setTitle(R.string.update_install_download_failed) + .setMessage(getString(R.string.update_install_download_failed_description, + e.getMessage() + )) + .setPositiveButton(R.string.ok, null) + .show(); + } + + @Override + public void onSuccess(File result) { + if (updateDownloadDialog != null) { + updateDownloadDialog.setOnDismissListener(null); + updateDownloadDialog.dismiss(); + updateDownloadDialog = null; + } + + if (!BackgroundUtils.isInForeground()) return; + + Uri apkURI = FileProvider.getUriForFile(context, BuildConfig.FILE_PROVIDER, result); + Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setDataAndType(apkURI, "application/vnd.android.package-archive"); + openIntent(intent); + } + }), + (url, bytesRead, contentLength, start, done) -> { + if (updateDownloadDialog != null) { + updateDownloadDialog.setProgress((int) (updateDownloadDialog.getMax() * (bytesRead + / (double) contentLength))); + } + } + ); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/WakeManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/WakeManager.java new file mode 100644 index 0000000000..7ba3b00919 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/WakeManager.java @@ -0,0 +1,192 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.manager; + +import static com.github.adamantcheese.chan.Chan.ActivityForegroundStatus.IN_FOREGROUND; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getAppContext; +import static java.util.concurrent.TimeUnit.MINUTES; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.os.PowerManager; +import android.os.PowerManager.WakeLock; + +import com.github.adamantcheese.chan.BuildConfig; +import com.github.adamantcheese.chan.Chan; +import com.github.adamantcheese.chan.core.receiver.WakeUpdateReceiver; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.utils.Logger; +import com.github.adamantcheese.chan.utils.StringUtils; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + +import java.util.*; + +/** + * Deals with background alarms specifically. No foreground stuff here. + */ +public class WakeManager { + private static WakeManager instance; + private final Map wakeLocks = new HashMap<>(); + + private final AlarmManager alarmManager; + private final PowerManager powerManager; + + private final Set wakeableSet = new HashSet<>(); + private final PendingIntent pendingIntent = PendingIntent.getBroadcast(getAppContext(), + 1, + new Intent(getAppContext(), WakeUpdateReceiver.class), + PendingIntent.FLAG_IMMUTABLE + ); + // allow the wake manager to run at construction time; this will be used in the first onEvent call + private long lastBackgroundUpdateTime = System.currentTimeMillis() - ChanSettings.watchBackgroundInterval.get(); + private boolean alarmRunning; + + public static WakeManager getInstance() { + if (instance == null) { + instance = new WakeManager(); + } + + return instance; + } + + private WakeManager() { + alarmManager = (AlarmManager) getAppContext().getSystemService(Context.ALARM_SERVICE); + powerManager = (PowerManager) getAppContext().getSystemService(Context.POWER_SERVICE); + + EventBus.getDefault().register(this); + + if (ChanSettings.watchBackground.get() && ChanSettings.watchEnabled.get()) { + startAlarm(); + } + } + + public void onBroadcastReceived(boolean doCheck) { + long currentTime = System.currentTimeMillis(); + Logger.vd(this, "Alarm trigger @ " + StringUtils.getTimeDefaultLocale(currentTime)); + if (doCheck && currentTime - lastBackgroundUpdateTime < ChanSettings.watchBackgroundInterval.get()) { + Logger.vd(this, "Early; previous @ " + StringUtils.getTimeDefaultLocale(lastBackgroundUpdateTime)); + } else { + lastBackgroundUpdateTime = currentTime; + for (Wakeable wakeable : wakeableSet) { + wakeable.onWake(); + } + } + } + + @Subscribe + public void onEvent(ChanSettings.SettingChanged settingChanged) { + if (settingChanged.setting == ChanSettings.watchBackground + || settingChanged.setting == ChanSettings.watchEnabled) { + if (ChanSettings.watchBackground.get() && ChanSettings.watchEnabled.get()) { + startAlarm(); + } else { + stopAlarm(); + } + } else if (settingChanged.setting == ChanSettings.watchBackgroundInterval) { + stopAlarm(); + startAlarm(); + } + } + + // Called when the app changes foreground state + @Subscribe + public void onEvent(Chan.ActivityForegroundStatus status) { + if (status == IN_FOREGROUND) onBroadcastReceived(true); + } + + public void registerWakeable(Wakeable wakeable) { + boolean needsStart = wakeableSet.isEmpty(); + Logger.vd(this, "Registered " + wakeable.getClass()); + wakeableSet.add(wakeable); + if (!alarmRunning && needsStart) { + startAlarm(); + } + } + + public void unregisterWakeable(Wakeable wakeable) { + Logger.vd(this, "Unregistered " + wakeable.getClass()); + wakeableSet.remove(wakeable); + if (alarmRunning && wakeableSet.isEmpty()) { + stopAlarm(); + } + } + + private void startAlarm() { + if (!alarmRunning) { + alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, + 0, + ChanSettings.watchBackgroundInterval.get(), + pendingIntent + ); + Logger.i(this, + "Started background alarm with an interval of " + + ChanSettings.watchBackgroundInterval + + " at " + + StringUtils.getCurrentTimeDefaultLocale() + ); + alarmRunning = true; + } + } + + private void stopAlarm() { + if (alarmRunning) { + alarmManager.cancel(pendingIntent); + Logger.i(this, "Stopped background alarm"); + alarmRunning = false; + } + } + + /** + * Want a wake lock? Request true. If a lock already exists it will be freed before acquiring a new one. + * Don't need it any more? Request false. + *

+ * Do be warned that wakelocks in this method aren't reference counted, so you can manage true a bunch but managed false once and the wakelock is gone. + * The locker object is to prevent duplicate wakelocks from being generated for the same object. + */ + public void manageLock(boolean lock, Object locker) { + WakeLock wakeLock = wakeLocks.get(locker); + if (lock) { + if (wakeLock != null) { + Logger.w(this, "Wakelock not null while trying to acquire one"); + wakeLock.release(); + wakeLocks.remove(locker); + } + + wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, + BuildConfig.APP_LABEL + ":WakeManagerUpdateLock:" + Object.class.getSimpleName() + ); + wakeLock.setReferenceCounted(false); + wakeLock.acquire(MINUTES.toMillis(1)); + wakeLocks.put(locker, wakeLock); + } else { + if (wakeLock == null) { + Logger.w(this, "Wakelock null while trying to release it"); + } else { + wakeLock.release(); + wakeLocks.remove(locker); + } + } + } + + public interface Wakeable { + void onWake(); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/WatchManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/WatchManager.java new file mode 100644 index 0000000000..08df6ae999 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/manager/WatchManager.java @@ -0,0 +1,845 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.manager; + +import static com.github.adamantcheese.chan.Chan.ActivityForegroundStatus.IN_BACKGROUND; +import static com.github.adamantcheese.chan.core.manager.WatchManager.IntervalType.BACKGROUND; +import static com.github.adamantcheese.chan.core.manager.WatchManager.IntervalType.FOREGROUND; +import static com.github.adamantcheese.chan.core.manager.WatchManager.IntervalType.NONE; +import static com.github.adamantcheese.chan.core.settings.ChanSettings.WatchNotifyMode.NOTIFY_ALL_POSTS; +import static com.github.adamantcheese.chan.core.settings.ChanSettings.WatchNotifyMode.NOTIFY_ONLY_QUOTES; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getAppContext; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getJobScheduler; +import static com.github.adamantcheese.chan.utils.AndroidUtils.postToEventBus; +import static com.github.adamantcheese.chan.utils.BackgroundUtils.isInForeground; +import static java.util.concurrent.TimeUnit.MINUTES; +import static java.util.concurrent.TimeUnit.SECONDS; + +import android.app.job.JobInfo; +import android.content.ComponentName; +import android.content.Intent; +import android.os.*; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; + +import com.github.adamantcheese.chan.Chan; +import com.github.adamantcheese.chan.core.database.DatabasePinManager; +import com.github.adamantcheese.chan.core.database.DatabaseUtils; +import com.github.adamantcheese.chan.core.model.ChanThread; +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.model.orm.Pin; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; +import com.github.adamantcheese.chan.core.repository.PageRepository; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.ChanPage; +import com.github.adamantcheese.chan.core.site.loader.ChanThreadLoader; +import com.github.adamantcheese.chan.features.notifications.LastPageNotification; +import com.github.adamantcheese.chan.features.notifications.WatchNotification; +import com.github.adamantcheese.chan.utils.*; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + +import java.util.*; + +/** + * Manages all Pin related management. + *

+ *

Pins are threads that are pinned to a pane on the left. + *

+ *

The pin watcher is an optional feature that watches threads for new posts and displays a new + * post counter next to the pin view. Watching happens with the same backoff timer as used for + * the auto updater for open threads. + *

+ *

Background watching is a feature that can be enabled. With background watching enabled then + * the PinManager will register an AlarmManager to check for updates in intervals. It will acquire + * a wakelock shortly while checking for updates. + *

+ *

All pin adding and removing must go through this class to properly update the watchers. + */ +public class WatchManager + implements WakeManager.Wakeable { + private static final Intent WATCH_NOTIFICATION_INTENT = new Intent(getAppContext(), WatchNotification.class); + + enum IntervalType { + /** + * A timer that uses a {@link Handler} that calls {@link #update(boolean)} every + * {@link #FOREGROUND_INTERVAL} + */ + FOREGROUND, + + /** + * A timer that schedules a broadcast to be send that calls {@link #update(boolean)}. + */ + BACKGROUND, + + /** + * No scheduling. + */ + NONE + } + + private final Handler handler; + private static final long FOREGROUND_INTERVAL = SECONDS.toMillis(15); + private static final int MESSAGE_UPDATE = 1; + + private final DatabasePinManager databasePinManager; + + private IntervalType currentInterval = NONE; + private final List pins; + + private final Map pinWatchers = new HashMap<>(); + private Set waitingForPinWatchersForBackgroundUpdate; + + public WatchManager( + DatabasePinManager databasePinManager + ) { + this.databasePinManager = databasePinManager; + + pins = Collections.synchronizedList(DatabaseUtils.runTask(databasePinManager.getPins())); + Collections.sort(pins); + + //register this manager to watch for setting changes and post pin changes + EventBus.getDefault().register(this); + + //setup handler to deal with foreground updates + handler = new Handler(Looper.getMainLooper(), msg -> { + if (msg.what == MESSAGE_UPDATE) { + update(false); + return true; + } else { + return false; + } + }); + + updateState(); + } + + public void createPin(Loadable loadable) { + createPin(new Pin(loadable)); + } + + public void createPin(Pin pin) { + createPin(pin, true); + } + + public void createPin(Pin pin, boolean sendBroadcast) { + synchronized (pins) { + // No duplicates + for (Pin e : pins) { + if (e.loadable.equals(pin.loadable)) { + return; + } + } + + // Default order is 0. + pin.order = pin.order < 0 ? 0 : pin.order; + + // Move all down one. + for (Pin p : pins) { + p.order++; + } + pins.add(pin); + DatabaseUtils.runTask(databasePinManager.createPin(pin)); + + // apply orders. + Collections.sort(pins); + reorder(); + updateState(); + + if (sendBroadcast) { + postToEventBus(new PinMessages.PinAddedMessage(pin)); + } + } + } + + @Nullable + public Pin getPinByLoadable(Loadable loadable) { + for (Pin pin : pins) { + if (pin.loadable.equals(loadable)) { + return pin; + } + } + + return null; + } + + public void deletePin(Pin pin) { + synchronized (pins) { + int index = pins.indexOf(pin); + pins.remove(pin); + + destroyPinWatcher(pin); + + DatabaseUtils.runTask(databasePinManager.deletePin(pin)); + + // Update the new orders + Collections.sort(pins); + reorder(); + updateState(); + + postToEventBus(new PinMessages.PinRemovedMessage(index)); + } + } + + public void deletePins(List pinList) { + synchronized (pins) { + for (Pin pin : pinList) { + pins.remove(pin); + destroyPinWatcher(pin); + } + + DatabaseUtils.runTask(databasePinManager.deletePins(pinList)); + + // Update the new orders + Collections.sort(pins); + reorder(); + updatePinsInDatabase(); + + updateState(); + postToEventBus(new PinMessages.PinsChangedMessage()); + } + } + + public void updatePin(Pin pin) { + updatePin(pin, true); + } + + public void updatePin(Pin pin, boolean updateState) { + synchronized (pins) { + Set foundPins = new HashSet<>(); + + for (int i = 0; i < pins.size(); i++) { + if (pins.get(i).loadable.id == pin.loadable.id) { + pins.set(i, pin); + foundPins.add(pin); + break; + } + } + + if (!foundPins.contains(pin)) { + pins.add(pin); + } + } + + DatabaseUtils.runTask(databasePinManager.updatePin(pin)); + + if (updateState) { + updateState(); + } + + postToEventBus(new PinMessages.PinChangedMessage(pin)); + } + + public Pin findPinById(int id) { + synchronized (pins) { + for (Pin pin : pins) { + if (pin.id == id) { + return pin; + } + } + } + + return null; + } + + public void reorder() { + synchronized (pins) { + for (int i = 0; i < pins.size(); i++) { + pins.get(i).order = i; + } + } + updatePinsInDatabase(); + } + + public List getWatchingPins() { + if (ChanSettings.watchEnabled.get()) { + List l = new ArrayList<>(); + + synchronized (pins) { + for (Pin p : pins) { + if (p.watching) { + l.add(p); + } + } + } + + return l; + } else { + return Collections.emptyList(); + } + } + + public void toggleWatch(Pin pin) { + if (pin.archived || pin.isError) { + return; + } + + pin.watching = !pin.watching; + + updateState(); + postToEventBus(new PinMessages.PinChangedMessage(pin)); + } + + public void onBottomPostViewed(@Nullable Pin pin) { + if (pin == null) return; + + if (pin.watchNewCount >= 0) { + pin.watchLastCount = pin.watchNewCount; + } + + if (pin.quoteNewCount >= 0) { + pin.quoteLastCount = pin.quoteNewCount; + } + + PinWatcher pinWatcher = getPinWatcher(pin); + if (pinWatcher != null) { + //onViewed + pinWatcher.wereNewPosts = false; + pinWatcher.wereNewQuotes = false; + } + + updatePin(pin); + } + + @Subscribe + public void onEvent(Chan.ActivityForegroundStatus status) { + updateState(); + if (status == IN_BACKGROUND) { + updatePinsInDatabase(); + } + } + + @Subscribe + public void onEvent(ChanSettings.SettingChanged settingChanged) { + if (settingChanged.setting == ChanSettings.watchBackground + || settingChanged.setting == ChanSettings.watchEnabled) { + updateState(); + postToEventBus(new PinMessages.PinsChangedMessage()); + } + } + + // Called when the broadcast scheduled by the alarm manager was received + public void onWake() { + update(true); + } + + // Called from the button on the notification + public void pauseAll() { + for (Pin pin : getWatchingPins()) { + pin.watching = false; + } + + updateState(); + updatePinsInDatabase(); + + postToEventBus(new PinMessages.PinsChangedMessage()); + } + + // Clear all non watching pins or all pins + // Returns a list of pins that can later be given to addAll to undo the clearing + public List clearPins(boolean all) { + synchronized (pins) { + List toRemove = new ArrayList<>(); + if (all) { + toRemove.addAll(pins); + } else { + for (Pin pin : pins) { + //if we're watching and a pin isn't being watched and has no flags, it's a candidate for clearing + //if the pin is archived or errored out, it's a candidate for clearing + if ((ChanSettings.watchEnabled.get() && !pin.watching) || pin.archived || pin.isError) { + toRemove.add(pin); + } + } + } + + List undo = new ArrayList<>(toRemove.size()); + for (Pin pin : toRemove) { + undo.add(pin.clone()); + } + deletePins(toRemove); + return undo; + } + } + + public List getAllPins() { + return pins; // TODO see if synchronization is needed here + } + + public void addAll(List pins) { + Collections.sort(pins); + for (Pin pin : pins) { + createPin(pin); + } + } + + @Nullable + public PinWatcher getPinWatcher(@Nullable Pin pin) { + return pinWatchers.get(pin); + } + + private void createPinWatcher(Pin pin) { + if (!pinWatchers.containsKey(pin)) { + pinWatchers.put(pin, new PinWatcher(pin)); + postToEventBus(new PinMessages.PinChangedMessage(pin)); + } + } + + private void destroyPinWatcher(Pin pin) { + PinWatcher pinWatcher = pinWatchers.remove(pin); + if (pinWatcher != null) { + pinWatcher.destroy(); + } + } + + private void updatePinsInDatabase() { + List clonedPins = new ArrayList<>(); + synchronized (pins) { + for (Pin pin : pins) { + clonedPins.add(pin.clone()); + } + } + DatabaseUtils.runTaskAsync(databasePinManager.updatePins(clonedPins)); + } + + // Update the interval type according to the current settings, + // create and destroy PinWatchers where needed and update the notification + private void updateState() { + BackgroundUtils.ensureMainThread(); + + updateIntervals(); + + // Update notification state + // Do not start the service when all pins are stopped or archived/404ed + if (updatePinWatchers() && !getWatchingPins().isEmpty() && ChanSettings.watchBackground.get()) { + // To make sure that we won't blow up when starting a service while the app is in + // background we have to use this method which will call context.startForegroundService() + // that allows an app to start a service (which must then call StartForeground in it's + // onCreate method) while being in background. + ContextCompat.startForegroundService(getAppContext(), WATCH_NOTIFICATION_INTENT); + } else { + getAppContext().stopService(WATCH_NOTIFICATION_INTENT); + } + } + + /** + * @return true if there are unread posts in active threads + */ + private boolean updatePinWatchers() { + boolean hasActiveUnreadPins = false; + synchronized (pins) { + for (Pin pin : pins) { + if (pin.isError || pin.archived) { + pin.watching = false; + } + + if (ChanSettings.watchEnabled.get()) { + createPinWatcher(pin); + } else { + destroyPinWatcher(pin); + } + + if (pin.watching) { + if (ChanSettings.watchNotifyMode.get() == NOTIFY_ALL_POSTS) { + if (pin.watchLastCount != pin.watchNewCount) { + hasActiveUnreadPins = true; + } + } else if (ChanSettings.watchNotifyMode.get() == NOTIFY_ONLY_QUOTES) { + if (pin.quoteLastCount != pin.quoteNewCount) { + hasActiveUnreadPins = true; + } + } + } + } + } + + return hasActiveUnreadPins; + } + + private void updateIntervals() { + IntervalType newInterval = NONE; + if (ChanSettings.watchEnabled.get()) { + if (isInForeground()) { + newInterval = FOREGROUND; + } else { + if (ChanSettings.watchBackground.get()) { + newInterval = BACKGROUND; + } + } + } + + if (hasActivePins()) { + if (currentInterval == newInterval) return; + endIntervalActions(); + + Logger.vd(this, "Setting interval type from " + currentInterval.name() + " to " + newInterval.name()); + currentInterval = newInterval; + + beginIntervalActions(); + } else { + Logger.vd(this, "No active pins found, unregistering for wake"); + endIntervalActions(); + } + } + + private void endIntervalActions() { + switch (currentInterval) { + case FOREGROUND: + // Stop receiving handler messages + handler.removeMessages(MESSAGE_UPDATE); + break; + case BACKGROUND: + // Stop receiving scheduled broadcasts + WakeManager.getInstance().unregisterWakeable(this); + break; + case NONE: + // Stop everything + handler.removeMessages(MESSAGE_UPDATE); + WakeManager.getInstance().unregisterWakeable(this); + break; + } + } + + private void beginIntervalActions() { + switch (currentInterval) { + case FOREGROUND: + //Background/none -> foreground means start receiving foreground updates + handler.sendMessageDelayed(handler.obtainMessage(MESSAGE_UPDATE), FOREGROUND_INTERVAL); + break; + case BACKGROUND: + //Foreground/none -> background means start receiving background updates + WakeManager.getInstance().registerWakeable(this); + break; + case NONE: + //Foreground/background -> none means stop receiving every update + handler.removeMessages(MESSAGE_UPDATE); + WakeManager.getInstance().unregisterWakeable(this); + break; + } + } + + private boolean hasActivePins() { + for (Pin pin : pins) { + if (!pin.isError && !pin.archived) { + return true; + } + } + + return false; + } + + // Update the watching pins + private void update(boolean fromBackground) { + Logger.vd(this, "update from " + (fromBackground ? "background" : "foreground")); + + if (currentInterval == FOREGROUND) { + // reschedule handler message + handler.sendMessageDelayed(handler.obtainMessage(MESSAGE_UPDATE), FOREGROUND_INTERVAL); + } + + // A set of watchers that all have to complete being updated + // before the wakelock is released again + waitingForPinWatchersForBackgroundUpdate = null; + if (fromBackground) { + waitingForPinWatchersForBackgroundUpdate = new HashSet<>(); + } + + List watchingPins = getWatchingPins(); + for (Pin pin : watchingPins) { + PinWatcher pinWatcher = getPinWatcher(pin); + if (pinWatcher != null && pinWatcher.update(fromBackground)) { + if (fromBackground) { + waitingForPinWatchersForBackgroundUpdate.add(pinWatcher); + } + } + } + + if (fromBackground && !waitingForPinWatchersForBackgroundUpdate.isEmpty()) { + Logger.i( + this, + waitingForPinWatchersForBackgroundUpdate.size() + + " pin watchers beginning updates, started at " + + StringUtils.getCurrentTimeDefaultLocale() + ); + WakeManager.getInstance().manageLock(true, WatchManager.this); + } + } + + private void pinWatcherUpdated(PinWatcher pinWatcher) { + postToEventBus(new PinMessages.PinChangedMessage(pinWatcher.pin)); + + synchronized (WatchManager.this) { + if (waitingForPinWatchersForBackgroundUpdate != null) { + waitingForPinWatchersForBackgroundUpdate.remove(pinWatcher); + + if (waitingForPinWatchersForBackgroundUpdate.isEmpty()) { + Logger.i(this, "All watchers updated, finished at " + StringUtils.getCurrentTimeDefaultLocale()); + waitingForPinWatchersForBackgroundUpdate = null; + WakeManager.getInstance().manageLock(false, WatchManager.this); + updateState(); + } + } + } + } + + public static class PinMessages { + public static class PinAddedMessage { + public Pin pin; + + public PinAddedMessage(Pin pin) { + this.pin = pin; + } + } + + public static class PinRemovedMessage { + public int index; + + public PinRemovedMessage(int index) { + this.index = index; + } + } + + public static class PinChangedMessage { + public Pin pin; + + public PinChangedMessage(Pin pin) { + this.pin = pin; + } + } + + public static class PinsChangedMessage { + public PinsChangedMessage() {} + } + } + + public class PinWatcher + implements NetUtilsClasses.ResponseResult, PageRepository.PageCallback { + private final Pin pin; + private ChanThreadLoader chanLoader; + + private final List posts = new ArrayList<>(); + private final List quotes = new ArrayList<>(); + private boolean wereNewQuotes = false; + private boolean wereNewPosts = false; + private boolean notified = true; + + public PinWatcher(Pin pin) { + this.pin = pin; + + Logger.vd(this, "created for " + pin.loadable.toString()); + chanLoader = ChanLoaderManager.obtain(pin.loadable, this); + PageRepository.addListener(this); + } + + public CharSequence getSummary() { + return chanLoader != null && chanLoader.getThread() != null ? chanLoader.getThread().summarize(true) : null; + } + + public List getUnviewedPosts() { + if (posts.isEmpty()) { + return posts; + } else { + return posts.subList(Math.max(0, posts.size() - pin.getNewPostCount()), posts.size()); + } + } + + public List getUnviewedQuotes() { + return quotes.subList(Math.max(0, quotes.size() - pin.getNewQuoteCount()), quotes.size()); + } + + public boolean getWereNewQuotes() { + if (wereNewQuotes) { + wereNewQuotes = false; + return true; + } else { + return false; + } + } + + public boolean getWereNewPosts() { + if (wereNewPosts) { + wereNewPosts = false; + return true; + } else { + return false; + } + } + + private void destroy() { + if (chanLoader != null) { + Logger.vd( + this, + "PinWatcher: destroyed for pin with id " + pin.id + " and loadable" + pin.loadable.toString() + ); + ChanLoaderManager.release(chanLoader, this); + chanLoader = null; + } + PageRepository.removeListener(this); + } + + /** + * @param fromBackground was this update called from a background state + * @return true if a data call was requested + */ + protected boolean update(boolean fromBackground) { + if (!pin.isError && pin.watching) { + //check last page stuff, get the page for the OP and notify in the onPages method + doPageNotification(); + if (fromBackground) { + // Always load regardless of timer, since the time left is not accurate for 15min+ intervals + chanLoader.clearTimer(); + chanLoader.requestAdditionalData(); + return true; + } else { + if (chanLoader.getTimeUntilLoadMore() < 0L) { + chanLoader.requestAdditionalData(); + return true; + } + return false; + } + } else { + return false; + } + } + + @Override + public void onFailure(Exception error) { + // Ignore normal network errors, we only pause pins when there is absolutely no way + // we'll ever need watching again: a 404. + if (error instanceof NetUtilsClasses.HttpCodeException + && ((NetUtilsClasses.HttpCodeException) error).isServerErrorNotFound()) { + pin.isError = true; + pin.watching = false; + } + + pinWatcherUpdated(this); + } + + @Override + public void onSuccess(ChanThread thread) { + if (thread.getOp() != null) { + pin.isSticky = thread.getOp().sticky; + } else { + pin.isSticky = false; + } + + pin.isError = false; + + // Populate posts list + posts.clear(); + posts.addAll(thread.getPosts()); + + // Populate quotes list + quotes.clear(); + + // Get list of saved replies from this thread + List savedReplies = new ArrayList<>(); + for (Post item : thread.getPosts()) { + if (item.isSavedReply) { + savedReplies.add(item); + } + } + + // Now get a list of posts that have a quote to a saved reply, but not self-replies + for (Post post : thread.getPosts()) { + for (Post saved : savedReplies) { + if (post.repliesTo.contains(saved.no) && !post.isSavedReply) { + quotes.add(post); + } + } + } + + boolean isFirstLoad = pin.watchNewCount < 0 || pin.quoteNewCount < 0; + + // If it was more than before processing + int lastWatchNewCount = pin.watchNewCount; + int lastQuoteNewCount = pin.quoteNewCount; + + if (isFirstLoad) { + pin.watchLastCount = posts.size(); + pin.quoteLastCount = quotes.size(); + } + + pin.watchNewCount = posts.size() - savedReplies.size(); + pin.quoteNewCount = quotes.size(); + + if (!isFirstLoad) { + // There were new posts after processing + if (pin.watchNewCount > lastWatchNewCount) { + wereNewPosts = true; + } + + // There were new quotes after processing + if (pin.quoteNewCount > lastQuoteNewCount) { + wereNewQuotes = true; + } + } + + Logger.vd(this, String.format( + Locale.ENGLISH, + "postlast=%d postnew=%d werenewposts=%b quotelast=%d quotenew=%d werenewquotes=%b nextload=%ds", + pin.watchLastCount, + pin.watchNewCount, + wereNewPosts, + pin.quoteLastCount, + pin.quoteNewCount, + wereNewQuotes, + chanLoader.getTimeUntilLoadMore() / 1000 + )); + + if (thread.isArchived() || thread.isClosed()) { + pin.archived = true; + pin.watching = false; + } + + pinWatcherUpdated(this); + } + + @Override + public void onPagesReceived() { + doPageNotification(); + } + + private void doPageNotification() { + ChanPage page = PageRepository.getPage(chanLoader.getLoadable()); + if (ChanSettings.watchEnabled.get() + && ChanSettings.watchLastPageNotify.get() + && ChanSettings.watchBackground.get()) { + if (page != null && page.page >= pin.loadable.board.pages && !notified) { + lastPageNotify(true); //schedules a job to notify the user of a last page + notified = true; + } else if (page != null && page.page < pin.loadable.board.pages) { + lastPageNotify(false); //schedules a job to cancel the notification; don't use cancel! + notified = false; + } + } + } + + private void lastPageNotify(boolean notify) { + ComponentName lastPageNotifyClass = new ComponentName(getAppContext(), LastPageNotification.class); + JobInfo.Builder builder = new JobInfo.Builder(pin.loadable.no, lastPageNotifyClass); + builder.setOverrideDeadline(MINUTES.toMillis(1)); + PersistableBundle extras = new PersistableBundle(); + extras.putInt(LastPageNotification.PIN_ID_KEY, pin.id); + extras.putInt(LastPageNotification.NOTIFY_KEY, notify ? 1 : 0); + builder.setExtras(extras); + getJobScheduler().schedule(builder.build()); + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/ChanThread.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/ChanThread.java new file mode 100644 index 0000000000..532b5040ad --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/ChanThread.java @@ -0,0 +1,144 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model; + +import static com.github.adamantcheese.chan.utils.AndroidUtils.getString; +import static com.github.adamantcheese.chan.utils.StringUtils.span; + +import android.graphics.Typeface; +import android.text.SpannableStringBuilder; +import android.text.style.StyleSpan; +import android.text.style.UnderlineSpan; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.R; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.repository.PageRepository; +import com.github.adamantcheese.chan.core.site.archives.ExternalSiteArchive; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs; +import com.github.adamantcheese.chan.ui.text.spans.ForegroundColorSpanHashed; +import com.github.adamantcheese.chan.ui.helper.ThemeHelper; + +import java.util.*; + +public class ChanThread { + public final Loadable loadable; + // Unmodifiable list of posts. We need it to make this class "thread-safe" (it's actually + // still not fully thread-safe because Loadable and the Post classes are not thread-safe but + // there is no easy way to fix them right now) and to avoid copying the whole list of posts + // every time it is needed somewhere. + @NonNull + private List posts; + + public ChanThread(@NonNull Loadable loadable, @NonNull List posts) { + this.loadable = loadable; + this.posts = Collections.unmodifiableList(new ArrayList<>(posts)); + } + + public synchronized int getImagesCount() { + int total = 0; + for (Post p : posts) { + total += p.images.size(); + } + return total; + } + + public synchronized boolean isClosed() { + return !posts.isEmpty() && getOp().closed; + } + + public synchronized boolean isArchived() { + return !posts.isEmpty() && getOp().archived; + } + + @NonNull + public synchronized List getPosts() { + return posts; + } + + public synchronized void setNewPosts(@NonNull List newPosts) { + this.posts = Collections.unmodifiableList(new ArrayList<>(newPosts)); + } + + /** + * Not safe! Only use for read-only operations! + */ + public synchronized Post getOp() { + return posts.isEmpty() ? null : posts.get(0); + } + + public CharSequence summarize(boolean extraStyling) { + Post op = getOp(); + SpannableStringBuilder builder = new SpannableStringBuilder(); + boolean hasReplies = op.replies >= 0 || posts.size() - 1 > 0; + boolean hasImages = op.imagesCount >= 0 || getImagesCount() > 0; + boolean hasUniqueIps = op.uniqueIps >= 0; + String separator = " / "; + Object[] styleSpans = {new StyleSpan(Typeface.ITALIC)}; + if (extraStyling) { + styleSpans = new Object[]{ + new StyleSpan(Typeface.BOLD_ITALIC), + new ForegroundColorSpanHashed(ThemeHelper.getTheme().textColorInt), + new UnderlineSpan() + }; + } + + if (hasReplies) { + boolean hasBumpLimit = loadable.board.bumpLimit > 0; + CharSequence replies = (op.replies >= 0 ? op.replies : posts.size() - 1) + "R"; + if (hasBumpLimit && op.replies >= loadable.board.bumpLimit) { + for (Object span : styleSpans) { + replies = span(replies, span); + } + } + builder.append(replies); + } + + if (hasImages) { + boolean hasImageLimit = loadable.board.imageLimit > 0; + CharSequence images = (op.imagesCount >= 0 ? op.imagesCount : getImagesCount()) + "I"; + if (hasImageLimit && op.imagesCount >= loadable.board.imageLimit) { + for (Object span : styleSpans) { + images = span(images, span); + } + } + builder.append(hasReplies ? separator : "").append(images); + } + + if (hasUniqueIps) { + String ips = op.uniqueIps + "P"; + builder.append(hasReplies || hasImages ? separator : "").append(ips); + } + + CommonDataStructs.ChanPage p = PageRepository.getPage(op); + if (p != null && !(loadable.site instanceof ExternalSiteArchive)) { + CharSequence page = String.valueOf(p.page); + if (p.page >= loadable.board.pages) { + for (Object span : styleSpans) { + page = span(page, span); + } + } + builder + .append(hasReplies || hasImages || hasUniqueIps ? separator : "") + .append(getString(R.string.thread_page_no)) + .append(' ') + .append(page); + } + return builder; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/InternalSiteArchive.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/InternalSiteArchive.java new file mode 100644 index 0000000000..89702ee4df --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/InternalSiteArchive.java @@ -0,0 +1,46 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model; + +import java.util.List; + +public class InternalSiteArchive { + public final List items; + + public static InternalSiteArchive fromItems(List items) { + return new InternalSiteArchive(items); + } + + private InternalSiteArchive(List items) { + this.items = items; + } + + public static class ArchiveItem { + public final String description; + + public final int id; + + public static ArchiveItem fromDescriptionId(String description, int id) { + return new ArchiveItem(description, id); + } + + private ArchiveItem(String description, int id) { + this.description = description; + this.id = id; + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/Post.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/Post.java new file mode 100644 index 0000000000..bb7092cebb --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/Post.java @@ -0,0 +1,641 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model; + +import android.graphics.Color; +import android.text.*; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.features.embedding.Embeddable; +import com.github.adamantcheese.chan.ui.text.spans.post_linkables.PostLinkable; +import com.github.adamantcheese.chan.ui.text.spans.post_linkables.QuoteLinkable; +import com.google.common.primitives.Ints; +import com.vdurmont.emoji.EmojiParser; + +import org.jsoup.parser.Parser; + +import java.util.*; +import java.util.concurrent.CopyOnWriteArrayList; + +import okhttp3.Call; + +public class Post + implements Comparable, Cloneable, Embeddable { + public final String boardCode; + + public final Board board; + + public final int no; + + public final boolean isOP; + + public final String name; + + public final Spanned subject; + + /** + * Unix timestamp, in seconds. + */ + public final long time; + + public final List images = new CopyOnWriteArrayList<>(); + + public final String tripcode; + + public final String id; + + public final int opId; + + public final String capcode; + + public final List httpIcons; + + public final boolean isSavedReply; + + public final int[] filterHighlightedColors; + + public final boolean filterStub; + + public final boolean filterRemove; + + public final boolean filterWatch; + + public final boolean filterReplies; + + public final boolean filterOnlyOP; + + public final boolean filterSaved; + + /** + * This post replies to the these post numbers. + */ + public final Set repliesTo; + + public final CharSequence subjectSpan; + + public final CharSequence nameTripcodeIdCapcodeSpan; + + /** + * These post numbers replied to this post. + */ + public final List repliesFrom = new CopyOnWriteArrayList<>(); + + public Spanned comment; + + // These members may only mutate on the main thread. + public boolean sticky; + public boolean closed; + public boolean archived; + public boolean deleted; + public int replies; + public int imagesCount; + public int uniqueIps; + public long lastModified; + public String title = ""; + + private final List embedCalls = new ArrayList<>(); + + public int compareTo(Post p) { + return -Long.compare(this.time, p.time); + } + + private Post(Builder builder) { + board = builder.board; + boardCode = builder.board.code; + no = builder.no; + + isOP = builder.op; + replies = builder.replies; + imagesCount = builder.imagesCount; + uniqueIps = builder.uniqueIps; + lastModified = builder.lastModified; + sticky = builder.sticky; + closed = builder.closed; + archived = builder.archived; + + subject = new SpannedString(builder.subject); + name = builder.name; + comment = new SpannedString(builder.comment); + tripcode = builder.tripcode; + + time = builder.unixTimestampSeconds; + if (builder.images != null) { + images.addAll(builder.images); + } + + httpIcons = builder.httpIcons; + + id = builder.posterId; + opId = builder.opId; + capcode = builder.moderatorCapcode; + + filterHighlightedColors = builder.filterHighlightedColors; + filterStub = builder.filterStub; + filterRemove = builder.filterRemove; + filterWatch = builder.filterWatch; + filterReplies = builder.filterReplies; + filterOnlyOP = builder.filterOnlyOP; + filterSaved = builder.filterSaved; + + isSavedReply = builder.isSavedReply; + subjectSpan = builder.subjectSpan; + nameTripcodeIdCapcodeSpan = builder.nameTripcodeIdCapcodeSpan; + + repliesTo = Collections.unmodifiableSet(builder.repliesToNos); + } + + /** + * Return the first image, or {@code null} if post has no images. + * + * @return the first image, or {@code null} + */ + public PostImage image() { + return images.isEmpty() ? null : images.get(0); + } + + public boolean hasFilterParameters() { + return filterRemove || filterHighlightedColors.length > 0 || filterReplies || filterStub; + } + + public PostLinkable[] getLinkables() { + return comment.getSpans(0, comment.length(), PostLinkable.class); + } + + public QuoteLinkable[] getQuoteLinkables() { + return comment.getSpans(0, comment.length(), QuoteLinkable.class); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Post post = (Post) o; + //@formatter:off + return no == post.no + && isOP == post.isOP + && time == post.time + && opId == post.opId + && isSavedReply == post.isSavedReply + && Arrays.equals(filterHighlightedColors, post.filterHighlightedColors) + && filterStub == post.filterStub + && filterRemove == post.filterRemove + && filterWatch == post.filterWatch + && filterReplies == post.filterReplies + && filterOnlyOP == post.filterOnlyOP + && filterSaved == post.filterSaved + && sticky == post.sticky + && closed == post.closed + && archived == post.archived + && lastModified == post.lastModified + && Objects.equals(boardCode, post.boardCode) + && Objects.equals(board, post.board) + && Objects.equals(name, post.name) + && Objects.equals(comment, post.comment) + && Objects.equals(subject, post.subject) + && Objects.equals(images, post.images) + && Objects.equals(tripcode, post.tripcode) + && Objects.equals(id, post.id) + && Objects.equals(capcode, post.capcode) + && Objects.equals(httpIcons, post.httpIcons) + && Objects.equals(repliesTo, post.repliesTo) + && Objects.equals(deleted, post.deleted) + && Objects.equals(repliesFrom, post.repliesFrom) + && Objects.equals(title, post.title); + //@formatter:on + } + + @Override + public int hashCode() { + return Objects.hash( + boardCode, + board, + no, + isOP, + name, + comment, + subject, + time, + images, + tripcode, + id, + opId, + capcode, + httpIcons, + isSavedReply, + Arrays.hashCode(filterHighlightedColors), + filterStub, + filterRemove, + filterWatch, + filterReplies, + filterOnlyOP, + filterSaved, + repliesTo, + deleted, + repliesFrom, + sticky, + closed, + archived, + lastModified, + title + ); + } + + @Override + @NonNull + public String toString() { + return "[no = " + + no + + ", boardCode = " + + board.code + + ", siteId = " + + board.siteId + + ", comment = " + + comment + + "]"; + } + + @SuppressWarnings("MethodDoesntCallSuperMethod") + @NonNull + @Override + public Post clone() { + Post clone = new Builder() + .board(board) + .no(no) + .opId(opId) + .op(isOP) + .replies(replies) + .images(imagesCount) + .uniqueIps(uniqueIps) + .sticky(sticky) + .archived(archived) + .lastModified(lastModified) + .closed(closed) + .subject(subject) + .name(name) + .comment(comment) + .tripcode(tripcode) + .setUnixTimestampSeconds(time) + .images(images) + .posterId(id) + .moderatorCapcode(capcode) + .setHttpIcons(httpIcons) + .filter( + filterHighlightedColors, + filterStub, + filterRemove, + filterWatch, + filterReplies, + filterOnlyOP, + filterSaved + ) + .isSavedReply(isSavedReply) + .spans(subjectSpan, nameTripcodeIdCapcodeSpan) + .repliesTo(repliesTo) + .build(); + clone.repliesFrom.addAll(repliesFrom); + clone.title = title; + clone.deleted = deleted; + return clone; + } + + @Override + public Spanned getEmbeddableText() { + return comment; + } + + @Override + public void setEmbeddableText(Spanned text) { + comment = text; + } + + @Override + public void addEmbedCall(Call call) { + embedCalls.add(call); + } + + @Override + public List getEmbedCalls() { + return embedCalls; + } + + @Override + public void addImageObjects(List images) { + for (PostImage p : images) { + if (this.images.contains(p)) continue; + if (this.images.size() >= ChanSettings.parsedPostImageLimit.get()) return; + this.images.add(p); + } + } + + @SuppressWarnings("unused") + public String threadUrl() { + return board.site.resolvable().desktopUrl(Loadable.forThread(board, opId, title, false), no); + } + + @SuppressWarnings("UnusedReturnValue") + public static final class Builder + implements Cloneable { + public Board board; + public int no = -1; + public int opId = -1; + + public boolean op; + public int replies = -1; + public int imagesCount = -1; + public int uniqueIps = -1; + public boolean sticky; + public boolean closed; + public boolean archived; + public long lastModified = -1L; + + private Spannable subject = new SpannableString(""); + private String name = ""; + public Spannable comment = new SpannableString(""); + public String tripcode = ""; + + public long unixTimestampSeconds = -1L; + public List images = new CopyOnWriteArrayList<>(); + + public List httpIcons = new ArrayList<>(); + + public String posterId = ""; + public String moderatorCapcode = ""; + + public int idColor; + + public int[] filterHighlightedColors = {}; + public boolean filterStub; + public boolean filterRemove; + public boolean filterWatch; + public boolean filterReplies; + public boolean filterOnlyOP; + public boolean filterSaved; + public boolean isSavedReply; + + public CharSequence subjectSpan; + public CharSequence nameTripcodeIdCapcodeSpan; + + public final Set repliesToNos = new HashSet<>(); + + public Builder() { + } + + public Builder board(Board board) { + this.board = board; + return this; + } + + public Builder no(int no) { + this.no = no; + return this; + } + + public Builder idColor(int idColor) { + this.idColor = idColor; + return this; + } + + public Builder opId(int opId) { + this.opId = opId; + return this; + } + + public Builder op(boolean op) { + this.op = op; + return this; + } + + public Builder replies(int replies) { + this.replies = replies; + return this; + } + + public Builder images(int images) { + this.imagesCount = images; + return this; + } + + public Builder uniqueIps(int uniqueIps) { + this.uniqueIps = uniqueIps; + return this; + } + + public Builder sticky(boolean sticky) { + this.sticky = sticky; + return this; + } + + public Builder archived(boolean archived) { + this.archived = archived; + return this; + } + + public Builder lastModified(long lastModified) { + this.lastModified = lastModified; + return this; + } + + public Builder closed(boolean closed) { + this.closed = closed; + return this; + } + + public Builder subject(CharSequence subject) { + this.subject = new SpannableString(Parser.unescapeEntities(subject.toString(), false)); + return this; + } + + public Spannable getSubject() { + return subject; + } + + public Builder name(String name) { + if (ChanSettings.enableEmoji.get()) { + this.name = EmojiParser.parseToUnicode(name); + } else { + this.name = name; + } + this.name = Parser.unescapeEntities(this.name, false); + return this; + } + + public String getName() { + return name; + } + + public Builder comment(CharSequence comment) { + this.comment = new SpannableString(comment); + return this; + } + + public Builder tripcode(String tripcode) { + this.tripcode = tripcode; + return this; + } + + public Builder setUnixTimestampSeconds(long unixTimestampSeconds) { + this.unixTimestampSeconds = unixTimestampSeconds; + return this; + } + + /** + * Add images to this post + * + * @param images A list of images to add + * @return This builder + */ + public Builder images(List images) { + for (PostImage p : images) { + if (this.images.contains(p)) continue; + if (this.images.size() >= ChanSettings.parsedPostImageLimit.get()) return this; + this.images.add(p); + } + return this; + } + + public Builder posterId(String posterId) { + this.posterId = posterId; + + // Stolen from the 4chan extension + int hash = 0; + for (int i = 0; i < posterId.length(); i++) { + hash = (hash << 5) - hash + posterId.charAt(i); + } + hash = hash >>> 8; + + this.idColor = Color.BLACK | hash; + + return this; + } + + public Builder moderatorCapcode(String moderatorCapcode) { + this.moderatorCapcode = moderatorCapcode; + return this; + } + + public Builder addHttpIcon(PostHttpIcon httpIcon) { + httpIcons.add(httpIcon); + return this; + } + + public Builder setHttpIcons(List httpIcons) { + this.httpIcons = httpIcons; + return this; + } + + public Builder filter( + int[] highlightedColors, + boolean stub, + boolean remove, + boolean watch, + boolean filterReplies, + boolean onlyOnOp, + boolean filterSaved + ) { + filterHighlightedColors = Ints.concat(filterHighlightedColors, highlightedColors); + filterStub = filterStub | stub; + filterRemove = filterRemove | remove; + filterWatch = filterWatch | watch; + this.filterReplies = this.filterReplies | filterReplies; + filterOnlyOP = filterOnlyOP | onlyOnOp; + this.filterSaved = this.filterSaved | filterSaved; + return this; + } + + public Builder isSavedReply(boolean isSavedReply) { + this.isSavedReply = isSavedReply; + return this; + } + + public Builder spans(CharSequence subjectSpan, CharSequence nameTripcodeIdCapcodeSpan) { + this.subjectSpan = subjectSpan; + this.nameTripcodeIdCapcodeSpan = nameTripcodeIdCapcodeSpan; + return this; + } + + /** + * Specify that this post replies to these post number + * + * @param repliesToNos The post numbers that are being replied to + */ + public Builder repliesTo(Set repliesToNos) { + this.repliesToNos.addAll(repliesToNos); + return this; + } + + public List getQuoteLinkables() { + List linkables = new ArrayList<>(); + Collections.addAll(linkables, comment.getSpans(0, comment.length(), QuoteLinkable.class)); + return linkables; + } + + public String threadUrl() { + return board.site.resolvable().desktopUrl(Loadable.forThread(board, opId, "", false), no); + } + + @SuppressWarnings("MethodDoesntCallSuperMethod") + @NonNull + @Override + public Post.Builder clone() { + return new Builder() + .board(board) + .no(no) + .opId(opId) + .op(op) + .replies(replies) + .images(imagesCount) + .uniqueIps(uniqueIps) + .sticky(sticky) + .closed(closed) + .archived(archived) + .lastModified(lastModified) + .subject(subject) + .name(name) + .comment(comment) + .tripcode(tripcode) + .setUnixTimestampSeconds(unixTimestampSeconds) + .images(images) + .posterId(posterId) + .moderatorCapcode(moderatorCapcode) + .setHttpIcons(httpIcons) + .filter( + filterHighlightedColors, + filterStub, + filterRemove, + filterWatch, + filterReplies, + filterOnlyOP, + filterSaved + ) + .isSavedReply(isSavedReply) + .spans(subjectSpan, nameTripcodeIdCapcodeSpan) + .repliesTo(repliesToNos); + } + + public Post build() { + if (board == null || no < 0 || opId < 0 || unixTimestampSeconds < 0) { + throw new IllegalArgumentException("Post data not complete"); + } + + return new Post(this); + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/PostHttpIcon.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/PostHttpIcon.java new file mode 100644 index 0000000000..ecea60bc79 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/PostHttpIcon.java @@ -0,0 +1,40 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model; + +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.PassthroughBitmapResult; +import com.github.adamantcheese.chan.core.site.SiteEndpoints; + +import okhttp3.HttpUrl; + +public class PostHttpIcon { + public final SiteEndpoints.IconType type; + public final HttpUrl url; + public final PassthroughBitmapResult bitmapResult; + public final String code; + public final String description; + + public PostHttpIcon( + SiteEndpoints.IconType type, HttpUrl url, PassthroughBitmapResult result, String code, String description + ) { + this.type = type; + this.url = url; + this.bitmapResult = result; + this.code = code; + this.description = description; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/PostImage.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/PostImage.java new file mode 100644 index 0000000000..9c2214718a --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/PostImage.java @@ -0,0 +1,272 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model; + +import static com.github.adamantcheese.chan.core.model.PostImage.Type.*; +import static com.github.adamantcheese.chan.utils.BuildConfigUtils.DELETED_IMAGE_THUMB_URL; +import static com.github.adamantcheese.chan.utils.BuildConfigUtils.HIDE_THUMB_URL; + +import android.text.TextUtils; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.utils.StringUtils; + +import org.jsoup.parser.Parser; + +import java.util.Objects; + +import okhttp3.HttpUrl; + +public class PostImage { + public enum Type { + STATIC, // static images, uses CustomScaleImageView + GIF, // GIF images, uses GifImageView + MOVIE, // movies/audio, uses PlayerView from Exoplayer + IFRAME, // some oembed stuff + OTHER + } + + public boolean hidden; + + public final String serverFilename; + public final HttpUrl thumbnailUrl; + public final HttpUrl spoilerThumbnailUrl; + public final HttpUrl imageUrl; + public final String filename; + public final String extension; + public final int imageWidth; + public final int imageHeight; + private final boolean spoiler; + public final boolean isInlined; + public long size; + @Nullable + public final String fileHash; + public final boolean deleted; + + public final Type type; + + private PostImage(Builder builder) { + this.serverFilename = builder.serverFilename; + this.thumbnailUrl = builder.thumbnailUrl; + this.spoilerThumbnailUrl = builder.spoilerThumbnailUrl; + this.imageUrl = builder.imageUrl; + this.filename = builder.filename; + this.extension = builder.extension; + this.imageWidth = builder.imageWidth; + this.imageHeight = builder.imageHeight; + this.spoiler = builder.spoiler && !builder.deleted; + this.isInlined = builder.isInlined; + this.size = builder.size; + this.fileHash = builder.fileHash; + this.deleted = builder.deleted; + hidden = ChanSettings.hideImages.get() && !deleted; + + switch (extension) { + case "gif": + type = GIF; + break; + case "webm": + case "mp4": + case "mp3": + case "m4a": + case "ogg": + case "flac": + case "wav": + type = MOVIE; + break; + case "pdf": + case "swf": + type = OTHER; + break; + case "iframe": + type = IFRAME; + break; + default: + type = STATIC; + break; + } + } + + public HttpUrl getThumbnailUrl() { + if (!spoiler()) { + return thumbnailUrl; + } else { + if (!hidden) { + return spoilerThumbnailUrl; + } else { + return HIDE_THUMB_URL; + } + } + } + + public HttpUrl getSearchUrl() { + return type == MOVIE ? thumbnailUrl : imageUrl; + } + + public boolean spoiler() { + return spoiler || hidden; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PostImage image = (PostImage) o; + return imageUrl.equals(image.imageUrl); + } + + @Override + public int hashCode() { + return Objects.hash(imageUrl); + } + + public static final class Builder { + private String serverFilename; + private HttpUrl thumbnailUrl; + private HttpUrl spoilerThumbnailUrl; + private HttpUrl imageUrl; + private String filename; + private String extension; + private int imageWidth; + private int imageHeight; + private boolean spoiler; + private boolean isInlined = false; + private long size; + @Nullable + private String fileHash; + private boolean deleted; + + public Builder() { + } + + /** + * @param serverFilename The filename stored on the server; for 4chan it is a UNIX timestamp + */ + public Builder serverFilename(String serverFilename) { + this.serverFilename = serverFilename; + return this; + } + + public Builder thumbnailUrl(HttpUrl thumbnailUrl) { + this.thumbnailUrl = thumbnailUrl; + return this; + } + + public Builder spoilerThumbnailUrl(HttpUrl spoilerThumbnailUrl) { + this.spoilerThumbnailUrl = spoilerThumbnailUrl; + return this; + } + + public Builder imageUrl(@NonNull HttpUrl imageUrl) { + if (imageUrl == null) { + throw new NullPointerException("imageUrl must not be null!"); + } + + this.imageUrl = HttpUrl.get(imageUrl.toString()).newBuilder().scheme("https").build(); + return this; + } + + public boolean hasImageUrl() { + return imageUrl != null; + } + + /** + * @param filename The filename of the file that was actually uploaded, not the one assigned by the server + */ + public Builder filename(String filename) { + this.filename = Parser.unescapeEntities(filename, false); + return this; + } + + /** + * @param extension The extension for the image, must not have a period prepended to it + */ + public Builder extension(String extension) { + this.extension = extension; + return this; + } + + public Builder imageWidth(int imageWidth) { + this.imageWidth = imageWidth; + return this; + } + + public Builder imageHeight(int imageHeight) { + this.imageHeight = imageHeight; + return this; + } + + public Builder spoiler(boolean spoiler) { + this.spoiler = spoiler; + return this; + } + + public Builder isInlined() { + this.isInlined = true; + return this; + } + + public Builder size(long size) { + this.size = size; + return this; + } + + public Builder fileHash(String fileHash, boolean encoded) { + if (!TextUtils.isEmpty(fileHash)) { + if (encoded) { + this.fileHash = StringUtils.decodeBase64(fileHash); + } else { + this.fileHash = fileHash; + } + } + + return this; + } + + public Builder deleted(boolean deleted) { + this.deleted = deleted; + return this; + } + + public PostImage build() { + if (ChanSettings.removeImageSpoilers.get()) { + spoiler = false; + } + + if (imageUrl == null) throw new NullPointerException("imageUrl must not be null!"); + + if (deleted) { + this.thumbnailUrl = DELETED_IMAGE_THUMB_URL; + this.spoilerThumbnailUrl = DELETED_IMAGE_THUMB_URL; + this.imageUrl = DELETED_IMAGE_THUMB_URL; + this.serverFilename = "file_deleted"; + this.filename = "file_deleted"; + this.extension = "png"; + this.imageWidth = 128; + this.imageHeight = 128; + this.spoiler = false; + this.size = 3248; + this.fileHash = StringUtils.decodeBase64("uQZbJn+xehoTadCv4/Jnpg=="); + } + + return new PostImage(this); + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedAppSettings.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedAppSettings.java new file mode 100644 index 0000000000..0a927e710b --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedAppSettings.java @@ -0,0 +1,90 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.export; + +import android.text.TextUtils; + +import androidx.annotation.NonNull; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class ExportedAppSettings { + @SerializedName("app_settings_version") + private final int version; + @SerializedName("exported_sites") + private final List exportedSites; + //there aren't any exported pins here because the pins are stored inside each exported site + //there also aren't any exported loadables because they are inside the exported pins + @SerializedName("exported_boards") + private final List exportedBoards; + @SerializedName("exported_filters") + private final List exportedFilters; + @SerializedName("exported_post_hides") + private final List exportedPostHides; + @SerializedName("exported_settings") + private final String settings; + + public ExportedAppSettings( + int version, + List exportedSites, + List exportedBoards, + List exportedFilters, + List exportedPostHides, + @NonNull String settings + ) { + this.version = version; + this.exportedSites = exportedSites; + this.exportedBoards = exportedBoards; + this.exportedFilters = exportedFilters; + this.exportedPostHides = exportedPostHides; + this.settings = settings; + } + + /** + * Sites and boards are important we can't export almost nothing else without them + * (probably only settings) + */ + public boolean isEmpty() { + return exportedSites.isEmpty() && exportedBoards.isEmpty() && TextUtils.isEmpty(settings); + } + + public List getExportedSites() { + return exportedSites; + } + + public List getExportedBoards() { + return exportedBoards; + } + + public List getExportedFilters() { + return exportedFilters; + } + + public List getExportedPostHides() { + return exportedPostHides; + } + + public int getVersion() { + return version; + } + + public String getSettings() { + return settings; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedBoard.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedBoard.java new file mode 100644 index 0000000000..5c2105e135 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedBoard.java @@ -0,0 +1,253 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.export; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.gson.annotations.SerializedName; + +import java.util.HashMap; + +public class ExportedBoard { + @SerializedName("site_id") + private final int siteId; + @SerializedName("saved") + private final boolean saved; + @SerializedName("order") + private final int order; + @SerializedName("name") + @Nullable + private String name; + @SerializedName("code") + @Nullable + private final String code; + @SerializedName("work_safe") + private final boolean workSafe; + @SerializedName("per_page") + private final int perPage; + @SerializedName("pages") + private final int pages; + @SerializedName("max_file_size") + private final int maxFileSize; + @SerializedName("max_webm_size") + private final int maxWebmSize; + @SerializedName("max_comment_chars") + private final int maxCommentChars; + @SerializedName("bump_limit") + private final int bumpLimit; + @SerializedName("image_limit") + private final int imageLimit; + @SerializedName("cooldown_threads") + private final int cooldownThreads; + @SerializedName("cooldown_replies") + private final int cooldownReplies; + @SerializedName("cooldown_images") + private final int cooldownImages; + @SerializedName("spoilers") + private final boolean spoilers; + @SerializedName("custom_spoilers") + private final int customSpoilers; + @SerializedName("user_ids") + private final boolean userIds; + @SerializedName("code_tags") + private final boolean codeTags; + @SerializedName("preupload_captcha") + private final boolean preuploadCaptcha; + @SerializedName("country_flags") + private final boolean countryFlags; + @SerializedName("board_flags") + private HashMap boardFlags; + @SerializedName("math_tags") + private final boolean mathTags; + @SerializedName("description") + @Nullable + private final String description; + @SerializedName("archive") + private final boolean archive; + + public ExportedBoard( + int siteId, + boolean saved, + int order, + @NonNull String name, + @NonNull String code, + boolean workSafe, + int perPage, + int pages, + int maxFileSize, + int maxWebmSize, + int maxCommentChars, + int bumpLimit, + int imageLimit, + int cooldownThreads, + int cooldownReplies, + int cooldownImages, + boolean spoilers, + int customSpoilers, + boolean userIds, + boolean codeTags, + boolean preuploadCaptcha, + boolean countryFlags, + @NonNull HashMap boardFlags, + boolean mathTags, + @NonNull String description, + boolean archive + ) { + this.siteId = siteId; + this.saved = saved; + this.order = order; + this.name = name; + this.code = code; + this.workSafe = workSafe; + this.perPage = perPage; + this.pages = pages; + this.maxFileSize = maxFileSize; + this.maxWebmSize = maxWebmSize; + this.maxCommentChars = maxCommentChars; + this.bumpLimit = bumpLimit; + this.imageLimit = imageLimit; + this.cooldownThreads = cooldownThreads; + this.cooldownReplies = cooldownReplies; + this.cooldownImages = cooldownImages; + this.spoilers = spoilers; + this.customSpoilers = customSpoilers; + this.userIds = userIds; + this.codeTags = codeTags; + this.preuploadCaptcha = preuploadCaptcha; + this.countryFlags = countryFlags; + this.boardFlags = boardFlags; + this.mathTags = mathTags; + this.description = description; + this.archive = archive; + } + + public int getSiteId() { + return siteId; + } + + public boolean isSaved() { + return saved; + } + + public int getOrder() { + return order; + } + + @Nullable + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Nullable + public String getCode() { + return code; + } + + public boolean isWorkSafe() { + return workSafe; + } + + public int getPerPage() { + return perPage; + } + + public int getPages() { + return pages; + } + + public int getMaxFileSize() { + return maxFileSize; + } + + public int getMaxWebmSize() { + return maxWebmSize; + } + + public int getMaxCommentChars() { + return maxCommentChars; + } + + public int getBumpLimit() { + return bumpLimit; + } + + public int getImageLimit() { + return imageLimit; + } + + public int getCooldownThreads() { + return cooldownThreads; + } + + public int getCooldownReplies() { + return cooldownReplies; + } + + public int getCooldownImages() { + return cooldownImages; + } + + public boolean isSpoilers() { + return spoilers; + } + + public int getCustomSpoilers() { + return customSpoilers; + } + + public boolean isUserIds() { + return userIds; + } + + public boolean isCodeTags() { + return codeTags; + } + + public boolean isPreuploadCaptcha() { + return preuploadCaptcha; + } + + public boolean isCountryFlags() { + return countryFlags; + } + + public HashMap getBoardFlags() { + return boardFlags; + } + + public void setBoardFlags(@NonNull HashMap hashMap) { + this.boardFlags = hashMap; + } + + public boolean isMathTags() { + return mathTags; + } + + @Nullable + public String getDescription() { + return description; + } + + public boolean isArchive() { + return archive; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedFilter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedFilter.java new file mode 100644 index 0000000000..4e316ebae8 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedFilter.java @@ -0,0 +1,155 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.export; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.gson.annotations.SerializedName; + +public class ExportedFilter { + @SerializedName("enabled") + private boolean enabled; + @SerializedName("type") + private final int type; + @SerializedName("pattern") + @Nullable + private final String pattern; + @SerializedName("negative_pattern") + @Nullable + private String negativePattern; + @SerializedName("all_boards") + private final boolean allBoards; + @SerializedName("boards") + @Nullable + private String boards; + @SerializedName("action") + private final int action; + @SerializedName("color") + private final int color; + @SerializedName("apply_to_replies") + private final boolean applyToReplies; + @SerializedName("order") + private final int order; + @SerializedName("only_on_op") + private final boolean onlyOnOP; + @SerializedName("apply_to_saved") + private final boolean applyToSaved; + @SerializedName("label") + private String label; + + public ExportedFilter( + boolean enabled, + int type, + @NonNull String pattern, + @NonNull String negativePattern, + boolean allBoards, + @NonNull String boards, + int action, + int color, + boolean applyToReplies, + int order, + boolean onlyOnOp, + boolean applyToSaved, + String label + ) { + this.enabled = enabled; + this.type = type; + this.pattern = pattern; + this.negativePattern = negativePattern; + this.allBoards = allBoards; + this.boards = boards; + this.action = action; + this.color = color; + this.applyToReplies = applyToReplies; + this.order = order; + this.onlyOnOP = onlyOnOp; + this.applyToSaved = applyToSaved; + this.label = label; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public int getType() { + return type; + } + + @Nullable + public String getPattern() { + return pattern; + } + + @Nullable + public String getNegativePattern() { + return negativePattern; + } + + public void setNegativePattern(String negativePattern) { + this.negativePattern = negativePattern == null ? "" : negativePattern; + } + + public boolean isAllBoards() { + return allBoards; + } + + @Nullable + public String getBoards() { + return boards; + } + + public void setBoards(@NonNull String boards) { + this.boards = boards; + } + + public int getAction() { + return action; + } + + public int getColor() { + return color; + } + + public boolean getApplyToReplies() { + return applyToReplies; + } + + public int getOrder() { + return order; + } + + public boolean getOnlyOnOP() { + return onlyOnOP; + } + + public boolean getApplyToSaved() { + return applyToSaved; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedLoadable.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedLoadable.java new file mode 100644 index 0000000000..3051b54fc0 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedLoadable.java @@ -0,0 +1,141 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.export; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.gson.annotations.SerializedName; + +import java.util.Locale; + +import okhttp3.HttpUrl; + +public class ExportedLoadable { + @SerializedName("board_code") + private final String boardCode; + @SerializedName("loadable_id") + private final long loadableId; + @SerializedName("last_loaded") + private final int lastLoaded; + @SerializedName("last_viewed") + private final int lastViewed; + @SerializedName("list_view_index") + private final int listViewIndex; + @SerializedName("list_view_top") + private final int listViewTop; + @SerializedName("mode") + private final int mode; + @SerializedName("no") + private final int no; + @SerializedName("site_id") + private final int siteId; + @SerializedName("title") + @Nullable + private final String title; + @SerializedName("thumbnail_url") + @Nullable + private final String thumbnailUrl; + + public ExportedLoadable( + String boardCode, + long loadableId, + int lastLoaded, + int lastViewed, + int listViewIndex, + int listViewTop, + int mode, + int no, + int siteId, + @NonNull String title, + String thumbnailUrl + ) { + this.boardCode = boardCode; + this.loadableId = loadableId; + this.lastLoaded = lastLoaded; + this.lastViewed = lastViewed; + this.listViewIndex = listViewIndex; + this.listViewTop = listViewTop; + this.mode = mode; + this.no = no; + this.siteId = siteId; + this.title = title; + this.thumbnailUrl = thumbnailUrl; + } + + public String getBoardCode() { + return boardCode; + } + + public long getLoadableId() { + return loadableId; + } + + public int getLastLoaded() { + return lastLoaded; + } + + public int getLastViewed() { + return lastViewed; + } + + public int getListViewIndex() { + return listViewIndex; + } + + public int getListViewTop() { + return listViewTop; + } + + public int getMode() { + return mode; + } + + public int getNo() { + return no; + } + + public int getSiteId() { + return siteId; + } + + @Nullable + public String getTitle() { + return title; + } + + @Nullable + public HttpUrl getThumbnailUrl() { + return thumbnailUrl == null ? null : HttpUrl.get(thumbnailUrl); + } + + @NonNull + @Override + public String toString() { + return String.format( + Locale.ENGLISH, + "boardCode = %s, loadableId = %d, no = %d, mode= %d, siteId = %d, title = %s, thumbnailUrl = %s", + boardCode, + loadableId, + no, + mode, + siteId, + title, + thumbnailUrl + ); + } +} \ No newline at end of file diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedPin.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedPin.java new file mode 100644 index 0000000000..b4d859779d --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedPin.java @@ -0,0 +1,116 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.export; + +import androidx.annotation.NonNull; + +import com.google.gson.annotations.SerializedName; + +public class ExportedPin { + @SerializedName("archived") + private final boolean archived; + @SerializedName("pin_id") + private final int pinId; + @SerializedName("is_error") + private final boolean isError; + @SerializedName("loadable_id") + private final int loadableId; + @SerializedName("order") + private final int order; + @SerializedName("quote_last_count") + private final int quoteLastCount; + @SerializedName("quote_new_count") + private final int quoteNewCount; + @SerializedName("watch_last_count") + private final int watchLastCount; + @SerializedName("watch_new_count") + private final int watchNewCount; + @SerializedName("watching") + private final boolean watching; + @SerializedName("exported_loadable") + private final ExportedLoadable exportedLoadable; + + public ExportedPin( + boolean archived, + int pinId, + boolean isError, + int loadableId, + int order, + int quoteLastCount, + int quoteNewCount, + int watchLastCount, + int watchNewCount, + boolean watching, + @NonNull ExportedLoadable exportedLoadable + ) { + this.archived = archived; + this.pinId = pinId; + this.isError = isError; + this.loadableId = loadableId; + this.order = order; + this.quoteLastCount = quoteLastCount; + this.quoteNewCount = quoteNewCount; + this.watchLastCount = watchLastCount; + this.watchNewCount = watchNewCount; + this.watching = watching; + this.exportedLoadable = exportedLoadable; + } + + public boolean isArchived() { + return archived; + } + + public int getPinId() { + return pinId; + } + + public boolean isError() { + return isError; + } + + public int getLoadableId() { + return loadableId; + } + + public int getOrder() { + return order; + } + + public int getQuoteLastCount() { + return quoteLastCount; + } + + public int getQuoteNewCount() { + return quoteNewCount; + } + + public int getWatchLastCount() { + return watchLastCount; + } + + public int getWatchNewCount() { + return watchNewCount; + } + + public boolean isWatching() { + return watching; + } + + public ExportedLoadable getExportedLoadable() { + return exportedLoadable; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedPostHide.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedPostHide.java new file mode 100644 index 0000000000..50ecdd1de3 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedPostHide.java @@ -0,0 +1,87 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.export; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.gson.annotations.SerializedName; + +public class ExportedPostHide { + @SerializedName("site") + private final int site; + @SerializedName("board") + @Nullable + private final String board; + @SerializedName("no") + private final int no; + @SerializedName("wholeThread") + private final boolean wholeThread; + @SerializedName("hide") + private final boolean hide; + @SerializedName("hideRepliesToThisPost") + private final boolean hideRepliesToThisPost; + @SerializedName("threadNo") + private final int threadNo; + + public ExportedPostHide( + int site, + @NonNull String board, + int no, + boolean wholeThread, + boolean hide, + boolean hideRepliesToThisPost, + int threadNo + ) { + this.site = site; + this.board = board; + this.no = no; + this.wholeThread = wholeThread; + this.hide = hide; + this.hideRepliesToThisPost = hideRepliesToThisPost; + this.threadNo = threadNo; + } + + public int getSite() { + return site; + } + + @Nullable + public String getBoard() { + return board; + } + + public int getNo() { + return no; + } + + public boolean getWholeThread() { + return wholeThread; + } + + public boolean getHide() { + return hide; + } + + public boolean getHideRepliesToThisPost() { + return hideRepliesToThisPost; + } + + public int getThreadNo() { + return threadNo; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedSite.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedSite.java new file mode 100644 index 0000000000..97cb029382 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/export/ExportedSite.java @@ -0,0 +1,91 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.export; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class ExportedSite { + @SerializedName("site_id") + private final int siteId; + @SerializedName("configuration") + @Nullable + private final String configuration; + @SerializedName("order") + private final int order; + @SerializedName("user_settings") + @NonNull + private String userSettings; + @SerializedName("exported_pins") + private final List exportedPins; + @SerializedName("class_id") + private int classId; + + public ExportedSite( + int siteId, + @NonNull String configuration, + int order, + @NonNull String userSettings, + int classId, + List exportedPins + ) { + this.siteId = siteId; + this.configuration = configuration; + this.order = order; + this.userSettings = userSettings; + this.classId = classId; + this.exportedPins = exportedPins; + } + + public int getSiteId() { + return siteId; + } + + @Nullable + public String getConfiguration() { + return configuration; + } + + public int getOrder() { + return order; + } + + @NonNull + public String getUserSettings() { + return userSettings; + } + + public int getClassId() { + return classId; + } + + public void setClassId(int classId) { + this.classId = classId; + } + + public void setUserSettings(String settingsJson) { + userSettings = settingsJson; + } + + public List getExportedPins() { + return exportedPins; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Board.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Board.java new file mode 100644 index 0000000000..73e26cdfca --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Board.java @@ -0,0 +1,356 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.orm; + +import android.text.TextUtils; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.core.site.DummySite; +import com.github.adamantcheese.chan.core.site.Site; +import com.j256.ormlite.field.DataType; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +import org.jsoup.parser.Parser; + +import java.util.HashMap; +import java.util.Objects; + +/** + * A board is something that can be browsed, it is unique by it's site and code. + */ +@DatabaseTable(tableName = "board") +public class Board + implements Cloneable { + @DatabaseField(generatedId = true) + public int id; + + @DatabaseField(columnName = "site", index = true, indexName = "board_site_idx") + public int siteId; + + /** + * The site this board belongs to, loaded with {@link #siteId} in the database manager. + */ + public transient Site site; + + /** + * The board appears in the dropdown. + */ + @DatabaseField(index = true, indexName = "board_saved_idx") + public boolean saved = false; + + /** + * Order of the board in the dropdown, user-set. + */ + @DatabaseField + public int order; + + @DatabaseField(columnName = "key") // named key for legacy support + public String name; + + // named value for legacy support + @DatabaseField(columnName = "value", index = true, indexName = "board_value_idx") + // TODO(sec) force filter this to ascii & numbers. + public String code; + + @DatabaseField + public boolean workSafe = false; + + @DatabaseField + public int perPage = 15; + + @DatabaseField + public int pages = 10; + + @DatabaseField + public int maxFileSize = -1; + + @DatabaseField + public int maxWebmSize = -1; + + @DatabaseField + public int maxCommentChars = -1; + + @DatabaseField + public int bumpLimit = -1; + + @DatabaseField + public int imageLimit = -1; + + @DatabaseField + public int cooldownThreads = 0; + + @DatabaseField + public int cooldownReplies = 0; + + @DatabaseField + public int cooldownImages = 0; + + @DatabaseField + public boolean spoilers = false; + + @DatabaseField + public int customSpoilers = -1; + + @DatabaseField + public boolean userIds = false; + + @DatabaseField + public boolean codeTags = false; + + @DatabaseField + public boolean preuploadCaptcha = false; + + @DatabaseField + public boolean countryFlags = false; + + // flag code, flag name + @DatabaseField(dataType = DataType.SERIALIZABLE, canBeNull = false) + public HashMap boardFlags = new HashMap<>(); + + @DatabaseField + public boolean mathTags = false; + + @DatabaseField + public boolean forcedAnon = false; + + @DatabaseField + @NonNull + public String description = ""; + + @DatabaseField + public boolean archive = false; + + /** + * Empty constructor, generally used for parsing a board from somewhere else and adding in fields manually + */ + public Board() { + } + + public Board( + int siteId, + boolean saved, + int order, + String name, + String code, + boolean workSafe, + int perPage, + int pages, + int maxFileSize, + int maxWebmSize, + int maxCommentChars, + int bumpLimit, + int imageLimit, + int cooldownThreads, + int cooldownReplies, + int cooldownImages, + boolean spoilers, + int customSpoilers, + boolean userIds, + boolean codeTags, + boolean preuploadCaptcha, + boolean countryFlags, + HashMap boardFlags, + boolean mathTags, + @NonNull String description, + boolean archive + ) { + this.siteId = siteId; + this.saved = saved; + this.order = order; + this.name = name; + this.code = code; + this.workSafe = workSafe; + this.perPage = perPage; + this.pages = pages; + this.maxFileSize = maxFileSize; + this.maxWebmSize = maxWebmSize; + this.maxCommentChars = maxCommentChars; + this.bumpLimit = bumpLimit; + this.imageLimit = imageLimit; + this.cooldownThreads = cooldownThreads; + this.cooldownReplies = cooldownReplies; + this.cooldownImages = cooldownImages; + this.spoilers = spoilers; + this.customSpoilers = customSpoilers; + this.userIds = userIds; + this.codeTags = codeTags; + this.preuploadCaptcha = preuploadCaptcha; + this.countryFlags = countryFlags; + this.boardFlags = boardFlags; + this.mathTags = mathTags; + this.description = description; + this.archive = archive; + } + + public static Board fromSiteNameCode(Site site, String name, String code) { + Board board = new Board(); + board.siteId = site.id(); + board.site = site; + board.name = name; + board.code = code; + return board; + } + + private static Board dummyBoard; + + public static Board getDummyBoard() { + if (dummyBoard != null) return dummyBoard; + Board board = new Board(); + board.name = "Test Board"; + board.site = new DummySite(); + board.code = "test"; + dummyBoard = board; + return board; + } + + public String getFormattedName() { + StringBuilder b = new StringBuilder().append('/').append(code).append('/'); + if (!TextUtils.isEmpty(name)) { + b.append(" \u2013 ").append(name); + } + return b.toString(); + } + + public void setDescription(@NonNull String description) { + this.description = Parser.unescapeEntities(description, false); + } + + public boolean hasMissingInfo() { + return TextUtils.isEmpty(name) || TextUtils.isEmpty(code) || perPage < 0 || pages < 0; + } + + public boolean siteCodeEquals(Board other) { + return code.equals(other.code) && other.siteId == siteId; + } + + /** + * Updates the board with data from {@code o}.
+ * {@link #id}, {@link #saved}, {@link #order} are skipped because these are user-set. + * + * @param o other board to update from. + */ + public void updateExcludingUserFields(Board o) { + siteId = o.siteId; + site = o.site; + name = o.name; + code = o.code; + workSafe = o.workSafe; + perPage = o.perPage; + pages = o.pages; + maxFileSize = o.maxFileSize; + maxWebmSize = o.maxWebmSize; + maxCommentChars = o.maxCommentChars; + bumpLimit = o.bumpLimit; + imageLimit = o.imageLimit; + cooldownThreads = o.cooldownThreads; + cooldownReplies = o.cooldownReplies; + cooldownImages = o.cooldownImages; + spoilers = o.spoilers; + customSpoilers = o.customSpoilers; + userIds = o.userIds; + codeTags = o.codeTags; + preuploadCaptcha = o.preuploadCaptcha; + countryFlags = o.countryFlags; + boardFlags = o.boardFlags; + mathTags = o.mathTags; + description = o.description; + archive = o.archive; + } + + public String boardUniqueId() { + String code = this.code.replace(":", "").replace(",", ""); + return siteId + ":" + code; + } + + public boolean matchesUniqueId(String uniqueId) { + if (!uniqueId.contains(":")) { + return siteId == 0 && code.equals(uniqueId); + } else { + String[] splitted = uniqueId.split(":"); + if (splitted.length != 2) { + return false; + } + + try { + return Integer.parseInt(splitted[0]) == siteId && splitted[1].equals(code); + } catch (NumberFormatException ignored) { + return false; + } + } + } + + /** + * Clones this board. + * + * @return copy of this board. + */ + @NonNull + @SuppressWarnings("MethodDoesntCallSuperMethod") + public Board clone() { + Board b = new Board(); + b.id = id; + b.siteId = siteId; + b.site = site; + b.name = name; + b.code = code; + b.saved = saved; + b.order = order; + b.workSafe = workSafe; + b.perPage = perPage; + b.pages = pages; + b.maxFileSize = maxFileSize; + b.maxWebmSize = maxWebmSize; + b.maxCommentChars = maxCommentChars; + b.bumpLimit = bumpLimit; + b.imageLimit = imageLimit; + b.cooldownThreads = cooldownThreads; + b.cooldownReplies = cooldownReplies; + b.cooldownImages = cooldownImages; + b.spoilers = spoilers; + b.customSpoilers = customSpoilers; + b.userIds = userIds; + b.codeTags = codeTags; + b.preuploadCaptcha = preuploadCaptcha; + b.countryFlags = countryFlags; + b.boardFlags = boardFlags; + b.mathTags = mathTags; + b.description = description; + b.archive = archive; + return b; + } + + public boolean equals(Object board) { + if (board == null) return false; + if (board.getClass() != Board.class) return false; + Board b = (Board) board; + return siteId == b.siteId + && code.equals(b.code) + && bumpLimit == b.bumpLimit + && imageLimit == b.imageLimit + && description.equals(b.description) + && cooldownImages == b.cooldownImages + && boardFlags.equals(b.boardFlags) + && countryFlags == b.countryFlags; + } + + @Override + public int hashCode() { + return Objects.hash(siteId, code, bumpLimit, imageLimit, cooldownImages); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Filter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Filter.java new file mode 100644 index 0000000000..60b3a71857 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Filter.java @@ -0,0 +1,128 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.orm; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.core.manager.FilterType; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +@DatabaseTable(tableName = "filter") +public class Filter + implements Cloneable { + + @DatabaseField(generatedId = true) + public int id; + + @DatabaseField(canBeNull = false) + public boolean enabled = true; + + // Flags of FilterTypes that this filter is applied to + @DatabaseField(canBeNull = false) + public int type = FilterType.SUBJECT.flag | FilterType.COMMENT.flag; + + @DatabaseField(canBeNull = false) + public String pattern; + + @DatabaseField(columnName = "negative_pattern", canBeNull = false) + public String negativePattern = ""; + + @DatabaseField(canBeNull = false) + public boolean allBoards = true; + + @DatabaseField(canBeNull = false) + public String boards = ""; + + @DatabaseField(canBeNull = false) + public int action; + + @DatabaseField(canBeNull = false) + public int color; + + @DatabaseField(columnName = "apply_to_replies", canBeNull = false) + public boolean applyToReplies; + + @DatabaseField(canBeNull = false) + public int order = -1; + + @DatabaseField(canBeNull = false) + public boolean onlyOnOP; + + @DatabaseField(canBeNull = false) + public boolean applyToSaved; + + @DatabaseField(canBeNull = false) + public String label = ""; + + public boolean hasFilter(FilterType filterType) { + return (type & filterType.flag) != 0; + } + + public Filter() { + } + + public Filter( + boolean enabled, + int type, + String pattern, + String negativePattern, + boolean allBoards, + String boards, + int action, + int color, + boolean applyToReplies, + int order, + boolean onlyOnOP, + boolean applyToSaved, + String label + ) { + this.enabled = enabled; + this.type = type; + this.pattern = pattern; + this.negativePattern = negativePattern; + this.allBoards = allBoards; + this.boards = boards; + this.action = action; + this.color = color; + this.applyToReplies = applyToReplies; + this.order = order; + this.onlyOnOP = onlyOnOP; + this.applyToSaved = applyToSaved; + this.label = label; + } + + @SuppressWarnings("MethodDoesntCallSuperMethod") + @NonNull + public Filter clone() { + return new Filter( + enabled, + type, + pattern, + negativePattern, + allBoards, + boards, + action, + color, + applyToReplies, + order, + onlyOnOP, + applyToSaved, + label + ); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Loadable.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Loadable.java new file mode 100644 index 0000000000..42cc257b4c --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Loadable.java @@ -0,0 +1,330 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.orm; + +import static com.github.adamantcheese.chan.Chan.instance; +import static com.github.adamantcheese.chan.core.model.orm.Loadable.Mode.CATALOG; +import static com.github.adamantcheese.chan.core.model.orm.Loadable.Mode.INVALID; +import static com.github.adamantcheese.chan.core.model.orm.Loadable.Mode.THREAD; + +import android.os.Parcel; +import android.text.TextUtils; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.core.database.DatabaseLoadableManager; +import com.github.adamantcheese.chan.core.database.HttpUrlType; +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.core.site.DummySite; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.core.site.http.Reply; +import com.j256.ormlite.field.DataType; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +import java.util.*; + +import okhttp3.HttpUrl; + +/** + * Something that can be loaded, like a board or thread. + * Used instead of {@link Board} or {@link Post} because of the unique things a loadable can do and save in the database:
+ * - It keeps track of the list index where the user last viewed.
+ * - It keeps track of what post was last seen and loaded.
+ * - It keeps track of the title the toolbar should show, generated from the first post (so after loading).
+ *

Obtain Loadables through {@link com.github.adamantcheese.chan.core.database.DatabaseLoadableManager} to make sure everyone + * references the same loadable and that the loadable is properly saved in the database. + */ +@DatabaseTable(tableName = "loadable") +public class Loadable + implements Cloneable { + @DatabaseField(generatedId = true) + public int id; + + @DatabaseField(columnName = "site") + public int siteId; + + public transient Site site; + + /** + * Mode for the loadable. Either thread or catalog. + */ + @DatabaseField + public int mode = INVALID; + + @DatabaseField(columnName = "board", canBeNull = false, index = true) + public String boardCode = ""; + + public Board board; + + /** + * Thread number. + */ + @DatabaseField(index = true) + public int no = -1; + + @DatabaseField(canBeNull = false) + public String title = ""; + + @DatabaseField + public int listViewIndex; + + @DatabaseField + public int listViewTop; + + @DatabaseField + public int lastViewed = -1; + + @DatabaseField + public int lastLoaded = -1; + + @DatabaseField(canBeNull = false, dataType = DataType.DATE_STRING, format = "yyyy-MM-dd HH:mm:ss", defaultValue = "1970-01-01 00:00:01") + public Date lastLoadDate; + + @DatabaseField(persisterClass = HttpUrlType.class) + public HttpUrl thumbnailUrl; + + public int markedNo = -1; + + // a reply draft that is specific to this loadable and is not stored in the database + public final Reply draft = new Reply(); + + /** + * Constructs an empty loadable. The mode is INVALID. + */ + protected Loadable() { + if (ChanSettings.showHistory.get()) { + lastLoadDate = GregorianCalendar.getInstance().getTime(); + } + } + + @SuppressWarnings("SameParameterValue") + private Loadable(@SuppressWarnings("unused") boolean forDummyLoadable) {} + + public static Loadable importLoadable( + int siteId, + int mode, + String boardCode, + int no, + String title, + int listViewIndex, + int listViewTop, + int lastViewed, + int lastLoaded + ) { + Loadable loadable = new Loadable(); + loadable.siteId = siteId; + loadable.mode = mode; + loadable.boardCode = boardCode; + loadable.no = no; + loadable.title = title; + loadable.listViewIndex = listViewIndex; + loadable.listViewTop = listViewTop; + loadable.lastViewed = lastViewed; + loadable.lastLoaded = lastLoaded; + + return loadable; + } + + private static Loadable dummyLoadable; + + public static Loadable dummyLoadable() { + if (dummyLoadable != null) return dummyLoadable; + dummyLoadable = new Loadable(true); + dummyLoadable.site = new DummySite(); + dummyLoadable.board = Board.getDummyBoard(); + return dummyLoadable; + } + + public static Loadable forCatalog(Board board) { + Loadable loadable = new Loadable(); + loadable.siteId = board.siteId; + loadable.site = board.site; + loadable.board = board; + loadable.boardCode = board.code; + loadable.mode = CATALOG; + return loadable; + } + + public static Loadable forThread(Board board, int no, String title) { + return forThread(board, no, title, true); + } + + /** + * DON'T USE THIS METHOD WITH addToDatabase SET TO false UNLESS YOU KNOW WHAT YOU'RE DOING. + */ + public static Loadable forThread(Board board, int no, String title, boolean addToDatabase) { + Loadable loadable = new Loadable(); + loadable.siteId = board.siteId; + loadable.site = board.site; + loadable.mode = THREAD; + loadable.board = board; + loadable.boardCode = board.code; + loadable.no = no; + loadable.title = title; + if (!addToDatabase) return loadable; + return instance(DatabaseLoadableManager.class).get(loadable); + } + + @SuppressWarnings("EqualsWhichDoesntCheckParameterClass") + @Override + public boolean equals(Object object) { + return equalsInternal(object, true); + } + + public boolean equalsNoId(Object object) { + return equalsInternal(object, false); + } + + /** + * Compares the mode, site, board and no. + */ + public boolean equalsInternal(Object object, boolean checkId) { + if (!(object instanceof Loadable)) return false; + + Loadable other = (Loadable) object; + + if (siteId != other.siteId) { + return false; + } + + if (mode == other.mode) { + switch (mode) { + case INVALID: + return true; + case CATALOG: + return boardCode.equals(other.boardCode); + case THREAD: + return boardCode.equals(other.boardCode) && no == other.no && (!checkId || id == other.id); + default: + throw new IllegalArgumentException(); + } + } else { + return false; + } + } + + @Override + public int hashCode() { + return Objects.hash(mode, + mode != INVALID ? boardCode : 0, + mode == THREAD ? no : 0, + siteId, + mode == THREAD ? id : 0 + ); + } + + @Override + @NonNull + public String toString() { + return "Loadable{mode=" + + mode + + ", board='" + + boardCode + + '\'' + + ", no=" + + no + + '\'' + + ", listViewIndex=" + + listViewIndex + + ", listViewTop=" + + listViewTop + + ", lastViewed=" + + lastViewed + + ", lastLoaded=" + + lastLoaded + + ", markedNo=" + + markedNo + + '}'; + } + + public boolean isThreadMode() { + return mode == THREAD; + } + + public boolean isCatalogMode() { + return mode == CATALOG; + } + + /** + * @return a string that really condenses the loadable contents for user-facing display + */ + public String toShortestString() { + return TextUtils.isEmpty(title) ? String.format(Locale.ENGLISH, "/%s/%d", boardCode, no) : title; + } + + public String desktopUrl() { + return site.resolvable().desktopUrl(this, no); + } + + public String desktopUrl(Post post) { + return site.resolvable().desktopUrl(this, post.no); + } + + public static Loadable readFromParcel(Parcel parcel) { + Loadable loadable = new Loadable(); + loadable.siteId = parcel.readInt(); + loadable.mode = parcel.readInt(); + loadable.boardCode = parcel.readString(); + loadable.no = parcel.readInt(); + loadable.title = parcel.readString(); + loadable.listViewIndex = parcel.readInt(); + loadable.listViewTop = parcel.readInt(); + String s = parcel.readString(); + loadable.thumbnailUrl = TextUtils.isEmpty(s) ? null : HttpUrl.get(s); + return loadable; + } + + public void writeToParcel(Parcel parcel) { + // TODO(multi-site) + parcel.writeInt(siteId); + parcel.writeInt(mode); + // TODO(multi-site) + parcel.writeString(boardCode); + parcel.writeInt(no); + parcel.writeString(title); + parcel.writeInt(listViewIndex); + parcel.writeInt(listViewTop); + parcel.writeString(thumbnailUrl == null ? "" : thumbnailUrl.toString()); + } + + @SuppressWarnings("MethodDoesntCallSuperMethod") + public Loadable clone() { + Loadable copy = new Loadable(); + copy.id = id; + copy.siteId = siteId; + copy.site = site; + copy.mode = mode; + if (board != null) copy.board = board.clone(); + copy.boardCode = boardCode; + copy.no = no; + copy.title = title; + copy.listViewIndex = listViewIndex; + copy.listViewTop = listViewTop; + copy.lastViewed = lastViewed; + copy.lastLoaded = lastLoaded; + + return copy; + } + + public static class Mode { + public static final int INVALID = -1; + public static final int THREAD = 0; + public static final int CATALOG = 1; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Pin.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Pin.java new file mode 100644 index 0000000000..d1b74941bf --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/Pin.java @@ -0,0 +1,175 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.orm; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.features.theme.Highlightable; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +import java.util.Objects; + +@DatabaseTable(tableName = "pin") +public class Pin + extends Highlightable + implements Comparable, Cloneable { + @DatabaseField(generatedId = true) + public int id; + + @DatabaseField(canBeNull = false, foreign = true) + public Loadable loadable; + + // Is this pin being watched by the WatchManager? + // Note that a pin's watched or not-watched state is different than a pin existing at all + @DatabaseField + public boolean watching = true; + + @DatabaseField + public int watchLastCount = -1; + + @DatabaseField + public int watchNewCount = -1; + + @DatabaseField + public int quoteLastCount = -1; + + @DatabaseField + public int quoteNewCount = -1; + + @DatabaseField + public boolean isError = false; + + @DatabaseField + public int order = -1; + + @DatabaseField + public boolean archived = false; + + //local field for keeping track of if the thread is a sticky; don't put this in the database + public boolean isSticky = false; + + public Pin() { + } + + public Pin(Loadable loadable) { + this.loadable = loadable; + } + + public Pin( + @NonNull Loadable loadable, + boolean watching, + int watchLastCount, + int watchNewCount, + int quoteLastCount, + int quoteNewCount, + boolean isError, + int order, + boolean archived + ) { + this.loadable = loadable; + this.watching = watching; + this.watchLastCount = watchLastCount; + this.watchNewCount = watchNewCount; + this.quoteLastCount = quoteLastCount; + this.quoteNewCount = quoteNewCount; + this.isError = isError; + this.order = order; + this.archived = archived; + } + + public int getNewPostCount() { + if (watchLastCount < 0 || watchNewCount < 0) { + return 0; + } else { + return Math.max(0, watchNewCount - watchLastCount); + } + } + + public int getNewQuoteCount() { + if (quoteNewCount < 0 || quoteLastCount < 0) { + return 0; + } else { + return Math.max(0, quoteNewCount - quoteLastCount); + } + } + + @SuppressWarnings("MethodDoesntCallSuperMethod") + @Override + public Pin clone() { + Pin copy = new Pin(); + copy.id = id; + copy.loadable = loadable; + copy.watching = watching; + copy.watchLastCount = watchLastCount; + copy.watchNewCount = watchNewCount; + copy.quoteLastCount = quoteLastCount; + copy.quoteNewCount = quoteNewCount; + copy.isError = isError; + copy.order = order; + copy.archived = archived; + return copy; + } + + @Override + public int compareTo(@NonNull Pin o) { + return this.order - o.order; + } + + @Override + public int hashCode() { + return Objects.hash(loadable.id, id); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj == null) { + return false; + } + + if (this == obj) { + return true; + } + + if (obj.getClass() != this.getClass()) { + return false; + } + + Pin other = (Pin) obj; + + return this.id == other.id && this.loadable.id == other.loadable.id; + } + + @NonNull + @Override + public String toString() { + return "[id = " + + id + + ", isError = " + + isError + + ", isArchived = " + + archived + + ", watching = " + + watching + + ", (active) = " + + (!isError && !archived) + + ", no = " + + loadable.no + + "]"; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/PostHide.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/PostHide.java new file mode 100644 index 0000000000..4068ef6287 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/PostHide.java @@ -0,0 +1,121 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.orm; + +import com.github.adamantcheese.chan.core.model.Post; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +import java.util.Objects; + +@DatabaseTable(tableName = "posthide") +public class PostHide { + + @DatabaseField(generatedId = true) + public int id; + + @DatabaseField + public int site; + + @DatabaseField + public String board; + + /** + * The post number that is being hidden + */ + @DatabaseField + public int no; + + /** + * Indicates whether we should hide the whole thread or just a single post (when hiding OP post) + */ + @DatabaseField(columnName = "whole_thread") + public boolean wholeThread; + + /** + * Indicates whether we should just hide (grey out) or completely remove this post + */ + @DatabaseField + public boolean hide; + + /** + * Indicates whether we also should hide/remove all the current and future replies to this post + */ + @DatabaseField(columnName = "hide_replies_to_this_post") + public boolean hideRepliesToThisPost; + + /** + * Thread where this post is hidden. It's being used to show the user all posts the posts that he + * has hid/removed in a thread (so he can unhide some of them) + */ + @DatabaseField(columnName = "thread_no") + public int threadNo; + + private PostHide() { + } + + public PostHide(int siteId, String boardCode, int no) { + site = siteId; + board = boardCode; + this.no = no; + } + + public static PostHide hidePost(Post post, Boolean wholeThread, Boolean hide, Boolean hideRepliesToThisPost) { + PostHide postHide = new PostHide(); + postHide.board = post.board.code; + postHide.no = post.no; + postHide.threadNo = post.opId; + postHide.site = post.board.siteId; + postHide.wholeThread = wholeThread; + postHide.hide = hide; + postHide.hideRepliesToThisPost = hideRepliesToThisPost; + return postHide; + } + + public static PostHide unhidePost(Post post) { + PostHide postHide = new PostHide(); + + postHide.board = post.board.code; + postHide.no = post.no; + postHide.site = post.board.siteId; + + return postHide; + } + + public static PostHide unhidePost(int siteId, String boardCode, int postNo) { + PostHide postHide = new PostHide(); + + postHide.site = siteId; + postHide.board = boardCode; + postHide.no = postNo; + + return postHide; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PostHide hide = (PostHide) o; + return site == hide.site && no == hide.no && board.equals(hide.board); + } + + @Override + public int hashCode() { + return Objects.hash(site, board, no); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/SavedReply.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/SavedReply.java new file mode 100644 index 0000000000..1c78ae4356 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/SavedReply.java @@ -0,0 +1,68 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.orm; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +import java.util.Objects; + +@DatabaseTable(tableName = "savedreply") +public class SavedReply { + public SavedReply() { + } + + public static SavedReply fromBoardNoPassword(Board board, int no, String password) { + SavedReply savedReply = new SavedReply(); + savedReply.siteId = board.siteId; + savedReply.board = board.code; + savedReply.no = no; + savedReply.password = password; + return savedReply; + } + + @SuppressWarnings("unused") + @DatabaseField(generatedId = true) + private int id; + + @DatabaseField(columnName = "site") + public int siteId; + + @DatabaseField(index = true, canBeNull = false) + public String board; + + @DatabaseField(index = true) + public int no; + + @DatabaseField + public String password = ""; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + SavedReply other = (SavedReply) o; + + return no == other.no && board.equals(other.board) && siteId == other.siteId; + } + + @Override + public int hashCode() { + return Objects.hash(board, no); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/SiteModel.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/SiteModel.java new file mode 100644 index 0000000000..aa8a9313f4 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/SiteModel.java @@ -0,0 +1,63 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.model.orm; + +import com.github.adamantcheese.chan.core.di.AppModule; +import com.github.adamantcheese.chan.core.settings.primitives.JsonSettings; +import com.github.adamantcheese.chan.utils.Logger; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +@DatabaseTable(tableName = "site") +public class SiteModel { + @DatabaseField(generatedId = true, allowGeneratedIdInsert = true) + public int id; + + @DatabaseField + public String configuration; + + @DatabaseField + public String userSettings; + + @DatabaseField + public int order; + + @DatabaseField + public int classID; + + public SiteModel(int id, String configuration, String userSettings, int order, int classID) { + this.id = id; + this.configuration = configuration; + this.userSettings = userSettings; + this.order = order; + this.classID = classID; + } + + public SiteModel() {} + + public void storeUserSettings(JsonSettings userSettings) { + this.userSettings = AppModule.gson.toJson(userSettings); + Logger.vd(this, "userSettings = " + this.userSettings); + } + + public JsonSettings loadConfig() { + JsonSettings settings = AppModule.gson.fromJson(this.userSettings, JsonSettings.class); + Logger.d(this, "Config: " + configuration + ", Settings: " + userSettings); + + return settings; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/DnsSelector.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/DnsSelector.java new file mode 100644 index 0000000000..531dad8cbb --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/DnsSelector.java @@ -0,0 +1,44 @@ +package com.github.adamantcheese.chan.core.net; + +import androidx.annotation.NonNull; + +import java.net.*; +import java.util.ArrayList; +import java.util.List; + +import okhttp3.Dns; + +// This class is a modified copy of https://github.com/yschimke/okurl/blob/b24caf077223cf54e2ab26589839e5ba2205c691/src/main/java/com/baulsupp/oksocial/network/DnsSelector.java + +public class DnsSelector + implements Dns { + public Mode mode; + + public DnsSelector(Mode mode) { + this.mode = mode; + } + + @NonNull + @Override + public List lookup(@NonNull String hostname) + throws UnknownHostException { + List addresses = Dns.SYSTEM.lookup(hostname); + if (mode == Mode.SYSTEM) { + return addresses; + } + + List resultAddresses = new ArrayList<>(); + for (InetAddress address : addresses) { + if (address instanceof Inet4Address) { + resultAddresses.add(address); + } + } + + return resultAddresses; + } + + public enum Mode { + SYSTEM, + IPV4_ONLY + } +} \ No newline at end of file diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/HttpStatusCodesNames.kt b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/HttpStatusCodesNames.kt new file mode 100644 index 0000000000..e64f912896 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/HttpStatusCodesNames.kt @@ -0,0 +1,67 @@ +package com.github.adamantcheese.chan.core.net + +val CODE_MAP_TO_NAME = mapOf( + 100 to "HTTP_CONTINUE", + 101 to "HTTP_SWITCHING_PROTOCOLS", + 102 to "HTTP_PROCESSING", + 103 to "HTTP_EARLY_HINTS", + 200 to "HTTP_OK", + 201 to "HTTP_CREATED", + 202 to "HTTP_ACCEPTED", + 203 to "HTTP_NOT_AUTHORITATIVE", + 204 to "HTTP_NO_CONTENT", + 205 to "HTTP_RESET_CONTENT", + 206 to "HTTP_PARTIAL_CONTENT", + 207 to "HTTP_MULTI_STATUS", + 208 to "HTTP_ALREADY_REPORTED", + 226 to "HTTP_IM_USED", + 300 to "HTTP_MULT_CHOICE", + 301 to "HTTP_MOVED_PERM", + 302 to "HTTP_MOVED_TEMP", + 303 to "HTTP_SEE_OTHER", + 304 to "HTTP_NOT_MODIFIED", + 305 to "HTTP_USE_PROXY", + 307 to "HTTP_TEMP_REDIRECT", + 308 to "HTTP_PERM_REDIRECT", + 400 to "HTTP_BAD_REQUEST", + 401 to "HTTP_UNAUTHORIZED", + 402 to "HTTP_PAYMENT_REQUIRED", + 403 to "HTTP_FORBIDDEN", + 404 to "HTTP_NOT_FOUND", + 405 to "HTTP_BAD_METHOD", + 406 to "HTTP_NOT_ACCEPTABLE", + 407 to "HTTP_PROXY_AUTH", + 408 to "HTTP_CLIENT_TIMEOUT", + 409 to "HTTP_CONFLICT", + 410 to "HTTP_GONE", + 411 to "HTTP_LENGTH_REQUIRED", + 412 to "HTTP_PRECONDITION_FAILED", + 413 to "HTTP_REQUEST_TOO_LONG", + 414 to "HTTP_REQ_TOO_LONG", + 415 to "HTTP_UNSUPPORTED_MEDIA_TYPE", + 416 to "HTTP_REQUESTED_RANGE_NOT_SATISFIABLE", + 417 to "HTTP_EXPECTATION_FAILED", + 421 to "HTTP_MISDIRECTED_REQUEST", + 419 to "HTTP_INSUFFICIENT_SPACE_ON_RESOURCE", + 420 to "HTTP_METHOD_FAILURE", + 422 to "HTTP_UNPROCESSABLE_ENTITY", + 423 to "HTTP_LOCKED", + 424 to "HTTP_FAILED_DEPENDENCY", + 425 to "HTTP_TOO_EARLY", + 426 to "HTTP_UPGRADE_REQUIRED", + 428 to "HTTP_PRECONDITION_REQUIRED", + 429 to "HTTP_TOO_MANY_REQUESTS", + 431 to "HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE", + 451 to "HTTP_UNAVAILABLE_FOR_LEGAL_REASONS", + 500 to "HTTP_INTERNAL_SERVER_ERROR", + 501 to "HTTP_NOT_IMPLEMENTED", + 502 to "HTTP_BAD_GATEWAY", + 503 to "HTTP_UNAVAILABLE", + 504 to "HTTP_GATEWAY_TIMEOUT", + 505 to "HTTP_HTTP_VERSION_NOT_SUPPORTED", + 506 to "HTTP_VARIANT_ALSO_NEGOTIATES", + 507 to "HTTP_INSUFFICIENT_STORAGE", + 508 to "HTTP_LOOP_DETECTED", + 510 to "HTTP_NOT_EXTENDED", + 511 to "HTTP_NETWORK_AUTHENTICATION_REQUIRED", +) \ No newline at end of file diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/ImageLoadable.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/ImageLoadable.java new file mode 100644 index 0000000000..64668059a0 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/ImageLoadable.java @@ -0,0 +1,225 @@ +package com.github.adamantcheese.chan.core.net; + +import android.graphics.Bitmap; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.DecelerateInterpolator; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.core.model.PostImage; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.NoFailResponseResult; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.ResponseResult; +import com.github.adamantcheese.chan.core.repository.BitmapRepository; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.utils.BackgroundUtils; +import com.github.adamantcheese.chan.utils.Logger; + +import kotlin.Triple; +import okhttp3.*; + +/** + * A simple image loader that loads an image into an image view + */ +public interface ImageLoadable { + /** + * Set an arbitrary URL for the provided image view. Also adds a callback for when a load finishes. + * Note that all arguments are null-safe, but you won't get anything if you don't have a URL to set or an imageview + * to load into. + * + * @param url The image URL to set. + * @param imageView The image view to load into. + * @param callback An optional callback to be called after a load finishes. + * You can use the wrapper method below instead of putting null here. + */ + default void loadUrl( + @Nullable HttpUrl url, @NonNull ImageView imageView, @Nullable ResponseResult callback + ) { + if (url == null) { + cancelLoad(imageView); + return; + } + + if (getImageLoadableData() == null) { + setImageLoadableData(new ImageLoadableData()); + } + ImageLoadableData data = getImageLoadableData(); + + Call currentCall = data.getImageCall(); + // in progress check, in case of a re-bind without recycling + if (currentCall != null) { + if (currentCall.request().url().equals(url)) { + return; + } else { + cancelLoad(imageView); // cancel before set again + } + } + + // completed load check + if (url.equals(data.getLoadedUrl())) return; + + // request the image + Triple networkInfo = + NetUtils.makeBitmapRequest(url, new NetUtilsClasses.BitmapResult() { + @Override + public void onBitmapFailure(@NonNull HttpUrl source, Exception e) { + data.setImageCall(null); + data.setRunnable(null); + // for a chained load, this means that the last successful load will remain + if (data.getLoadedUrl() != null) return; + data.setLoadedUrl(null); // fail, nullify the last url + + // if this has an error code associated with it, draw it up all fancy-like + if (e instanceof NetUtilsClasses.HttpCodeException) { + if (((NetUtilsClasses.HttpCodeException) e).isServerErrorNotFound()) { + // for this case, never try and load again and treat it as though it loaded fully + data.setLoadedUrl(source); + } + } else { + Logger.d(this, "Failed to load image for " + source, e); + } + imageView.setImageBitmap(BitmapRepository.getHttpExceptionBitmap(imageView.getContext(), e)); + + if (callback != null) { + callback.onFailure(e); + } + } + + @Override + public void onBitmapSuccess(@NonNull HttpUrl source, @NonNull Bitmap bitmap, boolean fromCache) { + // success, save the last url as good + // for a chained load, this means that the last successful load will remain + data.setImageCall(null); + data.setRunnable(null); + data.setLoadedUrl(source); + + // if not from cache, fade the view in; if set, fade out first + if (!fromCache) { + if (imageView.getDrawable() != null) { + imageView + .animate() + .setInterpolator(new AccelerateInterpolator(2f)) + .alpha(0f) + .withEndAction(() -> { + imageView.setImageBitmap(bitmap); + imageView + .animate() + .alpha(1f) + .setInterpolator(new DecelerateInterpolator(2f)); + }); + } else { + imageView.setImageBitmap(bitmap); + imageView.animate().alpha(1f).setInterpolator(new DecelerateInterpolator(2f)); + } + } else { + imageView.setImageBitmap(bitmap); + imageView.setAlpha(1f); + } + + if (callback != null) { + callback.onSuccess(null); + } + } + }, 0, 0, -1, null, true, true); + data.setImageCall(networkInfo == null ? null : networkInfo.getFirst()); + data.setRunnable(networkInfo == null ? null : networkInfo.getThird()); + } + + /** + * Set an arbitrary URL for the provided image view. + * + * @param url The image URL to set. + * @param imageView The image view to load into. + */ + default void loadUrl(HttpUrl url, ImageView imageView) { + loadUrl(url, imageView, null); + } + + /** + * Set a post image for the provided image view. Takes care of getting the proper thumbnail or full-size image. + * + * @param postImage The post image to set. + * @param imageView The image view to load into. + */ + default void loadPostImage(PostImage postImage, ImageView imageView) { + HttpUrl loadUrl = postImage.getThumbnailUrl(); + HttpUrl secondUrl = postImage.spoiler() ? postImage.getThumbnailUrl() : postImage.imageUrl; + if (ChanSettings.shouldUseFullSizeImage(postImage) && NetUtils.isCached(secondUrl)) { + loadUrl = secondUrl; + } + + HttpUrl firstLoadUrl = loadUrl; + loadUrl(firstLoadUrl, imageView, (NoFailResponseResult) result -> { + if (ChanSettings.shouldUseFullSizeImage(postImage) && !firstLoadUrl.equals(secondUrl)) { + loadUrl(secondUrl, imageView); + } + }); + } + + /** + * Call this whenever your view is going away, like being recycled in a RecyclerView. + * + * @param imageView The imageview that would otherwise be loaded. + */ + default void cancelLoad(ImageView imageView) { + imageView.animate().cancel(); + imageView.setImageBitmap(null); + imageView.setAlpha(0f); + if (getImageLoadableData() == null) { + setImageLoadableData(new ImageLoadableData()); + } + getImageLoadableData().cancel(); + } + + ImageLoadableData getImageLoadableData(); + + void setImageLoadableData(ImageLoadableData data); + + /** + * This class contains information related to loading images, easier than having every class mange this data + */ + class ImageLoadableData { + private HttpUrl loadedUrl = null; + private Call call = null; + private Runnable runnable = null; + + public ImageLoadableData() { + } + + public void cancel() { + setLoadedUrl(null); + Call currentCall = getImageCall(); + if (currentCall != null) { + currentCall.cancel(); + } + setImageCall(null); + BackgroundUtils.cancel(runnable); + setRunnable(null); + } + + public HttpUrl getLoadedUrl() { + return loadedUrl; + } + + public void setLoadedUrl(HttpUrl loadedUrl) { + this.loadedUrl = loadedUrl; + } + + public Call getImageCall() { + return call; + } + + public void setImageCall(Call call) { + this.call = call; + } + + public Runnable getRunnable() { + return runnable; + } + + public void setRunnable(Runnable runnable) { + this.runnable = runnable; + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/NetUtils.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/NetUtils.java new file mode 100644 index 0000000000..04be81dfbc --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/NetUtils.java @@ -0,0 +1,693 @@ +package com.github.adamantcheese.chan.core.net; + +import static com.github.adamantcheese.chan.core.di.AppModule.getCacheDir; +import static com.github.adamantcheese.chan.core.net.DnsSelector.Mode.IPV4_ONLY; +import static com.github.adamantcheese.chan.core.net.DnsSelector.Mode.SYSTEM; +import static com.github.adamantcheese.chan.core.net.NetUtilsClasses.*; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getAppContext; +import static java.lang.Runtime.getRuntime; +import static okhttp3.Protocol.HTTP_1_1; +import static okhttp3.Protocol.HTTP_2; + +import android.graphics.Bitmap; +import android.util.JsonReader; +import android.webkit.WebSettings; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.collection.LruCache; +import androidx.core.util.Pair; + +import com.franmontiel.persistentcookiejar.PersistentCookieJar; +import com.franmontiel.persistentcookiejar.cache.SetCookieCache; +import com.franmontiel.persistentcookiejar.persistence.SharedPrefsCookiePersistor; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.core.site.http.HttpCall; +import com.github.adamantcheese.chan.utils.*; +import com.google.common.io.Files; + +import org.jetbrains.annotations.NotNull; +import org.jsoup.nodes.Document; + +import java.io.File; +import java.io.IOException; +import java.util.*; +import java.util.concurrent.TimeUnit; + +import kotlin.Triple; +import kotlin.io.FilesKt; +import okhttp3.*; +import okhttp3.internal.http2.StreamResetException; +import okhttp3.logging.HttpLoggingInterceptor; + +public class NetUtils { + public static final int MB = 1024 * 1024; + // The OkHttpClient installed cache, used for all requests + private static final Cache OK_HTTP_CACHE = new Cache(new File(getCacheDir(), "okhttp"), + ChanSettings.autoLoadThreadImages.get() + ? (long) ChanSettings.fileCacheSize.get() * 2 * MB + : (long) ChanSettings.fileCacheSize.get() * MB + ); + + public static final OkHttpClientWithUtils applicationClient = new OkHttpClientWithUtils(new OkHttpClient.Builder() + .cache(OK_HTTP_CACHE) + .protocols(ChanSettings.okHttpAllowHttp2.get() + ? Arrays.asList(HTTP_2, HTTP_1_1) + : Collections.singletonList(HTTP_1_1)) + .dns(new DnsSelector(ChanSettings.okHttpAllowIpv6.get() ? SYSTEM : IPV4_ONLY)) + .proxy(ChanSettings.proxy) + .cookieJar(new WebviewSyncCookieManager(new PersistentCookieJar(new SetCookieCache(), + new SharedPrefsCookiePersistor(getAppContext()) + ))) + .addNetworkInterceptor(chain -> { + // interceptor to add the User-Agent for all requests + Request request = chain + .request() + .newBuilder() + .header("User-Agent", WebSettings.getDefaultUserAgent(AndroidUtils.getAppContext())) + .build(); + return chain.proceed(request); + })); + + /** + * @param processor The cookie processor to use for this interceptor + * @return an interceptor that will deal with cookies when attached to a client (use newBuilder) + */ + public static Interceptor createCookieParsingInterceptor(NetUtilsClasses.CookieProcessor processor) { + return chain -> { + Response r = chain.proceed(chain.request()); + List cookieList = Cookie.parseAll(chain.request().url(), r.headers()); + List newList = new ArrayList<>(); + for (Cookie c : cookieList) { + newList.addAll(processor.process(c)); + } + Headers.Builder h = new Headers.Builder().addAll(r.headers()); + h.removeAll("Set-Cookie"); + for (Cookie c : newList) { + h.add("Set-Cookie", c.toString()); + } + NetUtils.applicationClient.cookieJar().saveFromResponse(r.request().url(), newList); + return r.newBuilder().headers(h.build()).build(); + }; + } + + public static void clearAllCookies(HttpUrl url) { + ((WebviewSyncCookieManager) NetUtils.applicationClient.cookieJar()).clearCookiesForUrl(url, null); + } + + public static void clearSpecificCookies(HttpUrl url, List cookieNames) { + ((WebviewSyncCookieManager) NetUtils.applicationClient.cookieJar()).clearCookiesForUrl(url, cookieNames); + } + + public static void loadWebviewCookies(HttpUrl url) { + ((WebviewSyncCookieManager) NetUtils.applicationClient.cookieJar()).loadWebviewCookiesIntoJar(url); + } + + public static Cookie changeCookieDomain(Cookie c, String newDomain) { + Cookie.Builder builder = c.newBuilder(); + if (c.hostOnly()) { + builder.hostOnlyDomain(newDomain); + } else { + builder.domain(newDomain); + } + return builder.build(); + } + + // max 1/4 the maximum Dalvik runtime size + // by default, the max heap size of stock android is 512MiB; keep that in mind if you change things here + // url, width, height request -> bitmap + private static final LruCache, Bitmap> imageCache = + new LruCache, Bitmap>((int) (getRuntime().maxMemory() / 4)) { + @Override + protected int sizeOf(@NonNull Triple key, Bitmap value) { + return value.getByteCount(); + } + }; + + public static void clearImageCache() { + imageCache.evictAll(); + } + + public static Call makeHttpCall(HttpCall httpCall) { + return makeHttpCall(httpCall, true); + } + + public static Call makeHttpCall(HttpCall httpCall, boolean enqueue) { + return makeHttpCall(httpCall, Collections.emptyList(), enqueue); + } + + public static Call makeHttpCall(HttpCall httpCall, List extraInterceptors) { + return makeHttpCall(httpCall, extraInterceptors, null, true); + } + + public static Call makeHttpCall(HttpCall httpCall, List extraInterceptors, boolean enqueue) { + return makeHttpCall(httpCall, extraInterceptors, null, enqueue); + } + + public static Call makeHttpCall( + HttpCall httpCall, + List extraInterceptors, + @Nullable ProgressRequestBody.ProgressRequestListener progressListener, + boolean enqueue + ) { + Request.Builder requestBuilder = new Request.Builder(); + httpCall.setup(requestBuilder, progressListener); + OkHttpClient client = applicationClient; // default to this client + if (ChanSettings.verboseLogs.get()) { + HttpLoggingInterceptor debuggingInterceptor = new HttpLoggingInterceptor(); + debuggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS); + client = applicationClient.newBuilder().addNetworkInterceptor(debuggingInterceptor).build(); + } + for (Interceptor i : extraInterceptors) { + client = client.newBuilder().addInterceptor(i).build(); + } + Call call = client.newCall(requestBuilder.build()); + if (enqueue) { + call.enqueue(httpCall); + } + return call; + } + + /** + * Simple wrapper to check if a url has been cached by OkHttp + * + * @param url The url to check + * @return true if the url has a cached response + */ + @SuppressWarnings("KotlinInternalInJava") + public static boolean isCached(HttpUrl url) { + return OK_HTTP_CACHE.getCache$okhttp().getLruEntries$okhttp().containsKey(Cache.key(url)); + } + + /** + * Get a raw, cached response. + * Files will be deleted after an hour, when the application goes into the background! + * + * @param url the url to download as a file + * @param filename the name of the cached file you want to make + * @param fileExt the extension for the cached file + * @param result the result callback + * @param progressListener an optional progress listener + * @return An enqueued file call. WILL RUN RESULT ON MAIN THREAD! + */ + public static Call makeFileRequest( + @NonNull final HttpUrl url, + @NonNull final String filename, + @NonNull final String fileExt, + @NonNull final ResponseResult result, + @Nullable final ProgressResponseBody.ProgressListener progressListener + ) { + return makeRequest(applicationClient.getHttpRedirectClient(), + url, + new NetUtilsClasses.TempFileConverter(filename, fileExt), + new MainThreadResponseResult<>(result), + progressListener, + ONE_DAY_CACHE, + 0 + ); + } + + /** + * Request a bitmap without resizing. + * + * @param url The request URL. If null, null will be returned. + * @param result The callback for this call. + * @return An enqueued bitmap call. WILL RUN RESULT ON MAIN THREAD! + */ + public static Call makeBitmapRequest( + final HttpUrl url, @NonNull final BitmapResult result + ) { + return makeBitmapRequest(url, result, 0, 0, null); + } + + /** + * Request a bitmap without resizing, with timeout + * + * @param url The request URL. If null, null will be returned. + * @param result The callback for this call. + * @param timeoutMs Optional timeout value, in milliseconds (-1 for no timeout) + * @return An enqueued bitmap call. WILL RUN RESULT ON MAIN THREAD! + */ + public static Call makeBitmapRequest( + final HttpUrl url, @NonNull final BitmapResult result, final int timeoutMs + ) { + Triple ret = makeBitmapRequest(url, result, 0, 0, timeoutMs, null, true, true); + return ret == null ? null : ret.getFirst(); + } + + /** + * Request a bitmap with resizing. + * + * @param url The request URL. If null, null will be returned. + * @param result The callback for this call. + * @param width The explicit width of the result + * @param height The explicit height of the result + * @return An enqueued bitmap call. WILL RUN RESULT ON MAIN THREAD! + */ + public static Call makeBitmapRequest( + final HttpUrl url, + @NonNull final BitmapResult result, + final int width, + final int height, + @Nullable ProgressResponseBody.ProgressListener progressListener + ) { + Triple ret = + makeBitmapRequest(url, result, width, height, -1, progressListener, true, true); + return ret == null ? null : ret.getFirst(); + } + + /** + * Request a bitmap with resizing. + * + * @param url The request URL. If null, null will be returned. + * @param result The callback for this call. If null, null will be returned. + * @param width The requested width of the result + * @param height The requested height of the result + * @param timeoutMs Optional timeout value, in milliseconds (-1 for no timeout) + * @param enqueue Should this be enqueued or not + * @param mainThread Should this result be run on the main thread or not (most wrappers do) + * @return An enqueued bitmap call. + */ + public static Triple makeBitmapRequest( + final HttpUrl url, + final BitmapResult result, + final int width, + final int height, + final int timeoutMs, + @Nullable final ProgressResponseBody.ProgressListener progressListener, + boolean enqueue, + boolean mainThread + ) { + BitmapRunnable runnable = new BitmapRunnable(url, null, null, result); + if (url == null || result == null) return null; + Bitmap cachedBitmap = imageCache.get(new Triple<>(url, width, height)); + if (cachedBitmap != null) { + runnable.setBitmap(cachedBitmap); + runnable.setFromCache(true); + runOrEnqueueOnMainThread(runnable, mainThread); + return null; + } + OkHttpClient client = applicationClient.getHttpRedirectClient(); + if (timeoutMs != -1) { + client = client.newBuilder().callTimeout(timeoutMs, TimeUnit.MILLISECONDS).build(); + } + client = client.newBuilder().addNetworkInterceptor(chain -> { + Response originalResponse = chain.proceed(chain.request()); + return originalResponse + .newBuilder() + .body(new ProgressResponseBody(originalResponse, progressListener)) + .build(); + }).build(); + Call call = client.newCall(new Request.Builder() + .url(url) + .addHeader("Referer", url.toString()) + .cacheControl(ONE_YEAR_CACHE) + .build()); + Callback callback = new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + if (!isCancelledException(e)) { + Logger.w("NetUtils", "Error loading bitmap from " + url); + runnable.setException(e); + runOrEnqueueOnMainThread(runnable, mainThread); + } + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) { + try (ResponseBody body = response.body()) { + if (body == null) { + runnable.setException(new NullPointerException("No response data")); + runOrEnqueueOnMainThread(runnable, mainThread); + return; + } + + if (!response.isSuccessful()) { + runnable.setException(new HttpCodeException(response)); + runOrEnqueueOnMainThread(runnable, mainThread); + return; + } + + if ("webm".equalsIgnoreCase(Files.getFileExtension(url.toString()))) { + File tempFile = new File(getCacheDir(), UUID.randomUUID().toString()); + if (!tempFile.createNewFile()) { + tempFile.delete(); + runnable.setException(new IOException("Failed to create temp file for decode.")); + runOrEnqueueOnMainThread(runnable, mainThread); + } + FilesKt.writeBytes(tempFile, body.bytes()); + Bitmap b = BitmapUtils.decodeFilePreviewImage(tempFile, 0, 0, mainThread ? null : bitmap -> { + //noinspection ResultOfMethodCallIgnored + tempFile.delete(); + checkBitmap(runnable, url, width, height, bitmap, false); + }, false); + if (b != null) { + //noinspection ResultOfMethodCallIgnored + tempFile.delete(); + checkBitmap(runnable, url, width, height, b, true); + } + } else { + ExceptionCatchingInputStream wrappedStream = + new ExceptionCatchingInputStream(body.byteStream()); + Bitmap b = BitmapUtils.decode(wrappedStream, width, height); + if (wrappedStream.getException() != null) { + runnable.setException(wrappedStream.getException()); + runOrEnqueueOnMainThread(runnable, mainThread); + return; + } + checkBitmap(runnable, url, width, height, b, mainThread); + } + } catch (Exception e) { + runnable.setException(e); + runOrEnqueueOnMainThread(runnable, mainThread); + } catch (OutOfMemoryError e) { + getRuntime().gc(); + runnable.setException(new IOException(e)); + runOrEnqueueOnMainThread(runnable, mainThread); + } + } + }; + if (enqueue) { + call.enqueue(callback); + } + return new Triple<>(call, callback, runnable); + } + + private static void checkBitmap( + BitmapRunnable runnable, + HttpUrl url, + int requestWidth, + int requestedHeight, + Bitmap result, + boolean mainThread + ) { + if (result == null) { + runnable.setException(new NullPointerException("Bitmap returned is null")); + } else { + result.prepareToDraw(); + imageCache.put(new Triple<>(url, requestWidth, requestedHeight), result); + runnable.setBitmap(result); + } + runOrEnqueueOnMainThread(runnable, mainThread); + } + + private static void runOrEnqueueOnMainThread(BitmapRunnable runnable, boolean mainThread) { + if (mainThread) { + BackgroundUtils.runOnMainThread(runnable); + } else { + runnable.run(); + } + } + + private static class BitmapRunnable + implements Runnable { + private final HttpUrl url; + private Exception exception; + private Bitmap bitmap; + private final BitmapResult result; + private boolean fromCache = false; + + public BitmapRunnable( + final HttpUrl url, Exception exception, Bitmap bitmap, BitmapResult result + ) { + this.url = url; + this.exception = exception; + this.bitmap = bitmap; + this.result = result; + } + + public Exception getException() { + return exception; + } + + public void setException(Exception e) { + this.exception = e; + } + + public Bitmap getBitmap() { + return bitmap; + } + + public void setBitmap(Bitmap bitmap) { + this.bitmap = bitmap; + } + + public void setFromCache(boolean fromCache) { + this.fromCache = fromCache; + } + + @Override + public void run() { + if (exception != null) { + if (isCancelledException(exception)) return; + result.onBitmapFailure(url, exception); + } else if (bitmap != null) { + result.onBitmapSuccess(url, bitmap, fromCache); + } + } + } + + /** + * Request some JSON, no timeout. + * + * @param url The request URL. + * @param result The callback for this call. + * @param cacheControl Set cache parameters for this request + * @param Your type + * @return An enqueued JSON call. WILL RUN RESULT ON BACKGROUND OKHTTP THREAD! + */ + public static Call makeJsonRequest( + @NonNull final HttpUrl url, + @NonNull final ResponseResult result, + @NonNull final Converter reader, + @Nullable final CacheControl cacheControl + ) { + return makeJsonRequest(url, result, reader, cacheControl, null); + } + + /** + * Request some JSON, with a timeout. Optional progress listener. + * + * @param url The request URL. + * @param result The callback for this call. + * @param cacheControl Set cache parameters for this request + * @param progressListener Optional progress listener. + * @param timeoutMs Optional timeout in milliseconds + * @param Your type + * @return An enqueued JSON call. WILL RUN RESULT ON BACKGROUND OKHTTP THREAD! + */ + public static Call makeJsonRequest( + @NonNull final HttpUrl url, + @NonNull final ResponseResult result, + @NonNull final Converter reader, + @Nullable final CacheControl cacheControl, + @Nullable final ProgressResponseBody.ProgressListener progressListener, + int timeoutMs + ) { + return makeRequest(applicationClient, + url, + new ChainConverter<>(reader).chain(JSON_CONVERTER), + result, + progressListener, + cacheControl, + timeoutMs + ); + } + + /** + * Request some JSON, no timeout. Optional progress listener. + * + * @param url The request URL. + * @param result The callback for this call + * @param cacheControl Set cache parameters for this request + * @param progressListener Optional progress listener. + * @param Your type + * @return An enqueued JSON call. WILL RUN RESULT ON BACKGROUND OKHTTP THREAD! + */ + public static Call makeJsonRequest( + @NonNull final HttpUrl url, + @NonNull final ResponseResult result, + @NonNull final Converter reader, + @Nullable final CacheControl cacheControl, + @Nullable final ProgressResponseBody.ProgressListener progressListener + ) { + return makeJsonRequest(url, result, reader, cacheControl, progressListener, 0); + } + + /** + * Request some HTML, no timeout. + * + * @param url The request URL. + * @param result The callback for this call. + * @param reader The reader that will process the response into your result + * @param cacheControl Set cache parameters for this request + * @param Your type + * @return An enqueued HTML call. WILL RUN RESULT ON BACKGROUND OKHTTP THREAD! + */ + @SuppressWarnings("UnusedReturnValue") + public static Call makeHTMLRequest( + @NonNull final HttpUrl url, + @NonNull final ResponseResult result, + @NonNull final Converter reader, + @Nullable final CacheControl cacheControl + ) { + return makeRequest(applicationClient, + url, + new ChainConverter<>(reader).chain(HTML_CONVERTER), + result, + null, + cacheControl, + 0 + ); + } + + /** + * Request something, no timeout. + * + * @param url The request URL. + * @param converter The converter for the response. + * @param result The callback for this call. + * @param cacheControl Set cache parameters for this request + * @param Your result type, the something you're requesting + * @return An enequeued call. WILL RUN RESULT ON BACKGROUND OKHTTP THREAD! + */ + public static Call makeRequest( + @NonNull final OkHttpClient client, + @NonNull final HttpUrl url, + @NonNull final Converter converter, + @NonNull final ResponseResult result, + @Nullable final ProgressResponseBody.ProgressListener progressListener, + @Nullable final CacheControl cacheControl + ) { + return makeRequest(client, url, converter, result, progressListener, cacheControl, 0); + } + + /** + * Request something, timeout. + * + * @param url The request URL. + * @param converter The converter for the response. + * @param result The callback for this call. + * @param cacheControl Set cache parameters for this request + * @param timeoutMs Optional timeout in milliseconds + * @param Your result type, the something you're requesting + * @return An enequeued call. WILL RUN RESULT ON BACKGROUND OKHTTP THREAD! + */ + private static Call makeRequest( + @NonNull final OkHttpClient client, + @NonNull final HttpUrl url, + @NonNull final Converter converter, + @NonNull final ResponseResult result, + @Nullable final ProgressResponseBody.ProgressListener progressListener, + @Nullable final CacheControl cacheControl, + int timeoutMs + ) { + return makeCall(client, url, converter, result, progressListener, cacheControl, null, timeoutMs, true).first; + } + + /** + * This is the mothership of this class mostly, it does all the heavy lifting for you once provided the proper stuff + * Generally don't use this! Use one of the wrapper methods instead. This class ensures that all responses are properly + * closed. + * + * @param url The request URL. + * @param converter The converter that will convert the response into a form the reader can process. + * @param result The callback for this call. + * @param progressListener An optional progress listener for this response + * @param Your result type + * @param cacheControl Set cache parameters for this request + * @param extraHeaders Extra headers for this request + * @param timeoutMs Optional timeout in milliseconds + * @param enqueue whether or not to enqueue this call as a step + * @return An optionally enqueued call along with the callback it is associated with. WILL RUN RESULT ON BACKGROUND OKHTTP THREAD! + */ + public static Pair makeCall( + @NonNull OkHttpClient client, + @NonNull final HttpUrl url, + @NonNull final Converter converter, + @NonNull final ResponseResult result, + @Nullable final ProgressResponseBody.ProgressListener progressListener, + @Nullable final CacheControl cacheControl, + @Nullable final Headers extraHeaders, + int timeoutMs, + boolean enqueue + ) { + OkHttpClient.Builder clientBuilder = client.newBuilder(); + clientBuilder.callTimeout(timeoutMs, TimeUnit.MILLISECONDS); + clientBuilder.addNetworkInterceptor(chain -> { + Response originalResponse = chain.proceed(chain.request()); + return originalResponse + .newBuilder() + .body(new ProgressResponseBody(originalResponse, progressListener)) + .build(); + }); + Request.Builder builder = new Request.Builder().url(url).addHeader("Referer", url.toString()); + if (cacheControl != null) { + builder.cacheControl(cacheControl); + } + if (extraHeaders != null) { + builder.headers(extraHeaders); + } + Call call = clientBuilder.build().newCall(builder.build()); + Callback callback = new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + result.onFailure(e); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) { + try (Response r = response) { + if (!response.isSuccessful()) { + result.onFailure(new HttpCodeException(response)); + return; + } + + T read = converter.convert(r); + if (read == null) throw new NullPointerException("Convert returned null!"); + result.onSuccess(read); + } catch (Exception e) { + result.onFailure(e); + } + } + }; + if (enqueue) { + call.enqueue(callback); + } + return new Pair<>(call, callback); + } + + /** + * @param url The request URL. + * @param result The callback for this call. + * @return An enqueued headers call. WILL RUN RESULT ON BACKGROUND THREAD! + */ + public static Call makeHeadersRequest( + @NonNull final HttpUrl url, @NonNull final ResponseResult result + ) { + Call call = + applicationClient.newCall(new Request.Builder().url(url).head().cacheControl(ONE_YEAR_CACHE).build()); + BackgroundThreadResponseResult wrap = new BackgroundThreadResponseResult<>(result); + call.enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + wrap.onFailure(e); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) { + if (!response.isSuccessful()) { + wrap.onFailure(new HttpCodeException(response)); + } else { + wrap.onSuccess(response.headers()); + } + response.close(); + } + }); + return call; + } + + public static boolean isCancelledException(Exception e) { + return e instanceof StreamResetException || "Canceled".equals(e.getMessage()); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/NetUtilsClasses.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/NetUtilsClasses.java new file mode 100644 index 0000000000..dffaac28ca --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/NetUtilsClasses.java @@ -0,0 +1,436 @@ +package com.github.adamantcheese.chan.core.net; + +import static com.github.adamantcheese.chan.core.di.AppModule.getCacheDir; +import static java.nio.charset.StandardCharsets.UTF_8; +import static java.util.concurrent.TimeUnit.DAYS; + +import android.content.Context; +import android.graphics.Bitmap; +import android.util.JsonReader; + +import androidx.annotation.NonNull; +import androidx.core.util.Pair; + +import com.github.adamantcheese.chan.core.net.interceptors.CloudflareInterceptor; +import com.github.adamantcheese.chan.core.net.interceptors.HttpEquivRefreshInterceptor; +import com.github.adamantcheese.chan.utils.BackgroundUtils; +import com.github.adamantcheese.chan.utils.StringUtils; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +import java.io.*; +import java.util.List; + +import kotlin.io.FilesKt; +import okhttp3.*; +import okhttp3.internal.http.HttpStatusCodesKt; +import okio.*; + +/** + * This class contains a listing of a bunch of other classes that are used in various helper methods. + */ +public class NetUtilsClasses { + + /** + * Basically the same as OkHttpClient, but has an extra method for constructing a proxied client for a specific call + */ + public static class OkHttpClientWithUtils + extends OkHttpClient { + + public OkHttpClientWithUtils(Builder builder) { + super(builder); + } + + // This adds an HTTP redirect follower to the base client + public OkHttpClient getHttpRedirectClient() { + return newBuilder().addInterceptor(new HttpEquivRefreshInterceptor()).build(); + } + + public OkHttpClient getCloudflareClient(Context context) { + return newBuilder().addInterceptor(new CloudflareInterceptor(context)).build(); + } + } + + public static final CacheControl NO_CACHE = new CacheControl.Builder().noStore().build(); + public static final CacheControl ONE_DAY_CACHE = + new CacheControl.Builder().maxAge(1, DAYS).maxStale(1, DAYS).build(); + public static final CacheControl ONE_YEAR_CACHE = + new CacheControl.Builder().maxAge(365, DAYS).maxStale(365, DAYS).build(); + + /** + * A wrapper sidestepping an OkHttp callback that only returns what we care about. + * + * @param The type of the result + */ + public interface ResponseResult { + void onFailure(Exception e); + + void onSuccess(T result); + } + + public interface NoFailResponseResult + extends ResponseResult { + @Override + default void onFailure(Exception e) {} + } + + public interface NullResponseResult + extends NoFailResponseResult { + @Override + default void onSuccess(T result) {} + } + + /** + * This class wraps ResponseResult to return it always on the main thread. + * + * @param The type that matches the given ResponseResult + */ + public static class MainThreadResponseResult + implements ResponseResult { + private final ResponseResult responseResult; + + public MainThreadResponseResult(ResponseResult responseResult) { + this.responseResult = responseResult; + } + + @Override + public void onFailure(Exception e) { + BackgroundUtils.runOnMainThread(() -> responseResult.onFailure(e)); + } + + @Override + public void onSuccess(T result) { + BackgroundUtils.runOnMainThread(() -> responseResult.onSuccess(result)); + } + } + + /** + * This class wraps ResponseResult to return it always on a background thread. + * + * @param The type that matches the given ResponseResult + */ + public static class BackgroundThreadResponseResult + implements ResponseResult { + private final ResponseResult responseResult; + + public BackgroundThreadResponseResult(ResponseResult responseResult) { + this.responseResult = responseResult; + } + + @Override + public void onFailure(Exception e) { + BackgroundUtils.runOnBackgroundThread(() -> responseResult.onFailure(e)); + } + + @Override + public void onSuccess(T result) { + BackgroundUtils.runOnBackgroundThread(() -> responseResult.onSuccess(result)); + } + } + + /** + * A response wrapper for Bitmaps + */ + public interface BitmapResult { + void onBitmapFailure(@NonNull HttpUrl source, Exception e); + + void onBitmapSuccess(@NonNull HttpUrl source, @NonNull Bitmap bitmap, boolean fromCache); + } + + /** + * Passes through a bitmap result to a delegate that can be set at a later time. + */ + public static class PassthroughBitmapResult + implements BitmapResult { + protected BitmapResult passthrough; + + /** + * Set a passthrough and return this BitmapResult + * + * @param passthrough The passthrough to set for this result + */ + public BitmapResult setPassthrough(BitmapResult passthrough) { + this.passthrough = passthrough; + return this; + } + + @Override + public void onBitmapFailure(@NonNull HttpUrl source, Exception e) { + passthrough.onBitmapFailure(source, e); + } + + @Override + public void onBitmapSuccess(@NonNull HttpUrl source, @NonNull Bitmap bitmap, boolean fromCache) { + passthrough.onBitmapSuccess(source, bitmap, fromCache); + } + } + + /** + * A passthrough that crops the bitmap to a specified location (useful for sprite maps) + */ + public static class CroppingBitmapResult + extends PassthroughBitmapResult { + + private final Pair originCropCoords; + private final Pair dims; + + public CroppingBitmapResult( + Pair originCropCoords, Pair dims + ) { + this.originCropCoords = originCropCoords; + this.dims = dims; + } + + @Override + public void onBitmapSuccess(@NonNull HttpUrl source, @NonNull Bitmap bitmap, boolean fromCache) { + try { + Bitmap cropped = Bitmap.createBitmap(bitmap, + originCropCoords.first, + originCropCoords.second, + dims.first, + dims.second + ); + passthrough.onBitmapSuccess(source, cropped, fromCache); + } catch (Exception e) { + // any exception pass through the original bitmap + passthrough.onBitmapSuccess(source, bitmap, fromCache); + } + } + } + + /** + * Converts input I into output O + * + * @param the type that will be processed + * @param the returned object's type + */ + public interface Converter { + @Nullable O convert(I input) + throws Exception; + } + + /** + * Converts input I into output O, but allows chaining of converters + * Opposed to Guava's Converter class, this is one-way, as generally these are used for Responses, which cannot be + * reversibly converted, nor should they be. + * + * @param the type that will be processed + * @param the returned object's type + */ + public static class ChainConverter + implements Converter { + private final Converter next; + + public ChainConverter(Converter finalConverter) { + next = finalConverter; + } + + /** + * An intermediate chained converter, so that some intermediate object can be processed + * + * @param intermediate The intermediate converter + * @param The intermediate object type + * @return A ChainConverter that can have additional Converters chained into it + */ + public ChainConverter chain(Converter intermediate) { + return new ChainConverter<>(response -> convert(intermediate.convert(response))); + } + + @Override + public O convert(I input) + throws Exception { + return next.convert(input); + } + } + + /** + * A bunch of common converters, which all process an OkHttp response to some other useful object. These can be chained + * with the use of ChainConverter above. + */ + public static final Converter BUFFER_CONVERTER = response -> { + Buffer b = new Buffer(); + b.writeAll(response.body().source()); + return b; + }; + + public static final Converter JSON_CONVERTER = + response -> new JsonReader(new InputStreamReader(response.body().byteStream(), UTF_8)); + + public static final Converter HTML_CONVERTER = + response -> Jsoup.parse(response.body().byteStream(), null, response.request().url().toString()); + + public static final Converter STRING_CONVERTER = response -> response.body().string(); + + public static final Converter EMPTY_CONVERTER = response -> { + response.body().source().readAll(Okio.blackhole()); + return new Object(); + }; + + public static class TempFileConverter + implements Converter { + private final String filename; + private final String fileExt; + + public TempFileConverter(String filename, String fileExt) { + this.filename = filename; + this.fileExt = fileExt; + } + + @Override + public @Nullable File convert(Response response) + throws Exception { + File tempFile = new File(new File(getCacheDir(), "requested"), + StringUtils.fileNameRemoveBadCharacters(filename) + "." + fileExt + ); + ResponseBody body = response.body(); + if (body == null) throw new IOException("No body!"); + tempFile.getParentFile().mkdirs(); + FilesKt.writeBytes(tempFile, body.bytes()); + return tempFile; + } + } + + /** + * A wrapper over a regular callback that ignores onFailure calls + */ + public abstract static class IgnoreFailureCallback + implements Callback { + public final void onFailure(@NotNull Call call, @NotNull IOException e) {} + + public abstract void onResponse(@NonNull Call call, @NonNull Response response) + throws IOException; + } + + public static class HttpCodeException + extends Exception { + public int code; + public boolean hadData; + + public HttpCodeException(Response response) { + code = response.code(); + try { + hadData = response.body().bytes().length != 0; + } catch (Exception e) { + hadData = false; + } + } + + public boolean isServerErrorNotFound() { + return code == HttpStatusCodesKt.HTTP_NOT_FOUND; + } + + @Override + public String getMessage() { + return code + " " + HttpStatusCodesNamesKt.getCODE_MAP_TO_NAME().get(code) + (hadData ? " with data" : ""); + } + } + + /** + * A useful implementation of a regular Call that will never fail, but always returns an empty body. + */ + public static class NullCall + implements Call { + + private final Request request; + private boolean cancelled; + private boolean executed; + + public NullCall(HttpUrl url) { + request = new Request.Builder().url(url).build(); + } + + @Override + public void cancel() { + cancelled = true; + } + + @SuppressWarnings("MethodDoesntCallSuperMethod") + @NotNull + @Override + public Call clone() { + return new NullCall(request.url()); + } + + @Override + public void enqueue(@NotNull Callback callback) { + executed = true; + BackgroundUtils.runOnBackgroundThread(() -> { // to emulate an actual call coming from a background thread + try { + callback.onResponse(this, execute()); + } catch (IOException e) { + callback.onFailure(this, e); + } + }); + } + + @NotNull + @Override + public Response execute() { + if (cancelled) return new Response.Builder() + .code(418) + .request(request) + .body(new EmptyResponseBody()) + .protocol(Protocol.HTTP_1_1) + .build(); + executed = true; + return new Response.Builder() + .code(200) + .request(request) + .body(new EmptyResponseBody()) + .protocol(Protocol.HTTP_1_1) + .message("OK") + .build(); + } + + @Override + public boolean isCanceled() { + return cancelled; + } + + @Override + public boolean isExecuted() { + return executed; + } + + @NotNull + @Override + public Request request() { + return request; + } + + @NotNull + @Override + public Timeout timeout() { + return Timeout.NONE; + } + } + + public static class EmptyResponseBody + extends ResponseBody { + + @Override + public long contentLength() { + return 0; + } + + @Override + public @Nullable MediaType contentType() { + return null; + } + + @Override + public @NotNull BufferedSource source() { + return new Buffer(); + } + } + + /** + * A cookie processor, depending on the input will either process it into another cookie, or return the input cookie + */ + public interface CookieProcessor { + List process(Cookie c); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/ProgressRequestBody.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/ProgressRequestBody.java new file mode 100644 index 0000000000..86a4eabeaf --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/ProgressRequestBody.java @@ -0,0 +1,97 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.net; + +import androidx.annotation.NonNull; + +import java.io.IOException; + +import okhttp3.MediaType; +import okhttp3.RequestBody; +import okio.*; + +/** + * Used for getting the progress of a body when writing it to the network. + */ +public class ProgressRequestBody + extends RequestBody { + protected RequestBody delegate; + protected ProgressRequestListener listener; + protected ProgressSink progressSink; + + public ProgressRequestBody(RequestBody delegate, ProgressRequestListener listener) { + this.delegate = delegate; + this.listener = listener; + } + + @Override + public MediaType contentType() { + return delegate.contentType(); + } + + @Override + public long contentLength() + throws IOException { + return delegate.contentLength(); + } + + @Override + public void writeTo(@NonNull BufferedSink sink) + throws IOException { + + progressSink = new ProgressSink(sink); + BufferedSink bufferedSink = Okio.buffer(progressSink); + + delegate.writeTo(bufferedSink); + bufferedSink.flush(); + } + + protected final class ProgressSink + extends ForwardingSink { + private long bytesWritten = 0; + private int lastPercent = 0; + + public ProgressSink(Sink delegate) { + super(delegate); + } + + @Override + public void write(@NonNull Buffer source, long byteCount) + throws IOException { + super.write(source, byteCount); + + if (bytesWritten == 0) { + // so we can know that the uploading has just started + listener.onUploadProgress(0); + } + + bytesWritten += byteCount; + if (contentLength() > 0) { + int percent = (int) (100 * bytesWritten / contentLength()); + + if (percent - lastPercent >= 1) { // 1% increments + lastPercent = percent; + listener.onUploadProgress(percent); + } + } + } + } + + public interface ProgressRequestListener { + void onUploadProgress(int percent); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/ProgressResponseBody.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/ProgressResponseBody.java new file mode 100644 index 0000000000..0b2fc115a6 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/ProgressResponseBody.java @@ -0,0 +1,78 @@ +package com.github.adamantcheese.chan.core.net; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.utils.BackgroundUtils; + +import java.io.IOException; + +import okhttp3.*; +import okio.*; + +/** + * Used for getting the progress of a body when receiving it from the network. + */ +public class ProgressResponseBody + extends ResponseBody { + + private final HttpUrl sourceUrl; + private final ResponseBody responseBody; + @Nullable + private final ProgressListener progressListener; + private BufferedSource bufferedSource; + + ProgressResponseBody(Response response, @Nullable ProgressListener progressListener) { + this.sourceUrl = response.request().url(); + this.responseBody = response.body(); + this.progressListener = progressListener; + } + + @Override + public MediaType contentType() { + return responseBody.contentType(); + } + + @Override + public long contentLength() { + return responseBody.contentLength(); + } + + @NonNull + @Override + public BufferedSource source() { + if (bufferedSource == null) { + bufferedSource = Okio.buffer(source(responseBody.source())); + } + return bufferedSource; + } + + private Source source(Source source) { + return new ForwardingSource(source) { + long totalBytesRead = 0L; + + @Override + public long read(@NonNull Buffer sink, long byteCount) + throws IOException { + long bytesRead = super.read(sink, byteCount); + boolean firstRead = totalBytesRead == 0L; + // read() returns the number of bytes read, or -1 if this source is exhausted. + totalBytesRead += bytesRead != -1 ? bytesRead : 0; + if (progressListener != null) { + BackgroundUtils.runOnMainThread(() -> progressListener.onDownloadProgress( + sourceUrl, + totalBytesRead, + responseBody.contentLength(), + firstRead, + totalBytesRead == responseBody.contentLength() + )); + } + return bytesRead; + } + }; + } + + public interface ProgressListener { + void onDownloadProgress(HttpUrl source, long bytesRead, long contentLength, boolean start, boolean done); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/UpdateApiParser.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/UpdateApiParser.java new file mode 100644 index 0000000000..ba6a3967a3 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/UpdateApiParser.java @@ -0,0 +1,121 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.net; + +import static com.github.adamantcheese.chan.BuildConfig.*; +import static com.github.adamantcheese.chan.core.settings.PersistableChanState.previousDevHash; +import static com.github.adamantcheese.chan.utils.StringUtils.span; + +import android.text.style.URLSpan; +import android.util.JsonReader; +import android.util.MalformedJsonException; + +import com.github.adamantcheese.chan.core.net.UpdateApiParser.UpdateApiResponse; +import com.github.adamantcheese.chan.features.html_styling.StyledHtml; +import com.vladsch.flexmark.html.HtmlRenderer; +import com.vladsch.flexmark.parser.Parser; +import com.vladsch.flexmark.util.ast.Node; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import okhttp3.HttpUrl; + +public class UpdateApiParser + implements NetUtilsClasses.Converter { + private final String versionPatternString = "v(\\d+?)\\.(\\d{1,2})\\.(\\d{1,2})"; + private final Pattern RELEASE_PATTERN = Pattern.compile(versionPatternString); + private final Pattern DEV_PATTERN = Pattern.compile(versionPatternString + "-(.*)"); + + @Override + public UpdateApiResponse convert(JsonReader reader) + throws Exception { + UpdateApiResponse response = new UpdateApiResponse(); + if (DEV_BUILD) { + response.body = span( + "New dev build; see commits!", + new URLSpan(GITHUB_ENDPOINT + "/compare/" + previousDevHash.get() + "..." + COMMIT_HASH) + ); + } else { + response.body = + "Changelog:\nSee the release on Github for details!\nYour Android API is too low to properly render the changelog from the site."; + } + + reader.beginObject(); + while (reader.hasNext()) { + switch (reader.nextName()) { + case "tag_name": + response.versionCodeString = reader.nextString(); + Matcher versionMatcher = + (DEV_BUILD ? DEV_PATTERN : RELEASE_PATTERN).matcher(response.versionCodeString); + if (versionMatcher.matches()) { + try { + //@formatter:off + //noinspection PointlessArithmeticExpression,ConstantConditions + response.versionCode = + 10000 * Integer.parseInt(versionMatcher.group(1)) + + 100 * Integer.parseInt(versionMatcher.group(2)) + + 1 * Integer.parseInt(versionMatcher.group(3)); + response.apkURL = + HttpUrl.get((DEV_BUILD ? DEV_GITHUB_ENDPOINT : GITHUB_ENDPOINT) + + "/releases/download/" + response.versionCodeString + "/" + APP_LABEL + + (DEV_BUILD ? "-" + versionMatcher.group(4) : "") + ".apk"); + //@formatter:on + break; + } catch (Exception e) { + throw new IOException("Error processing tag_name; apkUrl likely failed to be valid", e); + } + } else { + throw new MalformedJsonException("Error processing tag_name; version code string is not valid."); + } + case "name": + if (!DEV_BUILD) { + response.updateTitle = reader.nextString(); + } else { + reader.skipValue(); + } + break; + case "body": + if (DEV_BUILD) { + response.commitHash = reader.nextString().trim(); + } else { + Node updateLog = Parser.builder().build().parse(reader.nextString()); + response.body = StyledHtml.fromHtml("Changelog:\r\n" + HtmlRenderer + .builder() + .build() + .render(updateLog), null); + } + break; + default: + reader.skipValue(); + break; + } + } + reader.endObject(); + return response; + } + + public static class UpdateApiResponse { + public String commitHash = ""; + public int versionCode = 0; + public String versionCodeString; + public String updateTitle = ""; + public HttpUrl apkURL; + public CharSequence body; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/WebviewSyncCookieManager.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/WebviewSyncCookieManager.java new file mode 100644 index 0000000000..e674d33508 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/WebviewSyncCookieManager.java @@ -0,0 +1,82 @@ +package com.github.adamantcheese.chan.core.net; + +import android.webkit.CookieManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.franmontiel.persistentcookiejar.PersistentCookieJar; + +import java.util.*; + +import okhttp3.*; + +public class WebviewSyncCookieManager + implements CookieJar { + private final PersistentCookieJar actualCookieJar; + private final CookieManager webviewCookieManager; + + public WebviewSyncCookieManager(@NonNull PersistentCookieJar actualCookieJar) { + this.actualCookieJar = actualCookieJar; + webviewCookieManager = CookieManager.getInstance(); + } + + /** + * Saves cookies from both the request, and also sends them to webkit's cookie manager, overwriting any existing cookies. + */ + @Override + public void saveFromResponse(@NonNull HttpUrl url, @NonNull List cookies) { + actualCookieJar.saveFromResponse(url, cookies); + + String sUrl = url.toString(); + for (Cookie cookie : actualCookieJar.loadForRequest(url)) { + webviewCookieManager.setCookie(sUrl, cookie.toString()); + } + } + + /** + * Returns a list of cookies from both the okhttp cookie jar. + * If you want to include webkit cookies, call loadWebviewCookiesIntoJar first. + */ + @NonNull + @Override + public List loadForRequest(@NonNull HttpUrl url) { + return actualCookieJar.loadForRequest(url); + } + + public void loadWebviewCookiesIntoJar(HttpUrl url) { + actualCookieJar.saveFromResponse(url, getWebviewCookies(url)); + } + + public void clearCookiesForUrl(HttpUrl url, @Nullable List optionalNames) { + List okhttpCookies = actualCookieJar.loadForRequest(url); + List updatedCookies = new ArrayList<>(); + for (Cookie cookie : okhttpCookies) { + if (optionalNames == null || optionalNames.contains(cookie.name())) { + updatedCookies.add(cookie.newBuilder().expiresAt(0).build()); + } + } + actualCookieJar.saveFromResponse(url, updatedCookies); + } + + public void clearAllCookies() { + webviewCookieManager.removeAllCookies(null); + actualCookieJar.clear(); + } + + private List getWebviewCookies(HttpUrl url) { + String webviewCookies = webviewCookieManager.getCookie(url.toString()); + if (webviewCookies == null) return Collections.emptyList(); + //We can split on the ';' char as the cookie manager only returns cookies + //that match the url and haven't expired, so the cookie attributes aren't included + String[] cookieHeaders = webviewCookies.split(";"); + List ret = new ArrayList<>(); + for (String header : cookieHeaders) { + Cookie parsed = Cookie.parse(url, header.trim()); + if (parsed != null) { + ret.add(parsed); + } + } + return ret; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/interceptors/CloudflareInterceptor.kt b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/interceptors/CloudflareInterceptor.kt new file mode 100644 index 0000000000..8a010923b2 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/interceptors/CloudflareInterceptor.kt @@ -0,0 +1,205 @@ +package com.github.adamantcheese.chan.core.net.interceptors + +import android.annotation.SuppressLint +import android.content.Context +import android.webkit.WebSettings +import android.webkit.WebView +import android.widget.Toast +import androidx.core.content.ContextCompat +import com.github.adamantcheese.chan.R +import com.github.adamantcheese.chan.core.net.NetUtils +import com.github.adamantcheese.chan.ui.widget.CancellableToast.showToast +import com.github.adamantcheese.chan.utils.AndroidUtils +import com.github.adamantcheese.chan.utils.BackgroundUtils +import com.github.adamantcheese.chan.utils.WebViewClientCompat +import okhttp3.Cookie +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Interceptor +import okhttp3.Request +import okhttp3.Response +import java.io.IOException +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit + +class CloudflareInterceptor(private val context: Context) : Interceptor { + + private val executor = ContextCompat.getMainExecutor(context) + + @Synchronized + override fun intercept(chain: Interceptor.Chain): Response { + val originalRequest = chain.request() + + if (!AndroidUtils.supportsWebView()) { + BackgroundUtils.runOnMainThread { + showToast(context, R.string.fail_reason_webview_is_not_installed, Toast.LENGTH_LONG) + } + return chain.proceed(originalRequest) + } + + WebSettings.getDefaultUserAgent(context) + + var response: Response? = null + for (i in 1..5) { + response = chain.proceed(originalRequest) + + // Check if Cloudflare anti-bot is on + if (response.code !in ERROR_CODES || response.header("Server") !in SERVER_CHECK) { + return response + } + + try { + response.close() + NetUtils.loadWebviewCookies(originalRequest.url) + val oldCookie = NetUtils.applicationClient.cookieJar.loadForRequest(originalRequest.url) + .firstOrNull { it.name == CF_CLEARANCE_NAME } + NetUtils.clearSpecificCookies(originalRequest.url, COOKIE_NAMES) + resolveWithWebView(originalRequest, oldCookie, i == 5) + } + // Because OkHttp's enqueue only handles IOExceptions, wrap the exception so that + // we don't crash the entire app + catch (e: CloudflareBypassException) { + throw IOException("Could not do cloudflare bypass!") + } catch (e: Exception) { + throw IOException(e) + } + } + return response ?: chain.proceed(originalRequest) + } + + @SuppressLint("SetJavaScriptEnabled") + private fun resolveWithWebView(request: Request, oldCookie: Cookie?, finalResolve: Boolean) { + // We need to lock this thread until the WebView finds the challenge solution url, because + // OkHttp doesn't support asynchronous interceptors. + val latch = CountDownLatch(1) + + var webView: WebView? = null + + var challengeFound = false + var cloudflareBypassed = false + var isWebViewOutdated = false + + val origRequestUrl = request.url.toString() + val headers = request.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" }.toMutableMap() + + executor.execute { + val webview = WebView(context) + webView = webview + webview.setDefaultSettings() + + webview.webViewClient = object : WebViewClientCompat() { + override fun onPageFinished(view: WebView, url: String) { + fun isCloudFlareBypassed(origRequestUrl: String): Boolean { + NetUtils.loadWebviewCookies(origRequestUrl.toHttpUrl()) + return NetUtils.applicationClient.cookieJar.loadForRequest(origRequestUrl.toHttpUrl()) + .firstOrNull { it.name == CF_CLEARANCE_NAME } + .let { it != null && it != oldCookie } + } + + if (isCloudFlareBypassed(origRequestUrl)) { + cloudflareBypassed = true + latch.countDown() + } + + if (url == origRequestUrl && !challengeFound) { + // The first request didn't return the challenge, abort. + latch.countDown() + } + } + + override fun onReceivedErrorCompat( + view: WebView, + errorCode: Int, + description: String?, + failingUrl: String, + isMainFrame: Boolean, + ) { + if (isMainFrame) { + if (errorCode in ERROR_CODES) { + // Found the Cloudflare challenge page. + challengeFound = true + } else { + // Unlock thread, the challenge wasn't found. + latch.countDown() + } + } + } + } + + webView?.loadUrl(origRequestUrl, headers) + } + + // Wait a reasonable amount of time to retrieve the solution. The minimum should be + // around 4 seconds but it can take more due to slow networks or server issues. + latch.await(12, TimeUnit.SECONDS) + + executor.execute { + if (!cloudflareBypassed) { + isWebViewOutdated = webView?.isOutdated() == true + } + + webView?.stopLoading() + webView?.destroy() + webView = null + } + + // Throw exception if we failed to bypass Cloudflare + if (!cloudflareBypassed) { + // Prompt user to update WebView if it seems too outdated + if (isWebViewOutdated) { + showToast(context, "Your webview is out of date, minimum 99, yours: " + (webView?.getWebViewMajorVersion() + ?: 0), Toast.LENGTH_LONG) + } + + if (finalResolve) { + throw CloudflareBypassException() + } + } + } + + companion object { + private val ERROR_CODES = listOf(403, 503) + private val SERVER_CHECK = arrayOf("cloudflare-nginx", "cloudflare") + private const val CF_CLEARANCE_NAME = "cf_clearance" + private val COOKIE_NAMES = listOf(CF_CLEARANCE_NAME) + } +} + +@SuppressLint("SetJavaScriptEnabled") +fun WebView.setDefaultSettings() { + with(settings) { + javaScriptEnabled = true + domStorageEnabled = true + databaseEnabled = true + useWideViewPort = true + loadWithOverviewMode = true + cacheMode = WebSettings.LOAD_DEFAULT + } +} + +fun WebView.isOutdated(): Boolean { + return getWebViewMajorVersion() < 99 +} + +private fun WebView.getWebViewMajorVersion(): Int { + val uaRegexMatch = """.*Chrome/(\d+)\..*""".toRegex().matchEntire(getDefaultUserAgentString()) + return if (uaRegexMatch != null && uaRegexMatch.groupValues.size > 1) { + uaRegexMatch.groupValues[1].toInt() + } else { + 0 + } +} + +private fun WebView.getDefaultUserAgentString(): String { + val originalUA: String = settings.userAgentString + + // Next call to getUserAgentString() will get us the default + settings.userAgentString = null + val defaultUserAgentString = settings.userAgentString + + // Revert to original UA string + settings.userAgentString = originalUA + + return defaultUserAgentString +} + +private class CloudflareBypassException : Exception() diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/interceptors/HttpEquivRefreshInterceptor.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/interceptors/HttpEquivRefreshInterceptor.java new file mode 100644 index 0000000000..c2a53f03d7 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/interceptors/HttpEquivRefreshInterceptor.java @@ -0,0 +1,74 @@ +package com.github.adamantcheese.chan.core.net.interceptors; + +import static java.nio.charset.StandardCharsets.UTF_8; + +import org.jetbrains.annotations.NotNull; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +import okhttp3.*; +import okio.BufferedSource; + +/** + * This interceptor follows up http-equiv redirects when applicable. + */ +public class HttpEquivRefreshInterceptor + implements Interceptor { + @NotNull + @Override + public Response intercept(@NotNull Chain chain) + throws IOException { + Response initialResponse = chain.proceed(chain.request()); + if (initialResponse.isSuccessful() && initialResponse.body() != null) { + String contentType = initialResponse.header("Content-Type"); + if (contentType != null && contentType.contains("text/html")) { + BufferedSource source = initialResponse.body().source().peek(); + // we're looking for something like + Document document = Jsoup.parse(source.readString(UTF_8)); + source.close(); + + Elements metaTags = document.head().getElementsByTag("meta"); + + for (Element metaTag : metaTags) { + String content = metaTag.attr("content"); + String httpEquiv = metaTag.attr("http-equiv"); + + if (httpEquiv.equalsIgnoreCase("refresh")) { + String[] splitContent = content.split(";"); + if (splitContent.length == 2) { + String url = splitContent[1].trim().substring(4); + HttpUrl redirectUrl; + try { + // url is directly specified + redirectUrl = HttpUrl.get(url); + } catch (Exception e) { + try { + // url is surround by quotes maybe? + redirectUrl = HttpUrl.get(url.substring(1, url.length() - 1)); + } catch (Exception e2) { + return initialResponse; + } + } + initialResponse.close(); + Request r = new Request.Builder().url(redirectUrl).build(); + // double the timeout, since we're basically sending a second request + return chain + .withConnectTimeout(chain.connectTimeoutMillis() * 2, TimeUnit.MILLISECONDS) + .withReadTimeout(chain.readTimeoutMillis() * 2, TimeUnit.MILLISECONDS) + .withWriteTimeout(chain.writeTimeoutMillis(), TimeUnit.MILLISECONDS) + .proceed(r); + } else { + return initialResponse; + } + } + } + } + } + return initialResponse; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ArchivePresenter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ArchivePresenter.java new file mode 100644 index 0000000000..917f0996fc --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ArchivePresenter.java @@ -0,0 +1,122 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.presenter; + +import static android.text.TextUtils.isEmpty; + +import com.github.adamantcheese.chan.core.model.InternalSiteArchive; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; + +import java.util.*; + +public class ArchivePresenter + implements NetUtilsClasses.ResponseResult { + + private final Callback callback; + private final Board board; + + private boolean inRequest = false; + + private String filter; + private List items = new ArrayList<>(); + private final List filteredItems = new ArrayList<>(); + + public ArchivePresenter(Callback callback, Board board) { + this.callback = callback; + this.board = board; + } + + public void onRefresh() { + if (!inRequest) { + loadArchive(); + } + } + + private void loadArchive() { + inRequest = true; + callback.showError(false); + board.site.api().archive(board, this); + } + + public void onSearchEntered(String query) { + filterArchive(query); + } + + public void onSearchVisibility(boolean visible) { + if (!visible) { + filterArchive(null); + } + } + + public void onItemClicked(InternalSiteArchive.ArchiveItem item) { + callback.openThread(Loadable.forThread(board, item.id, "")); + } + + @Override + public void onSuccess(InternalSiteArchive internalSiteArchive) { + inRequest = false; + callback.hideRefreshing(); + callback.showList(); + items = internalSiteArchive.items; + updateWithFilter(); + } + + @Override + public void onFailure(Exception e) { + inRequest = false; + callback.hideRefreshing(); + callback.showError(true); + } + + private void filterArchive(String query) { + filter = query; + updateWithFilter(); + } + + private void updateWithFilter() { + filteredItems.clear(); + if (isEmpty(filter)) { + filteredItems.addAll(items); + } else { + for (InternalSiteArchive.ArchiveItem item : items) { + if (filterApplies(item, filter)) { + filteredItems.add(item); + } + } + } + + callback.setArchiveItems(filteredItems, filter); + } + + private boolean filterApplies(InternalSiteArchive.ArchiveItem item, String filter) { + return item.description.toLowerCase(Locale.ENGLISH).contains(filter.toLowerCase()); + } + + public interface Callback { + void setArchiveItems(List items, String filter); + + void hideRefreshing(); + + void showList(); + + void showError(boolean show); + + void openThread(Loadable loadable); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/BoardSetupPresenter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/BoardSetupPresenter.java new file mode 100644 index 0000000000..00385e0b97 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/BoardSetupPresenter.java @@ -0,0 +1,258 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.presenter; + +import android.text.TextUtils; + +import com.github.adamantcheese.chan.core.manager.BoardManager; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.repository.BoardRepository; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Boards; +import com.github.adamantcheese.chan.ui.helper.BoardHelper; +import com.github.adamantcheese.chan.utils.BackgroundUtils; + +import java.util.*; + +import javax.inject.Inject; + +public class BoardSetupPresenter + implements Observer { + private final BoardManager boardManager; + + private PresenterCallback callback; + private LayoutCallback addCallback; + + private Site site; + + private Boards savedBoards; + + private BoardRepository.SitesBoards allBoardsObservable; + + private BackgroundUtils.Cancelable suggestionCall; + + @Inject + public BoardSetupPresenter(BoardManager boardManager) { + this.boardManager = boardManager; + } + + public void create(PresenterCallback callback, Site site) { + this.callback = callback; + this.site = site; + + savedBoards = boardManager.getSiteSavedBoards(site); + callback.setSavedBoards(savedBoards); + + allBoardsObservable = boardManager.getAllBoardsObservable(); + allBoardsObservable.addObserver(this); + } + + public void destroy() { + boardManager.updateBoardOrders(savedBoards); + + allBoardsObservable.deleteObserver(this); + } + + @Override + public void update(Observable o, Object arg) { + if (o == allBoardsObservable) { + if (addCallback != null) { + searchEntered(null); + } + } + } + + public void addClicked() { + callback.showAddDialog(); + } + + public void bindAddDialog(LayoutCallback addCallback) { + this.addCallback = addCallback; + searchEntered(null); + } + + public void unbindAddDialog() { + this.addCallback = null; + } + + public void onAddDialogPositiveClicked() { + int count = 0; + + List selectedSuggestions = addCallback.getCheckedSuggestions(); + Boards boardsToSave = new Boards(); + + if (site.boardsType().canList) { + Boards siteBoards = boardManager.getSiteBoards(site); + Map siteBoardsByCode = new HashMap<>(); + for (Board siteBoard : siteBoards) { + siteBoardsByCode.put(siteBoard.code, siteBoard); + } + for (String selectedSuggestion : selectedSuggestions) { + Board board = siteBoardsByCode.get(selectedSuggestion); + if (board != null) { + boardsToSave.add(board); + savedBoards.add(board); + count++; + } + } + } else { + for (String suggestion : selectedSuggestions) { + Board board = site.createBoard(suggestion, suggestion); + boardsToSave.add(board); + savedBoards.add(board); + count++; + } + } + + boardManager.setAllSaved(boardsToSave, true); + + setOrder(); + callback.setSavedBoards(savedBoards); + callback.boardsWereAdded(count); + } + + public void move(int from, int to) { + Board item = savedBoards.remove(from); + savedBoards.add(to, item); + setOrder(); + + callback.setSavedBoards(savedBoards); + } + + public void removeBoard(int position) { + Board board = savedBoards.remove(position); + boardManager.setSaved(board, false); + + setOrder(); + callback.setSavedBoards(savedBoards); + + callback.showRemovedSnackbar(board); + } + + public void undoRemoveBoard(Board board) { + boardManager.setSaved(board, true); + savedBoards.add(board.order, board); + setOrder(); + callback.setSavedBoards(savedBoards); + } + + public void searchEntered(String userQuery) { + if (suggestionCall != null) { + suggestionCall.cancel(); + } + + final String query = userQuery == null ? null : userQuery.replace("/", "").replace("\\", ""); + suggestionCall = BackgroundUtils.runWithExecutor(BackgroundUtils.backgroundService, () -> { + List suggestions = new ArrayList<>(); + if (site.boardsType().canList) { + Boards siteBoards = boardManager.getSiteBoards(site); + Boards allUnsavedBoards = new Boards(); + for (Board siteBoard : siteBoards) { + if (!siteBoard.saved) { + allUnsavedBoards.add(siteBoard); + } + } + + Boards toSuggest; + if (TextUtils.isEmpty(query)) { + toSuggest = new Boards(allUnsavedBoards); + } else { + toSuggest = BoardHelper.search(allUnsavedBoards, query); + } + + for (Board board : toSuggest) { + BoardSuggestion suggestion = new BoardSuggestion(board); + suggestions.add(suggestion); + } + } else { + if (!TextUtils.isEmpty(query)) { + suggestions.add(new BoardSuggestion(query)); + } + } + + return suggestions; + }, result -> { + if (addCallback != null) { + List currentlySelectedSuggestions = addCallback.getCheckedSuggestions(); + for (BoardSuggestion suggestion : result) { + suggestion.checked = currentlySelectedSuggestions.contains(suggestion.code); + } + + addCallback.suggestionsWereChanged(result); + } + }); + } + + private void setOrder() { + for (int i = 0; i < savedBoards.size(); i++) { + savedBoards.get(i).order = i; + } + } + + public interface PresenterCallback { + void showAddDialog(); + + void setSavedBoards(Boards savedBoards); + + void showRemovedSnackbar(Board board); + + void boardsWereAdded(int count); + } + + public interface LayoutCallback { + List getCheckedSuggestions(); + + void suggestionsWereChanged(List suggestions); + } + + public static class BoardSuggestion { + private final Board board; + public final String code; + + public boolean checked = false; + + public BoardSuggestion(Board board) { + this.board = board; + this.code = board.code; + } + + public BoardSuggestion(String code) { + this.board = null; + this.code = code; + } + + public String getName() { + if (board != null) { + return board.getFormattedName(); + } else { + return "/" + code + "/"; + } + } + + public String getDescription() { + return board == null ? "" : board.description; + } + + public boolean isChecked() { + return checked; + } + + public long getId() { + return code.hashCode(); + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/BoardsMenuPresenter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/BoardsMenuPresenter.java new file mode 100644 index 0000000000..3ade905c08 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/BoardsMenuPresenter.java @@ -0,0 +1,217 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.presenter; + +import static com.github.adamantcheese.chan.core.presenter.BoardsMenuPresenter.Item.Type.BOARD; +import static com.github.adamantcheese.chan.core.presenter.BoardsMenuPresenter.Item.Type.SEARCH; +import static com.github.adamantcheese.chan.core.presenter.BoardsMenuPresenter.Item.Type.SITE; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getAttrColor; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.drawable.Drawable; + +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.R; +import com.github.adamantcheese.chan.core.manager.BoardManager; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.repository.BoardRepository; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.core.site.SiteIcon; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Boards; +import com.github.adamantcheese.chan.core.site.common.CommonSite; +import com.github.adamantcheese.chan.ui.helper.BoardHelper; +import com.github.adamantcheese.chan.utils.BackgroundUtils; + +import java.util.*; + +import javax.inject.Inject; + +public class BoardsMenuPresenter + implements Observer { + private final BoardRepository.SitesBoards allBoards; + + private Items items; + + @Nullable + private String filter; + + @Inject + public BoardsMenuPresenter(BoardManager boardManager) { + allBoards = boardManager.getAllBoardsObservable(); + } + + public void create(Callback callback, Board selectedBoard, Context context) { + + this.allBoards.addObserver(this); + + items = new Items(context); + + updateWithFilter(); + + callback.scrollToPosition(items.findBoardPosition(selectedBoard)); + } + + public void destroy() { + allBoards.deleteObserver(this); + } + + public Items items() { + return items; + } + + public void filterChanged(String filter) { + this.filter = filter; + updateWithFilter(); + } + + @Override + public void update(Observable o, Object arg) { + if (o == allBoards) { + updateWithFilter(); + } + } + + private void updateWithFilter() { + items.update(allBoards.get(), filter); + } + + public static class Items + extends Observable { + public List items = new ArrayList<>(); + private BackgroundUtils.Cancelable boardsCall; + private final Context context; + + public Items(Context context) { + this.context = context; + } + + public void update(final List allBoards, final String filter) { + if (boardsCall != null) { + boardsCall.cancel(); + } + boardsCall = BackgroundUtils.runWithExecutor(BackgroundUtils.backgroundService, () -> { + List newItems = new ArrayList<>(); + int itemIdCounter = 1; + + newItems.add(new Item(0, SEARCH)); + + for (BoardRepository.SiteBoards siteAndBoards : allBoards) { + Site site = siteAndBoards.site; + Boards boards = siteAndBoards.boards; + + newItems.add(new Item(itemIdCounter++, site)); + + if (filter == null || filter.isEmpty()) { + for (Board board : boards) { + if (board.saved) { + newItems.add(new Item(itemIdCounter++, board)); + } + } + } else { + // cap the amount of outputs to 5 instead of all boards, which could be a lot! + int count = 0; + for (Board b : BoardHelper.search(boards, filter)) { + if (count == 5) break; + newItems.add(new Item(itemIdCounter++, b)); + count++; + } + } + } + + if (newItems.size() == 1) { + CommonSite setupSite = new CommonSite() { + @Override + public void setup() { + setName("App Setup"); + @SuppressLint("UseCompatLoadingForDrawables") + Drawable settingsDrawable = context.getDrawable(R.drawable.ic_fluent_settings_24_filled); + settingsDrawable.setTint(getAttrColor(context, android.R.attr.textColorSecondary)); + setIcon(SiteIcon.fromDrawable(settingsDrawable)); + } + }; + setupSite.setup(); + newItems.add(new Item(1, setupSite)); + } + + return newItems; + }, result -> { + items.clear(); + items.addAll(result); + setChanged(); + notifyObservers(); + }); + } + + public int getCount() { + return items.size(); + } + + public int findBoardPosition(Board board) { + int position = 0; + for (Item item : items) { + + if (item.board != null && item.board.siteCodeEquals(board)) { + return position; + } + + position++; + } + + return 0; + } + + public Item getAtPosition(int position) { + return items.get(position); + } + } + + public static class Item { + public enum Type { + BOARD, + SITE, + SEARCH + } + + public final Type type; + public Board board; + public Site site; + public int id; + + public Item(int id, Type type) { + this.id = id; + this.type = type; + } + + public Item(int id, Board board) { + this.id = id; + type = BOARD; + this.board = board; + } + + public Item(int id, Site site) { + this.id = id; + type = SITE; + this.site = site; + } + } + + public interface Callback { + void scrollToPosition(int position); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/BrowsePresenter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/BrowsePresenter.java new file mode 100644 index 0000000000..ec18cfc598 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/BrowsePresenter.java @@ -0,0 +1,118 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.presenter; + +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.core.manager.BoardManager; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.repository.BoardRepository; +import com.github.adamantcheese.chan.core.site.Site; + +import java.util.Observable; +import java.util.Observer; + +import javax.inject.Inject; + +public class BrowsePresenter + implements Observer { + + @Nullable + private Callback callback; + + private boolean hadBoards; + private Board currentBoard; + + private final BoardRepository.SitesBoards savedBoardsObservable; + + @Inject + public BrowsePresenter(BoardManager boardManager) { + savedBoardsObservable = boardManager.getSavedBoardsObservable(); + + hadBoards = hasBoards(); + } + + public void create(Callback callback) { + this.callback = callback; + + savedBoardsObservable.addObserver(this); + } + + public void destroy() { + this.callback = null; + savedBoardsObservable.deleteObserver(this); + } + + public Board currentBoard() { + return currentBoard; + } + + public void setBoard(Board board) { + loadBoard(board); + } + + public void loadWithDefaultBoard() { + Board first = firstBoard(); + if (first != null) { + loadBoard(first); + } + } + + public void onBoardsFloatingMenuSiteClicked(Site site) { + if (callback != null) { + callback.loadSiteSetup(site); + } + } + + @Override + public void update(Observable o, Object arg) { + if (o == savedBoardsObservable) { + if (!hadBoards && hasBoards()) { + hadBoards = true; + loadWithDefaultBoard(); + } + } + } + + private boolean hasBoards() { + return firstBoard() != null; + } + + private Board firstBoard() { + for (BoardRepository.SiteBoards item : savedBoardsObservable.get()) { + if (!item.boards.isEmpty()) { + return item.boards.get(0); + } + } + return null; + } + + private void loadBoard(Board board) { + if (callback != null) { + currentBoard = board; + + callback.loadBoard(Loadable.forCatalog(board)); + } + } + + public interface Callback { + void loadBoard(Loadable loadable); + + void loadSiteSetup(Site site); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ImageReencodingPresenter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ImageReencodingPresenter.java new file mode 100644 index 0000000000..c6bece89f2 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ImageReencodingPresenter.java @@ -0,0 +1,149 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.presenter; + +import static com.github.adamantcheese.chan.ui.widget.CancellableToast.showToast; +import static com.github.adamantcheese.chan.utils.AndroidUtils.dp; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getDisplaySize; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getString; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Bitmap.CompressFormat; +import android.graphics.Point; + +import androidx.annotation.Nullable; +import androidx.core.util.Pair; +import androidx.exifinterface.media.ExifInterface; + +import com.github.adamantcheese.chan.R; +import com.github.adamantcheese.chan.core.di.AppModule; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.repository.BitmapRepository; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.core.site.http.Reply; +import com.github.adamantcheese.chan.utils.BitmapUtils; + +public class ImageReencodingPresenter { + private final Context context; + private final ImageReencodingPresenterCallback callback; + private final Reply draft; + + public ImageReencodingPresenter(Context context, ImageReencodingPresenterCallback callback, Loadable loadable) { + this.context = context; + this.draft = loadable.draft; + this.callback = callback; + } + + public void loadImagePreview() { + Point displaySize = getDisplaySize(); + BitmapUtils.decodeFilePreviewImage(draft.file, + //decode to the device width/height, whatever is smaller + dp(Math.min(displaySize.x, displaySize.y)), 0, bitmap -> { + if (bitmap == null) { + showToast(context, R.string.could_not_decode_image_bitmap); + callback.showImagePreview(BitmapRepository.paddedError); + return; + } + + callback.showImagePreview(bitmap); + }, true + ); + } + + public boolean hasExif() { + try { + ExifInterface exif = new ExifInterface(draft.file.getAbsolutePath()); + int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); + if (orientation != ExifInterface.ORIENTATION_UNDEFINED) { + return true; + } + } catch (Exception ignored) {} + return false; + } + + @Nullable + public CompressFormat getCurrentFileFormat() { + return BitmapUtils.getImageFormat(draft.file); + } + + public Pair getImageDims() { + return BitmapUtils.getImageDims(draft.file); + } + + public void applyImageOptions(ImageOptions options) { + ChanSettings.lastImageOptions.set(AppModule.gson.toJson(options)); + + callback.disableOrEnableButtons(false); + try { + CompressFormat reencodeFormat = + callback.getReencodeFormat() == null ? getCurrentFileFormat() : callback.getReencodeFormat(); + draft.file = BitmapUtils.reencodeBitmapFile(draft.file, options, reencodeFormat); + } catch (Throwable error) { + showToast(context, getString(R.string.could_not_apply_image_options, error.getMessage())); + return; + } finally { + callback.disableOrEnableButtons(true); + } + + callback.onImageOptionsApplied(); + } + + public static class ImageOptions { + private static final int MIN_QUALITY = 1; + private static final int MAX_QUALITY = 100; + private static final int MIN_REDUCE = 0; + private static final int MAX_REDUCE = 100; + + public boolean fixExif; + public boolean changeImageChecksum; + public int reencodeQuality; + public int reducePercent; + public boolean blur; + + public ImageOptions( + boolean fixExif, boolean changeImageChecksum, int reencodeQuality, int reducePercent, boolean blur + ) { + this.fixExif = fixExif; + this.changeImageChecksum = changeImageChecksum; + this.reencodeQuality = reencodeQuality; + this.reducePercent = reducePercent; + this.blur = blur; + if (areOptionsInvalid()) { //reset these if not valid + this.reencodeQuality = MAX_QUALITY; + this.reducePercent = MIN_REDUCE; + } + } + + public boolean areOptionsInvalid() { + return reencodeQuality < MIN_QUALITY + || reencodeQuality > MAX_QUALITY + || reducePercent < MIN_REDUCE + || reducePercent > MAX_REDUCE; + } + } + + public interface ImageReencodingPresenterCallback { + void showImagePreview(Bitmap bitmap); + + void disableOrEnableButtons(boolean enabled); + + void onImageOptionsApplied(); + + CompressFormat getReencodeFormat(); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ImageViewerPresenter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ImageViewerPresenter.java new file mode 100644 index 0000000000..f3fa9c62b6 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ImageViewerPresenter.java @@ -0,0 +1,592 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.presenter; + +import static com.github.adamantcheese.chan.core.model.PostImage.Type.OTHER; +import static com.github.adamantcheese.chan.core.model.PostImage.Type.*; +import static com.github.adamantcheese.chan.core.net.NetUtilsClasses.EMPTY_CONVERTER; +import static com.github.adamantcheese.chan.core.settings.ChanSettings.MediaAutoLoadMode.shouldLoadForNetworkType; +import static com.github.adamantcheese.chan.ui.view.MultiImageView.Mode.*; +import static com.github.adamantcheese.chan.ui.widget.CancellableToast.showToast; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getDefaultMuteState; +import static com.github.adamantcheese.chan.utils.AndroidUtils.openLinkInBrowser; + +import android.content.Context; + +import androidx.viewpager.widget.ViewPager; + +import com.github.adamantcheese.chan.core.model.PostImage; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.net.NetUtils; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.core.site.ImageSearch; +import com.github.adamantcheese.chan.ui.toolbar.NavigationItem; +import com.github.adamantcheese.chan.ui.toolbar.ToolbarMenuItem; +import com.github.adamantcheese.chan.ui.view.*; +import com.github.adamantcheese.chan.utils.BackgroundUtils; +import com.github.adamantcheese.chan.utils.Logger; + +import java.util.*; +import java.util.concurrent.CopyOnWriteArraySet; + +import okhttp3.Call; +import okhttp3.HttpUrl; + +public class ImageViewerPresenter + implements MultiImageView.Callback, ViewPager.OnPageChangeListener { + private final Context context; + private static final int PRELOAD_IMAGE_INDEX = 1; + /** + * We don't want to cancel an image right after we have started preloading it because it + * sometimes causes weird bugs where you swipe to an already canceled image/webm and nothing + * happens so you need to swipe back and forth for it to start loading. + */ + private static final int CANCEL_IMAGE_INDEX = 2; + + private final Callback callback; + + private boolean entering = true; + private boolean exiting = false; + private List images; + private int selectedPosition = 0; + private SwipeDirection swipeDirection = SwipeDirection.Default; + private Loadable loadable; + private final Set preloadingImages = new CopyOnWriteArraySet<>(); + private final Set nonCancelableImages = new CopyOnWriteArraySet<>(); + + // Disables swiping until the view pager is visible + private boolean viewPagerVisible = false; + private boolean changeViewsOnInTransitionEnd = false; + + private boolean muted = getDefaultMuteState(); + + public ImageViewerPresenter(Context context, Callback callback) { + this.context = context; + this.callback = callback; + } + + public void showImages(List images, int position, Loadable loadable) { + this.images = images; + this.loadable = loadable; + this.selectedPosition = Math.max(0, Math.min(images.size() - 1, position)); + + // Do this before the view is measured, to avoid it to always loading the first two pages + callback.setPagerItems(images, selectedPosition); + PostImage initialImage = getCurrentPostImage(); + callback.setImageMode(initialImage, LOWRES, true); + callback.showDownloadMenuItem(!initialImage.deleted && initialImage.type != IFRAME); + } + + public boolean isTransitioning() { + return entering; + } + + public void onInTransitionEnd() { + entering = false; + // Depends on what onModeLoaded did + if (changeViewsOnInTransitionEnd) { + callback.setPreviewVisibility(false); + callback.setPagerVisiblity(true); + } + } + + public void onExit() { + if (entering || exiting) return; + exiting = true; + + PostImage postImage = getCurrentPostImage(); + if (postImage.type == MOVIE || postImage.type == IFRAME) { + callback.setImageMode(postImage, LOWRES, true); + } + + callback.showDownloadMenuItem(false); + callback.setPagerVisiblity(false); + callback.setPreviewVisibility(true); + callback.startPreviewOutTransition(postImage); + callback.showProgress(false); + + for (Call preloadingImage : preloadingImages) { + preloadingImage.cancel(); + } + + nonCancelableImages.clear(); + preloadingImages.clear(); + } + + public void onVolumeClicked() { + muted = !muted; + callback.showVolumeMenuItem(true, muted); + callback.setVolume(getCurrentPostImage(), muted); + } + + public List getAllPostImages() { + return images; + } + + public PostImage getCurrentPostImage() { + return images.get(selectedPosition); + } + + @Override + public Loadable getLoadable() { + return loadable; + } + + @Override + public void onPageSelected(int position) { + if (!viewPagerVisible) { + return; + } + + if (position == selectedPosition) { + swipeDirection = SwipeDirection.Default; + } else if (position > selectedPosition) { + swipeDirection = SwipeDirection.Forward; + } else { + swipeDirection = SwipeDirection.Backward; + } + + selectedPosition = position; + onPageSwipedTo(position); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override + public void onPageScrollStateChanged(int state) { + } + + @Override + public void onModeLoaded(MultiImageView multiImageView, MultiImageView.Mode mode) { + if (exiting) return; + + if (mode == LOWRES) { + // lowres is requested at the beginning of the transition, + // the lowres is loaded before the in transition or after + if (!viewPagerVisible) { + viewPagerVisible = true; + if (!entering) { + // Entering transition was already ended, switch now + onInTransitionEnd(); + } else { + // Wait for enter animation to finish before changing views + changeViewsOnInTransitionEnd = true; + } + // Transition ended or not, request loading the other side views to lowres + for (PostImage other : getOther(selectedPosition)) { + callback.setImageMode(other, LOWRES, false); + } + onLowResInCenter(); + } else { + if (multiImageView.getPostImage() == getCurrentPostImage()) { + onLowResInCenter(); + } + } + } else { + PostImage currentImage = getCurrentPostImage(); + if (multiImageView.getPostImage() == currentImage) { + setTitle(currentImage, selectedPosition); + } + } + } + + private void onPageSwipedTo(int position) { + PostImage postImage = getCurrentPostImage(); + // Reset volume icon. + // If it has audio, we'll know after it is loaded. + callback.showVolumeMenuItem(postImage.type == MOVIE, muted); + + //Reset the save icon, don't allow deleted saves + callback.showDownloadMenuItem(!postImage.deleted && postImage.type != IFRAME); + + setTitle(postImage, position); + callback.scrollToImage(postImage); + callback.updatePreviewImage(postImage); + + for (PostImage other : getOther(position)) { + callback.setImageMode(other, LOWRES, false); + } + + nonCancelableImages.clear(); + nonCancelableImages.addAll(getNonCancelableImages(position)); + + if (swipeDirection == SwipeDirection.Forward) { + cancelPreviousFromStartImageDownload(position); + } else if (swipeDirection == SwipeDirection.Backward) { + cancelPreviousFromEndImageDownload(position); + } + + // Already in LOWRES mode + if (callback.getImageMode(postImage) == LOWRES) { + onLowResInCenter(); + } + } + + // Called from either a page swipe caused a lowres image to be in the center or an + // onModeLoaded when a unloaded image was swiped to the center earlier + private void onLowResInCenter() { + PostImage postImage = getCurrentPostImage(); + + if (imageAutoLoad(postImage) && (!postImage.spoiler() || ChanSettings.revealimageSpoilers.get())) { + if (postImage.type == STATIC) { + callback.setImageMode(postImage, BIGIMAGE, true); + } else if (postImage.type == GIF) { + callback.setImageMode(postImage, GIFIMAGE, true); + } else if (postImage.type == MOVIE && videoAutoLoad(postImage)) { + callback.setImageMode(postImage, VIDEO, true); + } else if (postImage.type == PostImage.Type.IFRAME) { + callback.setImageMode(postImage, WEBVIEW, true); + } else if (postImage.type == PostImage.Type.OTHER) { + callback.setImageMode(postImage, MultiImageView.Mode.OTHER, true); + } + } + + ChanSettings.ImageClickPreloadStrategy strategy = ChanSettings.imageClickPreloadStrategy.get(); + + if (swipeDirection == SwipeDirection.Forward) { + preloadNext(); + } else if (swipeDirection == SwipeDirection.Backward) { + preloadPrevious(); + } else { + switch (strategy) { + case PRELOAD_NEXT_IMAGE: + preloadNext(); + break; + case PRELOAD_PREVIOUS_IMAGE: + preloadPrevious(); + break; + case PRELOAD_BOTH_NEXT_AND_PREVIOUS: + preloadNext(); + preloadPrevious(); + break; + case PRELOAD_NO_IMAGES: + break; + } + } + } + + private void preloadPrevious() { + int index = selectedPosition - PRELOAD_IMAGE_INDEX; + + if (index >= 0 && index < images.size()) { + doPreloading(images.get(index)); + } + } + + // This won't actually change any modes, but it will preload the image so that it's + // available immediately when the user swipes right. + private void preloadNext() { + int index = selectedPosition + PRELOAD_IMAGE_INDEX; + + if (index >= 0 && index < images.size()) { + doPreloading(images.get(index)); + } + } + + private List getNonCancelableImages(int index) { + if (images.isEmpty()) { + return Collections.emptyList(); + } + + List nonCancelableImages = new ArrayList<>(3); + + if (index - 1 >= 0) { + nonCancelableImages.add(images.get(index - 1).imageUrl); + } + + if (index >= 0 && index < images.size()) { + nonCancelableImages.add(images.get(index).imageUrl); + } + + if (index + 1 < images.size()) { + nonCancelableImages.add(images.get(index + 1).imageUrl); + } + + return nonCancelableImages; + } + + private void doPreloading(PostImage postImage) { + boolean load = false; + + if (postImage.type == STATIC || postImage.type == GIF || postImage.type == OTHER) { + load = imageAutoLoad(postImage); + } else if (postImage.type == MOVIE) { + load = videoAutoLoad(postImage); + } + + if (load) { + // If downloading, remove from preloadingImages if it finished. + // Array to allow access from within the callback + final Call[] preloadDownload = new Call[1]; + + preloadDownload[0] = NetUtils.makeRequest(NetUtils.applicationClient.getHttpRedirectClient(), + postImage.imageUrl, + EMPTY_CONVERTER, + new NetUtilsClasses.ResponseResult() { + @Override + public void onFailure(Exception e) { + updatePreload(); + } + + @Override + public void onSuccess(Object result) { + updatePreload(); + } + + private void updatePreload() { + if (preloadDownload[0] != null) { + preloadingImages.remove(preloadDownload[0]); + } + } + }, + null, + NetUtilsClasses.ONE_DAY_CACHE + ); + + if (preloadDownload[0] != null) { + preloadingImages.add(preloadDownload[0]); + } + } + } + + private void cancelPreviousFromEndImageDownload(int position) { + for (Call downloader : preloadingImages) { + int index = position + CANCEL_IMAGE_INDEX; + if (index < images.size()) { + if (cancelImageDownload(index, downloader)) { + return; + } + } + } + } + + private void cancelPreviousFromStartImageDownload(int position) { + for (Call downloader : preloadingImages) { + int index = position - CANCEL_IMAGE_INDEX; + if (index >= 0) { + if (cancelImageDownload(index, downloader)) { + return; + } + } + } + } + + private boolean cancelImageDownload(int position, Call downloader) { + if (nonCancelableImages.contains(downloader.request().url())) { + Logger.w(this, + "Attempt to cancel non cancelable download for image with url: " + downloader.request().url() + ); + return false; + } + + PostImage previousImage = images.get(position); + if (downloader.request().url().equals(previousImage.imageUrl)) { + downloader.cancel(); + preloadingImages.remove(downloader); + return true; + } + + return false; + } + + @Override + public void onTap() { + // Don't mistake a swipe when the pager is disabled as a tap + if (viewPagerVisible) { + PostImage postImage = getCurrentPostImage(); + if (imageAutoLoad(postImage) && !postImage.spoiler()) { + if (postImage.type == MOVIE && callback.getImageMode(postImage) != VIDEO) { + callback.setImageMode(postImage, VIDEO, true); + } else { + if (callback.isImmersive()) { + callback.showSystemUI(true); + } else { + onExit(); + } + } + } else { + MultiImageView.Mode currentMode = callback.getImageMode(postImage); + if (postImage.type == STATIC && currentMode != BIGIMAGE) { + callback.setImageMode(postImage, BIGIMAGE, true); + } else if (postImage.type == GIF && currentMode != GIFIMAGE) { + callback.setImageMode(postImage, GIFIMAGE, true); + } else if (postImage.type == MOVIE && currentMode != VIDEO) { + callback.setImageMode(postImage, VIDEO, true); + } else if (postImage.type == IFRAME && currentMode != WEBVIEW) { + callback.setImageMode(postImage, WEBVIEW, true); + } else if ((postImage.type == PostImage.Type.OTHER) && currentMode != MultiImageView.Mode.OTHER) { + callback.setImageMode(postImage, MultiImageView.Mode.OTHER, true); + } else { + if (callback.isImmersive()) { + callback.showSystemUI(true); + } else { + onExit(); + } + } + } + } + } + + @Override + public void checkImmersive() { + if (callback.isImmersive()) { + callback.showSystemUI(true); + } + } + + @Override + public void onSwipeToCloseImage() { + onExit(); + } + + @Override + public void onSwipeToSaveImage() { + callback.saveImage(); + } + + @Override + public void hideProgress() { + callback.showProgress(false); + } + + @Override + public void onProgress(MultiImageView multiImageView, long current, long total) { + if (multiImageView.getPostImage() == getCurrentPostImage()) { + callback.showProgress(true); + callback.onLoadProgress(current / (float) total); + } + } + + @Override + public void onAudioLoaded(MultiImageView multiImageView) { + PostImage currentPostImage = getCurrentPostImage(); + if (multiImageView.getPostImage() == currentPostImage) { + muted = muted || !BackgroundUtils.isInForeground(); + callback.showVolumeMenuItem(true, muted); + callback.setVolume(currentPostImage, muted); + } + } + + @Override + public void onOpacityChanged(MultiImageView multiImageView, boolean hasOpacity, boolean opaque) { + PostImage currentPostImage = getCurrentPostImage(); + if (multiImageView.getPostImage() == currentPostImage) { + callback.showOpacityMenuItem(hasOpacity, opaque); + } + } + + private boolean imageAutoLoad(PostImage postImage) { + // Auto load the image when it is cached + return NetUtils.isCached(postImage.imageUrl) + || shouldLoadForNetworkType(ChanSettings.imageAutoLoadNetwork.get()); + } + + private boolean videoAutoLoad(PostImage postImage) { + return imageAutoLoad(postImage) && shouldLoadForNetworkType(ChanSettings.videoAutoLoadNetwork.get()); + } + + private void setTitle(PostImage postImage, int position) { + callback.setTitle(postImage, + position, + images.size(), + postImage.spoiler() && callback.getImageMode(postImage) == LOWRES + ); + } + + private List getOther(int position) { + List other = new ArrayList<>(3); + if (position - 1 >= 0) { + other.add(images.get(position - 1)); + } + if (position + 1 < images.size()) { + other.add(images.get(position + 1)); + } + return other; + } + + public void showImageSearchOptions(NavigationItem navigation) { + List> items = new ArrayList<>(); + List engines = ImageSearch.engines; + for (int i = 0; i < engines.size(); i++) { + ImageSearch imageSearch = engines.get(i); + items.add(new FloatingMenuItem<>(i, imageSearch.getName())); + } + ToolbarMenuItem overflowMenuItem = navigation.findOverflow(); + FloatingMenu menu = new FloatingMenu<>(context, overflowMenuItem.getView(), items); + menu.setCallback(new FloatingMenu.ClickCallback() { + @Override + public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { + ImageSearch selected = ImageSearch.engines.get(item.getId()); + try { + openLinkInBrowser(context, selected.getUrl(getCurrentPostImage())); + } catch (Exception e) { + showToast(context, "Couldn't create search url!"); + } + } + }); + menu.show(); + } + + private enum SwipeDirection { + Default, + Forward, + Backward + } + + public interface Callback { + void startPreviewInTransition(PostImage postImage); + + void startPreviewOutTransition(PostImage postImage); + + void setPreviewVisibility(boolean visible); + + void setPagerVisiblity(boolean visible); + + void setPagerItems(List images, int initialIndex); + + void setImageMode(PostImage postImage, MultiImageView.Mode mode, boolean center); + + void setVolume(PostImage postImage, boolean muted); + + void setTitle(PostImage postImage, int index, int count, boolean spoiler); + + void scrollToImage(PostImage postImage); + + void updatePreviewImage(PostImage postImage); + + void saveImage(); + + MultiImageView.Mode getImageMode(PostImage postImage); + + void showProgress(boolean show); + + void onLoadProgress(float progress); + + void showVolumeMenuItem(boolean show, boolean muted); + + void showOpacityMenuItem(boolean show, boolean opaque); + + void showDownloadMenuItem(boolean show); + + boolean isImmersive(); + + void showSystemUI(boolean show); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ImportExportSettingsPresenter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ImportExportSettingsPresenter.java new file mode 100644 index 0000000000..166a7f4eb2 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ImportExportSettingsPresenter.java @@ -0,0 +1,112 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.presenter; + +import static com.github.adamantcheese.chan.Chan.inject; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.core.repository.ImportExportRepository; +import com.github.k1rakishou.fsaf.file.ExternalFile; + +import javax.inject.Inject; + +public class ImportExportSettingsPresenter { + @Nullable + private ImportExportSettingsCallbacks callbacks; + + @Inject + ImportExportRepository importExportRepository; + + public ImportExportSettingsPresenter(@NonNull ImportExportSettingsCallbacks callbacks) { + inject(this); + this.callbacks = callbacks; + } + + public void onDestroy() { + this.callbacks = null; + } + + public void doExport(ExternalFile settingsFile, boolean isNewFile) { + importExportRepository.exportTo(settingsFile, isNewFile, new ImportExportRepository.ImportExportCallbacks() { + @Override + public void onSuccess(ImportExportRepository.ImportExport importExport) { + //called on background thread + + if (callbacks != null) { + callbacks.onSuccess(importExport); + } + } + + @Override + public void onNothingToImportExport(ImportExportRepository.ImportExport importExport) { + //called on background thread + + if (callbacks != null) { + callbacks.onError("There is nothing to export"); + } + } + + @Override + public void onError(Throwable error, ImportExportRepository.ImportExport importExport) { + //called on background thread + + if (callbacks != null) { + callbacks.onError("Error while trying to export settings = " + error.getMessage()); + } + } + }); + } + + public void doImport(ExternalFile settingsFile) { + importExportRepository.importFrom(settingsFile, new ImportExportRepository.ImportExportCallbacks() { + @Override + public void onSuccess(ImportExportRepository.ImportExport importExport) { + //called on background thread + + if (callbacks != null) { + callbacks.onSuccess(importExport); + } + } + + @Override + public void onNothingToImportExport(ImportExportRepository.ImportExport importExport) { + //called on background thread + + if (callbacks != null) { + callbacks.onError("There is nothing to import"); + } + } + + @Override + public void onError(Throwable error, ImportExportRepository.ImportExport importExport) { + //called on background thread + + if (callbacks != null) { + callbacks.onError("Error while trying to import settings = " + error.getMessage()); + } + } + }); + } + + public interface ImportExportSettingsCallbacks { + void onSuccess(ImportExportRepository.ImportExport importExport); + + void onError(String message); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/MediaSettingsControllerPresenter.kt b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/MediaSettingsControllerPresenter.kt new file mode 100644 index 0000000000..7b5fbf2d6b --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/MediaSettingsControllerPresenter.kt @@ -0,0 +1,197 @@ +package com.github.adamantcheese.chan.core.presenter + +import android.content.Context +import android.net.Uri +import android.widget.Toast +import com.github.adamantcheese.chan.R +import com.github.adamantcheese.chan.core.settings.ChanSettings +import com.github.adamantcheese.chan.ui.controller.settings.base_directory.SharedLocationSetupDelegateCallbacks +import com.github.adamantcheese.chan.ui.settings.SavedFilesBaseDirectory +import com.github.adamantcheese.chan.ui.widget.CancellableToast.showToast +import com.github.adamantcheese.chan.utils.AndroidUtils.getString +import com.github.adamantcheese.chan.utils.BackgroundUtils +import com.github.adamantcheese.chan.utils.BackgroundUtils.runOnMainThread +import com.github.adamantcheese.chan.utils.Logger +import com.github.k1rakishou.fsaf.FileChooser +import com.github.k1rakishou.fsaf.FileManager +import com.github.k1rakishou.fsaf.TraverseMode +import com.github.k1rakishou.fsaf.callback.directory.DirectoryChooserCallback +import com.github.k1rakishou.fsaf.file.AbstractFile + +class MediaSettingsControllerPresenter( + private val fileManager: FileManager, + private val fileChooser: FileChooser, + private var context: Context +) { + private var callbacks: SharedLocationSetupDelegateCallbacks? = null + + fun onCreate(callbacks: SharedLocationSetupDelegateCallbacks) { + this.callbacks = callbacks + } + + fun onDestroy() { + callbacks = null + } + + /** + * Select a directory where saved images will be stored via the SAF + */ + fun onSaveLocationUseSAFClicked() { + fileChooser.openChooseDirectoryDialog(object : DirectoryChooserCallback() { + override fun onResult(uri: Uri) { + val oldSavedFileBaseDirectory = + fileManager.newBaseDirectoryFile() + + if (fileManager.isBaseDirAlreadyRegistered(uri)) { + showToast(context, R.string.media_settings_base_directory_is_already_registered) + return + } + + Logger.d(TAG, "onSaveLocationUseSAFClicked dir = $uri") + ChanSettings.saveLocation.setSafBaseDir(uri) + ChanSettings.saveLocation.resetFileDir() + + withCallbacks { + updateSaveLocationViewText(uri.toString()) + } + + val newSavedFilesBaseDirectory = + fileManager.newBaseDirectoryFile() + + if (newSavedFilesBaseDirectory == null) { + showToast(context, R.string.media_settings_new_saved_files_base_dir_not_registered) + return + } + + withCallbacks { + askUserIfTheyWantToMoveOldSavedFilesToTheNewDirectory( + oldSavedFileBaseDirectory, + newSavedFilesBaseDirectory + ) + } + } + + override fun onCancel(reason: String) { + showToast(context, reason, Toast.LENGTH_LONG) + } + }) + } + + fun onSaveLocationChosen(dirPath: String) { + if (fileManager.isBaseDirAlreadyRegistered(dirPath)) { + showToast(context, R.string.media_settings_base_directory_is_already_registered) + return + } + + // It is important to get old base directory before assigning a new one, i.e. before + // ChanSettings.saveLocation.setFileBaseDir(dirPath) + val oldSaveFilesDirectory = fileManager.newBaseDirectoryFile() + + Logger.d(TAG, "onSaveLocationChosen dir = $dirPath") + ChanSettings.saveLocation.setFileBaseDir(dirPath) + + if (oldSaveFilesDirectory == null) { + showToast(context, R.string.done) + return + } + + val newSaveFilesDirectory = fileManager.newBaseDirectoryFile() + if (newSaveFilesDirectory == null) { + showToast(context, R.string.media_settings_new_saved_files_base_dir_not_registered) + return + } + + withCallbacks { + askUserIfTheyWantToMoveOldSavedFilesToTheNewDirectory( + oldSaveFilesDirectory, + newSaveFilesDirectory + ) + } + } + + fun moveOldFilesToTheNewDirectory( + oldBaseDirectory: AbstractFile?, + newBaseDirectory: AbstractFile? + ) { + if (oldBaseDirectory == null || newBaseDirectory == null) { + Logger.e(TAG, "One of the directories is null, cannot copy " + + "(oldBaseDirectory is null == " + (oldBaseDirectory == null) + ")" + + ", newLocalThreadsDirectory is null == " + (newBaseDirectory == null) + ")") + return + } + + Logger.d(TAG, + "oldLocalThreadsDirectory = " + oldBaseDirectory.getFullPath() + + ", newLocalThreadsDirectory = " + newBaseDirectory.getFullPath() + ) + + var filesCount = 0 + + fileManager.traverseDirectory(oldBaseDirectory, true, TraverseMode.OnlyFiles) { + ++filesCount + } + + if (filesCount == 0) { + showToast(context, R.string.media_settings_no_files_to_copy) + return + } + + withCallbacks { + showCopyFilesDialog(filesCount, oldBaseDirectory, newBaseDirectory) + } + } + + fun moveFilesInternal( + oldBaseDirectory: AbstractFile, + newBaseDirectory: AbstractFile + ) { + BackgroundUtils.runOnBackgroundThread { + val result = fileManager.copyDirectoryWithContent( + oldBaseDirectory, + newBaseDirectory, + true + ) { fileIndex, totalFilesCount -> + if (callbacks == null) { + // User left the MediaSettings screen, we need to cancel the file copying + return@copyDirectoryWithContent true + } + + withCallbacks { + updateLoadingViewText(getString( + R.string.media_settings_copying_file, + fileIndex, + totalFilesCount + )) + } + + return@copyDirectoryWithContent false + } + + withCallbacks { + onCopyDirectoryEnded( + oldBaseDirectory, + newBaseDirectory, + result + ) + } + } + } + + private fun withCallbacks(func: SharedLocationSetupDelegateCallbacks.() -> Unit) { + runOnMainThread { + callbacks?.let { + func(it) + } + } + } + + fun resetSaveLocationBaseDir() { + ChanSettings.saveLocation.resetActiveDir() + ChanSettings.saveLocation.resetFileDir() + ChanSettings.saveLocation.resetSafDir() + } + + companion object { + private const val TAG = "MediaSettingsControllerPresenter" + } +} \ No newline at end of file diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/OnPostLinkableClickedInterface.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/OnPostLinkableClickedInterface.java new file mode 100644 index 0000000000..a086982a3d --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/OnPostLinkableClickedInterface.java @@ -0,0 +1,8 @@ +package com.github.adamantcheese.chan.core.presenter; + +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.ui.text.spans.post_linkables.PostLinkable; + +public interface OnPostLinkableClickedInterface { + void onPostLinkableClicked(Post post, PostLinkable postLinkable); +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ReplyPresenter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ReplyPresenter.java new file mode 100644 index 0000000000..83c8f1570c --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ReplyPresenter.java @@ -0,0 +1,703 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.presenter; + +import static com.github.adamantcheese.chan.Chan.instance; +import static com.github.adamantcheese.chan.core.site.Site.BoardFeature.FORCED_ANONYMOUS; +import static com.github.adamantcheese.chan.core.site.Site.BoardFeature.POSTING_IMAGE; +import static com.github.adamantcheese.chan.core.site.Site.BoardFeature.POSTING_SPOILER; +import static com.github.adamantcheese.chan.features.html_styling.impl.PostThemedStyleActions.EXIF_INFO_STRING; +import static com.github.adamantcheese.chan.ui.widget.CancellableToast.showToast; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getColor; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getString; +import static com.github.adamantcheese.chan.utils.PostUtils.getReadableFileSize; +import static com.github.adamantcheese.chan.utils.StringUtils.replaceSpan; +import static com.github.adamantcheese.chan.utils.StringUtils.span; +import static java.nio.charset.StandardCharsets.UTF_8; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Typeface; +import android.text.*; +import android.text.style.*; +import android.view.View; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.exifinterface.media.ExifInterface; + +import com.github.adamantcheese.chan.R; +import com.github.adamantcheese.chan.controller.Controller; +import com.github.adamantcheese.chan.core.database.DatabaseSavedReplyManager; +import com.github.adamantcheese.chan.core.database.DatabaseUtils; +import com.github.adamantcheese.chan.core.manager.WatchManager; +import com.github.adamantcheese.chan.core.model.ChanThread; +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.model.orm.SavedReply; +import com.github.adamantcheese.chan.core.net.NetUtils; +import com.github.adamantcheese.chan.core.repository.LastReplyRepository; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.core.site.SiteApi; +import com.github.adamantcheese.chan.core.site.SiteAuthentication; +import com.github.adamantcheese.chan.core.site.http.Reply; +import com.github.adamantcheese.chan.core.site.http.ReplyResponse; +import com.github.adamantcheese.chan.core.site.sites.chan4.Chan4; +import com.github.adamantcheese.chan.features.html_styling.StyledHtml; +import com.github.adamantcheese.chan.ui.captcha.AuthenticationLayoutCallback; +import com.github.adamantcheese.chan.ui.captcha.CaptchaTokenHolder.CaptchaToken; +import com.github.adamantcheese.chan.ui.controller.WebViewController; +import com.github.adamantcheese.chan.ui.helper.ImagePickDelegate; +import com.github.adamantcheese.chan.ui.helper.PostHelper; +import com.github.adamantcheese.chan.utils.*; +import com.google.common.io.Files; + +import java.io.File; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import okhttp3.Call; +import okhttp3.HttpUrl; + +public class ReplyPresenter + implements AuthenticationLayoutCallback, ImagePickDelegate.ImagePickCallback, SiteApi.PostListener { + + public enum Page { + INPUT, + AUTHENTICATION, + LOADING + } + + private final Context context; + private static final Pattern QUOTE_PATTERN = Pattern.compile(">>\\d+"); + + private final ReplyPresenterCallback callback; + private Loadable loadable; + private Reply draft; + private AtomicReference replyCall; + + private Page page = Page.INPUT; + private boolean moreOpen; + private boolean previewOpen; + private boolean pickingFile; + private int selectedQuote = -1; + + public ReplyPresenter(Context context, ReplyPresenterCallback callback) { + this.context = context; + this.callback = callback; + } + + public void bindLoadable(Loadable loadable) { + unbindLoadable(); + this.loadable = loadable; + this.draft = loadable.draft; + + callback.loadDraftIntoViews(loadable.draft); + int length = draft.comment.getBytes(UTF_8).length; + callback.updateCommentCount(length, loadable.board.maxCommentChars, length > loadable.board.maxCommentChars); + callback.setCommentHint(loadable.isThreadMode()); + callback.showCommentCounter(loadable.board.maxCommentChars > 0); + callback.enableImageAttach(canPostImages()); + callback.enableName(canPostName()); + + switchPage(Page.INPUT); + + callback.openFlag(ChanSettings.alwaysShowPostOptions.get() && (loadable.board.countryFlags + || !loadable.board.boardFlags.isEmpty())); + callback.openPostOptions(ChanSettings.alwaysShowPostOptions.get()); + callback.openSubject(ChanSettings.alwaysShowPostOptions.get() && loadable.isCatalogMode()); + } + + public void unbindLoadable() { + if (loadable != null) { + callback.loadViewsIntoDraft(draft); + // null out the file/name; only one loadable should have a picked file at a time + draft.file = null; + draft.fileName = ""; + loadable = null; + draft = null; + } + + closeAll(); + } + + public boolean canPostImages() { + return loadable.site.boardFeature(POSTING_IMAGE, loadable.board); + } + + public boolean canPostSpoileredImages() { + return loadable.site.boardFeature(POSTING_SPOILER, loadable.board); + } + + public boolean canPostName() { + return !loadable.site.boardFeature(FORCED_ANONYMOUS, loadable.board); + } + + public Map getBoardFlags() { + return loadable.board.boardFlags; + } + + public void onOpen(boolean open) { + if (open) { + callback.focusComment(); + } + } + + public boolean onBack() { + if (page == Page.LOADING) { + return true; + } else if (page == Page.AUTHENTICATION) { + switchPage(Page.INPUT); + return true; + } else if (moreOpen) { + onMoreClicked(); + return true; + } + return false; + } + + public void onMoreClicked() { + moreOpen = !moreOpen; + callback.setExpanded(moreOpen); + callback.openPostOptions(moreOpen || ChanSettings.alwaysShowPostOptions.get()); + if (loadable.isCatalogMode()) { + callback.openSubject(moreOpen || ChanSettings.alwaysShowPostOptions.get()); + } + if (previewOpen) { + callback.openPreview(draft.file != null, draft.file); + } + callback.openCommentQuoteButton(moreOpen); + if (loadable.board.spoilers) { + callback.openCommentSpoilerButton(moreOpen); + } + if (loadable.board.codeTags) { + callback.openCommentCodeButton(moreOpen); + } + if (loadable.board.mathTags) { + callback.openCommentEqnButton(moreOpen); + callback.openCommentMathButton(moreOpen); + } + if (loadable.site instanceof Chan4 && StringUtils.isAnyIgnoreCase(loadable.boardCode, "jp", "vip")) { + callback.openCommentSJISButton(moreOpen); + } + if (loadable.board.countryFlags || !loadable.board.boardFlags.isEmpty()) { + callback.openFlag(moreOpen || ChanSettings.alwaysShowPostOptions.get()); + } + } + + public boolean isExpanded() { + return moreOpen; + } + + public void onAttachClicked(boolean longPressed) { + if (draft == null) return; + if (!pickingFile) { + if (previewOpen) { + callback.openPreview(false, null); + draft.file = null; + draft.fileName = ""; + previewOpen = false; + } else { + pickingFile = true; + callback.getImagePickDelegate().pick(this, longPressed); + } + } + } + + public void onSubmitClicked(boolean longClicked) { + long timeLeft = LastReplyRepository.getTimeUntilDraftPostable(loadable); + + boolean authenticateOnly = timeLeft > 0L && !longClicked; + if (!onPrepareToSubmit(authenticateOnly)) { + return; + } + + submitOrAuthenticate(authenticateOnly); + } + + private void submitOrAuthenticate(boolean authenticateOnly) { + if (loadable.site.api().postRequiresAuthentication(loadable)) { + switchPage(Page.AUTHENTICATION, true, !authenticateOnly); + } else { + makeSubmitCall(); + } + } + + private boolean onPrepareToSubmit(boolean isAuthenticateOnly) { + if (draft == null) return false; + callback.loadViewsIntoDraft(draft); + + if (!isAuthenticateOnly && (draft.comment.trim().isEmpty() && draft.file == null)) { + callback.openMessage(getString(R.string.reply_comment_empty)); + return false; + } + + draft.spoilerImage = draft.spoilerImage && loadable.board.spoilers; + draft.token = null; + + return true; + } + + // Do NOT use the loadable from ReplyPresenter in this method, as it is not guaranteed to match the loadable associated with the reply object + // Instead use the response's reply to get the loadable or generate a fresh loadable for a new thread + @Override + public void onSuccess(ReplyResponse replyResponse) { + if (replyResponse.posted) { + LastReplyRepository.putLastReply(replyResponse.originatingLoadable); + Loadable originatingLoadable = replyResponse.originatingLoadable; + Loadable newThreadLoadable = Loadable.forThread(originatingLoadable.board, + replyResponse.threadNo == 0 ? replyResponse.postNo : replyResponse.threadNo, + "Title will update shortly…" + ); + + if (ChanSettings.postPinThread.get()) { + WatchManager watchManager = instance(WatchManager.class); + if (originatingLoadable.isThreadMode()) { + ChanThread thread = callback.getThread(); + //ensure that the thread's loadable matches the one from the original reply, in case the user navigated away + if (thread != null && thread.loadable == originatingLoadable) { + // we know the OP, we're in the thread + if (thread.getOp().image() != null) { + originatingLoadable.thumbnailUrl = thread.getOp().image().getThumbnailUrl(); + } + } + watchManager.createPin(originatingLoadable); + } else { + // this is a new thread, we can construct an OP for initial display + Post fakeOP = new Post.Builder() + .subject(originatingLoadable.draft.subject) + .comment(originatingLoadable.draft.comment) + .board(originatingLoadable.board) + .no(replyResponse.postNo) + .opId(replyResponse.postNo) + .setUnixTimestampSeconds(System.currentTimeMillis() / 1000L) + .build(); + newThreadLoadable.title = PostHelper.getTitle(fakeOP, newThreadLoadable); + watchManager.createPin(newThreadLoadable); + } + } + + SavedReply savedReply = SavedReply.fromBoardNoPassword(originatingLoadable.board, + replyResponse.postNo, + originatingLoadable.draft.password + ); + DatabaseUtils.runTaskAsync(instance(DatabaseSavedReplyManager.class).saveReply(savedReply)); + + highlightQuotes(); + + originatingLoadable.draft.reset(true); + callback.loadDraftIntoViews(originatingLoadable.draft); + callback.onPosted(originatingLoadable.isCatalogMode(), newThreadLoadable); + } else if (replyResponse.requireAuthentication) { + switchPage(Page.AUTHENTICATION); + } else { + SpannableStringBuilder errorMessage = + new SpannableStringBuilder(span(getString(R.string.reply_error), new StyleSpan(Typeface.BOLD))); + if (replyResponse.errorMessage != null) { + Spannable error = new SpannableString(StyledHtml.fromHtml(replyResponse.errorMessage, null)); + // update colors for url spans; unfortunately that means re-making them + URLSpan[] spans = error.getSpans(0, error.length(), URLSpan.class); + for (URLSpan s : spans) { + String url = s.getURL(); + replaceSpan(error, s, new ClickableSpan() { + @Override + public void onClick(@NonNull View widget) { + callback.openController(new WebViewController(context, + "Link from posting error", + HttpUrl.get(url) + )); + } + + @Override + public void updateDrawState(@NonNull TextPaint ds) { + ds.setColor(getColor(R.color.md_red_500)); + ds.setUnderlineText(true); + ds.setFakeBoldText(true); + } + }); + } + errorMessage.append(": ").append(error); + } + + Logger.w(this, "onPostComplete error", errorMessage); + switchPage(Page.INPUT); + callback.openMessage(errorMessage); + } + } + + @Override + public void onUploadProgress(int percent) { + //called on a background thread! + BackgroundUtils.runOnMainThread(() -> callback.onUploadingProgress(percent)); + } + + @Override + public void onFailure(Exception exception) { + Logger.w(this, "onPostError", exception); + + switchPage(Page.INPUT); + + String errorMessage = getString(R.string.reply_error); + if (exception != null) { + String message = exception.getMessage(); + if (NetUtils.isCancelledException(exception)) { + message = "Cancelled submission!"; + } + if (message != null) { + errorMessage = getString(R.string.reply_error_message, message); + } + } + + callback.openMessage(errorMessage); + } + + @Override + public void onAuthenticationComplete( + CaptchaToken token, boolean autoReply + ) { + if (draft == null) { + switchPage(Page.INPUT); + return; + } + + draft.token = token; + + long timeLeft = LastReplyRepository.getTimeUntilDraftPostable(loadable); + if (timeLeft > 0L && !autoReply) { + String errorMessage = getString(R.string.reply_error_message_timer, timeLeft); + switchPage(Page.INPUT); + callback.openMessage(errorMessage); + return; + } + + if (autoReply) { + makeSubmitCall(); + } else { + switchPage(Page.INPUT); + } + } + + @Override + public void onAuthenticationFailed(Throwable error) { + callback.showAuthenticationFailedError(error); + switchPage(Page.INPUT); + } + + @Override + public void onFallbackToV1CaptchaView(boolean autoReply) { + callback.onFallbackToV1CaptchaView(autoReply); + } + + public void onCommentTextChanged(CharSequence text) { + int length = text.toString().getBytes(UTF_8).length; + callback.updateCommentCount(length, loadable.board.maxCommentChars, length > loadable.board.maxCommentChars); + } + + public void onTextChanged() { + callback.loadViewsIntoDraft(draft); + } + + public void onSelectionChanged() { + highlightQuotes(); + } + + public void filenameNewClicked() { + if (draft == null) return; + draft.fileName = System.currentTimeMillis() + "." + Files.getFileExtension(draft.fileName); + callback.loadDraftIntoViews(draft); + } + + public void quote(Post post, boolean withText) { + quote(post, withText ? post.comment : ""); + } + + public void quote(Post post, CharSequence text) { + handleQuote(post, text.toString()); + } + + private void handleQuote(Post post, String textQuote) { + if (draft == null) return; + callback.loadViewsIntoDraft(draft); + + StringBuilder insert = new StringBuilder(); + int selectStart = callback.getSelectionStart(); + if (selectStart - 1 >= 0 + && selectStart - 1 < draft.comment.length() + && draft.comment.charAt(selectStart - 1) != '\n') { + insert.append('\n'); + } + + if (post != null && !draft.comment.contains(">>" + post.no)) { + insert.append(">>").append(post.no).append("\n"); + } + + if (!TextUtils.isEmpty(textQuote)) { + textQuote = textQuote.replace(EXIF_INFO_STRING, "").trim(); + String[] lines = textQuote.split("\n+"); + // matches for >>123, >>123 (text), >>>/fit/123 + final Pattern quotePattern = Pattern.compile("^>>(>/[a-z0-9]+/)?\\d+.*$"); + for (String line : lines) { + // do not include post no from quoted post + if (!quotePattern.matcher(line).matches()) { + insert.append(">").append(line).append("\n"); + } + } + } + + draft.comment = new StringBuilder(draft.comment).insert(selectStart, insert).toString(); + + callback.loadDraftIntoViews(draft); + callback.adjustSelection(selectStart, insert.length()); + + highlightQuotes(); + } + + @Override + public void onFilePicked(String name, File file) { + pickingFile = false; + if (draft == null) return; + draft.file = file; + draft.fileName = name; + if (ChanSettings.alwaysSetNewFilename.get()) { + filenameNewClicked(); + } + try { + ExifInterface exif = new ExifInterface(file.getAbsolutePath()); + int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); + if (orientation != ExifInterface.ORIENTATION_UNDEFINED) { + callback.openMessage(getString(R.string.file_has_orientation_exif_data)); + } + } catch (Exception ignored) { + } + if (BitmapUtils.getImageFormat(file) == Bitmap.CompressFormat.WEBP) { + callback.openMessage(getString(R.string.file_type_may_not_be_supported)); + } + showPreview(draft.fileName, file); + } + + @Override + public void onFilePickError(boolean canceled) { + pickingFile = false; + if (!canceled) { + showToast(context, R.string.reply_file_open_failed, Toast.LENGTH_LONG); + } + } + + public void closeAll() { + moreOpen = false; + previewOpen = false; + selectedQuote = -1; + callback.openMessage(null); + callback.setExpanded(false); + callback.openSubject(loadable != null && ChanSettings.alwaysShowPostOptions.get() && loadable.isCatalogMode()); + callback.openFlag(loadable != null + && (loadable.board.countryFlags || !loadable.board.boardFlags.isEmpty()) + && ChanSettings.alwaysShowPostOptions.get()); + callback.openCommentQuoteButton(false); + callback.openCommentSpoilerButton(false); + callback.openCommentCodeButton(false); + callback.openCommentEqnButton(false); + callback.openCommentMathButton(false); + callback.openCommentSJISButton(false); + callback.openPostOptions(ChanSettings.alwaysShowPostOptions.get()); + callback.openPreview(false, null); + callback.openPreviewMessage(false, null); + callback.destroyCurrentAuthentication(); + } + + private void makeSubmitCall() { + replyCall = loadable.site.api().post(loadable, this); + switchPage(Page.LOADING); + } + + public void cancelReply() { + if (replyCall != null && replyCall.get() != null) { + replyCall.get().cancel(); + replyCall = null; + } + } + + public void switchPage(Page page) { + switchPage(page, true, true); + } + + public void switchPage(Page page, boolean useV2NoJsCaptcha, boolean autoReply) { + if (!useV2NoJsCaptcha || this.page != page) { + this.page = page; + switch (page) { + case LOADING: + case INPUT: + callback.setPage(page); + break; + case AUTHENTICATION: + callback.setPage(Page.AUTHENTICATION); + SiteAuthentication authentication = loadable.site.api().postAuthenticate(loadable); + + // cleanup resources tied to the new captcha layout/presenter + callback.destroyCurrentAuthentication(); + + try { + // If the user doesn't have WebView installed it will throw an error + callback.initializeAuthentication(loadable, authentication, this, useV2NoJsCaptcha, autoReply); + } catch (Throwable error) { + onAuthenticationFailed(error); + } + + break; + } + } + } + + public Page getPage() { + return page; + } + + private void highlightQuotes() { + if (draft == null) return; + Matcher matcher = QUOTE_PATTERN.matcher(draft.comment); + + // Find all occurrences of >>\d+ with start and end between selectionStart + int no = -1; + while (matcher.find()) { + int selectStart = callback.getSelectionStart(); + if (matcher.start() <= selectStart && matcher.end() >= selectStart - 1) { + String quote = matcher.group().substring(2); + try { + no = Integer.parseInt(quote); + break; + } catch (NumberFormatException ignored) { + } + } + } + + // Allow no = -1 removing the highlight + if (no != selectedQuote) { + selectedQuote = no; + callback.highlightPostNo(no); + } + } + + private void showPreview(String name, File file) { + callback.openPreview(true, file); + callback.setFileName(name); + previewOpen = true; + + boolean probablyWebm = "webm".equalsIgnoreCase(Files.getFileExtension(name)); + int maxSize = probablyWebm ? loadable.board.maxWebmSize : loadable.board.maxFileSize; + //if the max size is undefined for the board, ignore this message + if (file != null && file.length() > maxSize && maxSize != -1) { + String fileSize = getReadableFileSize(file.length()); + int stringResId = probablyWebm ? R.string.reply_webm_too_big : R.string.reply_file_too_big; + callback.openPreviewMessage(true, getString(stringResId, fileSize, getReadableFileSize(maxSize))); + } else { + callback.openPreviewMessage(false, null); + } + } + + public void onImageOptionsApplied() { + if (draft == null) return; + showPreview(draft.fileName, draft.file); + } + + public boolean isAttachedFileSupportedForReencoding() { + if (draft == null || draft.file == null) { + return false; + } + + return BitmapUtils.isFileSupportedForReencoding(draft.file); + } + + public interface ReplyPresenterCallback { + void loadViewsIntoDraft(Reply draft); + + void loadDraftIntoViews(Reply draft); + + int getSelectionStart(); + + void adjustSelection(int start, int amount); + + void setPage(Page page); + + void initializeAuthentication( + Loadable loadable, + SiteAuthentication authentication, + AuthenticationLayoutCallback callback, + boolean useV2NoJsCaptcha, + boolean autoReply + ); + + void openMessage(CharSequence message); + + void onPosted(boolean newThread, Loadable newThreadLoadable); + + void setCommentHint(boolean isThreadMode); + + void showCommentCounter(boolean show); + + void setExpanded(boolean expanded); + + void openPostOptions(boolean open); + + void openSubject(boolean open); + + void openFlag(boolean open); + + void openCommentQuoteButton(boolean open); + + void openCommentSpoilerButton(boolean open); + + void openCommentCodeButton(boolean open); + + void openCommentEqnButton(boolean open); + + void openCommentMathButton(boolean open); + + void openCommentSJISButton(boolean open); + + void setFileName(String fileName); + + void updateCommentCount(int count, int maxCount, boolean over); + + void openPreview(boolean show, File previewFile); + + void openPreviewMessage(boolean show, String message); + + void highlightPostNo(int no); + + ImagePickDelegate getImagePickDelegate(); + + ChanThread getThread(); + + void focusComment(); + + void onUploadingProgress(int percent); + + void onFallbackToV1CaptchaView(boolean autoReply); + + void destroyCurrentAuthentication(); + + void showAuthenticationFailedError(Throwable error); + + void enableImageAttach(boolean canAttach); + + void enableName(boolean canName); + + void openController(Controller controller); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/SiteSetupPresenter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/SiteSetupPresenter.java new file mode 100644 index 0000000000..eef9f35d57 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/SiteSetupPresenter.java @@ -0,0 +1,56 @@ +package com.github.adamantcheese.chan.core.presenter; + +import static com.github.adamantcheese.chan.Chan.inject; + +import com.github.adamantcheese.chan.core.database.DatabaseBoardManager; +import com.github.adamantcheese.chan.core.database.DatabaseUtils; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.core.site.SiteSetting; + +import java.util.List; + +import javax.inject.Inject; + +public class SiteSetupPresenter { + private final Callback callback; + private final Site site; + private final boolean hasLogin; + + @Inject + DatabaseBoardManager databaseBoardManager; + + public SiteSetupPresenter(Callback callback, Site site) { + this.callback = callback; + this.site = site; + + inject(this); + + hasLogin = site.siteFeature(Site.SiteFeature.LOGIN); + + if (hasLogin) { + callback.showLogin(); + } + + List> settings = site.settings(); + if (!settings.isEmpty()) { + callback.showSettings(settings); + } + } + + public void show() { + callback.setBoardCount(DatabaseUtils.runTask(databaseBoardManager.getSiteSavedBoards(site)).size()); + if (hasLogin) { + callback.setIsLoggedIn(site.api().isLoggedIn()); + } + } + + public interface Callback { + void setBoardCount(int boardCount); + + void showLogin(); + + void setIsLoggedIn(boolean isLoggedIn); + + void showSettings(List> settings); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/SitesSetupPresenter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/SitesSetupPresenter.java new file mode 100644 index 0000000000..eb3eedc030 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/SitesSetupPresenter.java @@ -0,0 +1,129 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.presenter; + +import static com.github.adamantcheese.chan.Chan.inject; +import static com.github.adamantcheese.chan.ui.widget.CancellableToast.showToast; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getString; + +import android.content.Context; +import android.widget.Toast; + +import com.github.adamantcheese.chan.R; +import com.github.adamantcheese.chan.StartActivity; +import com.github.adamantcheese.chan.core.manager.BoardManager; +import com.github.adamantcheese.chan.core.repository.SiteRepository; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.utils.Logger; + +import java.util.*; + +import javax.inject.Inject; + +public class SitesSetupPresenter + implements Observer { + private final Context context; + + @Inject + private SiteRepository siteRepository; + @Inject + private BoardManager boardManager; + + private final Callback callback; + + private final SiteRepository.Sites sites; + private final List sitesShown = new ArrayList<>(); + + public SitesSetupPresenter(Context context, Callback callback) { + inject(this); + this.context = context; + this.callback = callback; + + sites = siteRepository.all(); + sites.addObserver(this); + + sitesShown.addAll(sites.getAllInOrder()); + + updateSitesInUi(); + } + + public void destroy() { + sites.deleteObserver(this); + } + + @Override + public void update(Observable o, Object arg) { + if (o == sites) { + sitesShown.clear(); + sitesShown.addAll(sites.getAllInOrder()); + updateSitesInUi(); + } + } + + public void move(int from, int to) { + Site item = sitesShown.remove(from); + sitesShown.add(to, item); + saveOrder(); + updateSitesInUi(); + } + + public void onAddClicked(Class siteClass) { + Site newSite = siteRepository.createFromClass(siteClass); + + sitesShown.add(newSite); + saveOrder(); + + updateSitesInUi(); + } + + private void saveOrder() { + siteRepository.updateSiteOrderingAsync(sitesShown); + } + + private void updateSitesInUi() { + List r = new ArrayList<>(); + for (Site site : sitesShown) { + r.add(new SiteBoardCount(site, boardManager.getSiteSavedBoards(site).size())); + } + callback.setSites(r); + } + + public void removeSite(Site site) { + try { + siteRepository.removeSite(site); + ((StartActivity) context).restartApp(); + } catch (Throwable error) { + Logger.e(this, "Could not delete site: " + site.name(), error); + String message = getString(R.string.could_not_remove_site_error_message, site.name(), error.getMessage()); + showToast(context, message, Toast.LENGTH_LONG); + } + } + + public static class SiteBoardCount { + public Site site; + public int boardCount; + + public SiteBoardCount(Site site, int boardCount) { + this.site = site; + this.boardCount = boardCount; + } + } + + public interface Callback { + void setSites(List sites); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ThreadPresenter.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ThreadPresenter.java new file mode 100644 index 0000000000..da52d4c2c8 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/presenter/ThreadPresenter.java @@ -0,0 +1,1336 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.presenter; + +import static com.github.adamantcheese.chan.Chan.inject; +import static com.github.adamantcheese.chan.ui.cell.PostCellInterface.PostCellCallback.PostOptions.*; +import static com.github.adamantcheese.chan.ui.widget.CancellableToast.showToast; +import static com.github.adamantcheese.chan.ui.widget.DefaultAlertDialog.getDefaultAlertBuilder; +import static com.github.adamantcheese.chan.utils.AndroidUtils.*; + +import android.app.SearchManager; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.util.MalformedJsonException; +import android.view.*; +import android.widget.*; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; + +import com.github.adamantcheese.chan.R; +import com.github.adamantcheese.chan.StartActivity; +import com.github.adamantcheese.chan.core.database.*; +import com.github.adamantcheese.chan.core.manager.*; +import com.github.adamantcheese.chan.core.model.*; +import com.github.adamantcheese.chan.core.model.orm.*; +import com.github.adamantcheese.chan.core.net.*; +import com.github.adamantcheese.chan.core.repository.PageRepository; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.core.settings.ChanSettings.PostViewMode; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.core.site.archives.ExternalSiteArchive; +import com.github.adamantcheese.chan.core.site.http.DeleteRequest; +import com.github.adamantcheese.chan.core.site.http.DeleteResponse; +import com.github.adamantcheese.chan.core.site.loader.ChanThreadLoader; +import com.github.adamantcheese.chan.core.site.parser.comment_action.linkdata.*; +import com.github.adamantcheese.chan.features.embedding.EmbeddingEngine; +import com.github.adamantcheese.chan.features.embedding.embedders.base.Embedder; +import com.github.adamantcheese.chan.ui.adapter.PostAdapter; +import com.github.adamantcheese.chan.ui.adapter.PostsFilter; +import com.github.adamantcheese.chan.ui.cell.PostCellInterface; +import com.github.adamantcheese.chan.ui.cell.ThreadStatusCell; +import com.github.adamantcheese.chan.ui.helper.PostHelper; +import com.github.adamantcheese.chan.ui.layout.ArchivesLayout; +import com.github.adamantcheese.chan.ui.layout.ThreadListLayout; +import com.github.adamantcheese.chan.ui.text.spans.post_linkables.*; +import com.github.adamantcheese.chan.ui.view.FloatingMenu; +import com.github.adamantcheese.chan.ui.view.FloatingMenuItem; +import com.github.adamantcheese.chan.utils.*; +import com.github.adamantcheese.chan.utils.RecyclerUtils.RecyclerViewPosition; + +import java.util.*; + +import javax.inject.Inject; +import javax.net.ssl.SSLException; + +import okhttp3.HttpUrl; + +public class ThreadPresenter + implements NetUtilsClasses.ResponseResult, PostAdapter.PostAdapterCallback, + PostCellInterface.PostCellCallback, ThreadStatusCell.Callback, + ThreadListLayout.ThreadListLayoutPresenterCallback, ArchivesLayout.Callback, + ProgressResponseBody.ProgressListener, OnPostLinkableClickedInterface { + @Inject + private WatchManager watchManager; + + @Inject + private DatabaseLoadableManager databaseLoadableManager; + + @Inject + private DatabaseSavedReplyManager databaseSavedReplyManager; + + @Inject + private BoardManager boardManager; + + private final ThreadPresenterCallback threadPresenterCallback; + private Loadable loadable; + private ChanThreadLoader chanLoader; + private boolean searchOpen; + private String searchQuery; + private PostsFilter.PostsOrder postsOrder = PostsFilter.PostsOrder.BUMP_ORDER; + private final Context context; + + public ThreadPresenter(Context context, ThreadPresenterCallback callback) { + this.context = context; + threadPresenterCallback = callback; + inject(this); + } + + public void showNoContent() { + threadPresenterCallback.showEmpty(); + } + + public synchronized void bindLoadable(Loadable loadable) { + if (loadable != this.loadable) { + unbindLoadable(); + + this.loadable = loadable; + + loadable.lastLoadDate = + ChanSettings.showHistory.get() ? GregorianCalendar.getInstance().getTime() : loadable.lastLoadDate; + DatabaseUtils.runTaskAsync(databaseLoadableManager.updateLoadable(loadable, false)); + + chanLoader = ChanLoaderManager.obtain(loadable, this); + chanLoader.addProgressListener(this); + threadPresenterCallback.showLoading(); + + if (chanLoader.getThread() == null) { + chanLoader.requestFreshData(); + } else { + refreshUI(); + } + } + } + + public synchronized void unbindLoadable() { + if (isBound()) { + chanLoader.clearTimer(); + chanLoader.removeProgressListener(this); + ChanLoaderManager.release(chanLoader, this); + chanLoader = null; + loadable = null; + + threadPresenterCallback.showLoading(); + } + } + + @Override + public void onDownloadProgress(HttpUrl source, long bytesRead, long contentLength, boolean start, boolean done) { + threadPresenterCallback.onDownloadProgress(source, bytesRead, contentLength, start, done); + } + + public void updateDatabaseLoadable() { + DatabaseUtils.runTaskAsync(databaseLoadableManager.updateLoadable(loadable, false)); + } + + public boolean isBound() { + return chanLoader != null; + } + + public void requestData() { + BackgroundUtils.ensureMainThread(); + + if (isBound()) { + threadPresenterCallback.refreshUI(); + threadPresenterCallback.showLoading(); + chanLoader.requestFreshData(); + } + } + + public void refreshUI() { + onSuccess(chanLoader.getThread()); + chanLoader.requestAdditionalData(); + } + + public void onForegroundChanged(boolean foreground) { + if (isBound()) { + if (foreground && isWatching()) { + chanLoader.requestAdditionalData(); + if (chanLoader.getThread() != null) { + // Show loading indicator in the status cell + showPosts(); + } + } else { + chanLoader.clearTimer(); + } + } + } + + public void onSearchVisibilityChanged(boolean visible) { + searchOpen = visible; + threadPresenterCallback.showSearch(visible); + if (!visible) { + searchQuery = null; + } + + if (isBound() && chanLoader.getThread() != null && !visible) { + showPosts(); + } + } + + public void onSearchEntered(String entered) { + searchQuery = entered; + if (isBound() && chanLoader.getThread() != null) { + showPosts(); + if (TextUtils.isEmpty(entered)) { + threadPresenterCallback.setSearchStatus(null, true, false); + } else { + threadPresenterCallback.setSearchStatus(entered, false, false); + } + } + } + + public void setOrder(PostsFilter.PostsOrder postsOrder) { + if (this.postsOrder != postsOrder) { + this.postsOrder = postsOrder; + if (isBound() && chanLoader.getThread() != null) { + scrollTo(0, false); + showPosts(); + } + } + } + + public synchronized void showAlbum() { + List posts = threadPresenterCallback.getDisplayingPosts(); + RecyclerViewPosition pos = threadPresenterCallback.getCurrentPosition(); + + if (posts.isEmpty()) return; + + List images = new ArrayList<>(); + PostImage target = posts.get(pos.index).image(); + for (Post post : posts) { + for (PostImage image : post.images) { + if (image.type != PostImage.Type.IFRAME) { + images.add(image); + } + } + } + + threadPresenterCallback.showAlbum(images, target); + } + + @Override + public Loadable getLoadable() { + return loadable; + } + + @Override + public String getSearchQuery() { + return searchQuery; + } + + /* + * ChanThreadLoader callbacks + */ + @Override + public void onSuccess(ChanThread result) { + BackgroundUtils.ensureMainThread(); + + if (isBound()) { + if (isWatching()) { + chanLoader.setTimer(); + } else { + chanLoader.clearTimer(); + } + } else { + return; + } + + //allow for search refreshes inside the catalog + if (result.loadable.isCatalogMode() && !TextUtils.isEmpty(searchQuery)) { + onSearchEntered(searchQuery); + } else { + showPosts(); + } + + if (loadable.isThreadMode()) { + List posts = result.getPosts(); + int postsCount = posts.size(); + + // calculate how many new posts since last load + int more = 0; + for (int i = 0; i < postsCount; i++) { + Post p = posts.get(i); + if (p.no == loadable.lastLoaded) { + // end index minus last loaded index + more = (postsCount - 1) - i; + break; + } + } + + // update last loaded post + loadable.lastLoaded = posts.get(postsCount - 1).no; + + // this loadable is fresh, for new post reasons set it to the last loaded + if (loadable.lastViewed == -1) { + loadable.lastViewed = loadable.lastLoaded; + } + + if (loadable.no == result.loadable.no) { + threadPresenterCallback.showNewPostsSnackbar(loadable, more); + } + } + + if (loadable.markedNo >= 0) { + Post markedPost = PostUtils.findPostById(loadable.markedNo, chanLoader.getThread()); + if (markedPost != null) { + highlightPostNo(markedPost.no); + if (BackgroundUtils.isInForeground()) { + scrollToPost(markedPost, false); + } + if (StartActivity.loadedFromURL) { + BackgroundUtils.runOnMainThread(() -> scrollToPost(markedPost, false), 1000); + StartActivity.loadedFromURL = false; + } + } + loadable.markedNo = -1; + } + + updateDatabaseLoadable(); + + threadPresenterCallback.updateSubtitle(result.summarize(false)); + } + + @Override + public void onFailure(Exception error) { + Logger.w(this, "onChanLoaderError()"); + + //by default, a network error has occurred if the exception field is not null + int errorMessageResId; + if (error instanceof SSLException) { + errorMessageResId = R.string.thread_load_failed_ssl; + } else if (error instanceof NetUtilsClasses.HttpCodeException) { + if (((NetUtilsClasses.HttpCodeException) error).isServerErrorNotFound()) { + errorMessageResId = R.string.thread_load_failed_not_found; + } else { + errorMessageResId = R.string.thread_load_failed_server; + } + } else if (error instanceof MalformedJsonException) { + errorMessageResId = R.string.thread_load_failed_parsing; + } else { + errorMessageResId = R.string.thread_load_failed_network; + } + + threadPresenterCallback.showError(errorMessageResId); + } + + /* + * PostAdapter callbacks + */ + @Override + public void onListScrolledToBottom() { + if (!isBound() || loadable.isCatalogMode()) return; + if (chanLoader.getThread() != null && !chanLoader.getThread().getPosts().isEmpty()) { + List posts = chanLoader.getThread().getPosts(); + loadable.lastViewed = posts.get(posts.size() - 1).no; + } + + watchManager.onBottomPostViewed(watchManager.getPinByLoadable(loadable)); + threadPresenterCallback.showNewPostsSnackbar(loadable, -1); + + // Update the last seen indicator + showPosts(); + } + + public void onNewPostsViewClicked() { + if (!isBound()) return; + Post post = PostUtils.findPostById(loadable.lastViewed, chanLoader.getThread()); + int position = -1; + if (post != null) { + List posts = threadPresenterCallback.getDisplayingPosts(); + for (int i = 0; i < posts.size(); i++) { + Post needle = posts.get(i); + if (post.no == needle.no) { + position = i; + break; + } + } + } + // scroll to post after last viewed + threadPresenterCallback.smoothScrollNewPosts(position + 1); + } + + public void scrollTo(int displayPosition, boolean smooth) { + threadPresenterCallback.scrollTo(displayPosition, smooth); + } + + public void scrollToImage(PostImage postImage, boolean smooth) { + if (!searchOpen) { + int position = -1; + List posts = threadPresenterCallback.getDisplayingPosts(); + + out: + for (int i = 0; i < posts.size(); i++) { + Post post = posts.get(i); + for (PostImage image : post.images) { + if (image == postImage) { + position = i; + break out; + } + } + } + if (position >= 0) { + scrollTo(position, smooth); + } + } + } + + public void scrollToPost(Post needle, boolean smooth) { + int position = -1; + List posts = threadPresenterCallback.getDisplayingPosts(); + for (int i = 0; i < posts.size(); i++) { + Post post = posts.get(i); + if (post.no == needle.no) { + position = i; + break; + } + } + if (position >= 0) { + scrollTo(position, smooth); + } + } + + public void highlightPostNo(int postNo) { + threadPresenterCallback.highlightPostNo(postNo); + } + + public void selectPostImage(PostImage postImage) { + List posts = threadPresenterCallback.getDisplayingPosts(); + for (Post post : posts) { + for (PostImage image : post.images) { + if (image == postImage) { + scrollToPost(post, false); + highlightPostNo(post.no); + return; + } + } + } + } + + public Post getPostFromPostImage(PostImage postImage) { + List posts = threadPresenterCallback.getDisplayingPosts(); + for (Post post : posts) { + for (PostImage image : post.images) { + if (image == postImage) { + return post; + } + } + } + return null; + } + + /* + * PostView callbacks + */ + @Override + public void onPostClicked(Post post) { + if (!isBound()) return; + if (loadable.isCatalogMode()) { + threadPresenterCallback.showThread(Loadable.forThread(post.board, + post.no, + PostHelper.getTitle(post, loadable) + )); + } + } + + @Override + public void onPostDoubleClicked(Post post) { + if (isBound() && loadable.isThreadMode()) { + if (searchOpen) { + searchQuery = null; + showPosts(); + threadPresenterCallback.setSearchStatus(null, false, true); + threadPresenterCallback.showSearch(false); + highlightPostNo(post.no); + scrollToPost(post, false); + } else { + threadPresenterCallback.postClicked(post); + } + } + } + + @Override + public void onThumbnailClicked(PostImage postImage, ImageView thumbnail) { + if (!isBound()) return; + List images = new ArrayList<>(); + int index = -1; + List posts = threadPresenterCallback.getDisplayingPosts(); + PostViewMode viewMode = threadPresenterCallback.getPostViewMode(); + for (Post post : posts) { + // for card mode, only add the displayed image + // otherwise add all images + if (viewMode != PostViewMode.LIST) { + if (post.image() == null) continue; + if (!post.deleted || post.image().isInlined || NetUtils.isCached(post.image().imageUrl)) { + //deleted posts always have 404'd images, but let it through if the file exists in cache + images.add(post.image()); + if (post.image().equals(postImage)) { + index = images.size() - 1; + } + } + } else { + for (PostImage image : post.images) { + if (!post.deleted || image.isInlined || NetUtils.isCached(image.imageUrl)) { + //deleted posts always have 404'd images, but let it through if the file exists in cache + images.add(image); + if (image.equals(postImage)) { + index = images.size() - 1; + } + } + } + } + } + + if (!images.isEmpty()) { + threadPresenterCallback.showImages(images, index, loadable, thumbnail); + } + } + + @Override + public Object onPopulatePostOptions( + Post post, List> menu, List> extraMenu + ) { + if (!isBound()) return null; + + boolean isSaved = databaseSavedReplyManager.isSaved(post.board, post.no); + + if (loadable.isCatalogMode() + && watchManager.getPinByLoadable(Loadable.forThread(post.board, + post.no, + PostHelper.getTitle(post, loadable), + false + )) == null + && !(loadable.site instanceof ExternalSiteArchive)) { + menu.add(new FloatingMenuItem<>(POST_OPTION_PIN, R.string.action_pin)); + } + + if (loadable.site.siteFeature(Site.SiteFeature.POSTING) && !loadable.isCatalogMode()) { + menu.add(new FloatingMenuItem<>(POST_OPTION_QUOTE, R.string.post_quote)); + menu.add(new FloatingMenuItem<>(POST_OPTION_QUOTE_TEXT, R.string.post_quote_text)); + } + + if (loadable.site.siteFeature(Site.SiteFeature.POST_REPORT)) { + menu.add(new FloatingMenuItem<>(POST_OPTION_REPORT, R.string.post_report)); + } + + if (!(loadable.site instanceof ExternalSiteArchive)) { + if ((loadable.isCatalogMode() || (loadable.isThreadMode() && !post.isOP))) { + if (!post.filterStub) { + menu.add(new FloatingMenuItem<>(POST_OPTION_HIDE, R.string.post_hide)); + } + menu.add(new FloatingMenuItem<>(POST_OPTION_REMOVE, R.string.post_remove)); + } + } + + if (loadable.isThreadMode()) { + if (!TextUtils.isEmpty(post.id)) { + menu.add(new FloatingMenuItem<>(POST_OPTION_SHOW_ID, R.string.post_show_id)); + menu.add(new FloatingMenuItem<>(POST_OPTION_HIGHLIGHT_ID, R.string.post_highlight_id)); + } + + if (!TextUtils.isEmpty(post.tripcode)) { + menu.add(new FloatingMenuItem<>(POST_OPTION_SHOW_TRIPCODE, R.string.post_show_tripcode)); + menu.add(new FloatingMenuItem<>(POST_OPTION_HIGHLIGHT_TRIPCODE, R.string.post_highlight_tripcode)); + } + } + + menu.add(new FloatingMenuItem<>(POST_OPTION_COPY, R.string.post_copy_menu)); + + if (loadable.site.siteFeature(Site.SiteFeature.POST_DELETE) && isSaved) { + menu.add(new FloatingMenuItem<>(POST_OPTION_DELETE, R.string.post_delete)); + } + + if (ChanSettings.accessibleInfo.get()) { + menu.add(new FloatingMenuItem<>(POST_OPTION_INFO, R.string.post_info)); + } else { + extraMenu.add(new FloatingMenuItem<>(POST_OPTION_INFO, R.string.post_info)); + } + + menu.add(new FloatingMenuItem<>(POST_OPTION_EXTRA, R.string.post_more)); + + extraMenu.add(new FloatingMenuItem<>(POST_OPTION_OPEN_BROWSER, R.string.action_open_browser)); + extraMenu.add(new FloatingMenuItem<>(POST_OPTION_SHARE, R.string.post_share)); + + //if the filter menu only has a single option we place just that option in the root menu + //in some cases a post will have nothing in it to filter (for example a post with no text and an image + //that is removed by a filter), in such cases there is no filter menu option. + List> filterMenu = populateFilterMenuOptions(post); + if (filterMenu.size() > 1) { + extraMenu.add(new FloatingMenuItem<>(POST_OPTION_FILTER, R.string.post_filter)); + } else if (filterMenu.size() == 1) { + FloatingMenuItem menuItem = filterMenu.remove(0); + extraMenu.add(new FloatingMenuItem<>(menuItem.getId(), "Filter " + menuItem.getText().toLowerCase())); + } + + if (!(loadable.site instanceof ExternalSiteArchive)) { + extraMenu.add(new FloatingMenuItem<>(isSaved ? POST_OPTION_UNSAVE : POST_OPTION_SAVE, + isSaved ? R.string.unmark_as_my_post : R.string.mark_as_my_post + )); + } + + return POST_OPTION_EXTRA; + } + + public void onPostOptionClicked(View anchor, Post post, PostOptions id, boolean inPopup) { + switch (id) { + case POST_OPTION_QUOTE: + threadPresenterCallback.hidePostsPopup(); + threadPresenterCallback.quote(post, false); + break; + case POST_OPTION_QUOTE_TEXT: + threadPresenterCallback.hidePostsPopup(); + threadPresenterCallback.quote(post, true); + break; + case POST_OPTION_INFO: + showPostInfo(context, post, getChanThread(), this); + break; + case POST_OPTION_COPY: + showSubMenuOptions(anchor, post, inPopup, populateCopyMenuOptions(post)); + break; + case POST_OPTION_COPY_POST_LINK: + setClipboardContent("Post link", String.format(Locale.ENGLISH, ">>%d", post.no)); + showToast(context, R.string.post_link_copied); + break; + case POST_OPTION_COPY_CROSS_BOARD_LINK: + setClipboardContent("Cross-board link", + String.format(Locale.ENGLISH, ">>>/%s/%d", post.boardCode, post.no) + ); + showToast(context, R.string.post_cross_board_link_copied); + break; + case POST_OPTION_COPY_POST_URL: + setClipboardContent("Post URL", loadable.desktopUrl(post)); + showToast(context, R.string.post_url_copied); + break; + case POST_OPTION_COPY_IMG_URL: + setClipboardContent("Image URL", post.image().imageUrl.toString()); + showToast(context, R.string.image_url_copied_to_clipboard); + break; + case POST_OPTION_COPY_POST_TEXT: + setClipboardContent("Post text", post.comment.toString()); + showToast(context, R.string.post_text_copied); + break; + case POST_OPTION_REPORT: + if (inPopup) { + threadPresenterCallback.hidePostsPopup(); + } + threadPresenterCallback.openReportView(post); + break; + case POST_OPTION_SHOW_ID: + if (getChanThread() == null) break; + List idPosts = new ArrayList<>(); + for (Post p : getChanThread().getPosts()) { + if (post.id.equals(p.id)) idPosts.add(p); + } + threadPresenterCallback.showPostsPopup(post, idPosts); + //noinspection fallthrough + case POST_OPTION_HIGHLIGHT_ID: + threadPresenterCallback.highlightPostId(post.id); + break; + case POST_OPTION_SHOW_TRIPCODE: + if (getChanThread() == null) break; + List tripPosts = new ArrayList<>(); + for (Post p : getChanThread().getPosts()) { + if (post.tripcode.equals(p.tripcode)) tripPosts.add(p); + } + threadPresenterCallback.showPostsPopup(post, tripPosts); + //noinspection fallthrough + case POST_OPTION_HIGHLIGHT_TRIPCODE: + threadPresenterCallback.highlightPostTripcode(post.tripcode); + break; + case POST_OPTION_FILTER: + showSubMenuOptions(anchor, post, inPopup, populateFilterMenuOptions(post)); + break; + case POST_OPTION_FILTER_SUBJECT: + threadPresenterCallback.filterPostSubject(post.subject); + break; + case POST_OPTION_FILTER_COMMENT: + threadPresenterCallback.filterPostComment(post.comment); + break; + case POST_OPTION_FILTER_NAME: + threadPresenterCallback.filterPostName(post.name); + break; + case POST_OPTION_FILTER_FILENAME: + threadPresenterCallback.filterPostFilename(post); + break; + case POST_OPTION_FILTER_FLAG_CODE: + threadPresenterCallback.filterPostFlagCode(post); + break; + case POST_OPTION_FILTER_ID: + threadPresenterCallback.filterPostID(post.id); + break; + case POST_OPTION_FILTER_TRIPCODE: + threadPresenterCallback.filterPostTripcode(post.tripcode); + break; + case POST_OPTION_FILTER_IMAGE_HASH: + threadPresenterCallback.filterPostImageHash(post); + break; + case POST_OPTION_DELETE: + requestDeletePost(post); + break; + case POST_OPTION_SAVE: + if (!isBound()) break; + for (Post p : getMatchingIds(post)) { + SavedReply saved = SavedReply.fromBoardNoPassword(p.board, p.no, ""); + DatabaseUtils.runTask(databaseSavedReplyManager.saveReply(saved)); + Pin watchedPin = watchManager.getPinByLoadable(loadable); + if (watchedPin != null) { + synchronized (this) { + watchedPin.quoteLastCount += p.repliesFrom.size(); + } + } + } + //force reload for reply highlighting + requestData(); + break; + case POST_OPTION_UNSAVE: + if (!isBound()) break; + for (Post p : getMatchingIds(post)) { + SavedReply saved = databaseSavedReplyManager.getSavedReply(p.board, p.no); + if (saved != null) { + //unsave + DatabaseUtils.runTask(databaseSavedReplyManager.unsaveReply(saved)); + Pin watchedPin = watchManager.getPinByLoadable(loadable); + if (watchedPin != null) { + synchronized (this) { + watchedPin.quoteLastCount -= p.repliesFrom.size(); + } + } + } else { + Logger.w(this, "SavedReply null, can't unsave"); + } + } + //force reload for reply highlighting + requestData(); + break; + case POST_OPTION_PIN: + Loadable threadPin = Loadable.forThread(post.board, post.no, PostHelper.getTitle(post, loadable)); + threadPin.thumbnailUrl = post.image() == null ? null : post.image().getThumbnailUrl(); + watchManager.createPin(threadPin); + break; + case POST_OPTION_OPEN_BROWSER: + if (isBound()) { + openLink(loadable.desktopUrl(post)); + } + break; + case POST_OPTION_SHARE: + if (isBound()) { + shareLink(loadable.desktopUrl(post)); + } + break; + case POST_OPTION_REMOVE: + case POST_OPTION_HIDE: + if (chanLoader == null || chanLoader.getThread() == null) { + break; + } + + boolean hide = id == POST_OPTION_HIDE; + + if (chanLoader.getLoadable().mode == Loadable.Mode.CATALOG) { + threadPresenterCallback.hideThread(post, hide); + } else { + if (post.repliesFrom.isEmpty()) { + // no replies to this post so no point in showing the dialog + hideOrRemovePosts(hide, false, post); + } else { + // show a dialog to the user with options to hide/remove the whole chain of posts + threadPresenterCallback.showHideOrRemoveWholeChainDialog(hide, + post, + chanLoader.getThread().getOp().no + ); + } + } + break; + } + } + + private Set getMatchingIds(Post post) { + Set matching = new HashSet<>(1); + if (TextUtils.isEmpty(post.id)) { + //just this post + matching.add(post); + } else { + //match all post IDs + for (Post p : getChanThread().getPosts()) { + if (!TextUtils.isEmpty(p.id) && p.id.equals(post.id)) { + matching.add(p); + } + } + } + return matching; + } + + private void showSubMenuOptions( + View anchor, Post post, Boolean inPopup, List> options + ) { + FloatingMenu menu = new FloatingMenu<>(context, anchor, options); + menu.setCallback(new FloatingMenu.ClickCallback() { + @Override + public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { + onPostOptionClicked(anchor, post, item.getId(), inPopup); + } + }); + menu.show(); + } + + @Override + public void onPostLinkableClicked(Post post, PostLinkable linkable) { + if (!isBound()) return; + if (linkable instanceof QuoteLinkable) { + Post linked = PostUtils.findPostById((int) linkable.value, chanLoader.getThread()); + if (linked != null) { + threadPresenterCallback.showPostsPopup(post, Collections.singletonList(linked)); + } + } else if (linkable instanceof ParserLinkLinkable) { + ParserLinkLinkable l = (ParserLinkLinkable) linkable; + if (l.isJavascript()) { + threadPresenterCallback.openLink(linkable, loadable.desktopUrl(post)); + } else { + threadPresenterCallback.openLink(linkable, (String) linkable.value); + } + } else if (linkable instanceof EmbedderLinkLinkable) { + threadPresenterCallback.openLink(linkable, (String) linkable.value); + } else if (linkable instanceof ThreadLinkable) { + ThreadLink link = (ThreadLink) linkable.value; + + Board board = loadable.site.board(link.boardCode); + if (board != null) { + Loadable thread = + Loadable.forThread(board, link.threadId, "", !(board.site instanceof ExternalSiteArchive)); + thread.markedNo = link.postId; + + threadPresenterCallback.showThread(thread); + } + } else if (linkable instanceof BoardLinkable) { + Board b = boardManager.getBoard(loadable.site, (String) linkable.value); + if (b == null) { + showToast(context, R.string.site_uses_dynamic_boards); + } else { + threadPresenterCallback.showBoard(Loadable.forCatalog(b)); + } + } else if (linkable instanceof SearchLinkable) { + SearchLink search = (SearchLink) linkable.value; + Board bd = boardManager.getBoard(loadable.site, search.board); + if (bd == null) { + showToast(context, R.string.site_uses_dynamic_boards); + } else { + threadPresenterCallback.showBoardAndSearch(Loadable.forCatalog(bd), search.search); + } + } else if (linkable instanceof ArchiveLinkable) { + if (linkable.value instanceof ThreadLink) { + ThreadLink opPostPair = (ThreadLink) linkable.value; + Loadable constructed = Loadable.forThread(Board.fromSiteNameCode(loadable.site, + opPostPair.boardCode, + opPostPair.boardCode + ), + opPostPair.threadId, + "", + false + ); + showArchives(constructed, opPostPair.postId); + } else if (linkable.value instanceof ResolveLink) { + ResolveLink toResolve = (ResolveLink) linkable.value; + showToast(context, "Calling archive API, just a moment!"); + toResolve.resolve(toResolve, (threadLink) -> { + if (threadLink != null) { + Loadable constructed = Loadable.forThread(Board.fromSiteNameCode(toResolve.site, + threadLink.boardCode, + threadLink.boardCode + ), + threadLink.threadId, + "", + false + ); + showArchives(constructed, threadLink.postId); + } else { + showToast(context, "Failed to resolve thread external post link!"); + } + }); + } + } + } + + @Override + public void onPostNoClicked(Post post) { + threadPresenterCallback.hidePostsPopup(); + threadPresenterCallback.quote(post, false); + } + + @Override + public void onPostSelectionQuoted(Post post, CharSequence quoted) { + threadPresenterCallback.hidePostsPopup(); + threadPresenterCallback.quote(post, quoted); + } + + @Override + public void onShowPostReplies(Post post) { + if (!isBound()) return; + List posts = new ArrayList<>(); + for (int no : post.repliesFrom) { + Post replyPost = PostUtils.findPostById(no, chanLoader.getThread()); + if (replyPost != null) { + posts.add(replyPost); + } + } + if (posts.size() > 0) { + threadPresenterCallback.showPostsPopup(post, posts); + } + } + + /* + * ThreadStatusCell callbacks + */ + @Override + public long getTimeUntilLoadMore() { + return isBound() ? chanLoader.getTimeUntilLoadMore() : 0L; + } + + @Override + public boolean isWatching() { + //@formatter:off + return ChanSettings.autoRefreshThread.get() + && BackgroundUtils.isInForeground() + && loadable.isThreadMode() + && !(loadable.site instanceof ExternalSiteArchive) + && getChanThread() != null + && !getChanThread().isClosed() + && !getChanThread().isArchived(); + //@formatter:on + } + + @Nullable + @Override + public ChanThread getChanThread() { + return isBound() ? chanLoader.getThread() : null; + } + + @Override + public void onListStatusClicked() { + if (!isBound() || getChanThread() == null) return; + if (!getChanThread().isArchived()) { + refreshUI(); + } else { + showArchives(loadable, loadable.no); + } + } + + public void showArchives(Loadable op, int postNo) { + final ArchivesLayout dialogView = + (ArchivesLayout) LayoutInflater.from(context).inflate(R.layout.layout_archives, null); + boolean hasContents = dialogView.setLoadable(op); + dialogView.setPostNo(postNo); + dialogView.setCallback(this); + + if (loadable.site instanceof ExternalSiteArchive) { + // skip the archive picker, re-use the same archive we're already in + openArchive((ExternalSiteArchive) loadable.site, op, postNo); + } else if (hasContents) { + AlertDialog dialog = getDefaultAlertBuilder(context) + .setView(dialogView) + .setTitle(R.string.thread_view_external_archive) + .create(); + dialog.setCanceledOnTouchOutside(true); + dialogView.attachToDialog(dialog); + dialog.show(); + } else { + showToast(context, "No archives for this board or site."); + } + } + + @Override + public void showThread(Loadable loadable) { + threadPresenterCallback.showThread(loadable); + } + + @Override + public void requestNewPostLoad() { + if (isBound() && loadable.isThreadMode()) { + refreshUI(); + PageRepository.forceUpdateForBoard(chanLoader.getLoadable().board); + } + } + + @Override + public void onUnhidePostClick(Post post) { + threadPresenterCallback.unhideOrUnremovePost(post); + } + + private void requestDeletePost(Post post) { + SavedReply reply = databaseSavedReplyManager.getSavedReply(post.board, post.no); + if (reply != null) { + final View view = LayoutInflater.from(context).inflate(R.layout.dialog_post_delete, null); + CheckBox checkBox = view.findViewById(R.id.image_only); + getDefaultAlertBuilder(context) + .setTitle(R.string.delete_confirm) + .setView(view) + .setNegativeButton(R.string.cancel, null) + .setPositiveButton(R.string.delete, + (dialog, which) -> deletePostConfirmed(post, checkBox.isChecked()) + ) + .show(); + } + } + + private void deletePostConfirmed(Post post, boolean onlyImageDelete) { + threadPresenterCallback.showDeleting(); + + SavedReply reply = databaseSavedReplyManager.getSavedReply(post.board, post.no); + if (reply != null) { + post.board.site.api().delete(new DeleteRequest(post, reply, onlyImageDelete), + new NetUtilsClasses.ResponseResult() { + @Override + public void onSuccess(DeleteResponse deleteResponse) { + String message; + if (deleteResponse.deleted) { + message = getString(R.string.delete_success); + } else if (!TextUtils.isEmpty(deleteResponse.errorMessage)) { + message = deleteResponse.errorMessage; + } else { + message = getString(R.string.delete_error); + } + threadPresenterCallback.hideDeleting(message); + } + + @Override + public void onFailure(Exception e) { + threadPresenterCallback.hideDeleting(getString(R.string.delete_error)); + } + } + ); + } + } + + public static void showPostInfo( + Context context, Post post, ChanThread thread, OnPostLinkableClickedInterface clickedInterface + ) { + View fullView = LayoutInflater.from(context).inflate(R.layout.dialog_post_info, null); + AlertDialog dialog = + getDefaultAlertBuilder(context).setView(fullView).setPositiveButton(R.string.ok, null).create(); + dialog.setCanceledOnTouchOutside(true); + TextView infoText = fullView.findViewById(R.id.post_info); + LinearLayout linkableGroup = fullView.findViewById(R.id.linkable_group); + ListView linkableList = fullView.findViewById(R.id.post_linkable_list); + + StringBuilder text = new StringBuilder(); + if (post.isOP && !TextUtils.isEmpty(post.subject)) { + text.append("Subject: ").append(post.subject).append("\n"); + } + + if (!TextUtils.isEmpty(post.name) && !TextUtils.equals(post.name, "Anonymous")) { + text.append("Name: ").append(post.name).append("\n"); + } + + if (!TextUtils.isEmpty(post.tripcode)) { + text.append("Tripcode: ").append(post.tripcode).append("\n"); + } + + if (!TextUtils.isEmpty(post.capcode)) { + text.append("Capcode: ").append(post.capcode).append("\n"); + } + + if (!TextUtils.isEmpty(post.id)) { + text.append("Id: ").append(post.id).append("\n"); + if (thread != null) { + int count = 0; + for (Post p : thread.getPosts()) { + if (p.id.equals(post.id)) count++; + } + text.append("Id post count: ").append(count).append("\n"); + } + } + + for (PostHttpIcon icon : post.httpIcons) { + text.append("Icon ").append(icon.code).append(" description: ").append(icon.description).append("\n"); + } + + text.append("Posted: ").append(PostHelper.getLocalDate(post)); + + for (PostImage image : post.images) { + text.append("\n\n"); + PostUtils.generatePostImageSummaryAndSetTextViewWithUpdates(image, text, dialog, infoText); + } + + Set added = new HashSet<>(); + List keys = new ArrayList<>(); + List> linkables = Arrays.asList(post.getLinkables()); + for (PostLinkable linkable : linkables) { + //skip these linkables, they aren't useful to display + if (linkable instanceof SpoilerLinkable || linkable instanceof FilterDebugLinkable) continue; + CharSequence key = + post.comment.subSequence(post.comment.getSpanStart(linkable), post.comment.getSpanEnd(linkable)); + String value = linkable.value.toString(); + //need to trim off starting spaces for certain media links if embedded + CharSequence trimmedUrl = + ((key.charAt(0) == ' ' && key.charAt(1) == ' ') ? key.subSequence(2, key.length()) : key); + boolean speciallyProcessed = false; + for (Embedder e : EmbeddingEngine.getDefaultEmbedders()) { + if (e.shouldEmbed(value)) { + if (added.contains(trimmedUrl.toString())) continue; + keys.add(StringUtils.prependIcon(context, trimmedUrl, e.getIconBitmap(), (int) sp(16))); + added.add(trimmedUrl.toString()); + speciallyProcessed = true; + break; + } + } + if (!speciallyProcessed) { + keys.add(key); + } + } + + linkableList.setAdapter(new ArrayAdapter<>(context, R.layout.simple_list_item_thin, keys)); + linkableList.setOnItemClickListener((parent, view, position, id1) -> { + clickedInterface.onPostLinkableClicked(post, linkables.get(position)); + dialog.dismiss(); + }); + linkableList.setOnItemLongClickListener((parent, view, position, id1) -> { + setClipboardContent("Linkable URL", linkables.get(position).value.toString()); + showToast(context, R.string.linkable_copied_to_clipboard); + return true; + }); + if (linkables.size() <= 0) { + linkableGroup.setVisibility(View.GONE); + } + + //makes the pre-"Post info" section selectable, from https://stackoverflow.com/a/61562979 + infoText.setTextIsSelectable(true); + + // add web search option to context menu + infoText.setCustomSelectionActionModeCallback(new ActionMode.Callback() { + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + menu.add(Menu.NONE, R.id.post_selection_action_search, 1, R.string.post_web_search); + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return true; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + CharSequence selection = "Error getting selection!"; + try { + // ensure that the start and end are in the right order, in case the selection start/end are flipped + int start = Math.min(infoText.getSelectionEnd(), infoText.getSelectionStart()); + int end = Math.max(infoText.getSelectionEnd(), infoText.getSelectionStart()); + selection = infoText.getText().subSequence(start, end); + } catch (Exception ignored) {} + Intent searchIntent = new Intent(Intent.ACTION_WEB_SEARCH); + searchIntent.putExtra(SearchManager.QUERY, selection.toString()); + openIntent(searchIntent); + return true; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + } + }); + + dialog.show(); + } + + private void showPosts() { + if (chanLoader != null && chanLoader.getThread() != null) { + threadPresenterCallback.showPosts(chanLoader.getThread(), new PostsFilter(postsOrder, searchQuery)); + } + } + + public void hideOrRemovePosts(boolean hide, boolean wholeChain, Post post) { + Set posts = new HashSet<>(); + + if (isBound()) { + if (wholeChain) { + ChanThread thread = chanLoader.getThread(); + if (thread != null) { + posts.addAll(PostUtils.findPostWithReplies(post.no, thread.getPosts())); + } + } else { + posts.add(PostUtils.findPostById(post.no, chanLoader.getThread())); + } + } + + threadPresenterCallback.hideOrRemovePosts(hide, wholeChain, posts); + } + + public void showRemovedPostsDialog() { + if (!isBound() || chanLoader.getThread() == null || loadable.isCatalogMode()) { + return; + } + + threadPresenterCallback.viewRemovedPostsForTheThread(chanLoader.getThread().getPosts(), loadable.no); + } + + public void onRestoreRemovedPostsClicked(List selectedPosts) { + if (!isBound()) return; + + threadPresenterCallback.onRestoreRemovedPostsClicked(loadable, selectedPosts); + } + + @Override + public void openArchive(ExternalSiteArchive externalSiteArchive, Loadable op, int postNo) { + showThread(externalSiteArchive.getArchiveLoadable(op, postNo)); + } + + private List> populateFilterMenuOptions(Post post) { + List> filterMenu = new ArrayList<>(); + if (post.isOP && !TextUtils.isEmpty(post.subject)) { + filterMenu.add(new FloatingMenuItem<>(POST_OPTION_FILTER_SUBJECT, FilterType.SUBJECT.toString())); + } + if (!TextUtils.isEmpty(post.comment)) { + filterMenu.add(new FloatingMenuItem<>(POST_OPTION_FILTER_COMMENT, FilterType.COMMENT.toString())); + } + if (!TextUtils.isEmpty(post.name) && !TextUtils.equals(post.name, "Anonymous")) { + filterMenu.add(new FloatingMenuItem<>(POST_OPTION_FILTER_NAME, FilterType.NAME.toString())); + } + if (!TextUtils.isEmpty(post.id)) { + filterMenu.add(new FloatingMenuItem<>(POST_OPTION_FILTER_ID, FilterType.ID.toString())); + } + if (!TextUtils.isEmpty(post.tripcode)) { + filterMenu.add(new FloatingMenuItem<>(POST_OPTION_FILTER_TRIPCODE, FilterType.TRIPCODE.toString())); + } + if (loadable.board.countryFlags || !loadable.board.boardFlags.isEmpty()) { + filterMenu.add(new FloatingMenuItem<>(POST_OPTION_FILTER_FLAG_CODE, FilterType.FLAG_CODE.toString())); + } + if (!post.images.isEmpty()) { + filterMenu.add(new FloatingMenuItem<>(POST_OPTION_FILTER_FILENAME, FilterType.FILENAME.toString())); + if (loadable.site.siteFeature(Site.SiteFeature.IMAGE_FILE_HASH)) { + filterMenu.add(new FloatingMenuItem<>(POST_OPTION_FILTER_IMAGE_HASH, FilterType.IMAGE_HASH.toString())); + } + } + return filterMenu; + } + + private List> populateCopyMenuOptions(Post post) { + List> copyMenu = new ArrayList<>(); + if (!TextUtils.isEmpty(post.comment)) { + copyMenu.add(new FloatingMenuItem<>(POST_OPTION_COPY_POST_TEXT, R.string.post_copy_text)); + } + copyMenu.add(new FloatingMenuItem<>(POST_OPTION_COPY_POST_LINK, R.string.post_copy_link)); + copyMenu.add(new FloatingMenuItem<>(POST_OPTION_COPY_CROSS_BOARD_LINK, R.string.post_copy_cross_board_link)); + copyMenu.add(new FloatingMenuItem<>(POST_OPTION_COPY_POST_URL, R.string.post_copy_post_url)); + if (!post.images.isEmpty()) { + copyMenu.add(new FloatingMenuItem<>(POST_OPTION_COPY_IMG_URL, R.string.post_copy_image_url)); + } + copyMenu.add(new FloatingMenuItem<>(POST_OPTION_INFO, R.string.post_info)); + return copyMenu; + } + + public interface ThreadPresenterCallback + extends ProgressResponseBody.ProgressListener { + void showPosts(ChanThread thread, PostsFilter filter); + + void postClicked(Post post); + + void showError(int errResId); + + void showLoading(); + + void showEmpty(); + + void refreshUI(); + + void showThread(Loadable threadLoadable); + + void showBoard(Loadable catalogLoadable); + + void showBoardAndSearch(Loadable catalogLoadable, String searchQuery); + + void openLink(PostLinkable linkable, String link); + + void openReportView(Post post); + + void showPostsPopup(Post forPost, List posts); + + void hidePostsPopup(); + + List getDisplayingPosts(); + + PostViewMode getPostViewMode(); + + RecyclerViewPosition getCurrentPosition(); + + void showImages(List images, int index, Loadable loadable, ImageView thumbnail); + + void showAlbum(List images, PostImage target); + + void scrollTo(int displayPosition, boolean smooth); + + void smoothScrollNewPosts(int displayPosition); + + void highlightPostNo(int postNo); + + void highlightPostId(String id); + + void highlightPostTripcode(String tripcode); + + void filterPostSubject(CharSequence subject); + + void filterPostName(String name); + + void filterPostComment(CharSequence comment); + + void filterPostID(String ID); + + void filterPostFlagCode(Post post); + + void filterPostFilename(Post post); + + void filterPostTripcode(String tripcode); + + void filterPostImageHash(Post post); + + void showSearch(boolean show); + + void setSearchStatus(String query, boolean setEmptyText, boolean hideKeyboard); + + void quote(Post post, boolean withText); + + void quote(Post post, CharSequence text); + + void showDeleting(); + + void hideDeleting(String message); + + void hideThread(Post post, boolean hide); + + void showNewPostsSnackbar(final Loadable loadable, int more); + + void showHideOrRemoveWholeChainDialog(boolean hide, Post post, int threadNo); + + void hideOrRemovePosts(boolean hide, boolean wholeChain, Set posts); + + void unhideOrUnremovePost(Post post); + + void viewRemovedPostsForTheThread(List threadPosts, int threadNo); + + void onRestoreRemovedPostsClicked(Loadable threadLoadable, List selectedPosts); + + void updateSubtitle(CharSequence summary); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/receiver/WakeUpdateReceiver.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/receiver/WakeUpdateReceiver.java new file mode 100644 index 0000000000..3e46f7150d --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/receiver/WakeUpdateReceiver.java @@ -0,0 +1,30 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.receiver; + +import android.content.*; + +import com.github.adamantcheese.chan.core.manager.WakeManager; + +public class WakeUpdateReceiver + extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + WakeManager.getInstance().onBroadcastReceived(false); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/BitmapRepository.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/BitmapRepository.java new file mode 100644 index 0000000000..0e0117b7f5 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/BitmapRepository.java @@ -0,0 +1,149 @@ +package com.github.adamantcheese.chan.core.repository; + +import static com.github.adamantcheese.chan.utils.AndroidUtils.sp; +import static com.github.adamantcheese.chan.utils.BitmapUtils.decode; + +import android.content.Context; +import android.graphics.*; +import android.os.Build; +import android.text.TextPaint; +import android.util.TypedValue; + +import androidx.renderscript.RenderScript; + +import com.github.adamantcheese.chan.R; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; + +import java.util.HashMap; +import java.util.Map; + +public class BitmapRepository { + public static RenderScript rs; + + public static Bitmap youtubeIcon; + public static Bitmap streamableIcon; + public static Bitmap clypIcon; + public static Bitmap bandcampIcon; + public static Bitmap soundcloudIcon; + public static Bitmap vocarooIcon; + public static Bitmap vimeoIcon; + public static Bitmap pixivIcon; + public static Bitmap dlsiteIcon; + public static Bitmap magnetIcon; + public static Bitmap strawpollIcon; + public static Bitmap pastebinIcon; + public static Bitmap imgurIcon; + + public static Bitmap stickyIcon; + public static Bitmap closedIcon; + public static Bitmap trashIcon; + public static Bitmap archivedIcon; + public static Bitmap newIpIcon; + + public static Bitmap error; + public static Bitmap paddedError; + + public static Bitmap empty; + public static Bitmap transparentCheckerboard; + + public static ResourceBitmap partyHat; + public static ResourceBitmap xmasHat; + + public static void initialize(Context c) { + try { + rs = RenderScript.create(c); + } catch (Throwable ignored) {} + + youtubeIcon = decode(c, R.drawable.youtube_icon); + streamableIcon = decode(c, R.drawable.streamable_icon); + clypIcon = decode(c, R.drawable.clyp_icon); + bandcampIcon = decode(c, R.drawable.bandcamp_icon); + soundcloudIcon = decode(c, R.drawable.soundcloud_icon); + vocarooIcon = decode(c, R.drawable.vocaroo_icon); + vimeoIcon = decode(c, R.drawable.vimeo_icon); + pixivIcon = decode(c, R.drawable.pixiv_icon); + dlsiteIcon = decode(c, R.drawable.dlsite_icon); + magnetIcon = decode(c, R.drawable.magnet_icon); + strawpollIcon = decode(c, R.drawable.strawpoll_icon); + pastebinIcon = decode(c, R.drawable.pastebin_icon); + imgurIcon = decode(c, R.drawable.imgur_icon); + + stickyIcon = decode(c, R.drawable.sticky_icon); + closedIcon = decode(c, R.drawable.closed_icon); + trashIcon = decode(c, R.drawable.trash_icon); + archivedIcon = decode(c, R.drawable.archived_icon); + newIpIcon = decode(c, R.drawable.new_ip_icon); + + error = decode(c, R.drawable.error_icon); + paddedError = Bitmap.createBitmap(error.getWidth() * 2, error.getHeight() * 2, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(paddedError); + canvas.drawBitmap(error, error.getWidth() * 0.5f, error.getHeight() * 0.5f, null); + + empty = decode(c, R.drawable.empty); + transparentCheckerboard = decode(c, R.drawable.transparent_checkerboard); + + // images are 160x160 by default, so this is the center on that original image, before scaling + partyHat = new ResourceBitmap(c, R.drawable.partyhat, 50, 125); + xmasHat = new ResourceBitmap(c, R.drawable.xmashat, 50, 125); + } + + public static void cleanup() { + if (rs != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + RenderScript.releaseAllContexts(); + } + rs.destroy(); + } + } + + public static class ResourceBitmap { + public TypedValue bitmapSpecs = new TypedValue(); + public Bitmap bitmap; + // the artificial center of the bitmap + public float centerX; + public float centerY; + + public ResourceBitmap(Context c, int resId, int centerX, int centerY) { + c.getResources().getValue(resId, bitmapSpecs, true); + bitmap = decode(c, resId); + float scaleRatio = c.getResources().getDisplayMetrics().densityDpi / (float) bitmapSpecs.density; + this.centerX = (centerX * scaleRatio) / bitmap.getWidth(); + this.centerY = (centerY * scaleRatio) / bitmap.getHeight(); + } + } + + private static final Map exceptionMap = new HashMap<>(); + + public static Bitmap getHttpExceptionBitmap(Context c, Exception e) { + if (!(e instanceof NetUtilsClasses.HttpCodeException)) return paddedError; + NetUtilsClasses.HttpCodeException httpException = (NetUtilsClasses.HttpCodeException) e; + if (exceptionMap.containsKey(httpException.code)) return exceptionMap.get(httpException.code); + + String code = String.valueOf(httpException.code); + Bitmap res = BitmapRepository.paddedError.copy(BitmapRepository.paddedError.getConfig(), true); + Canvas temp = new Canvas(res); + RectF bounds = new RectF(0, 0, temp.getWidth(), temp.getHeight()); + + TextPaint errorTextPaint = new TextPaint(); + errorTextPaint.setAntiAlias(true); + errorTextPaint.setTypeface(Typeface.DEFAULT_BOLD); + errorTextPaint.setTextAlign(Paint.Align.CENTER); + errorTextPaint.setTextSize(sp(c, 24)); + errorTextPaint.setColor(0xFFDD3333); + + TextPaint errorBorderTextPaint = new TextPaint(errorTextPaint); + errorBorderTextPaint.setStyle(Paint.Style.STROKE); + errorBorderTextPaint.setStrokeWidth(sp(c, 3)); + errorBorderTextPaint.setColor(0xFFFFFFFF); + + float textHeight = errorTextPaint.descent() - errorTextPaint.ascent(); + float textOffset = (textHeight / 2) - errorTextPaint.descent(); + + temp.drawText(code, bounds.centerX(), bounds.centerY() + textOffset, errorBorderTextPaint); + temp.drawText(code, bounds.centerX(), bounds.centerY() + textOffset, errorTextPaint); + + exceptionMap.put(httpException.code, res); + + return res; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/BoardRepository.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/BoardRepository.java new file mode 100644 index 0000000000..455c9bf4ea --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/BoardRepository.java @@ -0,0 +1,183 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.repository; + +import androidx.core.util.Pair; + +import com.github.adamantcheese.chan.core.database.DatabaseBoardManager; +import com.github.adamantcheese.chan.core.database.DatabaseUtils; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Boards; +import com.github.adamantcheese.chan.utils.Logger; + +import java.util.*; + +public class BoardRepository + implements Observer { + private boolean initialized = false; + private final DatabaseBoardManager databaseBoardManager; + + private final SiteRepository.Sites allSites; + + private final SitesBoards allBoards = new SitesBoards(); + private final SitesBoards savedBoards = new SitesBoards(); + + public BoardRepository(DatabaseBoardManager databaseBoardManager, SiteRepository siteRepository) { + this.databaseBoardManager = databaseBoardManager; + allSites = siteRepository.all(); + } + + public void initialize() { + if (initialized) return; + initialized = true; + updateObservablesSync(); + + allSites.addObserver(this); + } + + @Override + public void update(Observable o, Object arg) { + if (o == allSites) { + updateObservablesAsync(); + } + } + + public void updateAvailableBoardsForSite(Site site, Boards availableBoards) { + boolean changed = DatabaseUtils.runTask(databaseBoardManager.createAll(site, availableBoards)); + Logger.d(this, "updateAvailableBoardsForSite changed = " + changed); + if (changed) { + updateObservablesAsync(); + } + } + + public Board getFromCode(Site site, String code) { + for (SiteBoards siteBoards : allBoards.get()) { + if (siteBoards.site.id() == site.id()) { + for (Board board : siteBoards.boards) { + if (board.code.equals(code)) { + return board; + } + } + return null; + } + } + + return null; + } + + public SitesBoards getAll() { + return allBoards; + } + + public SitesBoards getSavedObservable() { + return savedBoards; + } + + public List getSaved() { + return savedBoards.get(); + } + + public Boards getSiteBoards(Site site) { + for (SiteBoards item : allBoards.siteBoards) { + if (item.site.id() == site.id()) { + return item.boards; + } + } + return new Boards(); + } + + public Boards getSiteSavedBoards(Site site) { + for (SiteBoards item : savedBoards.siteBoards) { + if (item.site.id() == site.id()) { + return item.boards; + } + } + return new Boards(); + } + + public void updateBoardOrders(Boards boards) { + DatabaseUtils.runTaskAsync(databaseBoardManager.updateOrders(boards), (e) -> updateObservablesAsync()); + } + + public void setSaved(Board board, boolean saved) { + board.saved = saved; + board.order = saved ? board.order : 0; + DatabaseUtils.runTaskAsync(databaseBoardManager.update(board), (e) -> updateObservablesAsync()); + } + + public void setAllSaved(Boards boards, boolean saved) { + for (Board board : boards) { + board.saved = saved; + } + DatabaseUtils.runTaskAsync(databaseBoardManager.updateAll(boards), (e) -> updateObservablesAsync()); + } + + private void updateObservablesSync() { + updateWith(DatabaseUtils.runTask(databaseBoardManager.getBoardsForAllSitesOrdered(allSites.getAll()))); + } + + private void updateObservablesAsync() { + DatabaseUtils.runTaskAsync(databaseBoardManager.getBoardsForAllSitesOrdered(allSites.getAll()), + this::updateWith + ); + } + + private void updateWith(List> databaseData) { + List all = new ArrayList<>(); + List saved = new ArrayList<>(); + for (Pair item : databaseData) { + all.add(new SiteBoards(item.first, item.second)); + + Boards savedBoards = new Boards(); + for (Board board : item.second) { + if (board.saved) savedBoards.add(board); + } + saved.add(new SiteBoards(item.first, savedBoards)); + } + + allBoards.set(all); + savedBoards.set(saved); + + allBoards.notifyObservers(); + savedBoards.notifyObservers(); + } + + public static class SitesBoards + extends Observable { + private List siteBoards = new ArrayList<>(); + + public void set(List siteBoards) { + this.siteBoards = siteBoards; + setChanged(); + } + + public List get() { + return siteBoards; + } + } + + public static class SiteBoards { + public final Site site; + public final Boards boards; + + public SiteBoards(Site site, Boards boards) { + this.site = site; + this.boards = boards; + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/ImportExportRepository.kt b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/ImportExportRepository.kt new file mode 100644 index 0000000000..dd05ad15af --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/ImportExportRepository.kt @@ -0,0 +1,573 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.repository + +import com.github.adamantcheese.chan.core.database.DatabaseHelper +import com.github.adamantcheese.chan.core.database.DatabaseUtils +import com.github.adamantcheese.chan.core.di.AppModule +import com.github.adamantcheese.chan.core.model.export.* +import com.github.adamantcheese.chan.core.model.orm.* +import com.github.adamantcheese.chan.core.repository.ImportExportRepository.ImportExport.Export +import com.github.adamantcheese.chan.core.repository.ImportExportRepository.ImportExport.Import +import com.github.adamantcheese.chan.core.settings.ChanSettings +import com.github.adamantcheese.chan.core.settings.ChanSettings.EMPTY_JSON +import com.github.adamantcheese.chan.utils.Logger +import com.github.k1rakishou.fsaf.FileManager +import com.github.k1rakishou.fsaf.file.AbstractFile +import com.github.k1rakishou.fsaf.file.ExternalFile +import com.github.k1rakishou.fsaf.file.FileDescriptorMode +import java.io.FileReader +import java.io.FileWriter +import java.io.IOException +import java.sql.SQLException +import java.util.regex.Pattern + +class ImportExportRepository +constructor( + private val databaseHelper: DatabaseHelper, + private val fileManager: FileManager +) { + + fun exportTo(settingsFile: ExternalFile, isNewFile: Boolean, callbacks: ImportExportCallbacks) { + DatabaseUtils.runTask { + try { + val appSettings = readSettingsFromDatabase() + if (appSettings.isEmpty) { + callbacks.onNothingToImportExport(Export) + return@runTask + } + + val json = AppModule.gson.toJson(appSettings) + + if (!fileManager.exists(settingsFile) || !fileManager.canWrite(settingsFile)) { + throw IOException( + "Something wrong with export file (Can't write or it doesn't exist) " + + settingsFile.getFullPath() + ) + } + + // If the user has opened an old settings file we need to use WriteTruncate mode + // so that there no leftovers of the old file after writing the settings. + // Otherwise use Write mode + var fdm = FileDescriptorMode.WriteTruncate + if (isNewFile) { + fdm = FileDescriptorMode.Write + } + + fileManager.withFileDescriptor(settingsFile, fdm) { fileDescriptor -> + FileWriter(fileDescriptor).use { writer -> + writer.write(json) + writer.flush() + } + + Logger.i(TAG, "Exporting done!") + callbacks.onSuccess(Export) + } + + } catch (error: Throwable) { + Logger.e(TAG, "Error while trying to export settings", error) + + deleteExportFile(settingsFile) + callbacks.onError(error, Export) + } + } + } + + fun importFrom(settingsFile: ExternalFile, callbacks: ImportExportCallbacks) { + DatabaseUtils.runTask { + try { + if (!fileManager.exists(settingsFile)) { + Logger.w(TAG, "There is nothing to import, importFile does not exist " + + settingsFile.getFullPath()) + callbacks.onNothingToImportExport(Import) + return@runTask + } + + if (!fileManager.canRead(settingsFile)) { + throw IOException( + "Something wrong with import file (Can't read or it doesn't exist) " + + settingsFile.getFullPath() + ) + } + + fileManager.withFileDescriptor( + settingsFile, + FileDescriptorMode.Read + ) { fileDescriptor -> + FileReader(fileDescriptor).use { reader -> + val appSettings = AppModule.gson.fromJson(reader, ExportedAppSettings::class.java) + + if (appSettings.isEmpty) { + Logger.w(TAG, "There is nothing to import, appSettings is empty") + callbacks.onNothingToImportExport(Import) + return@use + } + + writeSettingsToDatabase(appSettings) + + Logger.i(TAG, "Importing done!") + callbacks.onSuccess(Import) + } + } + + } catch (error: Throwable) { + Logger.w(TAG, "Error while trying to import settings", error) + callbacks.onError(error, Import) + } + } + } + + private fun deleteExportFile(exportFile: AbstractFile) { + if (!fileManager.delete(exportFile)) { + Logger.w(TAG, "Could not delete export file " + exportFile.getFullPath()) + } + } + + @Throws(SQLException::class, IOException::class, DowngradeNotSupportedException::class) + private fun writeSettingsToDatabase(appSettingsParam: ExportedAppSettings) { + var appSettings = appSettingsParam + + if (appSettings.version < CURRENT_EXPORT_SETTINGS_VERSION) { + appSettings = onUpgrade(appSettings.version, appSettings) + } else if (appSettings.version > CURRENT_EXPORT_SETTINGS_VERSION) { + // we don't support settings downgrade so just notify the user about it + throw DowngradeNotSupportedException("You are attempting to import settings with " + + "version higher than the current app's settings version (downgrade). " + + "This is not supported so nothing will be imported." + ) + } + + // recreate tables from scratch, because we need to reset database IDs as well + databaseHelper.dropTables() + databaseHelper.createTables() + + for (exportedBoard in appSettings.exportedBoards) { + databaseHelper.boardDao.createIfNotExists(Board( + exportedBoard.siteId, + exportedBoard.isSaved, + exportedBoard.order, + exportedBoard.name, + exportedBoard.code, + exportedBoard.isWorkSafe, + exportedBoard.perPage, + exportedBoard.pages, + exportedBoard.maxFileSize, + exportedBoard.maxWebmSize, + exportedBoard.maxCommentChars, + exportedBoard.bumpLimit, + exportedBoard.imageLimit, + exportedBoard.cooldownThreads, + exportedBoard.cooldownReplies, + exportedBoard.cooldownImages, + exportedBoard.isSpoilers, + exportedBoard.customSpoilers, + exportedBoard.isUserIds, + exportedBoard.isCodeTags, + exportedBoard.isPreuploadCaptcha, + exportedBoard.isCountryFlags, + exportedBoard.boardFlags, + exportedBoard.isMathTags, + exportedBoard.description ?: "", + exportedBoard.isArchive + )) + } + + for (exportedSite in appSettings.exportedSites) { + val inserted = databaseHelper.siteModelDao.createIfNotExists(SiteModel( + exportedSite.siteId, + exportedSite.configuration, + exportedSite.userSettings, + exportedSite.order, + exportedSite.classId + )) + + for (exportedPin in exportedSite.exportedPins) { + val exportedLoadable = exportedPin.exportedLoadable ?: continue + + val loadable = Loadable.importLoadable( + inserted.id, + exportedLoadable.mode, + exportedLoadable.boardCode, + exportedLoadable.no, + exportedLoadable.title, + exportedLoadable.listViewIndex, + exportedLoadable.listViewTop, + exportedLoadable.lastViewed, + exportedLoadable.lastLoaded + ) + + val insertedLoadable = databaseHelper.loadableDao.createIfNotExists(loadable) + val pin = Pin( + insertedLoadable, + exportedPin.isWatching, + exportedPin.watchLastCount, + exportedPin.watchNewCount, + exportedPin.quoteLastCount, + exportedPin.quoteNewCount, + exportedPin.isError, + exportedPin.order, + exportedPin.isArchived + ) + databaseHelper.pinDao.createIfNotExists(pin) + } + } + + for (exportedFilter in appSettings.exportedFilters) { + databaseHelper.filterDao.createIfNotExists(Filter( + exportedFilter.isEnabled, + exportedFilter.type, + exportedFilter.pattern, + exportedFilter.negativePattern, + exportedFilter.isAllBoards, + exportedFilter.boards, + exportedFilter.action, + exportedFilter.color, + exportedFilter.applyToReplies, + exportedFilter.order, + exportedFilter.onlyOnOP, + exportedFilter.applyToSaved, + exportedFilter.label + )) + } + + for (exportedPostHide in appSettings.exportedPostHides) { + databaseHelper.postHideDao.createIfNotExists(PostHide( + exportedPostHide.site, + exportedPostHide.board, + exportedPostHide.no)) + } + + ChanSettings.deserializeFromString(appSettingsParam.settings) + } + + private fun onUpgrade(version: Int, appSettings: ExportedAppSettings): ExportedAppSettings { + var appSettingUpgradeCopy = appSettings + if (version < 2) { + //clear the post hides for version 1, threadNo field was added + appSettingUpgradeCopy = ExportedAppSettings( + appSettingUpgradeCopy.version, + appSettingUpgradeCopy.exportedSites, + appSettingUpgradeCopy.exportedBoards, + appSettingUpgradeCopy.exportedFilters, + ArrayList(), + appSettingUpgradeCopy.settings + ) + } + + if (version < 3) { + //clear the site model usersettings to be an empty JSON map for version 2, + // as they won't parse correctly otherwise + for (site in appSettingUpgradeCopy.exportedSites) { + site.userSettings = EMPTY_JSON + } + } + + //can't directly use gson here, gotta use regex instead + //I don't know why, but for some reason Android fails to compile this without the redundant escape?? + @Suppress("RegExpRedundantEscape") val oldConfigPattern = Pattern.compile("\\{\"internal_site_id\":(\\d+),\"external\":.+\\}") + + if (version < 4) { + //55chan and 8chan were removed for this version + var chan8: ExportedSite? = null + var chan55: ExportedSite? = null + + for (site in appSettingUpgradeCopy.exportedSites) { + val matcher = oldConfigPattern.matcher(site.configuration.toString()) + if (matcher.matches()) { + val classID = matcher.group(1)?.let { Integer.parseInt(it) } + if (classID == 1 && chan8 == null) { + chan8 = site + } + + if (classID == 7 && chan55 == null) { + chan55 = site + } + } + } + + if (chan55 != null) { + deleteExportedSite(chan55, appSettingUpgradeCopy) + } + + if (chan8 != null) { + deleteExportedSite(chan8, appSettingUpgradeCopy) + } + } + + if (version < 5) { + // siteconfig class removed, move stuff over + for (site in appSettingUpgradeCopy.exportedSites) { + val matcher = oldConfigPattern.matcher(site.configuration.toString()) + if (matcher.matches()) { + val classID = matcher.group(1)?.let { Integer.parseInt(it) } + if (classID != null) { + site.classId = classID + } + } + } + } + + if (version < 6) { + for (board in appSettingUpgradeCopy.exportedBoards) { + board.boardFlags = HashMap() + } + } + + if (version < 7) { + for (filter in appSettingUpgradeCopy.exportedFilters) { + filter.label = "" + } + } + + if (version < 8) { + for (filter in appSettingUpgradeCopy.exportedFilters) { + filter.negativePattern = "" + } + } + + return appSettingUpgradeCopy + } + + @Throws(java.sql.SQLException::class, IOException::class) + private fun readSettingsFromDatabase(): ExportedAppSettings { + val sitesMap = fillSitesMap() + val loadableMap = fillLoadablesMap() + + val pins = HashSet(databaseHelper.pinDao.queryForAll()) + val toExportMap = HashMap>() + + for (siteModel in sitesMap.values) { + toExportMap[siteModel] = ArrayList() + } + + for (pin in pins) { + val loadable = loadableMap[pin.loadable.id] + ?: throw NullPointerException("Could not find Loadable by pin.loadable.id " + + pin.loadable.id) + + val siteModel = sitesMap[loadable.siteId] + ?: throw NullPointerException("Could not find siteModel by loadable.siteId " + + loadable.siteId) + + val exportedLoadable = ExportedLoadable( + loadable.boardCode, + loadable.id.toLong(), + loadable.lastLoaded, + loadable.lastViewed, + loadable.listViewIndex, + loadable.listViewTop, + loadable.mode, + loadable.no, + loadable.siteId, + loadable.title, + loadable.thumbnailUrl?.toString() + ) + + val exportedPin = ExportedPin( + pin.archived, + pin.id, + pin.isError, + loadable.id, + pin.order, + pin.quoteLastCount, + pin.quoteNewCount, + pin.watchLastCount, + pin.watchNewCount, + pin.watching, + exportedLoadable + ) + + toExportMap[siteModel]!!.add(exportedPin) + } + + val exportedSites = ArrayList() + + for ((key, value) in toExportMap) { + val exportedSite = ExportedSite( + key.id, + key.configuration, + key.order, + key.userSettings, + key.classID, + value + ) + + exportedSites.add(exportedSite) + } + + val exportedBoards = databaseHelper.boardDao.queryForAll().map { + ExportedBoard( + it.siteId, + it.saved, + it.order, + it.name, + it.code, + it.workSafe, + it.perPage, + it.pages, + it.maxFileSize, + it.maxWebmSize, + it.maxCommentChars, + it.bumpLimit, + it.imageLimit, + it.cooldownThreads, + it.cooldownReplies, + it.cooldownImages, + it.spoilers, + it.customSpoilers, + it.userIds, + it.codeTags, + it.preuploadCaptcha, + it.countryFlags, + it.boardFlags, + it.mathTags, + it.description, + it.archive + ) + } + + val exportedFilters = databaseHelper.filterDao.queryForAll().map { + ExportedFilter( + it.enabled, + it.type, + it.pattern, + it.negativePattern, + it.allBoards, + it.boards, + it.action, + it.color, + it.applyToReplies, + it.order, + it.onlyOnOP, + it.applyToSaved, + it.label + ) + } + + val exportedPostHides = databaseHelper.postHideDao.queryForAll().map { + ExportedPostHide( + it.site, + it.board, + it.no, + it.wholeThread, + it.hide, + it.hideRepliesToThisPost, + it.threadNo + ) + } + + val settings = ChanSettings.serializeToString() + + return ExportedAppSettings(CURRENT_EXPORT_SETTINGS_VERSION, + exportedSites, + exportedBoards, + exportedFilters, + exportedPostHides, + settings + ) + } + + private fun fillLoadablesMap(): Map { + val map = hashMapOf() + val loadables = databaseHelper.loadableDao.queryForAll() + + for (loadable in loadables) { + map[loadable.id] = loadable + } + + return map + } + + private fun fillSitesMap(): Map { + val map = hashMapOf() + val sites = databaseHelper.siteModelDao.queryForAll() + + for (site in sites) { + map[site.id] = site + } + + return map + } + + private fun deleteExportedSite(site: ExportedSite, appSettings: ExportedAppSettings) { + //filters + val filtersToDelete = ArrayList() + for (filter in appSettings.exportedFilters) { + if (filter.isAllBoards || filter.boards.isNullOrEmpty()) { + continue + } + + val boards = checkNotNull(filter.boards) + val splitBoards = boards.split(",".toRegex()).dropLastWhile { it.isEmpty() } + + for (uniqueId in splitBoards) { + val split = uniqueId.split(":".toRegex()).dropLastWhile { it.isEmpty() } + + if (split.size == 2 && Integer.parseInt(split[0]) == site.siteId) { + filtersToDelete.add(filter) + break + } + } + } + + appSettings.exportedFilters.removeAll(filtersToDelete) + + //boards + val boardsToDelete = appSettings.exportedBoards.filter { it.siteId == site.siteId } + appSettings.exportedBoards.removeAll(boardsToDelete) + + //loadables for saved threads + val loadables = ArrayList() + for (pin in site.exportedPins) { + val loadable = pin.exportedLoadable + ?: continue + + if (loadable.siteId == site.siteId) { + loadables.add(loadable) + } + } + + //post hides + val hidesToDelete = appSettings.exportedPostHides.filter { it.site == site.siteId } + + appSettings.exportedPostHides.removeAll(hidesToDelete) + + //site (also removes pins and loadables) + appSettings.exportedSites.remove(site) + } + + enum class ImportExport { + Import, + Export + } + + interface ImportExportCallbacks { + fun onSuccess(importExport: ImportExport) + fun onNothingToImportExport(importExport: ImportExport) + fun onError(error: Throwable, importExport: ImportExport) + } + + class DowngradeNotSupportedException(message: String) : Exception(message) + + companion object { + private const val TAG = "ImportExportRepository" + + // Don't forget to change this when changing any of the Export models. + // Also, don't forget to handle the change in the onUpgrade or onDowngrade methods + const val CURRENT_EXPORT_SETTINGS_VERSION = 8 + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/LastReplyRepository.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/LastReplyRepository.java new file mode 100644 index 0000000000..83d19c0855 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/LastReplyRepository.java @@ -0,0 +1,80 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.repository; + +import androidx.collection.LruCache; + +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; + +/** + * Keeps track of last replies and threads in a board to provide next available post time info for that board. + */ +public class LastReplyRepository { + private static final LruCache lastReplyMap = new LruCache<>(500); + private static final LruCache lastThreadMap = new LruCache<>(500); + + /** + * Update the internal map with this loadable. + * + * @param loadable The loadable for which a reply or thread was just posted. + */ + public static void putLastReply(Loadable loadable) { + if (loadable.isCatalogMode()) { + lastThreadMap.put(loadable.board, System.currentTimeMillis()); + } else { + lastReplyMap.put(loadable.board, System.currentTimeMillis()); + } + } + + /** + * @param loadable The loadable to check if it can be posted or not + * @return time in seconds until a reply or thread can be posted + */ + public static long getTimeUntilDraftPostable(Loadable loadable) { + if (loadable.isCatalogMode()) { + return getTimeUntilThread(loadable.board); + } else { + return getTimeUntilReply(loadable.board, loadable.draft.file != null); + } + } + + /** + * @param b board for a new reply + * @param hasImage if the reply has an image attached to it + * @return seconds until a new reply can be posted on this board; negative if postable + */ + private static long getTimeUntilReply(Board b, boolean hasImage) { + Long lastTime = lastReplyMap.get(b); + long lastReplyTime = lastTime != null ? lastTime : 0L; + long waitTime = hasImage ? b.cooldownImages : b.cooldownReplies; + if (b.site.api().isLoggedIn()) waitTime /= 2; + return waitTime - ((System.currentTimeMillis() - lastReplyTime) / 1000L); + } + + /** + * @param b board for a new thread + * @return seconds until a new thread can be posted on this board; negative if postable + */ + private static long getTimeUntilThread(Board b) { + Long lastTime = lastThreadMap.get(b); + long lastThreadTime = lastTime != null ? lastTime : 0L; + long waitTime = b.cooldownThreads; + if (b.site.api().isLoggedIn()) waitTime /= 2; + return waitTime - ((System.currentTimeMillis() - lastThreadTime) / 1000L); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/PageRepository.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/PageRepository.java new file mode 100644 index 0000000000..4063f50e0e --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/PageRepository.java @@ -0,0 +1,123 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.repository; + +import static java.util.concurrent.TimeUnit.MINUTES; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.ChanPage; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.ChanPages; +import com.github.adamantcheese.chan.utils.BackgroundUtils; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +public class PageRepository { + private static final Set requestedBoards = Collections.synchronizedSet(new HashSet<>()); + private static final Set savedBoards = Collections.synchronizedSet(new HashSet<>()); + private static final ConcurrentMap boardPagesMap = new ConcurrentHashMap<>(); + private static final ConcurrentMap boardTimeMap = new ConcurrentHashMap<>(); + + private static final List callbackList = new ArrayList<>(); + + public static ChanPage getPage(@NonNull Post op) { + return findPage(op.board, op.no); + } + + public static ChanPage getPage(@NonNull Loadable opLoadable) { + return findPage(opLoadable.board, opLoadable.no); + } + + public static void forceUpdateForBoard(final Board b) { + BackgroundUtils.runOnBackgroundThread(() -> requestBoard(b), 10000); + } + + private static ChanPage findPage(Board board, int opNo) { + ChanPages pages = getPages(board); + if (pages == null) return null; + for (ChanPage page : pages) { + for (Integer threadNumber : page.threadNumbers) { + if (opNo == threadNumber) { + return page; + } + } + } + return null; + } + + private static ChanPages getPages(Board b) { + if (savedBoards.contains(b)) { + //if we have it stored already, return the pages for it + //also issue a new request if 3 minutes have passed + shouldUpdate(b); + return boardPagesMap.get(b); + } else { + //otherwise, get the site for the board and request the pages for it + requestBoard(b); + return null; + } + } + + private static void shouldUpdate(Board b) { + if (b == null) return; //if for any reason the board is null, don't do anything + Long lastUpdate = boardTimeMap.get(b); + long lastUpdateTime = lastUpdate != null ? lastUpdate : 0L; + if (lastUpdateTime + MINUTES.toMillis(3) <= System.currentTimeMillis()) { + requestBoard(b); + } + } + + private static synchronized void requestBoard(final Board b) { + if (b != null && !requestedBoards.contains(b)) { + requestedBoards.add(b); + b.site.api().pages(b, (NetUtilsClasses.NoFailResponseResult) result -> addPages(b, result)); + } + } + + public static synchronized void addPages(Board board, ChanPages pages) { + savedBoards.add(board); + requestedBoards.remove(board); + boardTimeMap.put(board, System.currentTimeMillis()); + boardPagesMap.put(board, pages); + + for (PageCallback callback : callbackList) { + callback.onPagesReceived(); + } + } + + public static void addListener(PageCallback callback) { + if (callback != null) { + callbackList.add(callback); + } + } + + public static void removeListener(PageCallback callback) { + if (callback != null) { + callbackList.remove(callback); + } + } + + public interface PageCallback { + void onPagesReceived(); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/SiteRepository.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/SiteRepository.java new file mode 100644 index 0000000000..0430fedf3b --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/repository/SiteRepository.java @@ -0,0 +1,244 @@ +package com.github.adamantcheese.chan.core.repository; + +import static com.github.adamantcheese.chan.Chan.instance; +import static com.github.adamantcheese.chan.core.site.SiteRegistry.SITE_CLASSES; + +import android.text.TextUtils; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.core.database.*; +import com.github.adamantcheese.chan.core.model.orm.*; +import com.github.adamantcheese.chan.core.settings.primitives.JsonSettings; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Filters; +import com.github.adamantcheese.chan.utils.Logger; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; + +import java.util.*; + +public class SiteRepository { + private boolean initialized = false; + private final DatabaseSiteManager databaseSiteManager; + private final Sites sitesObservable = new Sites(); + + public Site forId(int id) { + Site ret = sitesObservable.forId(id); + if (ret == null) { + Logger.e(this, "Site is null, id: " + id); + } + return ret; + } + + public SiteRepository(DatabaseSiteManager databaseSiteManager) { + this.databaseSiteManager = databaseSiteManager; + } + + public Sites all() { + return sitesObservable; + } + + public void updateUserSettings(Site site, JsonSettings jsonSettings) { + SiteModel siteModel = DatabaseUtils.runTask(databaseSiteManager.get(site.id())); + if (siteModel == null) throw new NullPointerException("siteModel == null"); + siteModel.storeUserSettings(jsonSettings); + DatabaseUtils.runTaskAsync(databaseSiteManager.update(siteModel)); + } + + public Map getOrdering() { + return DatabaseUtils.runTask(databaseSiteManager.getOrdering()); + } + + public void updateSiteOrderingAsync(List sites) { + List ids = new ArrayList<>(sites.size()); + for (Site site : sites) { + ids.add(site.id()); + } + + DatabaseUtils.runTaskAsync(databaseSiteManager.updateOrdering(ids), r -> { + sitesObservable.wasReordered(); + sitesObservable.notifyObservers(); + }); + } + + public void initialize() { + if (initialized) return; + initialized = true; + List sites = new ArrayList<>(); + + List models = DatabaseUtils.runTask(databaseSiteManager.getAll()); + + for (SiteModel siteModel : models) { + SiteConfigSettingsHolder holder; + try { + holder = instantiateSiteFromModel(siteModel); + } catch (Exception e) { + Logger.e(this, "instantiateSiteFromModel", e); + break; + } + + holder.site.initialize(siteModel.id, holder.settings); + sites.add(holder.site); + } + + sitesObservable.addAll(sites); + + for (Site site : sites) { + site.postInitialize(); + } + + sitesObservable.notifyObservers(); + } + + public Site createFromClass(Class siteClass) { + Site site = instantiateSiteClass(siteClass); + + JsonSettings settings = new JsonSettings(); + int classId = SITE_CLASSES.inverse().get(siteClass); + + SiteModel model = createFromClass(classId, settings); + site.initialize(model.id, settings); + + sitesObservable.add(site); + + site.postInitialize(); + sitesObservable.notifyObservers(); + + return site; + } + + private SiteModel createFromClass(int classID, JsonSettings userSettings) { + SiteModel siteModel = new SiteModel(); + siteModel.classID = classID; + siteModel.storeUserSettings(userSettings); + + return DatabaseUtils.runTask(databaseSiteManager.add(siteModel)); + } + + private SiteConfigSettingsHolder instantiateSiteFromModel(SiteModel siteModel) { + return new SiteConfigSettingsHolder(instantiateSiteClass(siteModel.classID), siteModel.loadConfig()); + } + + @NonNull + private Site instantiateSiteClass(int classId) { + Class clazz = SITE_CLASSES.get(classId); + if (clazz == null) { + throw new IllegalArgumentException("Unknown class id: " + classId); + } + return instantiateSiteClass(clazz); + } + + @NonNull + public Site instantiateSiteClass(Class clazz) { + try { + return clazz.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + public void removeSite(Site site) { + DatabaseUtils.runTask(() -> { + removeFilters(site); + instance(DatabaseBoardManager.class).deleteBoards(site).call(); + + List siteLoadables = instance(DatabaseLoadableManager.class).getLoadables(site).call(); + if (!siteLoadables.isEmpty()) { + instance(DatabasePinManager.class).deletePinsFromLoadables(siteLoadables).call(); + instance(DatabaseLoadableManager.class).deleteLoadables(siteLoadables).call(); + } + + instance(DatabaseSavedReplyManager.class).deleteSavedReplies(site).call(); + instance(DatabaseHideManager.class).deleteThreadHides(site).call(); + instance(DatabaseSiteManager.class).deleteSite(site).call(); + return null; + }); + } + + private void removeFilters(Site site) + throws Exception { + Filters filtersToDelete = new Filters(); + DatabaseFilterManager databaseFilterManager = instance(DatabaseFilterManager.class); + + for (Filter filter : databaseFilterManager.getFilters().call()) { + if (filter.allBoards || TextUtils.isEmpty(filter.boards)) { + continue; + } + + for (String uniqueId : filter.boards.split(",")) { + String[] split = uniqueId.split(":"); + if (split.length == 2 && Integer.parseInt(split[0]) == site.id()) { + filtersToDelete.add(filter); + break; + } + } + } + + databaseFilterManager.deleteFilters(filtersToDelete).call(); + } + + public class Sites + extends Observable { + private List sites = Collections.unmodifiableList(new ArrayList<>()); + private BiMap sitesById = HashBiMap.create(); + + public Site forId(int id) { + return sitesById.get(id); + } + + public List getAll() { + return new ArrayList<>(sites); + } + + public List getAllInOrder() { + Map ordering = getOrdering(); + + List ordered = new ArrayList<>(sites); + Collections.sort( + ordered, + (lhs, rhs) -> lhs == null || rhs == null ? 0 : ordering.get(lhs.id()) - ordering.get(rhs.id()) + ); + + return ordered; + } + + private void addAll(@NonNull List all) { + List copy = new ArrayList<>(sites); + copy.addAll(all); + resetSites(copy); + setChanged(); + } + + private void add(@NonNull Site site) { + addAll(Collections.singletonList(site)); + } + + // We don't keep the order ourselves here, that's the task of listeners. Do notify the + // listeners. + private void wasReordered() { + setChanged(); + } + + private void resetSites(@NonNull List newSites) { + sites = Collections.unmodifiableList(newSites); + BiMap byId = HashBiMap.create(newSites.size()); + for (Site newSite : newSites) { + byId.put(newSite.id(), newSite); + } + sitesById = byId; + } + } + + private static class SiteConfigSettingsHolder { + @NonNull + Site site; + @NonNull + JsonSettings settings; + + public SiteConfigSettingsHolder(@NonNull Site site, @NonNull JsonSettings settings) { + this.site = site; + this.settings = settings; + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/FileWatcher.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/FileWatcher.java new file mode 100644 index 0000000000..5bb71f56cb --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/FileWatcher.java @@ -0,0 +1,122 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.saver; + +import android.os.Environment; + +import java.io.File; +import java.util.*; + +public class FileWatcher { + private static final Comparator FILE_COMPARATOR = + (a, b) -> a.file.getName().compareToIgnoreCase(b.file.getName()); + + private final FileWatcherCallback callback; + private File startingPath; + + private File currentPath; + + public FileWatcher(FileWatcherCallback callback, File startingPath) { + this.callback = callback; + this.startingPath = startingPath; + } + + public void initialize() { + if (!StorageHelper.canNavigate(startingPath)) { + startingPath = Environment.getExternalStorageDirectory(); + } + + navigateTo(startingPath); + } + + public File getCurrentPath() { + return currentPath; + } + + public void navigateUp() { + File parentFile = currentPath.getParentFile(); + if (StorageHelper.canNavigate(parentFile)) { + navigateTo(parentFile); + } + } + + public void navigateTo(File to) { + if (!StorageHelper.canNavigate(to)) { + throw new IllegalArgumentException("Cannot navigate to " + to.getAbsolutePath()); + } + + currentPath = to; + + File[] files = currentPath.listFiles(); + + List folderList = new ArrayList<>(); + List fileList = new ArrayList<>(); + for (File file : files) { + if (StorageHelper.canNavigate(file)) { + folderList.add(new FileItem(file)); + } else if (file.isFile()) { + fileList.add(new FileItem(file)); + } + } + Collections.sort(folderList, FILE_COMPARATOR); + Collections.sort(fileList, FILE_COMPARATOR); + List items = new ArrayList<>(folderList.size() + fileList.size()); + items.addAll(folderList); + items.addAll(fileList); + + boolean canNavigateUp = StorageHelper.canNavigate(currentPath.getParentFile()); + + callback.onFiles(new FileItems(currentPath, items, canNavigateUp)); + } + + public interface FileWatcherCallback { + void onFiles(FileItems fileItems); + } + + public static class FileItem { + public File file; + + public FileItem(File file) { + this.file = file; + } + + public boolean isFile() { + return file.isFile(); + } + + public boolean isFolder() { + return file.isDirectory(); + } + + public boolean canNavigate() { + return StorageHelper.canNavigate(file); + } + } + + public static class FileItems { + public final File path; + public final List fileItems; + + public final boolean canNavigateUp; + + public FileItems(File path, List fileItems, boolean canNavigateUp) { + this.path = path; + this.fileItems = fileItems; + this.canNavigateUp = canNavigateUp; + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/ImageSaveTask.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/ImageSaveTask.java new file mode 100644 index 0000000000..f1a6e9382f --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/ImageSaveTask.java @@ -0,0 +1,331 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.saver; + +import static com.github.adamantcheese.chan.Chan.inject; +import static com.github.adamantcheese.chan.core.saver.ImageSaver.TaskResult.Failure; +import static com.github.adamantcheese.chan.core.saver.ImageSaver.TaskResult.Success; +import static com.github.adamantcheese.chan.ui.widget.CancellableToast.showToast; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getAppContext; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getClipboardManager; +import static com.github.adamantcheese.chan.utils.AndroidUtils.openIntent; +import static com.github.adamantcheese.chan.utils.AndroidUtils.setClipboardContent; + +import android.content.*; +import android.media.MediaScannerConnection; +import android.net.Uri; + +import androidx.annotation.Nullable; +import androidx.core.content.FileProvider; + +import com.github.adamantcheese.chan.*; +import com.github.adamantcheese.chan.core.model.PostImage; +import com.github.adamantcheese.chan.core.net.NetUtils; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.ui.settings.SavedFilesBaseDirectory; +import com.github.adamantcheese.chan.utils.BackgroundUtils; +import com.github.adamantcheese.chan.utils.Logger; +import com.github.k1rakishou.fsaf.FileManager; +import com.github.k1rakishou.fsaf.file.AbstractFile; +import com.github.k1rakishou.fsaf.file.DirectorySegment; +import com.github.k1rakishou.fsaf.util.FSAFUtils; + +import org.greenrobot.eventbus.EventBus; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; + +import io.reactivex.Single; +import io.reactivex.functions.Action; +import io.reactivex.subjects.SingleSubject; +import okhttp3.Call; + +public class ImageSaveTask { + @Inject + FileManager fileManager; + + public final PostImage postImage; + private AbstractFile finalSaveLocation; + public final boolean share; + private String subFolder; + private boolean success = false; + private final SingleSubject imageSaveTaskAsyncResult; + + public ImageSaveTask(PostImage postImage, boolean share) { + inject(this); + + this.postImage = postImage; + this.share = share; + this.imageSaveTaskAsyncResult = SingleSubject.create(); + } + + /** + * Set the subfolder(s) that this task should save to. + * + * @param subFolder A string representing the subfolder to save to, with included file separators. + */ + public void setSubFolderLocation(String subFolder) { + this.subFolder = subFolder; + } + + /** + * Set the actual destination of the save task. + * + * @param destination A file object representing the location that this task will save to. + */ + public void setFinalSaveLocation(AbstractFile destination) { + this.finalSaveLocation = destination; + } + + public String getSavedName() { + return fileManager.getName(finalSaveLocation); + } + + /** + * Sets up the folders specified by setSubFolderLocation. + * + * @return A file object representing the target folder. + */ + @Nullable + public AbstractFile getSaveLocation() { + AbstractFile baseSaveDir = fileManager.newBaseDirectoryFile(SavedFilesBaseDirectory.class); + if (baseSaveDir == null) { + Logger.e(this, "getSaveLocation() fileManager.newSaveLocationFile() returned null"); + return null; + } + + AbstractFile createdBaseSaveDir = fileManager.create(baseSaveDir); + + if (!fileManager.exists(baseSaveDir) || createdBaseSaveDir == null) { + Logger.e(this, "getSaveLocation() Couldn't create base image save directory"); + return null; + } + + if (!fileManager.baseDirectoryExists(SavedFilesBaseDirectory.class)) { + Logger.e(this, "getSaveLocation() Base save local directory does not exist"); + return null; + } + + if (subFolder != null) { + List segments = FSAFUtils.splitIntoSegments(subFolder); + if (segments.isEmpty()) { + return baseSaveDir; + } + + List directorySegments = new ArrayList<>(segments.size()); + + // All segments should be directory segments since we are creating sub-directories so it + // should be safe to get rid of cloneUnsafe() and use regular clone() + for (String dirSegment : segments) { + directorySegments.add(new DirectorySegment(dirSegment)); + } + + AbstractFile innerDirectory = fileManager.create(baseSaveDir, directorySegments); + + if (innerDirectory == null) { + Logger.e(this, + "getSaveLocation() failed to create subdirectory (" + + subFolder + + ") for a base dir: " + + baseSaveDir.getFullPath() + ); + } + + return innerDirectory; + } + + return baseSaveDir; + } + + public Single run() { + BackgroundUtils.ensureBackgroundThread(); + Logger.d(this, "ImageSaveTask.run() destination = " + finalSaveLocation.getFullPath()); + + @Nullable + Action onDisposeFunc = null; + + try { + if (fileManager.exists(finalSaveLocation)) { + BackgroundUtils.runOnMainThread(() -> { + onDestination(); + onEnd(); + }); + } else { + Call download = NetUtils.makeFileRequest(postImage.imageUrl, + postImage.filename, + postImage.extension, + new NetUtilsClasses.ResponseResult() { + @Override + public void onFailure(Exception e) { + BackgroundUtils.ensureMainThread(); + imageSaveTaskAsyncResult.onError(e); + + onEnd(); + } + + @Override + public void onSuccess(File response) { + BackgroundUtils.ensureMainThread(); + + if (copyToDestination(response)) { + onDestination(); + } else { + if (fileManager.exists(finalSaveLocation)) { + if (!fileManager.delete(finalSaveLocation)) { + Logger.w(this, "Could not delete destination file after error"); + } + } + } + + if (!share && !response.delete()) { + Logger.w(this, "Could not delete cached file"); + } + onEnd(); + } + }, + null + ); + + onDisposeFunc = () -> { + if (download != null) { + download.cancel(); + } + }; + } + } catch (Exception e) { + imageSaveTaskAsyncResult.onError(e); + } + + if (onDisposeFunc != null) { + return imageSaveTaskAsyncResult.doOnDispose(onDisposeFunc); + } + + return imageSaveTaskAsyncResult; + } + + private void onEnd() { + BackgroundUtils.ensureMainThread(); + imageSaveTaskAsyncResult.onSuccess(success ? Success : Failure); + } + + private void onDestination() { + success = true; + if (share) { + Uri file = FileProvider.getUriForFile(getAppContext(), + BuildConfig.FILE_PROVIDER, + new File(finalSaveLocation.getFullPath()) + ); + + Intent intent = new Intent(Intent.ACTION_SEND); + intent.setType(getAppContext().getContentResolver().getType(file)); + intent.putExtra(Intent.EXTRA_STREAM, file); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + openIntent(intent); + return; + } + + try { + String[] paths = {finalSaveLocation.getFullPath()}; + MediaScannerConnection.scanFile(getAppContext(), paths, null, null); + } catch (Exception ignored) {} + } + + private boolean copyToDestination(File source) { + try { + if (share) { + finalSaveLocation = fileManager.fromRawFile(source); + } else { + AbstractFile createdDestinationFile = fileManager.create(finalSaveLocation); + if (createdDestinationFile == null) { + throw new IOException("Could not create destination file, path = " + + finalSaveLocation.getFullPath()); + } + + if (fileManager.isDirectory(createdDestinationFile)) { + throw new IOException("Destination file is already a directory"); + } + + if (!fileManager.copyFileContents(fileManager.fromRawFile(source), createdDestinationFile)) { + throw new IOException("Could not copy source file into destination"); + } + } + return true; + } catch (Throwable e) { + boolean exists = fileManager.exists(finalSaveLocation); + boolean canWrite = fileManager.canWrite(finalSaveLocation); + + Logger.e(this, + "Error writing to file: (" + + finalSaveLocation.getFullPath() + + "), " + + "exists = " + + exists + + ", canWrite = " + + canWrite, + e + ); + //@formatter:off + EventBus.getDefault() + .post(new StartActivity.ActivityAlertDialogMessage( + "Couldn't save your file; you're probably on a newer Android version and the older file " + + "API no longer allows for direct access to the save location. You can fix this by" + + " changing your save location in media settings and use the SAF API instead.")); + //@formatter:on + } + + return false; + } + + public static boolean copyImageToClipboard(Context context, @Nullable PostImage image) { + if (image == null) return false; + if (ChanSettings.copyImage.get()) { + NetUtils.makeFileRequest(image.imageUrl, + image.filename, + image.extension, + new NetUtilsClasses.ResponseResult() { + @Override + public void onFailure(Exception e) { + setClipboardContent("Image URL", image.imageUrl.toString()); + showToast(context, R.string.image_copied_failed); + } + + @Override + public void onSuccess(File result) { + Uri imageUri = + FileProvider.getUriForFile(getAppContext(), BuildConfig.FILE_PROVIDER, result); + getClipboardManager().setPrimaryClip(ClipData.newUri( + context.getContentResolver(), + "Post image", + imageUri + )); + showToast(context, R.string.image_copied_to_clipboard); + } + }, + null + ); + } else { + setClipboardContent("Image URL", image.imageUrl.toString()); + showToast(context, R.string.image_url_copied_to_clipboard); + } + return true; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/ImageSaver.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/ImageSaver.java new file mode 100644 index 0000000000..59260fb7c6 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/ImageSaver.java @@ -0,0 +1,434 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.saver; + +import static com.github.adamantcheese.chan.core.saver.ImageSaver.ImageSaveResult.BaseDirectoryDoesNotExist; +import static com.github.adamantcheese.chan.core.saver.ImageSaver.ImageSaveResult.NoWriteExternalStoragePermission; +import static com.github.adamantcheese.chan.core.saver.ImageSaver.ImageSaveResult.Saved; +import static com.github.adamantcheese.chan.core.saver.ImageSaver.ImageSaveResult.UnknownError; +import static com.github.adamantcheese.chan.core.saver.ImageSaver.TaskResult.Canceled; +import static com.github.adamantcheese.chan.core.saver.ImageSaver.TaskResult.Success; +import static com.github.adamantcheese.chan.ui.widget.CancellableToast.showToast; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getAppContext; +import static com.github.adamantcheese.chan.utils.AndroidUtils.getString; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.widget.Toast; + +import androidx.annotation.GuardedBy; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.github.adamantcheese.chan.R; +import com.github.adamantcheese.chan.StartActivity; +import com.github.adamantcheese.chan.core.model.PostImage; +import com.github.adamantcheese.chan.core.settings.ChanSettings; +import com.github.adamantcheese.chan.ui.helper.RuntimePermissionsHelper; +import com.github.adamantcheese.chan.features.notifications.SavingNotification; +import com.github.adamantcheese.chan.ui.settings.SavedFilesBaseDirectory; +import com.github.adamantcheese.chan.utils.Logger; +import com.github.adamantcheese.chan.utils.*; +import com.github.k1rakishou.fsaf.FileManager; +import com.github.k1rakishou.fsaf.file.AbstractFile; +import com.github.k1rakishou.fsaf.file.FileSegment; +import com.google.common.io.Files; + +import org.greenrobot.eventbus.*; + +import java.io.File; +import java.net.URLDecoder; +import java.util.*; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.atomic.AtomicInteger; + +import io.reactivex.Scheduler; +import io.reactivex.Single; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.processors.FlowableProcessor; +import io.reactivex.processors.PublishProcessor; +import io.reactivex.schedulers.Schedulers; +import okhttp3.HttpUrl; + +public class ImageSaver { + /** + * We don't want to process all images at once because that will freeze the phone. Also we don't + * want to process images one by one because it will be way too slow. So we use this parameter + * for maximum amount of images processed concurrently. + */ + private static final int CONCURRENT_REQUESTS_COUNT = 4; + /** + * We use unbounded queue and this variable is it's initial capacity. + */ + private static final int UNBOUNDED_QUEUE_MIN_CAPACITY = 32; + + /** + * Amount of successfully downloaded images + */ + private final AtomicInteger doneTasks = new AtomicInteger(0); + /** + * Total amount of images in a batch to download + */ + private final AtomicInteger totalTasks = new AtomicInteger(0); + /** + * Amount of images we couldn't download + */ + private final AtomicInteger failedTasks = new AtomicInteger(0); + + private final FileManager fileManager; + + /** + * Reactive queue used for batch image downloads. + */ + private final FlowableProcessor imageSaverQueue = PublishProcessor.create(); + + /** + * Only for batch downloads. Holds the urls of all images in a batch. Use for batch canceling. + * If an image url is not present in the activeDownloads that means that it was canceled. + */ + @GuardedBy("itself") + private final Set activeDownloads = new HashSet<>(64); + + private final Scheduler workerScheduler = Schedulers.from(new ForkJoinPool(1)); + + /** + * This is a singleton class so we don't care about the disposable since we will never should + * dispose of this stream + */ + @SuppressLint("CheckResult") + public ImageSaver(FileManager fileManager) { + this.fileManager = fileManager; + EventBus.getDefault().register(this); + + imageSaverQueue + // Unbounded queue + .onBackpressureBuffer(UNBOUNDED_QUEUE_MIN_CAPACITY, false, true) + .observeOn(workerScheduler) + .flatMapSingle((t) -> Single + .just(t) + .observeOn(workerScheduler) + .flatMap((task) -> { + synchronized (activeDownloads) { + boolean isStillActive = activeDownloads.contains(task.postImage.imageUrl); + + // If the download is not present in activeDownloads that means that + // it wat canceled, so exit immediately + if (!isStillActive) { + return Single.just(Canceled); + } + } + + return task.run(); + }) + .observeOn(AndroidSchedulers.mainThread()) + .doOnError((error) -> imageSaveTaskFailed(t, error)) + .doOnSuccess((success) -> imageSaveTaskFinished(t, success)) + .doOnError((error) -> Logger.w(ImageSaver.this, "Unhandled exception", error)) + .onErrorReturnItem(TaskResult.Failure), false, CONCURRENT_REQUESTS_COUNT) + .subscribe((result) -> { + // Do nothing + }, (error) -> { + throw new RuntimeException(ImageSaver.this + + " Uncaught exception!!! " + + "workerQueue is in error state now!!! " + + "This should not happen!!!, original error = " + + error.getMessage()); + }, () -> { + throw new RuntimeException(ImageSaver.this + + " workerQueue stream has completed!!! This should not happen!!!"); + }); + } + + public Single startBundledTask(Context context, final List tasks) { + return Single.defer(() -> { + if (!fileManager.baseDirectoryExists(SavedFilesBaseDirectory.class)) { + // If current base dir is File API backed and it's not set, attempt to create it + // manually + if (ChanSettings.saveLocation.isFileDirActive()) { + File baseDirFile = new File(ChanSettings.saveLocation.getFileApiBaseDir().get()); + if (!baseDirFile.exists() && !baseDirFile.mkdirs()) { + return Single.just(BaseDirectoryDoesNotExist); + } + } + } + + return checkPermission(context).flatMap((granted) -> { + if (!granted) { + return Single.just(NoWriteExternalStoragePermission); + } + + return startBundledTaskInternal(tasks).map((result) -> result ? Saved : UnknownError); + }); + }); + } + + private Single checkPermission(Context context) { + if (hasPermission(context)) { + return Single.just(true); + } + + return Single + .create((emitter) -> requestPermission(context, emitter::onSuccess)) + .subscribeOn(AndroidSchedulers.mainThread()); + } + + private void imageSaveTaskFailed(ImageSaveTask task, Throwable error) { + BackgroundUtils.ensureMainThread(); + failedTasks.incrementAndGet(); + + synchronized (activeDownloads) { + activeDownloads.remove(task.postImage.imageUrl); + } + + if (checkBatchCompleted()) { + onBatchCompleted(); + } + + Logger.w(this, "imageSaveTaskFailed imageUrl = " + task.postImage.imageUrl); + + String errorMessage = getString(R.string.image_saver_failed_to_save_image, error.getMessage()); + EventBus.getDefault().post(new StartActivity.ActivityToastMessage(errorMessage, Toast.LENGTH_LONG)); + } + + private void imageSaveTaskFinished(ImageSaveTask task, TaskResult result) { + BackgroundUtils.ensureMainThread(); + doneTasks.incrementAndGet(); + + synchronized (activeDownloads) { + activeDownloads.remove(task.postImage.imageUrl); + } + + Logger.vd(this, "imageSaveTaskFinished imageUrl = " + task.postImage.imageUrl); + boolean wasAlbumSave = totalTasks.get() > 1; + + if (checkBatchCompleted()) { + onBatchCompleted(); + } else { + updateNotification(); + } + + // Do not show the toast when image download has failed; we will show it in imageSaveTaskFailed + // Also don't show the toast if the task was a share, or if this is an album save task + if (result == Success && !task.share) { + if (totalTasks.get() == 0) { + EventBus + .getDefault() + .post(new StartActivity.ActivityToastMessage(getText(task, wasAlbumSave), Toast.LENGTH_LONG)); + } + } else if (result == Canceled && totalTasks.get() == 0) { + EventBus + .getDefault() + .post(new StartActivity.ActivityToastMessage(getString(R.string.image_saver_canceled_by_user), + Toast.LENGTH_LONG + )); + } + } + + private boolean checkBatchCompleted() { + return doneTasks.get() + failedTasks.get() >= totalTasks.get(); + } + + private void onBatchCompleted() { + totalTasks.set(0); + doneTasks.set(0); + failedTasks.set(0); + + updateNotification(); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEvent(SavingNotification.SavingCancelRequestMessage message) { + synchronized (activeDownloads) { + activeDownloads.clear(); + } + + onBatchCompleted(); + } + + /** + * We really need to run this thing on a background thread because all the file-checks may take + * a lot of times (and ANR the app) if the base directory uses SAF and there a lot of files in + * the album + */ + private Single startBundledTaskInternal(List tasks) { + return Single + .fromCallable(() -> { + BackgroundUtils.ensureBackgroundThread(); + boolean allSuccess = true; + boolean isAlbumSave = tasks.size() > 1; + + for (ImageSaveTask task : tasks) { + AbstractFile saveLocation = task.getSaveLocation(); + if (saveLocation == null) { + allSuccess = false; + continue; + } + + task.setFinalSaveLocation(deduplicateFile(task.postImage, task, saveLocation, isAlbumSave)); + startTask(task); + } + + return allSuccess; + }) + .subscribeOn(workerScheduler) + .observeOn(AndroidSchedulers.mainThread()) + .doOnEvent((event, throwable) -> updateNotification()); + } + + private void startTask(ImageSaveTask task) { + synchronized (activeDownloads) { + activeDownloads.add(task.postImage.imageUrl); + } + + totalTasks.incrementAndGet(); + imageSaverQueue.onNext(task); + } + + private void updateNotification() { + BackgroundUtils.ensureMainThread(); + + Intent service = new Intent(getAppContext(), SavingNotification.class); + if (totalTasks.get() == 0) { + getAppContext().stopService(service); + } else { + if (BackgroundUtils.isInForeground()) { + service.putExtra(SavingNotification.DONE_TASKS_KEY, doneTasks.get()); + service.putExtra(SavingNotification.FAILED_TASKS_KEY, failedTasks.get()); + service.putExtra(SavingNotification.TOTAL_TASKS_KEY, totalTasks.get()); + ContextCompat.startForegroundService(getAppContext(), service); + } else { + getAppContext().stopService(service); + } + } + } + + private String getText(ImageSaveTask task, boolean wasAlbumSave) { + BackgroundUtils.ensureMainThread(); + + String text; + if (wasAlbumSave) { + String location; + AbstractFile saveLocation = task.getSaveLocation(); + + if (saveLocation == null) { + location = getString(R.string.image_saver_unknown_location); + } else { + location = saveLocation.getFullPath(); + } + + try { + text = getString(R.string.image_saver_album_download_success, URLDecoder.decode(location, "UTF-8")); + } catch (Exception e) { + text = getString(R.string.image_saver_album_download_success, location); + } + } else { + text = getString(R.string.image_saver_saved_as_message, task.getSavedName()); + } + + return text; + } + + private String filterName(String name) { + String filteredName = StringUtils.fileNameRemoveBadCharacters(name); + + String extension = Files.getFileExtension(filteredName); + + // Remove the extension length + the '.' symbol from the resulting "filteredName" length + // and if it equals to 0 that means that the whole file name consists of bad characters + // (e.g. the whole filename consists of japanese characters) so we need to generate a new + // file name + boolean isOnlyExtensionLeft = (filteredName.length() - extension.length() - 1) == 0; + + // filteredName.length() == 0 will only be true when "name" parameter does not have an + // extension + if (filteredName.isEmpty() || isOnlyExtensionLeft) { + String appendExtension = !extension.isEmpty() ? "." + extension : ""; + filteredName = System.currentTimeMillis() + appendExtension; + } + + return filteredName; + } + + @NonNull + private AbstractFile deduplicateFile( + PostImage postImage, ImageSaveTask task, @NonNull AbstractFile saveLocation, boolean albumSave + ) { + String name = ChanSettings.saveServerFilename.get() ? postImage.serverFilename : postImage.filename; + + // get the file representing the image we're going to be saving + String fileName = filterName(name + "." + postImage.extension); + AbstractFile saveFile = saveLocation.clone(new FileSegment(fileName)); + + //shared files don't need deduplicating, nor do album saves as we don't want to save duplicates for album saves + int i = 1; + while (!task.share && !albumSave && fileManager.exists(saveFile)) { + String resultFileName = name + "_(" + i + ")." + postImage.extension; + + fileName = filterName(resultFileName); + saveFile = saveLocation.clone(new FileSegment(fileName)); + i++; + } + + return saveFile; + } + + private boolean hasPermission(Context context) { + return ((StartActivity) context) + .getRuntimePermissionsHelper() + .hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); + } + + private void requestPermission(Context context, RuntimePermissionsHelper.Callback callback) { + ((StartActivity) context) + .getRuntimePermissionsHelper() + .requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, callback); + } + + public enum TaskResult { + Success, + Failure, + Canceled + } + + public enum ImageSaveResult { + Saved, + BaseDirectoryDoesNotExist, + NoWriteExternalStoragePermission, + UnknownError + } + + public static class DefaultImageSaveResultEvent { + public static void onResultEvent(Context context, ImageSaver.ImageSaveResult result) { + switch (result) { + case BaseDirectoryDoesNotExist: + showToast(context, R.string.files_base_dir_does_not_exist); + break; + case NoWriteExternalStoragePermission: + showToast(context, R.string.could_not_start_saving_no_permissions); + break; + case UnknownError: + showToast(context, R.string.album_download_could_not_save_one_or_more_images); + break; + case Saved: + // Do nothing, we got the permissions and started downloading an image + break; + } + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/StorageHelper.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/StorageHelper.java new file mode 100644 index 0000000000..0c49b20d44 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/saver/StorageHelper.java @@ -0,0 +1,37 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.saver; + +import java.io.File; + +public class StorageHelper { + public static boolean canNavigate(File file) { + return file != null && !isDirectoryBlacklisted(file) && file.exists() && file.isDirectory() && file.canRead(); + } + + public static boolean isDirectoryBlacklisted(File file) { + String absolutePath = file.getAbsolutePath(); + switch (absolutePath) { + case "/storage": + case "/storage/emulated": + case "/storage/emulated/0/0": + case "/storage/emulated/legacy": + return true; + } + return false; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/ChanSettings.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/ChanSettings.java new file mode 100644 index 0000000000..ea0b4baa07 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/ChanSettings.java @@ -0,0 +1,621 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.settings; + +import static android.content.res.Configuration.ORIENTATION_PORTRAIT; +import static com.github.adamantcheese.chan.utils.AndroidUtils.*; +import static java.util.concurrent.TimeUnit.MINUTES; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.Uri; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.BuildConfig; +import com.github.adamantcheese.chan.R; +import com.github.adamantcheese.chan.core.model.PostImage; +import com.github.adamantcheese.chan.core.settings.base_dir.SavedFilesBaseDirSetting; +import com.github.adamantcheese.chan.core.settings.primitives.*; +import com.github.adamantcheese.chan.core.settings.provider.SettingProvider; +import com.github.adamantcheese.chan.core.settings.provider.SharedPreferencesSettingProvider; +import com.github.adamantcheese.chan.ui.adapter.PostsFilter.PostsOrder; +import com.github.adamantcheese.chan.ui.helper.ThemeHelper; +import com.github.adamantcheese.chan.utils.Logger; + +import java.io.*; +import java.net.InetSocketAddress; +import java.net.Proxy; + +/** + * This settings class is for all persistable settings that should be saved as preferences. Note that all settings in here + * will be exported when a backup is exported; for persistable application data that SHOULDN'T be exported, use + * {@link PersistableChanState} to store that data. + */ + +public class ChanSettings { + public static final String EMPTY_JSON = "{}"; + + //region Setting Enums + public enum WatchNotifyMode { + NOTIFY_ALL_POSTS("all"), + NOTIFY_ONLY_QUOTES("quotes"); + + String mode; + + WatchNotifyMode(String mode) { + this.mode = mode; + } + } + + public enum MediaAutoLoadMode { + // ALways auto load, either wifi or mobile + ALL, + // Only auto load if on wifi + WIFI, + // Never auto load + NONE; + + public static boolean shouldLoadForNetworkType(ChanSettings.MediaAutoLoadMode networkType) { + if (networkType == ChanSettings.MediaAutoLoadMode.NONE) { + return false; + } else if (networkType == ChanSettings.MediaAutoLoadMode.WIFI) { + return isConnected(ConnectivityManager.TYPE_WIFI); + } else { + return networkType == ChanSettings.MediaAutoLoadMode.ALL; + } + } + } + + public enum PostViewMode { + LIST, + GRID, + STAGGER + } + + public enum LayoutMode { + AUTO, + PHONE, + SLIDE, + SPLIT + } + + public enum ImageClickPreloadStrategy { + PRELOAD_NEXT_IMAGE, + PRELOAD_PREVIOUS_IMAGE, + PRELOAD_BOTH_NEXT_AND_PREVIOUS, + PRELOAD_NO_IMAGES + } + + public enum ProxyMode { + HTTP(Proxy.Type.HTTP), + SOCKS(Proxy.Type.SOCKS); + + Proxy.Type type; + + ProxyMode(Proxy.Type type) { + this.type = type; + } + } + //endregion + + public static Proxy proxy; + private static final String sharedPrefsFile = "shared_prefs/" + BuildConfig.APPLICATION_ID + "_preferences.xml"; + + //region Declarations + //region THREAD WATCHER + public static final BooleanSetting watchEnabled; + public static final BooleanSetting watchBackground; + public static final IntegerSetting watchBackgroundInterval; + public static final BooleanSetting removeWatchedFromCatalog; + public static final BooleanSetting watchLastPageNotify; + public static final OptionsSetting watchNotifyMode; + public static final OptionsSetting watchSound; + public static final BooleanSetting watchPeek; + //endregion + + //region APPEARANCE + // Theme + public static final StringSetting themeDay; + public static final StringSetting themeNight; + + // Layout + public static final OptionsSetting layoutMode; + public static final IntegerSetting boardGridSpanCountPortrait; + public static final IntegerSetting albumGridSpanCountPortrait; + public static final IntegerSetting boardGridSpanCountLandscape; + public static final IntegerSetting albumGridSpanCountLandscape; + public static final BooleanSetting useStaggeredCatalogGrid; + public static final BooleanSetting useStaggeredAlbumGrid; + public static final BooleanSetting flipPostCells; + public static final BooleanSetting neverHideToolbar; + public static final BooleanSetting alwaysShowPostOptions; + public static final BooleanSetting enableReplyFab; + public static final BooleanSetting moveInputToBottom; + public static final BooleanSetting captchaOnBottom; + public static final BooleanSetting captchaMatchColors; + public static final BooleanSetting captchaInvertColors; + public static final BooleanSetting reverseDrawer; + public static final BooleanSetting useImmersiveModeForGallery; + public static final BooleanSetting moveSortToToolbar; + public static final BooleanSetting statusCellAsSubtitle; + public static final BooleanSetting neverShowPages; + + //Post + public static final IntegerSetting thumbnailSize; + public static final IntegerSetting fontSize; + public static final BooleanSetting shiftPostFormat; + public static final BooleanSetting useStaggeredPostImages; + public static final BooleanSetting accessibleInfo; + public static final BooleanSetting postFullDate; + public static final BooleanSetting postFileInfo; + public static final BooleanSetting postFilename; + public static final BooleanSetting textOnly; + public static final BooleanSetting revealTextSpoilers; + public static final BooleanSetting anonymize; + public static final BooleanSetting showAnonymousName; + public static final BooleanSetting anonymizeIds; + public static final BooleanSetting addDubs; + public static final BooleanSetting enableEmbedding; + public static final BooleanSetting enableEmoji; + public static final BooleanSetting parseExtraQuotes; + public static final BooleanSetting parseExtraSpoilers; + public static final BooleanSetting mildMarkdown; + public static final BooleanSetting markNewIps; + + // Images + public static final BooleanSetting hideImages; + public static final BooleanSetting removeImageSpoilers; + public static final BooleanSetting revealimageSpoilers; + public static final BooleanSetting parsePostImageLinks; + public static final IntegerSetting parsedPostImageLimit; + public static final BooleanSetting useOpaqueBackgrounds; + public static final BooleanSetting opacityMenuItem; + + // Set elsewhere in the application + public static final OptionsSetting boardViewMode; + public static final OptionsSetting boardOrder; + public static final OptionsSetting threadOrder; + public static final BooleanSetting showHistory; + //endregion + + //region BEHAVIOUR + // General + public static final BooleanSetting autoRefreshThread; + public static final BooleanSetting controllerSwipeable; + public static final BooleanSetting openLinkConfirmation; + public static final BooleanSetting openLinkBrowser; + public static final BooleanSetting imageViewerGestures; + public static final BooleanSetting alwaysOpenDrawer; + public static final BooleanSetting applyImageFilterToPost; + + // Reply + public static final BooleanSetting postPinThread; + public static final StringSetting postDefaultName; + public static final BooleanSetting alwaysSetNewFilename; + + // Post + public static final BooleanSetting repliesButtonsBottom; + public static final BooleanSetting volumeKeysScrolling; + public static final BooleanSetting enableLongPressURLCopy; + public static final BooleanSetting copyImage; + public static final BooleanSetting shareUrl; + public static final BooleanSetting shortTapPostCellQuote; + + // Other options + public static final BooleanSetting fullUserRotationEnable; + public static final BooleanSetting allowFilePickChooser; + + // Proxy + public static final BooleanSetting proxyEnabled; + public static final StringSetting proxyAddress; + public static final IntegerSetting proxyPort; + public static final OptionsSetting proxyType; + //endregion + + //region MEDIA + // Saving + public static final SavedFilesBaseDirSetting saveLocation; + public static final BooleanSetting saveImageBoardFolder; + public static final BooleanSetting saveImageThreadFolder; + public static final BooleanSetting saveAlbumBoardFolder; + public static final BooleanSetting saveAlbumThreadFolder; + public static final BooleanSetting saveServerFilename; + + // Video settings + public static final BooleanSetting videoAutoLoop; + public static final BooleanSetting videoDefaultMuted; + public static final BooleanSetting headsetDefaultMuted; + public static final BooleanSetting neverShowWebmControls; + public static final BooleanSetting enableSoundposts; + + // Media loading + public static final OptionsSetting imageAutoLoadNetwork; + public static final OptionsSetting videoAutoLoadNetwork; + public static final OptionsSetting imageClickPreloadStrategy; + public static final BooleanSetting autoLoadThreadImages; + public static final IntegerSetting fileCacheSize; + //endregion + + //region EXPERIMENTAL + public static final StringSetting androidTenGestureZones; + public static final BooleanSetting okHttpAllowHttp2; + public static final BooleanSetting okHttpAllowIpv6; + //endregion + + //region DEVELOPER + public static final BooleanSetting debugFilters; + public static final BooleanSetting crashOnWrongThread; + public static final BooleanSetting verboseLogs; + //endregion + + //region DATA + // While not a setting, the last image options selected should be persisted even after import. + public static final StringSetting lastImageOptions; + //endregion + //endregion + + static { + try { + SettingProvider p = new SharedPreferencesSettingProvider(getPreferences()); + + //region THREAD WATCHER + watchEnabled = new BooleanSetting(p, "preference_watch_enabled", false); + watchEnabled.addCallback(new EventBusCallback<>(watchEnabled)); + watchBackground = new BooleanSetting(p, "preference_watch_background_enabled", false); + watchBackground.addCallback(new EventBusCallback<>(watchBackground)); + watchBackgroundInterval = new IntegerSetting(p, "preference_watch_background_interval", 15) { + @Override + public Integer get() { + return (int) MINUTES.toMillis(super.get()); + } + + @Override + public Integer getForDisplay() { + return super.get(); + } + + @NonNull + @Override + public String toString() { + return super.get() + " minutes"; + } + }; + watchBackgroundInterval.addCallback(new EventBusCallback<>(watchBackgroundInterval)); + removeWatchedFromCatalog = new BooleanSetting(p, "remove_catalog_watch", false); + watchLastPageNotify = new BooleanSetting(p, "preference_watch_last_page_notify", false); + watchNotifyMode = new OptionsSetting<>(p, + "preference_watch_notify_mode", + WatchNotifyMode.class, + WatchNotifyMode.NOTIFY_ALL_POSTS + ); + watchSound = new OptionsSetting<>(p, + "preference_watch_sound", + WatchNotifyMode.class, + WatchNotifyMode.NOTIFY_ONLY_QUOTES + ); + watchPeek = new BooleanSetting(p, "preference_watch_peek", true); + //endregion + + //region APPEARANCE + // Theme + themeDay = new StringSetting(p, "preference_theme", ThemeHelper.defaultDayTheme.toString()); + themeNight = new StringSetting(p, "preference_theme_2", ThemeHelper.defaultNightTheme.toString()); + + //Layout + layoutMode = new OptionsSetting<>(p, "preference_layout_mode", LayoutMode.class, LayoutMode.AUTO); + boardGridSpanCountPortrait = new IntegerSetting(p, "preference_board_grid_span_count", 0); + albumGridSpanCountPortrait = new IntegerSetting(p, "preference_album_grid_span_count", 0); + boardGridSpanCountLandscape = new IntegerSetting(p, "preference_board_grid_span_count_landscape", 0); + albumGridSpanCountLandscape = new IntegerSetting(p, "preference_album_grid_span_count_landscape", 0); + useStaggeredCatalogGrid = new BooleanSetting(p, "use_staggered_catalog_grid", false); + useStaggeredAlbumGrid = new BooleanSetting(p, "use_staggered_album_grid", false); + flipPostCells = new BooleanSetting(p, "flip_post_cells", false); + neverHideToolbar = new BooleanSetting(p, "preference_never_hide_toolbar", false); + alwaysShowPostOptions = new BooleanSetting(p, "preference_always_show_post_options", false); + enableReplyFab = new BooleanSetting(p, "preference_enable_reply_fab", true); + moveInputToBottom = new BooleanSetting(p, "move_input_bottom", false); + captchaOnBottom = new BooleanSetting(p, "captcha_on_bottom", true); + captchaMatchColors = new BooleanSetting(p, "captcha_match_colors", false); + captchaMatchColors.addCallback(new EventBusCallback<>(captchaMatchColors)); + captchaInvertColors = new BooleanSetting(p, "captcha_invert_colors", false); + captchaInvertColors.addCallback(new EventBusCallback<>(captchaInvertColors)); + reverseDrawer = new BooleanSetting(p, "reverse_drawer", false); + useImmersiveModeForGallery = new BooleanSetting(p, "use_immersive_mode_for_gallery", false); + moveSortToToolbar = new BooleanSetting(p, "move_sort_to_toolbar", false); + statusCellAsSubtitle = new BooleanSetting(p, "status_cell_info_as_subtitle", false); + neverShowPages = new BooleanSetting(p, "never_show_page_number", false); + + // Post + thumbnailSize = new IntegerSetting(p, "preference_thumbnail", 100); + fontSize = new IntegerSetting(p, "preference_font", getRes().getBoolean(R.bool.is_tablet) ? 16 : 14); + shiftPostFormat = new BooleanSetting(p, "shift_post_format", true); + useStaggeredPostImages = new BooleanSetting(p, "use_staggered_post_images", false); + accessibleInfo = new BooleanSetting(p, "preference_enable_accessible_info", false); + postFullDate = new BooleanSetting(p, "preference_post_full_date", false); + postFileInfo = new BooleanSetting(p, "preference_post_file_info", true); + postFilename = new BooleanSetting(p, "preference_post_filename", true); + textOnly = new BooleanSetting(p, "preference_text_only", false); + revealTextSpoilers = new BooleanSetting(p, "preference_reveal_text_spoilers", false); + anonymize = new BooleanSetting(p, "preference_anonymize", false); + showAnonymousName = new BooleanSetting(p, "preference_show_anonymous_name", false); + anonymizeIds = new BooleanSetting(p, "preference_anonymize_ids", false); + addDubs = new BooleanSetting(p, "add_dubs", false); + enableEmbedding = new BooleanSetting(p, "parse_media_titles", true); + enableEmoji = new BooleanSetting(p, "enable_emoji", false); + parseExtraQuotes = new BooleanSetting(p, "parse_extra_quotes", false); + parseExtraSpoilers = new BooleanSetting(p, "parse_extra_spoilers", false); + mildMarkdown = new BooleanSetting(p, "parse_markdown_subset", false); + markNewIps = new BooleanSetting(p, "mark_new_ips", false); + + // Images + hideImages = new BooleanSetting(p, "preference_hide_images", false); + removeImageSpoilers = new BooleanSetting(p, "preference_reveal_image_spoilers", false); + revealimageSpoilers = new BooleanSetting(p, "preference_auto_unspoil_images", true); + parsePostImageLinks = new BooleanSetting(p, "parse_post_image_links", true); + parsedPostImageLimit = new IntegerSetting(p, "parse_post_image_limit", 5) { + @Override + public Integer get() { + return ChanSettings.parsePostImageLinks.get() ? super.get() : Integer.MAX_VALUE; + } + }; + parsePostImageLinks.addCallback(new EventBusCallback<>(parsePostImageLinks)); + useOpaqueBackgrounds = new BooleanSetting(p, "image_transparency_on", false); + opacityMenuItem = new BooleanSetting(p, "opacity_menu_item", false); + + //Elsewhere + boardViewMode = + new OptionsSetting<>(p, "preference_board_view_mode", PostViewMode.class, PostViewMode.LIST); + boardOrder = new OptionsSetting<>(p, "preference_board_order", PostsOrder.class, PostsOrder.BUMP_ORDER); + threadOrder = new OptionsSetting<>(p, "preference_thread_order", PostsOrder.class, PostsOrder.BUMP_ORDER); + showHistory = new BooleanSetting(p, "preference_show_history", true); + //endregion + + //region BEHAVIOUR + // General + autoRefreshThread = new BooleanSetting(p, "preference_auto_refresh_thread", true); + controllerSwipeable = new BooleanSetting(p, "preference_controller_swipeable", true); + openLinkConfirmation = new BooleanSetting(p, "preference_open_link_confirmation", false); + openLinkBrowser = new BooleanSetting(p, "preference_open_link_browser", false); + imageViewerGestures = new BooleanSetting(p, "image_viewer_gestures", true); + alwaysOpenDrawer = new BooleanSetting(p, "drawer_auto_open_always", false); + applyImageFilterToPost = new BooleanSetting(p, "apply_image_filtering_to_post", false); + + // Reply + postPinThread = new BooleanSetting(p, "preference_pin_on_post", false); + postDefaultName = new StringSetting(p, "preference_default_name", ""); + alwaysSetNewFilename = new BooleanSetting(p, "preference_always_set_new_filename", false); + + // Post + repliesButtonsBottom = new BooleanSetting(p, "preference_buttons_bottom", false); + volumeKeysScrolling = new BooleanSetting(p, "preference_volume_key_scrolling", false); + enableLongPressURLCopy = new BooleanSetting(p, "long_press_image_url_copy", true); + copyImage = new BooleanSetting(p, "preference_copy_image", false); + shareUrl = new BooleanSetting(p, "preference_image_share_url", false); + shortTapPostCellQuote = new BooleanSetting(p, "preference_short_tap_post_cell_quote", false); + + // Other options + fullUserRotationEnable = new BooleanSetting(p, "full_user_rotation_enable", true); + allowFilePickChooser = new BooleanSetting(p, "allow_file_picker_chooser", false); + + // Proxy + proxyEnabled = new BooleanSetting(p, "preference_proxy_enabled", false); + proxyAddress = new StringSetting(p, "preference_proxy_address", ""); + proxyPort = new IntegerSetting(p, "preference_proxy_port", 80); + proxyType = new OptionsSetting<>(p, "preference_proxy_type", ProxyMode.class, ProxyMode.HTTP); + try { + proxy = proxyEnabled.get() + ? new Proxy(proxyType.get().type, + InetSocketAddress.createUnresolved(proxyAddress.get(), proxyPort.get()) + ) + : null; + } catch (Exception e) { + Logger.w("ChanSettings Proxy", "Failed to set up proxy! Using to OkHttp's default.", e); + proxy = null; + } + //endregion + + //region MEDIA + // Saving + saveLocation = new SavedFilesBaseDirSetting(p); + saveImageBoardFolder = new BooleanSetting(p, "preference_save_image_subboard", false); + saveImageThreadFolder = new BooleanSetting(p, "preference_save_image_subthread", false); + saveAlbumBoardFolder = new BooleanSetting(p, "preference_save_album_subboard", false); + saveAlbumThreadFolder = new BooleanSetting(p, "preference_save_album_subthread", false); + saveServerFilename = new BooleanSetting(p, "preference_image_save_original", false); + + // Video Settings + videoAutoLoop = new BooleanSetting(p, "preference_video_loop", true); + videoDefaultMuted = new BooleanSetting(p, "preference_video_default_muted", true); + headsetDefaultMuted = new BooleanSetting(p, "preference_headset_default_muted", true); + neverShowWebmControls = new BooleanSetting(p, "never_show_webm_controls", false); + enableSoundposts = new BooleanSetting(p, "enable_soundposts", true); + + // Media loading + imageAutoLoadNetwork = new OptionsSetting<>(p, + "preference_image_auto_load_network", + MediaAutoLoadMode.class, + MediaAutoLoadMode.WIFI + ); + videoAutoLoadNetwork = new OptionsSetting<>(p, + "preference_video_auto_load_network", + MediaAutoLoadMode.class, + MediaAutoLoadMode.WIFI + ); + imageClickPreloadStrategy = new OptionsSetting<>(p, + "image_click_preload_strategy", + ImageClickPreloadStrategy.class, + ImageClickPreloadStrategy.PRELOAD_NEXT_IMAGE + ); + autoLoadThreadImages = new BooleanSetting(p, "preference_auto_load_thread", false); + fileCacheSize = new IntegerSetting(p, "preference_file_cache_size", 512); + //endregion + + //region EXPERIMENTAL + androidTenGestureZones = new StringSetting(p, "android_ten_gesture_zones", EMPTY_JSON); + okHttpAllowHttp2 = new BooleanSetting(p, "ok_http_allow_http_2", true); + okHttpAllowIpv6 = new BooleanSetting(p, "ok_http_allow_ipv6", true); + //endregion + + //region DEVELOPER + debugFilters = new BooleanSetting(p, "debug_filters", false); + crashOnWrongThread = new BooleanSetting(p, "crash_on_wrong_thread", BuildConfig.DEV_BUILD); + verboseLogs = new BooleanSetting(p, "verbose_logs", false); + //endregion + + //region DATA + lastImageOptions = new StringSetting(p, "last_image_options", ""); + //endregion + + } catch (Throwable error) { + // If something crashes while the settings are initializing we at least will have the + // stacktrace. Otherwise we won't because of Feather. + Logger.e("ChanSettings", "Error while initializing the settings", error); + throw error; + } + } + + public static int getBoardColumnCount() { + return (getScreenOrientation() == ORIENTATION_PORTRAIT + ? ChanSettings.boardGridSpanCountPortrait + : ChanSettings.boardGridSpanCountLandscape).get(); + } + + public static int getAlbumColumnCount() { + return (getScreenOrientation() == ORIENTATION_PORTRAIT + ? ChanSettings.albumGridSpanCountPortrait + : ChanSettings.albumGridSpanCountLandscape).get(); + } + + public static int getThumbnailSize(Context c) { + return getDimen(c, R.dimen.cell_post_thumbnail_size) * ChanSettings.thumbnailSize.get() / 100; + } + + public static boolean shouldUseFullSizeImage(PostImage postImage) { + return ChanSettings.autoLoadThreadImages.get() && !postImage.isInlined; + } + + /** + * Reads setting from the shared preferences file to a string. + * Called on the Database thread. + */ + public static String serializeToString() + throws IOException { + String prevSaveLocationUri = null; + + /* + We need to check if the user has any of the location settings set to a SAF directory. + We can't export them because if the user reinstalls the app and then imports a location + setting that point to a SAF directory that directory won't be valid for the app because + after clearing settings all permissions for that directory will be lost. So in case the + user tries to export SAF directory paths we don't export them and instead export default + locations. But we also don't wont to change the paths for the current app so we need to + save the previous paths, patch the sharedPrefs file read it to string and then restore + the current paths back to what they were before exporting. + + We also need to reset the active dir setting in case of resetting the base dir (and then + restore back) so that the user won't see empty paths to files when importing settings + back. + */ + if (saveLocation.isSafDirActive()) { + // Save the saveLocationUri + prevSaveLocationUri = saveLocation.getSafBaseDir().get(); + + saveLocation.getSafBaseDir().remove(); + saveLocation.resetFileDir(); + saveLocation.resetActiveDir(); + } + + File file = new File(getAppDir(), sharedPrefsFile); + + if (!file.exists()) { + throw new IOException("Shared preferences file does not exist! (" + file.getAbsolutePath() + ")"); + } + + if (!file.canRead()) { + throw new IOException("Cannot read from shared preferences file! (" + file.getAbsolutePath() + ")"); + } + + byte[] buffer = new byte[(int) file.length()]; + + try (FileInputStream inputStream = new FileInputStream(file)) { + int readAmount = inputStream.read(buffer); + + if (readAmount != file.length()) { + throw new IOException("Could not read shared prefs file readAmount != fileLength " + + readAmount + + ", " + + file.length()); + } + } + + // Restore back the previous paths + if (prevSaveLocationUri != null) { + ChanSettings.saveLocation.resetFileDir(); + ChanSettings.saveLocation.setSafBaseDir(Uri.parse(prevSaveLocationUri)); + } + + return new String(buffer); + } + + /** + * Reads settings from string and writes them to the shared preferences file. + * Called on the Database thread. + */ + public static void deserializeFromString(String settings) + throws IOException { + File file = new File(getAppDir(), sharedPrefsFile); + + if (!file.exists()) { + // Hack to create the shared_prefs file when it does not exist so that we don't cancel + // settings importing because shared_prefs file does not exist + int fontSize = ChanSettings.fontSize.get(); + ChanSettings.fontSize.setSyncNoCheck(fontSize); + } + + if (!file.canWrite()) { + throw new IOException("Cannot write to shared preferences file! (" + file.getAbsolutePath() + ")"); + } + + try (FileOutputStream outputStream = new FileOutputStream(file)) { + outputStream.write(settings.getBytes()); + outputStream.flush(); + } + } + + public static class SettingChanged { + public final Setting setting; + + public SettingChanged(Setting setting) { + this.setting = setting; + } + } + + public static class EventBusCallback + extends SettingChanged + implements Setting.SettingCallback { + + public EventBusCallback(Setting setting) { + super(setting); + } + + @Override + public void onValueChange(Setting setting) { + postToEventBus(new SettingChanged<>(setting)); + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/PersistableChanState.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/PersistableChanState.java new file mode 100644 index 0000000000..8d3b312b23 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/PersistableChanState.java @@ -0,0 +1,43 @@ +package com.github.adamantcheese.chan.core.settings; + +import com.github.adamantcheese.chan.BuildConfig; +import com.github.adamantcheese.chan.core.settings.primitives.*; +import com.github.adamantcheese.chan.core.settings.provider.SharedPreferencesSettingProvider; +import com.github.adamantcheese.chan.utils.AndroidUtils; +import com.github.adamantcheese.chan.utils.Logger; + +/** + * This state class acts in a similar manner to {@link ChanSettings}, but everything here is not exported; this data is + * strictly for use internally to the application and acts as a helper to ensure that data is not lost. + */ + +public class PersistableChanState { + public static IntegerSetting watchLastCount; + + public static BooleanSetting hasNewApkUpdate; + public static IntegerSetting previousVersion; + public static LongSetting updateCheckTime; + public static StringSetting previousDevHash; + + public static BooleanSetting noFunAllowed; + + public static BooleanSetting experimentalRoundedIDSpans; + + static { + try { + SharedPreferencesSettingProvider p = new SharedPreferencesSettingProvider(AndroidUtils.getAppState()); + watchLastCount = new IntegerSetting(p, "watch_last_count", 0); + + hasNewApkUpdate = new BooleanSetting(p, "has_new_apk_update", false); + previousVersion = new IntegerSetting(p, "previous_version", BuildConfig.VERSION_CODE); + updateCheckTime = new LongSetting(p, "update_check_time", 0L); + previousDevHash = new StringSetting(p, "previous_dev_hash", BuildConfig.COMMIT_HASH); + + noFunAllowed = new BooleanSetting(p, "no_fun_allowed", false); + experimentalRoundedIDSpans = new BooleanSetting(p, "experimental_rounded_id_spans", false); + } catch (Exception e) { + Logger.e("PersistableChanState", "Error while initializing the state", e); + throw e; + } + } +} \ No newline at end of file diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/base_dir/BaseDirectorySetting.kt b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/base_dir/BaseDirectorySetting.kt new file mode 100644 index 0000000000..150b78d0f3 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/base_dir/BaseDirectorySetting.kt @@ -0,0 +1,40 @@ +package com.github.adamantcheese.chan.core.settings.base_dir + +import android.net.Uri +import com.github.adamantcheese.chan.core.settings.base_dir.BaseDirectorySetting.ActiveBaseDir.Companion.fromIntegerSetting +import com.github.adamantcheese.chan.core.settings.primitives.IntegerSetting +import com.github.adamantcheese.chan.core.settings.primitives.StringSetting + +abstract class BaseDirectorySetting { + abstract var activeBaseDir: IntegerSetting + abstract val fileApiBaseDir: StringSetting + abstract val safBaseDir: StringSetting + + fun isSafDirActive() = fromIntegerSetting(activeBaseDir) == ActiveBaseDir.SAFBaseDir + fun isFileDirActive() = fromIntegerSetting(activeBaseDir) == ActiveBaseDir.FileBaseDir + + abstract fun setFileBaseDir(dir: String) + abstract fun setSafBaseDir(dir: Uri) + abstract fun resetFileDir() + abstract fun resetSafDir() + abstract fun resetActiveDir() + + /** + * DO NOT CHANGE THE ORDER!!! + * It will break the settings!!! + * */ + enum class ActiveBaseDir { + FileBaseDir, + SAFBaseDir; + + companion object { + fun fromIntegerSetting(setting: IntegerSetting): ActiveBaseDir { + val ordinalToFind = setting.get() + + return values() + .firstOrNull { value -> value.ordinal == ordinalToFind } + ?: throw IllegalStateException("Couldn't find ActiveBaseDir with ordinal $ordinalToFind") + } + } + } +} \ No newline at end of file diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/base_dir/SavedFilesBaseDirSetting.kt b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/base_dir/SavedFilesBaseDirSetting.kt new file mode 100644 index 0000000000..214faaf83b --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/base_dir/SavedFilesBaseDirSetting.kt @@ -0,0 +1,81 @@ +package com.github.adamantcheese.chan.core.settings.base_dir + +import android.net.Uri +import android.os.Environment +import com.github.adamantcheese.chan.BuildConfig +import com.github.adamantcheese.chan.core.settings.ChanSettings +import com.github.adamantcheese.chan.core.settings.primitives.IntegerSetting +import com.github.adamantcheese.chan.core.settings.primitives.StringSetting +import com.github.adamantcheese.chan.core.settings.provider.SettingProvider +import com.github.adamantcheese.chan.utils.AndroidUtils.postToEventBus +import java.io.File + +class SavedFilesBaseDirSetting( + override var activeBaseDir: IntegerSetting, + override val fileApiBaseDir: StringSetting, + override val safBaseDir: StringSetting +) : BaseDirectorySetting() { + + constructor(settingProvider: SettingProvider) : this( + IntegerSetting( + settingProvider, + "saved_files_active_base_dir_ordinal", + 0 + ), + StringSetting( + settingProvider, + "preference_image_save_location", + getDefaultSaveLocationDir() + ), + StringSetting( + settingProvider, + "preference_image_save_location_uri", + "" + ) + ) + + init { + fileApiBaseDir.addCallback { + postToEventBus(ChanSettings.SettingChanged(fileApiBaseDir)) + } + + safBaseDir.addCallback { + postToEventBus(ChanSettings.SettingChanged(safBaseDir)) + } + } + + override fun setFileBaseDir(dir: String) { + fileApiBaseDir.setSyncNoCheck(dir) + activeBaseDir.setSync(ActiveBaseDir.FileBaseDir.ordinal) + } + + override fun setSafBaseDir(dir: Uri) { + safBaseDir.setSyncNoCheck(dir.toString()) + activeBaseDir.setSync(ActiveBaseDir.SAFBaseDir.ordinal) + } + + override fun resetFileDir() { + fileApiBaseDir.setSyncNoCheck(getDefaultSaveLocationDir()) + } + + override fun resetSafDir() { + safBaseDir.setSyncNoCheck("") + } + + override fun resetActiveDir() { + activeBaseDir.setSync(ActiveBaseDir.FileBaseDir.ordinal) + } + + companion object { + private const val FILES_DIR = "files" + + fun getDefaultSaveLocationDir(): String { + @Suppress("DEPRECATION") + return (Environment.getExternalStorageDirectory().toString() + + File.separator + + BuildConfig.APP_LABEL + + File.separator + + FILES_DIR) + } + } +} \ No newline at end of file diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/BooleanSetting.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/BooleanSetting.java new file mode 100644 index 0000000000..9522296368 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/BooleanSetting.java @@ -0,0 +1,35 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.settings.primitives; + +import com.github.adamantcheese.chan.core.settings.provider.SettingProvider; + +public class BooleanSetting + extends Setting { + public BooleanSetting(SettingProvider settingProvider, String key, Boolean def) { + super(settingProvider, key, def); + } + + @Override + public Boolean convertStringToSettingType(String s) { + return Boolean.parseBoolean(s); + } + + public void toggle() { + set(!get()); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/IntegerSetting.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/IntegerSetting.java new file mode 100644 index 0000000000..b8168f3c54 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/IntegerSetting.java @@ -0,0 +1,35 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.settings.primitives; + +import com.github.adamantcheese.chan.core.settings.provider.SettingProvider; + +public class IntegerSetting + extends Setting { + public IntegerSetting(SettingProvider settingProvider, String key, Integer def) { + super(settingProvider, key, def); + } + + @Override + public Integer convertStringToSettingType(String s) { + try { + return Integer.parseInt(s); + } catch (Exception e) { + return getDefault(); + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/JsonSettings.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/JsonSettings.java new file mode 100644 index 0000000000..e4310cdd67 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/JsonSettings.java @@ -0,0 +1,34 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.settings.primitives; + +import com.google.gson.annotations.SerializedName; + +import java.util.HashMap; +import java.util.Map; + +public class JsonSettings { + @SerializedName("settings") + public Map> settings = new HashMap<>(); + + public static class JsonSetting { + @SerializedName("key") + public String key; + @SerializedName("value") + public T value; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/LongSetting.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/LongSetting.java new file mode 100644 index 0000000000..1a977df59e --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/LongSetting.java @@ -0,0 +1,35 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.settings.primitives; + +import com.github.adamantcheese.chan.core.settings.provider.SettingProvider; + +public class LongSetting + extends Setting { + public LongSetting(SettingProvider settingProvider, String key, Long def) { + super(settingProvider, key, def); + } + + @Override + public Long convertStringToSettingType(String s) { + try { + return Long.parseLong(s); + } catch (Exception e) { + return getDefault(); + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/OptionsSetting.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/OptionsSetting.java new file mode 100644 index 0000000000..6a179baa42 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/OptionsSetting.java @@ -0,0 +1,88 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.settings.primitives; + +import com.github.adamantcheese.chan.core.settings.provider.SettingProvider; + +public class OptionsSetting> + extends Setting { + private final T[] items; + + public OptionsSetting(SettingProvider settingProvider, String key, Class clazz, T def) { + super(settingProvider, key, def); + + this.items = clazz.getEnumConstants(); + } + + public T[] getItems() { + return items; + } + + @Override + public T get() { + if (cached == null) { + String itemName = (String) settingProvider.getValue(key, def.name()); + T selectedItem = null; + for (T item : items) { + if (item.name().equals(itemName)) { + selectedItem = item; + } + } + if (selectedItem == null) { + selectedItem = def; + } + + cached = selectedItem; + } + return cached; + } + + @Override + public void set(T value) { + if (!value.equals(get())) { + settingProvider.putValue(key, value.name()); + cached = value; + onValueChanged(); + } + } + + @Override + public T convertStringToSettingType(String s) { + for (T item : items) { + if (item.name().equalsIgnoreCase(s)) { + return item; + } + } + return getDefault(); + } + + @Override + public void setSync(T value) { + if (!value.equals(get())) { + settingProvider.putValueSync(key, value.name()); + cached = value; + onValueChanged(); + } + } + + @Override + public void remove() { + settingProvider.removeSync(key); + cached = null; + onValueChanged(); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/Setting.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/Setting.java new file mode 100644 index 0000000000..db0b3ef5fb --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/Setting.java @@ -0,0 +1,104 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.settings.primitives; + +import com.github.adamantcheese.chan.core.settings.provider.SettingProvider; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Setting { + protected final SettingProvider settingProvider; + protected final String key; + protected final T def; + private final List> callbacks = new ArrayList<>(); + + protected T cached; + + public Setting(SettingProvider settingProvider, String key, T def) { + this.settingProvider = settingProvider; + this.key = key; + this.def = def; + } + + public T get() { + if (cached == null) { + //noinspection unchecked + cached = (T) settingProvider.getValue(key, def); + } + return cached; + } + + public T getForDisplay() { + return get(); + } + + public void set(T value) { + if (!value.equals(get())) { + settingProvider.putValue(key, value); + cached = value; + onValueChanged(); + } + } + + public abstract T convertStringToSettingType(String s); + + public void setSync(T value) { + if (!value.equals(get())) { + settingProvider.putValueSync(key, value); + cached = value; + onValueChanged(); + } + } + + public void setSyncNoCheck(T value) { + settingProvider.putValueSync(key, value); + cached = value; + onValueChanged(); + } + + public void remove() { + settingProvider.removeSync(key); + cached = null; + } + + public T getDefault() { + return def; + } + + public void reset() { + set(def); + } + + public String getKey() { + return key; + } + + public void addCallback(SettingCallback callback) { + callbacks.add(callback); + } + + protected final void onValueChanged() { + for (SettingCallback callback : callbacks) { + callback.onValueChange(this); + } + } + + public interface SettingCallback { + void onValueChange(Setting setting); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/StringSetting.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/StringSetting.java new file mode 100644 index 0000000000..4ac9de6f09 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/primitives/StringSetting.java @@ -0,0 +1,32 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.settings.primitives; + +import com.github.adamantcheese.chan.core.settings.provider.SettingProvider; + +public class StringSetting + extends Setting { + + public StringSetting(SettingProvider settingProvider, String key, String def) { + super(settingProvider, key, def == null ? "" : def); + } + + @Override + public String convertStringToSettingType(String s) { + return s == null ? "" : s; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/provider/JsonSettingsProvider.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/provider/JsonSettingsProvider.java new file mode 100644 index 0000000000..8bb60dc83e --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/provider/JsonSettingsProvider.java @@ -0,0 +1,94 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.settings.provider; + +import com.github.adamantcheese.chan.core.settings.primitives.JsonSettings; +import com.github.adamantcheese.chan.core.settings.primitives.JsonSettings.JsonSetting; + +public class JsonSettingsProvider + implements SettingProvider { + public final JsonSettings jsonSettings; + private final Callback callback; + + public JsonSettingsProvider(JsonSettings jsonSettings, Callback callback) { + this.jsonSettings = jsonSettings; + this.callback = callback; + } + + @Override + public Object getValue(String key, Object def) { + JsonSetting setting = jsonSettings.settings.get(key); + if (setting == null) return def; + return setting.value; + } + + @SuppressWarnings("unchecked") + @Override + public void putValue(String key, Object value) { + JsonSetting jsonSetting = jsonSettings.settings.get(key); + if (value instanceof Integer) { + if (jsonSetting == null) { + JsonSetting v = new JsonSetting<>(); + v.value = (Integer) value; + jsonSettings.settings.put(key, v); + } else { + ((JsonSetting) jsonSetting).value = (Integer) value; + } + } else if (value instanceof Long) { + if (jsonSetting == null) { + JsonSetting v = new JsonSetting<>(); + v.value = (Long) value; + jsonSettings.settings.put(key, v); + } else { + ((JsonSetting) jsonSetting).value = (Long) value; + } + } else if (value instanceof Boolean) { + if (jsonSetting == null) { + JsonSetting v = new JsonSetting<>(); + v.value = (Boolean) value; + jsonSettings.settings.put(key, v); + } else { + ((JsonSetting) jsonSetting).value = (Boolean) value; + } + } else if (value instanceof String) { + if (jsonSetting == null) { + JsonSetting v = new JsonSetting<>(); + v.value = (String) value; + jsonSettings.settings.put(key, v); + } else { + ((JsonSetting) jsonSetting).value = (String) value; + } + } else { + throw new UnsupportedOperationException("Needs a handler for type " + value.getClass().getSimpleName()); + } + callback.save(); + } + + @Override + public void putValueSync(String key, Object value) { + putValue(key, value); + } + + @Override + public void removeSync(String key) { + jsonSettings.settings.remove(key); + } + + public interface Callback { + void save(); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/provider/SettingProvider.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/provider/SettingProvider.java new file mode 100644 index 0000000000..470fefc149 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/provider/SettingProvider.java @@ -0,0 +1,27 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.settings.provider; + +public interface SettingProvider { + T getValue(String key, T def); + + void putValue(String key, T value); + + void putValueSync(String key, T value); + + void removeSync(String key); +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/provider/SharedPreferencesSettingProvider.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/provider/SharedPreferencesSettingProvider.java new file mode 100644 index 0000000000..86af156cf8 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/provider/SharedPreferencesSettingProvider.java @@ -0,0 +1,88 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.settings.provider; + +import android.content.SharedPreferences; + +public class SharedPreferencesSettingProvider + implements SettingProvider { + private final SharedPreferences prefs; + + public SharedPreferencesSettingProvider(SharedPreferences prefs) { + this.prefs = prefs; + } + + @Override + public Object getValue(String key, Object def) { + Object ret; + try { + if (def instanceof Integer) { + ret = prefs.getInt(key, (Integer) def); + } else if (def instanceof Long) { + ret = prefs.getLong(key, (Long) def); + } else if (def instanceof Boolean) { + ret = prefs.getBoolean(key, (Boolean) def); + } else if (def instanceof String) { + ret = prefs.getString(key, (String) def); + } else { + throw new UnsupportedOperationException("Needs a handler for type " + def.getClass().getSimpleName()); + } + if (!prefs.contains(key)) { + // if a preference doesn't exist, put it first before returning the default so it does exist + putValueSync(key, def); + } + return ret; + } catch (ClassCastException e) { + return def; + } + } + + @Override + public void putValue(String key, Object value) { + if (value instanceof Integer) { + prefs.edit().putInt(key, (Integer) value).apply(); + } else if (value instanceof Long) { + prefs.edit().putLong(key, (Long) value).apply(); + } else if (value instanceof Boolean) { + prefs.edit().putBoolean(key, (Boolean) value).apply(); + } else if (value instanceof String) { + prefs.edit().putString(key, (String) value).apply(); + } else { + throw new UnsupportedOperationException("Needs a handler for type " + value.getClass().getSimpleName()); + } + } + + @Override + public void putValueSync(String key, Object value) { + if (value instanceof Integer) { + prefs.edit().putInt(key, (Integer) value).commit(); + } else if (value instanceof Long) { + prefs.edit().putLong(key, (Long) value).commit(); + } else if (value instanceof Boolean) { + prefs.edit().putBoolean(key, (Boolean) value).commit(); + } else if (value instanceof String) { + prefs.edit().putString(key, (String) value).commit(); + } else { + throw new UnsupportedOperationException("Needs a handler for type " + value.getClass().getSimpleName()); + } + } + + @Override + public void removeSync(String key) { + prefs.edit().remove(key).commit(); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/DummySite.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/DummySite.java new file mode 100644 index 0000000000..64909e8700 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/DummySite.java @@ -0,0 +1,275 @@ +package com.github.adamantcheese.chan.core.site; + +import static com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Boards; + +import android.util.JsonReader; + +import androidx.annotation.NonNull; +import androidx.core.util.Pair; + +import com.github.adamantcheese.chan.core.model.InternalSiteArchive; +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.PassthroughBitmapResult; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.ResponseResult; +import com.github.adamantcheese.chan.core.settings.primitives.JsonSettings; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.ChanPages; +import com.github.adamantcheese.chan.core.site.http.*; +import com.github.adamantcheese.chan.core.site.parser.*; +import com.github.adamantcheese.chan.core.site.parser.comment_action.ChanCommentAction; +import com.github.adamantcheese.chan.utils.BuildConfigUtils; + +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; + +import okhttp3.*; + +/** + * A dummy site, generally used internally and should not show up as user selectable in the site setup area. + */ +public class DummySite + implements Site { + + // so that some views properly render in the IDE + private HttpUrl getDummyRoot() { + return HttpUrl.get("https://www.example.com"); + } + + @Override + public void initialize(int id, JsonSettings userSettings) {} + + @Override + public void postInitialize() {} + + @Override + public int id() { + return -1; + } + + @Override + public String name() { + return "Dummy"; + } + + @Override + public SiteIcon icon() { + return SiteIcon.fromFavicon(BuildConfigUtils.TEST_POST_ICON_URL); + } + + @Override + public BoardsType boardsType() { + return BoardsType.STATIC; + } + + @Override + public SiteUrlHandler resolvable() { + return new SiteUrlHandler() { + @Override + public boolean respondsTo(@NonNull HttpUrl url) { + return getDummyRoot().host().equals(url.host()); + } + + @Override + public String desktopUrl(Loadable loadable, int postNo) { + if (loadable.isThreadMode()) { + String url = getDummyRoot() + .newBuilder() + .addPathSegment(loadable.boardCode) + .addPathSegment("thread") + .addPathSegment(String.valueOf(loadable.no)) + .build() + .toString(); + if (postNo > 0 && loadable.no != postNo) { + url += "#p" + postNo; + } + return url; + } else { + return getDummyRoot().newBuilder().addPathSegment(loadable.boardCode).build().toString(); + } + } + + @Override + public Loadable resolveLoadable(Site site, HttpUrl url) { + return Loadable.dummyLoadable(); + } + }; + } + + @Override + public boolean siteFeature(SiteFeature siteFeature) { + return false; + } + + @Override + public boolean boardFeature(BoardFeature boardFeature, Board board) { + return false; + } + + @Override + public List> settings() { + return Collections.emptyList(); + } + + @Override + public SiteEndpoints endpoints() { + return new SiteEndpoints() { + @Override + public HttpUrl catalog(Board board) { + return getDummyRoot().newBuilder().addPathSegment(board.code).addPathSegment("catalog.json").build(); + } + + @Override + public HttpUrl thread(Loadable loadable) { + return getDummyRoot() + .newBuilder() + .addPathSegment(loadable.board.code) + .addPathSegment("thread") + .addPathSegment(loadable.no + ".json") + .build(); + } + + @Override + public HttpUrl imageUrl(Post.Builder post, Map arg) { + return getDummyRoot().newBuilder().addPathSegment(post.board.code).addPathSegment("test.png").build(); + } + + @Override + public HttpUrl thumbnailUrl(Post.Builder post, boolean spoiler, Map arg) { + return getDummyRoot().newBuilder().addPathSegment(post.board.code).addPathSegment("test.png").build(); + } + + @Override + public Pair icon(IconType icon, Map arg) { + return new Pair<>(getDummyRoot().newBuilder().addPathSegment("test.png").build(), + new PassthroughBitmapResult() + ); + } + + @Override + public HttpUrl boards() { + return getDummyRoot().newBuilder().addPathSegment("boards.json").build(); + } + + @Override + public HttpUrl pages(Board board) { + return getDummyRoot().newBuilder().addPathSegment(board.code).addPathSegment("threads.json").build(); + } + + @Override + public HttpUrl archive(Board board) { + return getDummyRoot().newBuilder().addPathSegment(board.code).addPathSegment("archive").build(); + } + + @Override + public HttpUrl reply(Loadable thread) { + return getDummyRoot().newBuilder().addPathSegment(thread.boardCode).addPathSegment("post").build(); + } + + @Override + public HttpUrl delete(Post post) { + return getDummyRoot() + .newBuilder() + .addPathSegment(post.board.code) + .addPathSegment("imgboard.php") + .build(); + } + + @Override + public HttpUrl report(Post post) { + return getDummyRoot() + .newBuilder() + .addPathSegment(post.board.code) + .addPathSegment("imgboard.php") + .addQueryParameter("mode", "report") + .addQueryParameter("no", String.valueOf(post.no)) + .build(); + } + + @Override + public HttpUrl login() { + return getDummyRoot().newBuilder().addPathSegment("auth").build(); + } + }; + } + + @Override + public SiteContentReader chanReader() { + return new SiteContentReader() { + private final PostParser postParser = new PostParser(new ChanCommentAction()); + + @Override + public PostParser getParser() { + return postParser; + } + + @Override + public void loadThread(JsonReader reader, ChanReaderProcessingQueue queue) {} + + @Override + public void loadCatalog(JsonReader reader, ChanReaderProcessingQueue queue) {} + + @Override + public void readPostObject(JsonReader reader, ChanReaderProcessingQueue queue) {} + }; + } + + @Override + public SiteApi api() { + return new SiteApi() { + @Override + public void boards(ResponseResult boardsListener) {} + + @Override + public void pages(Board board, ResponseResult pagesListener) {} + + @Override + public AtomicReference post( + Loadable loadableWithDraft, PostListener postListener + ) {return new AtomicReference<>(new NetUtilsClasses.NullCall(getDummyRoot()));} + + @Override + public boolean postRequiresAuthentication(Loadable loadableWithDraft) {return false;} + + @Override + public SiteAuthentication postAuthenticate(Loadable loadableWithDraft) { + return SiteAuthentication.fromNone(); + } + + @Override + public void delete(DeleteRequest deleteRequest, ResponseResult deleteListener) {} + + @Override + public void archive(Board board, ResponseResult archiveListener) {} + + @Override + public void login(String username, String password, ResponseResult loginListener) {} + + @Override + public void logout(final ResponseResult loginListener) {} + + @Override + public boolean isLoggedIn() {return false;} + + @Override + public LoginRequest getLoginDetails() {return new LoginRequest(DummySite.this, "", "", true);} + + @Override + public List getCookies() {return Collections.emptyList();} + + @Override + public void clearCookies() {} + }; + } + + @Override + public Board board(String code) { + return Board.getDummyBoard(); + } + + @Override + public Board createBoard(String name, String code) { + return Board.getDummyBoard(); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/ImageSearch.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/ImageSearch.java new file mode 100644 index 0000000000..6f79551ee7 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/ImageSearch.java @@ -0,0 +1,140 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site; + +import com.github.adamantcheese.chan.core.model.PostImage; + +import java.util.ArrayList; +import java.util.List; + +public abstract class ImageSearch { + public static final List engines = new ArrayList<>(); + + public abstract String getName(); + + public abstract String getUrl(PostImage image); + + static { + engines.add(new ImageSearch() { + public String getName() { + return "Google"; + } + + public String getUrl(PostImage image) { + return "https://www.google.com/searchbyimage?image_url=" + image.getSearchUrl(); + } + }); + + engines.add(new ImageSearch() { + public String getName() { + return "iqdb"; + } + + public String getUrl(PostImage image) { + return "http://iqdb.org/?url=" + image.getSearchUrl(); + } + }); + + engines.add(new ImageSearch() { + public String getName() { + return "SauceNao"; + } + + public String getUrl(PostImage image) { + return "https://saucenao.com/search.php?url=" + image.getSearchUrl(); + } + }); + + engines.add(new ImageSearch() { + public String getName() { + return "TinEye"; + } + + public String getUrl(PostImage image) { + return "http://tineye.com/search/?url=" + image.getSearchUrl(); + } + }); + + engines.add(new ImageSearch() { + public String getName() { + return "trace.moe"; + } + + public String getUrl(PostImage image) { + return "https://trace.moe/?url=" + image.getSearchUrl(); + } + }); + + engines.add(new ImageSearch() { + public String getName() { + return "Pixiv"; + } + + public String getUrl(PostImage image) { + return "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=" + image.filename.substring(0, + image.filename.lastIndexOf('_') + ); + } + }); + + engines.add(new ImageSearch() { + public String getName() { + return "Yandex"; + } + + public String getUrl(PostImage image) { + return "https://yandex.com/images/search?rpt=imageview&url=" + image.getSearchUrl(); + } + }); + + engines.add(new ImageSearch() { + public String getName() { + return "Bing"; + } + + public String getUrl(PostImage image) { + return "https://www.bing.com/images/search?view=detailv2&iss=sbi&form=SBIIRP&sbisrc=UrlPaste&q=imgurl:" + + image.getSearchUrl() + + "&idpbck=1&selectedindex=0&id=" + + image.getSearchUrl() + + "&ccid=EgN4f83z&mediaurl=" + + image.getSearchUrl() + + "&exph=1080&expw=1920&vt=2&sim=11"; + } + }); + + engines.add(new ImageSearch() { + public String getName() { + return "Derpibooru"; + } + + public String getUrl(PostImage image) { + return "https://derpibooru.org/search/reverse?url=" + image.getSearchUrl(); + } + }); + + engines.add(new ImageSearch() { + public String getName() { + return "Furbooru"; + } + + public String getUrl(PostImage image) { + return "https://furbooru.org/search/reverse?url=" + image.getSearchUrl(); + } + }); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/Site.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/Site.java new file mode 100644 index 0000000000..ce60925fd3 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/Site.java @@ -0,0 +1,184 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site; + +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.ResponseResult; +import com.github.adamantcheese.chan.core.settings.primitives.JsonSettings; +import com.github.adamantcheese.chan.core.site.http.DeleteRequest; +import com.github.adamantcheese.chan.core.site.parser.SiteContentReader; + +import java.util.List; + +public interface Site { + enum SiteFeature { + /** + * This site supports posting. (Or rather, we've implemented support for it.) + * + * @see SiteApi#post(Loadable, SiteApi.PostListener) + * @see SiteEndpoints#reply(Loadable) + */ + POSTING, + + /** + * This site supports deleting posts. + * + * @see SiteApi#delete(DeleteRequest, ResponseResult) + * @see SiteEndpoints#delete(Post) + */ + POST_DELETE, + + /** + * This site supports reporting posts. + * + * @see SiteEndpoints#report(Post) + */ + POST_REPORT, + + /** + * This site supports some sort of authentication (like 4pass). + * + * @see SiteApi#login(String, String, ResponseResult) + * @see SiteEndpoints#login() + */ + LOGIN, + + /** + * This site reports image hashes. + */ + IMAGE_FILE_HASH + } + + /** + * Features available to check when {@link SiteFeature#POSTING} is {@code true}. + */ + enum BoardFeature { + /** + * This board supports posting with images. + */ + POSTING_IMAGE, + + /** + * This board supports posting with a checkbox to mark the posted image as a spoiler. + */ + POSTING_SPOILER, + + /** + * This board supports loading the archive, a list of threads that are locked after expiring. + */ + ARCHIVE, + + /** + * This board disables the name field. + */ + FORCED_ANONYMOUS, + } + + /** + * How the boards are organized for this site. + */ + enum BoardsType { + /** + * The site's boards are static, there is no extra info for a board in the api. + */ + STATIC(true), + + /** + * The site's boards are dynamic, a boards.json like endpoint is available to get the available boards. + */ + DYNAMIC(true), + + /** + * The site's boards are dynamic and infinite, existence of boards should be checked per board. + */ + INFINITE(false); + + /** + * Can the boards be listed, in other words, can + * {@link SiteApi#boards(ResponseResult)} be used, and is + * {@link #board(String)} available. + */ + public boolean canList; + + BoardsType(boolean canList) { + this.canList = canList; + } + } + + /** + * Initialize the site with the given id and userSettings. + *

Note: do not use any managers at this point, because they rely on the sites being initialized. + * Instead, use {@link #postInitialize()} + * + * @param id the site database id + * @param userSettings the site user settings + */ + void initialize(int id, JsonSettings userSettings); + + void postInitialize(); + + /** + * Global positive (>0) integer that uniquely identifies this site.
+ * Use the id received from {@link #initialize(int, JsonSettings)}. + * + * @return a positive (>0) integer that uniquely identifies this site. + */ + int id(); + + String name(); + + SiteIcon icon(); + + BoardsType boardsType(); + + SiteUrlHandler resolvable(); + + boolean siteFeature(SiteFeature siteFeature); + + boolean boardFeature(BoardFeature boardFeature, Board board); + + List> settings(); + + SiteEndpoints endpoints(); + + SiteContentReader chanReader(); + + SiteApi api(); + + /** + * Return the board for this site with the given {@code code}. + *

This does not need to create the board if it doesn't exist. This is important for + * sites that have the board type INFINITE. Returning from the database is + * enough.

+ * + * @param code the board code + * @return a board with the board code, or {@code null}. + */ + Board board(String code); + + /** + * Create a new board with the specified {@code code} and {@code name}. + *

This is only applicable to sites with a board type INFINITE.

+ * + * @param name the name of the board. + * @param code the code to create the board with. + * @return the created board. + */ + Board createBoard(String name, String code); +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteApi.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteApi.java new file mode 100644 index 0000000000..59e0b18255 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteApi.java @@ -0,0 +1,74 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site; + +import com.github.adamantcheese.chan.core.model.InternalSiteArchive; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; +import com.github.adamantcheese.chan.core.net.ProgressRequestBody; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Boards; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.ChanPages; +import com.github.adamantcheese.chan.core.site.http.*; + +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +import okhttp3.Call; +import okhttp3.Cookie; + +public interface SiteApi { + void boards(NetUtilsClasses.ResponseResult boardsListener); + + void pages(Board board, NetUtilsClasses.ResponseResult pagesListener); + + AtomicReference post(Loadable loadableWithDraft, PostListener postListener); + + interface PostListener + extends NetUtilsClasses.ResponseResult, ProgressRequestBody.ProgressRequestListener {} + + boolean postRequiresAuthentication(Loadable loadableWithDraft); + + /** + * If {@link ReplyResponse#requireAuthentication} was {@code true}, or if + * {@link #postRequiresAuthentication(Loadable)} is {@code true}, get the authentication + * required to post. + *

+ *

Some sites know beforehand if you need to authenticate, some sites only report it + * after posting. That's why there are two methods.

+ * + * @param loadableWithDraft The draft reply with info possibly necessary for auth. + * @return an {@link SiteAuthentication} model that describes the way to authenticate. + */ + SiteAuthentication postAuthenticate(Loadable loadableWithDraft); + + void delete(DeleteRequest deleteRequest, NetUtilsClasses.ResponseResult deleteListener); + + void archive(Board board, NetUtilsClasses.ResponseResult archiveListener); + + void login(String username, String password, NetUtilsClasses.ResponseResult loginListener); + + void logout(NetUtilsClasses.ResponseResult loginListener); + + boolean isLoggedIn(); + + LoginRequest getLoginDetails(); + + List getCookies(); + + void clearCookies(); +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteAuthentication.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteAuthentication.java new file mode 100644 index 0000000000..fda5c7ebdb --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteAuthentication.java @@ -0,0 +1,85 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site; + +import static com.github.adamantcheese.chan.core.site.SiteAuthentication.Type.*; + +@SuppressWarnings("ALL") +public class SiteAuthentication { + public enum Type { + NONE, + CAPTCHA1, + CAPTCHA2, + CAPTCHA2_NOJS, + CHAN4_CUSTOM, + GENERIC_WEBVIEW + } + + public static SiteAuthentication fromNone() { + return new SiteAuthentication(NONE); + } + + public static SiteAuthentication fromCaptcha1(String siteKey, String baseUrl) { + SiteAuthentication a = new SiteAuthentication(CAPTCHA1); + a.siteKey = siteKey; + a.baseUrl = baseUrl; + return a; + } + + public static SiteAuthentication fromCaptcha2(String siteKey, String baseUrl) { + SiteAuthentication a = new SiteAuthentication(CAPTCHA2); + a.siteKey = siteKey; + a.baseUrl = baseUrl; + return a; + } + + public static SiteAuthentication fromCaptcha2nojs(String siteKey, String baseUrl) { + SiteAuthentication a = new SiteAuthentication(CAPTCHA2_NOJS); + a.siteKey = siteKey; + a.baseUrl = baseUrl; + return a; + } + + public static SiteAuthentication fromChan4Custom(String baseUrl) { + SiteAuthentication a = new SiteAuthentication(CHAN4_CUSTOM); + a.baseUrl = baseUrl; + return a; + } + + public static SiteAuthentication fromUrl(String url, String retryText, String successText) { + SiteAuthentication a = new SiteAuthentication(GENERIC_WEBVIEW); + a.baseUrl = url; + a.retryText = retryText; + a.successText = successText; + return a; + } + + // All + public final Type type; + public String baseUrl; + + // captcha1 & captcha2 + public String siteKey; + + // generic webview + public String retryText; + public String successText; + + private SiteAuthentication(Type type) { + this.type = type; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteBase.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteBase.java new file mode 100644 index 0000000000..7652d9029e --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteBase.java @@ -0,0 +1,118 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site; + +import static com.github.adamantcheese.chan.Chan.inject; + +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.core.manager.BoardManager; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.NoFailResponseResult; +import com.github.adamantcheese.chan.core.repository.SiteRepository; +import com.github.adamantcheese.chan.core.settings.primitives.JsonSettings; +import com.github.adamantcheese.chan.core.settings.provider.JsonSettingsProvider; +import com.github.adamantcheese.chan.core.settings.provider.SettingProvider; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Boards; + +import java.util.Collections; +import java.util.List; + +import javax.inject.Inject; + +public abstract class SiteBase + implements Site { + /** + * This is the database ID of the site! + */ + protected int id; + + @Inject + private BoardManager boardManager; + + @Inject + private SiteRepository siteRepository; + + protected SettingProvider settingsProvider; + private JsonSettings userSettings; + private boolean initialized = false; + + @Override + public void initialize(int id, JsonSettings userSettings) { + if (initialized) { + throw new IllegalStateException("Cannot initialize more than once!"); + } + + this.id = id; + this.userSettings = userSettings; + initialized = true; + } + + @Override + public void postInitialize() { + inject(this); + + settingsProvider = + new JsonSettingsProvider(userSettings, () -> siteRepository.updateUserSettings(this, userSettings)); + + initializeSettings(); + + if (boardsType().canList) { + api().boards((NoFailResponseResult) result -> boardManager.updateAvailableBoardsForSite(SiteBase.this, + result + )); + } + } + + @Override + public int id() { + return id; + } + + @Override + public Board board(String code) { + return boardManager.getBoard(this, code); + } + + @Override + public List> settings() { + return Collections.emptyList(); + } + + public void initializeSettings() { + } + + @Override + public Board createBoard(String name, String code) { + Board existing = board(code); + if (existing != null) { + return existing; + } + + Board board = Board.fromSiteNameCode(this, name, code); + boardManager.updateAvailableBoardsForSite(this, new Boards(Collections.singletonList(board))); + return board; + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj == null) return false; + // sites are equal if their class names are equal (not classes directly, as those don't have a proper equals implementation) + if (!(obj.getClass().getSimpleName().equals(this.getClass().getSimpleName()))) return false; + return ((Site) obj).name().equals(this.name()); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteEndpoints.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteEndpoints.java new file mode 100644 index 0000000000..ac49fcb7e2 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteEndpoints.java @@ -0,0 +1,79 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site; + +import androidx.collection.ArrayMap; +import androidx.core.util.Pair; + +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.PassthroughBitmapResult; + +import java.util.Map; + +import okhttp3.HttpUrl; + +/** + * Endpoints for {@link Site}. + */ +public interface SiteEndpoints { + + HttpUrl catalog(Board board); + + HttpUrl thread(Loadable loadable); + + HttpUrl imageUrl(Post.Builder post, Map arg); + + HttpUrl thumbnailUrl(Post.Builder post, boolean spoiler, Map arg); + + enum IconType { + COUNTRY_FLAG, + BOARD_FLAG, + SINCE4PASS, + OTHER + } + + Pair icon(IconType icon, Map arg); + + HttpUrl boards(); + + HttpUrl pages(Board board); + + HttpUrl archive(Board board); + + HttpUrl reply(Loadable thread); + + HttpUrl delete(Post post); + + HttpUrl report(Post post); + + HttpUrl login(); + + static Map makeArgument(String key, String value) { + Map map = new ArrayMap<>(1); + map.put(key, value); + return map; + } + + static Map makeArgument(String key1, String value1, String key2, String value2) { + Map map = new ArrayMap<>(2); + map.put(key1, value1); + map.put(key2, value2); + return map; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteIcon.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteIcon.java new file mode 100644 index 0000000000..5246445aac --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteIcon.java @@ -0,0 +1,79 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site; + +import static com.github.adamantcheese.chan.utils.AndroidUtils.getRes; + +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.core.net.NetUtils; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.BitmapResult; +import com.github.adamantcheese.chan.core.repository.BitmapRepository; +import com.github.adamantcheese.chan.utils.Logger; + +import okhttp3.HttpUrl; + +public class SiteIcon { + private HttpUrl url; + private Drawable drawable; + + public static SiteIcon fromFavicon(HttpUrl url) { + SiteIcon siteIcon = new SiteIcon(); + siteIcon.url = url; + return siteIcon; + } + + public static SiteIcon fromDrawable(Drawable drawable) { + SiteIcon siteIcon = new SiteIcon(); + siteIcon.drawable = drawable; + return siteIcon; + } + + private SiteIcon() { + } + + public void get(final SiteIconResult res) { + if (drawable != null) { + res.onSiteIcon(drawable); + } else if (url != null) { + NetUtils.makeBitmapRequest(url, new BitmapResult() { + @Override + public void onBitmapFailure(@NonNull HttpUrl source, Exception e) { + Logger.ve(SiteIcon.this, "Error loading favicon", e); + drawable = null; + res.onSiteIcon(new BitmapDrawable(getRes(), BitmapRepository.error)); + } + + @Override + public void onBitmapSuccess(@NonNull HttpUrl source, @NonNull Bitmap bitmap, boolean fromCache) { + drawable = new BitmapDrawable(getRes(), bitmap); + drawable.setFilterBitmap(false); + drawable.setDither(false); + res.onSiteIcon(drawable); + } + }); + } + } + + public interface SiteIconResult { + void onSiteIcon(Drawable icon); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteRegistry.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteRegistry.java new file mode 100644 index 0000000000..099ed2d0b5 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteRegistry.java @@ -0,0 +1,75 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site; + +import com.github.adamantcheese.chan.core.site.sites.*; +import com.github.adamantcheese.chan.core.site.sites.chan4.Chan4; +import com.github.adamantcheese.chan.core.site.sites.dvach.Dvach; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; + +import java.util.*; + +/** + * Registry of all sites and url handler we have. + */ +public class SiteRegistry { + public static final List URL_HANDLERS = new ArrayList<>(); + public static final BiMap> SITE_CLASSES = HashBiMap.create(); + + static { + URL_HANDLERS.add(Chan4.URL_HANDLER); + //8chan was here but was removed + URL_HANDLERS.add(Lainchan.URL_HANDLER); + //arisuchan was here but was removed + URL_HANDLERS.add(Sushichan.URL_HANDLER); + URL_HANDLERS.add(Dvach.URL_HANDLER); + URL_HANDLERS.add(Wired7.URL_HANDLER); + //chan55 was here but was removed + URL_HANDLERS.add(Kun8.URL_HANDLER); + //chan420 was here but was removed + } + + static { + // This id-siteclass mapping is used to look up the correct site class at deserialization. + // This differs from the Site.id() id, that id is used for site instance linking, this is just to + // find the correct class to use. + SITE_CLASSES.put(0, Chan4.class); + + //8chan was here but was removed; don't use ID 1 + SITE_CLASSES.put(2, Lainchan.class); + //arisuchan was here but was removed; don't use ID 3 + SITE_CLASSES.put(4, Sushichan.class); + SITE_CLASSES.put(5, Dvach.class); + SITE_CLASSES.put(6, Wired7.class); + //chan55 was here but was removed; don't use ID 7 + SITE_CLASSES.put(8, Kun8.class); + //chan420 was here but was removed; don't use ID 9 + } + + public static int getClassIdForSiteName(String name) { + for (Map.Entry> siteClass : SITE_CLASSES.entrySet()) { + try { + Site s = siteClass.getValue().newInstance(); + if (s.name().equals(name)) { + return siteClass.getKey(); + } + } catch (Exception ignored) {} + } + return 0; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteResolver.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteResolver.java new file mode 100644 index 0000000000..ad909dd6b8 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteResolver.java @@ -0,0 +1,67 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site; + +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.repository.SiteRepository; + +import okhttp3.HttpUrl; + +public class SiteResolver { + private final SiteRepository siteRepository; + + public SiteResolver(SiteRepository siteRepository) { + this.siteRepository = siteRepository; + } + + public Loadable resolveLoadableForUrl(String url) { + final HttpUrl httpUrl = sanitizeUrl(url); + + if (httpUrl == null) { + return null; + } + + for (Site site : siteRepository.all().getAll()) { + if (site.resolvable().respondsTo(httpUrl)) { + Loadable resolvedLoadable = site.resolvable().resolveLoadable(site, httpUrl); + if (resolvedLoadable != null) { + return resolvedLoadable; + } + } + } + + return null; + } + + @Nullable + private HttpUrl sanitizeUrl(String url) { + HttpUrl httpUrl = HttpUrl.parse(url); + + if (httpUrl == null) { + httpUrl = HttpUrl.parse("https://" + url); + } + + if (httpUrl != null) { + if (httpUrl.host().indexOf('.') < 0) { + httpUrl = null; + } + } + return httpUrl; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteSetting.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteSetting.java new file mode 100644 index 0000000000..7e7184a0db --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteSetting.java @@ -0,0 +1,44 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site; + +import com.github.adamantcheese.chan.core.settings.primitives.Setting; + +import java.util.List; + +/** + * Hacky stuff to give the site settings a good UI. + */ +public class SiteSetting { + public enum Type { + OPTIONS, + STRING, + BOOLEAN + } + + public final String name; + public final Type type; + public final Setting setting; + public List optionNames; + + public SiteSetting(String name, Type type, Setting setting, List optionNames) { + this.name = name; + this.type = type; + this.setting = setting; + this.optionNames = optionNames; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteUrlHandler.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteUrlHandler.java new file mode 100644 index 0000000000..6f5fc9d663 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteUrlHandler.java @@ -0,0 +1,31 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site; + +import androidx.annotation.NonNull; + +import com.github.adamantcheese.chan.core.model.orm.Loadable; + +import okhttp3.HttpUrl; + +public interface SiteUrlHandler { + boolean respondsTo(@NonNull HttpUrl url); + + String desktopUrl(Loadable loadable, int postNo); + + Loadable resolveLoadable(Site site, HttpUrl url); +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/archives/AyaseArchive.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/archives/AyaseArchive.java new file mode 100644 index 0000000000..da72f53620 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/archives/AyaseArchive.java @@ -0,0 +1,312 @@ +package com.github.adamantcheese.chan.core.site.archives; + +import android.util.JsonReader; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.site.parser.ChanReaderProcessingQueue; +import com.github.adamantcheese.chan.core.site.parser.PostParser; +import com.github.adamantcheese.chan.core.site.parser.comment_action.ChanCommentAction; +import com.github.adamantcheese.chan.core.site.parser.comment_action.linkdata.ResolveLink; +import com.github.adamantcheese.chan.core.site.parser.comment_action.linkdata.ThreadLink; + +import org.jsoup.nodes.Node; + +import java.util.List; + +import kotlin.NotImplementedError; +import okhttp3.HttpUrl; + +public class AyaseArchive + extends ExternalSiteArchive { + private AyaseReader reader; + + public AyaseArchive(String domain, String name, List boardCodes, boolean searchEnabled) { + super(domain, name, boardCodes, searchEnabled); + } + + /* + + ---------------------------- NOTE ---------------------------- + + Pretty much everything in here is currently "unimplemented" and will throw exceptions; there aren't really any + sites that use this archive yet so I haven't written the parsing for them. The parsing should end up looking + pretty similar to Chan4's though. + + Commented out code is currently taken from FoolFuukaArchive as an example; don't use as-is, it won't work. + + */ + + private static class AyaseReader + extends ExternalArchiveSiteContentReader { + + private final PostParser parser = new PostParser(new AyaseCommentAction()) { + @Override + public String createQuoteElementString(Post.Builder post) { + return "$0"; // return the input + } + }; + + @Override + public PostParser getParser() { + return parser; + } + + @Override + public void loadThread( + JsonReader reader, ChanReaderProcessingQueue queue + ) + throws Exception { + throw new NotImplementedError(); + /*reader.beginObject(); // start JSON + reader.nextName(); // the op number, duplicated in the post object itself + reader.beginObject(); + // OP object + readPostObject(reader, queue); + + reader.nextName(); // posts object + reader.beginObject(); + // Posts object + while (reader.hasNext()) { + readPostObject(reader, queue); + } + reader.endObject(); + reader.endObject(); + reader.endObject();*/ + } + + @Override + public void readPostObject( + JsonReader reader, ChanReaderProcessingQueue queue + ) + throws Exception { + Post.Builder builder = new Post.Builder(); + builder.board(queue.loadable.board); + throw new NotImplementedError(); + /*reader.nextName(); // "op" or post number; not necessary as it's in the rest of the data so ignore this + reader.beginObject(); // post object itself + while (reader.hasNext()) { + String key = reader.nextName(); + switch (key) { + case "num": + builder.no(reader.nextInt()); + break; + case "thread_num": + builder.opId(reader.nextInt()); + break; + case "op": + builder.op(reader.nextInt() == 1); + queue.setOp(builder); + break; + case "timestamp": + builder.setUnixTimestampSeconds(reader.nextLong()); + break; + case "capcode": + String capcode = reader.nextString(); + if ("N".equals(capcode)) break; + builder.moderatorCapcode(capcode); + break; + case "name": + builder.name(reader.nextString()); + break; + case "trip": + if (reader.peek() == JsonToken.NULL) { + reader.nextNull(); + } else { + builder.tripcode(reader.nextString()); + } + break; + case "title": + if (builder.op && reader.peek() != JsonToken.NULL) { + String title = reader.nextString(); + builder.subject(title); + queue.getLoadable().title = title; + } else { + reader.skipValue(); + } + break; + case "comment_processed": + String comment = reader.nextString(); + comment = comment.replaceAll("\\n", ""); // comment contains extra newlines, remove em + builder.comment(comment); + + if (builder.op && TextUtils.isEmpty(builder.subject)) { + if (!TextUtils.isEmpty(comment)) { + queue.getLoadable().title = + comment.subSequence(0, Math.min(comment.length(), 200)) + ""; + } else { + queue.getLoadable().title = "/" + builder.board.code + "/" + builder.opId; + } + } + break; + case "sticky": + builder.sticky(reader.nextInt() == 1); + break; + case "locked": + builder.closed(reader.nextInt() == 1); + break; + case "media": + if (reader.peek() == JsonToken.NULL) { + reader.skipValue(); + continue; + } + PostImage.Builder imageBuilder = new PostImage.Builder(); + reader.beginObject(); + while (reader.hasNext()) { + String mediaKey = reader.nextName(); + switch (mediaKey) { + case "spoiler": + imageBuilder.spoiler(reader.nextInt() == 1); + imageBuilder.spoilerThumbnailUrl(HttpUrl.get( + BuildConfig.RESOURCES_ENDPOINT + "default_spoiler.png")); + break; + case "media_w": + imageBuilder.imageWidth(reader.nextInt()); + break; + case "media_h": + imageBuilder.imageHeight(reader.nextInt()); + break; + case "media_size": + imageBuilder.size(reader.nextLong()); + break; + case "media_filename": + String filename = reader.nextString(); + imageBuilder.filename(StringUtils.removeExtensionFromFileName(filename)); + imageBuilder.extension(StringUtils.extractFileNameExtension(filename)); + break; + case "media_hash": + imageBuilder.fileHash(reader.nextString(), true); + break; + case "media_link": + if (reader.peek() == JsonToken.NULL) { + reader.nextNull(); + imageBuilder.imageUrl(HttpUrl.get( + BuildConfig.RESOURCES_ENDPOINT + "archive_missing.png")); + } else { + imageBuilder.imageUrl(HttpUrl.get(reader.nextString())); + } + break; + case "media_orig": + imageBuilder.serverFilename(StringUtils.removeExtensionFromFileName(reader.nextString())); + break; + case "thumb_link": + if (reader.peek() == JsonToken.NULL) { + reader.nextNull(); + imageBuilder.thumbnailUrl(HttpUrl.get( + BuildConfig.RESOURCES_ENDPOINT + "archive_missing.png")); + } else { + imageBuilder.thumbnailUrl(HttpUrl.get(reader.nextString())); + } + break; + default: + reader.skipValue(); + } + } + reader.endObject(); + builder.images(Collections.singletonList(imageBuilder.build())); + break; + default: + reader.skipValue(); + break; + } + } + reader.endObject(); + + queue.addForParse(builder);*/ + } + } + + private static class AyaseCommentAction + extends ChanCommentAction { + public AyaseCommentAction() { + super(); + throw new NotImplementedError(); + /*// matches https://domain.tld/boardcode/blah/opNo(/#p)postNo/ + // blah can be "thread" or "post"; "thread" is just a normal thread link, but "post" is a crossthread link that needs to be resolved + Pattern compiledPattern = Pattern.compile( + "(?:https://)?" + domain.replaceAll("\\.", "\\\\.") + "/(.*?)/(?:.*?)/(\\d*+)/?#?p?(\\d+)?/?"); + setQuotePattern(compiledPattern); + // note that if an archive does NOT support a board, it will not match this as the archiver leaves things as-as + setFullQuotePattern(compiledPattern);*/ + } + + @NonNull + @Override + public CharSequence style( + @NonNull Node node, @Nullable CharSequence styledInnerText + ) { + throw new NotImplementedError(); // this likely can be fully removed and not overridden + /*// for some reason, stuff is wrapped in a "greentext" span if it starts with a > regardless of it is greentext or not + // the default post parser has already handled any inner tags by the time that it has gotten to this case, since + // deepest nodes are processed first + // in this case, we just want to return the text that has already been processed inside of this "greentext" node + // otherwise duplicate PostLinkables will be generated + if (element.getElementsByTag("span").hasClass("greentext") && element.childrenSize() > 0) { + return text; + } + return super.style(callback, theme, post, tag, text, element);*/ + } + } + + @Override + public ArchiveSiteUrlHandler resolvable() { + return new ArchiveSiteUrlHandler() { + @Override + public String desktopUrl(Loadable loadable, int postNo) { + throw new NotImplementedError(); + /*if (loadable.isThreadMode()) { + return "https://" + domain + "/" + loadable.boardCode + "/thread/" + loadable.no + (postNo > 0 ? "#" + + postNo : ""); + } else { + return "https://" + domain + "/" + loadable.boardCode; + }*/ + } + + @Override + public ThreadLink resolveToThreadLink(ResolveLink source, JsonReader reader) { + throw new NotImplementedError(); + /*try { + reader.beginObject(); //begin JSON + while (reader.hasNext()) { + String name = reader.nextName(); + if ("thread_num".equals(name)) { // we only care about the thread number, everything else we have + return new CommentParser.ThreadLink(source.board.code, reader.nextInt(), source.postId); + } else { + reader.skipValue(); + } + } + reader.endObject(); + } catch (Exception ignored) {} + return null;*/ + } + }; + } + + @Override + public ArchiveEndpoints endpoints() { + return new ArchiveEndpoints() { + @Override + public HttpUrl thread(Loadable loadable) { + throw new NotImplementedError(); + //return HttpUrl.get("https://" + domain + "/_/api/chan/thread/?board=" + loadable.boardCode + "&num="+ loadable.no); + } + + @Override + public HttpUrl resolvePost(String boardCode, int postNo) { + throw new NotImplementedError(); + //return HttpUrl.get("https://" + domain + "/_/api/chan/post/?board=" + boardCode + "&num=" + postNo); + } + }; + } + + @Override + public ExternalArchiveSiteContentReader chanReader() { + if (reader == null) { + reader = new AyaseReader(); + } + return reader; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/archives/ExternalSiteArchive.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/archives/ExternalSiteArchive.java new file mode 100644 index 0000000000..709eb76a89 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/archives/ExternalSiteArchive.java @@ -0,0 +1,208 @@ +package com.github.adamantcheese.chan.core.site.archives; + +import android.util.JsonReader; + +import androidx.annotation.NonNull; +import androidx.core.util.Pair; + +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.PassthroughBitmapResult; +import com.github.adamantcheese.chan.core.site.*; +import com.github.adamantcheese.chan.core.site.parser.ChanReaderProcessingQueue; +import com.github.adamantcheese.chan.core.site.parser.SiteContentReader; +import com.github.adamantcheese.chan.core.site.parser.comment_action.linkdata.ResolveLink; +import com.github.adamantcheese.chan.core.site.parser.comment_action.linkdata.ThreadLink; +import com.github.adamantcheese.chan.utils.JavaUtils.NoDeleteArrayList; + +import java.util.List; +import java.util.Map; + +import kotlin.random.Random; +import okhttp3.HttpUrl; + +/** + * Base class for any external archive site implementation, like FoolFuuka or Ayase. + */ +public abstract class ExternalSiteArchive + extends DummySite { + private final int id; + public final String domain; + public final String name; + public final NoDeleteArrayList boardCodes; + public final boolean searchEnabled; + + public ExternalSiteArchive( + String domain, String name, List boardCodes, boolean searchEnabled + ) { + this.domain = domain; + this.name = name; + this.boardCodes = new NoDeleteArrayList<>(boardCodes); + this.searchEnabled = searchEnabled; + + id = Random.Default.nextInt(Integer.MIN_VALUE / 2, -1); + } + + public Loadable getArchiveLoadable(Loadable op, int postNo) { + Loadable l = Loadable.forThread(board(op.boardCode), op.no, op.title, false); + if (op.no != postNo) l.markedNo = postNo; + if (!(op.site instanceof ExternalSiteArchive) && op.no == postNo) { + // copy the scroll location + l.listViewIndex = op.listViewIndex; + l.listViewTop = op.listViewTop; + } + return l; + } + + @Override + public int id() { + return id; + } + + @Override + public String name() { + return name; + } + + @NonNull + @Override + public String toString() { + return name; + } + + @Override + public SiteIcon icon() { + return null; + } + + @Override + public abstract ArchiveSiteUrlHandler resolvable(); + + @Override + public boolean siteFeature(SiteFeature siteFeature) { + return siteFeature == SiteFeature.IMAGE_FILE_HASH; + } + + @Override + public abstract ArchiveEndpoints endpoints(); + + @Override + public abstract ExternalArchiveSiteContentReader chanReader(); + + @Override + public Board board(String code) { + return Board.fromSiteNameCode(this, code, code); + } + + @Override + public Board createBoard(String name, String code) { + return Board.fromSiteNameCode(this, code, code); + } + + public abstract static class ArchiveEndpoints + implements SiteEndpoints { + + @Override + public HttpUrl catalog(Board board) { + return null; + } + + @Override + public abstract HttpUrl thread(Loadable loadable); + + @Override + public HttpUrl imageUrl(Post.Builder post, Map arg) { + return null; + } + + @Override + public HttpUrl thumbnailUrl(Post.Builder post, boolean spoiler, Map arg) { + return null; + } + + @Override + public Pair icon(IconType icon, Map arg) { + return null; + } + + @Override + public HttpUrl boards() { + return null; + } + + @Override + public HttpUrl pages(Board board) { + return null; + } + + @Override + public HttpUrl archive(Board board) { + return null; + } + + @Override + public HttpUrl reply(Loadable thread) { + return null; + } + + @Override + public HttpUrl delete(Post post) { + return null; + } + + @Override + public HttpUrl report(Post post) { + return null; + } + + @Override + public HttpUrl login() { + return null; + } + + public abstract HttpUrl resolvePost(String boardCode, int postNo); + } + + public abstract class ArchiveSiteUrlHandler + implements SiteUrlHandler { + @Override + public boolean respondsTo(@NonNull HttpUrl url) { + return domain.equals(url.host()); + } + + @Override + public abstract String desktopUrl(Loadable loadable, int postNo); + + @Override + public Loadable resolveLoadable(Site site, HttpUrl url) { + return Loadable.dummyLoadable(); + } + + /** + * Given a source ResolveLink, turn it into a regular ThreadLink that can be used by the application without any additional API calls. + * Originally added for FoolFuuka, because of how that archiver works. + * + * @param sourceLink The source of the link that needs resolution + * @param reader The JSON of the API query + * @return A ThreadLink that the ResolveLink is processed into + */ + public abstract ThreadLink resolveToThreadLink(ResolveLink sourceLink, JsonReader reader); + } + + public abstract static class ExternalArchiveSiteContentReader + implements SiteContentReader { + @Override + public abstract void loadThread(JsonReader reader, ChanReaderProcessingQueue queue) + throws Exception; + + @Override + public final void loadCatalog(JsonReader reader, ChanReaderProcessingQueue queue) { + // external archives don't support catalogs + } + + @Override + public abstract void readPostObject(JsonReader reader, ChanReaderProcessingQueue queue) + throws Exception; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/archives/FoolFuukaArchive.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/archives/FoolFuukaArchive.java new file mode 100644 index 0000000000..bff3e3466e --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/archives/FoolFuukaArchive.java @@ -0,0 +1,387 @@ +package com.github.adamantcheese.chan.core.site.archives; + +import static com.github.adamantcheese.chan.features.html_styling.impl.CommonStyleActions.NO_OP; +import static com.github.adamantcheese.chan.features.html_styling.impl.CommonThemedStyleActions.INLINE_QUOTE_COLOR; +import static com.github.adamantcheese.chan.utils.BuildConfigUtils.ARCHIVE_MISSING_THUMB_URL; +import static com.github.adamantcheese.chan.utils.BuildConfigUtils.DEFAULT_SPOILER_IMAGE_URL; +import static com.github.adamantcheese.chan.utils.HttpUrlUtilsKt.trimmedPathSegments; + +import android.text.TextUtils; +import android.util.JsonReader; +import android.util.JsonToken; + +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.PostImage; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.site.Site; +import com.github.adamantcheese.chan.core.site.parser.ChanReaderProcessingQueue; +import com.github.adamantcheese.chan.core.site.parser.PostParser; +import com.github.adamantcheese.chan.core.site.parser.comment_action.ChanCommentAction; +import com.github.adamantcheese.chan.core.site.parser.comment_action.linkdata.ResolveLink; +import com.github.adamantcheese.chan.core.site.parser.comment_action.linkdata.ThreadLink; +import com.github.adamantcheese.chan.features.html_styling.impl.HtmlTagAction; +import com.github.adamantcheese.chan.features.theme.Theme; +import com.google.common.io.Files; + +import org.jsoup.internal.StringUtil; +import org.jsoup.nodes.TextNode; + +import java.util.Collections; +import java.util.List; + +import okhttp3.HttpUrl; + +/** + * A site that uses FoolFuuka as the backend. + */ +public class FoolFuukaArchive + extends ExternalSiteArchive { + + private FoolFuukaReader reader; + + public FoolFuukaArchive( + String domain, String name, List boardCodes, boolean searchEnabled + ) { + super(domain, name, boardCodes, searchEnabled); + } + + private class FoolFuukaReader + extends ExternalArchiveSiteContentReader { + + private final PostParser parser = new PostParser(new FoolFuukaCommentAction()) { + @Override + public String createQuoteElementString(Post.Builder post) { + return ">>$1"; + } + }; + + @Override + public PostParser getParser() { + return parser; + } + + @Override + public void loadThread( + JsonReader reader, ChanReaderProcessingQueue queue + ) + throws Exception { + reader.beginObject(); // start JSON + reader.nextName(); // the op number, duplicated in the post object itself + reader.beginObject(); + // OP object + readPostObject(reader, queue); + + // in the event of only an OP, the regular posts section is not there + if (reader.peek() != JsonToken.END_OBJECT) { + reader.nextName(); // posts object + reader.beginObject(); + // Posts object + while (reader.hasNext()) { + readPostObject(reader, queue); + } + reader.endObject(); + } + + reader.endObject(); + reader.endObject(); + } + + @Override + public void readPostObject( + JsonReader reader, ChanReaderProcessingQueue queue + ) + throws Exception { + Post.Builder builder = new Post.Builder(); + builder.board(queue.loadable.board); + reader.nextName(); // "op" or post number; not necessary as it's in the rest of the data so ignore this + reader.beginObject(); // post object itself + while (reader.hasNext()) { + String key = reader.nextName(); + switch (key) { + case "num": + builder.no(reader.nextInt()); + break; + case "thread_num": + builder.opId(reader.nextInt()); + break; + case "op": + builder.op(reader.nextInt() == 1); + queue.setOp(builder.clone()); + break; + case "timestamp": + builder.setUnixTimestampSeconds(reader.nextLong()); + break; + case "capcode": + String capcode = reader.nextString(); + if ("N".equals(capcode)) break; + builder.moderatorCapcode(capcode); + break; + case "name": + builder.name(reader.nextString()); + break; + case "trip": + if (reader.peek() == JsonToken.NULL) { + reader.nextNull(); + } else { + builder.tripcode(reader.nextString()); + } + break; + case "title": + if (builder.op && reader.peek() != JsonToken.NULL) { + String title = reader.nextString(); + builder.subject(title); + queue.loadable.title = title; + } else { + reader.skipValue(); + } + break; + case "comment_processed": + String comment = reader.nextString(); + comment = comment.replaceAll("\\n", ""); // comment contains extra newlines, remove em + builder.comment(comment); + + if (builder.op && TextUtils.isEmpty(builder.getSubject())) { + if (!TextUtils.isEmpty(comment)) { + queue.loadable.title = comment.subSequence(0, Math.min(comment.length(), 200)) + ""; + } else { + queue.loadable.title = "/" + builder.board.code + "/" + builder.opId; + } + } + break; + case "sticky": + builder.sticky(reader.nextInt() == 1); + break; + case "locked": + builder.closed(reader.nextInt() == 1); + break; + case "media": + if (reader.peek() == JsonToken.NULL) { + reader.skipValue(); + continue; + } + PostImage.Builder imageBuilder = new PostImage.Builder(); + reader.beginObject(); + while (reader.hasNext()) { + String mediaKey = reader.nextName(); + switch (mediaKey) { + case "spoiler": + imageBuilder.spoiler(reader.nextInt() == 1); + imageBuilder.spoilerThumbnailUrl(DEFAULT_SPOILER_IMAGE_URL); + break; + case "media_w": + imageBuilder.imageWidth(reader.nextInt()); + break; + case "media_h": + imageBuilder.imageHeight(reader.nextInt()); + break; + case "media_size": + imageBuilder.size(reader.nextLong()); + break; + case "media_filename": + String filename = reader.nextString(); + imageBuilder.filename(Files.getNameWithoutExtension(filename)); + imageBuilder.extension(Files.getFileExtension(filename)); + break; + case "media_hash": + imageBuilder.fileHash(reader.nextString(), true); + break; + case "remote_media_link": + case "media_link": + if (reader.peek() == JsonToken.NULL) { + reader.nextNull(); + if (imageBuilder.hasImageUrl()) break; + imageBuilder.imageUrl(ARCHIVE_MISSING_THUMB_URL); + } else { + String imageUrl = reader.nextString(); + imageUrl = StringUtil.resolve("https://" + domain, imageUrl); + try { + imageBuilder.imageUrl(HttpUrl.get(imageUrl)); + } catch (Exception e) { + imageBuilder.imageUrl(ARCHIVE_MISSING_THUMB_URL); + } + } + break; + case "media_orig": + imageBuilder.serverFilename(Files.getNameWithoutExtension(reader.nextString())); + break; + case "thumb_link": + if (reader.peek() == JsonToken.NULL) { + reader.nextNull(); + imageBuilder.thumbnailUrl(ARCHIVE_MISSING_THUMB_URL); + } else { + String thumbUrl = reader.nextString(); + thumbUrl = StringUtil.resolve("https://" + domain, thumbUrl); + try { + imageBuilder.thumbnailUrl(HttpUrl.get(thumbUrl)); + } catch (Exception e) { + imageBuilder.thumbnailUrl(ARCHIVE_MISSING_THUMB_URL); + } + } + break; + default: + reader.skipValue(); + } + } + reader.endObject(); + builder.images(Collections.singletonList(imageBuilder.build())); + break; + default: + reader.skipValue(); + break; + } + } + reader.endObject(); + + queue.addForParse(builder); + } + } + + private static class FoolFuukaCommentAction + extends ChanCommentAction { + @Override + public HtmlTagAction addSpecificActions( + Theme theme, Post.Builder post, PostParser.PostParserCallback callback + ) { + HtmlTagAction base = super.addSpecificActions(theme, post, callback); + HtmlTagAction newAction = new HtmlTagAction(); + // for some reason, stuff is wrapped in a "greentext" span if it starts with a > regardless of it is greentext or not + // the default post parser has already handled any inner tags by the time that it has gotten to this case, since + // deepest nodes are processed first + // in this case, we just want to return the text that has already been processed inside of this "greentext" node + // otherwise duplicate PostLinkables will be generated + newAction.mapTagToRule( + "span", + "greentext", + (node, text) -> node.childNodeSize() == 1 && node.childNode(0) instanceof TextNode + ? INLINE_QUOTE_COLOR.with(theme).style(node, text) + : NO_OP.style(node, text) + ); + return base.mergeWith(newAction); + } + } + + @Override + public ArchiveSiteUrlHandler resolvable() { + return new ArchiveSiteUrlHandler() { + @Override + public String desktopUrl(Loadable loadable, int postNo) { + HttpUrl.Builder url = + new HttpUrl.Builder().scheme("https").host(domain).addPathSegment(loadable.boardCode); + if (loadable.isThreadMode()) { + return url + .addPathSegment("thread") + .addPathSegment(String.valueOf(loadable.no)) + .fragment(postNo > 0 ? String.valueOf(postNo) : null) + .toString(); + } else { + return url.toString(); + } + } + + @Override + public Loadable resolveLoadable(Site site, HttpUrl url) { + List parts = trimmedPathSegments(url); + + if (!parts.isEmpty()) { + String boardCode = parts.get(0); + Board board = site.board(boardCode); + if (board != null) { + if (parts.size() == 1) { + // Board mode + return Loadable.forCatalog(board); + } else { + // Thread mode + int no = -1; + try { + no = Integer.parseInt(parts.get(2)); + } catch (Exception ignored) { + } + + int post = -1; + try { + post = Integer.parseInt(url.fragment()); + } catch (Exception ignored) { + } + + if (no >= 0) { + Loadable loadable = Loadable.forThread(board, no, "", false); + if (post >= 0) { + loadable.markedNo = post; + } + + return loadable; + } + } + } + } + + return null; + } + + @Override + public ThreadLink resolveToThreadLink(ResolveLink source, JsonReader reader) { + try { + reader.beginObject(); //begin JSON + while (reader.hasNext()) { + String name = reader.nextName(); + if ("thread_num".equals(name)) { // we only care about the thread number, everything else we have + return new ThreadLink(source.boardCode, reader.nextInt(), source.postId); + } else { + reader.skipValue(); + } + } + reader.endObject(); + } catch (Exception ignored) {} + return null; + } + }; + } + + @Override + public ArchiveEndpoints endpoints() { + return new ArchiveEndpoints() { + @Override + public HttpUrl thread(Loadable loadable) { + return new HttpUrl.Builder() + .scheme("https") + .host(domain) + .addPathSegment("_") + .addPathSegment("api") + .addPathSegment("chan") + .addPathSegment("thread") + .addQueryParameter("board", loadable.boardCode) + .addQueryParameter("num", String.valueOf(loadable.no)) + .build(); + } + + @Override + public HttpUrl resolvePost(String boardCode, int postNo) { + return new HttpUrl.Builder() + .scheme("https") + .host(domain) + .addPathSegment("_") + .addPathSegment("api") + .addPathSegment("chan") + .addPathSegment("post") + .addQueryParameter("board", boardCode) + .addQueryParameter("num", String.valueOf(postNo)) + .build(); + } + }; + } + + @Override + public ExternalArchiveSiteContentReader chanReader() { + if (reader == null) { + reader = new FoolFuukaReader(); + } + return reader; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/CommonDataStructs.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/CommonDataStructs.java new file mode 100644 index 0000000000..5147c97d57 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/CommonDataStructs.java @@ -0,0 +1,63 @@ +package com.github.adamantcheese.chan.core.site.common; + +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Filter; + +import java.util.*; + +public class CommonDataStructs { + public static class Boards + extends ArrayList { + public Boards(int size) { + super(size); + } + + public Boards(List boards) { + super(boards); + } + + public Boards() { + super(); + } + } + + public static class Filters + extends ArrayList { + public Filters(Filter... filters) { + this(Arrays.asList(filters)); + } + + public Filters(List filters) { + super(filters); + } + + public Filters() { + super(); + } + + public void setAllEnableState(boolean enable) { + for (Filter f : this) { + f.enabled = enable; + } + } + } + + public static class ChanPages + extends ArrayList {} + + public static class ChanPage { + public final int page; + public final List threadNumbers; + + public ChanPage(int page, List threads) { + this.page = page; + this.threadNumbers = threads; + } + } + + public enum CaptchaType { + V2JS, + V2NOJS, + CHAN4_CUSTOM + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/CommonReplyHttpCall.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/CommonReplyHttpCall.java new file mode 100644 index 0000000000..ba26b43405 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/CommonReplyHttpCall.java @@ -0,0 +1,103 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site.common; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; +import com.github.adamantcheese.chan.core.net.ProgressRequestBody; +import com.github.adamantcheese.chan.core.site.http.HttpCall; +import com.github.adamantcheese.chan.core.site.http.ReplyResponse; + +import org.jsoup.Jsoup; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import okhttp3.*; + +public abstract class CommonReplyHttpCall + extends HttpCall { + private static final Pattern THREAD_NO_PATTERN = Pattern.compile(""); + + public final Loadable originatingLoadable; + + public CommonReplyHttpCall( + @NonNull NetUtilsClasses.ResponseResult callback, Loadable originatingLoadable + ) { + super(callback); + this.originatingLoadable = originatingLoadable; + } + + @Override + public void setup( + Request.Builder requestBuilder, @Nullable ProgressRequestBody.ProgressRequestListener progressListener + ) { + MultipartBody.Builder formBuilder = new MultipartBody.Builder(); + formBuilder.setType(MultipartBody.FORM); + + addParameters(formBuilder, progressListener); + + HttpUrl replyUrl = originatingLoadable.site.endpoints().reply(originatingLoadable); + requestBuilder.url(replyUrl).addHeader("Referer", replyUrl.toString()).post(formBuilder.build()); + } + + @Override + public ReplyResponse convert(Response response) + throws IOException { + ReplyResponse replyResponse = new ReplyResponse(originatingLoadable); + String responseString = response.body().string(); + /* + FOR A REGULAR REPLY + + ^^^^^^^ ^^^^^^^ + thread# post# + + FOR A NEW THREAD + + ^ ^^^^^^^^^ + catalog thread# + + First parameter is always parsed as threadNo, second always as postNo + */ + if (responseString.contains("errmsg")) { + replyResponse.errorMessage = Jsoup.parse(responseString).select("#errmsg").first().html(); + } else { + Matcher threadNoMatcher = THREAD_NO_PATTERN.matcher(responseString); + if (threadNoMatcher.find()) { + try { + replyResponse.threadNo = Integer.parseInt(threadNoMatcher.group(1)); + replyResponse.postNo = Integer.parseInt(threadNoMatcher.group(2)); + } catch (NumberFormatException ignored) { + } + + if (replyResponse.threadNo >= 0 + && replyResponse.postNo > 0) { //threadNo can be 0 iff this is a new thread + replyResponse.posted = true; + } + } + } + return replyResponse; + } + + public abstract void addParameters( + MultipartBody.Builder builder, @Nullable ProgressRequestBody.ProgressRequestListener progressListener + ); +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/CommonSite.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/CommonSite.java new file mode 100644 index 0000000000..ac80c8f821 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/CommonSite.java @@ -0,0 +1,521 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site.common; + +import static android.text.TextUtils.isEmpty; + +import androidx.annotation.CallSuper; +import androidx.annotation.NonNull; +import androidx.core.util.Pair; + +import com.github.adamantcheese.chan.core.model.InternalSiteArchive; +import com.github.adamantcheese.chan.core.model.Post; +import com.github.adamantcheese.chan.core.model.orm.Board; +import com.github.adamantcheese.chan.core.model.orm.Loadable; +import com.github.adamantcheese.chan.core.net.NetUtils; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.*; +import com.github.adamantcheese.chan.core.settings.primitives.JsonSettings; +import com.github.adamantcheese.chan.core.site.*; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.Boards; +import com.github.adamantcheese.chan.core.site.common.CommonDataStructs.ChanPages; +import com.github.adamantcheese.chan.core.site.http.*; +import com.github.adamantcheese.chan.core.site.parser.PostParser; +import com.github.adamantcheese.chan.core.site.parser.SiteContentReader; + +import java.io.IOException; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import okhttp3.*; + +/** + * Your base site implementation; take a look at {@link #initialize(int, JsonSettings)} for the exact items you need to specify. + * Do note that {@link #setName(String)} and {@link #setIcon(SiteIcon)} should be called in the constructor, otherwise site selection will break. + * This is an optimization on the site selector that prevents extra work from being done. + */ +public abstract class CommonSite + extends SiteBase { + private String name; + private SiteIcon icon; + private BoardsType boardsType; + private CommonConfig config; + private CommonSiteUrlHandler resolvable; + private CommonEndpoints endpoints; + private CommonApi actions; + private CommonSiteContentReader contentReader; + + public PostParser postParser; + + private final Boards staticBoards = new Boards(); + + @Override + public void initialize(int id, JsonSettings userSettings) { + super.initialize(id, userSettings); + setup(); + + if ("App Setup".equals(name)) return; // for this special site, we don't need any of the rest of the items + + if (name == null) { + throw new NullPointerException("setName not called"); + } + + if (icon == null) { + throw new NullPointerException("setIcon not called"); + } + + if (boardsType == null) { + throw new NullPointerException("setBoardsType not called"); + } + + if (this.config == null) { + throw new NullPointerException("setConfig not called"); + } + + if (resolvable == null) { + throw new NullPointerException("setResolvable not called"); + } + + if (endpoints == null) { + throw new NullPointerException("setEndpoints not called"); + } + + if (actions == null) { + throw new NullPointerException("setActions not called"); + } + + if (contentReader == null) { + throw new NullPointerException("setApi not called"); + } + + if (postParser == null) { + throw new NullPointerException("setParser not called"); + } + } + + public abstract void setup(); + + /** + * Call this in your constructor! + * + * @param name This site's name. + */ + public void setName(String name) { + this.name = name; + } + + /** + * Call this in your constructor! + * + * @param icon The favicon for this site; be sure that this is a singleton for efficiency. + */ + public final void setIcon(SiteIcon icon) { + this.icon = icon; + icon.get(ico -> {}); + } + + public void setBoardsType(BoardsType boardsType) { + this.boardsType = boardsType; + } + + public void setBoards(Board... boards) { + boardsType = BoardsType.STATIC; + Collections.addAll(staticBoards, boards); + } + + public final void setConfig(CommonConfig config) { + this.config = config; + } + + public final void setResolvable(CommonSiteUrlHandler resolvable) { + this.resolvable = resolvable; + } + + public final void setEndpoints(CommonEndpoints endpoints) { + this.endpoints = endpoints; + } + + public final void setActions(CommonApi actions) { + this.actions = actions; + } + + public final void setContentReader(CommonSiteContentReader contentReader) { + this.contentReader = contentReader; + } + + public final void setParser(PostParser parser) { + postParser = parser; + } + + /* + * Site implementation: + */ + + @Override + public String name() { + return name; + } + + @Override + public SiteIcon icon() { + return icon; + } + + @Override + public BoardsType boardsType() { + return boardsType; + } + + @Override + public SiteUrlHandler resolvable() { + return resolvable; + } + + @Override + public boolean siteFeature(SiteFeature siteFeature) { + return config.siteFeature(siteFeature); + } + + @Override + public boolean boardFeature(BoardFeature boardFeature, Board board) { + return config.boardFeature(boardFeature, board); + } + + @Override + public SiteEndpoints endpoints() { + return endpoints; + } + + @Override + public SiteApi api() { + return actions; + } + + @Override + public SiteContentReader chanReader() { + return contentReader; + } + + public abstract static class CommonConfig { + @CallSuper + public boolean siteFeature(SiteFeature siteFeature) { + return siteFeature == SiteFeature.IMAGE_FILE_HASH; + } + + public boolean boardFeature(BoardFeature boardFeature, Board board) { + switch (boardFeature) { + case POSTING_IMAGE: + return true; + case POSTING_SPOILER: + return board.spoilers; + default: + return false; + } + } + } + + public static abstract class CommonSiteUrlHandler + implements SiteUrlHandler { + public abstract HttpUrl getUrl(); + + @Override + public boolean respondsTo(@NonNull HttpUrl url) { + return getUrl().host().equals(url.host()); + } + + @Override + public String desktopUrl(Loadable loadable, int postNo) { + if (loadable.isCatalogMode()) { + return getUrl().newBuilder().addPathSegment(loadable.boardCode).toString(); + } else if (loadable.isThreadMode()) { + return getUrl() + .newBuilder() + .addPathSegment(loadable.boardCode) + .addPathSegment("res") + .addPathSegment(String.valueOf(loadable.no)) + .toString(); + } else { + return getUrl().toString(); + } + } + + @Override + public Loadable resolveLoadable(Site site, HttpUrl url) { + StringBuilder urlPath = new StringBuilder(); + //noinspection KotlinInternalInJava + HttpUrl.Companion.toPathString$okhttp(url.pathSegments(), urlPath); + + Matcher board = boardPattern().matcher(urlPath); + Matcher thread = threadPattern().matcher(urlPath); + + try { + if (thread.find()) { + Board b = site.board(thread.group(1)); + if (b == null) { + return null; + } + Loadable l = Loadable.forThread(b, Integer.parseInt(thread.group(2)), ""); + + if (!isEmpty(url.fragment())) { + l.markedNo = Integer.parseInt(url.fragment()); + } + + return l; + } else if (board.find()) { + Board b = site.board(board.group(1)); + if (b == null) { + return null; + } + + return Loadable.forCatalog(b); + } + } catch (NumberFormatException ignored) { + } + + return null; + } + + public Pattern boardPattern() { + return Pattern.compile("/(\\w+)"); + } + + public Pattern threadPattern() { + return Pattern.compile("/(\\w+)/\\w+/(\\d+).*"); + } + } + + public static abstract class CommonEndpoints + implements SiteEndpoints { + + public CommonEndpoints() {} + + @Override + public HttpUrl catalog(Board board) { + return null; + } + + @Override + public HttpUrl thread(Loadable loadable) { + return null; + } + + @Override + public HttpUrl imageUrl(Post.Builder post, Map arg) { + return null; + } + + @Override + public HttpUrl thumbnailUrl(Post.Builder post, boolean spoiler, Map arg) { + return null; + } + + @Override + public Pair icon(IconType icon, Map arg) { + return null; + } + + @Override + public HttpUrl boards() { + return null; + } + + @Override + public HttpUrl archive(Board board) { + return null; + } + + @Override + public HttpUrl reply(Loadable thread) { + return null; + } + + @Override + public HttpUrl delete(Post post) { + return null; + } + + @Override + public HttpUrl report(Post post) { + return null; + } + + @Override + public HttpUrl login() { + return null; + } + } + + public static class SimpleHttpUrl { + @NonNull + public HttpUrl.Builder url; + + public SimpleHttpUrl(String from) { + url = HttpUrl.get(from).newBuilder(); + } + + public SimpleHttpUrl(@NonNull HttpUrl.Builder from) { + url = from; + } + + public SimpleHttpUrl builder() { + return new SimpleHttpUrl(url.build().newBuilder()); + } + + public SimpleHttpUrl s(String segment) { + url.addPathSegment(segment); + return this; + } + + public HttpUrl url() { + return url.build(); + } + } + + public static abstract class CommonApi + implements SiteApi { + protected CommonSite site; + + public CommonApi(CommonSite site) { + this.site = site; + } + + @Override + public AtomicReference post(Loadable loadableWithDraft, PostListener postListener) { + MultipartHttpCall call = + new MultipartHttpCall(new MainThreadResponseResult<>(postListener)) { + @Override + public ReplyResponse convert(Response response) { + return handlePost(loadableWithDraft, response); + } + }; + + call.url(site.endpoints().reply(loadableWithDraft)); + + AtomicReference returnCall = new AtomicReference<>(); + prepare(call, loadableWithDraft, (NoFailResponseResult) result -> { + setupPost(loadableWithDraft, call); + returnCall.set(NetUtils.makeHttpCall(call)); + }); + return returnCall; + } + + public void setupPost(Loadable loadable, MultipartHttpCall call) { + } + + public abstract ReplyResponse handlePost(Loadable loadable, Response httpResponse); + + @Override + public boolean postRequiresAuthentication(Loadable loadableWithDraft) { + return false; + } + + @Override + public SiteAuthentication postAuthenticate(Loadable loadableWithDraft) { + return SiteAuthentication.fromNone(); + } + + public void prepare( + MultipartHttpCall call, + Loadable loadable, + NetUtilsClasses.ResponseResult extraHeaders + ) { + // by default, no class needs any extra headers so just invoke the result immediately + extraHeaders.onSuccess(null); + } + + @Override + public void delete(DeleteRequest deleteRequest, ResponseResult deleteListener) { + MultipartHttpCall call = + new MultipartHttpCall(new MainThreadResponseResult<>(deleteListener)) { + @Override + public DeleteResponse convert(Response response) + throws IOException { + return handleDelete(response); + } + }; + + call.url(site.endpoints().delete(deleteRequest.post)); + setupDelete(deleteRequest, call); + NetUtils.makeHttpCall(call); + } + + public void setupDelete(DeleteRequest deleteRequest, MultipartHttpCall call) { + } + + public DeleteResponse handleDelete(Response httpResponse) + throws IOException { + return new DeleteResponse(); + } + + @Override + public void boards(ResponseResult boardsListener) { + boardsListener.onSuccess(new Boards(site.staticBoards)); + } + + @Override + public void pages(Board board, ResponseResult pagesListener) { + pagesListener.onSuccess(new ChanPages()); + } + + @Override + public void archive(Board board, ResponseResult archiveListener) { + } + + @Override + public void login(String username, String password, ResponseResult loginListener) { + } + + @Override + public void logout(final ResponseResult loginListener) { + } + + @Override + public boolean isLoggedIn() { + return false; + } + + @Override + public LoginRequest getLoginDetails() { + return null; + } + + @Override + public List getCookies() { + return Collections.emptyList(); + } + + @Override + public void clearCookies() { + } + } + + public static abstract class CommonSiteContentReader + implements SiteContentReader { + protected CommonSite site; + + public CommonSiteContentReader(CommonSite site) { + this.site = site; + } + + @Override + public final PostParser getParser() { + return site.postParser; + } + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/FutabaSiteContentReader.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/FutabaSiteContentReader.java new file mode 100644 index 0000000000..2e531c17b7 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/FutabaSiteContentReader.java @@ -0,0 +1,375 @@ +package com.github.adamantcheese.chan.core.site.common; + +import static com.github.adamantcheese.chan.core.site.SiteEndpoints.makeArgument; + +import android.util.JsonReader; + +import androidx.core.util.Pair; + +import com.github.adamantcheese.chan.core.model.*; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses.PassthroughBitmapResult; +import com.github.adamantcheese.chan.core.site.SiteEndpoints; +import com.github.adamantcheese.chan.core.site.SiteEndpoints.IconType; +import com.github.adamantcheese.chan.core.site.parser.*; +import com.github.adamantcheese.chan.core.site.parser.comment_action.ChanCommentAction; + +import java.io.IOException; +import java.util.*; + +import okhttp3.HttpUrl; + +public class FutabaSiteContentReader + implements SiteContentReader { + private final PostParser postParser = new PostParser(new ChanCommentAction()); + + @Override + public PostParser getParser() { + return postParser; + } + + @Override + public void loadThread(JsonReader reader, ChanReaderProcessingQueue queue) + throws Exception { + reader.beginObject(); + // Page object + while (reader.hasNext()) { + String key = reader.nextName(); + if (key.equals("posts")) { + reader.beginArray(); + // Thread array + while (reader.hasNext()) { + // Thread object + readPostObject(reader, queue); + } + reader.endArray(); + } else { + reader.skipValue(); + } + } + reader.endObject(); + } + + @Override + public void loadCatalog(JsonReader reader, ChanReaderProcessingQueue queue) + throws Exception { + reader.beginArray(); // Array of pages + + while (reader.hasNext()) { + reader.beginObject(); // Page object + + while (reader.hasNext()) { + if (reader.nextName().equals("threads")) { + reader.beginArray(); // Threads array + + while (reader.hasNext()) { + readPostObject(reader, queue); + } + + reader.endArray(); + } else { + reader.skipValue(); + } + } + + reader.endObject(); + } + + reader.endArray(); + } + + @Override + public void readPostObject(JsonReader reader, ChanReaderProcessingQueue queue) + throws Exception { + Post.Builder builder = new Post.Builder(); + builder.board(queue.loadable.board); + + SiteEndpoints endpoints = queue.loadable.site.endpoints(); + + // File + String fileId = null; + String fileExt = null; + int fileWidth = 0; + int fileHeight = 0; + long fileSize = 0; + boolean fileSpoiler = false; + String fileName = null; + String fileHash = null; + boolean fileDeleted = false; + + List files = new ArrayList<>(); + + // Country flag + String countryCode = null; + String countryDescription = null; + + // Board flag + String boardFlagCode = null; + String boardFlagDescription = null; + + // 4chan pass leaf + int since4pass = 0; + + reader.beginObject(); + while (reader.hasNext()) { + String key = reader.nextName(); + + switch (key) { + case "no": + builder.no(reader.nextInt()); + break; + case "sub": + builder.subject(reader.nextString()); + break; + case "name": + builder.name(reader.nextString()); + break; + case "com": + builder.comment(reader.nextString()); + break; + case "tim": + fileId = reader.nextString(); + break; + case "time": + builder.setUnixTimestampSeconds(reader.nextLong()); + break; + case "ext": + fileExt = reader.nextString().replace(".", ""); + break; + case "w": + fileWidth = reader.nextInt(); + break; + case "h": + fileHeight = reader.nextInt(); + break; + case "fsize": + fileSize = reader.nextLong(); + break; + case "filename": + fileName = reader.nextString(); + break; + case "trip": + builder.tripcode(reader.nextString()); + break; + case "country": + countryCode = reader.nextString(); + break; + case "country_name": + countryDescription = reader.nextString(); + break; + case "board_flag": + boardFlagCode = reader.nextString(); + break; + case "flag_name": + boardFlagDescription = reader.nextString(); + break; + case "spoiler": + fileSpoiler = reader.nextInt() == 1; + break; + case "resto": + int opId = reader.nextInt(); + builder.op(opId == 0); + builder.opId(opId); + break; + case "filedeleted": + fileDeleted = reader.nextInt() == 1; + break; + case "sticky": + builder.sticky(reader.nextInt() == 1); + break; + case "closed": + builder.closed(reader.nextInt() == 1); + break; + case "archived": + builder.archived(reader.nextInt() == 1); + break; + case "replies": + builder.replies(reader.nextInt()); + break; + case "images": + builder.images(reader.nextInt()); + break; + case "unique_ips": + builder.uniqueIps(reader.nextInt()); + break; + case "last_modified": + builder.lastModified(reader.nextLong()); + break; + case "id": + builder.posterId(reader.nextString()); + break; + case "capcode": + builder.moderatorCapcode(reader.nextString()); + break; + case "since4pass": + since4pass = reader.nextInt(); + break; + case "extra_files": + reader.beginArray(); + + while (reader.hasNext()) { + PostImage postImage = readPostImage(reader, builder, endpoints); + if (postImage != null) { + files.add(postImage); + } + } + + reader.endArray(); + break; + case "md5": + fileHash = reader.nextString(); + break; + default: + // Unknown/ignored key + reader.skipValue(); + break; + } + } + reader.endObject(); + + // The file from between the other values. + if ((fileId != null && fileName != null && fileExt != null) || fileDeleted) { + // /f/ is a strange case where the actual filename is used for the file on the server + Map args = + makeArgument("tim", "f".equals(queue.loadable.boardCode) ? fileName : fileId, "ext", fileExt); + PostImage image = new PostImage.Builder() + .serverFilename(fileId) + .thumbnailUrl(endpoints.thumbnailUrl(builder, false, args)) + .spoilerThumbnailUrl(endpoints.thumbnailUrl(builder, true, args)) + .imageUrl(endpoints.imageUrl(builder, args)) + .filename(fileDeleted ? "file_deleted" : fileName) + .extension(fileExt) + .imageWidth(fileWidth) + .imageHeight(fileHeight) + .spoiler(fileSpoiler) + .size(fileSize) + .fileHash(fileHash, true) + .deleted(fileDeleted) + .build(); + // Insert it at the beginning. + files.add(0, image); + } + + builder.images(files); + + if (builder.op) { + // Update OP fields later on the main thread + queue.setOp(builder.clone()); + } + + if (queue.getOp().sticky) { + // for some weird reason, stickies have random \n's in the API return, so just clear those out + // this has been reported to the devs + builder.comment(builder.comment.toString().replace("\n", "")); + } + + Post cached = queue.getCachedPost(builder.no); + if (cached != null) { + // Post no is known, use the cached post object. + queue.addForReuse(cached); + return; + } + + if (countryCode != null && countryDescription != null) { + Pair resultPair = + endpoints.icon(IconType.COUNTRY_FLAG, makeArgument("country_code", countryCode)); + builder.addHttpIcon(new PostHttpIcon(IconType.COUNTRY_FLAG, + resultPair.first, + resultPair.second, + countryCode, + countryDescription + )); + } + + if (boardFlagCode != null && boardFlagDescription != null) { + Pair resultPair = endpoints.icon(IconType.BOARD_FLAG, + makeArgument("board_code", builder.board.code, "board_flag_code", boardFlagCode) + ); + builder.addHttpIcon(new PostHttpIcon(IconType.BOARD_FLAG, + resultPair.first, + resultPair.second, + boardFlagCode, + boardFlagDescription + )); + } + + if (since4pass != 0) { + Pair resultPair = endpoints.icon(IconType.SINCE4PASS, null); + builder.addHttpIcon(new PostHttpIcon(IconType.SINCE4PASS, + resultPair.first, + resultPair.second, + "since4pass", + String.valueOf(since4pass) + )); + } + + queue.addForParse(builder); + } + + private PostImage readPostImage(JsonReader reader, Post.Builder builder, SiteEndpoints endpoints) + throws IOException { + reader.beginObject(); + + String fileId = null; + long fileSize = 0; + + String fileExt = null; + int fileWidth = 0; + int fileHeight = 0; + boolean fileSpoiler = false; + String fileName = null; + String fileHash = null; + + while (reader.hasNext()) { + switch (reader.nextName()) { + case "tim": + fileId = reader.nextString(); + break; + case "fsize": + fileSize = reader.nextLong(); + break; + case "w": + fileWidth = reader.nextInt(); + break; + case "h": + fileHeight = reader.nextInt(); + break; + case "spoiler": + fileSpoiler = reader.nextInt() == 1; + break; + case "ext": + fileExt = reader.nextString().replace(".", ""); + break; + case "filename": + fileName = reader.nextString(); + break; + case "md5": + fileHash = reader.nextString(); + break; + default: + reader.skipValue(); + break; + } + } + + reader.endObject(); + + if (fileId != null && fileName != null && fileExt != null) { + // /f/ does not allow image posts not in the OP, so no special handling is needed here + Map args = makeArgument("tim", fileId, "ext", fileExt); + return new PostImage.Builder() + .serverFilename(fileId) + .thumbnailUrl(endpoints.thumbnailUrl(builder, false, args)) + .spoilerThumbnailUrl(endpoints.thumbnailUrl(builder, true, args)) + .imageUrl(endpoints.imageUrl(builder, args)) + .filename(fileName) + .extension(fileExt) + .imageWidth(fileWidth) + .imageHeight(fileHeight) + .spoiler(fileSpoiler) + .size(fileSize) + .fileHash(fileHash, true) + .build(); + } + return null; + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/MultipartHttpCall.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/MultipartHttpCall.java new file mode 100644 index 0000000000..3069a2756c --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/MultipartHttpCall.java @@ -0,0 +1,74 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site.common; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; +import com.github.adamantcheese.chan.core.net.ProgressRequestBody; +import com.github.adamantcheese.chan.core.site.http.HttpCall; + +import java.io.File; + +import okhttp3.*; + +@SuppressWarnings("UnusedReturnValue") +public abstract class MultipartHttpCall + extends HttpCall { + private final MultipartBody.Builder formBuilder; + + private HttpUrl url; + + public MultipartHttpCall(@NonNull NetUtilsClasses.ResponseResult callback) { + super(callback); + + formBuilder = new MultipartBody.Builder(); + formBuilder.setType(MultipartBody.FORM); + } + + public MultipartHttpCall url(HttpUrl url) { + this.url = url; + return this; + } + + public MultipartHttpCall parameter(String name, String value) { + formBuilder.addFormDataPart(name, value); + return this; + } + + public MultipartHttpCall fileParameter(String name, String filename, File file) { + formBuilder.addFormDataPart(name, + filename, + RequestBody.create(file, MediaType.parse("application/octet-stream")) + ); + return this; + } + + @Override + public void setup( + Request.Builder requestBuilder, @Nullable ProgressRequestBody.ProgressRequestListener progressListener + ) { + requestBuilder.url(url); + String r = url.scheme() + "://" + url.host(); + if (url.port() != 80 && url.port() != 443) { + r += ":" + url.port(); + } + requestBuilder.addHeader("Referer", r); + requestBuilder.post(formBuilder.build()); + } +} diff --git a/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/vichan/VichanAntispam.java b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/vichan/VichanAntispam.java new file mode 100644 index 0000000000..d7378069a8 --- /dev/null +++ b/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/vichan/VichanAntispam.java @@ -0,0 +1,97 @@ +/* + * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.github.adamantcheese.chan.core.site.common.vichan; + +import com.github.adamantcheese.chan.core.net.NetUtils; +import com.github.adamantcheese.chan.core.net.NetUtilsClasses; + +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import java.util.*; + +import okhttp3.HttpUrl; + +/** + * Vichan applies garbage looking fields to the post form, to combat bots. + * Load up the normal html, parse the form, and get these fields for our post. + */ +public class VichanAntispam { + private final HttpUrl url; + + private final List fieldsToIgnore = new ArrayList<>(); + + public VichanAntispam(HttpUrl url) { + this.url = url; + } + + public void addDefaultIgnoreFields() { + Collections.addAll( + fieldsToIgnore, + "board", + "thread", + "name", + "email", + "subject", + "body", + "password", + "file", + "spoiler", + "json_response", + "file_url1", + "file_url2", + "file_url3" + ); + } + + public void get(NetUtilsClasses.ResponseResult> callback) { + NetUtils.makeCall( + NetUtils.applicationClient, + url, + new NetUtilsClasses.ChainConverter<>((NetUtilsClasses.Converter, Document>) document -> { + Map res = new HashMap<>(); + Elements form = document.body().getElementsByTag("form"); + for (Element element : form) { + if (element.attr("name").equals("post")) { + // Add all and - -
Deze code is 2 minuten geldig
- -
-
Plak de code hier
-
- -
- - - - - diff --git a/docs/4chan/pass.txt b/docs/4chan/pass.txt deleted file mode 100644 index ff2f592365..0000000000 --- a/docs/4chan/pass.txt +++ /dev/null @@ -1,63 +0,0 @@ -Authorizing pass: -POST https://sys.4chan.org/auth -act=do_login&id=TOKEN&pin=PIN -(optional) long_login=yes - - -Login response: -Reset: -Set-Cookie:pass_id=0; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=-1396102928; path=/; domain=sys.4chan.org; secure; httponly - -Cookie 1; -Set-Cookie:pass_id=PASS_ID; expires=Sun, 30-Mar-2014 14:22:09 GMT; Max-Age=86400; path=/; domain=.4chan.org; secure; httponly - -Cookie 2: -Set-Cookie:pass_enabled=1; expires=Sun, 30-Mar-2014 14:22:09 GMT; Max-Age=86400; path=/; domain=.4chan.org - -pass_id=ID -pass_enabled=1 // probably js only - - - - - - - - - 4chan Pass - Authenticated - - - - -
-
4chan Pass
-
-
-
-

You are authenticated.

-

[Logout]

- - - - -Error responses: -
Error: Your Token must be exactly 10 characters.



- - -This Pass is already in use by another IP. Please wait 19 minutes and re-authorize by visiting this page again to change IPs. -Your Token must be exactly 10 characters. -Error: You have left one or more fields blank. -Incorrect Token or PIN. -Success! Your device is now authorized. - -You can begin using your Pass immediately—just visit any board and start posting! - -And when posting: -Cookie: pass_id=PASS_ID; pass_enabled=1; - -Logging out: -sets cookies pass_id=0 and pass_enabled=0 - - - - diff --git a/docs/archive_missing.png b/docs/archive_missing.png new file mode 100644 index 0000000000..bb801c8061 Binary files /dev/null and b/docs/archive_missing.png differ diff --git a/docs/archive_missing.psd b/docs/archive_missing.psd new file mode 100644 index 0000000000..d9aae41d6d Binary files /dev/null and b/docs/archive_missing.psd differ diff --git a/docs/audio_thumb.png b/docs/audio_thumb.png new file mode 100644 index 0000000000..7cc8c3b56b Binary files /dev/null and b/docs/audio_thumb.png differ diff --git a/docs/captcha_autosolve_with_example_images.html b/docs/captcha_autosolve_with_example_images.html new file mode 100644 index 0000000000..2cbc02a44a --- /dev/null +++ b/docs/captcha_autosolve_with_example_images.html @@ -0,0 +1,83 @@ + + + + + + + +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/docs/database.txt b/docs/database.txt deleted file mode 100644 index d75946dc96..0000000000 --- a/docs/database.txt +++ /dev/null @@ -1,88 +0,0 @@ -Database version 11: -CREATE TABLE android_metadata (locale TEXT); -CREATE TABLE `board` (`key` VARCHAR , `value` VARCHAR , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `order` INTEGER , `saved` SMALLINT , `workSafe` SMALLINT ); -CREATE TABLE `loadable` (`board` VARCHAR , `title` VARCHAR , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `listViewIndex` INTEGER , `listViewTop` INTEGER , `mode` INTEGER , `no` INTEGER ); -CREATE TABLE `pin` (`loadable_id` INTEGER NOT NULL , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `quoteLastCount` INTEGER , `quoteNewCount` INTEGER , `watchLastCount` INTEGER , `watchNewCount` INTEGER , `watching` SMALLINT ); -CREATE TABLE `savedreply` (`board` VARCHAR , `password` VARCHAR , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `no` INTEGER ); - - -Changes in version 12: -ALTER TABLE board ADD COLUMN perPage INTEGER; -ALTER TABLE board ADD COLUMN pages INTEGER; -ALTER TABLE board ADD COLUMN maxFileSize INTEGER; -ALTER TABLE board ADD COLUMN maxWebmSize INTEGER; -ALTER TABLE board ADD COLUMN maxCommentChars INTEGER; -ALTER TABLE board ADD COLUMN bumpLimit INTEGER; -ALTER TABLE board ADD COLUMN imageLimit INTEGER; -ALTER TABLE board ADD COLUMN cooldownThreads INTEGER; -ALTER TABLE board ADD COLUMN cooldownReplies INTEGER; -ALTER TABLE board ADD COLUMN cooldownImages INTEGER; -ALTER TABLE board ADD COLUMN cooldownRepliesIntra INTEGER; -ALTER TABLE board ADD COLUMN cooldownImagesIntra INTEGER; -ALTER TABLE board ADD COLUMN spoilers INTEGER; -ALTER TABLE board ADD COLUMN customSpoilers INTEGER; -ALTER TABLE board ADD COLUMN userIds INTEGER; -ALTER TABLE board ADD COLUMN codeTags INTEGER; -ALTER TABLE board ADD COLUMN preuploadCaptcha INTEGER; -ALTER TABLE board ADD COLUMN countryFlags INTEGER; -ALTER TABLE board ADD COLUMN trollFlags INTEGER; -ALTER TABLE board ADD COLUMN mathTags INTEGER; - - -Changes in version 13: -ALTER TABLE pin ADD COLUMN isError SMALLINT; -ALTER TABLE board ADD COLUMN thumbnailUrl VARCHAR; - - -Changes in version 14: -ALTER TABLE pin ADD COLUMN order INTEGER; - - -Changes is version 15: -ALTER TABLE pin ADD COLUMN archived INTEGER; - - -Changes in version 16: -CREATE TABLE `threadhide` (`board` VARCHAR , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `no` INTEGER ) - - -Changes is version 17: -ALTER TABLE board ADD COLUMN description TEXT; - - -Changes in version 18: -CREATE TABLE `history` (`date` BIGINT , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `loadable_id` INTEGER NOT NULL , `thumbnailUrl` VARCHAR ) - - -Changes in version 19: -CREATE TABLE `filter` (`action` INTEGER NOT NULL , `allBoards` SMALLINT NOT NULL , `boards` VARCHAR NOT NULL , `color` INTEGER NOT NULL , `enabled` SMALLINT NOT NULL , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `pattern` VARCHAR NOT NULL , `type` INTEGER NOT NULL ) - - -Changes in version 20: -ALTER TABLE loadable ADD COLUMN lastViewed default -1; - - -Changes in version 21: -ALTER TABLE loadable ADD COLUMN lastLoaded default -1; - - -Changes in version 22: (also configures the 4chan site with id 0) -CREATE TABLE `site` (`configuration` VARCHAR , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `userSettings` VARCHAR ); -ALTER TABLE loadable ADD COLUMN site INTEGER default 0; -ALTER TABLE board ADD COLUMN site INTEGER default 0; -ALTER TABLE savedreply ADD COLUMN site INTEGER default 0; -ALTER TABLE threadhide ADD COLUMN site INTEGER default 0; - - -Changes in version 23: -ALTER TABLE board ADD COLUMN "archive" INTEGER; - - -Changes in version 24: -ALTER TABLE site ADD COLUMN "order" INTEGER; - - -Changes in version 25: -CREATE INDEX board_site_idx ON board(site); -CREATE INDEX board_saved_idx ON board(saved); -CREATE INDEX board_value_idx ON board(value); diff --git a/docs/default_spoiler.png b/docs/default_spoiler.png new file mode 100644 index 0000000000..230d5ea544 Binary files /dev/null and b/docs/default_spoiler.png differ diff --git a/docs/file_deleted.png b/docs/file_deleted.png new file mode 100644 index 0000000000..838becf473 Binary files /dev/null and b/docs/file_deleted.png differ diff --git a/docs/file_deleted.psd b/docs/file_deleted.psd new file mode 100644 index 0000000000..09667bb95e Binary files /dev/null and b/docs/file_deleted.psd differ diff --git a/docs/file_notice.txt b/docs/file_notice.txt deleted file mode 100644 index f159c4984d..0000000000 --- a/docs/file_notice.txt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - diff --git a/docs/fonts/Roboto-Black.ttf b/docs/fonts/Roboto-Black.ttf deleted file mode 100644 index cb905bcd83..0000000000 Binary files a/docs/fonts/Roboto-Black.ttf and /dev/null differ diff --git a/docs/fonts/Roboto-BlackItalic.ttf b/docs/fonts/Roboto-BlackItalic.ttf deleted file mode 100644 index 3ebdc7deae..0000000000 Binary files a/docs/fonts/Roboto-BlackItalic.ttf and /dev/null differ diff --git a/docs/fonts/Roboto-Bold.ttf b/docs/fonts/Roboto-Bold.ttf deleted file mode 100644 index 68822caf24..0000000000 Binary files a/docs/fonts/Roboto-Bold.ttf and /dev/null differ diff --git a/docs/fonts/Roboto-BoldItalic.ttf b/docs/fonts/Roboto-BoldItalic.ttf deleted file mode 100644 index aebf8eb027..0000000000 Binary files a/docs/fonts/Roboto-BoldItalic.ttf and /dev/null differ diff --git a/docs/fonts/Roboto-Italic.ttf b/docs/fonts/Roboto-Italic.ttf deleted file mode 100644 index 2041cbc002..0000000000 Binary files a/docs/fonts/Roboto-Italic.ttf and /dev/null differ diff --git a/docs/fonts/Roboto-Light.ttf b/docs/fonts/Roboto-Light.ttf deleted file mode 100644 index aa45340757..0000000000 Binary files a/docs/fonts/Roboto-Light.ttf and /dev/null differ diff --git a/docs/fonts/Roboto-LightItalic.ttf b/docs/fonts/Roboto-LightItalic.ttf deleted file mode 100644 index a85444f2ec..0000000000 Binary files a/docs/fonts/Roboto-LightItalic.ttf and /dev/null differ diff --git a/docs/fonts/Roboto-Medium.ttf b/docs/fonts/Roboto-Medium.ttf deleted file mode 100644 index a3c1a1f170..0000000000 Binary files a/docs/fonts/Roboto-Medium.ttf and /dev/null differ diff --git a/docs/fonts/Roboto-MediumItalic.ttf b/docs/fonts/Roboto-MediumItalic.ttf deleted file mode 100644 index b828205541..0000000000 Binary files a/docs/fonts/Roboto-MediumItalic.ttf and /dev/null differ diff --git a/docs/fonts/Roboto-Regular.ttf b/docs/fonts/Roboto-Regular.ttf deleted file mode 100644 index 0e58508a64..0000000000 Binary files a/docs/fonts/Roboto-Regular.ttf and /dev/null differ diff --git a/docs/fonts/Roboto-Thin.ttf b/docs/fonts/Roboto-Thin.ttf deleted file mode 100644 index 8779333b1a..0000000000 Binary files a/docs/fonts/Roboto-Thin.ttf and /dev/null differ diff --git a/docs/fonts/Roboto-ThinItalic.ttf b/docs/fonts/Roboto-ThinItalic.ttf deleted file mode 100644 index b79cb26da0..0000000000 Binary files a/docs/fonts/Roboto-ThinItalic.ttf and /dev/null differ diff --git a/docs/fonts/RobotoCondensed-Bold.ttf b/docs/fonts/RobotoCondensed-Bold.ttf deleted file mode 100644 index 3e06c7cdc4..0000000000 Binary files a/docs/fonts/RobotoCondensed-Bold.ttf and /dev/null differ diff --git a/docs/fonts/RobotoCondensed-BoldItalic.ttf b/docs/fonts/RobotoCondensed-BoldItalic.ttf deleted file mode 100644 index aaf9fe03bc..0000000000 Binary files a/docs/fonts/RobotoCondensed-BoldItalic.ttf and /dev/null differ diff --git a/docs/fonts/RobotoCondensed-Italic.ttf b/docs/fonts/RobotoCondensed-Italic.ttf deleted file mode 100644 index d2b611fead..0000000000 Binary files a/docs/fonts/RobotoCondensed-Italic.ttf and /dev/null differ diff --git a/docs/fonts/RobotoCondensed-Light.ttf b/docs/fonts/RobotoCondensed-Light.ttf deleted file mode 100644 index d4eb198061..0000000000 Binary files a/docs/fonts/RobotoCondensed-Light.ttf and /dev/null differ diff --git a/docs/fonts/RobotoCondensed-LightItalic.ttf b/docs/fonts/RobotoCondensed-LightItalic.ttf deleted file mode 100644 index a08f3f4703..0000000000 Binary files a/docs/fonts/RobotoCondensed-LightItalic.ttf and /dev/null differ diff --git a/docs/fonts/RobotoCondensed-Regular.ttf b/docs/fonts/RobotoCondensed-Regular.ttf deleted file mode 100644 index b9fc49c95b..0000000000 Binary files a/docs/fonts/RobotoCondensed-Regular.ttf and /dev/null differ diff --git a/docs/hide_thumb.png b/docs/hide_thumb.png new file mode 100644 index 0000000000..58b1084221 Binary files /dev/null and b/docs/hide_thumb.png differ diff --git a/docs/ic_captcha.svg b/docs/ic_captcha.svg new file mode 100644 index 0000000000..4209ee677b --- /dev/null +++ b/docs/ic_captcha.svg @@ -0,0 +1,92 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/docs/icon.png b/docs/icon.png new file mode 100644 index 0000000000..9109c3e8bb Binary files /dev/null and b/docs/icon.png differ diff --git a/docs/internal_spoiler.png b/docs/internal_spoiler.png new file mode 100644 index 0000000000..8dead4aa8b Binary files /dev/null and b/docs/internal_spoiler.png differ diff --git a/docs/internal_spoiler.psd b/docs/internal_spoiler.psd new file mode 100644 index 0000000000..b5045c2769 Binary files /dev/null and b/docs/internal_spoiler.psd differ diff --git a/docs/licenses.html b/docs/licenses.html new file mode 100644 index 0000000000..6398217897 --- /dev/null +++ b/docs/licenses.html @@ -0,0 +1,468 @@ + + + + Open Source Licences + + + + +

This software includes several Android classes from the Android Open Source Project.

+
+        
+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.
+        
+    
+
+ +

OrmLite

+http://ormlite.com/ +
+        
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby
+granted, provided that this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
+DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
+
+The author may be contacted via http://ormlite.com/
+        
+    
+
+ +

EventBus

+https://github.com/greenrobot/EventBus +
+        
+Copyright (C) 2012 Markus Junginger, greenrobot (http://greenrobot.de)
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+        
+    
+
+ +

Subsampling Scale Image View

+https://github.com/davemorrissey/subsampling-scale-image-view +
+        
+Copyright 2014 David Morrissey
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+        
+    
+
+ +

Square okhttp

+https://github.com/square/okhttp +
+        
+Copyright (C) 2014 Square, 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.
+        
+    
+
+ +

Jsoup

+http://jsoup.org/ +
+        
+The MIT License
+Copyright © 2009 - 2013 Jonathan Hedley (jonathan@hedley.net)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+        
+    
+
+ +

android-gif-drawable

+https://github.com/koral--/android-gif-drawable +
+        
+MIT License
+Copyright (c)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+// Copyright (c) 2011 Google Inc. 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 Google Inc. 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 AND FITNESS FOR
+// A PARTICULAR PURPOSE 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.
+
+The GIFLIB distribution is Copyright (c) 1997  Eric S. Raymond
+        
+    
+
+ +

autolink-java

+https://github.com/robinst/autolink-java +
+        
+The MIT License (MIT)
+
+Copyright (c) 2015 Robin Stocker
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+        
+    
+
+ +

Google Gson

+https://github.com/google/gson +
+        
+Copyright 2008 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.
+        
+    
+
+ +

xdrop fuzzywuzzy

+https://github.com/xdrop/fuzzywuzzy +
+        
+Copyright (C) 2016 xdrop
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+        
+    
+
+ +

zsoltherpai feather

+https://github.com/zsoltherpai/feather +
+        
+Copyright {2015} {Zsolt Herpai}
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+        
+    
+
+ +

vsch flexmark-java

+https://github.com/vsch/flexmark-java +
+        
+Copyright (c) 2015-2016, Atlassian Pty Ltd
+All rights reserved.
+
+Copyright (c) 2016-2018, Vladimir Schneider,
+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.
+
+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 AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
+        
+    
+
+ +

Microsoft fluentui-system-icons

+https://github.com/microsoft/fluentui-system-icons +
+        
+MIT License
+
+Copyright (c) 2020 Microsoft Corporation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+        
+    
+
+ +

skydoves Balloon

+https://github.com/skydoves/Balloon +
+        
+Copyright 2019 skydoves (Jaewoong Eum)
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+        
+    
+
+ +

vdurmont emoji-java

+https://github.com/vdurmont/emoji-java +
+        
+The MIT License (MIT)
+
+Copyright (c) 2014-present Vincent DURMONT vdurmont@gmail.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+        
+    
+
+ +

ReactiveX RxJava

+https://github.com/ReactiveX/RxJava +
+        
+Copyright (c) 2016-present, RxJava Contributors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+        
+    
+
+ +

JetBrains Kotlin Standard Library

+https://github.com/jetbrains/kotlin +
+        
+Copyright (c) 2010-2020 JetBrains s.r.o and respective authors and developers
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+        
+    
+
+ +

K1rakishou Fuck-Storage-Access-Framework

+https://github.com/K1rakishou/Fuck-Storage-Access-Framework +
+        
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.
+
+In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to https://unlicense.org
+        
+    
+
+ +

Desktop Ponies Art Credits

+https://github.com/RoosterDragon/Desktop-Ponies +
+        
+Artwork included with this program is licensed under
+Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported
+(CC BY-NC-SA 3.0).
+
+  http://creativecommons.org/licenses/by-nc-sa/3.0/
+
+This means you are allowed to share and alter the artwork, provided you
+give credit, do not use it for commercial purposes and release it under
+this same license.
+        
+    
+
+ + diff --git a/docs/new_icon_512.png b/docs/new_icon_512.png new file mode 100644 index 0000000000..ac05375c9b Binary files /dev/null and b/docs/new_icon_512.png differ diff --git a/docs/new_icon_512.psd b/docs/new_icon_512.psd new file mode 100644 index 0000000000..c32e20a23e Binary files /dev/null and b/docs/new_icon_512.psd differ diff --git a/docs/new_new_icon_512.png b/docs/new_new_icon_512.png new file mode 100644 index 0000000000..fb0ccb214f Binary files /dev/null and b/docs/new_new_icon_512.png differ diff --git a/docs/new_new_icon_512.psd b/docs/new_new_icon_512.psd new file mode 100644 index 0000000000..7b68269c09 Binary files /dev/null and b/docs/new_new_icon_512.psd differ diff --git a/docs/release b/docs/release deleted file mode 100644 index af07d1edc5..0000000000 --- a/docs/release +++ /dev/null @@ -1,11 +0,0 @@ -To release: - -Update CHANGES.txt -Change the version name and code in the app/build.gradle file. -Change the previous version handler text in strings.xml. -Commit it with CHANGELOG and VERSION directives. -Tag the commit (git tag v3.0.1). -Merge into master. -Push with --tags. - -Upload APK to github releases. diff --git a/docs/release.txt b/docs/release.txt new file mode 100644 index 0000000000..2c5581d019 --- /dev/null +++ b/docs/release.txt @@ -0,0 +1,9 @@ +To release: + +Change the version code in the app/build.gradle file; commit and push. +Build signed APK. +In Github Releases, draft a new release with tag v(major).(minor).(patch) to match what you did above. +Write your changelog in the description. Markdown is supported. +Upload APK to github releases. +Release. +Delete the last release's APK, to prevent previous version support as much as posible. \ No newline at end of file diff --git a/docs/solver.js b/docs/solver.js new file mode 100644 index 0000000000..f987acb57e --- /dev/null +++ b/docs/solver.js @@ -0,0 +1,56460 @@ +// ==UserScript== +// @name Joshi Koukousei Captcha Service +// @namespace /cumg/ +// @match https://boards.4channel.org/* +// @match https://boards.4chan.org/* +// @match https://sys.4chan.org/* +// @grant none +// @version 1.1 +// @author /cumg/, formerly AUTOMATIC +// @description The Janny Skillers Captcha Solver of choice +// ==/UserScript== +const _DOMParser = DOMParser; +"use strict"; +//(() => { + var __create = Object.create; + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __getProtoOf = Object.getPrototypeOf; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + }; + var __commonJS = (cb, mod4) => function __require() { + return mod4 || (0, cb[__getOwnPropNames(cb)[0]])((mod4 = { exports: {} }).exports, mod4), mod4.exports; + }; + var __export = (target, all5) => { + for (var name in all5) + __defProp(target, name, { get: all5[name], enumerable: true }); + }; + var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; + }; + var __toESM = (mod4, isNodeMode, target) => (target = mod4 != null ? __create(__getProtoOf(mod4)) : {}, __copyProps( + isNodeMode || !mod4 || !mod4.__esModule ? __defProp(target, "default", { value: mod4, enumerable: true }) : target, + mod4 + )); + var __toBinary = /* @__PURE__ */ (() => { + var table = new Uint8Array(128); + for (var i = 0; i < 64; i++) + table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i; + return (base64) => { + var n = base64.length, bytes = new Uint8Array((n - (base64[n - 1] == "=") - (base64[n - 2] == "=")) * 3 / 4 | 0); + for (var i2 = 0, j = 0; i2 < n; ) { + var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)]; + var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)]; + bytes[j++] = c0 << 2 | c1 >> 4; + bytes[j++] = c1 << 4 | c2 >> 2; + bytes[j++] = c2 << 6 | c3; + } + return bytes; + }; + })(); + + // + var init_define_BUILD_VERSION = __esm({ + ""() { + } + }); + + // node_modules/.pnpm/long@4.0.0/node_modules/long/src/long.js + var require_long = __commonJS({ + "node_modules/.pnpm/long@4.0.0/node_modules/long/src/long.js"(exports, module) { + init_define_BUILD_VERSION(); + module.exports = Long2; + var wasm = null; + try { + wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([ + 0, + 97, + 115, + 109, + 1, + 0, + 0, + 0, + 1, + 13, + 2, + 96, + 0, + 1, + 127, + 96, + 4, + 127, + 127, + 127, + 127, + 1, + 127, + 3, + 7, + 6, + 0, + 1, + 1, + 1, + 1, + 1, + 6, + 6, + 1, + 127, + 1, + 65, + 0, + 11, + 7, + 50, + 6, + 3, + 109, + 117, + 108, + 0, + 1, + 5, + 100, + 105, + 118, + 95, + 115, + 0, + 2, + 5, + 100, + 105, + 118, + 95, + 117, + 0, + 3, + 5, + 114, + 101, + 109, + 95, + 115, + 0, + 4, + 5, + 114, + 101, + 109, + 95, + 117, + 0, + 5, + 8, + 103, + 101, + 116, + 95, + 104, + 105, + 103, + 104, + 0, + 0, + 10, + 191, + 1, + 6, + 4, + 0, + 35, + 0, + 11, + 36, + 1, + 1, + 126, + 32, + 0, + 173, + 32, + 1, + 173, + 66, + 32, + 134, + 132, + 32, + 2, + 173, + 32, + 3, + 173, + 66, + 32, + 134, + 132, + 126, + 34, + 4, + 66, + 32, + 135, + 167, + 36, + 0, + 32, + 4, + 167, + 11, + 36, + 1, + 1, + 126, + 32, + 0, + 173, + 32, + 1, + 173, + 66, + 32, + 134, + 132, + 32, + 2, + 173, + 32, + 3, + 173, + 66, + 32, + 134, + 132, + 127, + 34, + 4, + 66, + 32, + 135, + 167, + 36, + 0, + 32, + 4, + 167, + 11, + 36, + 1, + 1, + 126, + 32, + 0, + 173, + 32, + 1, + 173, + 66, + 32, + 134, + 132, + 32, + 2, + 173, + 32, + 3, + 173, + 66, + 32, + 134, + 132, + 128, + 34, + 4, + 66, + 32, + 135, + 167, + 36, + 0, + 32, + 4, + 167, + 11, + 36, + 1, + 1, + 126, + 32, + 0, + 173, + 32, + 1, + 173, + 66, + 32, + 134, + 132, + 32, + 2, + 173, + 32, + 3, + 173, + 66, + 32, + 134, + 132, + 129, + 34, + 4, + 66, + 32, + 135, + 167, + 36, + 0, + 32, + 4, + 167, + 11, + 36, + 1, + 1, + 126, + 32, + 0, + 173, + 32, + 1, + 173, + 66, + 32, + 134, + 132, + 32, + 2, + 173, + 32, + 3, + 173, + 66, + 32, + 134, + 132, + 130, + 34, + 4, + 66, + 32, + 135, + 167, + 36, + 0, + 32, + 4, + 167, + 11 + ])), {}).exports; + } catch (e) { + } + function Long2(low, high, unsigned) { + this.low = low | 0; + this.high = high | 0; + this.unsigned = !!unsigned; + } + Long2.prototype.__isLong__; + Object.defineProperty(Long2.prototype, "__isLong__", { value: true }); + function isLong(obj) { + return (obj && obj["__isLong__"]) === true; + } + Long2.isLong = isLong; + var INT_CACHE = {}; + var UINT_CACHE = {}; + function fromInt(value, unsigned) { + var obj, cachedObj, cache; + if (unsigned) { + value >>>= 0; + if (cache = 0 <= value && value < 256) { + cachedObj = UINT_CACHE[value]; + if (cachedObj) + return cachedObj; + } + obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true); + if (cache) + UINT_CACHE[value] = obj; + return obj; + } else { + value |= 0; + if (cache = -128 <= value && value < 128) { + cachedObj = INT_CACHE[value]; + if (cachedObj) + return cachedObj; + } + obj = fromBits(value, value < 0 ? -1 : 0, false); + if (cache) + INT_CACHE[value] = obj; + return obj; + } + } + Long2.fromInt = fromInt; + function fromNumber(value, unsigned) { + if (isNaN(value)) + return unsigned ? UZERO : ZERO; + if (unsigned) { + if (value < 0) + return UZERO; + if (value >= TWO_PWR_64_DBL) + return MAX_UNSIGNED_VALUE; + } else { + if (value <= -TWO_PWR_63_DBL) + return MIN_VALUE; + if (value + 1 >= TWO_PWR_63_DBL) + return MAX_VALUE; + } + if (value < 0) + return fromNumber(-value, unsigned).neg(); + return fromBits(value % TWO_PWR_32_DBL | 0, value / TWO_PWR_32_DBL | 0, unsigned); + } + Long2.fromNumber = fromNumber; + function fromBits(lowBits, highBits, unsigned) { + return new Long2(lowBits, highBits, unsigned); + } + Long2.fromBits = fromBits; + var pow_dbl = Math.pow; + function fromString(str, unsigned, radix) { + if (str.length === 0) + throw Error("empty string"); + if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity") + return ZERO; + if (typeof unsigned === "number") { + radix = unsigned, unsigned = false; + } else { + unsigned = !!unsigned; + } + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw RangeError("radix"); + var p2; + if ((p2 = str.indexOf("-")) > 0) + throw Error("interior hyphen"); + else if (p2 === 0) { + return fromString(str.substring(1), unsigned, radix).neg(); + } + var radixToPower = fromNumber(pow_dbl(radix, 8)); + var result = ZERO; + for (var i = 0; i < str.length; i += 8) { + var size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + var power = fromNumber(pow_dbl(radix, size)); + result = result.mul(power).add(fromNumber(value)); + } else { + result = result.mul(radixToPower); + result = result.add(fromNumber(value)); + } + } + result.unsigned = unsigned; + return result; + } + Long2.fromString = fromString; + function fromValue(val, unsigned) { + if (typeof val === "number") + return fromNumber(val, unsigned); + if (typeof val === "string") + return fromString(val, unsigned); + return fromBits(val.low, val.high, typeof unsigned === "boolean" ? unsigned : val.unsigned); + } + Long2.fromValue = fromValue; + var TWO_PWR_16_DBL = 1 << 16; + var TWO_PWR_24_DBL = 1 << 24; + var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL; + var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL; + var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2; + var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL); + var ZERO = fromInt(0); + Long2.ZERO = ZERO; + var UZERO = fromInt(0, true); + Long2.UZERO = UZERO; + var ONE = fromInt(1); + Long2.ONE = ONE; + var UONE = fromInt(1, true); + Long2.UONE = UONE; + var NEG_ONE = fromInt(-1); + Long2.NEG_ONE = NEG_ONE; + var MAX_VALUE = fromBits(4294967295 | 0, 2147483647 | 0, false); + Long2.MAX_VALUE = MAX_VALUE; + var MAX_UNSIGNED_VALUE = fromBits(4294967295 | 0, 4294967295 | 0, true); + Long2.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE; + var MIN_VALUE = fromBits(0, 2147483648 | 0, false); + Long2.MIN_VALUE = MIN_VALUE; + var LongPrototype = Long2.prototype; + LongPrototype.toInt = function toInt() { + return this.unsigned ? this.low >>> 0 : this.low; + }; + LongPrototype.toNumber = function toNumber() { + if (this.unsigned) + return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0); + return this.high * TWO_PWR_32_DBL + (this.low >>> 0); + }; + LongPrototype.toString = function toString(radix) { + radix = radix || 10; + if (radix < 2 || 36 < radix) + throw RangeError("radix"); + if (this.isZero()) + return "0"; + if (this.isNegative()) { + if (this.eq(MIN_VALUE)) { + var radixLong = fromNumber(radix), div3 = this.div(radixLong), rem1 = div3.mul(radixLong).sub(this); + return div3.toString(radix) + rem1.toInt().toString(radix); + } else + return "-" + this.neg().toString(radix); + } + var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned), rem = this; + var result = ""; + while (true) { + var remDiv = rem.div(radixToPower), intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0, digits = intval.toString(radix); + rem = remDiv; + if (rem.isZero()) + return digits + result; + else { + while (digits.length < 6) + digits = "0" + digits; + result = "" + digits + result; + } + } + }; + LongPrototype.getHighBits = function getHighBits() { + return this.high; + }; + LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() { + return this.high >>> 0; + }; + LongPrototype.getLowBits = function getLowBits() { + return this.low; + }; + LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() { + return this.low >>> 0; + }; + LongPrototype.getNumBitsAbs = function getNumBitsAbs() { + if (this.isNegative()) + return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs(); + var val = this.high != 0 ? this.high : this.low; + for (var bit = 31; bit > 0; bit--) + if ((val & 1 << bit) != 0) + break; + return this.high != 0 ? bit + 33 : bit + 1; + }; + LongPrototype.isZero = function isZero() { + return this.high === 0 && this.low === 0; + }; + LongPrototype.eqz = LongPrototype.isZero; + LongPrototype.isNegative = function isNegative() { + return !this.unsigned && this.high < 0; + }; + LongPrototype.isPositive = function isPositive() { + return this.unsigned || this.high >= 0; + }; + LongPrototype.isOdd = function isOdd() { + return (this.low & 1) === 1; + }; + LongPrototype.isEven = function isEven2() { + return (this.low & 1) === 0; + }; + LongPrototype.equals = function equals(other) { + if (!isLong(other)) + other = fromValue(other); + if (this.unsigned !== other.unsigned && this.high >>> 31 === 1 && other.high >>> 31 === 1) + return false; + return this.high === other.high && this.low === other.low; + }; + LongPrototype.eq = LongPrototype.equals; + LongPrototype.notEquals = function notEquals(other) { + return !this.eq(other); + }; + LongPrototype.neq = LongPrototype.notEquals; + LongPrototype.ne = LongPrototype.notEquals; + LongPrototype.lessThan = function lessThan(other) { + return this.comp(other) < 0; + }; + LongPrototype.lt = LongPrototype.lessThan; + LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) { + return this.comp(other) <= 0; + }; + LongPrototype.lte = LongPrototype.lessThanOrEqual; + LongPrototype.le = LongPrototype.lessThanOrEqual; + LongPrototype.greaterThan = function greaterThan(other) { + return this.comp(other) > 0; + }; + LongPrototype.gt = LongPrototype.greaterThan; + LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) { + return this.comp(other) >= 0; + }; + LongPrototype.gte = LongPrototype.greaterThanOrEqual; + LongPrototype.ge = LongPrototype.greaterThanOrEqual; + LongPrototype.compare = function compare(other) { + if (!isLong(other)) + other = fromValue(other); + if (this.eq(other)) + return 0; + var thisNeg = this.isNegative(), otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) + return -1; + if (!thisNeg && otherNeg) + return 1; + if (!this.unsigned) + return this.sub(other).isNegative() ? -1 : 1; + return other.high >>> 0 > this.high >>> 0 || other.high === this.high && other.low >>> 0 > this.low >>> 0 ? -1 : 1; + }; + LongPrototype.comp = LongPrototype.compare; + LongPrototype.negate = function negate() { + if (!this.unsigned && this.eq(MIN_VALUE)) + return MIN_VALUE; + return this.not().add(ONE); + }; + LongPrototype.neg = LongPrototype.negate; + LongPrototype.add = function add4(addend) { + if (!isLong(addend)) + addend = fromValue(addend); + var a48 = this.high >>> 16; + var a32 = this.high & 65535; + var a16 = this.low >>> 16; + var a00 = this.low & 65535; + var b48 = addend.high >>> 16; + var b32 = addend.high & 65535; + var b16 = addend.low >>> 16; + var b00 = addend.low & 65535; + var c48 = 0, c32 = 0, c16 = 0, c00 = 0; + c00 += a00 + b00; + c16 += c00 >>> 16; + c00 &= 65535; + c16 += a16 + b16; + c32 += c16 >>> 16; + c16 &= 65535; + c32 += a32 + b32; + c48 += c32 >>> 16; + c32 &= 65535; + c48 += a48 + b48; + c48 &= 65535; + return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned); + }; + LongPrototype.subtract = function subtract(subtrahend) { + if (!isLong(subtrahend)) + subtrahend = fromValue(subtrahend); + return this.add(subtrahend.neg()); + }; + LongPrototype.sub = LongPrototype.subtract; + LongPrototype.multiply = function multiply3(multiplier) { + if (this.isZero()) + return ZERO; + if (!isLong(multiplier)) + multiplier = fromValue(multiplier); + if (wasm) { + var low = wasm.mul( + this.low, + this.high, + multiplier.low, + multiplier.high + ); + return fromBits(low, wasm.get_high(), this.unsigned); + } + if (multiplier.isZero()) + return ZERO; + if (this.eq(MIN_VALUE)) + return multiplier.isOdd() ? MIN_VALUE : ZERO; + if (multiplier.eq(MIN_VALUE)) + return this.isOdd() ? MIN_VALUE : ZERO; + if (this.isNegative()) { + if (multiplier.isNegative()) + return this.neg().mul(multiplier.neg()); + else + return this.neg().mul(multiplier).neg(); + } else if (multiplier.isNegative()) + return this.mul(multiplier.neg()).neg(); + if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24)) + return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned); + var a48 = this.high >>> 16; + var a32 = this.high & 65535; + var a16 = this.low >>> 16; + var a00 = this.low & 65535; + var b48 = multiplier.high >>> 16; + var b32 = multiplier.high & 65535; + var b16 = multiplier.low >>> 16; + var b00 = multiplier.low & 65535; + var c48 = 0, c32 = 0, c16 = 0, c00 = 0; + c00 += a00 * b00; + c16 += c00 >>> 16; + c00 &= 65535; + c16 += a16 * b00; + c32 += c16 >>> 16; + c16 &= 65535; + c16 += a00 * b16; + c32 += c16 >>> 16; + c16 &= 65535; + c32 += a32 * b00; + c48 += c32 >>> 16; + c32 &= 65535; + c32 += a16 * b16; + c48 += c32 >>> 16; + c32 &= 65535; + c32 += a00 * b32; + c48 += c32 >>> 16; + c32 &= 65535; + c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48; + c48 &= 65535; + return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned); + }; + LongPrototype.mul = LongPrototype.multiply; + LongPrototype.divide = function divide(divisor) { + if (!isLong(divisor)) + divisor = fromValue(divisor); + if (divisor.isZero()) + throw Error("division by zero"); + if (wasm) { + if (!this.unsigned && this.high === -2147483648 && divisor.low === -1 && divisor.high === -1) { + return this; + } + var low = (this.unsigned ? wasm.div_u : wasm.div_s)( + this.low, + this.high, + divisor.low, + divisor.high + ); + return fromBits(low, wasm.get_high(), this.unsigned); + } + if (this.isZero()) + return this.unsigned ? UZERO : ZERO; + var approx, rem, res; + if (!this.unsigned) { + if (this.eq(MIN_VALUE)) { + if (divisor.eq(ONE) || divisor.eq(NEG_ONE)) + return MIN_VALUE; + else if (divisor.eq(MIN_VALUE)) + return ONE; + else { + var halfThis = this.shr(1); + approx = halfThis.div(divisor).shl(1); + if (approx.eq(ZERO)) { + return divisor.isNegative() ? ONE : NEG_ONE; + } else { + rem = this.sub(divisor.mul(approx)); + res = approx.add(rem.div(divisor)); + return res; + } + } + } else if (divisor.eq(MIN_VALUE)) + return this.unsigned ? UZERO : ZERO; + if (this.isNegative()) { + if (divisor.isNegative()) + return this.neg().div(divisor.neg()); + return this.neg().div(divisor).neg(); + } else if (divisor.isNegative()) + return this.div(divisor.neg()).neg(); + res = ZERO; + } else { + if (!divisor.unsigned) + divisor = divisor.toUnsigned(); + if (divisor.gt(this)) + return UZERO; + if (divisor.gt(this.shru(1))) + return UONE; + res = UZERO; + } + rem = this; + while (rem.gte(divisor)) { + approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber())); + var log22 = Math.ceil(Math.log(approx) / Math.LN2), delta = log22 <= 48 ? 1 : pow_dbl(2, log22 - 48), approxRes = fromNumber(approx), approxRem = approxRes.mul(divisor); + while (approxRem.isNegative() || approxRem.gt(rem)) { + approx -= delta; + approxRes = fromNumber(approx, this.unsigned); + approxRem = approxRes.mul(divisor); + } + if (approxRes.isZero()) + approxRes = ONE; + res = res.add(approxRes); + rem = rem.sub(approxRem); + } + return res; + }; + LongPrototype.div = LongPrototype.divide; + LongPrototype.modulo = function modulo(divisor) { + if (!isLong(divisor)) + divisor = fromValue(divisor); + if (wasm) { + var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)( + this.low, + this.high, + divisor.low, + divisor.high + ); + return fromBits(low, wasm.get_high(), this.unsigned); + } + return this.sub(this.div(divisor).mul(divisor)); + }; + LongPrototype.mod = LongPrototype.modulo; + LongPrototype.rem = LongPrototype.modulo; + LongPrototype.not = function not() { + return fromBits(~this.low, ~this.high, this.unsigned); + }; + LongPrototype.and = function and(other) { + if (!isLong(other)) + other = fromValue(other); + return fromBits(this.low & other.low, this.high & other.high, this.unsigned); + }; + LongPrototype.or = function or(other) { + if (!isLong(other)) + other = fromValue(other); + return fromBits(this.low | other.low, this.high | other.high, this.unsigned); + }; + LongPrototype.xor = function xor(other) { + if (!isLong(other)) + other = fromValue(other); + return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned); + }; + LongPrototype.shiftLeft = function shiftLeft(numBits) { + if (isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return fromBits(this.low << numBits, this.high << numBits | this.low >>> 32 - numBits, this.unsigned); + else + return fromBits(0, this.low << numBits - 32, this.unsigned); + }; + LongPrototype.shl = LongPrototype.shiftLeft; + LongPrototype.shiftRight = function shiftRight(numBits) { + if (isLong(numBits)) + numBits = numBits.toInt(); + if ((numBits &= 63) === 0) + return this; + else if (numBits < 32) + return fromBits(this.low >>> numBits | this.high << 32 - numBits, this.high >> numBits, this.unsigned); + else + return fromBits(this.high >> numBits - 32, this.high >= 0 ? 0 : -1, this.unsigned); + }; + LongPrototype.shr = LongPrototype.shiftRight; + LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) { + if (isLong(numBits)) + numBits = numBits.toInt(); + numBits &= 63; + if (numBits === 0) + return this; + else { + var high = this.high; + if (numBits < 32) { + var low = this.low; + return fromBits(low >>> numBits | high << 32 - numBits, high >>> numBits, this.unsigned); + } else if (numBits === 32) + return fromBits(high, 0, this.unsigned); + else + return fromBits(high >>> numBits - 32, 0, this.unsigned); + } + }; + LongPrototype.shru = LongPrototype.shiftRightUnsigned; + LongPrototype.shr_u = LongPrototype.shiftRightUnsigned; + LongPrototype.toSigned = function toSigned() { + if (!this.unsigned) + return this; + return fromBits(this.low, this.high, false); + }; + LongPrototype.toUnsigned = function toUnsigned() { + if (this.unsigned) + return this; + return fromBits(this.low, this.high, true); + }; + LongPrototype.toBytes = function toBytes(le) { + return le ? this.toBytesLE() : this.toBytesBE(); + }; + LongPrototype.toBytesLE = function toBytesLE() { + var hi = this.high, lo = this.low; + return [ + lo & 255, + lo >>> 8 & 255, + lo >>> 16 & 255, + lo >>> 24, + hi & 255, + hi >>> 8 & 255, + hi >>> 16 & 255, + hi >>> 24 + ]; + }; + LongPrototype.toBytesBE = function toBytesBE() { + var hi = this.high, lo = this.low; + return [ + hi >>> 24, + hi >>> 16 & 255, + hi >>> 8 & 255, + hi & 255, + lo >>> 24, + lo >>> 16 & 255, + lo >>> 8 & 255, + lo & 255 + ]; + }; + Long2.fromBytes = function fromBytes(bytes, unsigned, le) { + return le ? Long2.fromBytesLE(bytes, unsigned) : Long2.fromBytesBE(bytes, unsigned); + }; + Long2.fromBytesLE = function fromBytesLE(bytes, unsigned) { + return new Long2( + bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24, + bytes[4] | bytes[5] << 8 | bytes[6] << 16 | bytes[7] << 24, + unsigned + ); + }; + Long2.fromBytesBE = function fromBytesBE(bytes, unsigned) { + return new Long2( + bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7], + bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], + unsigned + ); + }; + } + }); + + // (disabled):node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/browser.js + var require_browser = __commonJS({ + "(disabled):node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/browser.js"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):util + var require_util = __commonJS({ + "(disabled):util"() { + init_define_BUILD_VERSION(); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js + var require_alea = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function Alea(seed) { + var me = this, mash = Mash(); + me.next = function() { + var t = 2091639 * me.s0 + me.c * 23283064365386963e-26; + me.s0 = me.s1; + me.s1 = me.s2; + return me.s2 = t - (me.c = t | 0); + }; + me.c = 1; + me.s0 = mash(" "); + me.s1 = mash(" "); + me.s2 = mash(" "); + me.s0 -= mash(seed); + if (me.s0 < 0) { + me.s0 += 1; + } + me.s1 -= mash(seed); + if (me.s1 < 0) { + me.s1 += 1; + } + me.s2 -= mash(seed); + if (me.s2 < 0) { + me.s2 += 1; + } + mash = null; + } + function copy(f, t) { + t.c = f.c; + t.s0 = f.s0; + t.s1 = f.s1; + t.s2 = f.s2; + return t; + } + function impl(seed, opts) { + var xg = new Alea(seed), state = opts && opts.state, prng = xg.next; + prng.int32 = function() { + return xg.next() * 4294967296 | 0; + }; + prng.double = function() { + return prng() + (prng() * 2097152 | 0) * 11102230246251565e-32; + }; + prng.quick = prng; + if (state) { + if (typeof state == "object") + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + function Mash() { + var n = 4022871197; + var mash = function(data) { + data = String(data); + for (var i = 0; i < data.length; i++) { + n += data.charCodeAt(i); + var h = 0.02519603282416938 * n; + n = h >>> 0; + h -= n; + h *= n; + n = h >>> 0; + h -= n; + n += h * 4294967296; + } + return (n >>> 0) * 23283064365386963e-26; + }; + return mash; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.alea = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js + var require_xor128 = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function XorGen(seed) { + var me = this, strseed = ""; + me.x = 0; + me.y = 0; + me.z = 0; + me.w = 0; + me.next = function() { + var t = me.x ^ me.x << 11; + me.x = me.y; + me.y = me.z; + me.z = me.w; + return me.w ^= me.w >>> 19 ^ t ^ t >>> 8; + }; + if (seed === (seed | 0)) { + me.x = seed; + } else { + strseed += seed; + } + for (var k = 0; k < strseed.length + 64; k++) { + me.x ^= strseed.charCodeAt(k) | 0; + me.next(); + } + } + function copy(f, t) { + t.x = f.x; + t.y = f.y; + t.z = f.z; + t.w = f.w; + return t; + } + function impl(seed, opts) { + var xg = new XorGen(seed), state = opts && opts.state, prng = function() { + return (xg.next() >>> 0) / 4294967296; + }; + prng.double = function() { + do { + var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21); + } while (result === 0); + return result; + }; + prng.int32 = xg.next; + prng.quick = prng; + if (state) { + if (typeof state == "object") + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.xor128 = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js + var require_xorwow = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function XorGen(seed) { + var me = this, strseed = ""; + me.next = function() { + var t = me.x ^ me.x >>> 2; + me.x = me.y; + me.y = me.z; + me.z = me.w; + me.w = me.v; + return (me.d = me.d + 362437 | 0) + (me.v = me.v ^ me.v << 4 ^ (t ^ t << 1)) | 0; + }; + me.x = 0; + me.y = 0; + me.z = 0; + me.w = 0; + me.v = 0; + if (seed === (seed | 0)) { + me.x = seed; + } else { + strseed += seed; + } + for (var k = 0; k < strseed.length + 64; k++) { + me.x ^= strseed.charCodeAt(k) | 0; + if (k == strseed.length) { + me.d = me.x << 10 ^ me.x >>> 4; + } + me.next(); + } + } + function copy(f, t) { + t.x = f.x; + t.y = f.y; + t.z = f.z; + t.w = f.w; + t.v = f.v; + t.d = f.d; + return t; + } + function impl(seed, opts) { + var xg = new XorGen(seed), state = opts && opts.state, prng = function() { + return (xg.next() >>> 0) / 4294967296; + }; + prng.double = function() { + do { + var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21); + } while (result === 0); + return result; + }; + prng.int32 = xg.next; + prng.quick = prng; + if (state) { + if (typeof state == "object") + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.xorwow = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js + var require_xorshift7 = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function XorGen(seed) { + var me = this; + me.next = function() { + var X = me.x, i = me.i, t, v, w; + t = X[i]; + t ^= t >>> 7; + v = t ^ t << 24; + t = X[i + 1 & 7]; + v ^= t ^ t >>> 10; + t = X[i + 3 & 7]; + v ^= t ^ t >>> 3; + t = X[i + 4 & 7]; + v ^= t ^ t << 7; + t = X[i + 7 & 7]; + t = t ^ t << 13; + v ^= t ^ t << 9; + X[i] = v; + me.i = i + 1 & 7; + return v; + }; + function init2(me2, seed2) { + var j, w, X = []; + if (seed2 === (seed2 | 0)) { + w = X[0] = seed2; + } else { + seed2 = "" + seed2; + for (j = 0; j < seed2.length; ++j) { + X[j & 7] = X[j & 7] << 15 ^ seed2.charCodeAt(j) + X[j + 1 & 7] << 13; + } + } + while (X.length < 8) + X.push(0); + for (j = 0; j < 8 && X[j] === 0; ++j) + ; + if (j == 8) + w = X[7] = -1; + else + w = X[j]; + me2.x = X; + me2.i = 0; + for (j = 256; j > 0; --j) { + me2.next(); + } + } + init2(me, seed); + } + function copy(f, t) { + t.x = f.x.slice(); + t.i = f.i; + return t; + } + function impl(seed, opts) { + if (seed == null) + seed = +new Date(); + var xg = new XorGen(seed), state = opts && opts.state, prng = function() { + return (xg.next() >>> 0) / 4294967296; + }; + prng.double = function() { + do { + var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21); + } while (result === 0); + return result; + }; + prng.int32 = xg.next; + prng.quick = prng; + if (state) { + if (state.x) + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.xorshift7 = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js + var require_xor4096 = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function XorGen(seed) { + var me = this; + me.next = function() { + var w = me.w, X = me.X, i = me.i, t, v; + me.w = w = w + 1640531527 | 0; + v = X[i + 34 & 127]; + t = X[i = i + 1 & 127]; + v ^= v << 13; + t ^= t << 17; + v ^= v >>> 15; + t ^= t >>> 12; + v = X[i] = v ^ t; + me.i = i; + return v + (w ^ w >>> 16) | 0; + }; + function init2(me2, seed2) { + var t, v, i, j, w, X = [], limit = 128; + if (seed2 === (seed2 | 0)) { + v = seed2; + seed2 = null; + } else { + seed2 = seed2 + "\0"; + v = 0; + limit = Math.max(limit, seed2.length); + } + for (i = 0, j = -32; j < limit; ++j) { + if (seed2) + v ^= seed2.charCodeAt((j + 32) % seed2.length); + if (j === 0) + w = v; + v ^= v << 10; + v ^= v >>> 15; + v ^= v << 4; + v ^= v >>> 13; + if (j >= 0) { + w = w + 1640531527 | 0; + t = X[j & 127] ^= v + w; + i = 0 == t ? i + 1 : 0; + } + } + if (i >= 128) { + X[(seed2 && seed2.length || 0) & 127] = -1; + } + i = 127; + for (j = 4 * 128; j > 0; --j) { + v = X[i + 34 & 127]; + t = X[i = i + 1 & 127]; + v ^= v << 13; + t ^= t << 17; + v ^= v >>> 15; + t ^= t >>> 12; + X[i] = v ^ t; + } + me2.w = w; + me2.X = X; + me2.i = i; + } + init2(me, seed); + } + function copy(f, t) { + t.i = f.i; + t.w = f.w; + t.X = f.X.slice(); + return t; + } + ; + function impl(seed, opts) { + if (seed == null) + seed = +new Date(); + var xg = new XorGen(seed), state = opts && opts.state, prng = function() { + return (xg.next() >>> 0) / 4294967296; + }; + prng.double = function() { + do { + var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21); + } while (result === 0); + return result; + }; + prng.int32 = xg.next; + prng.quick = prng; + if (state) { + if (state.X) + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.xor4096 = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js + var require_tychei = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, module2, define2) { + function XorGen(seed) { + var me = this, strseed = ""; + me.next = function() { + var b = me.b, c = me.c, d = me.d, a = me.a; + b = b << 25 ^ b >>> 7 ^ c; + c = c - d | 0; + d = d << 24 ^ d >>> 8 ^ a; + a = a - b | 0; + me.b = b = b << 20 ^ b >>> 12 ^ c; + me.c = c = c - d | 0; + me.d = d << 16 ^ c >>> 16 ^ a; + return me.a = a - b | 0; + }; + me.a = 0; + me.b = 0; + me.c = 2654435769 | 0; + me.d = 1367130551; + if (seed === Math.floor(seed)) { + me.a = seed / 4294967296 | 0; + me.b = seed | 0; + } else { + strseed += seed; + } + for (var k = 0; k < strseed.length + 20; k++) { + me.b ^= strseed.charCodeAt(k) | 0; + me.next(); + } + } + function copy(f, t) { + t.a = f.a; + t.b = f.b; + t.c = f.c; + t.d = f.d; + return t; + } + ; + function impl(seed, opts) { + var xg = new XorGen(seed), state = opts && opts.state, prng = function() { + return (xg.next() >>> 0) / 4294967296; + }; + prng.double = function() { + do { + var top = xg.next() >>> 11, bot = (xg.next() >>> 0) / 4294967296, result = (top + bot) / (1 << 21); + } while (result === 0); + return result; + }; + prng.int32 = xg.next; + prng.quick = prng; + if (state) { + if (typeof state == "object") + copy(state, xg); + prng.state = function() { + return copy(xg, {}); + }; + } + return prng; + } + if (module2 && module2.exports) { + module2.exports = impl; + } else if (define2 && define2.amd) { + define2(function() { + return impl; + }); + } else { + this.tychei = impl; + } + })( + exports, + typeof module == "object" && module, + typeof define == "function" && define + ); + } + }); + + // (disabled):crypto + var require_crypto = __commonJS({ + "(disabled):crypto"() { + init_define_BUILD_VERSION(); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js + var require_seedrandom = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js"(exports, module) { + init_define_BUILD_VERSION(); + (function(global2, pool3, math) { + var width = 256, chunks = 6, digits = 52, rngname = "random", startdenom = math.pow(width, chunks), significance = math.pow(2, digits), overflow = significance * 2, mask = width - 1, nodecrypto; + function seedrandom5(seed, options, callback) { + var key = []; + options = options == true ? { entropy: true } : options || {}; + var shortseed = mixkey(flatten3( + options.entropy ? [seed, tostring(pool3)] : seed == null ? autoseed() : seed, + 3 + ), key); + var arc4 = new ARC4(key); + var prng = function() { + var n = arc4.g(chunks), d = startdenom, x = 0; + while (n < significance) { + n = (n + x) * width; + d *= width; + x = arc4.g(1); + } + while (n >= overflow) { + n /= 2; + d /= 2; + x >>>= 1; + } + return (n + x) / d; + }; + prng.int32 = function() { + return arc4.g(4) | 0; + }; + prng.quick = function() { + return arc4.g(4) / 4294967296; + }; + prng.double = prng; + mixkey(tostring(arc4.S), pool3); + return (options.pass || callback || function(prng2, seed2, is_math_call, state) { + if (state) { + if (state.S) { + copy(state, arc4); + } + prng2.state = function() { + return copy(arc4, {}); + }; + } + if (is_math_call) { + math[rngname] = prng2; + return seed2; + } else + return prng2; + })( + prng, + shortseed, + "global" in options ? options.global : this == math, + options.state + ); + } + function ARC4(key) { + var t, keylen = key.length, me = this, i = 0, j = me.i = me.j = 0, s = me.S = []; + if (!keylen) { + key = [keylen++]; + } + while (i < width) { + s[i] = i++; + } + for (i = 0; i < width; i++) { + s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])]; + s[j] = t; + } + (me.g = function(count2) { + var t2, r = 0, i2 = me.i, j2 = me.j, s2 = me.S; + while (count2--) { + t2 = s2[i2 = mask & i2 + 1]; + r = r * width + s2[mask & (s2[i2] = s2[j2 = mask & j2 + t2]) + (s2[j2] = t2)]; + } + me.i = i2; + me.j = j2; + return r; + })(width); + } + function copy(f, t) { + t.i = f.i; + t.j = f.j; + t.S = f.S.slice(); + return t; + } + ; + function flatten3(obj, depth) { + var result = [], typ = typeof obj, prop; + if (depth && typ == "object") { + for (prop in obj) { + try { + result.push(flatten3(obj[prop], depth - 1)); + } catch (e) { + } + } + } + return result.length ? result : typ == "string" ? obj : obj + "\0"; + } + function mixkey(seed, key) { + var stringseed = seed + "", smear, j = 0; + while (j < stringseed.length) { + key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++); + } + return tostring(key); + } + function autoseed() { + try { + var out; + if (nodecrypto && (out = nodecrypto.randomBytes)) { + out = out(width); + } else { + out = new Uint8Array(width); + (global2.crypto || global2.msCrypto).getRandomValues(out); + } + return tostring(out); + } catch (e) { + var browser = global2.navigator, plugins = browser && browser.plugins; + return [+new Date(), global2, plugins, global2.screen, tostring(pool3)]; + } + } + function tostring(a) { + return String.fromCharCode.apply(0, a); + } + mixkey(math.random(), pool3); + if (typeof module == "object" && module.exports) { + module.exports = seedrandom5; + try { + nodecrypto = require_crypto(); + } catch (ex) { + } + } else if (typeof define == "function" && define.amd) { + define(function() { + return seedrandom5; + }); + } else { + math["seed" + rngname] = seedrandom5; + } + })( + typeof self !== "undefined" ? self : exports, + [], + Math + ); + } + }); + + // node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/index.js + var require_seedrandom2 = __commonJS({ + "node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/index.js"(exports, module) { + init_define_BUILD_VERSION(); + var alea5 = require_alea(); + var xor128 = require_xor128(); + var xorwow = require_xorwow(); + var xorshift7 = require_xorshift7(); + var xor4096 = require_xor4096(); + var tychei = require_tychei(); + var sr = require_seedrandom(); + sr.alea = alea5; + sr.xor128 = xor128; + sr.xorwow = xorwow; + sr.xorshift7 = xorshift7; + sr.xor4096 = xor4096; + sr.tychei = tychei; + module.exports = sr; + } + }); + + // (disabled):node_modules/.pnpm/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.js + var require_string_decoder = __commonJS({ + "(disabled):node_modules/.pnpm/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.js"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):path + var require_path = __commonJS({ + "(disabled):path"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):fs + var require_fs = __commonJS({ + "(disabled):fs"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):worker_threads + var require_worker_threads = __commonJS({ + "(disabled):worker_threads"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):perf_hooks + var require_perf_hooks = __commonJS({ + "(disabled):perf_hooks"() { + init_define_BUILD_VERSION(); + } + }); + + // (disabled):os + var require_os = __commonJS({ + "(disabled):os"() { + init_define_BUILD_VERSION(); + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.js + var require_tfjs_backend_wasm_threaded_simd = __commonJS({ + "node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.js"(exports, module) { + init_define_BUILD_VERSION(); + var WasmBackendModuleThreadedSimd2 = (() => { + var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0; + if (typeof __filename !== "undefined") + _scriptDir = _scriptDir || __filename; + return function(WasmBackendModuleThreadedSimd3) { + WasmBackendModuleThreadedSimd3 = WasmBackendModuleThreadedSimd3 || {}; + function GROWABLE_HEAP_I8() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAP8; + } + function GROWABLE_HEAP_U8() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAPU8; + } + function GROWABLE_HEAP_I16() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAP16; + } + function GROWABLE_HEAP_U16() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAPU16; + } + function GROWABLE_HEAP_I32() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAP32; + } + function GROWABLE_HEAP_F32() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAPF32; + } + function GROWABLE_HEAP_F64() { + if (wasmMemory.buffer != buffer2) { + updateGlobalBufferAndViews(wasmMemory.buffer); + } + return HEAPF64; + } + var Module = typeof WasmBackendModuleThreadedSimd3 !== "undefined" ? WasmBackendModuleThreadedSimd3 : {}; + var readyPromiseResolve, readyPromiseReject; + Module["ready"] = new Promise(function(resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject; + }); + var beforeListeners; + if (typeof process !== "undefined" && process.listeners) { + beforeListeners = { uncaughtException: process.listeners("uncaughtException"), unhandledRejection: process.listeners("unhandledRejection") }; + } + var moduleOverrides = Object.assign({}, Module); + var arguments_ = []; + var thisProgram = "./this.program"; + var quit_ = (status, toThrow) => { + throw toThrow; + }; + var ENVIRONMENT_IS_WEB = typeof window === "object"; + var ENVIRONMENT_IS_WORKER = typeof importScripts === "function"; + var ENVIRONMENT_IS_NODE = typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string"; + var ENVIRONMENT_IS_PTHREAD = Module["ENVIRONMENT_IS_PTHREAD"] || false; + var scriptDirectory = ""; + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + return scriptDirectory + path; + } + var read_, readAsync, readBinary, setWindowTitle; + function logExceptionOnExit(e) { + if (e instanceof ExitStatus) + return; + let toLog = e; + err("exiting due to exception: " + toLog); + } + var fs; + var nodePath; + var requireNodeFS; + if (ENVIRONMENT_IS_NODE) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = require_path().dirname(scriptDirectory) + "/"; + } else { + scriptDirectory = __dirname + "/"; + } + requireNodeFS = () => { + if (!nodePath) { + fs = require_fs(); + nodePath = require_path(); + } + }; + read_ = function shell_read(filename, binary) { + requireNodeFS(); + filename = nodePath["normalize"](filename); + return fs.readFileSync(filename, binary ? void 0 : "utf8"); + }; + readBinary = (filename) => { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + return ret; + }; + readAsync = (filename, onload, onerror) => { + requireNodeFS(); + filename = nodePath["normalize"](filename); + fs.readFile(filename, function(err2, data) { + if (err2) + onerror(err2); + else + onload(data.buffer); + }); + }; + if (process["argv"].length > 1) { + thisProgram = process["argv"][1].replace(/\\/g, "/"); + } + arguments_ = process["argv"].slice(2); + process["on"]("uncaughtException", function(ex) { + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); + process["on"]("unhandledRejection", function(reason) { + throw reason; + }); + quit_ = (status, toThrow) => { + if (keepRuntimeAlive()) { + process["exitCode"] = status; + throw toThrow; + } + logExceptionOnExit(toThrow); + process["exit"](status); + }; + Module["inspect"] = function() { + return "[Emscripten Module object]"; + }; + let nodeWorkerThreads; + try { + nodeWorkerThreads = require_worker_threads(); + } catch (e) { + console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'); + throw e; + } + window.Worker = nodeWorkerThreads.Worker; + } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = self.location.href; + } else if (typeof document !== "undefined" && document.currentScript) { + scriptDirectory = document.currentScript.src; + } + if (typeof _scriptDir !== "undefined" && _scriptDir) { + scriptDirectory = _scriptDir; + } + if (scriptDirectory.indexOf("blob:") !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1); + } else { + scriptDirectory = ""; + } + if (!ENVIRONMENT_IS_NODE) { + read_ = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.send(null); + return xhr.responseText; + }; + if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.responseType = "arraybuffer"; + xhr.send(null); + return new Uint8Array(xhr.response); + }; + } + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = () => { + if (xhr.status == 200 || xhr.status == 0 && xhr.response) { + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + }; + } + setWindowTitle = (title) => document.title = title; + } else { + } + if (ENVIRONMENT_IS_NODE) { + if (typeof performance === "undefined") { + window.performance = require_perf_hooks().performance; + } + } + var defaultPrint = console.log.bind(console); + var defaultPrintErr = console.warn.bind(console); + if (ENVIRONMENT_IS_NODE) { + requireNodeFS(); + defaultPrint = (str) => fs.writeSync(1, str + "\n"); + defaultPrintErr = (str) => fs.writeSync(2, str + "\n"); + } + var out = Module["print"] || defaultPrint; + var err = Module["printErr"] || defaultPrintErr; + Object.assign(Module, moduleOverrides); + moduleOverrides = null; + if (Module["arguments"]) + arguments_ = Module["arguments"]; + if (Module["thisProgram"]) + thisProgram = Module["thisProgram"]; + if (Module["quit"]) + quit_ = Module["quit"]; + var POINTER_SIZE = 4; + function warnOnce(text) { + if (!warnOnce.shown) + warnOnce.shown = {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + err(text); + } + } + function convertJsFunctionToWasm(func2, sig) { + if (typeof WebAssembly.Function === "function") { + var typeNames = { "i": "i32", "j": "i64", "f": "f32", "d": "f64" }; + var type = { parameters: [], results: sig[0] == "v" ? [] : [typeNames[sig[0]]] }; + for (var i = 1; i < sig.length; ++i) { + type.parameters.push(typeNames[sig[i]]); + } + return new WebAssembly.Function(type, func2); + } + var typeSection = [1, 0, 1, 96]; + var sigRet = sig.slice(0, 1); + var sigParam = sig.slice(1); + var typeCodes = { "i": 127, "j": 126, "f": 125, "d": 124 }; + typeSection.push(sigParam.length); + for (var i = 0; i < sigParam.length; ++i) { + typeSection.push(typeCodes[sigParam[i]]); + } + if (sigRet == "v") { + typeSection.push(0); + } else { + typeSection = typeSection.concat([1, typeCodes[sigRet]]); + } + typeSection[1] = typeSection.length - 2; + var bytes = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0].concat(typeSection, [2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0])); + var module2 = new WebAssembly.Module(bytes); + var instance = new WebAssembly.Instance(module2, { "e": { "f": func2 } }); + var wrappedFunc = instance.exports["f"]; + return wrappedFunc; + } + var freeTableIndexes = []; + var functionsInTableMap; + function getEmptyTableSlot() { + if (freeTableIndexes.length) { + return freeTableIndexes.pop(); + } + try { + wasmTable.grow(1); + } catch (err2) { + if (!(err2 instanceof RangeError)) { + throw err2; + } + throw "Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."; + } + return wasmTable.length - 1; + } + function updateTableMap(offset, count2) { + for (var i = offset; i < offset + count2; i++) { + var item = getWasmTableEntry(i); + if (item) { + functionsInTableMap.set(item, i); + } + } + } + var tempRet0 = 0; + var setTempRet0 = (value) => { + tempRet0 = value; + }; + var Atomics_load = Atomics.load; + var Atomics_store = Atomics.store; + var Atomics_compareExchange = Atomics.compareExchange; + var wasmBinary; + if (Module["wasmBinary"]) + wasmBinary = Module["wasmBinary"]; + var noExitRuntime = Module["noExitRuntime"] || true; + if (typeof WebAssembly !== "object") { + abort("no native wasm support detected"); + } + var wasmMemory; + var wasmModule; + var ABORT = false; + var EXITSTATUS; + function assert3(condition, text) { + if (!condition) { + abort(text); + } + } + function getCFunc(ident) { + var func2 = Module["_" + ident]; + return func2; + } + function ccall(ident, returnType, argTypes, args, opts) { + var toC = { "string": function(str) { + var ret2 = 0; + if (str !== null && str !== void 0 && str !== 0) { + var len = (str.length << 2) + 1; + ret2 = stackAlloc(len); + stringToUTF8(str, ret2, len); + } + return ret2; + }, "array": function(arr) { + var ret2 = stackAlloc(arr.length); + writeArrayToMemory(arr, ret2); + return ret2; + } }; + function convertReturnValue(ret2) { + if (returnType === "string") + return UTF8ToString(ret2); + if (returnType === "boolean") + return Boolean(ret2); + return ret2; + } + var func2 = getCFunc(ident); + var cArgs = []; + var stack2 = 0; + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack2 === 0) + stack2 = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func2.apply(null, cArgs); + function onDone(ret2) { + if (stack2 !== 0) + stackRestore(stack2); + return convertReturnValue(ret2); + } + ret = onDone(ret); + return ret; + } + function cwrap(ident, returnType, argTypes, opts) { + argTypes = argTypes || []; + var numericArgs = argTypes.every(function(type) { + return type === "number"; + }); + var numericRet = returnType !== "string"; + if (numericRet && numericArgs && !opts) { + return getCFunc(ident); + } + return function() { + return ccall(ident, returnType, argTypes, arguments, opts); + }; + } + var ALLOC_STACK = 1; + function TextDecoderWrapper(encoding) { + var textDecoder = new TextDecoder(encoding); + this.decode = (data) => { + if (data.buffer instanceof SharedArrayBuffer) { + data = new Uint8Array(data); + } + return textDecoder.decode.call(textDecoder, data); + }; + } + var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoderWrapper("utf8") : void 0; + function UTF8ArrayToString(heap, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + while (heap[endPtr] && !(endPtr >= endIdx)) + ++endPtr; + if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { + return UTF8Decoder.decode(heap.subarray(idx, endPtr)); + } else { + var str = ""; + while (idx < endPtr) { + var u0 = heap[idx++]; + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue; + } + var u1 = heap[idx++] & 63; + if ((u0 & 224) == 192) { + str += String.fromCharCode((u0 & 31) << 6 | u1); + continue; + } + var u2 = heap[idx++] & 63; + if ((u0 & 240) == 224) { + u0 = (u0 & 15) << 12 | u1 << 6 | u2; + } else { + u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63; + } + if (u0 < 65536) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); + } + } + } + return str; + } + function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(GROWABLE_HEAP_U8(), ptr, maxBytesToRead) : ""; + } + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) + return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023; + } + if (u <= 127) { + if (outIdx >= endIdx) + break; + heap[outIdx++] = u; + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) + break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63; + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) + break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } else { + if (outIdx + 3 >= endIdx) + break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } + } + heap[outIdx] = 0; + return outIdx - startIdx; + } + function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, GROWABLE_HEAP_U8(), outPtr, maxBytesToWrite); + } + function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) + u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; + if (u <= 127) + ++len; + else if (u <= 2047) + len += 2; + else if (u <= 65535) + len += 3; + else + len += 4; + } + return len; + } + var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoderWrapper("utf-16le") : void 0; + function writeArrayToMemory(array2, buffer3) { + GROWABLE_HEAP_I8().set(array2, buffer3); + } + function writeAsciiToMemory(str, buffer3, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + GROWABLE_HEAP_I8()[buffer3++ >> 0] = str.charCodeAt(i); + } + if (!dontAddNull) + GROWABLE_HEAP_I8()[buffer3 >> 0] = 0; + } + function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - x % multiple; + } + return x; + } + var buffer2, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; + if (ENVIRONMENT_IS_PTHREAD) { + buffer2 = Module["buffer"]; + } + function updateGlobalBufferAndViews(buf) { + buffer2 = buf; + Module["HEAP8"] = HEAP8 = new Int8Array(buf); + Module["HEAP16"] = HEAP16 = new Int16Array(buf); + Module["HEAP32"] = HEAP32 = new Int32Array(buf); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); + Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); + Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); + Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); + Module["HEAPF64"] = HEAPF64 = new Float64Array(buf); + } + var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 16777216; + if (ENVIRONMENT_IS_PTHREAD) { + wasmMemory = Module["wasmMemory"]; + buffer2 = Module["buffer"]; + } else { + if (Module["wasmMemory"]) { + wasmMemory = Module["wasmMemory"]; + } else { + wasmMemory = new WebAssembly.Memory({ "initial": INITIAL_MEMORY / 65536, "maximum": 2147483648 / 65536, "shared": true }); + if (!(wasmMemory.buffer instanceof SharedArrayBuffer)) { + err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"); + if (ENVIRONMENT_IS_NODE) { + console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"); + } + throw Error("bad memory"); + } + } + } + if (wasmMemory) { + buffer2 = wasmMemory.buffer; + } + INITIAL_MEMORY = buffer2.byteLength; + updateGlobalBufferAndViews(buffer2); + var wasmTable; + var __ATPRERUN__ = []; + var __ATINIT__ = []; + var __ATEXIT__ = []; + var __ATPOSTRUN__ = []; + var runtimeInitialized = false; + var runtimeExited = false; + var runtimeKeepaliveCounter = 0; + function keepRuntimeAlive() { + return noExitRuntime || runtimeKeepaliveCounter > 0; + } + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") + Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); + } + function initRuntime() { + runtimeInitialized = true; + if (ENVIRONMENT_IS_PTHREAD) + return; + callRuntimeCallbacks(__ATINIT__); + } + function exitRuntime() { + if (ENVIRONMENT_IS_PTHREAD) + return; + PThread.terminateAllThreads(); + runtimeExited = true; + } + function postRun() { + if (ENVIRONMENT_IS_PTHREAD) + return; + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") + Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); + } + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); + } + function addOnInit(cb) { + __ATINIT__.unshift(cb); + } + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); + } + var runDependencies = 0; + var runDependencyWatcher = null; + var dependenciesFulfilled = null; + function addRunDependency(id) { + runDependencies++; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + } + function removeRunDependency(id) { + runDependencies--; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } + } + Module["preloadedImages"] = {}; + Module["preloadedAudios"] = {}; + function abort(what) { + if (ENVIRONMENT_IS_PTHREAD) { + postMessage({ "cmd": "onAbort", "arg": what }); + } else { + if (Module["onAbort"]) { + Module["onAbort"](what); + } + } + what = "Aborted(" + what + ")"; + err(what); + ABORT = true; + EXITSTATUS = 1; + what += ". Build with -s ASSERTIONS=1 for more info."; + var e = new WebAssembly.RuntimeError(what); + readyPromiseReject(e); + throw e; + } + var dataURIPrefix = "data:application/octet-stream;base64,"; + function isDataURI(filename) { + return filename.startsWith(dataURIPrefix); + } + function isFileURI(filename) { + return filename.startsWith("file://"); + } + var wasmBinaryFile; + wasmBinaryFile = "tfjs-backend-wasm-threaded-simd.wasm"; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } else { + throw "both async and sync fetching of the wasm failed"; + } + } catch (err2) { + abort(err2); + } + } + function getBinaryPromise() { + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch === "function" && !isFileURI(wasmBinaryFile)) { + return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) { + if (!response["ok"]) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; + } + return response["arrayBuffer"](); + }).catch(function() { + return getBinary(wasmBinaryFile); + }); + } else { + if (readAsync) { + return new Promise(function(resolve, reject) { + readAsync(wasmBinaryFile, function(response) { + resolve(new Uint8Array(response)); + }, reject); + }); + } + } + } + return Promise.resolve().then(function() { + return getBinary(wasmBinaryFile); + }); + } + function createWasm() { + var info = { "env": asmLibraryArg, "wasi_snapshot_preview1": asmLibraryArg }; + function receiveInstance(instance, module2) { + var exports3 = instance.exports; + Module["asm"] = exports3; + registerTlsInit(Module["asm"]["emscripten_tls_init"]); + wasmTable = Module["asm"]["__indirect_function_table"]; + addOnInit(Module["asm"]["__wasm_call_ctors"]); + wasmModule = module2; + if (!ENVIRONMENT_IS_PTHREAD) { + var numWorkersToLoad = PThread.unusedWorkers.length; + PThread.unusedWorkers.forEach(function(w) { + PThread.loadWasmModuleToWorker(w, function() { + if (!--numWorkersToLoad) + removeRunDependency("wasm-instantiate"); + }); + }); + } + } + if (!ENVIRONMENT_IS_PTHREAD) { + addRunDependency("wasm-instantiate"); + } + function receiveInstantiationResult(result) { + receiveInstance(result["instance"], result["module"]); + } + function instantiateArrayBuffer(receiver) { + return getBinaryPromise().then(function(binary) { + return WebAssembly.instantiate(binary, info); + }).then(function(instance) { + return instance; + }).then(receiver, function(reason) { + err("failed to asynchronously prepare wasm: " + reason); + abort(reason); + }); + } + function instantiateAsync() { + if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && !isFileURI(wasmBinaryFile) && typeof fetch === "function") { + return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) { + var result = WebAssembly.instantiateStreaming(response, info); + return result.then(receiveInstantiationResult, function(reason) { + err("wasm streaming compile failed: " + reason); + err("falling back to ArrayBuffer instantiation"); + return instantiateArrayBuffer(receiveInstantiationResult); + }); + }); + } else { + return instantiateArrayBuffer(receiveInstantiationResult); + } + } + if (Module["instantiateWasm"]) { + try { + var exports2 = Module["instantiateWasm"](info, receiveInstance); + return exports2; + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false; + } + } + instantiateAsync().catch(readyPromiseReject); + return {}; + } + var tempDouble; + var tempI64; + var ASM_CONSTS = {}; + function callRuntimeCallbacks(callbacks2) { + while (callbacks2.length > 0) { + var callback = callbacks2.shift(); + if (typeof callback == "function") { + callback(Module); + continue; + } + var func2 = callback.func; + if (typeof func2 === "number") { + if (callback.arg === void 0) { + getWasmTableEntry(func2)(); + } else { + getWasmTableEntry(func2)(callback.arg); + } + } else { + func2(callback.arg === void 0 ? null : callback.arg); + } + } + } + function withStackSave(f) { + var stack2 = stackSave(); + var ret = f(); + stackRestore(stack2); + return ret; + } + function demangle(func2) { + return func2; + } + function demangleAll(text) { + var regex = /\b_Z[\w\d_]+/g; + return text.replace(regex, function(x) { + var y = demangle(x); + return x === y ? x : y + " [" + x + "]"; + }); + } + function killThread(pthread_ptr) { + GROWABLE_HEAP_I32()[pthread_ptr >> 2] = 0; + var pthread = PThread.pthreads[pthread_ptr]; + delete PThread.pthreads[pthread_ptr]; + pthread.worker.terminate(); + __emscripten_thread_free_data(pthread_ptr); + PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker), 1); + pthread.worker.pthread = void 0; + } + function cancelThread(pthread_ptr) { + var pthread = PThread.pthreads[pthread_ptr]; + pthread.worker.postMessage({ "cmd": "cancel" }); + } + function cleanupThread(pthread_ptr) { + var pthread = PThread.pthreads[pthread_ptr]; + if (pthread) { + GROWABLE_HEAP_I32()[pthread_ptr >> 2] = 0; + var worker = pthread.worker; + PThread.returnWorkerToPool(worker); + } + } + function _exit(status) { + exit(status); + } + function handleException(e) { + if (e instanceof ExitStatus || e == "unwind") { + return EXITSTATUS; + } + quit_(1, e); + } + var PThread = { unusedWorkers: [], runningWorkers: [], tlsInitFunctions: [], init: function() { + if (ENVIRONMENT_IS_PTHREAD) { + PThread.initWorker(); + } else { + PThread.initMainThread(); + } + }, initMainThread: function() { + var pthreadPoolSize = 8; + for (var i = 0; i < pthreadPoolSize; ++i) { + PThread.allocateUnusedWorker(); + } + }, initWorker: function() { + noExitRuntime = false; + }, pthreads: {}, setExitStatus: function(status) { + EXITSTATUS = status; + }, terminateAllThreads: function() { + for (var t in PThread.pthreads) { + var pthread = PThread.pthreads[t]; + if (pthread && pthread.worker) { + PThread.returnWorkerToPool(pthread.worker); + } + } + for (var i = 0; i < PThread.unusedWorkers.length; ++i) { + var worker = PThread.unusedWorkers[i]; + worker.terminate(); + } + PThread.unusedWorkers = []; + }, returnWorkerToPool: function(worker) { + PThread.runWithoutMainThreadQueuedCalls(function() { + delete PThread.pthreads[worker.pthread.threadInfoStruct]; + PThread.unusedWorkers.push(worker); + PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker), 1); + __emscripten_thread_free_data(worker.pthread.threadInfoStruct); + worker.pthread = void 0; + }); + }, runWithoutMainThreadQueuedCalls: function(func2) { + GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls >> 2] = 0; + try { + func2(); + } finally { + GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls >> 2] = 1; + } + }, receiveObjectTransfer: function(data) { + }, threadInit: function() { + for (var i in PThread.tlsInitFunctions) { + PThread.tlsInitFunctions[i](); + } + }, loadWasmModuleToWorker: function(worker, onFinishedLoading) { + worker.onmessage = (e) => { + var d = e["data"]; + var cmd = d["cmd"]; + if (worker.pthread) + PThread.currentProxiedOperationCallerThread = worker.pthread.threadInfoStruct; + if (d["targetThread"] && d["targetThread"] != _pthread_self()) { + var thread = PThread.pthreads[d.targetThread]; + if (thread) { + thread.worker.postMessage(d, d["transferList"]); + } else { + err('Internal error! Worker sent a message "' + cmd + '" to target pthread ' + d["targetThread"] + ", but that thread no longer exists!"); + } + PThread.currentProxiedOperationCallerThread = void 0; + return; + } + if (cmd === "processQueuedMainThreadWork") { + _emscripten_main_thread_process_queued_calls(); + } else if (cmd === "spawnThread") { + spawnThread(d); + } else if (cmd === "cleanupThread") { + cleanupThread(d["thread"]); + } else if (cmd === "killThread") { + killThread(d["thread"]); + } else if (cmd === "cancelThread") { + cancelThread(d["thread"]); + } else if (cmd === "loaded") { + worker.loaded = true; + if (onFinishedLoading) + onFinishedLoading(worker); + if (worker.runPthread) { + worker.runPthread(); + delete worker.runPthread; + } + } else if (cmd === "print") { + out("Thread " + d["threadId"] + ": " + d["text"]); + } else if (cmd === "printErr") { + err("Thread " + d["threadId"] + ": " + d["text"]); + } else if (cmd === "alert") { + alert("Thread " + d["threadId"] + ": " + d["text"]); + } else if (d.target === "setimmediate") { + worker.postMessage(d); + } else if (cmd === "onAbort") { + if (Module["onAbort"]) { + Module["onAbort"](d["arg"]); + } + } else { + err("worker sent an unknown command " + cmd); + } + PThread.currentProxiedOperationCallerThread = void 0; + }; + worker.onerror = (e) => { + var message = "worker sent an error!"; + err(message + " " + e.filename + ":" + e.lineno + ": " + e.message); + throw e; + }; + if (ENVIRONMENT_IS_NODE) { + worker.on("message", function(data) { + worker.onmessage({ data }); + }); + worker.on("error", function(e) { + worker.onerror(e); + }); + worker.on("detachedExit", function() { + }); + } + worker.postMessage({ "cmd": "load", "urlOrBlob": Module["mainScriptUrlOrBlob"] || _scriptDir, "wasmMemory": wasmMemory, "wasmModule": wasmModule }); + }, allocateUnusedWorker: function() { + var pthreadMainJs = locateFile("tfjs-backend-wasm-threaded-simd.worker.js"); + PThread.unusedWorkers.push(new Worker(pthreadMainJs)); + }, getNewWorker: function() { + if (PThread.unusedWorkers.length == 0) { + PThread.allocateUnusedWorker(); + PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0]); + } + return PThread.unusedWorkers.pop(); + } }; + function establishStackSpace() { + var pthread_ptr = _pthread_self(); + var stackTop = GROWABLE_HEAP_I32()[pthread_ptr + 44 >> 2]; + var stackSize = GROWABLE_HEAP_I32()[pthread_ptr + 48 >> 2]; + var stackMax = stackTop - stackSize; + _emscripten_stack_set_limits(stackTop, stackMax); + stackRestore(stackTop); + } + Module["establishStackSpace"] = establishStackSpace; + function exitOnMainThread(returnCode) { + if (ENVIRONMENT_IS_PTHREAD) + return _emscripten_proxy_to_main_thread_js(1, 0, returnCode); + try { + _exit(returnCode); + } catch (e) { + handleException(e); + } + } + var wasmTableMirror = []; + function getWasmTableEntry(funcPtr) { + var func2 = wasmTableMirror[funcPtr]; + if (!func2) { + if (funcPtr >= wasmTableMirror.length) + wasmTableMirror.length = funcPtr + 1; + wasmTableMirror[funcPtr] = func2 = wasmTable.get(funcPtr); + } + return func2; + } + function invokeEntryPoint(ptr, arg) { + return getWasmTableEntry(ptr)(arg); + } + Module["invokeEntryPoint"] = invokeEntryPoint; + function jsStackTrace() { + var error = new Error(); + if (!error.stack) { + try { + throw new Error(); + } catch (e) { + error = e; + } + if (!error.stack) { + return "(no stack trace available)"; + } + } + return error.stack.toString(); + } + function registerTlsInit(tlsInitFunc, moduleExports, metadata) { + PThread.tlsInitFunctions.push(tlsInitFunc); + } + function setWasmTableEntry(idx, func2) { + wasmTable.set(idx, func2); + wasmTableMirror[idx] = func2; + } + var _emscripten_get_now; + if (ENVIRONMENT_IS_NODE) { + _emscripten_get_now = () => { + var t = process["hrtime"](); + return t[0] * 1e3 + t[1] / 1e6; + }; + } else if (ENVIRONMENT_IS_PTHREAD) { + _emscripten_get_now = () => performance.now() - Module["__performance_now_clock_drift"]; + } else + _emscripten_get_now = () => performance.now(); + var _emscripten_get_now_is_monotonic = true; + function setErrNo(value) { + GROWABLE_HEAP_I32()[___errno_location() >> 2] = value; + return value; + } + function _clock_gettime(clk_id, tp) { + var now2; + if (clk_id === 0) { + now2 = Date.now(); + } else if ((clk_id === 1 || clk_id === 4) && _emscripten_get_now_is_monotonic) { + now2 = _emscripten_get_now(); + } else { + setErrNo(28); + return -1; + } + GROWABLE_HEAP_I32()[tp >> 2] = now2 / 1e3 | 0; + GROWABLE_HEAP_I32()[tp + 4 >> 2] = now2 % 1e3 * 1e3 * 1e3 | 0; + return 0; + } + function ___clock_gettime(a0, a12) { + return _clock_gettime(a0, a12); + } + function ___emscripten_init_main_thread_js(tb) { + __emscripten_thread_init(tb, !ENVIRONMENT_IS_WORKER, 1, !ENVIRONMENT_IS_WEB); + PThread.threadInit(); + } + function ___emscripten_thread_cleanup(thread) { + if (!ENVIRONMENT_IS_PTHREAD) + cleanupThread(thread); + else + postMessage({ "cmd": "cleanupThread", "thread": thread }); + } + function spawnThread(threadParams) { + var worker = PThread.getNewWorker(); + if (!worker) { + return 6; + } + PThread.runningWorkers.push(worker); + var pthread = PThread.pthreads[threadParams.pthread_ptr] = { worker, threadInfoStruct: threadParams.pthread_ptr }; + worker.pthread = pthread; + var msg = { "cmd": "run", "start_routine": threadParams.startRoutine, "arg": threadParams.arg, "threadInfoStruct": threadParams.pthread_ptr }; + worker.runPthread = () => { + msg.time = performance.now(); + worker.postMessage(msg, threadParams.transferList); + }; + if (worker.loaded) { + worker.runPthread(); + delete worker.runPthread; + } + return 0; + } + function ___pthread_create_js(pthread_ptr, attr, start_routine, arg) { + if (typeof SharedArrayBuffer === "undefined") { + err("Current environment does not support SharedArrayBuffer, pthreads are not available!"); + return 6; + } + var transferList = []; + var error = 0; + if (ENVIRONMENT_IS_PTHREAD && (transferList.length === 0 || error)) { + return _emscripten_sync_run_in_main_thread_4(687865856, pthread_ptr, attr, start_routine, arg); + } + if (error) + return error; + var threadParams = { startRoutine: start_routine, pthread_ptr, arg, transferList }; + if (ENVIRONMENT_IS_PTHREAD) { + threadParams.cmd = "spawnThread"; + postMessage(threadParams, transferList); + return 0; + } + return spawnThread(threadParams); + } + function __emscripten_default_pthread_stack_size() { + return 2097152; + } + function __emscripten_notify_thread_queue(targetThreadId, mainThreadId) { + if (targetThreadId == mainThreadId) { + postMessage({ "cmd": "processQueuedMainThreadWork" }); + } else if (ENVIRONMENT_IS_PTHREAD) { + postMessage({ "targetThread": targetThreadId, "cmd": "processThreadQueue" }); + } else { + var pthread = PThread.pthreads[targetThreadId]; + var worker = pthread && pthread.worker; + if (!worker) { + return; + } + worker.postMessage({ "cmd": "processThreadQueue" }); + } + return 1; + } + function _abort() { + abort(""); + } + function _emscripten_check_blocking_allowed() { + if (ENVIRONMENT_IS_NODE) + return; + if (ENVIRONMENT_IS_WORKER) + return; + warnOnce("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread"); + } + function _emscripten_get_heap_max() { + return 2147483648; + } + function _emscripten_memcpy_big(dest, src, num) { + GROWABLE_HEAP_U8().copyWithin(dest, src, src + num); + } + function _emscripten_num_logical_cores() { + if (ENVIRONMENT_IS_NODE) + return require_os().cpus().length; + return navigator["hardwareConcurrency"]; + } + function _emscripten_proxy_to_main_thread_js(index, sync) { + var numCallArgs = arguments.length - 2; + var outerArgs = arguments; + return withStackSave(function() { + var serializedNumCallArgs = numCallArgs; + var args = stackAlloc(serializedNumCallArgs * 8); + var b = args >> 3; + for (var i = 0; i < numCallArgs; i++) { + var arg = outerArgs[2 + i]; + GROWABLE_HEAP_F64()[b + i] = arg; + } + return _emscripten_run_in_main_runtime_thread_js(index, serializedNumCallArgs, args, sync); + }); + } + var _emscripten_receive_on_main_thread_js_callArgs = []; + function _emscripten_receive_on_main_thread_js(index, numCallArgs, args) { + _emscripten_receive_on_main_thread_js_callArgs.length = numCallArgs; + var b = args >> 3; + for (var i = 0; i < numCallArgs; i++) { + _emscripten_receive_on_main_thread_js_callArgs[i] = GROWABLE_HEAP_F64()[b + i]; + } + var isEmAsmConst = index < 0; + var func2 = !isEmAsmConst ? proxiedFunctionTable[index] : ASM_CONSTS[-index - 1]; + return func2.apply(null, _emscripten_receive_on_main_thread_js_callArgs); + } + function emscripten_realloc_buffer(size) { + try { + wasmMemory.grow(size - buffer2.byteLength + 65535 >>> 16); + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1; + } catch (e) { + } + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = GROWABLE_HEAP_U8().length; + requestedSize = requestedSize >>> 0; + if (requestedSize <= oldSize) { + return false; + } + var maxHeapSize = _emscripten_get_heap_max(); + if (requestedSize > maxHeapSize) { + return false; + } + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + return true; + } + } + return false; + } + var JSEvents = { inEventHandler: 0, removeAllEventListeners: function() { + for (var i = JSEvents.eventHandlers.length - 1; i >= 0; --i) { + JSEvents._removeHandler(i); + } + JSEvents.eventHandlers = []; + JSEvents.deferredCalls = []; + }, registerRemoveEventListeners: function() { + if (!JSEvents.removeEventListenersRegistered) { + __ATEXIT__.push(JSEvents.removeAllEventListeners); + JSEvents.removeEventListenersRegistered = true; + } + }, deferredCalls: [], deferCall: function(targetFunction, precedence, argsList) { + function arraysHaveEqualContent(arrA, arrB) { + if (arrA.length != arrB.length) + return false; + for (var i2 in arrA) { + if (arrA[i2] != arrB[i2]) + return false; + } + return true; + } + for (var i in JSEvents.deferredCalls) { + var call = JSEvents.deferredCalls[i]; + if (call.targetFunction == targetFunction && arraysHaveEqualContent(call.argsList, argsList)) { + return; + } + } + JSEvents.deferredCalls.push({ targetFunction, precedence, argsList }); + JSEvents.deferredCalls.sort(function(x, y) { + return x.precedence < y.precedence; + }); + }, removeDeferredCalls: function(targetFunction) { + for (var i = 0; i < JSEvents.deferredCalls.length; ++i) { + if (JSEvents.deferredCalls[i].targetFunction == targetFunction) { + JSEvents.deferredCalls.splice(i, 1); + --i; + } + } + }, canPerformEventHandlerRequests: function() { + return JSEvents.inEventHandler && JSEvents.currentEventHandler.allowsDeferredCalls; + }, runDeferredCalls: function() { + if (!JSEvents.canPerformEventHandlerRequests()) { + return; + } + for (var i = 0; i < JSEvents.deferredCalls.length; ++i) { + var call = JSEvents.deferredCalls[i]; + JSEvents.deferredCalls.splice(i, 1); + --i; + call.targetFunction.apply(null, call.argsList); + } + }, eventHandlers: [], removeAllHandlersOnTarget: function(target, eventTypeString) { + for (var i = 0; i < JSEvents.eventHandlers.length; ++i) { + if (JSEvents.eventHandlers[i].target == target && (!eventTypeString || eventTypeString == JSEvents.eventHandlers[i].eventTypeString)) { + JSEvents._removeHandler(i--); + } + } + }, _removeHandler: function(i) { + var h = JSEvents.eventHandlers[i]; + h.target.removeEventListener(h.eventTypeString, h.eventListenerFunc, h.useCapture); + JSEvents.eventHandlers.splice(i, 1); + }, registerOrRemoveHandler: function(eventHandler) { + var jsEventHandler = function jsEventHandler2(event) { + ++JSEvents.inEventHandler; + JSEvents.currentEventHandler = eventHandler; + JSEvents.runDeferredCalls(); + eventHandler.handlerFunc(event); + JSEvents.runDeferredCalls(); + --JSEvents.inEventHandler; + }; + if (eventHandler.callbackfunc) { + eventHandler.eventListenerFunc = jsEventHandler; + eventHandler.target.addEventListener(eventHandler.eventTypeString, jsEventHandler, eventHandler.useCapture); + JSEvents.eventHandlers.push(eventHandler); + JSEvents.registerRemoveEventListeners(); + } else { + for (var i = 0; i < JSEvents.eventHandlers.length; ++i) { + if (JSEvents.eventHandlers[i].target == eventHandler.target && JSEvents.eventHandlers[i].eventTypeString == eventHandler.eventTypeString) { + JSEvents._removeHandler(i--); + } + } + } + }, queueEventHandlerOnThread_iiii: function(targetThread, eventHandlerFunc, eventTypeId, eventData, userData) { + withStackSave(function() { + var varargs = stackAlloc(12); + GROWABLE_HEAP_I32()[varargs >> 2] = eventTypeId; + GROWABLE_HEAP_I32()[varargs + 4 >> 2] = eventData; + GROWABLE_HEAP_I32()[varargs + 8 >> 2] = userData; + _emscripten_dispatch_to_thread_(targetThread, 637534208, eventHandlerFunc, eventData, varargs); + }); + }, getTargetThreadForEventCallback: function(targetThread) { + switch (targetThread) { + case 1: + return 0; + case 2: + return PThread.currentProxiedOperationCallerThread; + default: + return targetThread; + } + }, getNodeNameForTarget: function(target) { + if (!target) + return ""; + if (target == window) + return "#window"; + if (target == screen) + return "#screen"; + return target && target.nodeName ? target.nodeName : ""; + }, fullscreenEnabled: function() { + return document.fullscreenEnabled || document.webkitFullscreenEnabled; + } }; + function stringToNewUTF8(jsString) { + var length = lengthBytesUTF8(jsString) + 1; + var cString = _malloc(length); + stringToUTF8(jsString, cString, length); + return cString; + } + function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread, targetCanvas, width, height) { + withStackSave(function() { + var varargs = stackAlloc(12); + var targetCanvasPtr = 0; + if (targetCanvas) { + targetCanvasPtr = stringToNewUTF8(targetCanvas); + } + GROWABLE_HEAP_I32()[varargs >> 2] = targetCanvasPtr; + GROWABLE_HEAP_I32()[varargs + 4 >> 2] = width; + GROWABLE_HEAP_I32()[varargs + 8 >> 2] = height; + _emscripten_dispatch_to_thread_(targetThread, 657457152, 0, targetCanvasPtr, varargs); + }); + } + function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread, targetCanvas, width, height) { + targetCanvas = targetCanvas ? UTF8ToString(targetCanvas) : ""; + _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread, targetCanvas, width, height); + } + function maybeCStringToJsString(cString) { + return cString > 2 ? UTF8ToString(cString) : cString; + } + var specialHTMLTargets = [0, typeof document !== "undefined" ? document : 0, typeof window !== "undefined" ? window : 0]; + function findEventTarget(target) { + target = maybeCStringToJsString(target); + var domElement = specialHTMLTargets[target] || (typeof document !== "undefined" ? document.querySelector(target) : void 0); + return domElement; + } + function findCanvasEventTarget(target) { + return findEventTarget(target); + } + function _emscripten_set_canvas_element_size_calling_thread(target, width, height) { + var canvas = findCanvasEventTarget(target); + if (!canvas) + return -4; + if (canvas.canvasSharedPtr) { + GROWABLE_HEAP_I32()[canvas.canvasSharedPtr >> 2] = width; + GROWABLE_HEAP_I32()[canvas.canvasSharedPtr + 4 >> 2] = height; + } + if (canvas.offscreenCanvas || !canvas.controlTransferredOffscreen) { + if (canvas.offscreenCanvas) + canvas = canvas.offscreenCanvas; + var autoResizeViewport = false; + if (canvas.GLctxObject && canvas.GLctxObject.GLctx) { + var prevViewport = canvas.GLctxObject.GLctx.getParameter(2978); + autoResizeViewport = prevViewport[0] === 0 && prevViewport[1] === 0 && prevViewport[2] === canvas.width && prevViewport[3] === canvas.height; + } + canvas.width = width; + canvas.height = height; + if (autoResizeViewport) { + canvas.GLctxObject.GLctx.viewport(0, 0, width, height); + } + } else if (canvas.canvasSharedPtr) { + var targetThread = GROWABLE_HEAP_I32()[canvas.canvasSharedPtr + 8 >> 2]; + _emscripten_set_offscreencanvas_size_on_target_thread(targetThread, target, width, height); + return 1; + } else { + return -4; + } + return 0; + } + function _emscripten_set_canvas_element_size_main_thread(target, width, height) { + if (ENVIRONMENT_IS_PTHREAD) + return _emscripten_proxy_to_main_thread_js(2, 1, target, width, height); + return _emscripten_set_canvas_element_size_calling_thread(target, width, height); + } + function _emscripten_set_canvas_element_size(target, width, height) { + var canvas = findCanvasEventTarget(target); + if (canvas) { + return _emscripten_set_canvas_element_size_calling_thread(target, width, height); + } else { + return _emscripten_set_canvas_element_size_main_thread(target, width, height); + } + } + function _emscripten_unwind_to_js_event_loop() { + throw "unwind"; + } + function __webgl_enable_ANGLE_instanced_arrays(ctx) { + var ext = ctx.getExtension("ANGLE_instanced_arrays"); + if (ext) { + ctx["vertexAttribDivisor"] = function(index, divisor) { + ext["vertexAttribDivisorANGLE"](index, divisor); + }; + ctx["drawArraysInstanced"] = function(mode, first, count2, primcount) { + ext["drawArraysInstancedANGLE"](mode, first, count2, primcount); + }; + ctx["drawElementsInstanced"] = function(mode, count2, type, indices, primcount) { + ext["drawElementsInstancedANGLE"](mode, count2, type, indices, primcount); + }; + return 1; + } + } + function __webgl_enable_OES_vertex_array_object(ctx) { + var ext = ctx.getExtension("OES_vertex_array_object"); + if (ext) { + ctx["createVertexArray"] = function() { + return ext["createVertexArrayOES"](); + }; + ctx["deleteVertexArray"] = function(vao) { + ext["deleteVertexArrayOES"](vao); + }; + ctx["bindVertexArray"] = function(vao) { + ext["bindVertexArrayOES"](vao); + }; + ctx["isVertexArray"] = function(vao) { + return ext["isVertexArrayOES"](vao); + }; + return 1; + } + } + function __webgl_enable_WEBGL_draw_buffers(ctx) { + var ext = ctx.getExtension("WEBGL_draw_buffers"); + if (ext) { + ctx["drawBuffers"] = function(n, bufs) { + ext["drawBuffersWEBGL"](n, bufs); + }; + return 1; + } + } + function __webgl_enable_WEBGL_multi_draw(ctx) { + return !!(ctx.multiDrawWebgl = ctx.getExtension("WEBGL_multi_draw")); + } + var GL = { counter: 1, buffers: [], programs: [], framebuffers: [], renderbuffers: [], textures: [], shaders: [], vaos: [], contexts: {}, offscreenCanvases: {}, queries: [], stringCache: {}, unpackAlignment: 4, recordError: function recordError(errorCode) { + if (!GL.lastError) { + GL.lastError = errorCode; + } + }, getNewId: function(table) { + var ret = GL.counter++; + for (var i = table.length; i < ret; i++) { + table[i] = null; + } + return ret; + }, getSource: function(shader, count2, string, length) { + var source = ""; + for (var i = 0; i < count2; ++i) { + var len = length ? GROWABLE_HEAP_I32()[length + i * 4 >> 2] : -1; + source += UTF8ToString(GROWABLE_HEAP_I32()[string + i * 4 >> 2], len < 0 ? void 0 : len); + } + return source; + }, createContext: function(canvas, webGLContextAttributes) { + if (!canvas.getContextSafariWebGL2Fixed) { + canvas.getContextSafariWebGL2Fixed = canvas.getContext; + canvas.getContext = function(ver, attrs) { + var gl = canvas.getContextSafariWebGL2Fixed(ver, attrs); + return ver == "webgl" == gl instanceof WebGLRenderingContext ? gl : null; + }; + } + var ctx = canvas.getContext("webgl", webGLContextAttributes); + if (!ctx) + return 0; + var handle = GL.registerContext(ctx, webGLContextAttributes); + return handle; + }, registerContext: function(ctx, webGLContextAttributes) { + var handle = _malloc(8); + GROWABLE_HEAP_I32()[handle + 4 >> 2] = _pthread_self(); + var context = { handle, attributes: webGLContextAttributes, version: webGLContextAttributes.majorVersion, GLctx: ctx }; + if (ctx.canvas) + ctx.canvas.GLctxObject = context; + GL.contexts[handle] = context; + if (typeof webGLContextAttributes.enableExtensionsByDefault === "undefined" || webGLContextAttributes.enableExtensionsByDefault) { + GL.initExtensions(context); + } + return handle; + }, makeContextCurrent: function(contextHandle) { + GL.currentContext = GL.contexts[contextHandle]; + Module.ctx = GLctx = GL.currentContext && GL.currentContext.GLctx; + return !(contextHandle && !GLctx); + }, getContext: function(contextHandle) { + return GL.contexts[contextHandle]; + }, deleteContext: function(contextHandle) { + if (GL.currentContext === GL.contexts[contextHandle]) + GL.currentContext = null; + if (typeof JSEvents === "object") + JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas); + if (GL.contexts[contextHandle] && GL.contexts[contextHandle].GLctx.canvas) + GL.contexts[contextHandle].GLctx.canvas.GLctxObject = void 0; + _free(GL.contexts[contextHandle].handle); + GL.contexts[contextHandle] = null; + }, initExtensions: function(context) { + if (!context) + context = GL.currentContext; + if (context.initExtensionsDone) + return; + context.initExtensionsDone = true; + var GLctx2 = context.GLctx; + __webgl_enable_ANGLE_instanced_arrays(GLctx2); + __webgl_enable_OES_vertex_array_object(GLctx2); + __webgl_enable_WEBGL_draw_buffers(GLctx2); + { + GLctx2.disjointTimerQueryExt = GLctx2.getExtension("EXT_disjoint_timer_query"); + } + __webgl_enable_WEBGL_multi_draw(GLctx2); + var exts = GLctx2.getSupportedExtensions() || []; + exts.forEach(function(ext) { + if (!ext.includes("lose_context") && !ext.includes("debug")) { + GLctx2.getExtension(ext); + } + }); + } }; + var __emscripten_webgl_power_preferences = ["default", "low-power", "high-performance"]; + function _emscripten_webgl_do_create_context(target, attributes) { + var a = attributes >> 2; + var powerPreference = GROWABLE_HEAP_I32()[a + (24 >> 2)]; + var contextAttributes = { "alpha": !!GROWABLE_HEAP_I32()[a + (0 >> 2)], "depth": !!GROWABLE_HEAP_I32()[a + (4 >> 2)], "stencil": !!GROWABLE_HEAP_I32()[a + (8 >> 2)], "antialias": !!GROWABLE_HEAP_I32()[a + (12 >> 2)], "premultipliedAlpha": !!GROWABLE_HEAP_I32()[a + (16 >> 2)], "preserveDrawingBuffer": !!GROWABLE_HEAP_I32()[a + (20 >> 2)], "powerPreference": __emscripten_webgl_power_preferences[powerPreference], "failIfMajorPerformanceCaveat": !!GROWABLE_HEAP_I32()[a + (28 >> 2)], majorVersion: GROWABLE_HEAP_I32()[a + (32 >> 2)], minorVersion: GROWABLE_HEAP_I32()[a + (36 >> 2)], enableExtensionsByDefault: GROWABLE_HEAP_I32()[a + (40 >> 2)], explicitSwapControl: GROWABLE_HEAP_I32()[a + (44 >> 2)], proxyContextToMainThread: GROWABLE_HEAP_I32()[a + (48 >> 2)], renderViaOffscreenBackBuffer: GROWABLE_HEAP_I32()[a + (52 >> 2)] }; + var canvas = findCanvasEventTarget(target); + if (!canvas) { + return 0; + } + if (contextAttributes.explicitSwapControl) { + return 0; + } + var contextHandle = GL.createContext(canvas, contextAttributes); + return contextHandle; + } + function _emscripten_webgl_create_context(a0, a12) { + return _emscripten_webgl_do_create_context(a0, a12); + } + var SYSCALLS = { mappings: {}, buffers: [null, [], []], printChar: function(stream, curr) { + var buffer3 = SYSCALLS.buffers[stream]; + if (curr === 0 || curr === 10) { + (stream === 1 ? out : err)(UTF8ArrayToString(buffer3, 0)); + buffer3.length = 0; + } else { + buffer3.push(curr); + } + }, varargs: void 0, get: function() { + SYSCALLS.varargs += 4; + var ret = GROWABLE_HEAP_I32()[SYSCALLS.varargs - 4 >> 2]; + return ret; + }, getStr: function(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, get64: function(low, high) { + return low; + } }; + function _fd_close(fd) { + if (ENVIRONMENT_IS_PTHREAD) + return _emscripten_proxy_to_main_thread_js(3, 1, fd); + return 0; + } + function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { + if (ENVIRONMENT_IS_PTHREAD) + return _emscripten_proxy_to_main_thread_js(4, 1, fd, offset_low, offset_high, whence, newOffset); + } + function _fd_write(fd, iov, iovcnt, pnum) { + if (ENVIRONMENT_IS_PTHREAD) + return _emscripten_proxy_to_main_thread_js(5, 1, fd, iov, iovcnt, pnum); + var num = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = GROWABLE_HEAP_I32()[iov >> 2]; + var len = GROWABLE_HEAP_I32()[iov + 4 >> 2]; + iov += 8; + for (var j = 0; j < len; j++) { + SYSCALLS.printChar(fd, GROWABLE_HEAP_U8()[ptr + j]); + } + num += len; + } + GROWABLE_HEAP_I32()[pnum >> 2] = num; + return 0; + } + function _setTempRet0(val) { + setTempRet0(val); + } + PThread.init(); + var GLctx; + var proxiedFunctionTable = [null, exitOnMainThread, _emscripten_set_canvas_element_size_main_thread, _fd_close, _fd_seek, _fd_write]; + var ASSERTIONS = false; + var asmLibraryArg = { "__clock_gettime": ___clock_gettime, "__emscripten_init_main_thread_js": ___emscripten_init_main_thread_js, "__emscripten_thread_cleanup": ___emscripten_thread_cleanup, "__pthread_create_js": ___pthread_create_js, "_emscripten_default_pthread_stack_size": __emscripten_default_pthread_stack_size, "_emscripten_notify_thread_queue": __emscripten_notify_thread_queue, "abort": _abort, "emscripten_check_blocking_allowed": _emscripten_check_blocking_allowed, "emscripten_get_heap_max": _emscripten_get_heap_max, "emscripten_get_now": _emscripten_get_now, "emscripten_memcpy_big": _emscripten_memcpy_big, "emscripten_num_logical_cores": _emscripten_num_logical_cores, "emscripten_receive_on_main_thread_js": _emscripten_receive_on_main_thread_js, "emscripten_resize_heap": _emscripten_resize_heap, "emscripten_set_canvas_element_size": _emscripten_set_canvas_element_size, "emscripten_unwind_to_js_event_loop": _emscripten_unwind_to_js_event_loop, "emscripten_webgl_create_context": _emscripten_webgl_create_context, "exit": _exit, "fd_close": _fd_close, "fd_seek": _fd_seek, "fd_write": _fd_write, "memory": wasmMemory || Module["wasmMemory"], "setTempRet0": _setTempRet0 }; + var asm = createWasm(); + var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function() { + return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["__wasm_call_ctors"]).apply(null, arguments); + }; + var _init = Module["_init"] = function() { + return (_init = Module["_init"] = Module["asm"]["init"]).apply(null, arguments); + }; + var _init_with_threads_count = Module["_init_with_threads_count"] = function() { + return (_init_with_threads_count = Module["_init_with_threads_count"] = Module["asm"]["init_with_threads_count"]).apply(null, arguments); + }; + var _get_threads_count = Module["_get_threads_count"] = function() { + return (_get_threads_count = Module["_get_threads_count"] = Module["asm"]["get_threads_count"]).apply(null, arguments); + }; + var _register_tensor = Module["_register_tensor"] = function() { + return (_register_tensor = Module["_register_tensor"] = Module["asm"]["register_tensor"]).apply(null, arguments); + }; + var _dispose_data = Module["_dispose_data"] = function() { + return (_dispose_data = Module["_dispose_data"] = Module["asm"]["dispose_data"]).apply(null, arguments); + }; + var _dispose = Module["_dispose"] = function() { + return (_dispose = Module["_dispose"] = Module["asm"]["dispose"]).apply(null, arguments); + }; + var _Abs = Module["_Abs"] = function() { + return (_Abs = Module["_Abs"] = Module["asm"]["Abs"]).apply(null, arguments); + }; + var _Add = Module["_Add"] = function() { + return (_Add = Module["_Add"] = Module["asm"]["Add"]).apply(null, arguments); + }; + var _AddN = Module["_AddN"] = function() { + return (_AddN = Module["_AddN"] = Module["asm"]["AddN"]).apply(null, arguments); + }; + var _All = Module["_All"] = function() { + return (_All = Module["_All"] = Module["asm"]["All"]).apply(null, arguments); + }; + var _Any = Module["_Any"] = function() { + return (_Any = Module["_Any"] = Module["asm"]["Any"]).apply(null, arguments); + }; + var _ArgMax = Module["_ArgMax"] = function() { + return (_ArgMax = Module["_ArgMax"] = Module["asm"]["ArgMax"]).apply(null, arguments); + }; + var _AvgPool = Module["_AvgPool"] = function() { + return (_AvgPool = Module["_AvgPool"] = Module["asm"]["AvgPool"]).apply(null, arguments); + }; + var _BatchMatMul = Module["_BatchMatMul"] = function() { + return (_BatchMatMul = Module["_BatchMatMul"] = Module["asm"]["BatchMatMul"]).apply(null, arguments); + }; + var _Ceil = Module["_Ceil"] = function() { + return (_Ceil = Module["_Ceil"] = Module["asm"]["Ceil"]).apply(null, arguments); + }; + var _ClipByValue = Module["_ClipByValue"] = function() { + return (_ClipByValue = Module["_ClipByValue"] = Module["asm"]["ClipByValue"]).apply(null, arguments); + }; + var _Conv2D = Module["_Conv2D"] = function() { + return (_Conv2D = Module["_Conv2D"] = Module["asm"]["Conv2D"]).apply(null, arguments); + }; + var _Conv2DBackpropInput = Module["_Conv2DBackpropInput"] = function() { + return (_Conv2DBackpropInput = Module["_Conv2DBackpropInput"] = Module["asm"]["Conv2DBackpropInput"]).apply(null, arguments); + }; + var _Cos = Module["_Cos"] = function() { + return (_Cos = Module["_Cos"] = Module["asm"]["Cos"]).apply(null, arguments); + }; + var _Cosh = Module["_Cosh"] = function() { + return (_Cosh = Module["_Cosh"] = Module["asm"]["Cosh"]).apply(null, arguments); + }; + var _CropAndResize = Module["_CropAndResize"] = function() { + return (_CropAndResize = Module["_CropAndResize"] = Module["asm"]["CropAndResize"]).apply(null, arguments); + }; + var _Cumprod = Module["_Cumprod"] = function() { + return (_Cumprod = Module["_Cumprod"] = Module["asm"]["Cumprod"]).apply(null, arguments); + }; + var _Cumsum = Module["_Cumsum"] = function() { + return (_Cumsum = Module["_Cumsum"] = Module["asm"]["Cumsum"]).apply(null, arguments); + }; + var _DepthToSpace = Module["_DepthToSpace"] = function() { + return (_DepthToSpace = Module["_DepthToSpace"] = Module["asm"]["DepthToSpace"]).apply(null, arguments); + }; + var _DepthwiseConv2dNative = Module["_DepthwiseConv2dNative"] = function() { + return (_DepthwiseConv2dNative = Module["_DepthwiseConv2dNative"] = Module["asm"]["DepthwiseConv2dNative"]).apply(null, arguments); + }; + var _Elu = Module["_Elu"] = function() { + return (_Elu = Module["_Elu"] = Module["asm"]["Elu"]).apply(null, arguments); + }; + var _Equal = Module["_Equal"] = function() { + return (_Equal = Module["_Equal"] = Module["asm"]["Equal"]).apply(null, arguments); + }; + var _Exp = Module["_Exp"] = function() { + return (_Exp = Module["_Exp"] = Module["asm"]["Exp"]).apply(null, arguments); + }; + var _FlipLeftRight = Module["_FlipLeftRight"] = function() { + return (_FlipLeftRight = Module["_FlipLeftRight"] = Module["asm"]["FlipLeftRight"]).apply(null, arguments); + }; + var _Floor = Module["_Floor"] = function() { + return (_Floor = Module["_Floor"] = Module["asm"]["Floor"]).apply(null, arguments); + }; + var _FloorDiv = Module["_FloorDiv"] = function() { + return (_FloorDiv = Module["_FloorDiv"] = Module["asm"]["FloorDiv"]).apply(null, arguments); + }; + var _FusedBatchNorm = Module["_FusedBatchNorm"] = function() { + return (_FusedBatchNorm = Module["_FusedBatchNorm"] = Module["asm"]["FusedBatchNorm"]).apply(null, arguments); + }; + var _FusedConv2D = Module["_FusedConv2D"] = function() { + return (_FusedConv2D = Module["_FusedConv2D"] = Module["asm"]["FusedConv2D"]).apply(null, arguments); + }; + var _FusedDepthwiseConv2D = Module["_FusedDepthwiseConv2D"] = function() { + return (_FusedDepthwiseConv2D = Module["_FusedDepthwiseConv2D"] = Module["asm"]["FusedDepthwiseConv2D"]).apply(null, arguments); + }; + var _Gather = Module["_Gather"] = function() { + return (_Gather = Module["_Gather"] = Module["asm"]["Gather"]).apply(null, arguments); + }; + var _GatherNd = Module["_GatherNd"] = function() { + return (_GatherNd = Module["_GatherNd"] = Module["asm"]["GatherNd"]).apply(null, arguments); + }; + var _Greater = Module["_Greater"] = function() { + return (_Greater = Module["_Greater"] = Module["asm"]["Greater"]).apply(null, arguments); + }; + var _GreaterEqual = Module["_GreaterEqual"] = function() { + return (_GreaterEqual = Module["_GreaterEqual"] = Module["asm"]["GreaterEqual"]).apply(null, arguments); + }; + var _LeakyRelu = Module["_LeakyRelu"] = function() { + return (_LeakyRelu = Module["_LeakyRelu"] = Module["asm"]["LeakyRelu"]).apply(null, arguments); + }; + var _Less = Module["_Less"] = function() { + return (_Less = Module["_Less"] = Module["asm"]["Less"]).apply(null, arguments); + }; + var _LessEqual = Module["_LessEqual"] = function() { + return (_LessEqual = Module["_LessEqual"] = Module["asm"]["LessEqual"]).apply(null, arguments); + }; + var _Log = Module["_Log"] = function() { + return (_Log = Module["_Log"] = Module["asm"]["Log"]).apply(null, arguments); + }; + var _LogicalAnd = Module["_LogicalAnd"] = function() { + return (_LogicalAnd = Module["_LogicalAnd"] = Module["asm"]["LogicalAnd"]).apply(null, arguments); + }; + var _LogicalNot = Module["_LogicalNot"] = function() { + return (_LogicalNot = Module["_LogicalNot"] = Module["asm"]["LogicalNot"]).apply(null, arguments); + }; + var _LogicalOr = Module["_LogicalOr"] = function() { + return (_LogicalOr = Module["_LogicalOr"] = Module["asm"]["LogicalOr"]).apply(null, arguments); + }; + var _LogicalXor = Module["_LogicalXor"] = function() { + return (_LogicalXor = Module["_LogicalXor"] = Module["asm"]["LogicalXor"]).apply(null, arguments); + }; + var _Max = Module["_Max"] = function() { + return (_Max = Module["_Max"] = Module["asm"]["Max"]).apply(null, arguments); + }; + var _MaxPool = Module["_MaxPool"] = function() { + return (_MaxPool = Module["_MaxPool"] = Module["asm"]["MaxPool"]).apply(null, arguments); + }; + var _Maximum = Module["_Maximum"] = function() { + return (_Maximum = Module["_Maximum"] = Module["asm"]["Maximum"]).apply(null, arguments); + }; + var _Mean = Module["_Mean"] = function() { + return (_Mean = Module["_Mean"] = Module["asm"]["Mean"]).apply(null, arguments); + }; + var _Min = Module["_Min"] = function() { + return (_Min = Module["_Min"] = Module["asm"]["Min"]).apply(null, arguments); + }; + var _Minimum = Module["_Minimum"] = function() { + return (_Minimum = Module["_Minimum"] = Module["asm"]["Minimum"]).apply(null, arguments); + }; + var _MirrorPad = Module["_MirrorPad"] = function() { + return (_MirrorPad = Module["_MirrorPad"] = Module["asm"]["MirrorPad"]).apply(null, arguments); + }; + var _Multiply = Module["_Multiply"] = function() { + return (_Multiply = Module["_Multiply"] = Module["asm"]["Multiply"]).apply(null, arguments); + }; + var _Neg = Module["_Neg"] = function() { + return (_Neg = Module["_Neg"] = Module["asm"]["Neg"]).apply(null, arguments); + }; + var _NonMaxSuppressionV3 = Module["_NonMaxSuppressionV3"] = function() { + return (_NonMaxSuppressionV3 = Module["_NonMaxSuppressionV3"] = Module["asm"]["NonMaxSuppressionV3"]).apply(null, arguments); + }; + var _NonMaxSuppressionV4 = Module["_NonMaxSuppressionV4"] = function() { + return (_NonMaxSuppressionV4 = Module["_NonMaxSuppressionV4"] = Module["asm"]["NonMaxSuppressionV4"]).apply(null, arguments); + }; + var _NonMaxSuppressionV5 = Module["_NonMaxSuppressionV5"] = function() { + return (_NonMaxSuppressionV5 = Module["_NonMaxSuppressionV5"] = Module["asm"]["NonMaxSuppressionV5"]).apply(null, arguments); + }; + var _NotEqual = Module["_NotEqual"] = function() { + return (_NotEqual = Module["_NotEqual"] = Module["asm"]["NotEqual"]).apply(null, arguments); + }; + var _OneHot = Module["_OneHot"] = function() { + return (_OneHot = Module["_OneHot"] = Module["asm"]["OneHot"]).apply(null, arguments); + }; + var _PadV2 = Module["_PadV2"] = function() { + return (_PadV2 = Module["_PadV2"] = Module["asm"]["PadV2"]).apply(null, arguments); + }; + var _Pow = Module["_Pow"] = function() { + return (_Pow = Module["_Pow"] = Module["asm"]["Pow"]).apply(null, arguments); + }; + var _Prelu = Module["_Prelu"] = function() { + return (_Prelu = Module["_Prelu"] = Module["asm"]["Prelu"]).apply(null, arguments); + }; + var _Prod = Module["_Prod"] = function() { + return (_Prod = Module["_Prod"] = Module["asm"]["Prod"]).apply(null, arguments); + }; + var _RealDiv = Module["_RealDiv"] = function() { + return (_RealDiv = Module["_RealDiv"] = Module["asm"]["RealDiv"]).apply(null, arguments); + }; + var _Relu = Module["_Relu"] = function() { + return (_Relu = Module["_Relu"] = Module["asm"]["Relu"]).apply(null, arguments); + }; + var _Relu6 = Module["_Relu6"] = function() { + return (_Relu6 = Module["_Relu6"] = Module["asm"]["Relu6"]).apply(null, arguments); + }; + var _ResizeBilinear = Module["_ResizeBilinear"] = function() { + return (_ResizeBilinear = Module["_ResizeBilinear"] = Module["asm"]["ResizeBilinear"]).apply(null, arguments); + }; + var _ResizeNearestNeighbor = Module["_ResizeNearestNeighbor"] = function() { + return (_ResizeNearestNeighbor = Module["_ResizeNearestNeighbor"] = Module["asm"]["ResizeNearestNeighbor"]).apply(null, arguments); + }; + var _Reverse = Module["_Reverse"] = function() { + return (_Reverse = Module["_Reverse"] = Module["asm"]["Reverse"]).apply(null, arguments); + }; + var _RotateWithOffset = Module["_RotateWithOffset"] = function() { + return (_RotateWithOffset = Module["_RotateWithOffset"] = Module["asm"]["RotateWithOffset"]).apply(null, arguments); + }; + var _Round = Module["_Round"] = function() { + return (_Round = Module["_Round"] = Module["asm"]["Round"]).apply(null, arguments); + }; + var _Rsqrt = Module["_Rsqrt"] = function() { + return (_Rsqrt = Module["_Rsqrt"] = Module["asm"]["Rsqrt"]).apply(null, arguments); + }; + var _ScatterNd = Module["_ScatterNd"] = function() { + return (_ScatterNd = Module["_ScatterNd"] = Module["asm"]["ScatterNd"]).apply(null, arguments); + }; + var _SelectV2 = Module["_SelectV2"] = function() { + return (_SelectV2 = Module["_SelectV2"] = Module["asm"]["SelectV2"]).apply(null, arguments); + }; + var _Sigmoid = Module["_Sigmoid"] = function() { + return (_Sigmoid = Module["_Sigmoid"] = Module["asm"]["Sigmoid"]).apply(null, arguments); + }; + var _Sin = Module["_Sin"] = function() { + return (_Sin = Module["_Sin"] = Module["asm"]["Sin"]).apply(null, arguments); + }; + var _Softmax = Module["_Softmax"] = function() { + return (_Softmax = Module["_Softmax"] = Module["asm"]["Softmax"]).apply(null, arguments); + }; + var _SparseFillEmptyRows = Module["_SparseFillEmptyRows"] = function() { + return (_SparseFillEmptyRows = Module["_SparseFillEmptyRows"] = Module["asm"]["SparseFillEmptyRows"]).apply(null, arguments); + }; + var _SparseReshape = Module["_SparseReshape"] = function() { + return (_SparseReshape = Module["_SparseReshape"] = Module["asm"]["SparseReshape"]).apply(null, arguments); + }; + var _SparseSegmentReduction = Module["_SparseSegmentReduction"] = function() { + return (_SparseSegmentReduction = Module["_SparseSegmentReduction"] = Module["asm"]["SparseSegmentReduction"]).apply(null, arguments); + }; + var _Sqrt = Module["_Sqrt"] = function() { + return (_Sqrt = Module["_Sqrt"] = Module["asm"]["Sqrt"]).apply(null, arguments); + }; + var _Square = Module["_Square"] = function() { + return (_Square = Module["_Square"] = Module["asm"]["Square"]).apply(null, arguments); + }; + var _SquaredDifference = Module["_SquaredDifference"] = function() { + return (_SquaredDifference = Module["_SquaredDifference"] = Module["asm"]["SquaredDifference"]).apply(null, arguments); + }; + var _Step = Module["_Step"] = function() { + return (_Step = Module["_Step"] = Module["asm"]["Step"]).apply(null, arguments); + }; + var _StridedSlice = Module["_StridedSlice"] = function() { + return (_StridedSlice = Module["_StridedSlice"] = Module["asm"]["StridedSlice"]).apply(null, arguments); + }; + var _Sub = Module["_Sub"] = function() { + return (_Sub = Module["_Sub"] = Module["asm"]["Sub"]).apply(null, arguments); + }; + var _Sum = Module["_Sum"] = function() { + return (_Sum = Module["_Sum"] = Module["asm"]["Sum"]).apply(null, arguments); + }; + var _Tan = Module["_Tan"] = function() { + return (_Tan = Module["_Tan"] = Module["asm"]["Tan"]).apply(null, arguments); + }; + var _Tanh = Module["_Tanh"] = function() { + return (_Tanh = Module["_Tanh"] = Module["asm"]["Tanh"]).apply(null, arguments); + }; + var _Tile = Module["_Tile"] = function() { + return (_Tile = Module["_Tile"] = Module["asm"]["Tile"]).apply(null, arguments); + }; + var _TopK = Module["_TopK"] = function() { + return (_TopK = Module["_TopK"] = Module["asm"]["TopK"]).apply(null, arguments); + }; + var _Transform = Module["_Transform"] = function() { + return (_Transform = Module["_Transform"] = Module["asm"]["Transform"]).apply(null, arguments); + }; + var _Transpose = Module["_Transpose"] = function() { + return (_Transpose = Module["_Transpose"] = Module["asm"]["Transpose"]).apply(null, arguments); + }; + var __FusedMatMul = Module["__FusedMatMul"] = function() { + return (__FusedMatMul = Module["__FusedMatMul"] = Module["asm"]["_FusedMatMul"]).apply(null, arguments); + }; + var _malloc = Module["_malloc"] = function() { + return (_malloc = Module["_malloc"] = Module["asm"]["malloc"]).apply(null, arguments); + }; + var _free = Module["_free"] = function() { + return (_free = Module["_free"] = Module["asm"]["free"]).apply(null, arguments); + }; + var _emscripten_tls_init = Module["_emscripten_tls_init"] = function() { + return (_emscripten_tls_init = Module["_emscripten_tls_init"] = Module["asm"]["emscripten_tls_init"]).apply(null, arguments); + }; + var ___errno_location = Module["___errno_location"] = function() { + return (___errno_location = Module["___errno_location"] = Module["asm"]["__errno_location"]).apply(null, arguments); + }; + var _pthread_self = Module["_pthread_self"] = function() { + return (_pthread_self = Module["_pthread_self"] = Module["asm"]["pthread_self"]).apply(null, arguments); + }; + var _emscripten_main_thread_process_queued_calls = Module["_emscripten_main_thread_process_queued_calls"] = function() { + return (_emscripten_main_thread_process_queued_calls = Module["_emscripten_main_thread_process_queued_calls"] = Module["asm"]["emscripten_main_thread_process_queued_calls"]).apply(null, arguments); + }; + var __emscripten_thread_crashed = Module["__emscripten_thread_crashed"] = function() { + return (__emscripten_thread_crashed = Module["__emscripten_thread_crashed"] = Module["asm"]["_emscripten_thread_crashed"]).apply(null, arguments); + }; + var __emscripten_thread_init = Module["__emscripten_thread_init"] = function() { + return (__emscripten_thread_init = Module["__emscripten_thread_init"] = Module["asm"]["_emscripten_thread_init"]).apply(null, arguments); + }; + var _emscripten_current_thread_process_queued_calls = Module["_emscripten_current_thread_process_queued_calls"] = function() { + return (_emscripten_current_thread_process_queued_calls = Module["_emscripten_current_thread_process_queued_calls"] = Module["asm"]["emscripten_current_thread_process_queued_calls"]).apply(null, arguments); + }; + var _emscripten_main_browser_thread_id = Module["_emscripten_main_browser_thread_id"] = function() { + return (_emscripten_main_browser_thread_id = Module["_emscripten_main_browser_thread_id"] = Module["asm"]["emscripten_main_browser_thread_id"]).apply(null, arguments); + }; + var _emscripten_sync_run_in_main_thread_2 = Module["_emscripten_sync_run_in_main_thread_2"] = function() { + return (_emscripten_sync_run_in_main_thread_2 = Module["_emscripten_sync_run_in_main_thread_2"] = Module["asm"]["emscripten_sync_run_in_main_thread_2"]).apply(null, arguments); + }; + var _emscripten_sync_run_in_main_thread_4 = Module["_emscripten_sync_run_in_main_thread_4"] = function() { + return (_emscripten_sync_run_in_main_thread_4 = Module["_emscripten_sync_run_in_main_thread_4"] = Module["asm"]["emscripten_sync_run_in_main_thread_4"]).apply(null, arguments); + }; + var _emscripten_run_in_main_runtime_thread_js = Module["_emscripten_run_in_main_runtime_thread_js"] = function() { + return (_emscripten_run_in_main_runtime_thread_js = Module["_emscripten_run_in_main_runtime_thread_js"] = Module["asm"]["emscripten_run_in_main_runtime_thread_js"]).apply(null, arguments); + }; + var _emscripten_dispatch_to_thread_ = Module["_emscripten_dispatch_to_thread_"] = function() { + return (_emscripten_dispatch_to_thread_ = Module["_emscripten_dispatch_to_thread_"] = Module["asm"]["emscripten_dispatch_to_thread_"]).apply(null, arguments); + }; + var __emscripten_thread_free_data = Module["__emscripten_thread_free_data"] = function() { + return (__emscripten_thread_free_data = Module["__emscripten_thread_free_data"] = Module["asm"]["_emscripten_thread_free_data"]).apply(null, arguments); + }; + var __emscripten_thread_exit = Module["__emscripten_thread_exit"] = function() { + return (__emscripten_thread_exit = Module["__emscripten_thread_exit"] = Module["asm"]["_emscripten_thread_exit"]).apply(null, arguments); + }; + var _memalign = Module["_memalign"] = function() { + return (_memalign = Module["_memalign"] = Module["asm"]["memalign"]).apply(null, arguments); + }; + var _emscripten_stack_set_limits = Module["_emscripten_stack_set_limits"] = function() { + return (_emscripten_stack_set_limits = Module["_emscripten_stack_set_limits"] = Module["asm"]["emscripten_stack_set_limits"]).apply(null, arguments); + }; + var stackSave = Module["stackSave"] = function() { + return (stackSave = Module["stackSave"] = Module["asm"]["stackSave"]).apply(null, arguments); + }; + var stackRestore = Module["stackRestore"] = function() { + return (stackRestore = Module["stackRestore"] = Module["asm"]["stackRestore"]).apply(null, arguments); + }; + var stackAlloc = Module["stackAlloc"] = function() { + return (stackAlloc = Module["stackAlloc"] = Module["asm"]["stackAlloc"]).apply(null, arguments); + }; + var dynCall_iijjiiii = Module["dynCall_iijjiiii"] = function() { + return (dynCall_iijjiiii = Module["dynCall_iijjiiii"] = Module["asm"]["dynCall_iijjiiii"]).apply(null, arguments); + }; + var dynCall_jiji = Module["dynCall_jiji"] = function() { + return (dynCall_jiji = Module["dynCall_jiji"] = Module["asm"]["dynCall_jiji"]).apply(null, arguments); + }; + var __emscripten_allow_main_runtime_queued_calls = Module["__emscripten_allow_main_runtime_queued_calls"] = 21672; + Module["cwrap"] = cwrap; + Module["keepRuntimeAlive"] = keepRuntimeAlive; + Module["PThread"] = PThread; + Module["PThread"] = PThread; + Module["wasmMemory"] = wasmMemory; + Module["ExitStatus"] = ExitStatus; + var calledRun; + function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status; + } + dependenciesFulfilled = function runCaller() { + if (!calledRun) + run(); + if (!calledRun) + dependenciesFulfilled = runCaller; + }; + function run(args) { + args = args || arguments_; + if (runDependencies > 0) { + return; + } + if (ENVIRONMENT_IS_PTHREAD) { + readyPromiseResolve(Module); + initRuntime(); + postMessage({ "cmd": "loaded" }); + return; + } + preRun(); + if (runDependencies > 0) { + return; + } + function doRun() { + if (calledRun) + return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) + return; + initRuntime(); + readyPromiseResolve(Module); + if (Module["onRuntimeInitialized"]) + Module["onRuntimeInitialized"](); + postRun(); + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function() { + setTimeout(function() { + Module["setStatus"](""); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + } + Module["run"] = run; + function exit(status, implicit) { + EXITSTATUS = status; + if (!implicit) { + if (ENVIRONMENT_IS_PTHREAD) { + exitOnMainThread(status); + throw "unwind"; + } else { + } + } + if (keepRuntimeAlive()) { + } else { + exitRuntime(); + } + procExit(status); + } + function procExit(code) { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + PThread.terminateAllThreads(); + if (Module["onExit"]) + Module["onExit"](code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + } + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") + Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()(); + } + } + run(); + var listenersAdded; + if (beforeListeners) { + listenersAdded = { uncaughtException: process.listeners("uncaughtException").filter(function(listener) { + return !beforeListeners.uncaughtException.indexOf(listener) > -1; + }), unhandledRejection: process.listeners("unhandledRejection").filter(function(listener) { + return !beforeListeners.unhandledRejection.indexOf(listener) > -1; + }) }; + } + var actualModule; + if (typeof WasmBackendModule !== "undefined") { + actualModule = WasmBackendModule; + } else if (typeof WasmBackendModuleThreadedSimd3 !== "undefined") { + actualModule = WasmBackendModuleThreadedSimd3; + } else { + throw new Error("Could not find wasm module in post.js"); + } + if (listenersAdded) { + var tmpDispose = actualModule["_dispose"]; + actualModule["_dispose"] = function() { + tmpDispose(); + listenersAdded.uncaughtException.forEach(function(listener) { + process.removeListener("uncaughtException", listener); + }); + listenersAdded.unhandledRejection.forEach(function(listener) { + process.removeListener("unhandledRejection", listener); + }); + }; + } + return WasmBackendModuleThreadedSimd3.ready; + }; + })(); + if (typeof exports === "object" && typeof module === "object") + module.exports = WasmBackendModuleThreadedSimd2; + else if (typeof define === "function" && define["amd"]) + define([], function() { + return WasmBackendModuleThreadedSimd2; + }); + else if (typeof exports === "object") + exports["WasmBackendModuleThreadedSimd"] = WasmBackendModuleThreadedSimd2; + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js + var require_tfjs_backend_wasm_threaded_simd_worker = __commonJS({ + "node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js"(exports, module) { + init_define_BUILD_VERSION(); + module.exports.wasmWorkerContents = `"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" +");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=((info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports});self.onmessage=(e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["__emscripten_thread_exit"](result)}}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else if(e.data.cmd==="processProxyingQueue"){if(Module["_pthread_self"]()){Module["_emscripten_proxy_execute_queue"](e.data.queue)}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}});`; + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js + var require_tfjs_backend_wasm = __commonJS({ + "node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js"(exports, module) { + init_define_BUILD_VERSION(); + var WasmBackendModule2 = (() => { + var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0; + if (typeof __filename !== "undefined") + _scriptDir = _scriptDir || __filename; + return function(WasmBackendModule3) { + WasmBackendModule3 = WasmBackendModule3 || {}; + var Module = typeof WasmBackendModule3 !== "undefined" ? WasmBackendModule3 : {}; + var readyPromiseResolve, readyPromiseReject; + Module["ready"] = new Promise(function(resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject; + }); + var beforeListeners; + if (typeof process !== "undefined" && process.listeners) { + beforeListeners = { uncaughtException: process.listeners("uncaughtException"), unhandledRejection: process.listeners("unhandledRejection") }; + } + var moduleOverrides = Object.assign({}, Module); + var arguments_ = []; + var thisProgram = "./this.program"; + var quit_ = (status, toThrow) => { + throw toThrow; + }; + var ENVIRONMENT_IS_WEB = typeof window === "object"; + var ENVIRONMENT_IS_WORKER = typeof importScripts === "function"; + var ENVIRONMENT_IS_NODE = typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string"; + var scriptDirectory = ""; + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + return scriptDirectory + path; + } + var read_, readAsync, readBinary, setWindowTitle; + function logExceptionOnExit(e) { + if (e instanceof ExitStatus) + return; + let toLog = e; + err("exiting due to exception: " + toLog); + } + var fs; + var nodePath; + var requireNodeFS; + if (ENVIRONMENT_IS_NODE) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = require_path().dirname(scriptDirectory) + "/"; + } else { + scriptDirectory = __dirname + "/"; + } + requireNodeFS = () => { + if (!nodePath) { + fs = require_fs(); + nodePath = require_path(); + } + }; + read_ = function shell_read(filename, binary) { + requireNodeFS(); + filename = nodePath["normalize"](filename); + return fs.readFileSync(filename, binary ? void 0 : "utf8"); + }; + readBinary = (filename) => { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + return ret; + }; + readAsync = (filename, onload, onerror) => { + requireNodeFS(); + filename = nodePath["normalize"](filename); + fs.readFile(filename, function(err2, data) { + if (err2) + onerror(err2); + else + onload(data.buffer); + }); + }; + if (process["argv"].length > 1) { + thisProgram = process["argv"][1].replace(/\\/g, "/"); + } + arguments_ = process["argv"].slice(2); + process["on"]("uncaughtException", function(ex) { + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); + process["on"]("unhandledRejection", function(reason) { + throw reason; + }); + quit_ = (status, toThrow) => { + if (keepRuntimeAlive()) { + process["exitCode"] = status; + throw toThrow; + } + logExceptionOnExit(toThrow); + process["exit"](status); + }; + Module["inspect"] = function() { + return "[Emscripten Module object]"; + }; + } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = self.location.href; + } else if (typeof document !== "undefined" && document.currentScript) { + scriptDirectory = document.currentScript.src; + } + if (_scriptDir) { + scriptDirectory = _scriptDir; + } + if (scriptDirectory.indexOf("blob:") !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1); + } else { + scriptDirectory = ""; + } + { + read_ = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.send(null); + return xhr.responseText; + }; + if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.responseType = "arraybuffer"; + xhr.send(null); + return new Uint8Array(xhr.response); + }; + } + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = () => { + if (xhr.status == 200 || xhr.status == 0 && xhr.response) { + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + }; + } + setWindowTitle = (title) => document.title = title; + } else { + } + var out = Module["print"] || console.log.bind(console); + var err = Module["printErr"] || console.warn.bind(console); + Object.assign(Module, moduleOverrides); + moduleOverrides = null; + if (Module["arguments"]) + arguments_ = Module["arguments"]; + if (Module["thisProgram"]) + thisProgram = Module["thisProgram"]; + if (Module["quit"]) + quit_ = Module["quit"]; + var POINTER_SIZE = 4; + function warnOnce(text) { + if (!warnOnce.shown) + warnOnce.shown = {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + err(text); + } + } + function convertJsFunctionToWasm(func2, sig) { + if (typeof WebAssembly.Function === "function") { + var typeNames = { "i": "i32", "j": "i64", "f": "f32", "d": "f64" }; + var type = { parameters: [], results: sig[0] == "v" ? [] : [typeNames[sig[0]]] }; + for (var i = 1; i < sig.length; ++i) { + type.parameters.push(typeNames[sig[i]]); + } + return new WebAssembly.Function(type, func2); + } + var typeSection = [1, 0, 1, 96]; + var sigRet = sig.slice(0, 1); + var sigParam = sig.slice(1); + var typeCodes = { "i": 127, "j": 126, "f": 125, "d": 124 }; + typeSection.push(sigParam.length); + for (var i = 0; i < sigParam.length; ++i) { + typeSection.push(typeCodes[sigParam[i]]); + } + if (sigRet == "v") { + typeSection.push(0); + } else { + typeSection = typeSection.concat([1, typeCodes[sigRet]]); + } + typeSection[1] = typeSection.length - 2; + var bytes = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0].concat(typeSection, [2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0])); + var module2 = new WebAssembly.Module(bytes); + var instance = new WebAssembly.Instance(module2, { "e": { "f": func2 } }); + var wrappedFunc = instance.exports["f"]; + return wrappedFunc; + } + var freeTableIndexes = []; + var functionsInTableMap; + function getEmptyTableSlot() { + if (freeTableIndexes.length) { + return freeTableIndexes.pop(); + } + try { + wasmTable.grow(1); + } catch (err2) { + if (!(err2 instanceof RangeError)) { + throw err2; + } + throw "Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."; + } + return wasmTable.length - 1; + } + function updateTableMap(offset, count2) { + for (var i = offset; i < offset + count2; i++) { + var item = getWasmTableEntry(i); + if (item) { + functionsInTableMap.set(item, i); + } + } + } + var tempRet0 = 0; + var setTempRet0 = (value) => { + tempRet0 = value; + }; + var wasmBinary; + if (Module["wasmBinary"]) + wasmBinary = Module["wasmBinary"]; + var noExitRuntime = Module["noExitRuntime"] || true; + if (typeof WebAssembly !== "object") { + abort("no native wasm support detected"); + } + var wasmMemory; + var ABORT = false; + var EXITSTATUS; + function assert3(condition, text) { + if (!condition) { + abort(text); + } + } + function getCFunc(ident) { + var func2 = Module["_" + ident]; + return func2; + } + function ccall(ident, returnType, argTypes, args, opts) { + var toC = { "string": function(str) { + var ret2 = 0; + if (str !== null && str !== void 0 && str !== 0) { + var len = (str.length << 2) + 1; + ret2 = stackAlloc(len); + stringToUTF8(str, ret2, len); + } + return ret2; + }, "array": function(arr) { + var ret2 = stackAlloc(arr.length); + writeArrayToMemory(arr, ret2); + return ret2; + } }; + function convertReturnValue(ret2) { + if (returnType === "string") + return UTF8ToString(ret2); + if (returnType === "boolean") + return Boolean(ret2); + return ret2; + } + var func2 = getCFunc(ident); + var cArgs = []; + var stack2 = 0; + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack2 === 0) + stack2 = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func2.apply(null, cArgs); + function onDone(ret2) { + if (stack2 !== 0) + stackRestore(stack2); + return convertReturnValue(ret2); + } + ret = onDone(ret); + return ret; + } + function cwrap(ident, returnType, argTypes, opts) { + argTypes = argTypes || []; + var numericArgs = argTypes.every(function(type) { + return type === "number"; + }); + var numericRet = returnType !== "string"; + if (numericRet && numericArgs && !opts) { + return getCFunc(ident); + } + return function() { + return ccall(ident, returnType, argTypes, arguments, opts); + }; + } + var ALLOC_STACK = 1; + var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : void 0; + function UTF8ArrayToString(heap, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + while (heap[endPtr] && !(endPtr >= endIdx)) + ++endPtr; + if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { + return UTF8Decoder.decode(heap.subarray(idx, endPtr)); + } else { + var str = ""; + while (idx < endPtr) { + var u0 = heap[idx++]; + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue; + } + var u1 = heap[idx++] & 63; + if ((u0 & 224) == 192) { + str += String.fromCharCode((u0 & 31) << 6 | u1); + continue; + } + var u2 = heap[idx++] & 63; + if ((u0 & 240) == 224) { + u0 = (u0 & 15) << 12 | u1 << 6 | u2; + } else { + u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63; + } + if (u0 < 65536) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); + } + } + } + return str; + } + function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""; + } + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) + return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023; + } + if (u <= 127) { + if (outIdx >= endIdx) + break; + heap[outIdx++] = u; + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) + break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63; + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) + break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } else { + if (outIdx + 3 >= endIdx) + break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } + } + heap[outIdx] = 0; + return outIdx - startIdx; + } + function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + } + function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) + u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; + if (u <= 127) + ++len; + else if (u <= 2047) + len += 2; + else if (u <= 65535) + len += 3; + else + len += 4; + } + return len; + } + var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : void 0; + function writeArrayToMemory(array2, buffer3) { + HEAP8.set(array2, buffer3); + } + function writeAsciiToMemory(str, buffer3, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + HEAP8[buffer3++ >> 0] = str.charCodeAt(i); + } + if (!dontAddNull) + HEAP8[buffer3 >> 0] = 0; + } + function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - x % multiple; + } + return x; + } + var buffer2, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; + function updateGlobalBufferAndViews(buf) { + buffer2 = buf; + Module["HEAP8"] = HEAP8 = new Int8Array(buf); + Module["HEAP16"] = HEAP16 = new Int16Array(buf); + Module["HEAP32"] = HEAP32 = new Int32Array(buf); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); + Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); + Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); + Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); + Module["HEAPF64"] = HEAPF64 = new Float64Array(buf); + } + var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 16777216; + var wasmTable; + var __ATPRERUN__ = []; + var __ATINIT__ = []; + var __ATPOSTRUN__ = []; + var runtimeInitialized = false; + var runtimeExited = false; + var runtimeKeepaliveCounter = 0; + function keepRuntimeAlive() { + return noExitRuntime || runtimeKeepaliveCounter > 0; + } + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") + Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); + } + function initRuntime() { + runtimeInitialized = true; + callRuntimeCallbacks(__ATINIT__); + } + function exitRuntime() { + runtimeExited = true; + } + function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") + Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); + } + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); + } + function addOnInit(cb) { + __ATINIT__.unshift(cb); + } + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); + } + var runDependencies = 0; + var runDependencyWatcher = null; + var dependenciesFulfilled = null; + function addRunDependency(id) { + runDependencies++; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + } + function removeRunDependency(id) { + runDependencies--; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } + } + Module["preloadedImages"] = {}; + Module["preloadedAudios"] = {}; + function abort(what) { + { + if (Module["onAbort"]) { + Module["onAbort"](what); + } + } + what = "Aborted(" + what + ")"; + err(what); + ABORT = true; + EXITSTATUS = 1; + what += ". Build with -s ASSERTIONS=1 for more info."; + var e = new WebAssembly.RuntimeError(what); + readyPromiseReject(e); + throw e; + } + var dataURIPrefix = "data:application/octet-stream;base64,"; + function isDataURI(filename) { + return filename.startsWith(dataURIPrefix); + } + function isFileURI(filename) { + return filename.startsWith("file://"); + } + var wasmBinaryFile; + wasmBinaryFile = "tfjs-backend-wasm.wasm"; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } else { + throw "both async and sync fetching of the wasm failed"; + } + } catch (err2) { + abort(err2); + } + } + function getBinaryPromise() { + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch === "function" && !isFileURI(wasmBinaryFile)) { + return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) { + if (!response["ok"]) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; + } + return response["arrayBuffer"](); + }).catch(function() { + return getBinary(wasmBinaryFile); + }); + } else { + if (readAsync) { + return new Promise(function(resolve, reject) { + readAsync(wasmBinaryFile, function(response) { + resolve(new Uint8Array(response)); + }, reject); + }); + } + } + } + return Promise.resolve().then(function() { + return getBinary(wasmBinaryFile); + }); + } + function createWasm() { + var info = { "env": asmLibraryArg, "wasi_snapshot_preview1": asmLibraryArg }; + function receiveInstance(instance, module2) { + var exports3 = instance.exports; + Module["asm"] = exports3; + wasmMemory = Module["asm"]["memory"]; + updateGlobalBufferAndViews(wasmMemory.buffer); + wasmTable = Module["asm"]["__indirect_function_table"]; + addOnInit(Module["asm"]["__wasm_call_ctors"]); + removeRunDependency("wasm-instantiate"); + } + addRunDependency("wasm-instantiate"); + function receiveInstantiationResult(result) { + receiveInstance(result["instance"]); + } + function instantiateArrayBuffer(receiver) { + return getBinaryPromise().then(function(binary) { + return WebAssembly.instantiate(binary, info); + }).then(function(instance) { + return instance; + }).then(receiver, function(reason) { + err("failed to asynchronously prepare wasm: " + reason); + abort(reason); + }); + } + function instantiateAsync() { + if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && !isFileURI(wasmBinaryFile) && typeof fetch === "function") { + return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) { + var result = WebAssembly.instantiateStreaming(response, info); + return result.then(receiveInstantiationResult, function(reason) { + err("wasm streaming compile failed: " + reason); + err("falling back to ArrayBuffer instantiation"); + return instantiateArrayBuffer(receiveInstantiationResult); + }); + }); + } else { + return instantiateArrayBuffer(receiveInstantiationResult); + } + } + if (Module["instantiateWasm"]) { + try { + var exports2 = Module["instantiateWasm"](info, receiveInstance); + return exports2; + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false; + } + } + instantiateAsync().catch(readyPromiseReject); + return {}; + } + var tempDouble; + var tempI64; + function callRuntimeCallbacks(callbacks2) { + while (callbacks2.length > 0) { + var callback = callbacks2.shift(); + if (typeof callback == "function") { + callback(Module); + continue; + } + var func2 = callback.func; + if (typeof func2 === "number") { + if (callback.arg === void 0) { + getWasmTableEntry(func2)(); + } else { + getWasmTableEntry(func2)(callback.arg); + } + } else { + func2(callback.arg === void 0 ? null : callback.arg); + } + } + } + function demangle(func2) { + return func2; + } + function demangleAll(text) { + var regex = /\b_Z[\w\d_]+/g; + return text.replace(regex, function(x) { + var y = demangle(x); + return x === y ? x : y + " [" + x + "]"; + }); + } + var wasmTableMirror = []; + function getWasmTableEntry(funcPtr) { + var func2 = wasmTableMirror[funcPtr]; + if (!func2) { + if (funcPtr >= wasmTableMirror.length) + wasmTableMirror.length = funcPtr + 1; + wasmTableMirror[funcPtr] = func2 = wasmTable.get(funcPtr); + } + return func2; + } + function jsStackTrace() { + var error = new Error(); + if (!error.stack) { + try { + throw new Error(); + } catch (e) { + error = e; + } + if (!error.stack) { + return "(no stack trace available)"; + } + } + return error.stack.toString(); + } + function setWasmTableEntry(idx, func2) { + wasmTable.set(idx, func2); + wasmTableMirror[idx] = func2; + } + function _abort() { + abort(""); + } + function _emscripten_get_heap_max() { + return 2147483648; + } + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.copyWithin(dest, src, src + num); + } + function emscripten_realloc_buffer(size) { + try { + wasmMemory.grow(size - buffer2.byteLength + 65535 >>> 16); + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1; + } catch (e) { + } + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = HEAPU8.length; + requestedSize = requestedSize >>> 0; + var maxHeapSize = _emscripten_get_heap_max(); + if (requestedSize > maxHeapSize) { + return false; + } + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + return true; + } + } + return false; + } + var SYSCALLS = { mappings: {}, buffers: [null, [], []], printChar: function(stream, curr) { + var buffer3 = SYSCALLS.buffers[stream]; + if (curr === 0 || curr === 10) { + (stream === 1 ? out : err)(UTF8ArrayToString(buffer3, 0)); + buffer3.length = 0; + } else { + buffer3.push(curr); + } + }, varargs: void 0, get: function() { + SYSCALLS.varargs += 4; + var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; + return ret; + }, getStr: function(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, get64: function(low, high) { + return low; + } }; + function _fd_close(fd) { + return 0; + } + function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { + } + function _fd_write(fd, iov, iovcnt, pnum) { + var num = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[iov >> 2]; + var len = HEAP32[iov + 4 >> 2]; + iov += 8; + for (var j = 0; j < len; j++) { + SYSCALLS.printChar(fd, HEAPU8[ptr + j]); + } + num += len; + } + HEAP32[pnum >> 2] = num; + return 0; + } + function _setTempRet0(val) { + setTempRet0(val); + } + var ASSERTIONS = false; + var asmLibraryArg = { "abort": _abort, "emscripten_get_heap_max": _emscripten_get_heap_max, "emscripten_memcpy_big": _emscripten_memcpy_big, "emscripten_resize_heap": _emscripten_resize_heap, "fd_close": _fd_close, "fd_seek": _fd_seek, "fd_write": _fd_write, "setTempRet0": _setTempRet0 }; + var asm = createWasm(); + var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function() { + return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["__wasm_call_ctors"]).apply(null, arguments); + }; + var _init = Module["_init"] = function() { + return (_init = Module["_init"] = Module["asm"]["init"]).apply(null, arguments); + }; + var _init_with_threads_count = Module["_init_with_threads_count"] = function() { + return (_init_with_threads_count = Module["_init_with_threads_count"] = Module["asm"]["init_with_threads_count"]).apply(null, arguments); + }; + var _get_threads_count = Module["_get_threads_count"] = function() { + return (_get_threads_count = Module["_get_threads_count"] = Module["asm"]["get_threads_count"]).apply(null, arguments); + }; + var _register_tensor = Module["_register_tensor"] = function() { + return (_register_tensor = Module["_register_tensor"] = Module["asm"]["register_tensor"]).apply(null, arguments); + }; + var _dispose_data = Module["_dispose_data"] = function() { + return (_dispose_data = Module["_dispose_data"] = Module["asm"]["dispose_data"]).apply(null, arguments); + }; + var _dispose = Module["_dispose"] = function() { + return (_dispose = Module["_dispose"] = Module["asm"]["dispose"]).apply(null, arguments); + }; + var _Abs = Module["_Abs"] = function() { + return (_Abs = Module["_Abs"] = Module["asm"]["Abs"]).apply(null, arguments); + }; + var _Add = Module["_Add"] = function() { + return (_Add = Module["_Add"] = Module["asm"]["Add"]).apply(null, arguments); + }; + var _AddN = Module["_AddN"] = function() { + return (_AddN = Module["_AddN"] = Module["asm"]["AddN"]).apply(null, arguments); + }; + var _All = Module["_All"] = function() { + return (_All = Module["_All"] = Module["asm"]["All"]).apply(null, arguments); + }; + var _Any = Module["_Any"] = function() { + return (_Any = Module["_Any"] = Module["asm"]["Any"]).apply(null, arguments); + }; + var _ArgMax = Module["_ArgMax"] = function() { + return (_ArgMax = Module["_ArgMax"] = Module["asm"]["ArgMax"]).apply(null, arguments); + }; + var _AvgPool = Module["_AvgPool"] = function() { + return (_AvgPool = Module["_AvgPool"] = Module["asm"]["AvgPool"]).apply(null, arguments); + }; + var _BatchMatMul = Module["_BatchMatMul"] = function() { + return (_BatchMatMul = Module["_BatchMatMul"] = Module["asm"]["BatchMatMul"]).apply(null, arguments); + }; + var _Ceil = Module["_Ceil"] = function() { + return (_Ceil = Module["_Ceil"] = Module["asm"]["Ceil"]).apply(null, arguments); + }; + var _ClipByValue = Module["_ClipByValue"] = function() { + return (_ClipByValue = Module["_ClipByValue"] = Module["asm"]["ClipByValue"]).apply(null, arguments); + }; + var _Conv2D = Module["_Conv2D"] = function() { + return (_Conv2D = Module["_Conv2D"] = Module["asm"]["Conv2D"]).apply(null, arguments); + }; + var _Conv2DBackpropInput = Module["_Conv2DBackpropInput"] = function() { + return (_Conv2DBackpropInput = Module["_Conv2DBackpropInput"] = Module["asm"]["Conv2DBackpropInput"]).apply(null, arguments); + }; + var _Cos = Module["_Cos"] = function() { + return (_Cos = Module["_Cos"] = Module["asm"]["Cos"]).apply(null, arguments); + }; + var _Cosh = Module["_Cosh"] = function() { + return (_Cosh = Module["_Cosh"] = Module["asm"]["Cosh"]).apply(null, arguments); + }; + var _CropAndResize = Module["_CropAndResize"] = function() { + return (_CropAndResize = Module["_CropAndResize"] = Module["asm"]["CropAndResize"]).apply(null, arguments); + }; + var _Cumprod = Module["_Cumprod"] = function() { + return (_Cumprod = Module["_Cumprod"] = Module["asm"]["Cumprod"]).apply(null, arguments); + }; + var _Cumsum = Module["_Cumsum"] = function() { + return (_Cumsum = Module["_Cumsum"] = Module["asm"]["Cumsum"]).apply(null, arguments); + }; + var _DepthToSpace = Module["_DepthToSpace"] = function() { + return (_DepthToSpace = Module["_DepthToSpace"] = Module["asm"]["DepthToSpace"]).apply(null, arguments); + }; + var _DepthwiseConv2dNative = Module["_DepthwiseConv2dNative"] = function() { + return (_DepthwiseConv2dNative = Module["_DepthwiseConv2dNative"] = Module["asm"]["DepthwiseConv2dNative"]).apply(null, arguments); + }; + var _Elu = Module["_Elu"] = function() { + return (_Elu = Module["_Elu"] = Module["asm"]["Elu"]).apply(null, arguments); + }; + var _Equal = Module["_Equal"] = function() { + return (_Equal = Module["_Equal"] = Module["asm"]["Equal"]).apply(null, arguments); + }; + var _Exp = Module["_Exp"] = function() { + return (_Exp = Module["_Exp"] = Module["asm"]["Exp"]).apply(null, arguments); + }; + var _FlipLeftRight = Module["_FlipLeftRight"] = function() { + return (_FlipLeftRight = Module["_FlipLeftRight"] = Module["asm"]["FlipLeftRight"]).apply(null, arguments); + }; + var _Floor = Module["_Floor"] = function() { + return (_Floor = Module["_Floor"] = Module["asm"]["Floor"]).apply(null, arguments); + }; + var _FloorDiv = Module["_FloorDiv"] = function() { + return (_FloorDiv = Module["_FloorDiv"] = Module["asm"]["FloorDiv"]).apply(null, arguments); + }; + var _FusedBatchNorm = Module["_FusedBatchNorm"] = function() { + return (_FusedBatchNorm = Module["_FusedBatchNorm"] = Module["asm"]["FusedBatchNorm"]).apply(null, arguments); + }; + var _FusedConv2D = Module["_FusedConv2D"] = function() { + return (_FusedConv2D = Module["_FusedConv2D"] = Module["asm"]["FusedConv2D"]).apply(null, arguments); + }; + var _FusedDepthwiseConv2D = Module["_FusedDepthwiseConv2D"] = function() { + return (_FusedDepthwiseConv2D = Module["_FusedDepthwiseConv2D"] = Module["asm"]["FusedDepthwiseConv2D"]).apply(null, arguments); + }; + var _Gather = Module["_Gather"] = function() { + return (_Gather = Module["_Gather"] = Module["asm"]["Gather"]).apply(null, arguments); + }; + var _GatherNd = Module["_GatherNd"] = function() { + return (_GatherNd = Module["_GatherNd"] = Module["asm"]["GatherNd"]).apply(null, arguments); + }; + var _Greater = Module["_Greater"] = function() { + return (_Greater = Module["_Greater"] = Module["asm"]["Greater"]).apply(null, arguments); + }; + var _GreaterEqual = Module["_GreaterEqual"] = function() { + return (_GreaterEqual = Module["_GreaterEqual"] = Module["asm"]["GreaterEqual"]).apply(null, arguments); + }; + var _LeakyRelu = Module["_LeakyRelu"] = function() { + return (_LeakyRelu = Module["_LeakyRelu"] = Module["asm"]["LeakyRelu"]).apply(null, arguments); + }; + var _Less = Module["_Less"] = function() { + return (_Less = Module["_Less"] = Module["asm"]["Less"]).apply(null, arguments); + }; + var _LessEqual = Module["_LessEqual"] = function() { + return (_LessEqual = Module["_LessEqual"] = Module["asm"]["LessEqual"]).apply(null, arguments); + }; + var _Log = Module["_Log"] = function() { + return (_Log = Module["_Log"] = Module["asm"]["Log"]).apply(null, arguments); + }; + var _LogicalAnd = Module["_LogicalAnd"] = function() { + return (_LogicalAnd = Module["_LogicalAnd"] = Module["asm"]["LogicalAnd"]).apply(null, arguments); + }; + var _LogicalNot = Module["_LogicalNot"] = function() { + return (_LogicalNot = Module["_LogicalNot"] = Module["asm"]["LogicalNot"]).apply(null, arguments); + }; + var _LogicalOr = Module["_LogicalOr"] = function() { + return (_LogicalOr = Module["_LogicalOr"] = Module["asm"]["LogicalOr"]).apply(null, arguments); + }; + var _LogicalXor = Module["_LogicalXor"] = function() { + return (_LogicalXor = Module["_LogicalXor"] = Module["asm"]["LogicalXor"]).apply(null, arguments); + }; + var _Max = Module["_Max"] = function() { + return (_Max = Module["_Max"] = Module["asm"]["Max"]).apply(null, arguments); + }; + var _MaxPool = Module["_MaxPool"] = function() { + return (_MaxPool = Module["_MaxPool"] = Module["asm"]["MaxPool"]).apply(null, arguments); + }; + var _Maximum = Module["_Maximum"] = function() { + return (_Maximum = Module["_Maximum"] = Module["asm"]["Maximum"]).apply(null, arguments); + }; + var _Mean = Module["_Mean"] = function() { + return (_Mean = Module["_Mean"] = Module["asm"]["Mean"]).apply(null, arguments); + }; + var _Min = Module["_Min"] = function() { + return (_Min = Module["_Min"] = Module["asm"]["Min"]).apply(null, arguments); + }; + var _Minimum = Module["_Minimum"] = function() { + return (_Minimum = Module["_Minimum"] = Module["asm"]["Minimum"]).apply(null, arguments); + }; + var _MirrorPad = Module["_MirrorPad"] = function() { + return (_MirrorPad = Module["_MirrorPad"] = Module["asm"]["MirrorPad"]).apply(null, arguments); + }; + var _Multiply = Module["_Multiply"] = function() { + return (_Multiply = Module["_Multiply"] = Module["asm"]["Multiply"]).apply(null, arguments); + }; + var _Neg = Module["_Neg"] = function() { + return (_Neg = Module["_Neg"] = Module["asm"]["Neg"]).apply(null, arguments); + }; + var _NonMaxSuppressionV3 = Module["_NonMaxSuppressionV3"] = function() { + return (_NonMaxSuppressionV3 = Module["_NonMaxSuppressionV3"] = Module["asm"]["NonMaxSuppressionV3"]).apply(null, arguments); + }; + var _NonMaxSuppressionV4 = Module["_NonMaxSuppressionV4"] = function() { + return (_NonMaxSuppressionV4 = Module["_NonMaxSuppressionV4"] = Module["asm"]["NonMaxSuppressionV4"]).apply(null, arguments); + }; + var _NonMaxSuppressionV5 = Module["_NonMaxSuppressionV5"] = function() { + return (_NonMaxSuppressionV5 = Module["_NonMaxSuppressionV5"] = Module["asm"]["NonMaxSuppressionV5"]).apply(null, arguments); + }; + var _NotEqual = Module["_NotEqual"] = function() { + return (_NotEqual = Module["_NotEqual"] = Module["asm"]["NotEqual"]).apply(null, arguments); + }; + var _OneHot = Module["_OneHot"] = function() { + return (_OneHot = Module["_OneHot"] = Module["asm"]["OneHot"]).apply(null, arguments); + }; + var _PadV2 = Module["_PadV2"] = function() { + return (_PadV2 = Module["_PadV2"] = Module["asm"]["PadV2"]).apply(null, arguments); + }; + var _Pow = Module["_Pow"] = function() { + return (_Pow = Module["_Pow"] = Module["asm"]["Pow"]).apply(null, arguments); + }; + var _Prelu = Module["_Prelu"] = function() { + return (_Prelu = Module["_Prelu"] = Module["asm"]["Prelu"]).apply(null, arguments); + }; + var _Prod = Module["_Prod"] = function() { + return (_Prod = Module["_Prod"] = Module["asm"]["Prod"]).apply(null, arguments); + }; + var _RealDiv = Module["_RealDiv"] = function() { + return (_RealDiv = Module["_RealDiv"] = Module["asm"]["RealDiv"]).apply(null, arguments); + }; + var _Relu = Module["_Relu"] = function() { + return (_Relu = Module["_Relu"] = Module["asm"]["Relu"]).apply(null, arguments); + }; + var _Relu6 = Module["_Relu6"] = function() { + return (_Relu6 = Module["_Relu6"] = Module["asm"]["Relu6"]).apply(null, arguments); + }; + var _ResizeBilinear = Module["_ResizeBilinear"] = function() { + return (_ResizeBilinear = Module["_ResizeBilinear"] = Module["asm"]["ResizeBilinear"]).apply(null, arguments); + }; + var _ResizeNearestNeighbor = Module["_ResizeNearestNeighbor"] = function() { + return (_ResizeNearestNeighbor = Module["_ResizeNearestNeighbor"] = Module["asm"]["ResizeNearestNeighbor"]).apply(null, arguments); + }; + var _Reverse = Module["_Reverse"] = function() { + return (_Reverse = Module["_Reverse"] = Module["asm"]["Reverse"]).apply(null, arguments); + }; + var _RotateWithOffset = Module["_RotateWithOffset"] = function() { + return (_RotateWithOffset = Module["_RotateWithOffset"] = Module["asm"]["RotateWithOffset"]).apply(null, arguments); + }; + var _Round = Module["_Round"] = function() { + return (_Round = Module["_Round"] = Module["asm"]["Round"]).apply(null, arguments); + }; + var _Rsqrt = Module["_Rsqrt"] = function() { + return (_Rsqrt = Module["_Rsqrt"] = Module["asm"]["Rsqrt"]).apply(null, arguments); + }; + var _ScatterNd = Module["_ScatterNd"] = function() { + return (_ScatterNd = Module["_ScatterNd"] = Module["asm"]["ScatterNd"]).apply(null, arguments); + }; + var _SelectV2 = Module["_SelectV2"] = function() { + return (_SelectV2 = Module["_SelectV2"] = Module["asm"]["SelectV2"]).apply(null, arguments); + }; + var _Sigmoid = Module["_Sigmoid"] = function() { + return (_Sigmoid = Module["_Sigmoid"] = Module["asm"]["Sigmoid"]).apply(null, arguments); + }; + var _Sin = Module["_Sin"] = function() { + return (_Sin = Module["_Sin"] = Module["asm"]["Sin"]).apply(null, arguments); + }; + var _Softmax = Module["_Softmax"] = function() { + return (_Softmax = Module["_Softmax"] = Module["asm"]["Softmax"]).apply(null, arguments); + }; + var _SparseFillEmptyRows = Module["_SparseFillEmptyRows"] = function() { + return (_SparseFillEmptyRows = Module["_SparseFillEmptyRows"] = Module["asm"]["SparseFillEmptyRows"]).apply(null, arguments); + }; + var _SparseReshape = Module["_SparseReshape"] = function() { + return (_SparseReshape = Module["_SparseReshape"] = Module["asm"]["SparseReshape"]).apply(null, arguments); + }; + var _SparseSegmentReduction = Module["_SparseSegmentReduction"] = function() { + return (_SparseSegmentReduction = Module["_SparseSegmentReduction"] = Module["asm"]["SparseSegmentReduction"]).apply(null, arguments); + }; + var _Sqrt = Module["_Sqrt"] = function() { + return (_Sqrt = Module["_Sqrt"] = Module["asm"]["Sqrt"]).apply(null, arguments); + }; + var _Square = Module["_Square"] = function() { + return (_Square = Module["_Square"] = Module["asm"]["Square"]).apply(null, arguments); + }; + var _SquaredDifference = Module["_SquaredDifference"] = function() { + return (_SquaredDifference = Module["_SquaredDifference"] = Module["asm"]["SquaredDifference"]).apply(null, arguments); + }; + var _Step = Module["_Step"] = function() { + return (_Step = Module["_Step"] = Module["asm"]["Step"]).apply(null, arguments); + }; + var _StridedSlice = Module["_StridedSlice"] = function() { + return (_StridedSlice = Module["_StridedSlice"] = Module["asm"]["StridedSlice"]).apply(null, arguments); + }; + var _Sub = Module["_Sub"] = function() { + return (_Sub = Module["_Sub"] = Module["asm"]["Sub"]).apply(null, arguments); + }; + var _Sum = Module["_Sum"] = function() { + return (_Sum = Module["_Sum"] = Module["asm"]["Sum"]).apply(null, arguments); + }; + var _Tan = Module["_Tan"] = function() { + return (_Tan = Module["_Tan"] = Module["asm"]["Tan"]).apply(null, arguments); + }; + var _Tanh = Module["_Tanh"] = function() { + return (_Tanh = Module["_Tanh"] = Module["asm"]["Tanh"]).apply(null, arguments); + }; + var _Tile = Module["_Tile"] = function() { + return (_Tile = Module["_Tile"] = Module["asm"]["Tile"]).apply(null, arguments); + }; + var _TopK = Module["_TopK"] = function() { + return (_TopK = Module["_TopK"] = Module["asm"]["TopK"]).apply(null, arguments); + }; + var _Transform = Module["_Transform"] = function() { + return (_Transform = Module["_Transform"] = Module["asm"]["Transform"]).apply(null, arguments); + }; + var _Transpose = Module["_Transpose"] = function() { + return (_Transpose = Module["_Transpose"] = Module["asm"]["Transpose"]).apply(null, arguments); + }; + var __FusedMatMul = Module["__FusedMatMul"] = function() { + return (__FusedMatMul = Module["__FusedMatMul"] = Module["asm"]["_FusedMatMul"]).apply(null, arguments); + }; + var _malloc = Module["_malloc"] = function() { + return (_malloc = Module["_malloc"] = Module["asm"]["malloc"]).apply(null, arguments); + }; + var _free = Module["_free"] = function() { + return (_free = Module["_free"] = Module["asm"]["free"]).apply(null, arguments); + }; + var ___errno_location = Module["___errno_location"] = function() { + return (___errno_location = Module["___errno_location"] = Module["asm"]["__errno_location"]).apply(null, arguments); + }; + var _emscripten_main_thread_process_queued_calls = Module["_emscripten_main_thread_process_queued_calls"] = function() { + return (_emscripten_main_thread_process_queued_calls = Module["_emscripten_main_thread_process_queued_calls"] = Module["asm"]["emscripten_main_thread_process_queued_calls"]).apply(null, arguments); + }; + var stackSave = Module["stackSave"] = function() { + return (stackSave = Module["stackSave"] = Module["asm"]["stackSave"]).apply(null, arguments); + }; + var stackRestore = Module["stackRestore"] = function() { + return (stackRestore = Module["stackRestore"] = Module["asm"]["stackRestore"]).apply(null, arguments); + }; + var stackAlloc = Module["stackAlloc"] = function() { + return (stackAlloc = Module["stackAlloc"] = Module["asm"]["stackAlloc"]).apply(null, arguments); + }; + var dynCall_iijjiiii = Module["dynCall_iijjiiii"] = function() { + return (dynCall_iijjiiii = Module["dynCall_iijjiiii"] = Module["asm"]["dynCall_iijjiiii"]).apply(null, arguments); + }; + var dynCall_jiji = Module["dynCall_jiji"] = function() { + return (dynCall_jiji = Module["dynCall_jiji"] = Module["asm"]["dynCall_jiji"]).apply(null, arguments); + }; + Module["cwrap"] = cwrap; + var calledRun; + function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status; + } + dependenciesFulfilled = function runCaller() { + if (!calledRun) + run(); + if (!calledRun) + dependenciesFulfilled = runCaller; + }; + function run(args) { + args = args || arguments_; + if (runDependencies > 0) { + return; + } + preRun(); + if (runDependencies > 0) { + return; + } + function doRun() { + if (calledRun) + return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) + return; + initRuntime(); + readyPromiseResolve(Module); + if (Module["onRuntimeInitialized"]) + Module["onRuntimeInitialized"](); + postRun(); + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function() { + setTimeout(function() { + Module["setStatus"](""); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + } + Module["run"] = run; + function procExit(code) { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + if (Module["onExit"]) + Module["onExit"](code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + } + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") + Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()(); + } + } + run(); + var listenersAdded; + if (beforeListeners) { + listenersAdded = { uncaughtException: process.listeners("uncaughtException").filter(function(listener) { + return !beforeListeners.uncaughtException.indexOf(listener) > -1; + }), unhandledRejection: process.listeners("unhandledRejection").filter(function(listener) { + return !beforeListeners.unhandledRejection.indexOf(listener) > -1; + }) }; + } + var actualModule; + if (typeof WasmBackendModule3 !== "undefined") { + actualModule = WasmBackendModule3; + } else if (typeof WasmBackendModuleThreadedSimd !== "undefined") { + actualModule = WasmBackendModuleThreadedSimd; + } else { + throw new Error("Could not find wasm module in post.js"); + } + if (listenersAdded) { + var tmpDispose = actualModule["_dispose"]; + actualModule["_dispose"] = function() { + tmpDispose(); + listenersAdded.uncaughtException.forEach(function(listener) { + process.removeListener("uncaughtException", listener); + }); + listenersAdded.unhandledRejection.forEach(function(listener) { + process.removeListener("unhandledRejection", listener); + }); + }; + } + return WasmBackendModule3.ready; + }; + })(); + if (typeof exports === "object" && typeof module === "object") + module.exports = WasmBackendModule2; + else if (typeof define === "function" && define["amd"]) + define([], function() { + return WasmBackendModule2; + }); + else if (typeof exports === "object") + exports["WasmBackendModule"] = WasmBackendModule2; + } + }); + + // src/group1-shard1of1.bin + var group1_shard1of1_exports = {}; + __export(group1_shard1of1_exports, { + default: () => group1_shard1of1_default + }); + var group1_shard1of1_default; + var init_group1_shard1of1 = __esm({ + "src/group1-shard1of1.bin"() { + group1_shard1of1_default = __toBinary("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"); + } + }); + + // src/tfjs-backend-wasm-threaded-simd.wasm + var tfjs_backend_wasm_threaded_simd_exports = {}; + __export(tfjs_backend_wasm_threaded_simd_exports, { + default: () => tfjs_backend_wasm_threaded_simd_default + }); + var tfjs_backend_wasm_threaded_simd_default; + var init_tfjs_backend_wasm_threaded_simd = __esm({ + "src/tfjs-backend-wasm-threaded-simd.wasm"() { + tfjs_backend_wasm_threaded_simd_default = __toBinary("AGFzbQEAAAABjQZVYAF/AGADf39/AGAFf39/f38AYAJ/fwF/YAJ/fwBgBH9/f38AYAp/f39/f39/f39/AGAIf39/f39/f38AYAF/AX9gBX9/f39/AX9gBn9/f39/fwBgDH9/f39/f39/f39/fwBgCX9/f39/f39/fwBgA39/fwF/YAd/f39/f39/AGAAAGALf39/f39/f39/f38AYAABf2ADf319AGAEf39/fwF/YAJ9fQF/YAl/f39/f39/f38Bf2ACfX0BfWAEfX1/fwF/YAF9AX1gBH99fX0AYAJ/fQBgAXwBfGAEf399fwBgB39+fn9/f38Bf2AEf35+fwBgA39+fwF+YBN/f39/f39/f39/f39/f39/f39/AGAXf39/f39/f39/f39/f39/f39/f39/fX8AYA1/f39/f39/f39/f31/AGADf399AGAHf39/f39/fwF/YAV/fX9/fwBgAXwBfWABfwF8YAF/AX1gBX9+fn5+AGAAAXxgA39/fwF8YA5/f39/f39/f39/f39/fwBgBH99fX8AYBt/f39/f39/f39/f39/f39/f39/f39/f39/f38AYAp/f39/f39/f31/AGAHf39/f399fwBgEX9/f39/f39/f39/f39/f39/AGAFf39/fX0Bf2AGf39/fX1/AX9gBn9/f319fQF/YAh/f39/f399fwBgC39/f39/fX19f39/AGAMf39/f39/f39/f39/AX9gBH99f38AYA9/f39/f39/f39/f39/fX8AYAN9f38BfWAYf39/f39/f39/f39/f39/f39/f39/f31/AGAHf39/fX19fwF/YAZ9fX9/f38Bf2ADf31/AGACfn8Bf2ACfHwBfGACfH8Bf2ADfHx/AXxgAn1/AX9gA39/fAF/YAJ/fAF8YAJ/fQF9YAF9AX9gBn9/f39/fwF/YAF9AGACfX0AYAN9fX0AYAR9fX19AGAFf319fX0AYAh/f39/f39/fwF/YAR/f39/AXxgAX4Bf2ACfH8BfGAEfn5+fgF/YAR/fn5+AGAKf39/f39/f39/fwF/ArUFFgNlbnYFYWJvcnQADwNlbnYcZW1zY3JpcHRlbl9udW1fbG9naWNhbF9jb3JlcwARA2VudiJlbXNjcmlwdGVuX3Vud2luZF90b19qc19ldmVudF9sb29wAA8DZW52EmVtc2NyaXB0ZW5fZ2V0X25vdwAqA2VudhVlbXNjcmlwdGVuX21lbWNweV9iaWcADQNlbnYfX2Vtc2NyaXB0ZW5fbm90aWZ5X3RocmVhZF9xdWV1ZQADA2Vudh9lbXNjcmlwdGVuX3dlYmdsX2NyZWF0ZV9jb250ZXh0AAMDZW52ImVtc2NyaXB0ZW5fc2V0X2NhbnZhc19lbGVtZW50X3NpemUADQNlbnYTX19wdGhyZWFkX2NyZWF0ZV9qcwATA2VudiRlbXNjcmlwdGVuX3JlY2VpdmVfb25fbWFpbl90aHJlYWRfanMAKwNlbnYgX19lbXNjcmlwdGVuX2luaXRfbWFpbl90aHJlYWRfanMAAANlbnYmX2Vtc2NyaXB0ZW5fZGVmYXVsdF9wdGhyZWFkX3N0YWNrX3NpemUAEQNlbnYbX19lbXNjcmlwdGVuX3RocmVhZF9jbGVhbnVwAAADZW52BGV4aXQAAANlbnYhZW1zY3JpcHRlbl9jaGVja19ibG9ja2luZ19hbGxvd2VkAA8Wd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF9jbG9zZQAIFndhc2lfc25hcHNob3RfcHJldmlldzEIZmRfd3JpdGUAEwNlbnYXZW1zY3JpcHRlbl9nZXRfaGVhcF9tYXgAEQNlbnYWZW1zY3JpcHRlbl9yZXNpemVfaGVhcAAIA2VudgtzZXRUZW1wUmV0MAAAFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfc2VlawAJA2VudgZtZW1vcnkCA4ACgIACA8sEyQQPDwAACAQPABEBAAQEDwQBAQQHAwMFAQECAAQsAgMEDAEABC0gLgEBLwoKDCABBxQDAwEKAQcWAzAhIQcHBxQDAwcUAwMcBxQDAwcUAwMBBwMBBwMHAwUAMQcWAwEFBxYDBxAQEAcDATIzNAcUAwIABDUHFgMDAQUHAwMBAQAEBgYKNgEBDAIEAQAEBTcODAEBBwMDOAYHAwUBAQ4HBQQBBQETCQMTCQM5Og4iAAAAADsECAMBAgAEBDwABAAEIwAHBwcHBwwFGAAFAAQAACIBAAQAARwABQAAAQUTBAEBDw8IAwMDAw0DAxEXPRcXFwMVFRUVFQMIExMAFRcJCQkJCQkJJAkJCQkJCQMNBA0AAAEGCgIOCgoCAQEBAQEBBAQFAQoKAQEEAQQQDAsGDAwKGhkSAAAAAAAZABoAACUlPgUFDBAMEBAGBgYGBgYGBgYGBgYGBgYGBQcHDg4GBgYGBgYGBgYGBgYGDgsLCwsLCwsLCwsLCwsMDAsLEBAODgUFCgEBAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBQUFBQUHBwUFBQUFBQUFBQUFBQUKAQEBBQIMCAQEBAQEBAQEBAQEBAgIBxEJAQgBPwIBHQQRCAEAAEAJQUImJkMPRAMEAQVFJycbRhgoKBhHGBseAQgPCAARAwAAAA0JD08RCRsbGA0IAFAWCAgAAAADAAgAAwAAEQQYUQgNHwgDCAMNAwgAAA0IHykeUh5TBCkIDQgRAAgCVAkEBwFwAagCqAIGLgh/AUGAzsECC38BQQALfwFBAAt/AUEAC38BQQALfwFBAAt/AUEAC38AQaipAQsHqA55EV9fd2FzbV9jYWxsX2N0b3JzABUEaW5pdAAbF2luaXRfd2l0aF90aHJlYWRzX2NvdW50ABwRZ2V0X3RocmVhZHNfY291bnQAHQ9yZWdpc3Rlcl90ZW5zb3IAHgxkaXNwb3NlX2RhdGEAHwdkaXNwb3NlACIZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAA0FicwAlA0FkZAAnBEFkZE4AKgNBbGwAKwNBbnkALAZBcmdNYXgALQdBdmdQb29sADALQmF0Y2hNYXRNdWwANARDZWlsADULQ2xpcEJ5VmFsdWUAOAZDb252MkQAORNDb252MkRCYWNrcHJvcElucHV0ADoDQ29zADsEQ29zaAA8DUNyb3BBbmRSZXNpemUAPQdDdW1wcm9kAD4GQ3Vtc3VtAD8MRGVwdGhUb1NwYWNlAEAVRGVwdGh3aXNlQ29udjJkTmF0aXZlAEEDRWx1AEIFRXF1YWwAQwNFeHAARw1GbGlwTGVmdFJpZ2h0AEgFRmxvb3IASQhGbG9vckRpdgBKDkZ1c2VkQmF0Y2hOb3JtAE0LRnVzZWRDb252MkQAThRGdXNlZERlcHRod2lzZUNvbnYyRABPBkdhdGhlcgBQCEdhdGhlck5kAFEHR3JlYXRlcgBSDEdyZWF0ZXJFcXVhbABWCUxlYWt5UmVsdQBaBExlc3MAWwlMZXNzRXF1YWwAXwNMb2cAYwpMb2dpY2FsQW5kAGQKTG9naWNhbE5vdABmCUxvZ2ljYWxPcgBnCkxvZ2ljYWxYb3IAaQNNYXgAawdNYXhQb29sAG0HTWF4aW11bQBuBE1lYW4AcQNNaW4AcgdNaW5pbXVtAHMJTWlycm9yUGFkAHYITXVsdGlwbHkAegNOZWcAfBNOb25NYXhTdXBwcmVzc2lvblYzAH0TTm9uTWF4U3VwcHJlc3Npb25WNAB+E05vbk1heFN1cHByZXNzaW9uVjUAfwhOb3RFcXVhbACAAQZPbmVIb3QAgwEFUGFkVjIAhgEDUG93AIcBBVByZWx1AIsBBFByb2QAjAEHUmVhbERpdgCNAQRSZWx1AJABBVJlbHU2AJEBDlJlc2l6ZUJpbGluZWFyAJQBFVJlc2l6ZU5lYXJlc3ROZWlnaGJvcgCVAQdSZXZlcnNlAJYBEFJvdGF0ZVdpdGhPZmZzZXQAlwEFUm91bmQAmAEFUnNxcnQAmQEJU2NhdHRlck5kAJoBCFNlbGVjdFYyAJsBB1NpZ21vaWQAnAEDU2luAJ0BB1NvZnRtYXgAoAETU3BhcnNlRmlsbEVtcHR5Um93cwChAQ1TcGFyc2VSZXNoYXBlAKIBFlNwYXJzZVNlZ21lbnRSZWR1Y3Rpb24AowEEU3FydACkAQZTcXVhcmUApQERU3F1YXJlZERpZmZlcmVuY2UApgEEU3RlcACpAQxTdHJpZGVkU2xpY2UAqgEDU3ViAKsBA1N1bQCtAQNUYW4ArgEEVGFuaACvAQRUaWxlALABBFRvcEsAsQEJVHJhbnNmb3JtAL0BCVRyYW5zcG9zZQC/AQxfRnVzZWRNYXRNdWwAwAEGbWFsbG9jAMgEBGZyZWUAygQTZW1zY3JpcHRlbl90bHNfaW5pdADuAxBfX2Vycm5vX2xvY2F0aW9uAPgDDHB0aHJlYWRfc2VsZgC7BCtlbXNjcmlwdGVuX21haW5fdGhyZWFkX3Byb2Nlc3NfcXVldWVkX2NhbGxzAKMEGl9lbXNjcmlwdGVuX3RocmVhZF9jcmFzaGVkAIQEF19lbXNjcmlwdGVuX3RocmVhZF9pbml0ANsELmVtc2NyaXB0ZW5fY3VycmVudF90aHJlYWRfcHJvY2Vzc19xdWV1ZWRfY2FsbHMAmQQhZW1zY3JpcHRlbl9tYWluX2Jyb3dzZXJfdGhyZWFkX2lkAJwEJGVtc2NyaXB0ZW5fc3luY19ydW5faW5fbWFpbl90aHJlYWRfMgChBCRlbXNjcmlwdGVuX3N5bmNfcnVuX2luX21haW5fdGhyZWFkXzQAogQrX2Vtc2NyaXB0ZW5fYWxsb3dfbWFpbl9ydW50aW1lX3F1ZXVlZF9jYWxscwMHKGVtc2NyaXB0ZW5fcnVuX2luX21haW5fcnVudGltZV90aHJlYWRfanMApAQeZW1zY3JpcHRlbl9kaXNwYXRjaF90b190aHJlYWRfAKYEHF9lbXNjcmlwdGVuX3RocmVhZF9mcmVlX2RhdGEAsgQXX2Vtc2NyaXB0ZW5fdGhyZWFkX2V4aXQAswQIbWVtYWxpZ24AxwQbZW1zY3JpcHRlbl9zdGFja19zZXRfbGltaXRzANMECXN0YWNrU2F2ZQDYBAxzdGFja1Jlc3RvcmUA2QQKc3RhY2tBbGxvYwDaBBBkeW5DYWxsX2lpamppaWlpANwEDGR5bkNhbGxfamlqaQDdBAgBFgmyBAEAQQELpwIXGJEClwL/AYUCKCkukwKaAjZERUaUApwCS0xTVFVXWFlcXV5gYWJlaGpsb3B0dYICiAJ7ZZUCnQKBAYIBaoQBiAGJAYoBgQKHAo4BjwGSAZICmQKeAZYCngKDAokCpwGoAawBassBwQHDAcQB0QHUAd0B5QHfAeEB4gHnAewB6gHtAfUB+wL4AokDhgPxAvIC/wKAA/wC+QKKA4cD8wKBA/0C+gKLA4gD9ALHAoID9QL2AoMDhAP3AuUC5ALjAusC4gLqAuEC6QLgAugC3wLnAt4C5gKFA+4C8AKPA5ED2wLdAo0DwgPEA8cDzgOTA+0C7wKOA5AD2gLcAowDwQPDA8YDzwOSA8wCzQPMA8oDywLTA88CyALFA80CygLSA/4C2ALZAtcCxQLGAssD0APJAtQD0QPOApYDyQO3A78DvAOxA64DrAOqA6gDpgO0A6MDoAOdA5oDmAPIA7YDvgO7A7ADrQOrA6kDpwOlA7MDogOfA5wDmQOXA54DmwO1A6QDoQOyA68DuAPAA70DuQO6A9YC0ALRAuwC0gKUA5UD0wLUAtUD1gPUAtwD1QLbA9oD2QPYA9cD3QOzArQCrwKwArECsgK4ArcCxALDAsICvgLBAsACqAKnAqsCrAKpAqoCrQK8Ar8CrgK2AqYCtQK7AroCuQKfAqACoQKiAqEC3wPgA+ED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cHEhAiAIIBVqISYgACAEKAIIQQJ0aigCACINIAhsISkgACABQQJ0aigCACIYIA1sIAhsISogCEEQayIfQQR2QQFqIgBB/v///wFxIRAgAEEBcSEgQQAhGwNAIBgEQCAYIBtsIRwgJiAbIB1sIh5qISEgFSAeaiErICYgGyAqbCIAaiEsIAAgFWohLUEAIRMDQCANBEAgEyAcaiANbCEFIAYgE2wiACAeaiERIAAgIWohIiAAICtqISMgLCATIClsIgBqISQgACAtaiElQQAhDANAAkAgCEUNACAFIAxqIAhsIQQgESAMIA9sIgFqIQNBACEAAkAgFEUNACAaICUgCCAMbCIJamogGSABICJqakkgGSABICNqaiAaIAkgJGpqSXENAEEAIQEgH0EQTwRAA0AgDiAAIARqaiALIAMgACAHbGpq/QAAAP0LAAAgDiAAQRByIgkgBGpqIAsgAyAHIAlsamr9AAAA/QsAACAAQSBqIQAgAUECaiIBIBBHDQALCyAgBEAgDiAAIARqaiALIAMgACAHbGpq/QAAAP0LAAALIAIiACAIRg0BCyAAQQFyIQEgFgRAIA4gACAEamogCyADIAAgB2xqai0AADoAACABIQALIAEgCEYNAANAIA4gACAEamogCyADIAAgB2xqai0AADoAACAOIABBAWoiASAEamogCyADIAEgB2xqai0AADoAACAAQQJqIgAgCEcNAAsLIAxBAWoiDCANRw0ACwsgE0EBaiITIBhHDQALCyAbQQFqIhsgKEcNAAsMAQtBASEPIAooAgAiASgCBCEEIAAoAgQhCSAAKAIIIgMhHEEBIQcCQAJAIAEoAgAiCEEBRg0AQQEhHCADQQEgBEEBRiIHGyEPQQEgAyAHGyEHIAgNACADIAlsIRwMAQsgDyADIAlsIgMgBBshDyADIAcgBBshBwsgACAIQQJ0aigCACIeRQ0AIAdBAUYgACABKAIIQQJ0aigCACIIQQ9LcSEUIAhBAXEhFiAIQXBxIQIgCCAVaiEYIAAgBEECdGooAgAiDSAIbCEhIAhBEGsiH0EEdkEBaiIAQf7///8BcSEQIABBAXEhIEEAIRMDQCANBEAgDSATbCERIBggEyAcbCIFaiEiIAUgFWohIyAYIBMgIWwiAGohJCAAIBVqISVBACEMA0ACQCAIRQ0AIAwgEWogCGwhBCAM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AgggAyAAIAAgAygCACICRhshACACKAIEIQMLAkACQAJAAkAgAygCACICBEAgAi0ADEUNAQsgAygCBCIBBEAgAS0ADEUNAgsgA0EAOgAMAkAgACADKAIIIgNGBEAgACEDDAELIAMtAAwNBgsgA0EBOgAMDwsgAygCBCIBRQ0BCyABLQAMDQAgAyECDAELIAJBAToADCADQQA6AAwgAyADKAIAIgIoAgQiADYCACAABEAgACADNgIICyACIAMoAgg2AgggAygCCCIAIAAoAgAgA0dBAnRqIAI2AgAgAiADNgIEIAMgAjYCCAsgAiACKAIIIgMtAAw6AAwgA0EBOgAMIAIoAgRBAToADCACKAIIIgMgAygCBCICKAIAIgA2AgQgAARAIAAgAzYCCAsgAiADKAIINgIIIAMoAggiACAAKAIAIANHQQJ0aiACNgIAIAIgAzYCACADIAI2AggPCyACQf8BcUUEQCADQQE6AAwgAUEAOgAMIAMoAggiAiACKAIAIgEoAgQiBDYCACAEBEAgBCACNgIICyABIAIoAgg2AgggAigCCCIEIAQoAgAgAkdBAnRqIAE2AgAgASACNgIEIAIgATYCCCADIAAgACADKAIEIgJGGyEAIAIoAgAhAwsCQAJAIAMoAgAiAkUNACACLQAMDQAgAyECDAELAkAgAygCBCIBBEAgAS0ADEUNAQsgA0EAOgAMIAMoAggiAy0ADEEAIAAgA0cbDQIgA0EBOgAMDwsgAgR/IAItAAxFBEAgAyECDAILIAMoAgQFIAELQQE6AAwgA0EAOgAMIAMgAygCBCICKAIAIgA2AgQgAARAIAAgAzYCCAsgAiADKAIINgIIIAMoAggiACAAKAIAIANHQQJ0aiACNgIAIAIgAzYCACADIAI2AggLIAIgAigCCCIDLQAMOgAMIANBAToADCACKAIAQQE6AAwgAigCCCIDIAMoAgAiAigCBCIANgIAIAAEQCAAIAM2AggLIAIgAygCCDYCCCADKAIIIgAgACgCACADR0ECdGogAjYCACACIAM2AgQgAyACNgIIDwsgAygCCCICIAIoAgAgA0ZBAnRqKAIAIQMMAAsACyAEQQE6AAwLC+UkAxF/BXsFfSMAQYABayIHJAAgABAZIQAgARAZKAIAIQwgACgCACEVIAAoAgQhACAHQgA3A1ggB/0MAAAAAAAA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ACAEIANwIQQLIAQgBUYNAQwECyACKAIIIABGDQELIAIoAgAiAg0BDAILCyACKAIMIgcgAigCECIKRwRAQcitASgCACECA0ACf0EAIAIiBkUNABogBygCCCEIIAcoAgQhBSAHKAIAIQRByK0BIQMDQAJAAkAgAigCECIAIARJDQACQCAAIARLDQAgAigCFCIAIAVJDQEgACAFSw0AIAIoAhggCE8NACACQQRqIQIMAgsgAiEDDAELIAJBBGohAgsgAigCACICDQALIAYgA0HIrQFGDQAaIAYgAygCECICIARLDQAaAkAgAiAESQ0AIAYgAygCFCICIAVLDQEaIAIgBUkNACAGIAggAygCGEkNARoLIAMoAhwQowJBiKwBQYisASgCAEEBazYCACAHIQACQEHIrQEoAgAiBkUNACAAKAIIIQggACgCBCEFIAAoAgAhA0HIrQEhAiAGIQADQAJAAkAgACgCECIEIANJDQACQCADIARJDQAgACgCFCIEIAVJDQEgBCAFSw0AIAAoAhggCE8NACAAQQRqIQAMAgsgACECDAELIABBBGohAAsgACgCACIADQALIAJByK0BRg0AIAMgAigCECIASQ0AAkAgACADSQ0AIAUgAigCFCIASQ0BIAAgBUkNACAIIAIoAhhJDQELAkAgAigCBCIARQRAIAIoAggiAygCACACRg0BIAJBCGohBANAIAQoAgAiAEEIaiEEIAAgACgCCCIDKAIARw0ACwwBCwNAIAAiAygCACIADQALCyACQcStASgCAEYEQEHErQEgAzYCAAtBzK0BQcytASgCAEEBazYCACAGIAIQzQEgAhDJBAtByK0BKAIACyECIAdBDGoiByAKRw0ACwsgASAJQQxqECELIAlBEGokAAsQAEH4rQFB/K0BKAIAEJ8BC8cEAQV/IwBBIGsiBSQAIAIQGSgCACEGIAVBADYCHAJAAkACQAJAAkBB/K0BKAIAIgJFDQBB/K0BIQMDQCACIAMgAigCECIEGyEDIAIgBEVBAnRqKAIAIgINAAsgA0H8rQFGDQAgAygCEEECSQ0BCyAFQRxqIQQjAEHwAGsiAyQAQQIhAgJAQZC3ASgCACICBEAgA0MAAIA/QwAAgD9DAACAPyACERkAC0EBQQFBAUEAIANB8ABBJUGMtwEoAgAgBBCPAiECCyADQfAAaiQAIAIE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bGogACgCNCAAKAI4IABBQGsgACgCUBELACAMJAALPwAgACgCECAAKAIUIAAoAgAgACgCDCABbGogACgCCCAAKAIEIAAoAhggACgCHCABbGogAEEgaiAAKAJQEQ4AC24BB38gACgCACECIAAoAgwhAyAAKAIYIQQgACgCHCEFIwAiBiAAKAIUIgdBAnRBzwBqQXBxayIIJAAgACgCECAHIAIgASADbGogACgCCCAAKAIEIAggBCABIAVsaiAAQSBqIAAoAlARBwAgBiQAC1gAIAMgACgCACIDIAAoAgQgAkEEdGogACgCCCAAKAIMIAFsaiAAKAIQIAIgACgCIHRqIAAoAhQgAiAAKAIYIgJsaiAAKAIcIAFsaiACIANrIAAoAiQRDgALOgAgAiAAKAIAIAAoAgQgACgCCCICIAFsaiACIAAoAgwgACgCECABIAAoAhQiAWxqIAEgACgCGBEOAAulAgIBewJ/IwBBEGsiCCQAIAAoAhggACgCLCABbGogACgCKCACbGogACgCJCADbGogACgCICAEbGogACgCHCAFbGohBwJAAkAgACgCYCABIAAoAkRrTQ0AIAX9ESAE/RwBIAP9HAIgAv0cAyAA/QACNP2xASAA/QACUP06Igb9GwBBAXEgBv0bAUEBcUEBdHIgBv0bAkEBcUECdHIgBv0bA0EDdHJBD3FBD0cNAEEBIAAoAkwgACgCMCAAKAJIIAAoAgAgACgCFCABbGogACgCECACbGogACgCDCADbGogACgCCCAEbGogACgCBCAFbGpBACAHQQAgACgCaCAAKAJsEQwADAELQQEgACgCZCAHQQAgACgCaCAAKAJwEQIACyAIQRBqJAALrwEAIAAoAkggACgCACAAKAIEIAFsaiAAKAIIIAJsaiAAKAIMIANsaiAAKAIQIARsaiAAKAIUIAVsaiAAKAIYIAAoAhwgAWxqIAAoAiAgAmxqIAAoAiQgA2xqIAAoAiggBGxqIAAoAiwgBWxqIAAoAjAgACgCNCABbGogACgCOCACbGogACgCPCADbGogAEFAaygCACAEbGogACgCRCAFbGogAEHQAGogACgCiAERAgALtAEBBX8gAEEYaiEEIAAoAgwgACgCECIFIAFsaiEDIAAoAgQgACgCCCIGIAFsaiEBIAJBAXEEfyAAKAIAIAEgAyAEIAAoAhQRBQAg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ACEFIAIgAf0AABAiByAEIAcgBv1OIgf95AEgBP3lAf0M/////////////////////yIJIAggBCAH/UX9Uv1S/QsAECACIAUgBCAFIAb9TiIH/eQBIAT95QEgCSAIIAQgB/1F/VL9Uv0LAAAgAkEgaiECIAFBIGohASAAQSBrIgBBH0sNAAsLAkAgAEEQSQRAIAAhAwwBCyAAQRBrIgNBEHFFBEAgAiAB/QAAACIFIAQgBSAG/U4iBf3kASAE/eUB/Qz/////////////////////IAggBCAF/UX9Uv1S/QsAACACQRBqIQIgAUEQaiEBIAMhAAsgA0EQSQ0AIAAhAwNAIAIgAf0AAAAiBSAEIAUgBv1OIgX95AEgBP3lAf0M/////////////////////yIHIAggBCAF/UX9Uv1S/QsAACACIAH9AAAQIgUgBCAFIAb9TiIF/eQBIAT95QEgByAIIAQgBf1F/VL9Uv0LABAgAkEgaiECIAFBIGohASADQSBrIgNBD0sNAAsLAkAgA0UNACAB/QAAACIFIAQgBSAG/U4iBv3kASAE/eUB/Qz/////////////////////IAggBCAG/UX9Uv1SIQQgA0EIcQRAIAIgBP0hADkDACAEIAT9DQgJCgsMDQ4PCAkKCwwNDg8hBCACQQhqIQILIANBBHFFDQAgAiAE/R8AOAIACwvzBQEIeyAD/QADACAD/QADCCAE/Q0AAQIDBAUGBwABAgMEBQYHIgT9DQABAgMEBQYHAAECAwQFBgciCP1NIQkgA/0KAxAhCiAAQR9LBEADQCAB/QAAACEHIAIgAf0AABAiBSAEIAUgCf1OIgv95AEgBP3lAf0M/////////////////////yIGIAggBCAL/UX9Uv1SIgsgCiAL/eQBIAYgCCAFIAv9Rf1S/VL9CwAQIAIgByAEIAcgCf1OIgX95AEgBP3lASAGIAggBCAF/UX9Uv1SIgUgCiAF/eQBIAYgCCAHIAX9Rf1S/VL9CwAAIAJBIGohAiABQSBqIQEgAEEgayIAQR9LDQALCwJAIABBEEkEQCAAIQMMAQsgAEEQayIDQRBxRQRAIAIgAf0AAAAiByAEIAcgCf1OIgb95AEgBP3lAf0M/////////////////////yIFIAggBCAG/UX9Uv1SIgYgCiAG/eQBIAUgCCAH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AA0HIBNFDQJBASEBA0AgBCABQQJ0aigCACILBEAgAyABQQR0aiALIAIQ8gNBASEMIAFBAWoiAUEKRw0BDAkLC0EBIQwgAUEKTw0HA0AgBCABQQJ0aigCAA0BIAFBAWoiAUEKRw0ACwwHC0EcIQoMBAsgCiAJayIOIAggCCAOSBsiCEH/////ByANa0oNAkE9IQogCCANaiIGIA8gBiAPShsiASALSg0DIABBICABIAYgBxD0AyAAIBAgDRDwAyAAQTAgASAGIAdBgIAEcxD0AyAAQTAgCCAOQQAQ9AMgACAJIA4Q8AMgAEEgIAEgBiAHQYDAAHMQ9AMMAQsLQQAhDAwDC0E9IQoLEPgDIAo2AgALQX8hDAsgBUHgAGokACAMC7gBAQN/IAAtAABBIHFFBEACQCACIAAiAygCECIEBH8gBAUgAxD5Aw0BIAMoAhALIAMoAhQiBWtLBEAgAyABIAIgAygCJBENABoMAQsCQCADKAJQQQBIDQAgAiEAA0AgACIERQ0BIAEgBEEBayIAai0AAEEKRw0ACyADIAEgBCADKAIkEQ0AIARJDQEgASAEaiEBIAIgBGshAiADKAIUIQULIAUgASACEJcEIAMgAygCFCACajYCFAsLC20BA38gACgCACwAABCYBEUEQEEADwsDQCAAKAIAIQNBfyEBIAJBzJmz5gBNBEBBfyADLAAAQTBrIgEgAkEKbCICaiABQf////8HIAJrShshAQsgACADQQFqNgIAIAEhAiADLAABEJgEDQALIAEL4QYDA34BfwF8IwBBEGsiBiQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAECBQMEBgcICQoLDA0ODxAREgsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADBELIAIgAigCACIBQQRqNgIAIAAgATQCADcDAAwQCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAMDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADA4LIAIgAigCACIBQQRqNgIAIAAgATUCADcDAAwNCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwAMDAsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADAsLIAIgAigCACIBQQRqNgIAIAAgATMBADcDAAwKCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAMCQsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADAgLIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAwHCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAMBgsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMADAULIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAwECyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAMAwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADAILIAIgAigCAEEHakF4cSIBQQhqNgIAIAErAwAhByMAQRBrIgEkAAJ+IAe9IgVC////////////AIMiA0KAgICAgICACH1C/////////+//AFgEQCADQjyGIQQgA0IEiEKAgICAgICAgDx8DAELIANCgICAgICAgPj/AFoEQCAFQjyGIQQgBUIEiEKAgICAgIDA//8AhAwBC0IAIANQDQAaIAEgA0IAIAWnZ0EgaiADQiCIp2cgA0KAgICAEFQbIgJBMWoQzwQgASkDACEEIAEpAwhCgICAgICAwACFQYz4ACACa61CMIaECyEDIAYgBDcDACAGIAMgBUKAgICAgICAgIB/g4Q3AwggAUEQaiQAIAAgBikDCDcDCCAAIAYpAwA3AwAMAQsgACACQaACEQQACyAGQRBqJAALgwECA38BfgJAIABCgICAgBBUBEAgACEFDAELA0AgAUEBayIBIAAgAEIKgCIFQgp+fadBMHI6AAAgAEL/////nwFWIQIgBSEAIAINAAsLIAWnIgIEQANAIAFBAWsiASACIAJBCm4iA0EKbGtBMHI6AAAgAkEJSyEEIAMhAiAEDQALCyABC3EBAX8jAEGAAmsiBSQAAkAgAiADTA0AIARBgMAEcQ0AIAUgAUH/AXEgAiADayICQYACIAJBgAJJIgMbEIgEIANFBEADQCAAIAVBgAIQ8AMgAkGAAmsiAkH/AUsNAAsLIAAgBSACEPADCyAFQYACaiQAC+sDAQV/IwBBoAJrIgMkACADIAI2ApwCIANB8AFqQQBBKPwLACADIAMoApwCNgKYAgJAQQAgASADQZgCaiADQdAAaiADQfABahDvA0EASA0AIAAoAkxBAE4EQAJAIwIoAhAiBiAAIgIoAkxB/////3txRg0AQQEhBCACQcwAaiIFQQAgBv5IAgBFDQAgBUEAIAZBgICAgARyIgb+SAIAIgJFDQADQCACQYCAgIAEciEEAkAgAkGAgICABHFFBEAgBSACIAT+SAIAIAJHDQELIAVBACAEEPoDCyAFQQAgBv5IAgAiAg0AC0EBIQQLIAQhBQsgACgCACEEIAAoAkhBAEwEQCAAIARBX3E2AgALAn8CQAJAIAAoAjBFBEAgAEHQADYCMCAAQQA2AhwgAEIANwMQIAAoAiwhByAAIAM2AiwMAQsgACgCEA0BC0F/IAAQ+QMNARoLIAAgASADQZgCaiADQdAAaiADQfABahDvAwshAiAEQSBxIQEgBwR/IABBAEEAIAAoAiQRDQAaIABBADYCMCAAIAc2AiwgAEEANgIcIAAoAhQaIABCADcDEEEABSACCxogACAAKAIAIAFyNgIAIAVFDQAgAEEA/kECTEGAgICABHEEQCAAQcwAakEBEIcECwsgA0GgAmokAAv0HwISfwJ+IwBBgDxrIggkACAIQQA2AqwCAkAgAkI/iKcEQCACQoCAgICAgICAgH+FIQJBASESQZsIIRQMAQsgBUGAEHEEQEEBIRJBngghFAwBC0GhCEGcCCAFQQFxIhIbIRQgEkUhGAsCQAJ/IAJC////////P4MhGgJ/IAJCMIinQf//AXEiB0H//wFHBEBBBCAHDQEaQQJBAyABIBqEUBsMAgsgASAahFALC0EBTARAIABBICADIBJBA2oiByAFQf//e3EQ9AMgACAUIBIQ8AMgAEHECEGEGiAGQSBxIgkbQcgIQYgaIAkbIAFCAFIgAkL///////////8AgyIZQoCAgICAgMD//wBWIBlCgICAgICAwP//AFEbIAFCAFIgAkL///////////8AgyIZQoCAgICAgMD//wBWIBlCgICAgICAwP//AFEbchtBAxDwAyAAQSAgAyAHIAVBgMAAcxD0AyADIAcgAyAHShshCwwBCyAIQYACaiETIAhB4AFqIAEgAiAIQawCahCWBCAIQdABaiAIKQPgASICIAgpA+gBIgEgAiABEM4EAkACfwJAIAgpA9ABIgIgCCkD2AEiAUIAQgAQ0AQEQCAIIAgoAqwCIgdBAWs2AqwCIAZBIHIiFkHhAEcNAQwDCyAGQSByIhZB4QBGDQIgCCgC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mNqQorW/yAx9IgRCAFMNACAEIgNCAFINACAARAAAAAAAAAAAog8LIANCAYYhAyABQQFrIgEgAkoNAAsgAiEBCwJAIANCmNqQorW/yAx9IgRCAFMNACAEIgNCAFINACAARAAAAAAAAAAAog8LAkAgA0L/////////B1YEQCADIQQMAQsDQCABQQFrIQEgA0KAgICAgICABFQhAiADQgGGIgQhAyACDQALCyABQQBKBH4gBEKAgICAgICACH0gAa1CNIaEBSAEQQEgAWutiAsgBUKAgICAgICAgIB/g4S/C8IBAQN/IwBBIGsiBCQAAkAgAkIwiKciBkH//wFxIgVB//8BRg0AIAVFBEAgAyABIAJCAEIAENAEBH8gBCABIAJCgICAgICAwLvAABDSBCAEQRBqIAQpAwAgBCkDCCADEJYEIAQpAxghAiAEKQMQIQEgAygCAEH4AGsFQQALNgIADAELIAMgBUH+/wBrNgIAIAJC////////P4MgBkGAgAJxQf7/AHKtQjCGhCECCyAAIAE3AwAgACACNwMIIARBIGokAAv9AwECfyACQYAETwRAIAAgASACEAQaDwsgACACaiEDAkAgACABc0EDcUUEQAJAIABBA3FFBEAgACECDAELIAJFBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICQQNxRQ0BIAIgA0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIASw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgAE0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsLCgAgAEEwa0EKSQuhAQEDfyMBLQAARQRAIwFBAToAAEGcvQEQtQQCQCMCEJoEIgBFBEBBnL0BELcEDAELIAAoAggiASAAKAIMRwRAA0BBnL0BELcEIAAoAgQgAUEDdGoiAigCBCACKAIAEQAAQZy9ARC1BCAAIAFBAWpBgAFvIgE2AgggASAAKAIMRw0ACwtBnL0BELcEIABBCGpB/////wcQhwQLIwFBADoAAAsLLAEBf0G4vQEoAgAiAQRAA0AgACABKAIARgRAIAEPCyABKAIQIgENAAsLQQALFQAgAARAIAAoArgBEMkECyAAEMkECwYAQay8AQvgAgEGf0GsvAEgACAAQQFGGyIEQQJHIAQjAkdxRQRAIAEQngRBAQ8LQZy9ARC1BCAEIgAQmgQiA0UEQEEUEMgEIgNCADcCDCADQgA3AgQgAyAANgIAQbi9ASgCACIABH8DQCAAIgIoAhAiAA0ACyACQRBqBUG4vQELIAM2AgALIAMiACgCBCICRQRAIABBgAgQyAQiAjYCBAsCQAJAIAAoAgwiA0EBakGAAW8iBSAAKAIIIgZGBEAgAEEIaiEHIARBrLwBRyECA0BBnL0BELcEIAINAiAHIAVEAAAAAAAA8H8QhQQaQZy9ARC1BCAAKAIMIgNBAWpBgAFvIgUgACgCCCIGRg0ACyAAKAIEIQILIAIgA0EDdGoiAiABNgIEIAJBoQI2AgACQCADIAZHDQAgBEGsvAEQBQ0AIAEQmwRBnL0BELcEDAILIAAgBTYCDEGcvQEQtwQMAQsgARCbBAtBAAufDgEBfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAiAUH////vAEwEQCABQaeAgDBMBEAgAUH///8fTARAAkAgAUGAgIAQaw4DBRwGAAsgAUGAgICKeEYNAyABDRsgACgCBBEPAAwbCyABQf///y9MBEAgAUGIgIAgaw4DBxsIBgsgAUGAgIAwRg0IIAFBoICAMEcNGiAAKAIQIAAoAhggACoCICAAKAIEESMADBoLIAFBp4GAwABMBEACQCABQaiAgDBrDgMKGwsACyABQYCAgMAARg0LIAFBoICAwABHDRogACgCECAAKAIYIAAqAiAgACgCKCAAKAIEERwADBoLIAFBp4WA0ABMBEAgAUGogYDAAGsOAwwaDQ4LIAFBqIWA0ABGDQ4gAUGAgIDgAEcNGSAAKAIQIAAoAhggACgCICAAKAIoIAAoAjAgACgCOCAAKAIEEQoADBkLIAFB////rwJMBEAgAUH///+vAUwEQCABQf///48BTARAIAFBgICA8ABGDREgAUGAgICAAUcNGyAAKAIQIAAoAhggACgCICAAKAIoIAAoAjAgACgCOCAAKAJAIAAoAkggACgCBBEHAAwbCyABQYCAgJABRg0RIAFBgICAoAFHDRogACgCECAAKAIYIAAoAiAgACgCKCAAKAIwIAAoAjggACgCQCAAKAJIIAAoAlAgACgCWCAAKAIEEQYADBoLIAFB////jwJMBEAgAUGAgICwAUYNEiABQYCAgIACRw0aIAAgACgCBBERADYCsAEMGgsgAUGAgICQAkYNEiABQYCAgKACRg0TIAFBgICAqQJHDRkgACAAKAIQIAAoAhgQBjYCsAEMGQsgAUH////PAkwEQCABQf///78CTARAIAFBgICAsAJGDRUgAUGAgMC5AkcNGiAAIAAoAhAgACgCGCAAKAIgEAc2ArABDBoLIAFBgICAwAJGDRUgAUGAgIDIAkcNGSAAIAAoAhAgACgCGCAAKAIgIAAoAigQCDYCsAEMGQsgAUH////vAkwEQCABQYCAgNACRg0WIAFBgICA4AJHDRkgACAAKAIQIAAoAhggACgCICAAKAIoIAAoAjAgACgCOCAAKAIEEUgANgKwAQwZCyABQYCAgPACRg0WIAFBgICAgANGDRcgAUGAgICQA0cNGCAAIAAoAhAgACgCGCAAKAIgIAAoAiggACgCMCAAKAI4IAAoAkAgACgCSCAAKAJQIAAoAgQRFQA2ArABDBgLIAAgACgCBCAAKAIQIABBGGoQCTkDsAEMFwsgACgCECAAKAIEEQAADBYLIAAqAhAgACgCBBFJAAwVCyABQYCAgCBHDRQgACgCECAAKAIYIAAoAgQRBAAMFAsgACgCECAAKgIYIAAoAgQRGgAMEwsgACoCECAAKgIYIAAoAgQRSgAMEgsgACgCECAAKAIYIAAoAiAgACgCBBEBAAwRCyAAKAIQIAAqAhggACoCICAAKAIEERIADBALIAAqAhAgACoCGCAAKgIgIAAo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6MUBKQMAQgEgAa2GhDcDACAAIAJBCGoiAjYCACACQXxxIABqQQRrIAI2AgAMAQsgACABakEEayABNgIACyAAQQRqBSADCwsJACAAIAEQxQQLCQBBCCAAEMUEC4MDAQR/IAAEQCAAQQRrIQNBAEEB/kMA3L0BBEADQEHcvQEtAAANAEEAQQH+QwDcvQENAAsLIAMoAgAiBCEBIAMhAiAAQQhrKAIAIgAgAEF+cSIARwRAIAMgAGsiAigCBCIBIAIoAgg2AgggAigCCCABNgIEIAAgBGohAQsgAyAEaiIAKAIAIgMgACADakEEaygCAEcEQCAAKAIEIgQgACgCCDYCCCAAKAIIIAQ2AgQgASADaiEBCyACIAE2AgAgAUF8cSACakEEayABQQFyNgIAIAICfyACKAIAQQhrIgFB/wBNBEAgAUEDdkEBawwBCyABZyEAIAFBHSAAa3ZBBHMgAEECdGtB7gBqIAFB/x9NDQAaIAFBHiAAa3ZBAnMgAEEBdGtBxwBqIgFBPyABQT9JGwsiAUEEdCIAQeC9AWo2AgQgAiAAQei9AWoiACgCADYCCCAAIAI2AgAgAigCCCACNgIEQejFAUHoxQEpAwBCASABrYaENwMAQdy9AUEA/hkAAAsLBwAgABDJBAsoAQF/QRYhAyABQQNxBH8gAwUgACABIAIQxQQiATYCAEEAQQwgARsLCwQAQQALBABCAAvNCQIDfgR/IwBB8ABrIggkACAEQv///////////wCDIQYCQAJAIAFQIgkgAkL///////////8AgyIFQoCAgICAgMD//wB9QoCAgICAgMCAgH9UIAVQG0UEQCADQgBSIAZCgICAgICAwP//AH0iB0KAgICAgIDAgIB/ViAHQoCAgICAgMCAgH9RGw0BCyAJIAVCgICAgICAwP//AFQgBUKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEEIAEhAwwCCyADUCAGQoCAgICAgMD//wBUIAZCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhBAwCCyABIAVCgICAgICAwP//AIWEUARAQoCAgICAgOD//wAgAiABIAOFIAIgBIVCgICAgICAgICAf4WEUCIJGyEEQgAgASAJGyEDDAILIAMgBkKAgICAgIDA//8AhYRQDQEgASAFhFAEQCADIAaEQgBSDQIgASADgyEDIAIgBIMhBAwCCyADIAaEUEUNACABIQMgAiEEDAELIAMgASABIANUIAUgBlQgBSAGURsiChshBSAEIAIgChsiBkL///////8/gyEHIAIgBCAKGyICQjCIp0H//wFxIQsgBkIwiKdB//8BcSIJRQRAIAhB4ABqIAUgByAFIAcgB1AiCRt5IAlBBnStfKciCUEPaxDPBEEQIAlrIQkgCCkDaCEHIAgpA2AhBQsgASADIAobIQMgAkL///////8/gyEEIAtFBEAgCEHQAGogAyAEIAMgBCAEUCIKG3kgCkEGdK18pyIKQQ9rEM8EQRAgCmshCyAIKQNYIQQgCCkDUCEDCyAEQgOGIANCPYiEQoCAgICAgIAEhCEEIAdCA4YgBUI9iIQhASACIAaFIQICfiADQgOGIgMgCSALayIKRQ0AGiAKQf8ASwRAQgAhBEIBDAELIAhBQGsgAyAEQYABIAprEM8EIAhBMGogAyAEIAoQ0QQgCCkDOCEEIAgpAzAgCCkDQCAIKQNIhEIAUq2ECyEDIAFCgICAgICAgASEIQcgBUIDhiEBAkAgAkIAUwRAIAEgA30iBSAHIAR9IAEgA1StfSIEhFAEQEIAIQNCACEEDAMLIARC/////////wNWDQEgCEEgaiAFIAQgBSAEIARQIgobeSAKQQZ0rXynQQxrIgoQzwQgCSAKayEJIAgpAyghBCAIKQMgIQUMAQsgASADfCIFIANUrSAEIAd8fCIEQoCAgICAgIAIg1ANACAFQgGDIARCP4YgBUIBiISEIQUgCUEBaiEJIARCAYghBAsgBkKAgICAgICAgIB/gyEBIAlB//8BTgRAIAFCgICAgICAwP//AIQhBEIAIQMMAQtBACEKAkAgCUEASgRAIAkhCgwBCyAIQRBqIAUgBCAJQf8AahDPBCAIIAUgBEEBIAlrENEEIAgpAwAgCCkDECAIKQMYhEIAUq2EIQUgCCkDCCEECyAEQj2GIAVCA4iEIgMgAyAFp0EHcSIJQQRLrXwiBVatIARCA4hC////////P4MgCq1CMIaEIAGEfCEEAkACQCAJQQRHBEAgBSEDDAELIAQgBUIBgyIBIAV8IgMgAVStfCEEDAELIAlFDQELCyAAIAM3AwAgACAENwMIIAhB8ABqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgL2wECAX8CfkEBIQQCQCAAQgBSIAFC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBRGw0AIAJCAFIgA0L///////////8AgyIGQoCAgICAgMD//wBWIAZCgICAgICAwP//AFEbDQAgACAChCAFIAaEhFAEQEEADwsgASADg0IAWQRAQX8hBCAAIAJUIAEgA1MgASADURsNASAAIAKFIAEgA4WEQgBSDwtBfyEEIAAgAlYgASADVSABIANRGw0AIAAgAoUgASADhYRCAFIhBAsgBAtQAQF+AkAgA0HAAHEEQCACIANBQGqtiCEBQgAhAgwBCyADRQ0AIAJBwAAgA2uthiABIAOtIgSIhCEBIAIgBIghAgsgACABNwMAIAAgAjcDCAu5CgIFfxB+IwBB4ABrIgQkACADQv///////z+DIQ0gAiADhUKAgICAgICAgIB/gyEJIAJC////////P4MiDEIgiCEQAkACQCADQjCIp0H//wFxIgVB//8Ba0GBgH5LIAJCMIinQf//AXEiB0H//wFrQYKAfk9xDQAgAVAgAkL///////////8AgyIKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCQwCCyADQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AUXJFBEAgA0KAgICAgIAghCEJQgAhAQwCCyABIApCgICAgICAwP//AIWEUARAIAJQBEBCgICAgICA4P//ACEJQgAhAQwDCyAJQoCAgICAgMD//wCEIQlCACEBDAILIAJCgICAgICAwP//AIVQBEAgASAKhCECQgAhASACUARAQoCAgICAgOD//wAhCQwDCyAJQoCAgICAgMD//wCEIQkMAgsgASAKhFAEQEIAIQEMAgsgAlAEQEIAIQEMAgsgCkL///////8/WARAIARB0ABqIAEgDCABIAwgDFAiBht5IAZBBnStfKciBkEPaxDPBEEQIAZrIQYgBCkDWCIMQiCIIRAgBCkDUCEBCyACQv///////z9WDQAgBEFAa0IAIA1CACANIA1QIggbeSAIQQZ0rXynIghBD2sQzwQgBiAIa0EQ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ACABIAKtIAOtQiCGhCAErSAFrUIghoQgBiAHIAggCSAAER0ACyIBAX4gASACrSADrUIghoQgBCAAER8AIgVCIIinEBMgBacLC5igAQ4BoicALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABfX25leHRfcHJpbWUgb3ZlcmZsb3cAbmFuAGluZgBBcmdtYXggZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAE1heCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3BhcnNlRmlsbEVtcHR5Um93cyBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQARXhwIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTdGVwIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTcGFyc2VTZWdtZW50UmVkdWN0aW9uIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABNaW4gZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFN1bSBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAUHJvZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQATGVha3lSZWx1IGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABBYnMgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAE5lZyBmb3IgdGVuc29yIGlkcyAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3F1YXJlIGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABSb3VuZCBmb3IgdGVuc29yIGlkcyAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAUmVsdTYgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFBvdyBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAERpdiBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAE11bCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFNxdWFyZWREaWZmZXJlbmNlIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAQWRkIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3ViIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU2NhdHRlciBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABHYXRoZXIgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAVHJhbnNwb3NlIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFRpbGUgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAR2F0aGVyTmQgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAQWRkTiBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQARmxvb3JEaXYgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQATWF4aW11bSBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABNaW5pbXVtIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGR0eXBlICVkAEN1bXN1bSBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQAQ3VtcHJvZCBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQAVG9wSyBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQATm90RXF1YWwgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC5VbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExlc3NFcXVhbCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLlVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQAR3JlYXRlckVxdWFsIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMb2dpY2FsTm90IGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMZXNzIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQATG9naWNhbFhvciBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAEdyZWF0ZXIgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMb2dpY2FsT3IgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABFcXVhbCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExvZ2ljYWxBbmQgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABOQU4ASU5GAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9jb25zdGFudF9wYWRfbmRfeDMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9jb25zdGFudF9wYWRfbmRfeDMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwXypfbmRfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV8qX25kX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9yZXNpemVfYmlsaW5lYXIyZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfcmVzaXplX2JpbGluZWFyMmRfbmh3Y19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfY29udm9sdXRpb24yZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfY29udm9sdXRpb24yZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9tYXhfcG9vbGluZzJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2F2ZXJhZ2VfcG9vbGluZzJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3NvZnRtYXhfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9zb2Z0bWF4X25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9wcmVsdV9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX3ByZWx1X25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9lbHVfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9lbHVfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2NsYW1wX25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfY2xhbXBfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3NpZ21vaWRfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9zaWdtb2lkX25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9mdWxs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AP//////////AAAAAAAAAAAAAAAAAAAAABQBeP//AQAK////////////Af8B/wAAAAAAAAH/Af8B/wAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAAf8B/wEAAAABAAAAAf//////AAAAAAH///8AAAAA/////////////ygACv//////AQAK/////wD//////////wGqAwH/Af///wEA//////////////////8K//////8AAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAAAAUAAAAHAAAACwAAAA0AAAARAAAAEwAAABcAAAAdAAAAHwAAACUAAAApAAAAKwAAAC8AAAA1AAAAOwAAAD0AAABDAAAARwAAAEkAAABPAAAAUwAAAFkAAABhAAAAZQAAAGcAAABrAAAAbQAAAHEAAAB/AAAAgwAAAIkAAACLAAAAlQAAAJcAAACdAAAAowAAAKcAAACtAAAAswAAALUAAAC/AAAAwQAAAMUAAADHAAAA0wAAAAEAAAALAAAADQAAABEAAAATAAAAFwAAAB0AAAAfAAAAJQAAACkAAAArAAAALwAAADUAAAA7AAAAPQAAAEMAAABHAAAASQAAAE8AAABTAAAAWQAAAGEAAABlAAAAZwAAAGsAAABtAAAAcQAAAHkAAAB/AAAAgwAAAIkAAACLAAAAjwAAAJUAAACXAAAAnQAAAKMAAACnAAAAqQAAAK0AAACzAAAAtQAAALsAAAC/AAAAwQAAAMUAAADHAAAA0QAAAAFkAQAAAAgAAAABAAAAAAAAAAUAAAAAAAAAAAAAACMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQBAAAlAQAA1F4AAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAD//////////wFZsFQAAAAAAAAFAAAAAAAAAAAAAAAmAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAQAAJwEAAPhiAAAABAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA/////woBCEhVAAAAZ1AA"); + } + }); + + // src/tfjs-backend-wasm-simd.wasm + var tfjs_backend_wasm_simd_exports = {}; + __export(tfjs_backend_wasm_simd_exports, { + default: () => tfjs_backend_wasm_simd_default + }); + var tfjs_backend_wasm_simd_default; + var init_tfjs_backend_wasm_simd = __esm({ + "src/tfjs-backend-wasm-simd.wasm"() { + tfjs_backend_wasm_simd_default = __toBinary("AGFzbQEAAAABvwVKYAN/f38AYAV/f39/fwBgAX8AYAR/f39/AGACf38AYAJ/fwF/YAp/f39/f39/f39/AGAIf39/f39/f38AYAZ/f39/f38AYAx/f39/f39/f39/f38AYAF/AX9gBX9/f39/AX9gCX9/f39/f39/fwBgA39/fwF/YAd/f39/f39/AGALf39/f39/f39/f38AYAAAYAN/fX0AYAJ9fQF/YAJ9fQF9YAl/f39/f39/f38Bf2AEf39/fwF/YAR9fX9/AX9gAX0BfWAAAX9gBH99fX0AYAF8AXxgAn99AGAHf35+f39/fwF/YAR/fn5/AGATf39/f39/f39/f39/f39/f39/fwBgF39/f39/f39/f39/f39/f39/f39/f31/AGAEf399fwBgDX9/f39/f39/f39/fX8AYAV/fX9/fwBgAXwBfWABfwF8YAF/AX1gA39+fwF+YAV/fn5+fgBgDn9/f39/f39/f39/f39/AGAEf319fwBgG39/f39/f39/f39/f39/f39/f39/f39/f39/fwBgCn9/f39/f39/fX8AYAd/f39/f31/AGARf39/f39/f39/f39/f39/f38AYAV/f399fQF/YAZ/f399fX8Bf2AGf39/fX19AX9gCH9/f39/f31/AGALf39/f399fX1/f38AYAx/f39/f39/f39/f38Bf2AEf31/fwBgD39/f39/f39/f39/f399fwBgA31/fwF9YBh/f39/f39/f39/f39/f39/f39/f39/fX8AYAd/f399fX1/AX9gA39/fQBgBn19f39/fwF/YAd/f39/f39/AX9gA399fwBgAn5/AX9gAnx8AXxgAnx/AX9gA3x8fwF8YAJ9fwF/YAJ/fAF8YAJ/fQF9YAF9AX9gAX4Bf2ACfH8BfGAEfn5+fgF/YAR/fn5+AGAKf39/f39/f39/fwF/AtsBCANlbnYFYWJvcnQAEANlbnYVZW1zY3JpcHRlbl9tZW1jcHlfYmlnAA0Wd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF9jbG9zZQAKFndhc2lfc25hcHNob3RfcHJldmlldzEIZmRfd3JpdGUAFQNlbnYXZW1zY3JpcHRlbl9nZXRfaGVhcF9tYXgAGANlbnYWZW1zY3JpcHRlbl9yZXNpemVfaGVhcAAKA2VudgtzZXRUZW1wUmV0MAACFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfc2VlawALA6IEoAQQAgIKBBACGAACBAQQBAAABAcFBQMAAAECBCgBBQQMAAIEKR4qAAArCAgMHgAHEgUFAAgABxMFLB8fBwcHEgUFBxIFBSAHEgUFBxIFBQAHBQAHBQcFAwItBxMFAAMHEwUHDw8PBwUALi8wBxIFAQIEMQcTBQUAAwcFBQAAAgQGBggyAAAMAQQAAgQDMw4MAAAHBQU0BgcFAwAADgcDBAADABULBRULBTU2DiECAgICNwQKBQABAgQEOAIEAgQ5AgcHBwcHDAMXAgMCBAICIQACBAIAIAIDAgIAAxUEAAAQEAoFBQUFDQUFGBY6FhYWBRQUFBQUBQoVFQIUFgsLCwsLCws7CwsLCwsLBQ0EDQICAAYIAQ4ICAEAAAAAAAAEBAMACAgAAAQABA8MCQYMDAgbGRECAgICAhkCGwICIiI8AwMMDwwPDwYGBgYGBgYGBgYGBgYGBgYDBwcODgYGBgYGBgYGBgYGBgYOCQkJCQkJCQkJCQkJCQwMCQkPDw4OAwMIAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwMDAwMDAwcHAwMDAwMDAwMDAwMDAwgAAAADAQwKBAQEBAQEBAQEBAQEAgoKBwsACgA9AQAcBBgKPgs/QCMjQQ0ADUIkJBpDFyUlF0QXGh0KEBoaF0UTCgoXRgoNJgoFCgUNCgICDScdRx1IJwoNChgCCkkLBAcBcAGkAqQCBQcBAYACgIACBgkBfwFBoMTBAgsHwQprBm1lbW9yeQIAEV9fd2FzbV9jYWxsX2N0b3JzAAgEaW5pdAANF2luaXRfd2l0aF90aHJlYWRzX2NvdW50AA4RZ2V0X3RocmVhZHNfY291bnQADw9yZWdpc3Rlcl90ZW5zb3IAEAxkaXNwb3NlX2RhdGEAEQdkaXNwb3NlABQZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAA0FicwAXA0FkZAAZBEFkZE4AHANBbGwAHQNBbnkAHgZBcmdNYXgAHwdBdmdQb29sACILQmF0Y2hNYXRNdWwAJgRDZWlsACcLQ2xpcEJ5VmFsdWUAKgZDb252MkQAKxNDb252MkRCYWNrcHJvcElucHV0ACwDQ29zAC0EQ29zaAAuDUNyb3BBbmRSZXNpemUALwdDdW1wcm9kADAGQ3Vtc3VtADEMRGVwdGhUb1NwYWNlADIVRGVwdGh3aXNlQ29udjJkTmF0aXZlADMDRWx1ADQFRXF1YWwANQNFeHAAOQ1GbGlwTGVmdFJpZ2h0ADoFRmxvb3IAOwhGbG9vckRpdgA8DkZ1c2VkQmF0Y2hOb3JtAD8LRnVzZWRDb252MkQAQBRGdXNlZERlcHRod2lzZUNvbnYyRABBBkdhdGhlcgBCCEdhdGhlck5kAEMHR3JlYXRlcgBEDEdyZWF0ZXJFcXVhbABICUxlYWt5UmVsdQBMBExlc3MATQlMZXNzRXF1YWwAUQNMb2cAVQpMb2dpY2FsQW5kAFYKTG9naWNhbE5vdABYCUxvZ2ljYWxPcgBZCkxvZ2ljYWxYb3IAWwNNYXgAXQdNYXhQb29sAF8HTWF4aW11bQBgBE1lYW4AYwNNaW4AZAdNaW5pbXVtAGUJTWlycm9yUGFkAGgITXVsdGlwbHkAbANOZWcAbhNOb25NYXhTdXBwcmVzc2lvblYzAG8TTm9uTWF4U3VwcHJlc3Npb25WNABwE05vbk1heFN1cHByZXNzaW9uVjUAcQhOb3RFcXVhbAByBk9uZUhvdAB1BVBhZFYyAHgDUG93AHkFUHJlbHUAfQRQcm9kAH4HUmVhbERpdgB/BFJlbHUAggEFUmVsdTYAgwEOUmVzaXplQmlsaW5lYXIAhgEVUmVzaXplTmVhcmVzdE5laWdoYm9yAIcBB1JldmVyc2UAiAEQUm90YXRlV2l0aE9mZnNldACJAQVSb3VuZACKAQVSc3FydACLAQlTY2F0dGVyTmQAjAEIU2VsZWN0VjIAjQEHU2lnbW9pZACOAQNTaW4AjwEHU29mdG1heACSARNTcGFyc2VGaWxsRW1wdHlSb3dzAJMBDVNwYXJzZVJlc2hhcGUAlAEWU3BhcnNlU2VnbWVudFJlZHVjdGlvbgCVAQRTcXJ0AJYBBlNxdWFyZQCXARFTcXVhcmVkRGlmZmVyZW5jZQCYAQRTdGVwAJsBDFN0cmlkZWRTbGljZQCcAQNTdWIAnQEDU3VtAJ8BA1RhbgCgAQRUYW5oAKEBBFRpbGUAogEEVG9wSwCjAQlUcmFuc2Zvcm0ArwEJVHJhbnNwb3NlALEBDF9GdXNlZE1hdE11bACyAQZt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AwwKCyAHKAIAIQ8gCCgCACEQIAogC2siBEUEQCAJQQA2AmggCUIANwNgQQAhBQwJCyAEQQBIDQxBACEKIAQQogQiBUEAIARBAnUiDkECdCIIEPUDIgAgCGohESAOQQEgDkEBSxsiB0EESQ0DIAdBfHEiCkEEayIIQQJ2QQFqIgNBAXEhEgJAIAhFBEBBACEDDAELIANB/v///wdxIQFBACEDQQAhDQNAIAAgA0ECdCIIaiACIAhq/QACACAIIAxq/QACAP2uASAIIAtq/QACAP2uAf0LAgAgACAIQRByIghqIAIgCGr9AAIAIAggDGr9AAIA/a4BIAggC2r9AAIA/a4B/QsCACADQQhqIQMgDUECaiINIAFHDQALCyASBEAgACADQQJ0IghqIAIgCGr9AAIAIAggDGr9AAIA/a4BIAggC2r9AAIA/a4B/QsCAAsgByAKRw0DDAcLIAcoAgAhDyAIKAIAIRAgCiALayIERQRAIAlBADYCaCAJQgA3A2BBACEFDAYLIARBAEgNC0EAIQogBBCiBCIFQQAgBEECdSIOQQJ0IggQ9QMiACAIaiERIA5BASAOQQFLGyIHQQRJDQMgB0F8cSIKQQRrIghBAnZBAWoiA0EBcSESAkAgCEUEQEEAIQMMAQsgA0H+////B3EhAUEAIQNBACENA0AgACADQQJ0IghqIAIgCGr9AAIAIAggDGr9AAIA/a4BIAggC2r9AAIA/a4B/QsCACAAIAhBEHIiCGogAiAIav0AAgAgCCAMav0AAgD9rgEgCCALav0AAgD9rgH9CwIAIANBCGohAyANQQJqIg0gAUcNAAsLIBIEQCAAIANBAnQiCGogAiAIav0AAgAgCCAMav0AAgD9rgEgCCALav0AAgD9rgH9CwIACyAHIApHDQMMBAsgCSADNgIEIAkgADYCAEHFLCAJEBgMCQsDQCAAIApBAnQiCGogCCALaigCACACIAhqKAIAIAggDGooAgBqajYCACAKQQFqIgogB0cNAAsMBgsDQCAAIApBAnQiCGogCCALaigCACACIAhqKAIAIAggDGooAgBqajYCACAKQQFqIgogB0cNAAsMAwsDQCAAIApBAnQiCGogCCALaigCACACIAhqKAIAIAggDGooAgBqajYCACAKQQFqIgogB0cNAAsLIAkgBBCiBCIINgJgIAkgCCAOQQJ0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IAMLoQQCAX4FfyACKAIEIgcgASgCBCIISSACKAIAIgUgASgCACIGSiAFIAZGGyEJAkAgCCAAKAIESSAGIAAoAgAiCEogBiAIRhtFBEBBACEGIAlFDQEgASkCACEEIAEgAikCADcCACACIAQ3AgBBASEGIAEoAgQgACgCBEkgASgCACIFIAAoAgAiB0ogBSAHRhtBAUcEQCAEQiCIpyEHIASnIQUMAgsgACkCACEEIAAgASkCADcCACABIAQ3AgAgAigCBCEHIAIoAgAhBUECIQYMAQsgACkCACEEIAkEQCAAIAIpAgA3AgAgAiAENwIAIARCIIinIQcgBKchBUEBIQYMAQsgACABKQIANwIAIAEgBDcCAEEBIQYgAigCBCIHIARCIIinIglJIAIoAgAiBSAEpyIISiAFIAhGG0EBRw0AIAEgAikCADcCACACIAQ3AgBBAiEGIAkhByAIIQULIAMoAgQgB0kgAygCACIHIAVKIAUgB0YbQQFGBH8gAikCACEEIAIgAykCADcCACADIAQ3AgAgAigCBCABKAIESSACKAIAIgUgASgCACIDSiADIAVGG0EBRwRAIAZBAWoPCyABKQIAIQQgASACKQIANwIAIAIgBDcCACABKAIEIAAoAgRJIAEoAgAiAiAAKAIAIgVKIAIgBUYbQQFHBEAgBkECag8LIAApAgAhBCAAIAEpAgA3AgAgASAENwIAIAZBA2oFIAYLC6UCAgF+A38gACABIAIgAxCsASEGIAQoAgQgAygCBEkgBCgCACIHIAMoAgAiCEogByAIRhtBAUYEfyADKQIAIQUgAyAEKQIANwIAIAQgBTcCACADKAIEIAIoAgRJIAMoAgAiBCACKAIAIgdKIAQgB0YbQQFHBEAgBkEBag8LIAIpAgAhBSACIAMpAgA3AgAgAyAFNwIAIAIoAgQgASgCBEkgAigCACIDIAEoAgAiBEogAyAERhtBAUcEQCAGQQJqDwsgASkCACEFIAEgAikCADcCACACIAU3AgAgASgCBCAAKAIESSABKAIAIgMgACgCACICSiACIANGG0EBRwRAIAZBA2oPCyAAKQIAIQUgACABKQIANwIAIAEgBTcCACAGQQRqBSAGCwuTBwIIfwJ+QQEhBgJAAkACQAJAAkACQCABIABrQQN1DgYFBQABAgMECyABQQhrIgMoAgQgACgCBEkgAygCACICIAAoAgAiBEogAiAERhtBAUcNBCAAKQIAIQogACADKQIANwIAIAMgCjcCAEEBDwsgACgCDCIEIAFBCGsiAigCBEsgAigCACIFIAAoAggiA0ogAyAFRhshBSAEIAAoAgRJIAMgACgCACIESiADIARGG0UEQCAFRQ0EIAApAgghCiAAIAIpAgA3AgggAiAKNwIAIAAoAgwgACgCBEkgACgCCCIDIAAoAgAiAkogAiADRhtBAUcNBCAAKQIIIQogACAAKQIANwIIIAAgCjcCAEEBDwsgACkCACEKIAUEQCAAIAIpAgA3AgAgAiAKNwIAQQEPCyAAKQIIIQsgACAKNwIIIAAgCzcCACACKAIEIApCIIinSSACKAIAIgMgCqciBEogAyAERhtBAUcNAyAAIAIpAgA3AgggAiAKNwIAQQEPCyAAIABBCGogAEEQaiABQQhrEKwBGkEBDwsgACAAQQhqIABBEGogAEEYaiABQQhrEK0BGkEBDwsgACgCFCIIIAAoAgwiBEkgACgCECIDIAAoAggiAkogAiADRhshBQJAIAQgACgCBCIHSSACIAAoAgAiBEogAiAERhtFBEAgBUUNASAAKQIQIQogACAAKQIIIgs3AhAgACAKNwIIIAunIQMgByAKQiCIp0sgBCAKpyICSCACIARGG0EBRw0BIAAgACkCADcCCCAAIAo3AgAMAQsgACkCACEKIAUEQCAAKQIQIQsgACAKNwIQIAAgCzcCACAKpyEDDAELIAApAgghCyAAIAo3AgggACALNwIAIAggCkIgiKdJIAMgCqciAkogAiADRhtBAUcNACAAKQIQIQsgACAKNwIQIAAgCzcCCCACIQMLIABBGGoiAiABRg0AIABBEGohBgNAAkAgAiIHKAIEIAYoAgRJIAIoAgAiAiADSiACIANGG0EBRgRAIAcpAgAiCkIgiKchCCAKpyEEIAchAgNAAkAgAiAGIgMpAgA3AgAgACADRgRAIAAhAwwBCyADIgJBCGsiBigCBCAISyAGKAIAIgUgBEggBCAFRhsNAQsLIAMgCjcCACAJQQFqIglBCEYNAQsgASAHQQhqIgJGBEBBAQ8FIAcoAgAhAyAHIQYMAgsACwsgB0EIaiABRiEGCyAGC7MIAgt9FH8gABALIQAgARALIQEgDhALKAIAISQgASgCACElIAAo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IAAoAhAgAyAAKAIAbEECdGogACgCHCAAKAIMIARsaiAAKAIwIAJsaiAAKAIgIAMgACgCJCIDbGogACgCNCACbGogACgCPCABbGogBCAAKAJAdGogAyAAKAIoIAAoAhQgACgCLCACbGogACgCOCABbGogACgCGCAAQcgAaiAAKAJEEQkAC4IBACAEIAUgACgCCCAAKAIEIAAoAhAgAiAAKAIAbEECdGogACgCHCAAKAIMIANsaiAAKAIwIAFsaiAAKAIgIAIgACgCJCICbGogACgCNCABbGogAyAAKAJAdGogAiAAKAIoIAAoAhQgACgCLCABbGogACgCGCAAQcgAaiAAKAJEEQkAC3kAIAQgBSAAKAIIIAAoAgQgACgCECACIAAoAgBsQQJ0aiAAKAIcIAAoAgwgA2xqIAAoAiAgAiAAKAIkIgJsaiAAKAI8IAFsaiADIAAoAkB0aiACIAAoAiggACgCFCAAKAI4IAFsaiAAKAIYIABByABqIAAoAkQRCQALZwAgAyAEIAAoAgggACgCBCAAKAIQIAEgACgCAGxBAnRqIAAoAhwgACgCDCACbGogACgCICABIAAoAiQiAWxqIAIgACgCQHRqIAEgACgCKCAAKAIUIAAoAhggAEHIAGogACgCRBEJAAtgACAAKAIoIAAoAiQgACgCACAAKAIIIAJsaiAAKAIUIAAoAhggACgCHCABbGogACgCICACbGogACgCBCAAKAIwIAAoAgwgACgCECABbGogACgCLCAAQThqIAAoAmgRBgALWwAgACgCHCAAKAIgIAAoAiQgACgCACAAKAIEIAJsaiAAKAIIIAAoAgwgAWxqIAAoAhAgACgCFCABbGogACgCGCACbGogACgCKCAAKAIsIABBMGogACgCQBEMAAtgACAAKAIcIAAoAiAgACgCJCAAKAIAIAAoAgQgAmxqIAAoAgggACgCDCABbGogACgCKCAAKAIQIAAoAhQgAWxqIAAoAhggAmxqIAAoAiwgACgCMCAAQThqIAAoAmgRBgALmwEBCn8gACgCGCEDIAAoAhQhBCAAKAIQIQUgACgCACEGIAAoAgQhByAAKAIIIQggACgCDCEJIwAiCiAAKAIkIgtBAnRBzwBqQXBxayIMJAAgACgCHCAAKAIgIAsgBiACIAdsaiAIIAEgCWxqIAAoAiggDCAFIAEgBGxq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IAkgCyAGIAX9Q/1S/eUB/QsAECACQSBqIQIgAUEgaiEBIANBIGsiA0EPSw0ACwsCQCADRQ0AIAH9AAAAIgYgBCAGIAf9TiIH/eQBIAT95QH9DP////////////////////8gCCAEIAf9Rf1S/VIiBCAJ/QwAAAAAAAAAAAAAAAAAAAAAIAYgBP1D/VL95QEhBCADQQhxBEAgAiAE/SEAOQMAIAQgBP0NCAkKCwwNDg8ICQoLDA0ODyEEIAJBCGohAgsgA0EEcUUNACACIAT9HwA4AgALC90EAQZ7IAP9AAMAIAP9AAMIIAT9DQABAgMEBQYHAAECAwQFBgciBP0NAAECAwQFBgcAAQIDBAUGByII/U0hBiAAQR9LBEADQCAB/QAAACEFIAIgAf0AABAiByAEIAcgBv1OIgf95AEgBP3lAf0M/////////////////////yIJIAggBCAH/UX9Uv1S/QsAECACIAUgBCAFIAb9TiIH/eQBIAT95QEgCSAIIAQgB/1F/VL9Uv0LAAAgAkEgaiECIAFBIGohASAAQSBrIgBBH0sNAAsLAkAgAEEQSQRAIAAhAwwBCyAAQRBrIgNBEHFFBEAgAiAB/QAAACIFIAQgBSAG/U4iBf3kASAE/eUB/Qz/////////////////////IAggBCAF/UX9Uv1S/QsAACACQRBqIQIgAUEQaiEBIAMhAAsgA0EQSQ0AIAAhAwNAIAIgAf0AAAAiBSAEIAUgBv1OIgX95AEgBP3lAf0M/////////////////////yIHIAggBCAF/UX9Uv1S/QsAACACIAH9AAAQIgUgBCAFIAb9TiIF/eQBIAT95QEgByAIIAQgBf1F/VL9Uv0LABAgAkEgaiECIAFBIGohASADQSBrIgNBD0sNAAsLAkAgA0UNACAB/QAAACIFIAQgBSAG/U4iBv3kASAE/eUB/Qz/////////////////////IAggBCAG/UX9Uv1SIQQgA0EIcQRAIAIgBP0hADkDACAEIAT9DQgJCgsMDQ4PCAkKCwwNDg8hBCACQQhqIQILIANBBHFFDQAgAiAE/R8AOAIACwvzBQEIeyAD/QADACAD/QADCCAE/Q0AAQIDBAUGBwABAgMEBQYHIgT9DQABAgMEBQYHAAECAwQFBgciCP1NIQkgA/0KAxAhCiAAQR9LBEAD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C0HEugEgCjYCAAtBfyEMCyAFQeAAaiQAIAwLuQEBA38gAC0AAEEgcUUEQAJAIAIgACIDKAIQIgQEfyAEBSADEOsDDQEgAygCEAsgAygCFCIFa0sEQCADIAEgAiADKAIkEQ0AGgwBCwJAIAMoAlBBAEgNACACIQADQCAAIgRFDQEgASAEQQFrIgBqLQAAQQpHDQALIAMgASAEIAMoAiQRDQAgBEkNASABIARqIQEgAiAEayECIAMoAhQhBQsgBSABIAIQ8wMaIAMgAygCFCACajYCFAsLC20BA38gACgCACwAABCDBEUEQEEADwsDQCAAKAIAIQNBfyEBIAJBzJmz5gBNBEBBfyADLAAAQTBrIgEgAkEKbCICaiABQf////8HIAJrShshAQsgACADQQFqNgIAIAEhAiADLAABEIMEDQALIAEL4QYDA34BfwF8IwBBEGsiBiQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAECBQMEBgcICQoLDA0ODxAREgsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADBELIAIgAigCACIBQQRqNgIAIAAgATQCADcDAAwQCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAMDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADA4LIAIgAigCACIBQQRqNgIAIAAgATUCADcDAAwNCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwAMDAsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADAsLIAIgAigCACIBQQRqNgIAIAAgATMBADcDAAwKCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAMCQsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADAgLIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAwHCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAMBgsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMADAULIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAwECyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAMAwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADAILIAIgAigCAEEHakF4cSIBQQhqNgIAIAErAwAhByMAQRBrIgEkAAJ+IAe9IgVC////////////AIMiA0KAgICAgICACH1C/////////+//AFgEQCADQjyGIQQgA0IEiEKAgICAgICAgDx8DAELIANCgICAgICAgPj/AFoEQCAFQjyGIQQgBUIEiEKAgICAgIDA//8AhAwBC0IAIANQDQAaIAEgA0IAIAWnZ0EgaiADQiCIp2cgA0KAgICAEFQbIgJBMWoQmwQgASkDACEEIAEpAwhCgICAgICAwACFQYz4ACACa61CMIaECyEDIAYgBDcDACAGIAMgBUKAgICAgICAgIB/g4Q3AwggAUEQaiQAIAAgBikDCDcDCCAAIAYpAwA3AwAMAQsgACACQaACEQQACyAGQRBqJAALgwECA38BfgJAIABCgICAgBBUBEAgACEFDAELA0AgAUEBayIBIAAgAEIKgCIFQgp+fadBMHI6AAAgAEL/////nwFWIQIgBSEAIAINAAsLIAWnIgIEQANAIAFBAWsiASACIAJBCm4iA0EKbGtBMHI6AAAgAkEJSyEEIAMhAiAEDQALCyABC3IBAX8jAEGAAmsiBSQAAkAgAiADTA0AIARBgMAEcQ0AIAUgAUH/AXEgAiADayICQYACIAJBgAJJIgMbEPUDGiADRQRAA0AgACAFQYACEOIDIAJBgAJrIgJB/wFLDQALCyAAIAUgAhDiAwsgBUGAAmokAAu4AgEEfyMAQaACayIDJAAgAyACNgKcAiADQfABakEAQSgQ9QMaIAMgAygCnAI2ApgCAkBBACABIANBmAJqIANB0ABqIANB8AFqEOEDQQBIDQAgACgCTEEATiEGIAAoAgAhBSAAKAJIQQBMBEAgACAFQV9xNgIACwJ/AkACQCAAKAIwRQRAIABB0AA2AjAgAEEANgIcIABCADcDECAAKAIsIQQgACADNgIsDAELIAAoAhANAQtBfyAAEOsDDQEaCyAAIAEgA0GYAmogA0HQAGogA0HwAWoQ4QMLIQIgBUEgcSEBIAQEfyAAQQBBACAAKAIkEQ0AGiAAQQA2AjAgACAENgIsIABBADYCHCAAKAIUGiAAQgA3AxBBAAUgAgsaIAAgACgCACABcjYCACAGRQ0ACyADQaACaiQAC/QfAhJ/An4jAEGAPGsiCCQAIAhBADYCrAICQCACQj+IpwRAIAJCgICAgICAgICA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AkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAvoAgECfwJAIAAgAUYNACABIAAgAmoiA2tBACACQQF0a00EQCAAIAEgAhDzAxoPCyAAIAFzQQNxIQQCQAJAIAAgAUkEQCAEBEAgACEDDAMLIABBA3FFBEAgACEDDAILIAAhAwNAIAJFDQQgAyABLQAAOgAAIAFBAWohASACQQFrIQIgA0EBaiIDQQNxDQALDAELAkAgBA0AIANBA3EEQANAIAJFDQUgACACQQFrIgJqIgMgASACai0AADoAACADQQNxDQALCyACQQNNDQADQCAAIAJBBGsiAmogASACaigCADYCACACQQNLDQALCyACRQ0CA0AgACACQQFrIgJqIAEgAmotAAA6AAAgAg0ACwwCCyACQQNNDQADQCADIAEoAgA2AgAgAUEEaiEBIANBBGohAyACQQRrIgJBA0sNAAsLIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQQFrIgINAAsLC/ICAgJ/AX4CQCACRQ0AIAAgAToAACAAIAJqIgNBAWsgAToAACACQQNJDQAgACABOgACIAAgAToAASADQQNrIAE6AAAgA0ECayABOgAAIAJBB0kNACAAIAE6AAMgA0EEayABOgAAIAJBCUkNACAAQQAgAGtBA3EiBGoiAyABQf8BcUGBgoQIbCIBNgIAIAMgAiAEa0F8cSIEaiICQQRrIAE2AgAgBEEJSQ0AIAMgATYCCCADIAE2AgQgAkEIayABNgIAIAJBDGsgATYCACAEQRlJDQAgAyABNgIYIAMgATYCFCADIAE2AhAgAyABNgIMIAJBEGsgATYCACACQRRrIAE2AgAgAkEYayABNgIAIAJBHGsgATYCACAEIANBBHFBGHIiBGsiAkEgSQ0AIAGtQoGAgIAQfiEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkEgayICQR9LDQALCyAACx4BAX8jAEEQ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aygCAEcEQCAAKAIEIgQgACgCCDYCCCAAKAIIIAQ2AgQgASADaiEBCyACIAE2AgAgAUF8cSACakEEayABQQFyNgIAIAICfyACKAIAQQhrIgFB/wBNBEAgAUEDdkEBawwBCyABZyEAIAFBHSAAa3ZBBHMgAEECdGtB7gBqIAFB/x9NDQAaIAFBHiAAa3ZBAnMgAEEBdGtBxwBqIgFBPyABQT9JGwsiAUEEdCIAQYC8AWo2AgQgAiAAQYi8AWoiACgCADYCCCAAIAI2AgAgAigCCCACNgIEQYjEAUGIxAEpAwBCASABrYaENwMACwsHACAAEJcECygBAX9BFiEDIAFBA3EEfyADBSAAIAEgAhCUBCIBNgIAQQBBDCABGwsLzQkCA34EfyMAQfAAayIIJAAgBEL///////////8AgyEGAkACQCABUCIJIAJC////////////AIMiBUKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAFUBtFBEAgA0IAUiAGQoCAgICAgMD//wB9IgdCgICAgICAwICAf1YgB0KAgICAgIDAgIB/URsNAQsgCSAFQoCAgICAgMD//wBUIAVCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgBkKAgICAgIDA//8AVCAGQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAFQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiCRshBEIAIAEgCRshAwwCCyADIAZCgICAgICAwP//AIWEUA0BIAEgBYRQBEAgAyAGhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAGhFBFDQAgASEDIAIhBAwBCyADIAEgASADVCAFIAZUIAUgBlEbIgobIQUgBCACIAobIgZC////////P4MhByACIAQgChsiAkIwiKdB//8BcSELIAZCMIinQf//AXEiCUUEQCAIQeAAaiAFIAcgBSAHIAdQIgkbeSAJQQZ0rXynIglBD2sQmwRBECAJayEJIAgpA2ghByAIKQNgIQULIAEgAyAKGyEDIAJC////////P4MhBCALRQRAIAhB0ABqIAMgBCADIAQgBFAiCht5IApBBnStfKciCkEPaxCbBEEQIAprIQsgCCkDWCEEIAgpA1AhAwsgBEIDhiADQj2IhEKAgICAgICABIQhBCAHQgOGIAVCPYiEIQEgAiAGhSECAn4gA0IDhiIDIAkgC2siCkUNABogCkH/AEsEQEIAIQRCAQwBCyAIQUBrIAMgBEGAASAKaxCbBCAIQTBqIAMgBCAKEJ0EIAgpAzghBCAIKQMwIAgpA0AgCCkDSIRCAFKthAshAyABQoCAgICAgIAEhCEHIAVCA4YhAQJAIAJCAFMEQCABIAN9IgUgByAEfSABIANUrX0iBIRQBEBCACEDQgAhBAwDCyAEQv////////8DVg0BIAhBIGogBSAEIAUgBCAEUCIKG3kgCkEGdK18p0EMayIKEJsEIAkgCmshCSAIKQMoIQQgCCkDICEFDAELIAEgA3wiBSADVK0gBCAHfHwiBEKAgICAgICACINQDQAgBUIBgyAEQj+GIAVCAYiEhCEFIAlBAWohCSAEQgGIIQQLIAZCgICAgICAgICAf4MhASAJQf//AU4EQCABQoCAgICAgMD//wCEIQRCACEDDAELQQAhCgJAIAlBAEoEQCAJIQoMAQsgCEEQaiAFIAQgCUH/AGoQmwQgCCAFIARBASAJaxCdBCAIKQMAIAgpAxAgCCkDGIRCAFKthCEFIAgpAwghBAsgBEI9hiAFQgOIhCIDIAMgBadBB3EiCUEES618IgVWrSAEQgOIQv///////z+DIAqtQjCGhCABhHwhBAJAAkAgCUEERwRAIAUhAwwBCyAEIAVCAYMiASAFfCIDIAFUrXwhBAwBCyAJRQ0BCwsgACADNwMAIAAgBDcDCCAIQfAAaiQAC1ABAX4CQCADQcAAcQRAIAEgA0FAaq2GIQJCACEBDAELIANFDQAgAiADrSIEhiABQcAAIANrrYiEIQIgASAEhiEBCyAAIAE3AwAgACACNwMIC9sBAgF/An5BASEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQEF/IQQgACACVCABIANTIAEgA1EbDQEgACAChSABIAOFhEIAUg8LQX8hBCAAIAJWIAEgA1UgASADURsNACAAIAKFIAEgA4WEQgBSIQQLIAQLUAEBfgJAIANBwABxBEAgAiADQUBqrYghAUIAIQIMAQsgA0UNACACQcAAIANrrYYgASADrSIEiIQhASACIASIIQILIAAgATcDACAAIAI3AwgLuQoCBX8QfiMAQeAAayIEJAAgA0L///////8/gyENIAIgA4VCgICAgICAgICAf4MhCSACQv///////z+DIgxCIIghEAJAAkAgA0IwiKdB//8BcSIFQf//AWtBgYB+SyACQjCIp0H//wFxIgdB//8Ba0GCgH5PcQ0AIAFQIAJC////////////AIMiCkKAgICAgIDA//8AVCAKQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQkMAgsgA0L///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFFyRQRAIANCgICAgICAIIQhCUIAIQEMAgsgASAKQoCAgICAgMD//wCFhFAEQCACUARAQoCAgICAgOD//wAhCUIAIQEMAwsgCUKAgICAgIDA//8AhCEJQgAhAQwCCyACQoCAgICAgMD//wCFUARAIAEgCoQhAkIAIQEgAlAEQEKAgICAgIDg//8AIQkMAwsgCUKAgICAgIDA//8AhCEJDAILIAEgCoRQBEBCACEBDAILIAJQBEBCACEBDAILIApC////////P1gEQCAEQdAAaiABIAwgASAMIAxQIgYbeSAGQQZ0rXynIgZBD2sQmwRBECAGayEGIAQpA1giDEIgiCEQIAQpA1AhAQsgAkL///////8/Vg0AIARBQGtCACANQgAgDSANUCIIG3kgCEEGdK18pyIIQQ9rEJsEIAYgCGtBEGohBiAEKQNIIQ0gBCkDQCELCyALQg+GIgpCgID+/w+DIgIgAUIgiCIDfiIRIApCIIgiCiABQv////8PgyIBfnwiD0IghiISIAEgAn58Ig4gElStIAIgDEL/////D4MiDH4iFSADIAp+fCISIA1CD4YgC0IxiIQiE0L/////D4MiCyABfnwiDSAPIBFUrUIghiAPQiCIhHwiESACIBBCgIAEhCIPfiIWIAogDH58IhAgE0IgiEKAgICACIQiAiABfnwiEyADIAt+fCIUQiCGfCIXfCEBIAUgB2ogBmpB//8AayEFAkAgAiADfiIYIAogD358IgMgGFStIAMgCyAM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dGVwIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTcGFyc2VTZWdtZW50UmVkdWN0aW9uIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABNaW4gZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFN1bSBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAUHJvZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQATGVha3lSZWx1IGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABBYnMgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAE5lZyBmb3IgdGVuc29yIGlkcyAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3F1YXJlIGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABSb3VuZCBmb3IgdGVuc29yIGlkcyAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAUmVsdTYgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFBvdyBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAERpdiBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAE11bCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFNxdWFyZWREaWZmZXJlbmNlIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAQWRkIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3ViIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU2NhdHRlciBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABHYXRoZXIgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAVHJhbnNwb3NlIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFRpbGUgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAR2F0aGVyTmQgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAQWRkTiBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQARmxvb3JEaXYgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQATWF4aW11bSBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABNaW5pbXVtIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGR0eXBlICVkAEN1bXN1bSBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQAQ3VtcHJvZCBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQAVG9wSyBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQATm90RXF1YWwgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC5VbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExlc3NFcXVhbCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLlVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQAR3JlYXRlckVxdWFsIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMb2dpY2FsTm90IGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMZXNzIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQATG9naWNhbFhvciBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAEdyZWF0ZXIgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMb2dpY2FsT3IgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABFcXVhbCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExvZ2ljYWxBbmQgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABOQU4ASU5GAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9jb25zdGFudF9wYWRfbmRfeDMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9jb25zdGFudF9wYWRfbmRfeDMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwXypfbmRfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV8qX25kX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9yZXNpemVfYmlsaW5lYXIyZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfcmVzaXplX2JpbGluZWFyMmRfbmh3Y19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfY29udm9sdXRpb24yZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfY29udm9sdXRpb24yZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9tYXhfcG9vbGluZzJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2F2ZXJhZ2VfcG9vbGluZzJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3NvZnRtYXhfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9zb2Z0bWF4X25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9wcmVsdV9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX3ByZWx1X25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9lbHVfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9lbHVfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2NsYW1wX25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfY2xhbXBfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3NpZ21vaWRfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9zaWdtb2lkX25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9mdWxseV9jb25uZWN0ZWRfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9mdWxseV9jb25uZWN0ZWRfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AT3BlcmFuZHMgY291bGQgbm90IGJlIGJyb2FkY2FzdCB0b2dldGhlciwgc2hhcGUgbWlzbWF0Y2guAChudWxsKQBNaXJyb3JQYWQgZm9yIHRlbnNv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AAAAAAAArEea/Yxg7j899SSfyjizP6BqAh+zpOw/upE4VKl2xD/m/GpXNiDrP9LkxEoLhM4/LaqhY9HC6T8cZcbwRQbUP+1BeAPmhug/+J8bLJyO2D9iSFP13GfnP8x7sU6k4Nw/C25JyRZ20j96xnWgaRnXv926p2wKx94/yPa+SEcV578ruCplRxX3P6BUAAAAAAAAAv8ABGQAIAAABP//BgABAAEAAQD//wH/Af//////Af8B/wH/Af8B/wH/Af8B//////8K/yAA//8D/wH/BP8eAAABBf//////YwAACGMA6AMCAAAA//////8AAAAB/wH//////////////wBBiaMBCwEEAEGWowELRAH/Af//////AAEgAAQAgAAACP//Af8B/////////wH/Bv8H/wj/Cf//////vAK8AgEA//8BAAEA//8AAP//////////AEHqowELARQAQYqkAQse//8BAAr///////////8B/wH/AAAAAAAAAf8B/wH/AEG6pAELSAH/AAAAAAAAAf8B/wEAAAABAAAAAf//////AAAAAAH///8AAAAA/////////////ygACv//////AQAK/////wD//////////wBB5qUBCxwB/wH///8BAP//////////////////Cv//////AEGUpgEL+QICAAAAAwAAAAUAAAAHAAAACwAAAA0AAAARAAAAEwAAABcAAAAdAAAAHwAAACUAAAApAAAAKwAAAC8AAAA1AAAAOwAAAD0AAABDAAAARwAAAEkAAABPAAAAUwAAAFkAAABhAAAAZQAAAGcAAABrAAAAbQAAAHEAAAB/AAAAgwAAAIkAAACLAAAAlQAAAJcAAACdAAAAowAAAKcAAACtAAAAswAAALUAAAC/AAAAwQAAAMUAAADHAAAA0wAAAAEAAAALAAAADQAAABEAAAATAAAAFwAAAB0AAAAfAAAAJQAAACkAAAArAAAALwAAADUAAAA7AAAAPQAAAEMAAABHAAAASQAAAE8AAABTAAAAWQAAAGEAAABlAAAAZwAAAGsAAABtAAAAcQAAAHkAAAB/AAAAgwAAAIkAAACLAAAAjwAAAJUAAACXAAAAnQAAAKMAAACnAAAAqQAAAK0AAACzAAAAtQAAALsAAAC/AAAAwQAAAMUAAADHAAAA0QBBkKkBCxEBAAAAAQAAAAgAAAAAAAAABQBBrKkBCwIhAQBBxKkBCwoiAQAAIwEAAFBdAEHcqQELAQIAQeypAQsI//////////8AQbCqAQsDIGJQ"); + } + }); + + // src/tfjs-backend-wasm.wasm + var tfjs_backend_wasm_exports = {}; + __export(tfjs_backend_wasm_exports, { + default: () => tfjs_backend_wasm_default + }); + var tfjs_backend_wasm_default; + var init_tfjs_backend_wasm = __esm({ + "src/tfjs-backend-wasm.wasm"() { + tfjs_backend_wasm_default = __toBinary("AGFzbQEAAAABvwVKYAN/f38AYAR/f39/AGACf38AYAF/AGACf38Bf2AKf39/f39/f39/fwBgBX9/f39/AGAIf39/f39/f38AYAx/f39/f39/f39/f38AYAZ/f39/f38AYAF/AX9gBX9/f39/AX9gCX9/f39/f39/fwBgA39/fwF/YAd/f39/f39/AGALf39/f39/f39/f38AYAAAYAN/fX0AYAJ9fQF/YAJ9fQF9YAl/f39/f39/f38Bf2AEf39/fwF/YAR9fX9/AX9gAX0BfWAAAX9gBH99fX0AYAF8AXxgB39+fn9/f38Bf2AEf35+fwBgAn99AGATf39/f39/f39/f39/f39/f39/fwBgF39/f39/f39/f39/f39/f39/f39/f31/AGAEf399fwBgDX9/f39/f39/f39/fX8AYAV/fX9/fwBgAXwBfWABfwF8YAF/AX1gA39+fwF+YAV/fn5+fgBgDn9/f39/f39/f39/f39/AGAEf319fwBgG39/f39/f39/f39/f39/f39/f39/f39/f39/fwBgCn9/f39/f39/fX8AYAd/f39/f31/AGARf39/f39/f39/f39/f39/f38AYAV/f399fQF/YAZ/f399fX8Bf2AGf39/fX19AX9gCH9/f39/f31/AGALf39/f399fX1/f38AYAx/f39/f39/f39/f38Bf2AEf31/fwBgD39/f39/f39/f39/f399fwBgA31/fwF9YBh/f39/f39/f39/f39/f39/f39/f39/fX8AYAd/f399fX1/AX9gA39/fQBgBn19f39/fwF/YAd/f39/f39/AX9gA399fwBgAn5/AX9gAnx8AXxgAnx/AX9gA3x8fwF8YAJ9fwF/YAJ/fAF8YAJ/fQF9YAF9AX9gAX4Bf2ACfH8BfGAEfn5+fgF/YAR/fn5+AGAKf39/f39/f39/fwF/AtsBCANlbnYFYWJvcnQAEANlbnYVZW1zY3JpcHRlbl9tZW1jcHlfYmlnAA0Wd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF9jbG9zZQAKFndhc2lfc25hcHNob3RfcHJldmlldzEIZmRfd3JpdGUAFQNlbnYXZW1zY3JpcHRlbl9nZXRfaGVhcF9tYXgAGANlbnYWZW1zY3JpcHRlbl9yZXNpemVfaGVhcAAKA2VudgtzZXRUZW1wUmV0MAADFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfc2VlawALA4AE/gMQAwMKAhADGAADAgIQAgAAAgcEBAEAAAYDAigGBAIMAAMCKR4qAAArCQkMHgAHEgQEAAkABxMELB8fBwcHEgQEBxIEBCAHEgQEBxIEBAAHBAAHBAcEAQMtBxMEAAEHEwQHDw8PBwQALi8wBxIEBgMCMQcTBAQAAQcEBAAAAwIFBQkyAAAMBgIAAwIBMw4MAAAHBAQ0BQcEAQAADgcBAgABABULBBULBDU2DiEDAwMDNwIKBAAGAwICOAMCAwI5AwcHBwcHDAEXAwEDAgMDIQADAgMAIAMBAwMAARUCAAAQEAoEBAQEDQQEGBY6FhYWBBQUFBQUBAoVFQMUFgsLCwsLCws7CwsLCwsLBA0CDQMDAAUJBg4JCQYAAAAAAAACAgEACQkAAAIAAg8MCAUMDAkBAR0ZEQMDGRkDAwMiIjwBAQwPDAEFBQUOCAgIDgEJAAYGAQEBAQEBAQEBAQEBAQUFBQUICAEBCQAAAAEGDA8FBQUFBQUFBQUHDgUFBQUFBQUFCAgICAgICAgMCA8OAQYGBgYGBgYGBgYGBgYGAQEBBwEFBQUFCAgKAgICAgICAgICAgICAwoKBwsACgA9BgAbAhgKPgs/QCMjQQ0ADUIkJBpDFyUlF0QXGhwKEBoaF0UTCgoXRgoNJgoECgQNCgMDJxxHHEgnCg0KGAMKSQsEBwFwAYYChgIFBwEBgAKAgAIGCQF/AUHgxsECCwfBCmsGbWVtb3J5AgARX193YXNtX2NhbGxfY3RvcnMACARpbml0AA0XaW5pdF93aXRoX3RocmVhZHNfY291bnQADhFnZXRfdGhyZWFkc19jb3VudAAPD3JlZ2lzdGVyX3RlbnNvcgAQDGRpc3Bvc2VfZGF0YQARB2Rpc3Bvc2UAFBlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQADQWJzABcDQWRkABkEQWRkTgAcA0FsbAAdA0FueQAeBkFyZ01heAAfB0F2Z1Bvb2wAIgtCYXRjaE1hdE11bAAmBENlaWwAJwtDbGlwQnlWYWx1ZQAqBkNvbnYyRAArE0NvbnYyREJhY2twcm9wSW5wdXQALANDb3MALQRDb3NoAC4NQ3JvcEFuZFJlc2l6ZQAvB0N1bXByb2QAMAZDdW1zdW0AMQxEZXB0aFRvU3BhY2UAMhVEZXB0aHdpc2VDb252MmROYXRpdmUAMwNFbHUANAVFcXVhbAA1A0V4cAA5DUZsaXBMZWZ0UmlnaHQAOgVGbG9vcgA7CEZsb29yRGl2ADwORnVzZWRCYXRjaE5vcm0APwtGdXNlZENvbnYyRABAFEZ1c2VkRGVwdGh3aXNlQ29udjJEAEEGR2F0aGVyAEIIR2F0aGVyTmQAQwdHcmVhdGVyAEQMR3JlYXRlckVxdWFsAEgJTGVha3lSZWx1AEwETGVzcwBNCUxlc3NFcXVhbABRA0xvZwBVCkxvZ2ljYWxBbmQAVgpMb2dpY2FsTm90AFgJTG9naWNhbE9yAFkKTG9naWNhbFhvcgBbA01heABdB01heFBvb2wAXwdNYXhpbXVtAGAETWVhbgBjA01pbgBkB01pbmltdW0AZQlNaXJyb3JQYWQAaAhNdWx0aXBseQBsA05lZwBuE05vbk1heFN1cHByZXNzaW9uVjMAbxNOb25NYXhTdXBwcmVzc2lvblY0AHATTm9uTWF4U3VwcHJlc3Npb25WNQBxCE5vdEVxdWFsAHIGT25lSG90AHUFUGFkVjIAeANQb3cAeQVQcmVsdQB9BFByb2QAfgdSZWFsRGl2AH8EUmVsdQCCAQVSZWx1NgCDAQ5SZXNpemVCaWxpbmVhcgCGARVSZXNpemVOZWFyZXN0TmVpZ2hib3IAhwEHUmV2ZXJzZQCIARBSb3RhdGVXaXRoT2Zmc2V0AIkBBVJvdW5kAIoBBVJzcXJ0AIsBCVNjYXR0ZXJOZACMAQhTZWxlY3RWMgCNAQdTaWdtb2lkAI4BA1NpbgCPAQdTb2Z0bWF4AJIBE1NwYXJzZUZpbGxFbXB0eVJvd3MAkwENU3BhcnNlUmVzaGFwZQCUARZTcGFyc2VTZWdtZW50UmVkdWN0aW9uAJUBBFNxcnQAlgEGU3F1YXJlAJcBEVNxdWFyZWREaWZmZXJlbmNlAJgBBFN0ZXAAmwEMU3RyaWRlZFNsaWNlAJwBA1N1YgCdAQNTdW0AnwEDVGFuAKABBFRhbmgAoQEEVGlsZQCiAQRUb3BLAKMBCVRyYW5zZm9ybQCvAQlUcmFuc3Bvc2UAsQEMX0Z1c2VkTWF0TXVsALIBBm1hbGxvYwD1AwRmcmVlAPcDEF9fZXJybm9fbG9jYXRpb24A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DQAgAkEBayEJIANBAUshCgNAIAQoAgAiBEUNASAAIAQoAgQiA0cEQAJAIApFBEAgAyAJcSEDDAELIAIgA0sNACADIAJwIQMLIAEgA0cNAgsgBCgCCCAARw0AC0EADAELQRQQgAQiBCAGKAIANgIIIAcpAgAhDSAEIAA2AgQgBCANNwIMIARBADYCAAJAQQAgAkGMrQEoAgBBAWqzIgxBkK0BKgIAIgsgArOUXhsNACACIAJBAWtxQQBHIAJBA0lyIAJBAXRyIQNBgK0BAn8gDCALlY0iC0MAAIBPXSALQwAAAABgcQRAIAupDAELQQALIgIgAyACIANLGxAVQYStASgCACICIAJBAWtxRQRAIAJBAWsgAHEhAQwBCyAAIAJJBEAgACEBDAELIAAgAnAhAQsCQEGArQEoAgAgAUECdGoiAygCACIARQRAIARBiK0BKAIANgIAQYitASAENgIAIANBiK0BNgIAIAQoAgAiAEUNASAAKAIEIQACQCACIAJBAWsiA3FFBEAgACADcSEADAELIAAgAkkNACAAIAJwIQALQYCtASgCACAAQQJ0aiAENgIADAELIAQgACgCADYCACAAIAQ2AgALQYytAUGMrQEoAgBBAWo2AgBBAQs6AAQgCCAENgIAIAVBIGokAAuzAgEHfyMAQRBrIgQkACAEIAA2AgxBgK0BIARBDGoQEgJAQZitASgCACICRQ0AIAQoAgwhA0GUrQEoAgACfyACQQFrIANxIAJpIgFBAU0NABogAyACIANLDQAaIAMgAnALIgVBAnRqKAIAIgBFDQAgACgCACIARQ0AIAJBAWshBiABQQFLIQcDQAJAAkAgAyAAKAIEIgFHBEACQCAHRQRAIAEgBnEhAQwBCyABIAJJDQAgASACcCEBCyABIAVGDQEMBAsgACgCCCADRg0BCyAAKAIAIgANAQwCCwsCQCAAKAIMIgIgACgCECIBRg0AIAMgAigCABEDACACQQRqIgAgAUYNAANAIAQoAgwgACgCABEDACAAQQRqIgAgAUcNAAsLQZStASAEQQxqEBMLIARBEGokAAvqAQEHfyMAQRBrIgUkAAJAIAAoAgQiA0UNACAAKAIAAn8gASgCACIEIANBAWtxIANpIgJBAU0NABogBCADIARLDQAaIAQgA3ALIgZBAnRqKAIAIgFFDQAgASgCACIBRQ0AIANBAWshByACQQFLIQgDQAJAAkAgBCABKAIEIgJHBEACQCAIRQRAIAIgB3EhAgwBCyACIANJDQAgAiADcCECCyACIAZGDQEMBAsgASgCCCAERg0BCyABKAIAIgENAQwCCwsgBSAAIAEQFiAFKAIAIQEgBUEANgIAIAEEQCABEPcDCwsgBUEQaiQAC4sCAQd/IwBBEGsiBCQAAkAgACgCBCIDRQ0AIAAoAgACfyABKAIAIgUgA0EBa3EgA2kiAkEBTQ0AGiAFIAMgBUsNABogBSADcAsiBkECdGooAgAiAUUNACABKAIAIgFFDQAgA0EBayEHIAJBAUshCANAAkACQCAFIAEoAgQiAkcEQAJAIAhFBEAgAiAHcSECDAELIAIgA0kNACACIANwIQILIAIgBkYNAQwECyABKAIIIAVGDQELIAEoAgAiAQ0BDAILCyAEIAAgARAWIAQoAgAhASAEQQA2AgAgAQRAAkAgBC0ACEUNACABKAIMIgJFDQAgASACNgIQIAIQ9wMLIAEQ9wMLCyAEQRBqJAALgQcBB38CQEGIrQEoAgAiAUUNAAJAA0ACQAJAIAAgA0cEQCAAIAEoAgg2AgAgACECDAELIAMgBGsiAEECdSIGQQFqIgJBgICAgARPDQEgAiAAQQF1IgMgAiADSxtB/////wMgAEH8////B0kbIgMEfyADQYCAgIAETw0CIANBAnQQgAQFQQALIgUgBkECdGoiAiABKAIINgIAIANBAnQhAyAAQQBKBEAgBSAEIAAQ0gMaCyADIAVqIQMgBARAIAQQ9wMLIAUhBAsgAkEEaiEAIAEoAgAiAQ0BDAILCxAAAAsgACAERg0AIAQhAANAIAAoAgAQESAAIAJGIQEgAEEEaiEAIAFFDQALC0GMrQEoAgAEQEGIrQEoAgAiAARAA0AgACgCACEBIAAQ9wMgASIADQALC0GIrQFBADYCAAJAQYStASgCACIBRQ0AIAFBA3EhBUEAIQJBACEAIAFBAWtBA08EQCABQXxxIQZBACEDA0AgAEECdCIBQYCtASgCAGpBADYCAEGArQEoAgAgAUEEcmpBADYCAEGArQEoAgAgAUEIcmpBADYCAEGArQEoAgAgAUEMcmpBADYCACAAQQRqIQAgA0EEaiIDIAZHDQALCyAFRQ0AA0BBgK0BKAIAIABBAnRqQQA2AgAgAEEBaiEAIAJBAWoiAiAFRw0ACwtBjK0BQQA2AgALQaCtASgCAARAQZytASgCACIABEADQCAAKAIAIQEgACgCDCICBEAgACACNgIQIAIQ9wMLIAAQ9wMgASIADQALC0EAIQBBnK0BQQA2AgACQEGYrQEoAgAiAUUNACABQQNxIQMgAUEBa0EDTwRAIAFBfHEhBUEAIQIDQCAAQQJ0IgFBlK0BKAIAakEANgIAQZStASgCACABQQRyakEANgIAQZStASgCACABQQhyakEANgIAQZStASgCACABQQxyakEANgIAIABBBGohACACQQRqIgIgBUcNAAsLIANFDQBBACEBA0BBlK0BKAIAIABBAnRqQQA2AgAgAEEBaiEAIAFBAWoiASADRw0ACwtBoK0BQQA2AgALQaytASgCACIABEAgACgChAEiAkECTwRAIABCgYCAgCA3AgQgACACQQFrNgIAQQEhAQNAIAAgAUEGdGooAtQBGiABQQFqIgEgAkcNAAsLIAAQvAMLQaytAUEANgIAIAQEQCAEEPcDCwvdBQIJfwF9AkACf0ECIAFBAUYNABogASABIAFBAWtxRQ0AGiABEP4DCyIDIAAoAgQiAU0EQCABIANNDQEgAUEDSSEFAn8gACgCDLMgACoCEJWNIgtDAACAT10gC0MAAAAAYHEEQCALqQwBC0EACyECAn8CQCAFDQAgAWlBAUsNACACQQFBICACQQFrZ2t0IAJBAkkbDAELIAIQ/gMLIgIgAyACIANLGyIDIAFPDQELIAAhBEEAIQJBACEFAkACQCADBEAgA0GAgICABE8NASADQQJ0EIAEIQAgBCgCACEBIAQgADYCACABBEAgARC8AwsgBCADNgIEIANBA3EhBkEAIQEgA0EBa0EDTwRAIANBfHEhBwNAIAFBAnQiACAEKAIAakEANgIAIAQoAgAgAEEEcmpBADYCACAEKAIAIABBCHJqQQA2AgAgBCgCACAAQQxyakEANgIAIAFBBGohASAFQQRqIgUgB0cNAAsLIAYEQANAIAQoAgAgAUECdGpBADYCACABQQFqIQEgAkEBaiICIAZHDQALCyAEKAIIIgVFDQIgBEEIaiEBIAUoAgQhBgJAIANpIgJBAU0EQCAGIANBAWtxIQYMAQsgAyAGSw0AIAYgA3AhBgsgBCgCACAGQQJ0aiABNgIAIAUoAgAi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SwRAQQAPCyAAKAIwIgIgASgCMCIDSQ0AQQAhBCACIANLDQAgACgCNCABKAI0SSEECyAEC6IEAQN/IAEgACABRiIDOgAMAkAgAw0AA0AgASgCCCICLQAMDQECQAJ/IAIgAigCCCIDKAIAIgRGBEACQCADKAIEIgRFDQAgBC0ADA0AIARBDGohBAwDCwJAIAEgAigCAEYEQCACIQQMAQsgAiACKAIEIgQoAgAiATYCBCAEIAEEfyABIAI2AgggAigCCAUgAws2AgggAigCCCIDIAMoAgAgAkdBAnRqIAQ2AgAgBCACNgIAIAIgBDYCCCAEKAIIIQMLIARBAToADCADQQA6AAwgAyADKAIAIgIoAgQiBDYCACAEBEAgBCADNgIICyACIAMoAgg2AgggAygCCCIEIAQoAgAgA0dBAnRqIAI2AgAgAiADNgIEIANBCGoMAQsCQCAERQ0AIAQtAAwNACAEQQxqIQQMAgsCQCABIAIoAgBHBEAgAiEBDAELIAIgASgCBCIENgIAIAEgBAR/IAQgAjYCCCACKAIIBSADCzYCCCACKAIIIgMgAygCACACR0ECdGogATYCACABIAI2AgQgAiABNgIIIAEoAgghAwsgAUEBOgAMIANBADoADCADIAMoAgQiAigCACIENgIEIAQEQCAEIAM2AggLIAIgAygCCDYCCCADKAIIIgQgBCgCACADR0ECdGogAjYCACACIAM2AgAgA0EIagsgAjYCAAwCCyACQQE6AAwgAyAAIANGIgI6AAwgBEEBOgAAIAMhASACRQ0ACwsLIgAgACABIAIgAyAEIAUgBiAHQQBBAEEAQwAAAAAgCBDVAQsNACAAIAJBCkELENABCw8AQbytAUHArQEoAgAQKQseACABBEAgACABKAIAECkgACABKAIEECkgARD3AwsLsQQCBn8BfSMAQSBrIgQkACAAEAshBiADEAsoAgAhByAGKAIAIQggBEEANgIcAkACQAJAAkBBwK0BKAIAIgBFDQBBwK0BIQMDQAJAAkAgACoCECIKIAFdDQAgASAKXUUEQCAAKgIUIAJdDQELIAAhAwwBCyAAQQRqIQALIAAoAgAiAA0ACyADQcCtAUYNACADKgIQIgogAV4NACABIApeDQEgAyoCFCACXkUNAQsgASACQQAgBEEcahCCAiIABEAgBCAANgIQQfUnIARB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IANBfHEhCyADQQNxIQcgBSgCACEAIANBAWtBA0khDANAAkAgA0UNACAGIApqIQFBACEIIAxFBEADQCAAIAZBAnQiBSAEIAIgAS0AABtqKgIAOAIAIAAgBCACIAEtAAAbIAVqKgIAOAIEIAAgBCACIAEtAAAbIAVqKgIAOAIIIAAgBCACIAEtAAAbIAVqKgIAOAIMIABBEGohACAIQQRqIgggC0cNAAsLQQAhBSAHRQ0AA0AgACAGQQJ0IAQgAiABLQAAG2oqAgA4AgAgAEEEaiEAIAVBAWoiBSAHRw0ACwsgBkEBaiIGIAlHDQALCwsVACAAEAsiACgCACAAKAIEIAEQ4AELVAECfyAAEAshASACEAshACABKAIEBEAgACgCACEDIAEoAgAhBEEAIQADQCADIABBAnQiAmogAiAEaioCABDOATgCACAAQQFqIgAgASgCBEkNAAsLCxAAQeytAUHwrQEoAgAQkQELIAAgAQRAIAAgASgCABCRASAAIAEoAgQQkQEgARD3AwsLjgcBBX8jAEEgayIFJAAgABALIQAgARALKAIAIQggACgCACEHIAVBADYCHAJAAkACQAJAAkBB8K0BKAIAIgBFDQBB8K0BIQEDQCABIAAgACgCECACSSIEGyEBIAAgBEECdGooAgAiAA0ACyABQfCtAUYNACABKAIQIAJNDQELAn8gBUEcaiEAQQEhAQJAAkBBwK8BLQAAQQFxRQ0AQQIhASACQQFrIAJPDQBBAA0AEPABIgENAUEGIQELQQAQlQIgAQwBCyABQccANgKQAiABIAI2AmwgASACNgJUIAEgAjYCPCABQQA2AoAEIAFBADYCyAEgACABNgIAQQALIgAEQCAFIAA2AhBBnCMgBUEQahAYDAQLQfCtASEBQfCtASgCACIARQRAQfCtASEADAILA0ACQCACIAAoAhAiBEkEQCAAKAIAIgQNASAAIQEMBAsgAiAETQ0DIABBBGohASAAKAIEIgRFDQMgASEACyAAIQEgBCEADAALAAsgBSABKAIUIgA2AhwMAQsgASgCAEUEQCAFKAIcIQZBGBCABCIEIAY2AhQgBCACNgIQIAQgADYCCCAEQgA3AgAgASAENgIAQeytASgCACgCACIABEBB7K0BIAA2AgAgASgCACEEC0HwrQEoAgAgBBAlQfStAUH0rQEoAgBBAWo2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aiELIABBAWoiACAGRw0ACwsgAyESIA0Q9wMMAQsgBEECdCANakEEaygCACESQQAhDyAOEIAEQQAgDhDUAyEOIAMEQCAFQXxxIRAgBUEDcSEMIAVBAWtBAkshFgNAIA4gACAFIA9sIgZBAnRqKAIAIgdBAnQiCWoiCCgCACECIAcEfyAJIA1qQQRrKAIABUEACyEHIAggAkEBajYCACACIAdqIRECQCAFRQ0AIAUgEWwhB0EAIQhBACECQQAhCSAWBEADQCABIAIgB2pBAnRqIAAgAiAGakECdGooAgA2AgAgASACQQFyIgogB2pBAnRqIAAgBiAKakECdGooAgA2AgAgASACQQJyIgogB2pBAnRqIAAgBiAKakECdGooAgA2AgAgASACQQNyIgogB2pBAnRqIAAgBiAKakECdGooAgA2AgAgAkEEaiECIAlBBGoiCSAQRw0ACwsgDEUNAANAIAEgAiAHakECdGogACACIAZqQQJ0aigCADYCACACQQFqIQIgCEEBaiIIIAxHDQALCyATIBFBAnRqIBQgD0ECdCICaioCADgCACACIAtqIBE2AgAgD0EBaiIPIANHDQALCyABQQRqIQggBUECdEEEayEJIA4oAgBFBEAgAUEANgIAIAVBAk8EQCAIQQAgCRDUAxoLIBMgGDgCAAsgBEECTwRAQQEhAiAEQQEgBEEBSxshBgNAIA4gAkECdCIAaigCAEUEQCABIAAgDWpBBGsoAgAiACAFbEECdCIHaiACNgIAIAVBAk8EQCAHIAhqQQAgCRDUAxoLIBMgAEECdGogGDgCAAsgAkEBaiICIAZHDQALCyAOEPcDIA0Q9wMLIBVBEGokACASC9UNAg1/AXwgABALIQAgARALIQkgAhALIQ8gBBALIQEgBRALIQIgBhALIQUgAigCACEOIAEoAgAhEiAPKAIAIQ0gCSgCACEKIAAoAgAhEEF/IQQgBSgCACIHQX82AgBBASEIQQEhAgJAAkACQAJAIAkoAgQiAARAIABBAEgNASAAQQJ0IgAQgAQgCiAAENIDIQsCQCAARQ0AIABBBGsiAEECdkEBaiIBQQdxIQYCQCAAQRxJBEAgCyEBDAELIAFB+P///wdxIQxBACEFIAshAANAIAAoAhwgACgCGCAAKAIUIAAoAhAgACgCDCAAKAIIIAAoAgQgACgCACACbGxs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IAAgBUECdGo2AkggByAAIAEgBhDSAyAGajYCRAsgB0HQAGogB0FAaxDjASAHKAJAIgAEQCAHIAA2AkQgABC8AwsCfyAHKAIUIAcoAhAiAWsiAEUEQEEAIRFBAAwBCyAAQQBIDQFBACEKIAAQgAQiEUEAIABBAnUiAEEBa0H/////A3EiD0ECdEEEahDUAyECIABBASAAQQFLGyIFQQNxIQsgBygCACEGQQAhACAFQQFrQQNPBEAgBUF8cSENQQAhCANAIAIgAEECdCIFaiABIAUgBmooAgBBAnRqKAIANgIAIAIgBUEEciIJaiABIAYgCWooAgBBAnRqKAIANgIAIAIgBUEIciIJaiABIAYgCWooAgBBAnRqKAIANgIAIAIgBUEMciIFaiABIAUgBmooAgBBAnRqKAIANgIAIABBBGohACAIQQRqIgggDUcNAAsLIA9BAWohCCALBEADQCACIABBAnQiBWogASAFIAZqKAIAQQJ0aigCADYCACAAQQFqIQAgCkEBaiIKIAtHDQALCyACIAhBAnRqCyEAIAdBADYCKCAHQgA3AyAgACARayIABEAgAEEASA0BIAcgABCABCICNgIgIAcgAiAAQQJ1QQJ0ajYCKCAHIAIgESAAENIDIABqNgIkCyAHQTBqIAdBIGoQ4wEgBygCICIABEAgByAANgIkIAAQvAMLQQAhAyAORQ0BA0BBACEPQQAhAgJAIAcoAlQgBygCUCIFayIGQQJ1IgBBAWoiASAASQ0AIAFBgICAgARPDQIgAUECdBCABCICQQAgAEECdCIIQQRqENQDIgogCGoiFEEEaiEPIAYEQCAAQQEgAEEBSxsiCEEBcSESQQAhASADIQAgBkEITwRAIAhBfnEhDUEAIQgDQCAKIAFBAnQiBmogACAFIAZqKAIAIgluIgs2AgAgCiAGQQRyIgZqIAAgCSALbGsiACAFIAZqKAIAIgZuIgk2AgAgACAGIAlsayEAIAFBAmohASAIQQJqIgggDUcNAAsLIBQgEgR/IAogAUECdCIBaiAAIAEgBWooAgAiAW4iBjYCACAAIAEgBmxrBSAACzYCAAwBCyAKIAM2AgALAkACQAJAAkACQAJAAn8gDyACayIARQRAQQAhC0EADAELIABBAEgNCEEAIQogABCABCILQQAgAEECdSIAQQFrQf////8DcUECdCIU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ASAAQYCvARDYAQu6BgEJfyMAQRBrIgkkACAJIAA2AgwCQCABKAIEIgNFDQAgASgCAAJ/IANBAWsgAHEgA2kiBEEBTQ0AGiAAIAAgA0kNABogACADcAsiBUECdGooAgAiAkUNACACKAIAIgJFDQAgA0EBayEGIARBAUshBwNAAkACQCAAIAIoAgQiBEcEQAJAIAdFBEAgBCAGcSEEDAELIAMgBEsNACAEIANwIQQLIAQgBUYNAQwECyACKAIIIABGDQELIAIoAgAiAg0BDAILCyACKAIMIgcgAigCECIKRwRAQeSuASgCACECA0ACf0EAIAIiBkUNABogBygCCCEIIAcoAgQhBSAHKAIAIQRB5K4BIQMDQAJAAkAgAigCECIAIARJDQACQCAAIARLDQAgAigCFCIAIAVJDQEgACAFSw0AIAIoAhggCE8NACACQQRqIQIMAgsgAiEDDAELIAJBBGohAgsgAigCACICDQALIAYgA0HkrgFGDQAaIAYgAygCECICIARLDQAaAkAgAiAESQ0AIAYgAygCFCICIAVLDQEaIAIgBUkNACAGIAggAygCGEkNARoLIAMoAhwQlQJBqK0BQaitASgCAEEBazYCACAHIQACQEHkrgEoAgAiBkUNACAAKAIIIQggACgCBCEFIAAoAgAhA0HkrgEhAiAGIQADQAJAAkAgACgCECIEIANJDQACQCADIARJDQAgACgCFCIEIAVJDQEgBCAFSw0AIAAoAhggCE8NACAAQQRqIQAMAgsgACECDAELIABBBGohAAsgACgCACIADQALIAJB5K4BRg0AIAMgAigCECIASQ0AAkAgACADSQ0AIAUgAigCFCIASQ0BIAAgBUkNACAIIAIoAhhJDQELAkAgAigCBCIARQRAIAIoAggiAygCACACRg0BIAJBCGohBANAIAQoAgAiAEEIaiEEIAAgACgCCCIDKAIARw0ACwwBCwNAIAAiAygCACIADQALCyACQeCuASgCAEYEQEHgrgEgAzYCAAtB6K4BQeiuASgCAEEBazYCACAGIAIQvwEgAhC8AwtB5K4BKAIACyECIAdBDGoiByAKRw0ACwsgASAJQQxqEBMLIAlBEGokAAsQAEGUrwFBmK8BKAIAEJEBC8kEAQV/IwBBIGsiBSQAIAIQCygCACEGIAVBADYCHAJAAkACQAJAAkBBmK8B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IAAoAhwiBCACbGogAyAAKAIodGogACgCJCABbGogBCAAKAIgIABBMGogACgCLBEFAAtYACADIAQgACgCACAAKAIEIAAoAggiAyABbGogAyAAKAIMIAAoAhAgAmxqIAAoAhggASAAKAIcIgFsaiACIAAoAih0aiABIAAoAiAgAEEwaiAAKAIsEQUAC5QBACAFIAYgACgCCCAAKAIEIAAoAhAgAyAAKAIAbEECdGogACgCHCAAKAIMIARsaiAAKAIwIAJsaiAAKAIgIAMgACgCJCIDbGogACgCNCACbGogACgCPCABbGogBCAAKAJAdGogAyAAKAIoIAAoAhQgACgCLCACbGogACgCOCABbGogACgCGCAAQcgAaiAAKAJEEQgAC4IBACAEIAUgACgCCCAAKAIEIAAoAhAgAiAAKAIAbEECdGogACgCHCAAKAIMIANsaiAAKAIwIAFsaiAAKAIgIAIgACgCJCICbGogACgCNCABbGogAyAAKAJAdGogAiAAKAIoIAAoAhQgACgCLCABbGogACgCGCAAQcgAaiAAKAJEEQgAC3kAIAQgBSAAKAIIIAAoAgQgACgCECACIAAoAgBsQQJ0aiAAKAIcIAAoAgwgA2xqIAAoAiAgAiAAKAIkIgJsaiAAKAI8IAFsaiADIAAoAkB0aiACIAAoAiggACgCFCAAKAI4IAFsaiAAKAIYIABByABqIAAoAkQRCAALZwAgAyAEIAAoAgggACgCBCAAKAIQIAEgACgCAGxBAnRqIAAoAhwgACgCDCACbGogACgCICABIAAoAiQiAWxqIAIgACgCQHRqIAEgACgCKCAAKAIUIAAoAhggAEHIAGogACgCRBEIAAtgACAAKAIoIAAoAiQgACgCACAAKAIIIAJsaiAAKAIUIAAoAhggACgCHCABbGogACgCICACbGogACgCBCAAKAIwIAAoAgwgACgCECABbGogACgCLCAAQTRqIAAoAkwRBQALWwAgACgCHCAAKAIgIAAoAiQgACgCACAAKAIEIAJsaiAAKAIIIAAoAgwgAWxqIAAoAhAgACgCFCABbGogACgCGCACbGogACgCKCAAKAIsIABBMGogACgCOBEMAAtgACAAKAIcIAAoAiAgACgCJCAAKAIAIAAoAgQgAmxqIAAoAgggACgCDCABbGogACgCKCAAKAIQIAAoAhQgAWxqIAAoAhggAmxqIAAoAiwgACgCMCAAQThqIAAoAlgRBQALmwEBCn8gACgCGCEDIAAoAhQhBCAAKAIQIQUgACgCACEGIAAoAgQhByAAKAIIIQggACgCDCEJIwAiCiAAKAIkIgtBAnRBzwBqQXBxayIMJAAgACgCHCAAKAIgIAsgBiACIAdsaiAIIAEgCWxqIAAoAiggDCAFIAEgBGxqIAIgA2xqIAAoAiwgACgCMCAAQThqIAAoAlgRDwAgCiQAC24AIAAoAiQgACgCKCAAKAIsIAAoAgAgACgCBCACbGogACgCCCAAKAIMIAFsaiAAKAIwIAAoAhAgACgCFCACbGogACgCGCAAKAIcIAFsaiAAKAIgIAJsaiAAKAI0IAAoAjggAEE8aiAAKAJEEQ8AC7EBAQx/IAAoAiAhAyAAKAIcIQQgACgCGCEFIAAoAgAhBiAAKAIEIQcgACgCCCEIIAAoAgwhCSAAKAIQIQogACgCFCELIwAiDCAAKAIsIg1BAnRBzwBqQXBxayIOJAAgACgCJCAAKAIoIA0gBiACIAdsaiAIIAEgCWxqIAAoAjAgCiACIAtsaiAOIAUgASAEbGogAiADbGogACgCNCAAKAI4IABBPGogACgCRBEIACAMJAALPwAgACgCECAAKAIUIAAoAgAgACgCDCABbGogACgCCCAAKAIEIAAoAhggACgCHCABbGogAEEgaiAAKAJAEQ4AC24BB38gACgCACECIAAoAgwhAyAAKAIYIQQgACgCHCEFIwAiBiAAKAIUIgdBAnRBzwBqQXBxayIIJAAgACgCECAHIAIgASADbGogACgCCCAAKAIEIAggBCABIAVsaiAAQSBqIAAoAkARBwAgBiQAC1gAIAMgACgCACIDIAAoAgQgAkEEdGogACgCCCAAKAIMIAFsaiAAKAIQIAIgACgCIHRqIAAoAhQgAiAAKAIYIgJsaiAAKAIcIAFsaiACIANrIAAoAiQRDgALOgAgAiAAKAIAIAAoAgQgACgCCCICIAFsaiACIAAoAgwgACgCECABIAAoAhQiAWxqIAEgACgCGBEOAAv9AQEBfyAAKAIYIAAoAiwgAWxqIAAoAiggAmxqIAAoAiQgA2xqIAAoAiAgBGxqIAAoAhwgBWxqIQYCQCAAKAJgIAEgACgCRGtNDQAgACgCXCACIABBQGsoAgBrTQ0AIAAoAlggAyAAKAI8a00NACAAKAJUIAQgACgCOGtNDQAgACgCUCAFIAAoAjRrTQ0AQQEgACgCTCAAKAIwIAAoAkggACgCACAAKAIUIAFsaiAAKAIQIAJsaiAAKAIMIANsaiAAKAIIIARsaiAAKAIEIAVsakEAIAZBACAAKAJoIAAoAmwRDAAPC0EBIAAoAmQgBkEAIAAoAmggACgCcBEGAAuuAQAgACgCSCAAKAIAIAAoAgQgAWxqIAAoAgggAmxqIAAoAgwgA2xqIAAoAhAgBGxqIAAoAhQgBWxqIAAoAhggACgCHCABbGogACgCICACbGogACgCJCADbGogACgCKCAEbGogACgCLCAFbGogACgCMCAAKAI0IAFsaiAAKAI4IAJsaiAAKAI8IANsaiAAQUBrKAIAIARsaiAAKAJEIAVsaiAAQcwAaiAAKAJsEQYAC7QBAQV/IABBGGohBCAAKAIMIAAoAhAiBSABbGohAyAAKAIEIAAoAggiBiABbGohASACQQFxBH8gACgCACABIAMgBCAAKAIUEQEAIAMgBWohAyABIAZqIQEgAkEBawUgAgshByACQQFHBEADQCAAKAIAIAEgAyAEIAAoAhQRAQAgACgCACABIAZqIgEgAyAFaiIDIAQgACgCFBEBACADIAVqIQMgASAGaiEBIAdBAmsiBw0ACwsLLQAgAiAAKAIAIAFqIAAoAgggASAALwEQdiAALwESdGogAEEYaiAAKAIUEQEAC5MBAQV/IwBBEGsiAiQAIAAoAgwhBCAAKAIQIQUgACgCACIDIAAoAgQgACgCCCABbGoiBiACQQxqIAAoAhQRAAAgAyAGIAJBDGogBCABIAVsaiIBIAJBCGogAEEoaiAAKAIYEQkAIAJDAACAPyACKgIIlTgCBCADIAEgAkEEaiABIABBIGogACgCHBEGACACQRBqJAALPwAgAiAAKAIAIAAoAgQgACgCCCICIAFsaiACIAAoAgwgACgCECABIAAoAhQiAWxqIAEgAEEcaiAAKAIYEQcAC7cwARF/AkBBwK8BLQAAQQFxRQ0AAkACQCAAKAKABA4DAAECAQsPC0EDQQEgAC0AyAFBEHEbIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAKoAkEBaw4MAAECAwQFBgcICQoLDQsgACgCrAIhAiAAQYADaiEDIAAoArACIQACQAJAAkAgAUUNACAAQQJJDQAgASgChAFBAUsNAQsCQCAARQ0AIABBA3EhBEEAIQpBACEBIABBAWtBA08EQCAAQXxxIQVBACEAA0AgAyABIAIRAgAgAyABQQFyIAIRAgAgAyABQQJyIAIRAgAgAyABQQNyIAIRAgAgAUEEaiEBIABBBGoiACAFRw0ACwsgBEUNAANAIAMgASACEQIAIAFBAWohASAKQQFqIgogBEcNAAsLDAELIAFB9AFBAEEAIAIgAyAAIAoQvwMLDAsLIAAoAqwCIQQgAEGAA2ohBSAAKAKwAiECIAAoAsgCIQAjAEEQayIDJAACQAJAAkAgAUUNACAAIAJPDQAgASgChAFBAUsNAQsgAkUNAUEAIQEDQCAFIAEgAiABayIKIAAgACAKSxsgBBEAACAAIAFqIgEgAkkNAAsMAQsgAyACNgIIIAMgADYCDCABQfUBIANBCGpBCCAEIAUgAiAAbiIBIAIgACABbEdqIAoQvwMLIANBEGokAAwKCyAAKAKsAiECIABBgANqIQMgACgCsAIhCCAAKAK0AiEAIwBBEGsiBSQAAkACQAJAIAFFDQAgACAIckECSQ0AQQEhBCABKAKEAUEBSw0BCyAIRQ0BIABBfHEhCSAAQQNxIQZBACEKIABBAWtBAkshCwNAAkAgAEUNAEEAIQRBACEBQQAhByALBEADQCADIAogASACEQAAIAMgCiABQQFyIAIRAAAgAyAKIAFBAnIgAhEAACADIAogAUEDciACEQAAIAFBBGohASAHQQRqIgcgCUcNAAsLIAZFDQADQCADIAogASACEQAAIAFBAWohASAEQQFqIgQgBkcNAAsLIApBAWoiCiAIRw0ACwwBCyAAIAhsIQkgAEEBRwRAQQEhB0ECQR8gAEEBa2drIgZ0IABrrUIghiAArYCnQQFqIQQLIAUgBjoACSAFIAc6AAggBSAENgIEIAUgADYCACABQfYBIAVBDCACIAMgCSAKEL8DCyAFQRBqJAAMCQsgACgCrAIhBiAAQYADaiEHIAAoArACIQMgACgCtAIhAiAAKALIAiEAIwBBIGsiBCQAAkACQAJAIAFFDQAgASgChAFBAkkNAEEBIQUgA0EBSw0BIAAgAkkNAQsgA0UNAUEAIQUDQEEAIQEgAgRAA0AgByAFIAEgAiABayIKIAAgACAKSxsgBhEBACAAIAFqIgEgAkkNAAsLIAVBAWoiBSADRw0ACwwBCyAEIAI2AgggBCAANgIMIAMgAiAAbiIDIAIgACADbEdqIgBsIQNBACECIABBAUcEQEEBIQhBAkEfIABBAWtnayICdCAAa61CIIYgAK2Ap0EBaiEFCyAEIAI6ABkgBCAIOgAYIAQgBTYCFCAEIAA2AhAgAUH3ASAEQQhqQRQgBiAHIAMgChC/AwsgBEEgaiQADAgLIAAoAqwCIQggAEGAA2ohCSAAKAKwAiEFIAAoArQCIQIgACgCyAIhBCAAKALMAiEAIwBBIGsiAyQAAkACQAJAIAFFDQAgASgChAFBAkkNACAEIAVJDQEgACACSQ0BCyAFRQ0BA0AgAgRAIAUgB2siASAEIAEgBEkbIQZBACEBA0AgCSAHIAEgBiACIAFrIgogACAAIApLGyAIEQYAIAAgAWoiASACSQ0ACwsgBCAHaiIHIAVJDQALDAELIAMgBTYCACADIAQ2AgQgAyACNgIIIAMgADYCDCACIABuIgYgAiAAIAZsR2oiACAFIARuIgIgBSACIARsR2psIQRBASECQQAhBiAAQQFHBEBBASEHQQJBHyAAQQFrZ2siBnQgAGutQiCGIACtgKdBAWohAgsgAyAGOgAZIAMgBzoAGCADIAI2AhQgAyAANgIQIAFB+AEgA0EcIAggCSAEIAoQvwMLIANBIGokAAwHCyAAKAKsAiEGIABBgANqIQcgACgCsAIhDCAAKAK0AiEEIAAoArgCIQIjAEEgayIDJAACQAJAAkAgAUUNACABKAKEAUECSQ0AQQEhACAEIAxyIAJyQQFLDQELIAxFDQEgAkF8cSEIIAJBA3EhCUEAIQAgAkEBa0EDSSENA0BBACEKIAQEQANAAkAgAkUNAEEAIQtBACEBQQAhBSANRQRAA0AgByAAIAogASAGEQEAIAcgACAKIAFBAXIgBhEBACAHIAAgCiABQQJyIAYRAQAgByAAIAogAUEDciAGEQEAIAFBBGohASAFQQRqIgUgCEcNAAsLIAlFDQADQCAHIAAgCiABIAYRAQAgAUEBaiEBIAtBAWoiCyAJRw0ACwsgCkEBaiIKIARHDQALCyAAQQFqIgAgDEcNAAsMAQsgBCAMbCEIIARBAUcEQEEBIQVBAkEfIARBAWtnayIJdCAEa61CIIYgBK2Ap0EBaiEACyACIAhsIQggAyAJOgARIAMgBToAECADIAA2AgwgAyAENgIIQQEhAEEAIQUgAkEBRwRAQQEhC0ECQR8gAkEBa2drIgV0IAJrrUIghiACrYCnQQFqIQALIAMgBToAHSADIAs6ABwgAyAANgIYIAMgAjYCFCABQfkBIANBCGpBGCAGIAcgCCAKEL8DCyADQSBqJAAMBgsgACgCrAIhCyAAQYADaiEMIAAoArACIQggACgCtAIhBCAAKAK4AiECIAAoAsgCIQYgACgCzAIhACMAQTBrIgMkAAJAAkACQCABRQ0AIAEoAoQBQQJJDQBBASEFIAhBAUsNASAEIAZLDQEgACACSQ0BCyAIRQ0BA0BBACEFIAQEQANAIAIEQCAEIAVrIgEgBiABIAZJGyEJQQAhAQNAIAwgByAFIAEgCSACIAFrIgogACAAIApLGyALEQkAIAAgAWoiASACSQ0ACwsgBSAGaiIFIARJDQALCyAHQQFqIgcgCEcNAAsMAQsgAyACNgIQIAMgADYCFCACIABuIgcgAiAAIAdsR2ohACADIAQ2AgggAyAGNgIMIAQgBm4iAiAEIAIgBmxHaiICIAhsIQRBACEHQQAhBiACQQFHBEBBASEHQQJBHyACQQFrZ2siBnQgAmutQiCGIAKtgKdBAWohBQsgACAEbCEEIAMgBjoAISADIAc6ACAgAyAFNgIcIAMgAjYCGEEBIQJBACEFIABBAUcEQEEBIQlBAkEfIABBAWtnayIFdCAAa61CIIYgAK2Ap0EBaiECCyADIAU6AC0gAyAJOgAsIAMgAjYCKCADIAA2AiQgAUH6ASADQQhqQSggCyAMIAQgChC/AwsgA0EwaiQADAULIAAoAqwCIQkgAEGAA2ohCyAAKAKwAiEOIAAoArQCIQUgACgCuAIhDSAAKAK8AiEEIwBBMGsiAiQAAkACQAJAIAFFDQAgASgChAFBAkkNAEEBIQMgBSAOciANciAEckEBSw0BCyAORQ0BIARBfHEhDCAEQQNxIQdBACEDIARBAWtBA0khDwNAQQAhACAFBEADQEEAIQogDQRAA0ACQCAERQ0AQQAhBkEAIQFBACEIIA9FBEADQCALIAMgACAKIAEgCREGACALIAMgACAKIAFBAXIgCREGACALIAMgACAKIAFBAnIgCREGACALIAMgACAKIAFBA3IgCREGACABQQRqIQEgCEEEaiIIIAxHDQALCyAHRQ0AA0AgCyADIAAgCiABIAkRBgAgAUEBaiEBIAZBAWoiBiAHRw0ACwsgCkEBaiIKIA1HDQALCyAAQQFqIgAgBUcNAAsLIANBAWoiAyAORw0ACwwBCyACIA02AgggBCANbCEAIAVBAUcEQEEBIQhBAkEfIAVBAWtnayIHdCAFa61CIIYgBa2Ap0EBaiEDCyAFIA5sIQwgAiAHOgAVIAIgCDoAFCACIAM2AhAgAiAFNgIMQQEhA0EBIQhBACEHIABBAUcEQEECQR8gAEEBa2drIgd0IABrrUIghiAArYCnQQFqIQhBASEGCyAAIAxsIQwgAiAHOgAhIAIgBjoAICACIAg2AhwgAiAANgIYQQAhAEEAIQYgBEEBRwRAQQJBHyAEQQFrZ2siBnQgBGutQiCGIAStgKdBAWohA0EBIQALIAIgBjoALSACIAA6ACwgAiADNgIoIAIgBDYCJCABQfsBIAJBCGpBKCAJIAsgDCAKEL8DCyACQTBqJAAMBAsgACgCrAIhDSAAQYADaiEOIAAoArACIQwgACgCtAIhByAAKAK4AiEJIAAoArwCIQQgACgCyAIhBSAAKALMAiECIwBBQGoiACQAAkACQAJAIAFFDQAgASgChAFBAkkNAEEBIQYgByAMckEBSw0BIAUgCUkNASACIARJDQELIAxFDQEDQEEAIQMgBwRAA0BBACEGIAkEQANAIAQEQCAJIAZrIgEgBSABIAVJGyELQQAhAQNAIA4gCCADIAYgASALIAQgAWsiCiACIAIgCksbIA0RDgAgASACaiIBIARJDQALCyAFIAZqIgYgCUkNAAsLIANBAWoiAyAHRw0ACwsgCEEBaiIIIAxHDQALDAELIAAgBDYCECAAIAI2AhQgACAJNgIIIAAgBTYCDCAJIAVuIgMgCSADIAVsR2ogBCACbiIDIAQgAiADbEdqIgRsIQJBACEDIAdBAUcEQEECQR8gB0EBa2drIgh0IAdrrUIghiAHrYCnQQFqIQZBASEDCyAHIAxsIQUgACAIOgAhIAAgAzoAICAAIAY2AhwgACAHNgIYQQEhBkEBIQNBACEIIAJBAUcEQEEBIQtBAkEfIAJBAWtnayIIdCACa61CIIYgAq2Ap0EBaiEDCyACIAVsIQUgACAIOgAtIAAgCzoALCAAIAM2AiggACACNgIkQQAhAkEAIQsgBEEBRwRAQQJBHyAEQQFrZ2siC3QgBGutQiCGIAStgKdBAWohBkEBIQILIAAgCzoAOSAAIAI6ADggACAGNgI0IAAgBDYCMCABQfwBIABBCGpBNCANIA4gBSAKEL8DCyAAQUBrJAAMAwsgACgCrAIhDCAAQYADaiENIAAoArACIQ4gACgCtAIhCCAAKAK4AiEJIAAoArwCIQsgACgCwAIhBiMAQUBqIgAkAAJAAkACQCABRQ0AIAEoAoQBQQJJDQBBASECIAggDnIgCXIgC3IgBnJBAUsNAQsgDkUNASAGQX5xIQcgBkEBcSEPA0BBACEFIAgEQANAQQAhAiAJBEADQEEAIQogCwRAA0BBACEBQQAhBAJAAkACQCAGDgICAQALA0AgDSADIAUgAiAKIAEgDBEJACANIAMgBSACIAogAUEBciAMEQkAIAFBAmohASAEQQJqIgQgB0cNAAsLIA9FDQAgDSADIAUgAiAKIAEgDBEJAAsgCkEBaiIKIAtHDQALCyACQQFqIgIgCUcNAAsLIAVBAWoiBSAIRw0ACwsgA0EBaiIDIA5HDQALDAELIAAgCzYCCCAIQQFHBEBBASEDQQJBHyAIQQFrZ2siB3QgCGutQiCGIAitgKdBAWohAgsgCCAObCEPIAYgC2whBCAAIAc6ABUgACADOgAUIAAgAjYCECAAIAg2AgxBASECQQEhA0EAIQcgCUEBRwRAQQEhBUECQR8gCUEBa2drIgd0IAlrrUIghiAJrYCnQQFqIQMLIAkgD2whCyAAIAc6ACEgACAFOgAgIAAgAzYCHCAAIAk2AhhBACEFQQAhA0EAIQcgBEEBRwRAQQEhA0ECQR8gBEEBa2drIgd0IARrrUIghiAErYCnQQFqIQILIAQgC2whCyAAIAc6AC0gACADOgAsIAAgAjYCKCAAIAQ2AiRBASEEQQAhAiAGQQFHBEBBASEFQQJBHyAGQQFrZ2siAnQgBmutQiCGIAatgKdBAWohBAsgACACOgA5IAAgBToAOCAAIAQ2AjQgACAGNgIwIAFB/QEgAEEIakE0IAwgDSALIAoQvwMLIABBQGskAAwCCyAAKAKsAiEPIABBgANqIRAgACgCsAIhDiAAKAK0AiEHIAAoArgCIQggACgCvAIhCyAAKALAAiECIAAoAsgCIQwgACgCzAIhBCMAQUBqIgAkAAJAAkACQCABRQ0AIAEoAoQBQQJJDQBBASEFIAcgDnIgCHJBAUsNASALIAxLDQEgAiAESw0BCyAORQ0BA0BBACEGIAcEQANAQQAhAyAIBEADQEEAIQUgCwRAA0AgAgRAIAsgBWsiASAMIAEgDEkbIQ1BACEBA0AgECAJIAYgAyAFIAEgDSACIAFrIgogBCAEIApLGyAPEQcAIAEgBGoiASACSQ0ACwsgBSAMaiIFIAtJDQALCyADQQFqIgMgCEcNAAsLIAZBAWoiBiAHRw0ACwsgCUEBaiIJIA5HDQALDAELIAAgAjYCCCAAIAQ2AgwgAiAEbiIDIAIgAyAEbEdqIQQgACALNgIAIAAgDDYCBCALIAxuIgIgCyACIAxsR2ohAkEAIQMgB0EBRwRAQQJBHyAHQQFrZ2siBnQgB2utQiCGIAetgKdBAWohBUEBIQMLIAcgDmwhCSACIARsIQIgACAGOgAZIAAgAzoAGCAAIAU2AhQgACAHNgIQQQEhBUEBIQNBACEGIAhBAUcEQEEBIQ1BAkEfIAhBAWtnayIGdCAIa61CIIYgCK2Ap0EBaiEDCyAIIAlsIQkgACAGOgAlIAAgDToAJCAAIAM2AiAgACAINgIcQQAhDUEAIQNBACEGIAJBAUcEQEECQR8gAkEBa2drIgZ0IAJrrUIghiACrYCnQQFqIQVBASEDCyACIAlsIQkgACAGOgAxIAAgAzoAMCAAIAU2AiwgACACNgIoQQEhAkEAIQUgBEEBRwRAQQEhDUECQR8gBEEBa2drIgV0IARrrUIghiAErYCnQQFqIQILIAAgBToAPSAAIA06ADwgACACNgI4IAAgBDYCNCABQf4BIABBwAAgDyAQIAkgChC/AwsgAEFAayQADAELIAAoAqwCIREgAEGAA2ohEiAAKAKwAiEQIAAoArQCIQsgACgCuAIhDyAAKAK8AiEMIAAoAsACIQ4gACgCxAIhBCAAKALIAiEIIAAoAswCIQMjAEHQAGsiACQAAkACQAJAIAFFDQAgASgChAFBAkkNAEEBIQIgCyAQciAPciAMckEBSw0BIAggDkkNASADIARJDQELIBBFDQEDQEEAIQYgCwRAA0BBACEFIA8EQANAQQAhByAMBEADQEEAIQIgDgRAA0AgBARAIA4gAmsiASAIIAEgCEkbIQlBACEBA0AgEiANIAYgBSAHIAIgASAJIAQgAWsiCiADIAMgCksbIBERDAAgASADaiIBIARJDQALCyACIAhqIgIgDkkNAAsLIAdBAWoiByAMRw0ACwsgBUEBaiIFIA9HDQALCyAGQQFqIgYgC0cNAAsLIA1BAWoiDSAQRw0ACwwBCyAAIAQ2AgwgACADNgIQIAQgBCADbiIGIANsRyEEIAAgDjYCBCAAIAg2AgggDiAOIAhuIg0gCGxHIQggACAPNgIAIAwgD2whAyALQQFHBEBBASEHQQJBHyALQQFrZ2siBXQgC2utQiCGIAutgKdBAWohAgsgBCAGaiEEIAggDWohDSAAIAU6AB0gACAHOgAcIAAgAjYCGCAAIAs2AhRBASEHQQEhBUEAIQYgA0EBRwRAQQEhCUECQR8gA0EBa2drIgZ0IANrrUIghiADrYCnQQFqIQULIAsgEGwhCCAEIA1sIQIgACAGOgApIAAgCToAKCAAIAU2AiQgACADNgIgQQAhCUEAIQVBACEGIAxBAUcEQEECQR8gDEEBa2drIgZ0IAxrrUIghiAMrYCnQQFqIQdBASEFCyADIAhsIQ0gACAGOgA1IAAgBToANCAAIAc2AjAgACAMNgIsQQEhA0EBIQdBACEFIAJBAUcEQEEBIQlBAkEfIAJBAWtnayIFdCACa61CIIYgAq2Ap0EBaiEHCyACIA1sIQYgACAFOgBBIABBQGsgCToAACAAIAc2AjwgACACNgI4QQAhAkEAIQkgBEEBRwRAQQJBHyAEQQFrZ2siCXQgBGutQiCGIAStgKdBAWohA0EBIQILIAAgCToATSAAIAI6AEwgACADNgJIIAAgBDYCRCABQf8BIABB0AAgESASIAYgChC/AwsgAEHQAGokAAsLC6IIARd/IARBfHEhGSAEQQNxIRcgBUEBayAEbCEaIAJBACAEIAVsayIbIAJxIgprIRwgASACbEECdCEdIARBAWtBA0khHgNAIAEhE0EAIQ0gAQRAA0AgAyABIA1rIgUgAyAFSRshFCADIBMgAyATSRshEQJAIAdFDQAgFEUNACARQQNxIQ5BACELQQAhBSARQQFrQQNPBEAgEUF8cSEPQQAhEANAIAggBUECdGogByAFIA1qQQJ0aioCADgCACAIIAVBAXIiDEECdGogByAMIA1qQQJ0aioCADgCACAIIAVBAnIiDEECdGogByAMIA1qQQJ0aioCADgCACAIIAVBA3IiDEECdGogByAMIA1qQQJ0aioCADgCACAFQQRqIQUgEEEEaiIQIA9HDQALCyAORQ0AA0AgCCAFQQJ0aiAHIAUgDWpBAnRqKgIAOAIAIAVBAWohBSALQQFqIgsgDkcNAAsLIAMgFGsgBGwhGCAIIANBAnRqIQVBACEPIAoEQANAIBQEQCAPIBtxIRJBACEOA0ACQCAERQ0AIA0gDmogAmwgEmogBCAObCAPaiAacWohC0EAIRBBACEIQQAhDCAeRQRAA0AgBSAGIAggC2pBAnRqKgIAOAIAIAUgBiALIAhBAXJqQQJ0aioCADgCBCAFIAYgCyAIQQJyakECdGoqAgA4AgggBSAGIAsgCEEDcmpBAnRqKgIAOAIMIAhBBGohCCAFQRBqIQUgDEEEaiIMIBlHDQALCyAXRQ0AA0AgBSAGIAggC2pBAnRqKgIAOAIAIAhBAWohCCAFQQRqIQUgEEEBaiIQIBdHDQALCyAOQQFqIg4gEUcNAAsLIAUgGEECdGohBSAEIA9qIg8gCkkNAAsLIBwhFSAKIRYgAiAKSwRAA0AgFARAIAQgBCACIBZrIgggBCAISRsiH2shICAEIBUgBCAVSRsiCEEBayEhIAhBfHEhDyAIQQNxIQ5BACESA0ACQCAfRQ0AIA0gEmogAmwgFmohC0EAIRBBACEIQQAhDCAhQQNPBEADQCAFIAYgCCALakECdGoqAgA4AgAgBSAGIAsgCEEBcmpBAnRqKgIAOAIEIAUgBiALIAhBAnJqQQJ0aioCADgCCCAFIAYgCyAIQQNyakECdGoqAgA4AgwgCEEEaiEIIAVBEGohBSAMQQRqIgwgD0cNAAsLIA5FDQADQCAFIAYgCCALakECdGoqAgA4AgAgCEEBaiEIIAVBBGohBSAQQQFqIhAgDkcNAAsLIAUgIEECdGohBSASQQFqIhIgEUcNAAsLIBUgBGshFSAFIBhBAnRqIQUgBCAWaiIWIAJJDQALCyATIANrIRMgBSAJaiEIIAMgDWoiDSABSQ0ACwsgByABQQJ0akEAIAcbIQcgBiAdaiEGIABBAWsiAA0ACwudCAEWfyAABEAgBEEBayADbCEYIANBfHEhGSADQQNxIRYgAUEAIAMgBGxrIhogAXEiFWshCCADQQFrQQNJIRsgACESA0AgAiAAIAxrIgQgAiAESRshEyACIBIgAiASSRshEAJAIAZFDQAgE0UNACAQQQNxIQ5BACEKQQAhBCAQQQFrQQNPBEAgEEF8cSENQQAhCQNAIAcgBEECdGogBiAEIAxqQQJ0aioCADgCACAHIARBAXIiC0ECdGogBiALIAxqQQJ0aioCADgCACAHIARBAnIiC0ECdGogBiALIAxqQQJ0aioCADgCACAHIARBA3IiC0ECdGogBiALIAxqQQJ0aioCADgCACAEQQRqIQQgCUEEaiIJIA1HDQALCyAORQ0AA0AgByAEQQJ0aiAGIAQgDGpBAnRqKgIAOAIAIARBAWohBCAKQQFqIgogDkcNAAsLIAIgE2sgA2whFyAHIAJBAnRqIQdBACEPIBUEQANAIBMEQCAPIBpxIRFBACENA0ACQCADRQ0AIAwgDWohCiADIA1sIA9qIBhxIBFqIQlBACELQQAhBEEAIQ4gG0UEQANAIAcgBSAKIAQgCWogAGxqQQJ0aioCADgCACAHIAUgCiAJIARBAXJqIABsakECdGoqAgA4AgQgByAFIAogCSAEQQJyaiAAbGpBAnRqKgIAOAIIIAcgBSAKIAkgBEEDcmogAGxqQQJ0aioCADgCDCAEQQRqIQQgB0EQaiEHIA5BBGoiDiAZRw0ACwsgFkUNAANAIAcgBSAKIAQgCWogAGxqQQJ0aioCADgCACAEQQFqIQQgB0EEaiEHIAtBAWoiCyAWRw0ACwsgDUEBaiINIBBHDQALCyAHIBdBAnRqIQcgAyAPaiIPIBVJDQALCyAIIRQgFSIJIAFJBEADQCATBEAgAyADIAEgCWsiBCADIARJGyIcayEdIAMgFCADIBRJGyIEQQFrIR4gBEF8cSEPIARBA3EhDUEAIREDQAJAIBxFDQAgDCARaiEKQQAhC0EAIQRBACEOIB5BA08EQANAIAcgBSAKIAQgCWogAGxqQQJ0aioCADgCACAHIAUgCiAEQQFyIAlqIABsakECdGoqAgA4AgQgByAFIAogBEECciAJaiAAbGpBAnRqKgIAOAIIIAcgBSAKIARBA3IgCWogAGxqQQJ0aioCADgCDCAEQQRqIQQgB0EQaiEHIA5BBGoiDiAPRw0ACwsgDUUNAANAIAcgBSAKIAQgCWogAGxqQQJ0aioCADgCACAEQQFqIQQgB0EEaiEHIAtBAWoiCyANRw0ACwsgByAdQQJ0aiEHIBFBAWoiESAQRw0ACwsgFCADayEUIAcgF0ECdGohByADIAlqIgkgAUkNAAsLIBIgAmshEiACIAxqIgwgAEkNAAsLC8kIARh/IAVBfHEhGyAFQQNxIRkgBkEBayAFbCEcIANBACAFIAZsayIdIANxIgtrIR4gASACbCADbEECdCEfIAVBAWtBA0khIANAIAEhFEEAIQ4gAQRAA0AgBCABIA5rIgYgBCAGSRshFSAEIBQgBCAUSRshEgJAIAhFDQAgFUUNACASQQNxIQ9BACEMQQAhBiASQQFrQQNPBEAgEkF8cSEQQQAhEQNAIAkgBkECdGogCCAGIA5qQQJ0aioCADgCACAJIAZBAXIiDUECdGogCCANIA5qQQJ0aioCADgCACAJIAZBAnIiDUECdGogCCANIA5qQQJ0aioCADgCACAJIAZBA3IiDUECdGogCCANIA5qQQJ0aioCADgCACAGQQRqIQYgEUEEaiIRIBBHDQALCyAPRQ0AA0AgCSAGQQJ0aiAIIAYgDmpBAnRqKgIAOAIAIAZBAWohBiAMQQFqIgwgD0cNAAsLIAkgBEECdGohBiACBEAgBCAVayAFbCEaQQAhFgNAQQAhECALBEADQCAVBEAgECAdcSETQQAhDwNAAkAgBUUNACAFIA9sIBBqIBxxIBNqIA4gD2ogAmwgFmogA2xqIQxBACERQQAhCUEAIQ0gIEUEQANAIAYgByAJIAxqQQJ0aioCADgCACAGIAcgDCAJQQFyakECdGoqAgA4AgQgBiAHIAwgCUECcmpBAnRqKgIAOAIIIAYgByAMIAlBA3JqQQJ0aioCADgCDCAJQQRqIQkgBkEQaiEGIA1BBGoiDSAbRw0ACwsgGUUNAANAIAYgByAJIAxqQQJ0aioCADgCACAJQQFqIQkgBkEEaiEGIBFBAWoiESAZRw0ACwsgD0EBaiIPIBJHDQALCyAGIBpBAnRqIQYgBSAQaiIQIAtJDQALCyAeIRcgCyEYIAMgC0sEQANAIBUEQCAFIAUgAyAYayIJIAUgCUkbIiFrISIgBSAXIAUgF0kbIglBAWshIyAJQXxxIRAgCUEDcSEPQQAhEwNAAkAgIUUNACAOIBNqIAJsIBZqIANsIBhqIQxBACERQQAhCUEAIQ0gI0EDTwRAA0AgBiAHIAkgDGpBAnRqKgIAOAIAIAYgByAMIAlBAXJqQQJ0aioCADgCBCAGIAcgDCAJQQJyakECdGoqAgA4AgggBiAHIAwgCUEDcmpBAnRqKgIAOAIMIAlBBGohCSAGQRBqIQYgDUEEaiINIBBHDQALCyAPRQ0AA0AgBiAHIAkgDGpBAnRqKgIAOAIAIAlBAWohCSAGQQRqIQYgEUEBaiIRIA9HDQALCyAGICJBAnRqIQYgE0EBaiITIBJHDQALCyAXIAVrIRcgBiAaQQJ0aiEGIAUgGGoiGCADSQ0ACwsgFkEBaiIWIAJHDQALCyAUIARrIRQgBiAKaiEJIAQgDmoiDiABSQ0ACwsgCCABQQJ0akEAIAgbIQggByAfaiEHIABBAWsiAA0ACwuZBQEPfyAABEAgACABbCEWIAFBAnQhFANAIAEhCUEAIQsgAQRAA0AgAyABIAtrIgogAyAKSRshEiADIAkgAyAJSRsiDEEBayEVAkAgBkUNACASRQ0AIAxBA3EhEEEAIQ1BACEKIBVBA08EQCAMQXxxIRFBACEPA0AgByAKQQJ0aiAGIAogC2pBAnRqKgIAOAIAIAcgCkEBciIOQQJ0aiAGIAsgDmpBAnRqKgIAOAIAIAcgCkECciIOQQJ0aiAGIAsgDmpBAnRqKgIAOAIAIAcgCkEDciIOQQJ0aiAGIAsgDmpBAnRqKgIAOAIAIApBBGohCiAPQQRqIg8gEUcNAAsLIBBFDQADQCAHIApBAnRqIAYgCiALakECdGoqAgA4AgAgCkEBaiEKIA1BAWoiDSAQRw0ACwsgByADQQJ0aiEHIAIEQCADIBJrIARsIRcgDEF8cSEYIAxBA3EhEUEAIQwDQAJAIBJFDQAgDCAWbCALaiENQQAhDkEAIQpBACEQIBVBA08EQANAIAcgBSAKIA1qQQJ0aioCADgCACAHIARBAnQiD2oiByAFIA0gCkEBcmpBAnRqKgIAOAIAIAcgD2oiByAFIA0gCkECcmpBAnRqKgIAOAIAIAcgD2oiByAFIA0gCkEDcmpBAnRqKgIAOAIAIAcgD2ohByAKQQRqIQogEEEEaiIQIBhHDQALCyARRQ0AA0AgByAFIAogDWpBAnRqKgIAOAIAIApBAWohCiAHIARBAnRqIQcgDkEBaiIOIBFHDQALCyAHIBdBAnRqIQcgDEEBaiIMIAJHDQALCyAJIANrIQkgByAIaiEHIAMgC2oiCyABSQ0ACwsgBiAUakEAIAYbIQYgBSAUaiEFIBNBAWoiEyAARw0ACwsLzAQBC38gAgRAIAIhCANAIAMgAiAKayIJIAMgCUkbIRAgAyAIIAMgCEkbIQ0CQCAFRQRAIAZBACADIAIgAyAPbGsiCSADIAlJG0ECdBDUAyANQQJ0aiEGDAELIBBFDQAgDUEDcSELQQAhDAJAIA1BAWtBA0kEQEEAIQkMAQsgDUF8cSERQQAhCUEAIQ4DQCAGIAUgCSAKakECdGoqAgA4AgAgBiAFIAlBAXIgCmpBAnRqKgIAOAIEIAYgBSAJQQJyIApqQQJ0aioCADgCCCAGIAUgCUEDciAKakECdGoqAgA4AgwgCUEEaiEJIAZBEGohBiAOQQRqIg4gEUcNAAsLIAtFDQADQCAGIAUgCSAKakECdGoqAgA4AgAgCUEBaiEJIAZBBGohBiAMQQFqIgwgC0cNAAsLIAYgAyAQa0ECdCISaiEGIAEEQCANQX5xIREgDUEBcSETQQAhCwNAQQAhDCAABEADQAJAIBBFDQBBACEJQQAhDiANQQFHBEADQCAGIAQgCSAKaiAAbCAMaiABbCALakECdGoqAgA4AgAgBiAEIAlBAXIgCmogAGwgDGogAWwgC2pBAnRqKgIAOAIEIAlBAmohCSAGQQhqIQYgDkECaiIOIBFHDQALCyATRQ0AIAYgBCAJIApqIABsIAxqIAFsIAtqQQJ0aioCADgCACAGQQRqIQYLIAYgEmohBiAMQQFqIgwgAEcNAAsLIAtBAWoiCyABRw0ACwsgD0EBaiEPIAggA2shCCAGIAdqIQYgAyAKaiIKIAJJDQALCwuABQENfyACBEAgAiEIA0AgAyACIAprIgkgAyAJSRshESADIAggAyAISRsiC0EBayETAkAgBUUEQCAGQQAgAyACIAMgEGxrIgkgAyAJSRtBAnQQ1AMgC0ECdGohBgwBCyARRQ0AIAtBA3EhDUEAIQwCQCATQQNJBEBBACEJDAELIAtBfHEhD0EAIQlBACEOA0AgBiAFIAkgCmpBAnRqKgIAOAIAIAYgBSAJQQFyIApqQQJ0aioCADgCBCAGIAUgCUECciAKakECdGoqAgA4AgggBiAFIAlBA3IgCmpBAnRqKgIAOAIMIAlBBGohCSAGQRBqIQYgDkEEaiIOIA9HDQALCyANRQ0AA0AgBiAFIAkgCmpBAnRqKgIAOAIAIAlBAWohCSAGQQRqIQYgDEEBaiIMIA1HDQALCyAGIAMgEWtBAnQiFGohBiABBEAgC0F8cSEVIAtBA3EhD0EAIRIDQEEAIQsgAARAA0ACQCARRQ0AIAEgC2wgEmogAmwgCmohDEEAIQ5BACEJQQAhDSATQQNPBEADQCAGIAQgCSAMakECdGoqAgA4AgAgBiAEIAwgCUEBcmpBAnRqKgIAOAIEIAYgBCAMIAlBAnJqQQJ0aioCADgCCCAGIAQgDCAJQQNyakECdGoqAgA4AgwgCUEEaiEJIAZBEGohBiANQQRqIg0gFUcNAAsLIA9FDQADQCAGIAQgCSAMakECdGoqAgA4AgAgCUEBaiEJIAZBBGohBiAOQQFqIg4gD0cNAAsLIAYgFGohBiALQQFqIgsgAEcNAAsLIBJBAWoiEiABRw0ACwsgEEEBaiEQIAggA2shCCAGIAdqIQYgAyAKaiIKIAJJDQALCwu/BAEKfyAABEAgACEFA0AgASAFIAEgBUkbIQgCQAJAAkACQAJAAkAgASAAIAdrIgYgASAGSRsiDARAIAhBA3EhC0EAIQkgCEEBa0EDSSIPRQ0BQQAhBgwCCyAEIAEgDGsiDkECdGohBiADDQUMAgsgCEF8cSENQQAhBkEAIQoDQCAEIAIgBiAHakECdGoqAgA4AgAgBCACIAZBAXIgB2pBAnRqKgIAOAIEIAQgAiAGQQJyIAdqQQJ0aioCADgCCCAEIAIgBkEDciAHakECdGoqAgA4AgwgBkEEaiEGIARBEGohBCAKQQRqIgogDUcNAAsLIAsEQANAIAQgAiAGIAdqQQJ0aioCADgCACAGQQFqIQYgBEEEaiEEIAlBAWoiCSALRw0ACwsgBCABIAxrIg5BAnRqIQYgA0UNACAMRQ0DQQAhCSAPRQ0BQQAhBAwCCyAGQQAgCEECdBDUAxogBCABQQJ0aiEGDAILIAhBfHEhDUEAIQRBACEKA0AgBiADIAQgB2pBAnRqKgIAOAIAIAYgAyAEQQFyIAdqQQJ0aioCADgCBCAGIAMgBEECciAHakECdGoqAgA4AgggBiADIARBA3IgB2pBAnRqKgIAOAIMIARBBGohBCAGQRBqIQYgCkEEaiIKIA1HDQALCyALRQ0AA0AgBiADIAQgB2pBAnRqKgIAOAIAIARBAWohBCAGQQRqIQYgCUEBaiIJIAtHDQALCyAFIAFrIQUgBiAOQQJ0aiEEIAEgB2oiByAASQ0ACwsLMQAgAEGAgIDaBDYCCCAAQYCAgNoEIAFrNgIMIAAgAyABa7I4AgQgACACIAFrsjgCAAs9ACAAQYCAgNoENgIAIABBgICA2gQgAWs2AgwgACADIAFrskMAAEBLkjgCCCAAIAIgAWuyQwAAQEuSOAIECwkAIAAgATgCAAsXACAAIAM4AgggACACOAIEIAAgATgCAAsQACAAIAI4AgQgACABOAIACx0AIABBgICAhgQ2AgggAEKr1arxg4CAoMAANwIACzwAIABBz9i6lQQ2AhggAEKF///3g4CAwD83AhAgAEKAgMb5s5Cgr7l/NwIIIABCgICAwrTHqty/fzcCAAtVACAAQvaBgPiDgIDAPzcCJCAAQo79/q3r4aqVPjcCHCAAQrvU4v2DwNyYv383AhQgAEKjwqqMjICAoMkANwIMIAAgAzgCCCAAIAI4AgQgACABOAIAC28AIABBgICA/AM2AjQgAELY1Krx8////z43AiwgAELHp6Tgs/GqlT03AiQgAELjhYKow7Pu2jo3AhwgAEK71OL9g8TcmL9/NwIUIABCo8KqjPyPgKDLADcCDCAAIAM4AgggACACOAIEIAAgATgCAAtPACAAQvv///vziavXQjcCICAAQsDaqvGz3P//PjcCGCAAQs6fn+DToeeVPTcCECAAQoDkxfnr0e/ftX83AgggAEK71OL984+AoMsANwIACzAAIABCgICA+IOAgIAINwIQIABCgICAvICAgIA/NwIIIABCgICAgIiAgIDwADcCAAtFACAAQYD8ATsBHCAAQYD4/f8ANgIYIABCgICAxICAgIDAADcCECAAQoCAgLyHgIDA/wA3AgggAEL/////h4CAwAc3AgALOAAgAEGAgIDaBDYCDCAAIAE4AgAgAEGAgIDaBCACazYCECAAIAQgAmuyOAIIIAAgAyACa7I4AgQLRAAgAEGAgIDaBDYCBCAAIAE4AgAgAEGAgIDaBCACazYCECAAIAQgAmuyQwAAQEuSOAIMIAAgAyACa7JDAABAS5I4AggLEAAgACABOAIEIAAgAjYCAAsMACACIAEgABDSAxoLgwECBH8CfSADKAIUIQQgAyoCECEIIAMoAgwh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AygCACAEaiIBIAMoAiAgBGogEhshCSABIAMoAhwgBGogExshCiABIAMoAhggBGogFBshCyABIAMoAhQgBGogFRshDCABIAMoAhAgBGogFhshDSABIAMoAgwgBGogFxshDiABIAMoAgggBGogGBshDyABIAMoAgQgBGogGRshECACIREDQCAFIAkqAgAiKSAKKgIAIiIgCyoCACIjIAwqAgAiJCANKgIAIiUgDioCACImIA8qAgAiJyAQKgIAIiggASoCACIqICggKl4iGhsiKCAnICheIhsbIicgJiAnXiIcGyImICUgJl4iHRsiJSAkICVeIh4bIiQgIyAkXiIfGyIjICIgI14iIBsiIiAiICldIiEbOAIAIAZBCEEHQQZBBUEEQQNBAiAaIBsbIBwbIB0bIB4bIB8bICAbICEbNgIAIAZBBGohBiAFQQRqIQUgCUEEaiEJIApBBGohCiALQQRqIQsgDEEEaiEMIA1BBGohDSAOQQRqIQ4gD0EEaiEPIBBBBGohECABQQRqIQEgEUEBayIRDQALIAUgCGohBSADIAdqIQMgAEEBayIADQALC4sEAgx/An0gAy8BHCEJIAMvARohCiADLwEYIQsgAygCFCEFIAMqAhAhECADKAIMIQYgAyoCCCERIAMoAgQhDCADKAIAIQMgAEEQTwRAA0AgASgCACEOIAEoAgQhByABKAIIIQggAiAJIAsgECARIAEoAgwiDSADcSIEvpSUIAQgDGogBnEiDyAFIAUgD0kbvpK8Ig9BDXZxIAogD3FqIAQgBksbIAQgDXNBEHZyOwEGIAIgCSALIBAgESADIAhxIgS+lJQgBCAMaiAGcSINIAUgBSANSRu+krwiDUENdnEgCiANcWogBCAGSxsgBCAIc0EQdnI7AQQgAiAJIAsgECARIAMgB3EiBL6UlCAEIAxqIAZxIgggBSAFIAhJG76SvCIIQQ12cSAIIApxaiAEIAZLGyAEIAdzQRB2cjsBAiACIAkgCyAQIBEgAyAOcSIEvpSUIAQgDGogBnEiByAFIAUgB0kbvpK8IgdBDXZxIAcgCnFqIAQgBksbIAQgDnNBEHZyOwEAIAJBCGohAiABQRBqIQEgAEEQayIAQQ9LDQALCyAABEADQCACIAkgCyAQIBEgASgCACIOIANxIgS+lJQgBCAMaiAGcSIHIAUgBSAHSRu+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CCAJRhshFCAAIRcgAyEJIBlFBEADQCAJKgAaIS0gCSwAGCEVIAksABYhGiAJLAAUIRsgCSwAEiEcIAksABAhHSAJLAAOIR4gCSwADCEfIAksAAghICAJLAAKISEgDCwAACEiIA0sAAAhIyAOLAAAISQgDywAACElIBAsAAAhJiARLAAAIScgEiwAACEoIAkoAgAhKSAULAAAISogEywAACErIAQgLCAJKgAeIAkoAgQgCSwACSAULAABbGogCSwACyATLAABbGogCSwADSASLAABbGogCSwADyARLAABbGogCSwAESAQLAABbGogCSwAEyAPLAABbGogCSwAFSAOLAABbGogCSwAFyANLAABbGogCSwAGSAMLAABbGqylJK8IhggCyALIBhIGyIYIAogCiAYShsgFms6AAEgBCAsIC0gKSAgICpsaiAhICtsaiAfIChsaiAeICdsaiAdICZsaiAcICVsaiAbICRsaiAaICNsaiAVICJsarKUkrwiFSALIAsgFUgbIhUgCiAKIBVKGyAWazoAACAEQQJqIQQgCUEiaiEJIAxBAmohDCANQQJqIQ0gDkECaiEOIA9BAmohDyAQQQJqIRAgEUECaiERIBJBAmohEiATQQJqIRMgFEECaiEUIBdBAmsiF0EBSw0ACwsgAiAFaiECIBcEfyAEICwgCSoAGiAJKAIAIAksAAggFCwAAGxqIAksAAogEywAAGxqIAksAAwgEiwAAGxqIAksAA4gESwAAGxqIAksABAgECwAAGxqIAksABIgDywAAGxqIAksABQgDiwAAGxqIAksABYgDSwAAGxqIAksABggDCwAAGxqspSSvCIJIAsgCSALShsiCSAKIAkgCkgbIBZrOgAAIARBAWoFIAQLIAZqIQQgAUEBayIBDQALC5ADAgp/An0gAkEBayEHIAJBAXEhDyACQQF0IgRBCGohECAEQQZqIREgCSgCDCEOIAkoAgghDCAJKAIEIQ0gCSoCACEUA0AgBSgCBCEKIAUoAgAhCwJ/IA9FBEAgBUEIaiEJIAMhBCACDAELIAVBCmohCSADQQFqIQQgAywAACIAIAUsAAlsIApqIQogBSwACCAAbCALaiELIAcLIQAgAkEBRwRAA0AgBCwAACISIAksAAFsIApqIAQsAAEiEyAJLAADbGohCiAJLAAAIBJsIAtqIAksAAIg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IAIqAhghESABKgIYIRIgAyABKgIcIAIqAhyWOAIcIAMgEiARljgCGCADIBAgD5Y4AhQgAyAOIA2WOAIQIAMgDCALljgCDCADIAogCZY4AgggAyAIIAeWOAIEIAMgBiAFljgCACADQSBqIQMgAkEgaiECIAFBIGohASAAQSBrIgBBH0sNAAsLIAAEQANAIAMgASoCACACKgIAljgCACADQQRqIQMgAkEEaiECIAFBBGohASAAQQRrIgANAAsLC+ABAQh9IAIqAgAhBSAAQSBPBEADQCABKgIAIQYgASoCBCEHIAEqAgghCCABKgIMIQkgASoCECEKIAEqAhQhCyABKgIYIQwgAyABKgIcIAWWOAIcIAMgDCAFljgCGCADIAsgBZY4AhQgAyAKIAWWOAIQIAMgCSAFljgCDCADIAggBZY4AgggAyAHIAWWOAIEIAMgBiAFljgCACADQSBqIQMgAUEgaiEBIABBIGsiAEEfSw0ACwsgAARAA0AgAyABKgIAIAWWOAIAIANBBGohAyABQQRqIQEgAEEEayIADQALCwviAgEQfSAEKgIEIQUgBCoCACEGIABBIE8EQANAIAIqAgAhByABKgIAIQggAioCBCEJIAEqAgQhCiACKgIIIQsgASoCCCEMIAIqAgwhDSABKgIMIQ4gAioCECEPIAEqAhAhECACKgIUIREgASoCFCESIAIqAhghEyABKgIYIRQgAyABKgIcIAIqAhyUIAaXIAWWOAIcIAMgFCATlCAGlyAFljgCGCADIBIgEZQgBpcgBZY4AhQgAyAQIA+UIAaXIAWWOAIQIAMgDiANlCAGlyAFljgCDCADIAwgC5QgBpcgBZY4AgggAyAKIAmUIAaXIAWWOAIEIAMgCCAHlCAGlyAFljgCACADQSBqIQMgAkEgaiECIAFBIGohASAAQSBrIgBBH0sNAAsLIAAEQANAIAMgASoCACACKgIAlCAGlyAFljgCACADQQRqIQMgAkEEaiECIAFBBGohASAAQQRrIgANAAsLC6QCAQp9IAIqAgAhBSAEKgIEIQYgBCoCACEHIABBIE8EQANAIAEqAgAhCCABKgIEIQkgASoCCCEKIAEqAgwhCyABKgIQIQwgASoCFCENIAEqAhghDiADIAUgASoCHJQgB5cgBpY4AhwgAyAFIA6UIAeXIAaWOAIYIAMgBSANlCAH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IAcgCWogCCAJRhshEiAAIRQgAyEJIBVFBEADQCAJKgAaISwgCSwAGCEWIAksABYhFyAJLAAUIRggCSwAEiEZIAksABAhGiAJLAAOIRsgCSwADCEcIAksAAghHSAJLAAKIR4gCiwAACEfIAssAAAhICAMLAAAISEgDSwAACEiIA4sAAAhIyAPLAAAISQgECwAACElIAkoAgAhJiASLAAAIScgESwAACEoIAQgKSAJKgAeIAkoAgQgCSwACSASLAABbGogCSwACyARLAABbGogCSwADSAQLAABbGogCSwADyAPLAABbGogCSwAESAOLAABbGogCSwAEyANLAABbGogCSwAFSAMLAABbGogCSwAFyALLAABbGogCSwAGSAKLAABbGqylCArlyAqlpK8IBNrOgABIAQgKSAsICYgHSAnbGogHiAobGogHCAlbGogGyAkbGogGiAjbGogGSAibGogGCAhbGogFyAgbGogFiAfbGqylCArlyAqlpK8IBNrOgAAIARBAmohBCAJQSJqIQkgCkECaiEKIAtBAmohCyAMQQJqIQwgDUECaiENIA5BAmohDiAPQQJqIQ8gEEECaiEQIBFBAmohESASQQJqIRIgFEECayIUQQFLDQALCyACIAVqIQIgFAR/IAQgKSAJKgAaIAkoAgAgCSwACCASLAAAbGogCSwACiARLAAAbGogCSwADCAQLAAAbGogCSwADiAPLAAAbGogCSwAECAOLAAAbGogCSwAEiANLAAAbGogCSwAFCAMLAAAbGogCSwAFiALLAAAbGogCSwAGCAKLAAAbGqylCArlyAqlpK8IBNrOgAAIARBAWoFIAQLIAZqIQQgAUEBayIBDQALC8sPAk9/BH0gCSgCDCEjIAkqAgghWSAJKgIEIVogCSoCACFbIABBAkkhJQNAIAIoAmAiCSAHIAlqIAggCUYbIQogAigCXCIJIAcgCWogCCAJRhshCyACKAJYIgkgByAJaiAIIAlGGyEMIAIoAlQiCSAHIAlqIAggCUYbIQ0gAigCUCIJIAcgCWogCCAJRhshDiACKAJMIgkgByAJaiAIIAlGGyEPIAIoAkgiCSAHIAlqIAggCUYbIRAgAigCRCIJIAcgCWogCCAJRhshESACKAJAIgkgByAJaiAIIAlGGyESIAIoAjwiCSAHIAlqIAggCUYbIRMgAigCOCIJIAcgCWogCCAJRhshFCACKAI0IgkgByAJaiAIIAlGGyEVIAIoAjAiCSAHIAlqIAggCUYbIRYgAigCLCIJIAcgCWogCCAJRhshFyACKAIoIgkgByAJaiAIIAlGGyEYIAIoAiQiCSAHIAlqIAggCUYbIRkgAigCICIJIAcgCWogCCAJRhshGiACKAIcIgkgByAJaiAIIAlGGyEbIAIoAhgiCSAHIAlqIAggCUYbIRwgAigCFCIJIAcgCWogCCAJRhshHSACKAIQIgkgByAJaiAIIAlGGyEeIAIoAgwiCSAHIAlqIAggCUYbIR8gAigCCCIJIAcgCWogCCAJRhshICACKAIEIgkgByAJaiAIIAlGGyEhIAIoAgAiCSAHIAlqIAggCUYbISIgACEkIAMhCSAlRQRAA0AgCSoAOiFcIAksADghJiAJLAA2IScgCSwANCEoIAksADIhKSAJLAAwISogCSwALiErIAksACwhLCAJLAAqIS0gCSwAKCEuIAksACYhLyAJLAAkITAgCSwAIiExIAksACAhMiAJLAAeITMgCSwAHCE0IAksABohNSAJLAAYITYgCSwAFiE3IAksABQhOCAJLAASITkgCSwAECE6IAksAA4hOyAJLAAMITwgCSwACCE9IAksAAohPiAKLAAAIT8gCywAACFAIAwsAAAhQSANLAAAIUIgDiwAACFDIA8sAAAhRCAQLAAAIUUgESwAACFGIBIsAAAhRyATLAAAIUggFCwAACFJIBUsAAAhSiAWLAAAIUsgFywAACFMIBgsAAAhTSAZLAAAIU4gGiwAACFPIBssAAAhUCAcLAAAIVEgHSwAACFSIB4sAAAhUyAfLAAAIVQgICwAACFVIAkoAgAhViAiLAAAIVcgISwAACFYIAQgWSAJKgA+IAkoAgQgCSwACSAiLAABbGogCSwACyAhLAABbGogCSwADSAgLAABbGogCSwADyAfLAABbGogCSwAESAeLAABbGogCSwAEyAdLAABbGogCSwAFSAcLAABbGogCSwAFyAbLAABbGogCSwAGSAaLAABbGogCSwAGyAZLAABbGogCSwAHSAYLAABbGogCSwAHyAXLAABbGogCSwAISAWLAABbGogCSwAIyAVLAABbGogCSwAJSAULAABbGogCSwAJyATLAABbGogCSwAKSASLAABbGogCSwAKyARLAABbGogCSwALSAQLAABbGogCSwALyAPLAABbGogCSwAMSAOLAABbGogCSwAMyANLAABbGogCSwANSAMLAABbGogCSwANyALLAABbGogCSwAOSAKLAABbGqylCBblyBalpK8ICNrOgABIAQgWSBcIFYgPSBXbGogPiBYbGogPCBVbGogOyBUbGogOiBTbGogOSBSbGogOCBRbGogNyBQbGogNiBPbGogNSBObGogNCBNbGogMyBMbGogMiBLbGogMSBKbGogMCBJbGogLyBIbGogLiBHbGogLSBGbGogLCBFbGogKyBEbGogKiBDbGogKSBCbGogKCBBbGogJyBAbGogJiA/bGqylCBblyBalpK8ICNrOgAAIARBAmohBCAJQcIAaiEJIApBAmohCiALQQJqIQsgDEECaiEMIA1BAmohDSAOQQJqIQ4gD0ECaiEPIBBBAmohECARQQJqIREgEkECaiESIBNBAmohEyAUQQJqIRQgFUECaiEVIBZBAmohFiAXQQJqIRcgGEECaiEYIBlBAmohGSAaQQJqIRogG0ECaiEbIBxBAmohHCAdQQJqIR0gHkECaiEeIB9BAmohHyAgQQJqISAgIUECaiEhICJBAmohIiAkQQJrIiRBAUsNAAsLIAIgBWohAiAkBH8gBCBZIAkqADogCSgCACAJLAAIICIsAABsaiAJLAAKICEsAABsaiAJLAAMICAsAABsaiAJLAAOIB8sAABsaiAJLAAQIB4sAABsaiAJLAASIB0sAABsaiAJLAAUIBwsAABsaiAJLAAWIBssAABsaiAJLAAYIBosAABsaiAJLAAaIBksAABsaiAJLAAcIBgsAABsaiAJLAAeIBcsAABsaiAJLAAgIBYsAABsaiAJLAAiIBUsAABsaiAJLAAkIBQsAABsaiAJLAAmIBMsAABsaiAJLAAoIBIsAABsaiAJLAAqIBEsAABsaiAJLAAsIBAsAABsaiAJLAAuIA8sAABsaiAJLAAwIA4sAABsaiAJLAAyIA0sAABsaiAJLAA0IAwsAABsaiAJLAA2IAssAABsaiAJLAA4IAosAABsarKUIFuXIFqWkrwgI2s6AAAgBEEBagUgBAsgBmohBCABQQFrIgENAAsLsAQCCn8EfSACQQFrIQcgAkEBcSERIAJBAnQiBEEQaiESIARBDGohEyAJKAIMIRAgCSoCCCEU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ISIgCyAXLAAAIgdsICNqISMgACAHbCAkaiEkIAcgFWwgJWohJSAHIBZsICZqISYgEkEBaiESIBNBAWohEyAUQQFqIRQgF0EBaiEXIAVBBGohBSAaQQFrIhoNAAsgKCApaiELIARBEGohBCAnQRBrIicNAAsgCyoCACIuIBmylCAtlyAsliArkrwgDGshCyAuIB6ylCAtlyAsliArkrwgDGshByAuICKylCAtlyAsliArkrwgDGshACAuICaylCAtlyAsliArkrwgDGshFSAoICpqIgUqAgwiLiAQspQgLZcgLJYgK5K8IAxrIRYgBSoCCCIvIBGylCAtlyAsliArkrwgDGshFyAuIByylCAtlyAsliArkrwgDGshEiAvIB2ylCAtlyAsliArkrwgDGshGiAuICCylCAtlyAsliArkrwgDGshEyAvICGylCAtlyAsliArkrwgDGshECAuICSylCAtlyAsliArkrwgDGshFCAvICWylCAtlyAsliArkrwgDGshEQJAIAFBA00EQAJAIAFBAnFFBEAgFSEUIAAhEyAHIRIgCyEWDAELIA8gFzoAASAPIAs6AAAgDiAaOgABIA4gBzoAACANIBA6AAEgDSAAOgAAIAYgEToAASAGIBU6AAAgBkECaiEGIA1BAmohDSAOQQJqIQ4gD0ECaiEPCyABQQFxRQ0BIA8gFjoAACAOIBI6AAAgDSATOgAAIAYgFDoAAA8LIAUqAhAhLiAPIBY6AAIgDyAXOgABIA8gCzoAACAPIC4gGLKUIC2XICyWICuSvCAMazoAAyAOIC4gG7KUIC2XICyWICuSvCAMazoAAyAOIBI6AAIgDiAaOgABIA4gBzoAACANIC4gH7KUIC2XICyWICuSvCAMazoAAyANIBM6AAIgDSAQOgABIA0gADoAACAGIC4gI7KUIC2XICyWICuSvCAMazoAAyAGIBQ6AAIgBiAROgABIAYgFToAACAEIANrIQQgBiAIaiEGIAggDWohDSAIIA5qIQ4gCCAPaiEPIAVBFGohBSABQQRrIgENAQsLCxEAIABFBEBBAQ8LIAAoAoQBC4QCAQl/IAEoAgAhAyAAKAIUIQcgACgCECEIA0AgASgCCCECAkADQCACRQ0BIAEgAkEBayABKAIIIgQgAiAERhs2AgggAiAERyEFIAQhAiAFDQALIAcgAyAIEQIA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ByACa0obIQELIAAgA0EBajYCACABIQIgAywAARDiAw0ACyABC+EGAwN+AX8BfCMAQRBrIgYkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAFBCWsOEgABAgUDBAYHCAkKCwwNDg8QERILIAIgAigCACIBQQRqNgIAIAAgASgCADYCAAwRCyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAMEAsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADA8LIAIgAigCACIBQQRqNgIAIAAgATQCADcDAAwOCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAMDQsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMADAwLIAIgAigCACIBQQRqNgIAIAAgATIBADcDAAwLCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAMCgsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADAkLIAIgAigCACIBQQRqNgIAIAAgATEAADcDAAwICyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwAMBwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADAYLIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAAwFCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwAMBAsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADAMLIAIgAigCACIBQQRqNgIAIAAgATUCADcDAAwCCyACIAIoAgBBB2pBeHEiAUEIajYCACABKwMAIQcjAEEQayIBJAACfiAHvSIFQv///////////wCDIgNCgICAgICAgAh9Qv/////////v/wBYBEAgA0I8hiEEIANCBIhCgICAgICAgIA8fAwBCyADQoCAgICAgID4/wBaBEAgBUI8hiEEIAVCBIhCgICAgICAwP//AIQMAQtCACADUA0AGiABIANCACAFp2dBIGogA0IgiKdnIANCgICAgBBUGyICQTFqEPkDIAEpAwAhBCABKQMIQoCAgICAgMAAhUGM+AAgAmutQjCGhAshAyAGIAQ3AwAgBiADIAVCgICAgICAgICAf4OENwMIIAFBEGokACAAIAYpAwg3AwggACAGKQMANwMADAELIAAgAkGCAhECAAsgBkEQaiQAC4MBAgN/AX4CQCAAQoCAgIAQVARAIAAhBQwBCwNAIAFBAWsiASAAIABCCoAiBUIKfn2nQTByOgAAIABC/////58BViECIAUhACACDQALCyAFpyICBEADQCABQQFrIgEgAiACQQpuIgNBCmxrQTByOgAAIAJBCUshBCADIQIgBA0ACwsgAQtyAQF/IwBBgAJrIgUkAAJAIAIgA0wNACAEQYDABHENACAFIAFB/wFxIAIgA2siAkGAAiACQYACSSIDGxDUAxogA0UEQANAIAAgBUGAAhDBAyACQYACayICQf8BSw0ACwsgACAFIAIQwQMLIAVBgAJqJAALuAIBBH8jAEGgAmsiAyQAIAMgAjYCnAIgA0HwAWpBAEEoENQDGiADIAMoApwCNgKYAgJAQQAgASADQZgCaiADQdAAaiADQfABahDAA0EASA0AIAAoAkxBAE4hBiAAKAIAIQUgACgCSEEATARAIAAgBUFfcTYCAAsCfwJAAkAgACgCMEUEQCAAQdAANgIwIABBADYCHCAAQgA3AxAgACgCLCEEIAAgAzYCLAwBCyAAKAIQDQELQX8gABDKAw0BGgsgACABIANBmAJqIANB0ABqIANB8AFqEMADCyECIAVBIHEhASAEBH8gAEEAQQAgACgCJBENABogAEEANgIwIAAgBDYCLCAAQQA2AhwgACgCFBogAEIANwMQQQAFIAILGiAAIAAoAgAgAXI2AgAgBkUNAAsgA0GgAmokAAv0HwISfwJ+IwBBgDxrIggkACAIQQA2AqwCAkAgAkI/iKcEQCACQoCAgICAgICAgH+FIQJBASESQYsIIRQMAQsgBUGAEHEEQEEBIRJBjgghFAwBC0GRCEGMCCAFQQFxIhIbIRQgEkUhGAsCQAJ/IAJC////////P4MhGgJ/IAJCMIinQf//AXEiB0H//wFHBEBBBCAHDQEaQQJBAyABIBqEUBsMAgsgASAahFALC0EBTARAIABBICADIBJBA2oiByAFQf//e3EQxQMgACAUIBIQwQMgAEG0CEH0GSAGQSBxIgkbQbgIQfgZIAkbIAFCAFIgAkL///////////8AgyIZQoCAgICAgMD//wBWIBlCgICAgICAwP//AFEbIAFCAFIgAkL///////////8AgyIZQoCAgICAgMD//wBWIBlCgICAgICAwP//AFEbchtB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AkL///////////8AgyIFQoCAgICAgMD//wB9QoCAgICAgMCAgH9UIAVQG0UEQCADQgBSIAZCgICAgICAwP//AH0iB0KAgICAgIDAgIB/ViAHQoCAgICAgMCAgH9RGw0BCyAJIAVCgICAgICAwP//AFQgBUKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEEIAEhAwwCCyADUCAGQoCAgICAgMD//wBUIAZCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhBAwCCyABIAVCgICAgICAwP//AIWEUARAQoCAgICAgOD//wAgAiABIAOFIAIgBIVCgICAgICAgICAf4WEUCIJGyEEQgAgASAJGyEDDAILIAMgBkKAgICAgIDA//8AhYRQDQEgASAFhFAEQCADIAaEQgBSDQIgASADgyEDIAIgBIMhBAwCCyADIAaEUEUNACABIQMgAiEEDAELIAMgASABIANUIAUgBlQgBSAGURsiChshBSAEIAIgChsiBkL///////8/gyEHIAIgBCAKGyICQjCIp0H//wFxIQsgBkIwiKdB//8BcSIJRQRAIAhB4ABqIAUgByAFIAcgB1AiCRt5IAlBBnStfKciCUEPaxD5A0EQIAlrIQkgCCkDaCEHIAgpA2AhBQsgASADIAobIQMgAkL///////8/gyEEIAtFBEAgCEHQAGogAyAEIAMgBCAEUCIKG3kgCkEGdK18pyIKQQ9rEPkDQRAgCmshCyAIKQNYIQQgCCkDUCEDCyAEQgOGIANCPYiEQoCAgICAgIAEhCEEIAdCA4YgBUI9iIQhASACIAaFIQICfiADQgOGIgMgCSALayIKRQ0AGiAKQf8ASwRAQgAhBEIBDAELIAhBQGsgAyAEQYABIAprEPkDIAhBMGogAyAEIAoQ+wMgCCkDOCEEIAgpAzAgCCkDQCAIKQNIhEIAUq2ECyEDIAFCgICAgICAgASEIQcgBUIDhiEBAkAgAkIAUwRAIAEgA30iBSAHIAR9IAEgA1StfSIEhFAEQEIAIQNCACEEDAMLIARC/////////wNWDQEgCEEgaiAFIAQgBSAEIARQIgobeSAKQQZ0rXynQQxrIgoQ+QMgCSAKayEJIAgpAyghBCAIKQMgIQUMAQsgASADfCIFIANUrSAEIAd8fCIEQoCAgICAgIAIg1ANACAFQgGDIARCP4YgBUIBiISEIQUgCUEBaiEJIARCAYghBAsgBkKAgICAgICAgIB/gyEBIAlB//8BTgRAIAFCgICAgICAwP//AIQhBEIAIQMMAQtBACEKAkAgCUEASgRAIAkhCgwBCyAIQRBqIAUgBCAJQf8AahD5AyAIIAUgBEEBIAlrEPsDIAgpAwAgCCkDECAIKQMYhEIAUq2EIQUgCCkDCCEECyAEQj2GIAVCA4iEIgMgAyAFp0EHcSIJQQRLrXwiBVatIARCA4hC////////P4MgCq1CMIaEIAGEfCEEAkACQCAJQQRHBEAgBSEDDAELIAQgBUIBgyIBIAV8IgMgAVStfCEEDAELIAlFDQELCyAAIAM3AwAgACAENwMIIAhB8ABqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgL2wECAX8CfkEBIQQCQCAAQgBSIAFC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBRGw0AIAJCAFIgA0L///////////8AgyIGQoCAgICAgMD//wBWIAZCgICAgICAwP//AFEbDQAgACAChCAFIAaEhFAEQEEADwsgASADg0IAWQRAQX8hBCAAIAJUIAEgA1MgASADURsNASAAIAKFIAEgA4WEQgBSDwtBfyEEIAAgAlYgASADVSABIANRGw0AIAAgAoUgASADhYRCAFIhBAsgBAtQAQF+AkAgA0HAAHEEQCACIANBQGqtiCEBQgAhAgwBCyADRQ0AIAJBwAAgA2uthiABIAOtIgSIhCEBIAIgBIghAgsgACABNwMAIAAgAjcDCAu5CgIFfxB+IwBB4ABrIgQkACADQv///////z+DIQ0gAiADhUKAgICAgICAgIB/gyEJIAJC////////P4MiDEIgiCEQAkACQCADQjCIp0H//wFxIgVB//8Ba0GBgH5LIAJCMIinQf//AXEiB0H//wFrQYKAfk9xDQAgAVAgAkL///////////8AgyIKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCQwCCyADQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AUXJFBEAgA0KAgICAgIAghCEJQgAhAQwCCyABIApCgICAgICAwP//AIWEUARAIAJQBEBCgICAgICA4P//ACEJQgAhAQwDCyAJQoCAgICAgMD//wCEIQlCACEBDAILIAJCgICAgICAwP//AIVQBEAgASAKhCECQgAhASACUARAQoCAgICAgOD//wAhCQwDCyAJQoCAgICAgMD//wCEIQkMAgsgASAKhFAEQEIAIQEMAgsgAlAEQEIAIQEMAgsgCkL///////8/WARAIARB0ABqIAEgDCABIAwgDFAiBht5IAZBBnStfKciBkEPaxD5A0EQIAZrIQYgBCkDWCIMQiCIIRAgBCkDUCEBCyACQv///////z9WDQAgBEFAa0IAIA1CACANIA1QIggbeSAIQQZ0rXynIghBD2sQ+QMgBiAIa0EQaiEGIAQpA0ghDSAEKQNAIQsLIAtCD4YiCkKAgP7/D4MiAiABQiCIIgN+IhEgCkIgiCIKIAFC/////w+DIgF+fCIPQiCGIhIgASACfnwiDiASVK0gAiAMQv////8PgyIMfiIVIAMgCn58IhIgDUIPhiALQjGIhCITQv////8PgyILIAF+fCINIA8gEVStQiCGIA9CIIiEfCIRIAIgEEKAgASEIg9+IhYgCiAMfnwiECATQiCIQoCAgIAIhCICIAF+fCITIAMgC358IhRCIIZ8Ihd8IQEgBSAHaiAGakH//wBrIQUCQCACIAN+IhggCiAPfnwiAyAYVK0gAyALIAx+fCIKIANUrXwgAiAPfnwgCiASIBVUrSANIBJUrXx8IgMgClStfCALIA9+IgsgAiAMfnwiAiALVK1CIIYgAkIgiIR8IAMgAkIghnwiAiADVK18IAIgEyAUVq0gECAWVK0gECATVq18fEIghiAUQiCIhHwiAyACVK18IAMgDSARVq0gESAXVq18fCICIANUrXwiA0KAgICAgIDAAINQRQRAIAVBAWohBQwBCyAOQj+IIQsgA0IBhiACQj+IhCEDIAJCAYYgAUI/iIQhAiAOQgGGIQ4gCyABQgGGhCEBCyAFQf//AU4EQCAJQoCAgICAgMD//wCEIQlCACEBDAELAn4gBUEATARAQQEgBWsiB0GAAU8EQEIAIQEMAwsgBEEwaiAOIAEgBUH/AGoiBRD5AyAEQSBqIAIgAyAFEPkDIARBEGogDiABIAcQ+wMgBCACIAMgBxD7AyAEKQMwIAQpAziEQgBSrSAEKQMgIAQpAxCEhCEOIAQpAyggBCkDGIQhASAEKQMAIQIgBCkDCAwBCyADQv///////z+DIAWtQjCGhAsgCYQhCSAOUCABQgBZIAFCgICAgICAgICAf1EbRQRAIAkgAkIBfCIBIAJUrXwhCQwBCyAOIAFCgICAgICAgICAf4WEUEUEQCACIQEMAQsgCSACIAJCAYN8IgEgAlStfCEJCyAAIAE3AwAgACAJNwMIIARB4ABqJAALRQEBfyMAQRBrIgUkACAFIAEgAiADIARCgICAgICAgICAf4UQ+AMgBSkDACEBIAAgBSkDCDcDCCAAIAE3AwAgBUEQaiQAC7YMAQZ/IwBBEGsiBCQAIAQgADYCDAJAIABB0wFNBEBB0KgBQZCqASAEQQxqEP8DKAIAIQIMAQsgAEF8TwRAEAAACyAEIAAgAEHSAW4iBkHSAWwiAms2AghBkKoBQdCrASAEQQhqEP8DQZCqAWtBAnUhBQNAIAVBAnRBkKoBaigCACACaiECQQUhAAJAA0ACQCAAQS9GBEBB0wEhAANAIAIgAG4iASAASQ0EIAIgACABbEYNAiACIABBCmoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBDGoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBEGoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBEmoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBFmoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBHGoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBHmoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBJGoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBKGoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBKmoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBLmoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBNGoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBOmoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBPGoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBwgBqIgFuIgMgAUkNBCACIAEgA2xGDQIgAiAAQcYAaiIBbiIDIAFJDQQgAiABIANsRg0CIAIgAEHIAGoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBzgBqIgFuIgMgAUkNBCACIAEgA2xGDQIgAiAAQdIAaiIBbiIDIAFJDQQgAiABIANsRg0CIAIgAEHYAGoiAW4iAyABSQ0EIAIgASADbEYNAiACIABB4ABqIgFuIgMgAUkNBCACIAEgA2xGDQIgAiAAQeQAaiIBbiIDIAFJDQQgAiABIANsRg0CIAIgAEHmAGoiAW4iAyABSQ0EIAIgASADbEYNAiACIABB6gBqIgFuIgMgAUkNBCACIAEgA2xGDQIgAiAAQewAaiIBbiIDIAFJDQQgAiABIANsRg0CIAIgAEHwAGoiAW4iAyABSQ0EIAIgASADbEYNAiACIABB+ABqIgFuIgMgAUkNBCACIAEgA2xGDQIgAiAAQf4AaiIBbiIDIAFJDQQgAiABIANsRg0CIAIgAEGCAWoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBiAFqIgFuIgMgAUkNBCACIAEgA2xGDQIgAiAAQYoBaiIBbiIDIAFJDQQgAiABIANsRg0CIAIgAEGOAWoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBlAFqIgFuIgMgAUkNBCACIAEgA2xGDQIgAiAAQZYBaiIBbiIDIAFJDQQgAiABIANsRg0CIAIgAEGcAWoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBogFqIgFuIgMgAUkNBCACIAEgA2xGDQIgAiAAQaYBaiIBbiIDIAFJDQQgAiABIANsRg0CIAIgAEGoAWoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBrAFqIgFuIgMgAUkNBCACIAEgA2xGDQIgAiAAQbIBaiIBbiIDIAFJDQQgAiABIANsRg0CIAIgAEG0AWoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBugFqIgFuIgMgAUkNBCACIAEgA2xGDQIgAiAAQb4BaiIBbiIDIAFJDQQgAiABIANsRg0CIAIgAEHAAWoiAW4iAyABSQ0EIAIgASADbEYNAiACIABBxAFqIgFuIgMgAUkNBCACIAEgA2xGDQIgAiAAQcYBaiIBbiIDIAFJDQQgAiABIANsRg0CIAIgAEHQAWoiAW4iAyABSQ0EIABB0gFqIQAgAiABIANsRw0ACwwBCyACIABBAnRB0KgBaigCACIBbiIDIAFJDQIgAEEBaiEAIAIgASADbEcNAQsLQQAgBUEBaiIAIABBMEYiABshBSAAIAZqIgZB0gFsIQIMAQsLIAQgAjYCDAsgBEEQaiQAIAILhwEBA38jAEEQayIFJAAjAEEQayIEJAAgASAAa0ECdSEBA0AgAQRAIAQgADYCDCAEQQxqIgMgAygCACABQQF2IgNBAnRqNgIAIAEgA0F/c2ogAyAEKAIMKAIAIAIoAgBJIgMbIQEgBCgCDEEEaiAAIAMbIQAMAQsLIARBEGokACAFQRBqJAAgAAs0AQF/IABBASAAGyEBAkADQCABEPUDIgANAUHQxgEoAgAiAARAIAAREAAMAQsLEAAACyAACwQAIwALBgAgACQACxAAIwAgAGtBcHEiACQAIAALJQAgASACrSADrUIghoQgBK0gBa1CIIaEIAYgByAIIAkgABEbAAsiAQF+IAEgAq0gA61CIIaEIAQgABEmACIFQiCIpxAGIAWnCwuknwGdAQBBgQgLpCYtKyAgIDBYMHgALTBYKzBYIDBYLTB4KzB4IDB4AF9fbmV4dF9wcmltZSBvdmVyZmxvdwBuYW4AaW5mAEFyZ21heCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQATWF4IGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTcGFyc2VGaWxsRW1wdHlSb3dzIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABFeHAgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFN0ZXAgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFNwYXJzZVNlZ21lbnRSZWR1Y3Rpb24gZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAE1pbiBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3VtIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABQcm9kIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABMZWFreVJlbHUgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAEFicyBmb3IgdGVuc29yIGlkcyAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQATmVnIGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTcXVhcmUgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAFJvdW5kIGZvciB0ZW5zb3IgaWRzICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABSZWx1NiBmb3IgdGVuc29yIGlkcyAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAUG93IGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQARGl2IGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQATXVsIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAU3F1YXJlZERpZmZlcmVuY2UgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABBZGQgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTdWIgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABTY2F0dGVyIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbmtub3duIGR0eXBlICVkAEdhdGhlciBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABUcmFuc3Bvc2UgZm9yIHRlbnNvciBpZCAlZCBmYWlsZWQuIFVua25vd24gZHR5cGUgJWQAVGlsZSBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABHYXRoZXJOZCBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABBZGROIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlZABGbG9vckRpdiBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABNYXhpbXVtIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGR0eXBlICVkAE1pbmltdW0gZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgZHR5cGUgJWQAQ3Vtc3VtIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABDdW1wcm9kIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABUb3BLIGZvciB0ZW5zb3IgaWQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBkdHlwZSAlZABOb3RFcXVhbCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLlVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQATGVzc0VxdWFsIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABHcmVhdGVyRXF1YWwgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC5VbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExvZ2ljYWxOb3QgZm9yIHRlbnNvciBpZHMgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExlc3MgZm9yIHRlbnNvciBpZHMgJWQgYW5kICVkIGZhaWxlZC4gVW5zdXBwb3J0ZWQgaW5wdXRfdHlwZSAlZABMb2dpY2FsWG9yIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQAR3JlYXRlciBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAExvZ2ljYWxPciBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAEVxdWFsIGZvciB0ZW5zb3IgaWRzICVkIGFuZCAlZCBmYWlsZWQuIFVuc3VwcG9ydGVkIGlucHV0X3R5cGUgJWQATG9naWNhbEFuZCBmb3IgdGVuc29yIGlkcyAlZCBhbmQgJWQgZmFpbGVkLiBVbnN1cHBvcnRlZCBpbnB1dF90eXBlICVkAE5BTgBJTkYAWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2NvbnN0YW50X3BhZF9uZF94MzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX2NvbnN0YW50X3BhZF9uZF94MzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfKl9uZF9mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlXypfbmRfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3Jlc2l6ZV9iaWxpbmVhcjJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9yZXNpemVfYmlsaW5lYXIyZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9zZXR1cF9jb252b2x1dGlvbjJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9jb252b2x1dGlvbjJkX25od2NfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX21heF9wb29saW5nMmRfbmh3Y19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfYXZlcmFnZV9wb29saW5nMmRfbmh3Y19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfc29mdG1heF9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX3NvZnRtYXhfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX3ByZWx1X25jX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gR290IHN0YXR1cyAlZC4gVXNlIC1jIGRiZyB0byBzZWUgWE5OIGxvZ3MuAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfcHJlbHVfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2VsdV9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX2VsdV9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfY2xhbXBfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX2NyZWF0ZV9jbGFtcF9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fc2V0dXBfc2lnbW9pZF9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX3NpZ21vaWRfbmNfZjMyIGlzIG5vdCBzdWNjZXNzZnVsLiBHb3Qgc3RhdHVzICVkLiBVc2UgLWMgZGJnIHRvIHNlZSBYTk4gbG9ncy4AWE5OIHN0YXR1cyBmb3IgeG5uX3NldHVwX2Z1bGx5X2Nvbm5lY3RlZF9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBYTk4gc3RhdHVzIGZvciB4bm5fY3JlYXRlX2Z1bGx5X2Nvbm5lY3RlZF9uY19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIEdvdCBzdGF0dXMgJWQuIFVzZSAtYyBkYmcgdG8gc2VlIFhOTiBsb2dzLgBPcGVyYW5kcyBjb3VsZCBub3QgYmUgYnJvYWRjYXN0IHRvZ2V0aGVyLCBzaGFwZSBtaXNtYXRjaC4AKG51bGwpAE1pcnJvclBhZCBmb3IgdGVuc29yIGlkICVkIGZhaWxlZC4gVW5rbm93biBkdHlwZSAlIGQgAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfbWF4X3Bvb2xpbmcyZF9uaHdjX2YzMiBpcyBub3Qgc3VjY2Vzc2Z1bC4gAFhOTiBzdGF0dXMgZm9yIHhubl9jcmVhdGVfYXZlcmFnZV9wb29saW5nMmRfbmh3Y19mMzIgaXMgbm90IHN1Y2Nlc3NmdWwuIAAKAAAAAIB/AAAAAO8AAADwAAAA8QAAAPIAAADzAEGyLgv/AoA/w6p9P8KVez/Tw3k/8Dd4PzL1dj/X/nU/P1h1P/MEdT+kCHU/Kmd1P4wkdj/9RHc/38x4P8fAej99JX0/AACAP9Jkfz+HzX4/KTp+P8OqfT9iH30/D5h8P9UUfD/ClXs/3xp7Pzqkej/cMXo/08N5PytaeT/w9Hg/LZR4P/A3eD9G4Hc/Oo13P9o+dz8y9XY/UbB2P0Nwdj8WNXY/1/51P5TNdT9boXU/Onp1Pz9YdT95O3U/9iN1P8QRdT/zBHU/kv10P6/7dD9b/3Q/pAh1P5oXdT9NLHU/zUZ1PypndT91jXU/vrl1PxXsdT+MJHY/NGN2Px6odj9b83Y//UR3Pxaddz+4+3c/9WB4P9/MeD+JP3k/B7l5P2o5ej/HwHo/ME97P7rkez93gXw/fSV9P9/QfT+zg34/DD5/PxkACgAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQARChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHBMQshDgAAAAAAAAAAGQAKDRkZGQANAAACAAkOAAAACQAOAAAOAEH7MQsBDABBhzILFRMAAAAAEwAAAAAJDAAAAAAADAAADABBtTILARAAQcEyCxUPAAAABA8AAAAACRAAAAAAABAAABAAQe8yCwESAEH7MgseEQAAAAARAAAAAAkSAAAAAAASAAASAAAaAAAAGhoaAEGyMwsOGgAAABoaGgAAAAAAAAkAQeMzCwEUAEHvMwsVFwAAAAAXAAAAAAkUAAAAAAAUAAAUAEGdNAsBFgBBqTQL/hUVAAAAABUAAAAACRYAAAAAABYAABYAADAxMjM0NTY3ODlBQkNERUYDAAAABAAAAAQAAAAGAAAAg/miAERObgD8KRUA0VcnAN009QBi28AAPJmVAEGQQwBjUf4Au96rALdhxQA6biQA0k1CAEkG4AAJ6i4AHJLRAOsd/gApsRwA6D6nAPU1ggBEuy4AnOmEALQmcABBfl8A1pE5AFODOQCc9DkAi1+EACj5vQD4HzsA3v+XAA+YBQARL+8AClqLAG0fbQDPfjYACcsnAEZPtwCeZj8ALepfALondQDl68cAPXvxAPc5BwCSUooA+2vqAB+xXwAIXY0AMANWAHv8RgDwq2sAILzPADb0mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAGcRHAM1nwwAJ6NwAWYMqAIt2xACmHJYARK/dABlX0QClPgUABQf/ADN+PwDCMugAmE/eALt9MgAmPcMAHmvvAJ/4XgA1HzoAf/LKAPGHHQB8kCEAaiR8ANVu+gAwLXcAFTtDALUUxgDDGZ0ArcTCACxNQQAMAF0Ahn1GAONxLQCbxpoAM2IAALTSfAC0p5cAN1XVANc+9gCjEBgATXb8AGSdKgBw16sAY3z4AHqwVwAXFecAwElWADvW2QCnhDgAJCPLANaKdwBaVCMAAB+5APEKGwAZzt8AnzH/AGYeagCZV2EArPtHAH5/2AAiZbcAMuiJAOa/YADvxM0AbDYJAF0/1AAW3tcAWDveAN6bkgDSIigAKIboAOJYTQDGyjIACOMWAOB9ywAXwFAA8x2nABjgWwAuEzQAgxJiAINIAQD1jlsArbB/AB7p8gBISkMAEGfTAKrd2ACuX0IAamHOAAoopADTmbQABqbyAFx3fwCjwoMAYTyIAIpzeACvjFoAb9e9AC2mYwD0v8sAjYHvACbBZwBVykUAytk2ACio0gDCYY0AEsl3AAQmFAASRpsAxFnEAMjFRABNspEAABfzANRDrQApSeUA/dUQAAC+/AAelMwAcM7uABM+9QDs8YAAs+fDAMf4KACTBZQAwXE+AC4JswALRfMAiBKcAKsgewAutZ8AR5LCAHsyLwAMVW0AcqeQAGvnHwAxy5YAeRZKAEF54gD034kA6JSXAOLmhACZMZcAiO1rAF9fNgC7/Q4ASJq0AGekbABxckIAjV0yAJ8VuAC85QkAjTElAPd0OQAwBRwADQwBAEsIaAAs7lgAR6qQAHTnAgC91iQA932mAG5IcgCfFu8AjpSmALSR9gDRU1EAzwryACCYMwD1S34AsmNoAN0+XwBAXQMAhYl/AFVSKQA3ZMAAbdgQADJIMgBbTHUATnHUAEVUbgALCcEAKvVpABRm1QAnB50AXQRQALQ72wDqdsUAh/kXAElrfQAdJ7oAlmkpAMbMrACtFFQAkOJqAIjZiQAsclAABKS+AHcHlADzMHAAAPwnAOpxqABmwkkAZOA9AJfdgwCjP5cAQ5T9AA2GjAAxQd4AkjmdAN1wjAAXt+cACN87ABU3KwBcgKAAWoCTABARkgAP6NgAbICvANv/SwA4kA8AWRh2AGKlFQBhy7sAx4m5ABBAvQDS8gQASXUnAOu29gDbIrsAChSqAIkmLwBkg3YACTszAA6UGgBROqoAHaPCAK/trgBcJhIAbcJNAC16nADAVpcAAz+DAAnw9gArQIwAbTGZADm0BwAMIBUA2MNbAPWSxADGrUsATsqlAKc3zQDmqTYAq5KUAN1CaAAZY94AdozvAGiLUgD82zcArqGrAN8VMQAArqEADPvaAGRNZgDtBbcAKWUwAFdWvwBH/zoAavm5AHW+8wAok98Aq4AwAGaM9gAEyxUA+iIGANnkHQA9s6QAVxuPADbNCQBOQukAE76kADMjtQDwqhoAT2WoANLBpQALPw8AW3jNACP5dgB7iwQAiRdyAMamUwBvbuIA7+sAAJtKWADE2rcAqma6AHbPzwDRAh0AsfEtAIyZwQDDrXcAhkjaAPddoADGgPQArPAvAN3smgA/XLwA0N5tAJDHHwAq27YAoyU6AACvmgCtU5MAtlcEACkttABLgH4A2genAHaqDgB7WaEAFhIqANy3LQD65f0Aidv+AIm+/QDkdmwABqn8AD6AcACFbhUA/Yf/ACg+BwBhZzMAKhiGAE296gCz568Aj21uAJVnOQAxv1sAhNdIADDfFgDHLUMAJWE1AMlwzgAwy7gAv2z9AKQAogAFbOQAWt2gACFvRwBiEtIAuVyEAHBhSQBrVuAAmVIBAFBVNwAe1bcAM/HEABNuXwBdMOQAhS6pAB2ywwChMjYACLekAOqx1AAW9yEAj2nkACf/dwAMA4AAjUAtAE/NoAAgpZkAs6LTAC9dCgC0+UIAEdrLAH2+0ACb28EAqxe9AMqigQAIalwALlUXACcAVQB/FPAA4QeGABQLZACWQY0Ah77eANr9KgBrJbYAe4k0AAXz/gC5v54AaGpPAEoqqABPxFoALfi8ANdamAD0x5UADU2NACA6pgCkV18AFD+xAIA4lQDMIAEAcd2GAMnetgC/YPUATWURAAEHawCMsKwAssDQAFFVSAAe+w4AlXLDAKMGOwDAQDUABtx7AOBFzABOKfoA1srIAOjzQQB8ZN4Am2TYANm+MQCkl8MAd1jUAGnjxQDw2hMAujo8AEYYRgBVdV8A0r31AG6SxgCsLl0ADkTtABw+QgBhxIcAKf3pAOfW8wAifMoAb5E1AAjgxQD/140AbmriALD9xgCTCMEAfF10AGutsgDNbp0APnJ7AMYRagD3z6kAKXPfALXJugC3AFEA4rINAHS6JADlfWAAdNiKAA0VLACBGAwAfmaUAAEpFgCfenYA/f2+AFZF7wDZfjYA7NkTAIu6uQDEl/wAMagnAPFuwwCUxTYA2KhWALSotQDPzA4AEoktAG9XNAAsVokAmc7jANYguQBrXqoAPiqcABFfzAD9C0oA4fT7AI47bQDihiwA6dSEAPy0qQDv7tEALjXJAC85YQA4IUQAG9nIAIH8CgD7SmoALxzYAFO0hABOmYwAVCLMACpV3ADAxtYACxmWABpwuABplWQAJlpgAD9S7gB/EQ8A9LURAPzL9QA0vC0ANLzuAOhdzADdXmAAZ46bAJIz7wDJF7gAYVibAOFXvABRg8YA2D4QAN1xSAAtHN0ArxihACEsRgBZ89cA2XqYAJ5UwABPhvoAVgb8AOV5rgCJIjYAOK0iAGeT3ABV6KoAgiY4AMrnmwBRDaQAmTOxAKnXDgBpBUgAZbLwAH+IpwCITJcA+dE2ACGSswB7gkoAmM8hAECf3ADcR1UA4XQ6AGfrQgD+nd8AXtRfAHtnpAC6rHoAVfaiACuIIwBBulUAWW4IACEqhgA5R4MAiePmAOWe1ABJ+0AA/1bpABwPygDFWYoAlPorANPBxQAPxc8A21quAEfFhgCFQ2IAIYY7ACx5lAAQYYcAKkx7AIAsGgBDvxIAiCaQAHg8iQCoxOQA5dt7AMQ6wgAm9OoA92eKAA2SvwBloysAPZOxAL18CwCkUdwAJ91jAGnh3QCalBkAqCmVAGjOKAAJ7bQARJ8gAE6YygBwgmMAfnwjAA+5MgCn9Y4AFFbnACHxCAC1nSoAb35NAKUZUQC1+asAgt/WAJbdYQAWNgIAxDqfAIOioQBy7W0AOY16AIK4qQBrMlwARidbAAA07QDSAHcA/PRVAAFZTQDgcYAAQbPKAAutAUD7Ifk/AAAAAC1EdD4AAACAmEb4PAAAAGBRzHg7AAAAgIMb8DkAAABAICV6OAAAAIAiguM2AAAAAB3zaTX+gitlRxVnQAAAAAAAADhDAAD6/kIudr86O568mvcMvb39/////98/PFRVVVVVxT+RKxfPVVWlPxfQpGcREYE/AAAAAAAAyELvOfr+Qi7mPyTEgv+9v84/tfQM1whrrD/MUEbSq7KDP4Q6Tpvg11U/AEHuywALujbwP26/iBpPO5s8NTP7qT327z9d3NicE2BxvGGAdz6a7O8/0WaHEHpekLyFf27oFePvPxP2ZzVS0ow8dIUV07DZ7z/6jvkjgM6LvN723Slr0O8/YcjmYU73YDzIm3UYRcfvP5nTM1vko5A8g/PGyj6+7z9te4NdppqXPA+J+WxYte8//O/9khq1jjz3R3IrkqzvP9GcL3A9vj48otHTMuyj7z8LbpCJNANqvBvT/q9mm+8/Dr0vKlJWlbxRWxLQAZPvP1XqTozvgFC8zDFswL2K7z8W9NW5I8mRvOAtqa6agu8/r1Vc6ePTgDxRjqXImHrvP0iTpeoVG4C8e1F9PLhy7z89Mt5V8B+PvOqNjDj5au8/v1MTP4yJizx1y2/rW2PvPybrEXac2Za81FwEhOBb7z9gLzo+9+yaPKq5aDGHVO8/nTiGy4Lnj7wd2fwiUE3vP43DpkRBb4o81oxiiDtG7z99BOSwBXqAPJbcfZFJP+8/lKio4/2Oljw4YnVuejjvP31IdPIYXoc8P6ayT84x7z/y5x+YK0eAPN184mVFK+8/XghxP3u4lryBY/Xh3yTvPzGrCW3h94I84d4f9Z0e7z/6v28amyE9vJDZ2tB/GO8/tAoMcoI3izwLA+SmhRLvP4/LzomSFG48Vi8+qa8M7z+2q7BNdU2DPBW3MQr+Bu8/THSs4gFChjwx2Ez8cAHvP0r401053Y88/xZksgj87j8EW447gKOGvPGfkl/F9u4/aFBLzO1KkrzLqTo3p/HuP44tURv4B5m8ZtgFba7s7j/SNpQ+6NFxvPef5TTb5+4/FRvOsxkZmbzlqBPDLePuP21MKqdIn4U8IjQSTKbe7j+KaSh6YBKTvByArARF2u4/W4kXSI+nWLwqLvchCtbuPxuaSWebLHy8l6hQ2fXR7j8RrMJg7WNDPC2JYWAIzu4/72QGOwlmljxXAB3tQcruP3kDodrhzG480DzBtaLG7j8wEg8/jv+TPN7T1/Aqw+4/sK96u86QdjwnKjbV2r/uP3fgVOu9HZM8Dd39mbK87j+Oo3EANJSPvKcsnXayue4/SaOT3Mzeh7xCZs+i2rbuP184D73G3ni8gk+dViu07j/2XHvsRhKGvA+SXcqkse4/jtf9GAU1kzzaJ7U2R6/uPwWbii+3mHs8/ceX1BKt7j8JVBzi4WOQPClUSN0Hq+4/6sYZUIXHNDy3RlmKJqnuPzXAZCvmMpQ8SCGtFW+n7j+fdplhSuSMvAncdrnhpe4/qE3vO8UzjLyFVTqwfqTuP67pK4l4U4S8IMPMNEaj7j9YWFZ43c6TvCUiVYI4ou4/ZBl+gKoQVzxzqUzUVaHuPygiXr/vs5O8zTt/Zp6g7j+CuTSHrRJqvL/aC3USoO4/7qltuO9nY7wvGmU8sp/uP1GI4FQ93IC8hJRR+X2f7j/PPlp+ZB94vHRf7Oh1n+4/sH2LwEruhrx0gaVImp/uP4rmVR4yGYa8yWdCVuuf7j/T1Aley5yQPD9d3k9poO4/HaVNudwye7yHAetzFKHuP2vAZ1T97JQ8MsEwAe2h7j9VbNar4etlPGJOzzbzou4/Qs+zL8WhiLwSGj5UJ6TuPzQ3O/G2aZO8E85MmYml7j8e/xk6hF6AvK3HI0Yap+4/bldy2FDUlLztkkSb2ajuPwCKDltnrZA8mWaK2ceq7j+06vDBL7eNPNugKkLlrO4//+fFnGC2ZbyMRLUWMq/uP0Rf81mD9ns8NncVma6x7j+DPR6nHwmTvMb/kQtbtO4/KR5si7ipXbzlxc2wN7fuP1m5kHz5I2y8D1LIy0S67j+q+fQiQ0OSvFBO3p+Cve4/S45m12zKhby6B8pw8cDuPyfOkSv8r3E8kPCjgpHE7j+7cwrhNdJtPCMj4xljyO4/YyJiIgTFh7xl5V17ZszuP9Ux4uOGHIs8My1K7JvQ7j8Vu7zT0buRvF0lPrID1e4/0jHunDHMkDxYszATntnuP7Nac26EaYQ8v/15VWve7j+0nY6Xzd+CvHrz079r4+4/hzPLkncajDyt01qZn+juP/rZ0UqPe5C8ZraNKQfu7j+6rtxW2cNVvPsVT7ii8+4/QPamPQ6kkLw6WeWNcvnuPzSTrTj01mi8R1778nb/7j81ilhr4u6RvEoGoTCwBe8/zd1fCtf/dDzSwUuQHgzvP6yYkvr7vZG8CR7XW8IS7z+zDK8wrm5zPJxShd2bGe8/lP2fXDLjjjx60P9fqyDvP6xZCdGP4IQ8S9FXLvEn7z9nGk44r81jPLXnBpRtL+8/aBmSbCxrZzxpkO/cIDfvP9K1zIMYioC8+sNdVQs/7z9v+v8/Xa2PvHyJB0otR+8/Sal1OK4NkLzyiQ0Ih0/vP6cHPaaFo3Q8h6T73BhY7z8PIkAgnpGCvJiDyRbjYO8/rJLB1VBajjyFMtsD5mnvP0trAaxZOoQ8YLQB8yFz7z8fPrQHIdWCvF+bezOXfO8/yQ1HO7kqibwpofUURobvP9OIOmAEtnQ89j+L5y6Q7z9xcp1R7MWDPINMx/tRmu8/8JHTjxL3j7zakKSir6TvP310I+KYro288WeOLUiv7z8IIKpBvMOOPCdaYe4buu8/Muupw5QrhDyXums3K8XvP+6F0TGpZIo8QEVuW3bQ7z/t4zvkujeOvBS+nK392+8/nc2RTTuJdzzYkJ6BwefvP4nMYEHBBVM88XGPK8Lz7z8AAAAAAADwP3SFFdOw2e8/D4n5bFi17z9RWxLQAZPvP3tRfTy4cu8/qrloMYdU7z84YnVuejjvP+HeH/WdHu8/FbcxCv4G7z/LqTo3p/HuPyI0Ekym3u4/LYlhYAjO7j8nKjbV2r/uP4JPnVYrtO4/KVRI3Qer7j+FVTqwfqTuP807f2aeoO4/dF/s6HWf7j+HAetzFKHuPxPOTJmJpe4/26AqQuWs7j/lxc2wN7fuP5Dwo4KRxO4/XSU+sgPV7j+t01qZn+juP0de+/J2/+4/nFKF3ZsZ7z9pkO/cIDfvP4ek+9wYWO8/X5t7M5d87z/akKSir6TvP0BFblt20O8/AAAAAAAA6EKUI5FL+GqsP/PE+lDOv84/1lIM/0Iu5j8AAAAAAAA4Q/6CK2VHFUdAlCORS/hqvD7zxPpQzr8uP9ZSDP9CLpY/ADj6/kIu5j8wZ8eTV/MuPQEAAAAAAOC/WzBRVVVV1T+QRev////PvxEB8SSzmck/n8gG5XVVxb8AAAAAAADgv3dVVVVVVdU/y/3/////z78M3ZWZmZnJP6dFZ1VVVcW/MN5EoyRJwj9lPUKk//+/v8rWKiiEcbw//2iwQ+uZub+F0K/3goG3P81F0XUTUrW/n97gw/A09z8AkOZ5f8zXvx/pLGp4E/c/AAANwu5v17+gtfoIYPL2PwDgURPjE9e/fYwTH6bR9j8AeCg4W7jWv9G0xQtJsfY/AHiAkFVd1r+6DC8zR5H2PwAAGHbQAta/I0IiGJ9x9j8AkJCGyqjVv9kepZlPUvY/AFADVkNP1b/EJI+qVjP2PwBAa8M39tS/FNyda7MU9j8AUKj9p53Uv0xcxlJk9vU/AKiJOZJF1L9PLJG1Z9j1PwC4sDn07dO/3pBby7y69T8AcI9EzpbTv3ga2fJhnfU/AKC9Fx5A07+HVkYSVoD1PwCARu/i6dK/02vnzpdj9T8A4DA4G5TSv5N/p+IlR/U/AIjajMU+0r+DRQZC/yr1PwCQJynh6dG/372y2yIP9T8A+EgrbZXRv9feNEeP8/Q/APi5mmdB0b9AKN7PQ9j0PwCY75TQ7dC/yKN4wD699D8AENsYpZrQv4ol4MN/ovQ/ALhjUuZH0L80hNQkBYj0PwDwhkUi68+/Cy0ZG85t9D8AsBd1SkfPv1QYOdPZU/Q/ADAQPUSkzr9ahLREJzr0PwCw6UQNAs6/+/gVQbUg9D8A8HcpomDNv7H0PtqCB/Q/AJCVBAHAzL+P/lddj+7zPwAQiVYpIMy/6UwLoNnV8z8AEIGNF4HLvyvBEMBgvfM/ANDTzMniyr+42nUrJKXzPwCQEi5ARcq/AtCfzSKN8z8A8B1od6jJvxx6hMVbdfM/ADBIaW0Myb/iNq1Jzl3zPwDARaYgcci/QNRNmHlG8z8AMBS0j9bHvyTL/85cL/M/AHBiPLg8x79JDaF1dxjzPwBgN5uao8a/kDk+N8gB8z8AoLdUMQvGv0H4lbtO6/I/ADAkdn1zxb/RqRkCCtXyPwAwwo973MS/Kv23qPm+8j8AANJRLEbEv6sbDHocqfI/AACDvIqww78wtRRgcpPyPwAASWuZG8O/9aFXV/p98j8AQKSQVIfCv787HZuzaPI/AKB5+Lnzwb+99Y+DnVPyPwCgLCXIYMG/OwjJqrc+8j8AIPdXf87Av7ZAqSsBKvI/AKD+Sdw8wL8yQcyWeRXyPwCAS7y9V7+/m/zSHSAB8j8AQECWCDe+vwtITUn07PE/AED5PpgXvb9pZY9S9djxPwCg2E5n+bu/fH5XESPF8T8AYC8gedy6v+kmy3R8sfE/AIAo58PAub+2GiwMAZ7xPwDAcrNGpri/vXC2e7CK8T8AAKyzAY23v7a87yWKd/E/AAA4RfF0tr/aMUw1jWTxPwCAh20OXrW/3V8nkLlR8T8A4KHeXEi0v0zSMqQOP/E/AKBqTdkzs7/a+RByiyzxPwBgxfh5ILK/MbXsKDAa8T8AIGKYRg6xv680hNr7B/E/AADSamz6r7+za04P7vXwPwBAd0qN2q2/zp8qXQbk8D8AAIXk7LyrvyGlLGNE0vA/AMASQImhqb8amOJ8p8DwPwDAAjNYiKe/0TbGgy+v8D8AgNZnXnGlvzkToJjbnfA/AIBlSYpco7/f51Kvq4zwPwBAFWTjSaG/+yhOL5978D8AgOuCwHKevxmPNYy1avA/AIBSUvFVmr8s+eyl7lnwPwCAgc9iPZa/kCzRzUlJ8D8AAKqM+yiSv6mt8MbGOPA/AAD5IHsxjL+pMnkTZSjwPwAAql01GYS/SHPqJyQY8D8AAOzCAxJ4v5WxFAYECPA/AAAkeQkEYL8a+ib3H+DvPwAAkITz728/dOphwhyh7z8AAD01QdyHPy6ZgbAQY+8/AIDCxKPOkz/Nre489iXvPwAAiRTBn5s/5xORA8jp7j8AABHO2LChP6uxy3iAru4/AMAB0FuKpT+bDJ2iGnTuPwCA2ECDXKk/tZkKg5E67j8AgFfvaietP1aaYAngAe4/AMCY5Zh1sD+Yu3flAcrtPwAgDeP1U7I/A5F8C/KS7T8AADiL3S60P85c+2asXO0/AMBXh1kGtj+d3l6qLCftPwAAajV22rc/zSxrPm7y7D8AYBxOQ6u5PwJ5p6Jtvuw/AGANu8d4uz9tCDdtJovsPwAg5zITQ70/BFhdvZRY7D8AYN5xMQq/P4yfuzO1Juw/AECRKxVnwD8/5+zug/XrPwCwkoKFR8E/wZbbdf3E6z8AMMrNbibCPyhKhgweles/AFDFptcDwz8sPu/F4mXrPwAQMzzD38M/i4jJZ0g36z8AgHprNrrEP0owHSFLCes/APDRKDmTxT9+7/KF6NvqPwDwGCTNasY/oj1gMR2v6j8AkGbs+EDHP6dY0z/mguo/APAa9cAVyD+LcwnvQFfqPwCA9lQp6cg/J0urkCos6j8AQPgCNrvJP9HykxOgAeo/AAAsHO2Lyj8bPNskn9fpPwDQAVxRW8s/kLHHBSWu6T8AwLzMZynMPy/Ol/Iuhek/AGBI1TX2zD91S6TuulzpPwDARjS9wc0/OEjnncY06T8A4M+4AYzOP+ZSZy9PDek/AJAXwAlVzz+d1/+OUuboPwC4HxJsDtA/fADMn86/6D8A0JMOuHHQPw7DvtrAmeg/AHCGnmvU0D/7FyOqJ3ToPwDQSzOHNtE/CJqzrABP6D8ASCNnDZjRP1U+ZehJKug/AIDM4P/40T9gAvSVAQboPwBoY9dfWdI/KaPgYyXi5z8AqBQJMLnSP6213Hezvuc/AGBDEHIY0z/CJZdnqpvnPwAY7G0md9M/VwYX8gd55z8AMK/7T9XTPwwT1tvKVuc/AOAv4+4y1D9rtk8BABDmPzxbQpFsAn48lbRNAwAw5j9BXQBI6r+NPHjUlA0AUOY/t6XWhqd/jjytb04HAHDmP0wlVGvq/GE8rg/f/v+P5j/9DllMJ358vLzFYwcAsOY/AdrcSGjBirz2wVweANDmPxGTSZ0cP4M8PvYF6//v5j9TLeIaBIB+vICXhg4AEOc/UnkJcWb/ezwS6Wf8/y/nPySHvSbiAIw8ahGB3/9P5z/SAfFukQJuvJCcZw8AcOc/dJxUzXH8Z7w1yH76/4/nP4ME9Z7BvoE85sIg/v+v5z9lZMwpF35wvADJP+3/z+c/HIt7CHKAgLx2Gibp/+/nP675nW0owI086KOcBAAQ6D8zTOVR0n+JPI8skxcAMOg/gfMwtun+irycczMGAFDoP7w1ZWu/v4k8xolCIABw6D91exHzZb+LvAR59ev/j+g/V8s9om4AibzfBLwiALDoPwpL4DjfAH28ihsM5f/P6D8Fn/9GcQCIvEOOkfz/7+g/OHB60HuBgzzHX/oeABDpPwO033aRPok8uXtGEwAw6T92AphLToB/PG8H7ub/T+k/LmL/2fB+j7zREjze/2/pP7o4JpaqgnC8DYpF9P+P6T/vqGSRG4CHvD4umN3/r+k/N5NaiuBAh7xm+0nt/8/pPwDgm8EIzj88UZzxIADw6T8KW4gnqj+KvAawRREAEOo/VtpYmUj/dDz69rsHADDqPxhtK4qrvow8eR2XEABQ6j8weXjdyv6IPEgu9R0AcOo/26vYPXZBj7xSM1kcAJDqPxJ2woQCv468Sz5PKgCw6j9fP/88BP1pvNEertf/z+o/tHCQEuc+grx4BFHu/+/qP6PeDuA+Bmo8Ww1l2/8P6z+5Ch84yAZaPFfKqv7/L+s/HTwjdB4BebzcupXZ/0/rP58qhmgQ/3m8nGWeJABw6z8+T4bQRf+KPEAWh/n/j+s/+cPClnf+fDxPywTS/6/rP8Qr8u4n/2O8RVxB0v/P6z8h6jvut/9svN8JY/j/7+s/XAsulwNBgbxTdrXh/w/sPxlqt5RkwYs841f68f8v7D/txjCN7/5kvCTkv9z/T+w/dUfsvGg/hLz3uVTt/2/sP+zgU/CjfoQ81Y+Z6/+P7D/xkvmNBoNzPJohJSEAsOw/BA4YZI79aLycRpTd/8/sP3Lqxxy+fo48dsT96v/v7D/+iJ+tOb6OPCv4mhYAEO0/cVq5qJF9dTwd9w8NADDtP9rHcGmQwYk8xA956v9P7T8M/ljFNw5YvOWH3C4AcO0/RA/BTdaAf7yqgtwhAJDtP1xc/ZSPfHS8gwJr2P+v7T9+YSHFHX+MPDlHbCkA0O0/U7H/sp4BiDz1kETl/+/tP4nMUsbSAG48lParzf8P7j/SaS0gQIN/vN3IUtv/L+4/ZAgbysEAezzvFkLy/0/uP1GrlLCo/3I8EV6K6P9v7j9Zvu+xc/ZXvA3/nhEAkO4/AcgLXo2AhLxEF6Xf/6/uP7UgQ9UGAHg8oX8SGgDQ7j+SXFZg+AJQvMS8ugcA8O4/EeY1XURAhbwCjXr1/w/vPwWR7zkx+0+8x4rlHgAw7z9VEXPyrIGKPJQ0gvX/T+8/Q8fX1EE/ijxrTKn8/2/vP3V4mBz0AmK8QcT54f+P7z9L53f00X13PH7j4NL/r+8/MaN8mhkBb7ye5HccANDvP7GszkvugXE8McPg9//v7z9ah3ABNwVuvG5gZfT/D/A/2gocSa1+irxYeobz/y/wP+Cy/MNpf5e8Fw38/f9P8D9blMs0/r+XPIJNzQMAcPA/y1bkwIMAgjzoy/L5/4/wPxp1N77f/228ZdoMAQCw8D/rJuaufz+RvDjTpAEA0PA/959Iefp9gDz9/dr6/+/wP8Br1nAFBHe8lv26CwAQ8T9iC22E1ICOPF305fr/L/E/7zb9ZPq/nTzZmtUNAFDxP65QEnB3AJo8mlUhDwBw8T/u3uPi+f2NPCZUJ/z/j/E/c3I73DAAkTxZPD0SALDxP4gBA4B5f5k8t54p+P/P8T9njJ+rMvllvADUivT/7/E/61unnb9/kzykhosMABDyPyJb/ZFrgJ88A0OFAwAw8j8zv5/rwv+TPIT2vP//T/I/ci4ufucBdjzZISn1/2/yP2EMf3a7/H88PDqTFACQ8j8rQQI8ygJyvBNjVRQAsPI/Ah/yM4KAkrw7Uv7r/8/yP/LcTzh+/4i8lq24CwDw8j/FQTBQUf+FvK/ievv/D/M/nSheiHEAgbx/X6z+/y/zPxW3tz9d/5G8VmemDABQ8z+9gosign+VPCH3+xEAcPM/zNUNxLoAgDy5L1n5/4/zP1Gnsi2dP5S8QtLdBACw8z/hOHZwa3+FPFfJsvX/z/M/MRK/EDoCejwYtLDq/+/zP7BSsWZtf5g89K8yFQAQ9D8khRlfN/hnPCmLRxcAMPQ/Q1HccuYBgzxjtJXn/0/0P1qJsrhp/4k84HUE6P9v9D9U8sKbscCVvOfBb+//j/Q/cio68glAmzwEp77l/6/0P0V9Db+3/5S83icQFwDQ9D89atxxZMCZvOI+8A8A8PQ/HFOFC4l/lzzRS9wSABD1PzakZnFlBGA8eicFFgAw9T8JMiPOzr+WvExw2+z/T/U/16EFBXICibypVF/v/2/1PxJkyQ7mv5s8EhDmFwCQ9T+Q76+BxX6IPJI+yQMAsPU/wAy/CghBn7y8GUkdAND1PylHJfsqgZi8iXq45//v9T8Eae2At36UvL7z+HnsYfY/3qqMgPd71b89iK9K7XH1P9ttwKfwvtK/sBDw8DmV9D9nOlF/rh7Qv4UDuLCVyfM/6SSCptgxy7+lZIgMGQ3zP1h3wApPV8a/oI4LeyJe8j8AgZzHK6rBvz80GkpKu/E/Xg6MznZOur+65YrwWCPxP8wcYVo8l7G/pwCZQT+V8D8eDOE49FKivwAAAAAAAPA/AAAAAAAAAACsR5r9jGDuP4RZ8l2qpao/oGoCH7Ok7D+0LjaqU168P+b8alc2IOs/CNsgd+UmxT8tqqFj0cLpP3BHIg2Gwss/7UF4A+aG6D/hfqDIiwXRP2JIU/XcZ+c/Ce62VzAE1D/vOfr+Qi7mPzSDuEijDtC/agvgC1tX1T8jQQry/v/fvwA4+v5CLuY/MGfHk1fzLj0AAAAAAADgv2BVVVVVVeW/BgAAAAAA4D9OVVmZmZnpP3qkKVVVVeW/6UVIm1tJ8r/DPyaLKwDwPwAAAAAAoPY/AEGxggELF8i58oIs1r+AVjcoJLT6PAAAAAAAgPY/AEHRggELFwhYv73R1b8g9+DYCKUcvQAAAAAAYPY/AEHxggELF1hFF3d21b9tULbVpGIjvQAAAAAAQPY/AEGRgwELF/gth60a1b/VZ7Ce5ITmvAAAAAAAIPY/AEGxgwELF3h3lV++1L/gPimTaRsEvQAAAAAAAPY/AEHRgwELF2Acwoth1L/MhExIL9gTPQAAAAAA4PU/AEHxgwELF6iGhjAE1L86C4Lt80LcPAAAAAAAwPU/AEGRhAELF0hpVUym079glFGGxrEgPQAAAAAAoPU/AEGxhAELF4CYmt1H07+SgMXUTVklPQAAAAAAgPU/AEHRhAELFyDhuuLo0r/YK7eZHnsmPQAAAAAAYPU/AEHxhAELF4jeE1qJ0r8/sM+2FMoVPQAAAAAAYPU/AEGRhQELF4jeE1qJ0r8/sM+2FMoVPQAAAAAAQPU/AEGxhQELF3jP+0Ep0r922lMoJFoWvQAAAAAAIPU/AEHRhQELF5hpwZjI0b8EVOdovK8fvQAAAAAAAPU/AEHxhQELF6irq1xn0b/wqIIzxh8fPQAAAAAA4PQ/AEGRhgELF0iu+YsF0b9mWgX9xKgmvQAAAAAAwPQ/AEGxhgELF5Bz4iSj0L8OA/R+7msMvQAAAAAAoPQ/AEHRhgELF9C0lCVA0L9/LfSeuDbwvAAAAAAAoPQ/AEHxhgELF9C0lCVA0L9/LfSeuDbwvAAAAAAAgPQ/AEGRhwELF0BebRi5z7+HPJmrKlcNPQAAAAAAYPQ/AEGxhwELF2Dcy63wzr8kr4actyYrPQAAAAAAQPQ/AEHRhwELF/Aqbgcnzr8Q/z9UTy8XvQAAAAAAIPQ/AEHxhwELF8BPayFczb8baMq7kbohPQAAAAAAAPQ/AEGRiAELF6Cax/ePzL80hJ9oT3knPQAAAAAAAPQ/AEGxiAELF6Cax/ePzL80hJ9oT3knPQAAAAAA4PM/AEHRiAELF5AtdIbCy7+Pt4sxsE4ZPQAAAAAAwPM/AEHxiAELF8CATsnzyr9mkM0/Y066PAAAAAAAoPM/AEGRiQELF7DiH7wjyr/qwUbcZIwlvQAAAAAAoPM/AEGxiQELF7DiH7wjyr/qwUbcZIwlvQAAAAAAgPM/AEHRiQELF1D0nFpSyb/j1MEE2dEqvQAAAAAAYPM/AEHxiQELF9AgZaB/yL8J+tt/v70rPQAAAAAAQPM/AEGRigELF+AQAomrx79YSlNykNsrPQAAAAAAQPM/AEGxigELF+AQAomrx79YSlNykNsrPQAAAAAAIPM/AEHRigELF9AZ5w/Wxr9m4rKjauQQvQAAAAAAAPM/AEHxigELF5CncDD/xb85UBCfQ54evQAAAAAAAPM/AEGRiwELF5CncDD/xb85UBCfQ54evQAAAAAA4PI/AEGxiwELF7Ch4+Umxb+PWweQi94gvQAAAAAAwPI/AEHRiwELF4DLbCtNxL88eDVhwQwXPQAAAAAAwPI/AEHxiwELF4DLbCtNxL88eDVhwQwXPQAAAAAAoPI/AEGRjAELF5AeIPxxw786VCdNhnjxPAAAAAAAgPI/AEGxjAELF/Af+FKVwr8IxHEXMI0kvQAAAAAAYPI/AEHRjAELF2Av1Sq3wb+WoxEYpIAuvQAAAAAAYPI/AEHxjAELF2Av1Sq3wb+WoxEYpIAuvQAAAAAAQPI/AEGRjQELF5DQfH7XwL/0W+iIlmkKPQAAAAAAQPI/AEGxjQELF5DQfH7XwL/0W+iIlmkKPQAAAAAAIPI/AEHRjQELF+DbMZHsv7/yM6NcVHUlvQAAAAAAAPI/AEHyjQELFituBye+vzwA8CosNCo9AAAAAAAA8j8AQZKOAQsWK24HJ76/PADwKiw0Kj0AAAAAAODxPwBBsY4BCxfAW49UXry/Br5fWFcMHb0AAAAAAMDxPwBB0Y4BCxfgSjptkrq/yKpb6DU5JT0AAAAAAMDxPwBB8Y4BCxfgSjptkrq/yKpb6DU5JT0AAAAAAKDxPwBBkY8BCxegMdZFw7i/aFYvTSl8Ez0AAAAAAKDxPwBBsY8BCxegMdZFw7i/aFYvTSl8Ez0AAAAAAIDxPwBB0Y8BCxdg5YrS8La/2nMzyTeXJr0AAAAAAGDxPwBB8Y8BCxcgBj8HG7W/V17GYVsCHz0AAAAAAGDxPwBBkZABCxcgBj8HG7W/V17GYVsCHz0AAAAAAEDxPwBBsZABCxfgG5bXQbO/3xP5zNpeLD0AAAAAAEDxPwBB0ZABCxfgG5bXQbO/3xP5zNpeLD0AAAAAACDxPwBB8ZABCxeAo+42ZbG/CaOPdl58FD0AAAAAAADxPwBBkZEBCxeAEcAwCq+/kY42g55ZLT0AAAAAAADxPwBBsZEBCxeAEcAwCq+/kY42g55ZLT0AAAAAAODwPwBB0ZEBCxeAGXHdQqu/THDW5XqCHD0AAAAAAODwPwBB8ZEBCxeAGXHdQqu/THDW5XqCHD0AAAAAAMDwPwBBkZIBCxfAMvZYdKe/7qHyNEb8LL0AAAAAAMDwPwBBsZIBCxfAMvZYdKe/7qHyNEb8LL0AAAAAAKDwPwBB0ZIBCxfA/rmHnqO/qv4m9bcC9TwAAAAAAKDwPwBB8ZIBCxfA/rmHnqO/qv4m9bcC9TwAAAAAAIDwPwBBkpMBCxZ4DpuCn7/kCX58JoApvQAAAAAAgPA/AEGykwELFngOm4Kfv+QJfnwmgCm9AAAAAABg8D8AQdGTAQsXgNUHG7mXvzmm+pNUjSi9AAAAAABA8D8AQfKTAQsW/LCowI+/nKbT9nwe37wAAAAAAEDwPwBBkpQBCxb8sKjAj7+cptP2fB7fvAAAAAAAIPA/AEGylAELFhBrKuB/v+RA2g0/4hm9AAAAAAAg8D8AQdKUAQsWEGsq4H+/5EDaDT/iGb0AAAAAAADwPwBBhpUBCwLwPwBBpZUBCwPA7z8AQbKVAQsWiXUVEIA/6CudmWvHEL0AAAAAAIDvPwBB0ZUBCxeAk1hWIJA/0vfiBlvcI70AAAAAAEDvPwBB8pUBCxbJKCVJmD80DFoyuqAqvQAAAAAAAO8/AEGRlgELF0DniV1BoD9T1/FcwBEBPQAAAAAAwO4/AEGylgELFi7UrmakPyj9vXVzFiy9AAAAAACA7j8AQdGWAQsXwJ8UqpSoP30mWtCVeRm9AAAAAABA7j8AQfGWAQsXwN3Nc8usPwco2EfyaBq9AAAAAAAg7j8AQZGXAQsXwAbAMequP3s7yU8+EQ69AAAAAADg7T8AQbGXAQsXYEbRO5exP5ueDVZdMiW9AAAAAACg7T8AQdGXAQsX4NGn9b2zP9dO26VeyCw9AAAAAABg7T8AQfGXAQsXoJdNWum1Px4dXTwGaSy9AAAAAABA7T8AQZGYAQsXwOoK0wC3PzLtnamNHuw8AAAAAAAA7T8AQbGYAQsXQFldXjO5P9pHvTpcESM9AAAAAADA7D8AQdGYAQsXYK2NyGq7P+Vo9yuAkBO9AAAAAACg7D8AQfGYAQsXQLwBWIi8P9OsWsbRRiY9AAAAAABg7D8AQZGZAQsXIAqDOce+P+BF5q9owC29AAAAAABA7D8AQbGZAQsX4Ns5kei/P/0KoU/WNCW9AAAAAAAA7D8AQdGZAQsX4CeCjhfBP/IHLc547yE9AAAAAADg6z8AQfGZAQsX8CN+K6rBPzSZOESOpyw9AAAAAACg6z8AQZGaAQsXgIYMYdHCP6G0gctsnQM9AAAAAACA6z8AQbGaAQsXkBWw/GXDP4lySyOoL8Y8AAAAAABA6z8AQdGaAQsXsDODPZHEP3i2/VR5gyU9AAAAAAAg6z8AQfGaAQsXsKHk5SfFP8d9aeXoMyY9AAAAAADg6j8AQZGbAQsXEIy+TlfGP3guPCyLzxk9AAAAAADA6j8AQbGbAQsXcHWLEvDGP+EhnOWNESW9AAAAAACg6j8AQdGbAQsXUESFjYnHPwVDkXAQZhy9AAAAAABg6j8AQfKbAQsWOeuvvsg/0SzpqlQ9B70AAAAAAEDqPwBBkpwBCxb33FpayT9v/6BYKPIHPQAAAAAAAOo/AEGxnAELF+CKPO2Tyj9pIVZQQ3IovQAAAAAA4Ok/AEHRnAELF9BbV9gxyz+q4axOjTUMvQAAAAAAwOk/AEHxnAELF+A7OIfQyz+2ElRZxEstvQAAAAAAoOk/AEGRnQELFxDwxvtvzD/SK5bFcuzxvAAAAAAAYOk/AEGxnQELF5DUsD2xzT81sBX3Kv8qvQAAAAAAQOk/AEHRnQELFxDn/w5Tzj8w9EFgJxLCPAAAAAAAIOk/AEHynQELFt3krfXOPxGOu2UVIcq8AAAAAAAA6T8AQZGeAQsXsLNsHJnPPzDfDMrsyxs9AAAAAADA6D8AQbGeAQsXWE1gOHHQP5FO7RbbnPg8AAAAAACg6D8AQdGeAQsXYGFnLcTQP+nqPBaLGCc9AAAAAACA6D8AQfGeAQsX6CeCjhfRPxzwpWMOISy9AAAAAABg6D8AQZGfAQsX+KzLXGvRP4EWpffNmis9AAAAAABA6D8AQbGfAQsXaFpjmb/RP7e9R1Htpiw9AAAAAAAg6D8AQdGfAQsXuA5tRRTSP+q6Rrrehwo9AAAAAADg5z8AQfGfAQsXkNx88L7SP/QEUEr6nCo9AAAAAADA5z8AQZGgAQsXYNPh8RTTP7g8IdN64ii9AAAAAACg5z8AQbGgAQsXEL52Z2vTP8h38bDNbhE9AAAAAACA5z8AQdGgAQsXMDN3UsLTP1y9BrZUOxg9AAAAAABg5z8AQfGgAQsX6NUjtBnUP53gkOw25Ag9AAAAAABA5z8AQZGhAQsXyHHCjXHUP3XWZwnOJy+9AAAAAAAg5z8AQbGhAQsXMBee4MnUP6TYChuJIC69AAAAAAAA5z8AQdGhAQsXoDgHriLVP1nHZIFwvi49AAAAAADg5j8AQfGhAQsX0MhT93vVP+9AXe7trR89AAAAAADA5j8AQZGiAQupA2BZ373V1T/cZaQIKgsKvb7z+HnsYfY/GTCWW8b+3r89iK9K7XH1P6T81DJoC9u/sBDw8DmV9D97tx8Ki0HXv4UDuLCVyfM/e89tGumd07+lZIgMGQ3zPzG28vObHdC/oI4LeyJe8j/wejsbHXzJvz80GkpKu/E/nzyvk+P5wr+65YrwWCPxP1yNeL/LYLm/pwCZQT+V8D/OX0e2nW+qvwAAAAAAAPA/AAAAAAAAAACsR5r9jGDuPz31JJ/KOLM/oGoCH7Ok7D+6kThUqXbEP+b8alc2IOs/0uTESguEzj8tqqFj0cLpPxxlxvBFBtQ/7UF4A+aG6D/4nxssnI7YP2JIU/XcZ+c/zHuxTqTg3D8LbknJFnbSP3rGdaBpGde/3bqnbArH3j/I9r5IRxXnvyu4KmVHFfc/4FUAAAAAAAAC/wAEZAAgAAAE//8GAAEAAQABAP//Af8B//////8B/wH/Af8B/wH/Af8B/wH//////wr/IAD//wP/Af8E/x4AAAEF//////9jAAAIYwDoAwIAAAD//////wAAAAH/Af//////////////AEHJpQELAQQAQdalAQtEAf8B//////8AASAABACAAAAI//8B/wH/////////Af8G/wf/CP8J//////+8ArwCAQD//wEAAQD//wAA//////////8AQaqmAQsBFABByqYBCx7//wEACv///////////wH/Af8AAAAAAAAB/wH/Af8AQfqmAQtIAf8AAAAAAAAB/wH/AQAAAAEAAAAB//////8AAAAAAf///wAAAAD/////////////KAAK//////8BAAr/////AP//////////AEGmqAELHAH/Af///wEA//////////////////8K//////8AQdSoAQv5AgIAAAADAAAABQAAAAcAAAALAAAADQAAABEAAAATAAAAFwAAAB0AAAAfAAAAJQAAACkAAAArAAAALwAAADUAAAA7AAAAPQAAAEMAAABHAAAASQAAAE8AAABTAAAAWQAAAGEAAABlAAAAZwAAAGsAAABtAAAAcQAAAH8AAACDAAAAiQAAAIsAAACVAAAAlwAAAJ0AAACjAAAApwAAAK0AAACzAAAAtQAAAL8AAADBAAAAxQAAAMcAAADTAAAAAQAAAAsAAAANAAAAEQAAABMAAAAXAAAAHQAAAB8AAAAlAAAAKQAAACsAAAAvAAAANQAAADsAAAA9AAAAQwAAAEcAAABJAAAATwAAAFMAAABZAAAAYQAAAGUAAABnAAAAawAAAG0AAABxAAAAeQAAAH8AAACDAAAAiQAAAIsAAACPAAAAlQAAAJcAAACdAAAAowAAAKcAAACpAAAArQAAALMAAAC1AAAAuwAAAL8AAADBAAAAxQAAAMcAAADRAEHQqwELEQEAAAABAAAACAAAAAAAAAAFAEHsqwELAgMBAEGErAELCgQBAAAFAQAAkF4AQZysAQsBAgBBrKwBCwj//////////wBB8KwBCwNgY1A="); + } + }); + + // src/main.ts + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/base_side_effects.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/engine.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/backend.js + init_define_BUILD_VERSION(); + var EPSILON_FLOAT32 = 1e-7; + var EPSILON_FLOAT16 = 1e-4; + var DataStorage = class { + constructor(backend2, dataMover) { + this.backend = backend2; + this.dataMover = dataMover; + this.data = /* @__PURE__ */ new WeakMap(); + this.dataIdsCount = 0; + } + get(dataId) { + if (!this.data.has(dataId)) { + this.dataMover.moveData(this.backend, dataId); + } + return this.data.get(dataId); + } + set(dataId, value) { + this.dataIdsCount++; + this.data.set(dataId, value); + } + has(dataId) { + return this.data.has(dataId); + } + delete(dataId) { + this.dataIdsCount--; + return this.data.delete(dataId); + } + numDataIds() { + return this.dataIdsCount; + } + }; + var KernelBackend = class { + refCount(dataId) { + return notYetImplemented("refCount"); + } + incRef(dataId) { + return notYetImplemented("incRef"); + } + timerAvailable() { + return true; + } + time(f) { + return notYetImplemented("time"); + } + read(dataId) { + return notYetImplemented("read"); + } + readSync(dataId) { + return notYetImplemented("readSync"); + } + readToGPU(dataId, options) { + return notYetImplemented("readToGPU"); + } + numDataIds() { + return notYetImplemented("numDataIds"); + } + disposeData(dataId, force) { + return notYetImplemented("disposeData"); + } + write(values, shape, dtype) { + return notYetImplemented("write"); + } + move(dataId, values, shape, dtype, refCount) { + return notYetImplemented("move"); + } + memory() { + return notYetImplemented("memory"); + } + floatPrecision() { + return notYetImplemented("floatPrecision"); + } + epsilon() { + return this.floatPrecision() === 32 ? EPSILON_FLOAT32 : EPSILON_FLOAT16; + } + dispose() { + return notYetImplemented("dispose"); + } + }; + function notYetImplemented(kernelName) { + throw new Error(`'${kernelName}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/environment.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/util_base.js + init_define_BUILD_VERSION(); + function shuffle(array2) { + let counter = array2.length; + let index = 0; + while (counter > 0) { + index = Math.random() * counter | 0; + counter--; + swap(array2, counter, index); + } + } + function shuffleCombo(array2, array22) { + if (array2.length !== array22.length) { + throw new Error(`Array sizes must match to be shuffled together First array length was ${array2.length}Second array length was ${array22.length}`); + } + let counter = array2.length; + let index = 0; + while (counter > 0) { + index = Math.random() * counter | 0; + counter--; + swap(array2, counter, index); + swap(array22, counter, index); + } + } + function clamp(min6, x, max6) { + return Math.max(min6, Math.min(x, max6)); + } + function nearestLargerEven(val) { + return val % 2 === 0 ? val : val + 1; + } + function swap(object, left, right) { + const temp = object[left]; + object[left] = object[right]; + object[right] = temp; + } + function sum(arr) { + let sum6 = 0; + for (let i = 0; i < arr.length; i++) { + sum6 += arr[i]; + } + return sum6; + } + function randUniform(a, b) { + const r = Math.random(); + return b * r + (1 - r) * a; + } + function distSquared(a, b) { + let result = 0; + for (let i = 0; i < a.length; i++) { + const diff = Number(a[i]) - Number(b[i]); + result += diff * diff; + } + return result; + } + function assert(expr, msg) { + if (!expr) { + throw new Error(typeof msg === "string" ? msg : msg()); + } + } + function assertShapesMatch(shapeA, shapeB, errorMessagePrefix = "") { + assert(arraysEqual(shapeA, shapeB), () => errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`); + } + function assertNonNull(a) { + assert(a != null, () => `The input to the tensor constructor must be a non-null value.`); + } + function flatten(arr, result = [], skipTypedArray = false) { + if (result == null) { + result = []; + } + if (Array.isArray(arr) || isTypedArray(arr) && !skipTypedArray) { + for (let i = 0; i < arr.length; ++i) { + flatten(arr[i], result, skipTypedArray); + } + } else { + result.push(arr); + } + return result; + } + function sizeFromShape(shape) { + if (shape.length === 0) { + return 1; + } + let size = shape[0]; + for (let i = 1; i < shape.length; i++) { + size *= shape[i]; + } + return size; + } + function isScalarShape(shape) { + return shape.length === 0; + } + function arraysEqual(n1, n2) { + if (n1 === n2) { + return true; + } + if (n1 == null || n2 == null) { + return false; + } + if (n1.length !== n2.length) { + return false; + } + for (let i = 0; i < n1.length; i++) { + if (n1[i] !== n2[i]) { + return false; + } + } + return true; + } + function isInt(a) { + return a % 1 === 0; + } + function tanh(x) { + if (Math.tanh != null) { + return Math.tanh(x); + } + if (x === Infinity) { + return 1; + } else if (x === -Infinity) { + return -1; + } else { + const e2x = Math.exp(2 * x); + return (e2x - 1) / (e2x + 1); + } + } + function sizeToSquarishShape(size) { + const width = Math.ceil(Math.sqrt(size)); + return [width, Math.ceil(size / width)]; + } + function createShuffledIndices(n) { + const shuffledIndices = new Uint32Array(n); + for (let i = 0; i < n; ++i) { + shuffledIndices[i] = i; + } + shuffle(shuffledIndices); + return shuffledIndices; + } + function rightPad(a, size) { + if (size <= a.length) { + return a; + } + return a + " ".repeat(size - a.length); + } + function repeatedTry(checkFn, delayFn = (counter) => 0, maxCounter) { + return new Promise((resolve, reject) => { + let tryCount = 0; + const tryFn = () => { + if (checkFn()) { + resolve(); + return; + } + tryCount++; + const nextBackoff = delayFn(tryCount); + if (maxCounter != null && tryCount >= maxCounter) { + reject(); + return; + } + setTimeout(tryFn, nextBackoff); + }; + tryFn(); + }); + } + function inferFromImplicitShape(shape, size) { + let shapeProd = 1; + let implicitIdx = -1; + for (let i = 0; i < shape.length; ++i) { + if (shape[i] >= 0) { + shapeProd *= shape[i]; + } else if (shape[i] === -1) { + if (implicitIdx !== -1) { + throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${implicitIdx} and dim ${i}`); + } + implicitIdx = i; + } else if (shape[i] < 0) { + throw Error(`Shapes can not be < 0. Found ${shape[i]} at dim ${i}`); + } + } + if (implicitIdx === -1) { + if (size > 0 && size !== shapeProd) { + throw Error(`Size(${size}) must match the product of shape ${shape}`); + } + return shape; + } + if (shapeProd === 0) { + throw Error(`Cannot infer the missing size in [${shape}] when there are 0 elements`); + } + if (size % shapeProd !== 0) { + throw Error(`The implicit shape can't be a fractional number. Got ${size} / ${shapeProd}`); + } + const newShape = shape.slice(); + newShape[implicitIdx] = size / shapeProd; + return newShape; + } + function parseAxisParam(axis, shape) { + const rank = shape.length; + axis = axis == null ? shape.map((s, i) => i) : [].concat(axis); + assert(axis.every((ax) => ax >= -rank && ax < rank), () => `All values in axis param must be in range [-${rank}, ${rank}) but got axis ${axis}`); + assert(axis.every((ax) => isInt(ax)), () => `All values in axis param must be integers but got axis ${axis}`); + return axis.map((a) => a < 0 ? rank + a : a); + } + function squeezeShape(shape, axis) { + const newShape = []; + const keptDims = []; + const isEmptyArray = axis != null && Array.isArray(axis) && axis.length === 0; + const axes = axis == null || isEmptyArray ? null : parseAxisParam(axis, shape).sort(); + let j = 0; + for (let i = 0; i < shape.length; ++i) { + if (axes != null) { + if (axes[j] === i && shape[i] !== 1) { + throw new Error(`Can't squeeze axis ${i} since its dim '${shape[i]}' is not 1`); + } + if ((axes[j] == null || axes[j] > i) && shape[i] === 1) { + newShape.push(shape[i]); + keptDims.push(i); + } + if (axes[j] <= i) { + j++; + } + } + if (shape[i] !== 1) { + newShape.push(shape[i]); + keptDims.push(i); + } + } + return { newShape, keptDims }; + } + function getTypedArrayFromDType(dtype, size) { + let values = null; + if (dtype == null || dtype === "float32") { + values = new Float32Array(size); + } else if (dtype === "int32") { + values = new Int32Array(size); + } else if (dtype === "bool") { + values = new Uint8Array(size); + } else { + throw new Error(`Unknown data type ${dtype}`); + } + return values; + } + function getArrayFromDType(dtype, size) { + let values = null; + if (dtype == null || dtype === "float32") { + values = new Float32Array(size); + } else if (dtype === "int32") { + values = new Int32Array(size); + } else if (dtype === "bool") { + values = new Uint8Array(size); + } else if (dtype === "string") { + values = new Array(size); + } else { + throw new Error(`Unknown data type ${dtype}`); + } + return values; + } + function checkConversionForErrors(vals, dtype) { + for (let i = 0; i < vals.length; i++) { + const num = vals[i]; + if (isNaN(num) || !isFinite(num)) { + throw Error(`A tensor of type ${dtype} being uploaded contains ${num}.`); + } + } + } + function isValidDtype(dtype) { + return dtype === "bool" || dtype === "complex64" || dtype === "float32" || dtype === "int32" || dtype === "string"; + } + function hasEncodingLoss(oldType, newType) { + if (newType === "complex64") { + return false; + } + if (newType === "float32" && oldType !== "complex64") { + return false; + } + if (newType === "int32" && oldType !== "float32" && oldType !== "complex64") { + return false; + } + if (newType === "bool" && oldType === "bool") { + return false; + } + return true; + } + function isTypedArray(a) { + return a instanceof Float32Array || a instanceof Int32Array || a instanceof Uint8Array || a instanceof Uint8ClampedArray; + } + function bytesPerElement(dtype) { + if (dtype === "float32" || dtype === "int32") { + return 4; + } else if (dtype === "complex64") { + return 8; + } else if (dtype === "bool") { + return 1; + } else { + throw new Error(`Unknown dtype ${dtype}`); + } + } + function bytesFromStringArray(arr) { + if (arr == null) { + return 0; + } + let bytes = 0; + arr.forEach((x) => bytes += x.length); + return bytes; + } + function isString(value) { + return typeof value === "string" || value instanceof String; + } + function isBoolean(value) { + return typeof value === "boolean"; + } + function isNumber(value) { + return typeof value === "number"; + } + function inferDtype(values) { + if (Array.isArray(values)) { + return inferDtype(values[0]); + } + if (values instanceof Float32Array) { + return "float32"; + } else if (values instanceof Int32Array || values instanceof Uint8Array || values instanceof Uint8ClampedArray) { + return "int32"; + } else if (isNumber(values)) { + return "float32"; + } else if (isString(values)) { + return "string"; + } else if (isBoolean(values)) { + return "bool"; + } + return "float32"; + } + function isFunction(f) { + return !!(f && f.constructor && f.call && f.apply); + } + function nearestDivisor(size, start) { + for (let i = start; i < size; ++i) { + if (size % i === 0) { + return i; + } + } + return size; + } + function computeStrides(shape) { + const rank = shape.length; + if (rank < 2) { + return []; + } + const strides = new Array(rank - 1); + strides[rank - 2] = shape[rank - 1]; + for (let i = rank - 3; i >= 0; --i) { + strides[i] = strides[i + 1] * shape[i + 1]; + } + return strides; + } + function createNestedArray(offset, shape, a, isComplex = false) { + const ret = new Array(); + if (shape.length === 1) { + const d = shape[0] * (isComplex ? 2 : 1); + for (let i = 0; i < d; i++) { + ret[i] = a[offset + i]; + } + } else { + const d = shape[0]; + const rest = shape.slice(1); + const len = rest.reduce((acc, c) => acc * c) * (isComplex ? 2 : 1); + for (let i = 0; i < d; i++) { + ret[i] = createNestedArray(offset + i * len, rest, a, isComplex); + } + } + return ret; + } + function toNestedArray(shape, a, isComplex = false) { + if (shape.length === 0) { + return a[0]; + } + const size = shape.reduce((acc, c) => acc * c) * (isComplex ? 2 : 1); + if (size === 0) { + return []; + } + if (size !== a.length) { + throw new Error(`[${shape}] does not match the input size ${a.length}${isComplex ? " for a complex tensor" : ""}.`); + } + return createNestedArray(0, shape, a, isComplex); + } + function makeOnesTypedArray(size, dtype) { + const array2 = makeZerosTypedArray(size, dtype); + for (let i = 0; i < array2.length; i++) { + array2[i] = 1; + } + return array2; + } + function makeZerosTypedArray(size, dtype) { + if (dtype == null || dtype === "float32" || dtype === "complex64") { + return new Float32Array(size); + } else if (dtype === "int32") { + return new Int32Array(size); + } else if (dtype === "bool") { + return new Uint8Array(size); + } else { + throw new Error(`Unknown data type ${dtype}`); + } + } + function makeZerosNestedTypedArray(shape, dtype) { + const size = shape.reduce((prev, curr) => prev * curr, 1); + if (dtype == null || dtype === "float32") { + return toNestedArray(shape, new Float32Array(size)); + } else if (dtype === "int32") { + return toNestedArray(shape, new Int32Array(size)); + } else if (dtype === "bool") { + return toNestedArray(shape, new Uint8Array(size)); + } else { + throw new Error(`Unknown data type ${dtype}`); + } + } + function assertNonNegativeIntegerDimensions(shape) { + shape.forEach((dimSize) => { + assert(Number.isInteger(dimSize) && dimSize >= 0, () => `Tensor must have a shape comprised of positive integers but got shape [${shape}].`); + }); + } + function locToIndex(locs, rank, strides) { + if (rank === 0) { + return 0; + } else if (rank === 1) { + return locs[0]; + } + let index = locs[locs.length - 1]; + for (let i = 0; i < locs.length - 1; ++i) { + index += strides[i] * locs[i]; + } + return index; + } + function indexToLoc(index, rank, strides) { + if (rank === 0) { + return []; + } else if (rank === 1) { + return [index]; + } + const locs = new Array(rank); + for (let i = 0; i < locs.length - 1; ++i) { + locs[i] = Math.floor(index / strides[i]); + index -= locs[i] * strides[i]; + } + locs[locs.length - 1] = index; + return locs; + } + function isPromise(object) { + return object && object.then && typeof object.then === "function"; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/environment.js + var TENSORFLOWJS_FLAGS_PREFIX = "tfjsflags"; + var Environment = class { + constructor(global2) { + this.global = global2; + this.flags = {}; + this.flagRegistry = {}; + this.urlFlags = {}; + this.getQueryParams = getQueryParams; + this.populateURLFlags(); + } + setPlatform(platformName, platform) { + if (this.platform != null) { + if (!(env().getBool("IS_TEST") || env().getBool("PROD"))) { + console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${platformName}.`); + } + } + this.platformName = platformName; + this.platform = platform; + } + registerFlag(flagName, evaluationFn, setHook) { + this.flagRegistry[flagName] = { evaluationFn, setHook }; + if (this.urlFlags[flagName] != null) { + const flagValue = this.urlFlags[flagName]; + if (!(env().getBool("IS_TEST") || env().getBool("PROD"))) { + console.warn(`Setting feature override from URL ${flagName}: ${flagValue}.`); + } + this.set(flagName, flagValue); + } + } + async getAsync(flagName) { + if (flagName in this.flags) { + return this.flags[flagName]; + } + this.flags[flagName] = await this.evaluateFlag(flagName); + return this.flags[flagName]; + } + get(flagName) { + if (flagName in this.flags) { + return this.flags[flagName]; + } + const flagValue = this.evaluateFlag(flagName); + if (isPromise(flagValue)) { + throw new Error(`Flag ${flagName} cannot be synchronously evaluated. Please use getAsync() instead.`); + } + this.flags[flagName] = flagValue; + return this.flags[flagName]; + } + getNumber(flagName) { + return this.get(flagName); + } + getBool(flagName) { + return this.get(flagName); + } + getFlags() { + return this.flags; + } + get features() { + return this.flags; + } + set(flagName, value) { + if (this.flagRegistry[flagName] == null) { + throw new Error(`Cannot set flag ${flagName} as it has not been registered.`); + } + this.flags[flagName] = value; + if (this.flagRegistry[flagName].setHook != null) { + this.flagRegistry[flagName].setHook(value); + } + } + evaluateFlag(flagName) { + if (this.flagRegistry[flagName] == null) { + throw new Error(`Cannot evaluate flag '${flagName}': no evaluation function found.`); + } + return this.flagRegistry[flagName].evaluationFn(); + } + setFlags(flags) { + this.flags = Object.assign({}, flags); + } + reset() { + this.flags = {}; + this.urlFlags = {}; + this.populateURLFlags(); + } + populateURLFlags() { + if (typeof this.global === "undefined" || typeof this.global.location === "undefined" || typeof this.global.location.search === "undefined") { + return; + } + const urlParams = this.getQueryParams(this.global.location.search); + if (TENSORFLOWJS_FLAGS_PREFIX in urlParams) { + const keyValues = urlParams[TENSORFLOWJS_FLAGS_PREFIX].split(","); + keyValues.forEach((keyValue) => { + const [key, value] = keyValue.split(":"); + this.urlFlags[key] = parseValue(key, value); + }); + } + } + }; + function getQueryParams(queryString) { + const params = {}; + queryString.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (s, ...t) => { + decodeParam(params, t[0], t[1]); + return t.join("="); + }); + return params; + } + function decodeParam(params, name, value) { + params[decodeURIComponent(name)] = decodeURIComponent(value || ""); + } + function parseValue(flagName, value) { + value = value.toLowerCase(); + if (value === "true" || value === "false") { + return value === "true"; + } else if (`${+value}` === value) { + return +value; + } + throw new Error(`Could not parse value flag value ${value} for flag ${flagName}.`); + } + function env() { + return ENV; + } + var ENV = null; + function setEnvironmentGlobal(environment) { + ENV = environment; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/global_util.js + init_define_BUILD_VERSION(); + var globalNameSpace; + function getGlobalNamespace() { + if (globalNameSpace == null) { + let ns; + if (typeof window !== "undefined") { + ns = window; + } else if (typeof window !== "undefined") { + ns = window; + } else if (typeof process !== "undefined") { + ns = process; + } else if (typeof self !== "undefined") { + ns = self; + } else { + throw new Error("Could not find a global object"); + } + globalNameSpace = ns; + } + return globalNameSpace; + } + function getGlobalMap() { + const ns = getGlobalNamespace(); + if (ns._tfGlobals == null) { + ns._tfGlobals = /* @__PURE__ */ new Map(); + } + return ns._tfGlobals; + } + function getGlobal(key, init2) { + const globalMap = getGlobalMap(); + if (globalMap.has(key)) { + return globalMap.get(key); + } else { + const singleton = init2(); + globalMap.set(key, singleton); + return globalMap.get(key); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/kernel_names.js + init_define_BUILD_VERSION(); + var Abs = "Abs"; + var Acos = "Acos"; + var Acosh = "Acosh"; + var Add = "Add"; + var AddN = "AddN"; + var All = "All"; + var Any = "Any"; + var ArgMax = "ArgMax"; + var ArgMin = "ArgMin"; + var Asin = "Asin"; + var Asinh = "Asinh"; + var Atan = "Atan"; + var Atanh = "Atanh"; + var Atan2 = "Atan2"; + var AvgPool = "AvgPool"; + var AvgPoolGrad = "AvgPoolGrad"; + var AvgPool3D = "AvgPool3D"; + var AvgPool3DGrad = "AvgPool3DGrad"; + var BatchMatMul = "BatchMatMul"; + var BatchToSpaceND = "BatchToSpaceND"; + var Bincount = "Bincount"; + var BroadcastTo = "BroadcastTo"; + var BroadcastArgs = "BroadcastArgs"; + var Cast = "Cast"; + var Ceil = "Ceil"; + var ClipByValue = "ClipByValue"; + var Complex = "Complex"; + var ComplexAbs = "ComplexAbs"; + var Concat = "Concat"; + var Conv2D = "Conv2D"; + var Conv2DBackpropFilter = "Conv2DBackpropFilter"; + var Conv2DBackpropInput = "Conv2DBackpropInput"; + var Conv3D = "Conv3D"; + var Conv3DBackpropFilterV2 = "Conv3DBackpropFilterV2"; + var Conv3DBackpropInputV2 = "Conv3DBackpropInputV2"; + var Cos = "Cos"; + var Cosh = "Cosh"; + var Cumprod = "Cumprod"; + var Cumsum = "Cumsum"; + var CropAndResize = "CropAndResize"; + var DenseBincount = "DenseBincount"; + var DepthToSpace = "DepthToSpace"; + var DepthwiseConv2dNative = "DepthwiseConv2dNative"; + var DepthwiseConv2dNativeBackpropFilter = "DepthwiseConv2dNativeBackpropFilter"; + var DepthwiseConv2dNativeBackpropInput = "DepthwiseConv2dNativeBackpropInput"; + var Diag = "Diag"; + var Dilation2D = "Dilation2D"; + var Dilation2DBackpropInput = "Dilation2DBackpropInput"; + var Dilation2DBackpropFilter = "Dilation2DBackpropFilter"; + var RealDiv = "RealDiv"; + var Einsum = "Einsum"; + var Elu = "Elu"; + var EluGrad = "EluGrad"; + var Erf = "Erf"; + var Equal = "Equal"; + var Exp = "Exp"; + var ExpandDims = "ExpandDims"; + var Expm1 = "Expm1"; + var FFT = "FFT"; + var Fill = "Fill"; + var FlipLeftRight = "FlipLeftRight"; + var Floor = "Floor"; + var FloorDiv = "FloorDiv"; + var FusedBatchNorm = "FusedBatchNorm"; + var GatherV2 = "GatherV2"; + var GatherNd = "GatherNd"; + var Greater = "Greater"; + var GreaterEqual = "GreaterEqual"; + var Identity = "Identity"; + var IFFT = "IFFT"; + var Imag = "Imag"; + var IsFinite = "IsFinite"; + var IsInf = "IsInf"; + var IsNan = "IsNan"; + var LeakyRelu = "LeakyRelu"; + var Less = "Less"; + var LessEqual = "LessEqual"; + var LinSpace = "LinSpace"; + var Log = "Log"; + var Log1p = "Log1p"; + var LogicalAnd = "LogicalAnd"; + var LogicalNot = "LogicalNot"; + var LogicalOr = "LogicalOr"; + var LogicalXor = "LogicalXor"; + var LogSoftmax = "LogSoftmax"; + var LRN = "LRN"; + var LRNGrad = "LRNGrad"; + var Max = "Max"; + var Maximum = "Maximum"; + var MaxPool = "MaxPool"; + var MaxPoolGrad = "MaxPoolGrad"; + var MaxPool3D = "MaxPool3D"; + var MaxPool3DGrad = "MaxPool3DGrad"; + var MaxPoolWithArgmax = "MaxPoolWithArgmax"; + var Mean = "Mean"; + var Min = "Min"; + var Minimum = "Minimum"; + var MirrorPad = "MirrorPad"; + var Mod = "Mod"; + var Multinomial = "Multinomial"; + var Multiply = "Multiply"; + var Neg = "Neg"; + var NotEqual = "NotEqual"; + var NonMaxSuppressionV3 = "NonMaxSuppressionV3"; + var NonMaxSuppressionV4 = "NonMaxSuppressionV4"; + var NonMaxSuppressionV5 = "NonMaxSuppressionV5"; + var OnesLike = "OnesLike"; + var OneHot = "OneHot"; + var Pack = "Pack"; + var PadV2 = "PadV2"; + var Pow = "Pow"; + var Prelu = "Prelu"; + var Prod = "Prod"; + var Range = "Range"; + var Real = "Real"; + var Reciprocal = "Reciprocal"; + var Relu = "Relu"; + var Reshape = "Reshape"; + var ResizeNearestNeighbor = "ResizeNearestNeighbor"; + var ResizeNearestNeighborGrad = "ResizeNearestNeighborGrad"; + var ResizeBilinear = "ResizeBilinear"; + var ResizeBilinearGrad = "ResizeBilinearGrad"; + var Relu6 = "Relu6"; + var Reverse = "Reverse"; + var Round = "Round"; + var Rsqrt = "Rsqrt"; + var ScatterNd = "ScatterNd"; + var SearchSorted = "SearchSorted"; + var Select = "Select"; + var Selu = "Selu"; + var Slice = "Slice"; + var Sin = "Sin"; + var Sinh = "Sinh"; + var Sign = "Sign"; + var Sigmoid = "Sigmoid"; + var Softplus = "Softplus"; + var Sqrt = "Sqrt"; + var Sum = "Sum"; + var SpaceToBatchND = "SpaceToBatchND"; + var SplitV = "SplitV"; + var Softmax = "Softmax"; + var SparseFillEmptyRows = "SparseFillEmptyRows"; + var SparseReshape = "SparseReshape"; + var SparseSegmentMean = "SparseSegmentMean"; + var SparseSegmentSum = "SparseSegmentSum"; + var SparseToDense = "SparseToDense"; + var SquaredDifference = "SquaredDifference"; + var Square = "Square"; + var StridedSlice = "StridedSlice"; + var StringNGrams = "StringNGrams"; + var StringSplit = "StringSplit"; + var StringToHashBucketFast = "StringToHashBucketFast"; + var Sub = "Sub"; + var Tan = "Tan"; + var Tanh = "Tanh"; + var Tile = "Tile"; + var TopK = "TopK"; + var Transform = "Transform"; + var Transpose = "Transpose"; + var Unique = "Unique"; + var Unpack = "Unpack"; + var UnsortedSegmentSum = "UnsortedSegmentSum"; + var ZerosLike = "ZerosLike"; + var Step = "Step"; + var FromPixels = "FromPixels"; + var RotateWithOffset = "RotateWithOffset"; + var _FusedMatMul = "_FusedMatMul"; + var FusedConv2D = "FusedConv2D"; + var FusedDepthwiseConv2D = "FusedDepthwiseConv2D"; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/kernel_registry.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/log.js + init_define_BUILD_VERSION(); + function warn(...msg) { + if (!(env().getBool("IS_TEST") || env().getBool("PROD"))) { + console.warn(...msg); + } + } + function log(...msg) { + if (!(env().getBool("IS_TEST") || env().getBool("PROD"))) { + console.log(...msg); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/kernel_registry.js + var kernelRegistry = getGlobal("kernelRegistry", () => /* @__PURE__ */ new Map()); + var gradRegistry = getGlobal("gradRegistry", () => /* @__PURE__ */ new Map()); + function getKernel(kernelName, backendName) { + const key = makeKey(kernelName, backendName); + return kernelRegistry.get(key); + } + function getGradient(kernelName) { + return gradRegistry.get(kernelName); + } + function getKernelsForBackend(backendName) { + const it = kernelRegistry.entries(); + const result = []; + while (true) { + const { done, value } = it.next(); + if (done) { + break; + } + const [key, config] = value; + const [backend2] = key.split("_"); + if (backend2 === backendName) { + result.push(config); + } + } + return result; + } + function registerKernel(config) { + const { kernelName, backendName } = config; + const key = makeKey(kernelName, backendName); + if (kernelRegistry.has(key)) { + warn(`The kernel '${kernelName}' for backend '${backendName}' is already registered`); + } + kernelRegistry.set(key, config); + } + function registerGradient(config) { + const { kernelName } = config; + if (gradRegistry.has(kernelName)) { + if (env().getBool("DEBUG")) { + warn(`Overriding the gradient for '${kernelName}'`); + } + } + gradRegistry.set(kernelName, config); + } + function makeKey(kernelName, backendName) { + return `${backendName}_${kernelName}`; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/profiler.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/util.js + var util_exports = {}; + __export(util_exports, { + arraysEqual: () => arraysEqual, + assert: () => assert, + assertNonNegativeIntegerDimensions: () => assertNonNegativeIntegerDimensions, + assertNonNull: () => assertNonNull, + assertShapesMatch: () => assertShapesMatch, + bytesFromStringArray: () => bytesFromStringArray, + bytesPerElement: () => bytesPerElement, + checkConversionForErrors: () => checkConversionForErrors, + clamp: () => clamp, + computeStrides: () => computeStrides, + createScalarValue: () => createScalarValue, + createShuffledIndices: () => createShuffledIndices, + decodeString: () => decodeString, + distSquared: () => distSquared, + encodeString: () => encodeString, + fetch: () => fetch3, + fingerPrint64: () => fingerPrint64, + flatten: () => flatten, + getArrayFromDType: () => getArrayFromDType, + getTypedArrayFromDType: () => getTypedArrayFromDType, + hasEncodingLoss: () => hasEncodingLoss, + hexToLong: () => hexToLong, + indexToLoc: () => indexToLoc, + inferDtype: () => inferDtype, + inferFromImplicitShape: () => inferFromImplicitShape, + isBoolean: () => isBoolean, + isFunction: () => isFunction, + isInt: () => isInt, + isNumber: () => isNumber, + isPromise: () => isPromise, + isScalarShape: () => isScalarShape, + isString: () => isString, + isTypedArray: () => isTypedArray, + isValidDtype: () => isValidDtype, + locToIndex: () => locToIndex, + makeOnesTypedArray: () => makeOnesTypedArray, + makeZerosNestedTypedArray: () => makeZerosNestedTypedArray, + makeZerosTypedArray: () => makeZerosTypedArray, + nearestDivisor: () => nearestDivisor, + nearestLargerEven: () => nearestLargerEven, + now: () => now, + parseAxisParam: () => parseAxisParam, + randUniform: () => randUniform, + repeatedTry: () => repeatedTry, + rightPad: () => rightPad, + shuffle: () => shuffle, + shuffleCombo: () => shuffleCombo, + sizeFromShape: () => sizeFromShape, + sizeToSquarishShape: () => sizeToSquarishShape, + squeezeShape: () => squeezeShape, + sum: () => sum, + swap: () => swap, + tanh: () => tanh, + toNestedArray: () => toNestedArray, + toTypedArray: () => toTypedArray + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/hash_util.js + init_define_BUILD_VERSION(); + var LongExports = __toESM(require_long()); + var Long = LongExports.default || LongExports; + function hexToLong(hex) { + return Long.fromString(hex, true, 16); + } + var k0 = hexToLong("c3a5c85c97cb3127"); + var k1 = hexToLong("b492b66fbe98f273"); + var k2 = hexToLong("9ae16a3b2f90404f"); + function shiftMix(val) { + return val.xor(val.shru(47)); + } + function fetch2(s, offset, numBytes) { + const bytes = s.slice(offset, offset + numBytes); + return Long.fromBytes(Array.from(bytes), true, true); + } + function fetch64(s, offset) { + return fetch2(s, offset, 8); + } + function fetch32(s, offset) { + return fetch2(s, offset, 4); + } + function rotate64(val, shift) { + return shift === 0 ? val : val.shru(shift).or(val.shl(64 - shift)); + } + function hashLen16(u, v, mul2 = hexToLong("9ddfea08eb382d69")) { + let a = u.xor(v).mul(mul2); + a = a.xor(a.shru(47)); + let b = v.xor(a).mul(mul2); + b = b.xor(b.shru(47)); + b = b.mul(mul2); + return b; + } + function weakHashLen32WithSeeds(w, x, y, z, a, b) { + a = a.add(w); + b = rotate64(b.add(a).add(z), 21); + const c = a; + a = a.add(x); + a = a.add(y); + b = b.add(rotate64(a, 44)); + return [a.add(z), b.add(c)]; + } + function weakHashLen32WithSeedsStr(s, offset, a, b) { + return weakHashLen32WithSeeds(fetch64(s, offset), fetch64(s, offset + 8), fetch64(s, offset + 16), fetch64(s, offset + 24), a, b); + } + function hashLen0to16(s, len = s.length) { + if (len >= 8) { + const mul2 = k2.add(len * 2); + const a = fetch64(s, 0).add(k2); + const b = fetch64(s, len - 8); + const c = rotate64(b, 37).mul(mul2).add(a); + const d = rotate64(a, 25).add(b).mul(mul2); + return hashLen16(c, d, mul2); + } + if (len >= 4) { + const mul2 = k2.add(len * 2); + const a = fetch32(s, 0); + return hashLen16(a.shl(3).add(len), fetch32(s, len - 4), mul2); + } + if (len > 0) { + const a = s[0]; + const b = s[len >> 1]; + const c = s[len - 1]; + const y = a + (b << 8); + const z = len + (c << 2); + return shiftMix(k2.mul(y).xor(k0.mul(z))).mul(k2); + } + return k2; + } + function hashLen17to32(s, len = s.length) { + const mul2 = k2.add(len * 2); + const a = fetch64(s, 0).mul(k1); + const b = fetch64(s, 8); + const c = fetch64(s, len - 8).mul(mul2); + const d = fetch64(s, len - 16).mul(k2); + return hashLen16(rotate64(a.add(b), 43).add(rotate64(c, 30)).add(d), a.add(rotate64(b.add(k2), 18)).add(c), mul2); + } + function hashLen33to64(s, len = s.length) { + const mul2 = k2.add(len * 2); + const a = fetch64(s, 0).mul(k2); + const b = fetch64(s, 8); + const c = fetch64(s, len - 8).mul(mul2); + const d = fetch64(s, len - 16).mul(k2); + const y = rotate64(a.add(b), 43).add(rotate64(c, 30)).add(d); + const z = hashLen16(y, a.add(rotate64(b.add(k2), 18)).add(c), mul2); + const e = fetch64(s, 16).mul(mul2); + const f = fetch64(s, 24); + const g = y.add(fetch64(s, len - 32)).mul(mul2); + const h = z.add(fetch64(s, len - 24)).mul(mul2); + return hashLen16(rotate64(e.add(f), 43).add(rotate64(g, 30)).add(h), e.add(rotate64(f.add(a), 18)).add(g), mul2); + } + function fingerPrint64(s, len = s.length) { + const seed = Long.fromNumber(81, true); + if (len <= 32) { + if (len <= 16) { + return hashLen0to16(s, len); + } else { + return hashLen17to32(s, len); + } + } else if (len <= 64) { + return hashLen33to64(s, len); + } + let x = seed; + let y = seed.mul(k1).add(113); + let z = shiftMix(y.mul(k2).add(113)).mul(k2); + let v = [Long.UZERO, Long.UZERO]; + let w = [Long.UZERO, Long.UZERO]; + x = x.mul(k2).add(fetch64(s, 0)); + let offset = 0; + const end = (len - 1 >> 6) * 64; + const last64 = end + (len - 1 & 63) - 63; + do { + x = rotate64(x.add(y).add(v[0]).add(fetch64(s, offset + 8)), 37).mul(k1); + y = rotate64(y.add(v[1]).add(fetch64(s, offset + 48)), 42).mul(k1); + x = x.xor(w[1]); + y = y.add(v[0]).add(fetch64(s, offset + 40)); + z = rotate64(z.add(w[0]), 33).mul(k1); + v = weakHashLen32WithSeedsStr(s, offset, v[1].mul(k1), x.add(w[0])); + w = weakHashLen32WithSeedsStr(s, offset + 32, z.add(w[1]), y.add(fetch64(s, offset + 16))); + [z, x] = [x, z]; + offset += 64; + } while (offset !== end); + const mul2 = k1.add(z.and(255).shl(1)); + offset = last64; + w[0] = w[0].add(len - 1 & 63); + v[0] = v[0].add(w[0]); + w[0] = w[0].add(v[0]); + x = rotate64(x.add(y).add(v[0]).add(fetch64(s, offset + 8)), 37).mul(mul2); + y = rotate64(y.add(v[1]).add(fetch64(s, offset + 48)), 42).mul(mul2); + x = x.xor(w[1].mul(9)); + y = y.add(v[0].mul(9).add(fetch64(s, offset + 40))); + z = rotate64(z.add(w[0]), 33).mul(mul2); + v = weakHashLen32WithSeedsStr(s, offset, v[1].mul(mul2), x.add(w[0])); + w = weakHashLen32WithSeedsStr(s, offset + 32, z.add(w[1]), y.add(fetch64(s, offset + 16))); + [z, x] = [x, z]; + return hashLen16(hashLen16(v[0], w[0], mul2).add(shiftMix(y).mul(k0)).add(z), hashLen16(v[1], w[1], mul2).add(x), mul2); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/util.js + function createScalarValue(value, dtype) { + if (dtype === "string") { + return encodeString(value); + } + return toTypedArray([value], dtype); + } + function noConversionNeeded(a, dtype) { + return a instanceof Float32Array && dtype === "float32" || a instanceof Int32Array && dtype === "int32" || a instanceof Uint8Array && dtype === "bool"; + } + function toTypedArray(a, dtype) { + if (dtype === "string") { + throw new Error("Cannot convert a string[] to a TypedArray"); + } + if (Array.isArray(a)) { + a = flatten(a); + } + if (env().getBool("DEBUG")) { + checkConversionForErrors(a, dtype); + } + if (noConversionNeeded(a, dtype)) { + return a; + } + if (dtype == null || dtype === "float32" || dtype === "complex64") { + return new Float32Array(a); + } else if (dtype === "int32") { + return new Int32Array(a); + } else if (dtype === "bool") { + const bool = new Uint8Array(a.length); + for (let i = 0; i < bool.length; ++i) { + if (Math.round(a[i]) !== 0) { + bool[i] = 1; + } + } + return bool; + } else { + throw new Error(`Unknown data type ${dtype}`); + } + } + function now() { + return env().platform.now(); + } + function fetch3(path, requestInits) { + return env().platform.fetch(path, requestInits); + } + function encodeString(s, encoding = "utf-8") { + encoding = encoding || "utf-8"; + return env().platform.encode(s, encoding); + } + function decodeString(bytes, encoding = "utf-8") { + encoding = encoding || "utf-8"; + return env().platform.decode(bytes, encoding); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/profiler.js + var Profiler = class { + constructor(backendTimer, logger) { + this.backendTimer = backendTimer; + this.logger = logger; + if (logger == null) { + this.logger = new Logger(); + } + } + profileKernel(kernelName, inputs, f) { + let outputs; + const holdResultWrapperFn = () => { + outputs = f(); + }; + let timer; + const start = now(); + if (this.backendTimer.timerAvailable()) { + timer = this.backendTimer.time(holdResultWrapperFn); + } else { + holdResultWrapperFn(); + for (const output of outputs) { + output.dataSync(); + } + timer = Promise.resolve({ kernelMs: now() - start }); + } + if (env().getBool("CHECK_COMPUTATION_FOR_ERRORS")) { + for (let i = 0; i < outputs.length; i++) { + const output = outputs[i]; + output.data().then((tensorVals) => { + checkComputationForErrors(tensorVals, output.dtype, kernelName); + }); + } + } + const kernelProfile = { + kernelName, + outputs, + inputs, + timeMs: timer.then((timing) => timing.kernelMs), + extraInfo: timer.then((timing) => timing.getExtraProfileInfo != null ? timing.getExtraProfileInfo() : "") + }; + return kernelProfile; + } + logKernelProfile(kernelProfile) { + const { kernelName, outputs, timeMs, inputs, extraInfo } = kernelProfile; + outputs.forEach((result) => { + Promise.all([result.data(), timeMs, extraInfo]).then((valueContainer) => { + this.logger.logKernelProfile(kernelName, result, valueContainer[0], valueContainer[1], inputs, valueContainer[2]); + }); + }); + } + }; + function checkComputationForErrors(vals, dtype, kernelName) { + if (dtype !== "float32") { + return false; + } + for (let i = 0; i < vals.length; i++) { + const num = vals[i]; + if (isNaN(num) || !isFinite(num)) { + console.warn(`Found ${num} in the result of '${kernelName}'`); + return true; + } + } + return false; + } + var Logger = class { + logKernelProfile(name, result, vals, timeMs, inputs, extraInfo) { + const time = typeof timeMs === "number" ? rightPad(`${timeMs}ms`, 9) : timeMs["error"]; + const paddedName = rightPad(name, 25); + const rank = result.rank; + const size = result.size; + const shape = rightPad(result.shape.toString(), 14); + let inputShapesDescription = ""; + for (const name2 in inputs) { + const input2 = inputs[name2]; + if (input2 != null) { + const inputShape = input2.shape || result.shape; + const inputRank = inputShape.length; + inputShapesDescription += `${name2}: ${inputRank}D ${inputRank > 0 ? inputShape : ""} `; + } + } + console.log(`%c${paddedName} %c${time} %c${rank}D ${shape} %c${size} %c${inputShapesDescription} %c${extraInfo}`, "font-weight:bold", "color:red", "color:blue", "color: orange", "color: green", "color: steelblue"); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tape.js + init_define_BUILD_VERSION(); + function getFilteredNodesXToY(tape, xs, y) { + const tensorsFromX = {}; + const nodesFromX = {}; + for (let i = 0; i < xs.length; i++) { + tensorsFromX[xs[i].id] = true; + } + for (let i = 0; i < tape.length; i++) { + const node = tape[i]; + const nodeInputs = node.inputs; + for (const inputName in nodeInputs) { + const input2 = nodeInputs[inputName]; + let anyInputFromX = false; + for (let j = 0; j < xs.length; j++) { + if (tensorsFromX[input2.id]) { + node.outputs.forEach((output) => tensorsFromX[output.id] = true); + anyInputFromX = true; + nodesFromX[node.id] = true; + break; + } + } + if (anyInputFromX) { + break; + } + } + } + const tensorsLeadToY = {}; + tensorsLeadToY[y.id] = true; + const nodesToY = {}; + for (let i = tape.length - 1; i >= 0; i--) { + const node = tape[i]; + const nodeInputs = node.inputs; + for (let j = 0; j < node.outputs.length; j++) { + if (tensorsLeadToY[node.outputs[j].id]) { + for (const inputName in nodeInputs) { + tensorsLeadToY[nodeInputs[inputName].id] = true; + nodesToY[node.id] = true; + } + break; + } + } + } + const filteredTape = []; + for (let i = 0; i < tape.length; i++) { + const node = tape[i]; + if (nodesFromX[node.id] && nodesToY[node.id]) { + const prunedInputs = {}; + for (const inputName in node.inputs) { + const nodeInput = node.inputs[inputName]; + if (tensorsFromX[nodeInput.id]) { + prunedInputs[inputName] = nodeInput; + } + } + const prunedNode = Object.assign({}, node); + prunedNode.inputs = prunedInputs; + prunedNode.outputs = node.outputs; + filteredTape.push(prunedNode); + } + } + return filteredTape; + } + function backpropagateGradients(tensorAccumulatedGradientMap, filteredTape, tidy2, add4) { + for (let i = filteredTape.length - 1; i >= 0; i--) { + const node = filteredTape[i]; + const dys = []; + node.outputs.forEach((o) => { + const gradTensor = tensorAccumulatedGradientMap[o.id]; + if (gradTensor != null) { + dys.push(gradTensor); + } else { + dys.push(null); + } + }); + if (node.gradient == null) { + throw new Error(`Cannot compute gradient: gradient function not found for ${node.kernelName}.`); + } + const inputGradients = node.gradient(dys); + for (const inputName in node.inputs) { + if (!(inputName in inputGradients)) { + throw new Error(`Cannot backprop through input ${inputName}. Available gradients found: ${Object.keys(inputGradients)}.`); + } + const dx = tidy2(() => inputGradients[inputName]()); + if (dx.dtype !== "float32") { + throw new Error(`Error in gradient for op ${node.kernelName}. The gradient of input ${inputName} must have 'float32' dtype, but has '${dx.dtype}'`); + } + const x = node.inputs[inputName]; + if (!arraysEqual(dx.shape, x.shape)) { + throw new Error(`Error in gradient for op ${node.kernelName}. The gradient of input '${inputName}' has shape '${dx.shape}', which does not match the shape of the input '${x.shape}'`); + } + if (tensorAccumulatedGradientMap[x.id] == null) { + tensorAccumulatedGradientMap[x.id] = dx; + } else { + const curGradient = tensorAccumulatedGradientMap[x.id]; + tensorAccumulatedGradientMap[x.id] = add4(curGradient, dx); + curGradient.dispose(); + } + } + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor_format.js + init_define_BUILD_VERSION(); + var FORMAT_LIMIT_NUM_VALS = 20; + var FORMAT_NUM_FIRST_LAST_VALS = 3; + var FORMAT_NUM_SIG_DIGITS = 7; + function tensorToString(vals, shape, dtype, verbose) { + const strides = computeStrides(shape); + const padPerCol = computeMaxSizePerColumn(vals, shape, dtype, strides); + const rank = shape.length; + const valsLines = subTensorToString(vals, shape, dtype, strides, padPerCol); + const lines = ["Tensor"]; + if (verbose) { + lines.push(` dtype: ${dtype}`); + lines.push(` rank: ${rank}`); + lines.push(` shape: [${shape}]`); + lines.push(` values:`); + } + lines.push(valsLines.map((l) => " " + l).join("\n")); + return lines.join("\n"); + } + function computeMaxSizePerColumn(vals, shape, dtype, strides) { + const n = sizeFromShape(shape); + const numCols = strides[strides.length - 1]; + const padPerCol = new Array(numCols).fill(0); + const rank = shape.length; + const valuesOrTuples = dtype === "complex64" ? createComplexTuples(vals) : vals; + if (rank > 1) { + for (let row = 0; row < n / numCols; row++) { + const offset = row * numCols; + for (let j = 0; j < numCols; j++) { + padPerCol[j] = Math.max(padPerCol[j], valToString(valuesOrTuples[offset + j], 0, dtype).length); + } + } + } + return padPerCol; + } + function valToString(val, pad3, dtype) { + let valStr; + if (Array.isArray(val)) { + valStr = `${parseFloat(val[0].toFixed(FORMAT_NUM_SIG_DIGITS))} + ${parseFloat(val[1].toFixed(FORMAT_NUM_SIG_DIGITS))}j`; + } else if (isString(val)) { + valStr = `'${val}'`; + } else if (dtype === "bool") { + valStr = boolNumToString(val); + } else { + valStr = parseFloat(val.toFixed(FORMAT_NUM_SIG_DIGITS)).toString(); + } + return rightPad(valStr, pad3); + } + function boolNumToString(v) { + return v === 0 ? "false" : "true"; + } + function subTensorToString(vals, shape, dtype, strides, padPerCol, isLast = true) { + const storagePerElement = dtype === "complex64" ? 2 : 1; + const size = shape[0]; + const rank = shape.length; + if (rank === 0) { + if (dtype === "complex64") { + const complexTuple = createComplexTuples(vals); + return [valToString(complexTuple[0], 0, dtype)]; + } + if (dtype === "bool") { + return [boolNumToString(vals[0])]; + } + return [vals[0].toString()]; + } + if (rank === 1) { + if (size > FORMAT_LIMIT_NUM_VALS) { + const firstValsSize = FORMAT_NUM_FIRST_LAST_VALS * storagePerElement; + let firstVals = Array.from(vals.slice(0, firstValsSize)); + let lastVals = Array.from(vals.slice((size - FORMAT_NUM_FIRST_LAST_VALS) * storagePerElement, size * storagePerElement)); + if (dtype === "complex64") { + firstVals = createComplexTuples(firstVals); + lastVals = createComplexTuples(lastVals); + } + return [ + "[" + firstVals.map((x, i) => valToString(x, padPerCol[i], dtype)).join(", ") + ", ..., " + lastVals.map((x, i) => valToString(x, padPerCol[size - FORMAT_NUM_FIRST_LAST_VALS + i], dtype)).join(", ") + "]" + ]; + } + const displayVals = dtype === "complex64" ? createComplexTuples(vals) : Array.from(vals); + return [ + "[" + displayVals.map((x, i) => valToString(x, padPerCol[i], dtype)).join(", ") + "]" + ]; + } + const subshape = shape.slice(1); + const substrides = strides.slice(1); + const stride = strides[0] * storagePerElement; + const lines = []; + if (size > FORMAT_LIMIT_NUM_VALS) { + for (let i = 0; i < FORMAT_NUM_FIRST_LAST_VALS; i++) { + const start = i * stride; + const end = start + stride; + lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, false)); + } + lines.push("..."); + for (let i = size - FORMAT_NUM_FIRST_LAST_VALS; i < size; i++) { + const start = i * stride; + const end = start + stride; + lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, i === size - 1)); + } + } else { + for (let i = 0; i < size; i++) { + const start = i * stride; + const end = start + stride; + lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, i === size - 1)); + } + } + const sep = rank === 2 ? "," : ""; + lines[0] = "[" + lines[0] + sep; + for (let i = 1; i < lines.length - 1; i++) { + lines[i] = " " + lines[i] + sep; + } + let newLineSep = ",\n"; + for (let i = 2; i < rank; i++) { + newLineSep += "\n"; + } + lines[lines.length - 1] = " " + lines[lines.length - 1] + "]" + (isLast ? "" : newLineSep); + return lines; + } + function createComplexTuples(vals) { + const complexTuples = []; + for (let i = 0; i < vals.length; i += 2) { + complexTuples.push([vals[i], vals[i + 1]]); + } + return complexTuples; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor.js + var TensorBuffer = class { + constructor(shape, dtype, values) { + this.dtype = dtype; + this.shape = shape.slice(); + this.size = sizeFromShape(shape); + if (values != null) { + const n = values.length; + assert(n === this.size, () => `Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`); + } + if (dtype === "complex64") { + throw new Error(`complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).`); + } + this.values = values || getArrayFromDType(dtype, this.size); + this.strides = computeStrides(shape); + } + set(value, ...locs) { + if (locs.length === 0) { + locs = [0]; + } + assert(locs.length === this.rank, () => `The number of provided coordinates (${locs.length}) must match the rank (${this.rank})`); + const index = this.locToIndex(locs); + this.values[index] = value; + } + get(...locs) { + if (locs.length === 0) { + locs = [0]; + } + let i = 0; + for (const loc of locs) { + if (loc < 0 || loc >= this.shape[i]) { + const msg = `Requested out of range element at ${locs}. Buffer shape=${this.shape}`; + throw new Error(msg); + } + i++; + } + let index = locs[locs.length - 1]; + for (let i2 = 0; i2 < locs.length - 1; ++i2) { + index += this.strides[i2] * locs[i2]; + } + return this.values[index]; + } + locToIndex(locs) { + if (this.rank === 0) { + return 0; + } else if (this.rank === 1) { + return locs[0]; + } + let index = locs[locs.length - 1]; + for (let i = 0; i < locs.length - 1; ++i) { + index += this.strides[i] * locs[i]; + } + return index; + } + indexToLoc(index) { + if (this.rank === 0) { + return []; + } else if (this.rank === 1) { + return [index]; + } + const locs = new Array(this.shape.length); + for (let i = 0; i < locs.length - 1; ++i) { + locs[i] = Math.floor(index / this.strides[i]); + index -= locs[i] * this.strides[i]; + } + locs[locs.length - 1] = index; + return locs; + } + get rank() { + return this.shape.length; + } + toTensor() { + return trackerFn().makeTensor(this.values, this.shape, this.dtype); + } + }; + var trackerFn = null; + var opHandler = null; + var deprecationWarningFn = null; + function setTensorTracker(fn) { + trackerFn = fn; + } + function setOpHandler(handler) { + opHandler = handler; + } + function setDeprecationWarningFn(fn) { + deprecationWarningFn = fn; + } + var Tensor = class { + constructor(shape, dtype, dataId, id) { + this.kept = false; + this.isDisposedInternal = false; + this.shape = shape.slice(); + this.dtype = dtype || "float32"; + this.size = sizeFromShape(shape); + this.strides = computeStrides(shape); + this.dataId = dataId; + this.id = id; + this.rankType = this.rank < 5 ? this.rank.toString() : "higher"; + } + get rank() { + return this.shape.length; + } + async buffer() { + const vals = await this.data(); + return opHandler.buffer(this.shape, this.dtype, vals); + } + bufferSync() { + return opHandler.buffer(this.shape, this.dtype, this.dataSync()); + } + async array() { + const vals = await this.data(); + return toNestedArray(this.shape, vals, this.dtype === "complex64"); + } + arraySync() { + return toNestedArray(this.shape, this.dataSync(), this.dtype === "complex64"); + } + async data() { + this.throwIfDisposed(); + const data = trackerFn().read(this.dataId); + if (this.dtype === "string") { + const bytes = await data; + try { + return bytes.map((b) => decodeString(b)); + } catch (_a) { + throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); + } + } + return data; + } + dataToGPU(options) { + this.throwIfDisposed(); + return trackerFn().readToGPU(this.dataId, options); + } + dataSync() { + this.throwIfDisposed(); + const data = trackerFn().readSync(this.dataId); + if (this.dtype === "string") { + try { + return data.map((b) => decodeString(b)); + } catch (_a) { + throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); + } + } + return data; + } + async bytes() { + this.throwIfDisposed(); + const data = await trackerFn().read(this.dataId); + if (this.dtype === "string") { + return data; + } else { + return new Uint8Array(data.buffer); + } + } + dispose() { + if (this.isDisposed) { + return; + } + trackerFn().disposeTensor(this); + this.isDisposedInternal = true; + } + get isDisposed() { + return this.isDisposedInternal; + } + throwIfDisposed() { + if (this.isDisposed) { + throw new Error(`Tensor is disposed.`); + } + } + print(verbose = false) { + return opHandler.print(this, verbose); + } + clone() { + this.throwIfDisposed(); + return opHandler.clone(this); + } + toString(verbose = false) { + const vals = this.dataSync(); + return tensorToString(vals, this.shape, this.dtype, verbose); + } + cast(dtype) { + this.throwIfDisposed(); + return opHandler.cast(this, dtype); + } + variable(trainable = true, name, dtype) { + this.throwIfDisposed(); + return trackerFn().makeVariable(this, trainable, name, dtype); + } + }; + Object.defineProperty(Tensor, Symbol.hasInstance, { + value: (instance) => { + return !!instance && instance.data != null && instance.dataSync != null && instance.throwIfDisposed != null; + } + }); + function getGlobalTensorClass() { + return getGlobal("Tensor", () => { + return Tensor; + }); + } + getGlobalTensorClass(); + var Variable = class extends Tensor { + constructor(initialValue, trainable, name, tensorId) { + super(initialValue.shape, initialValue.dtype, initialValue.dataId, tensorId); + this.trainable = trainable; + this.name = name; + } + assign(newValue) { + if (newValue.dtype !== this.dtype) { + throw new Error(`dtype of the new value (${newValue.dtype}) and previous value (${this.dtype}) must match`); + } + if (!arraysEqual(newValue.shape, this.shape)) { + throw new Error(`shape of the new value (${newValue.shape}) and previous value (${this.shape}) must match`); + } + trackerFn().disposeTensor(this); + this.dataId = newValue.dataId; + trackerFn().incRef(this, null); + } + dispose() { + trackerFn().disposeVariable(this); + this.isDisposedInternal = true; + } + }; + Object.defineProperty(Variable, Symbol.hasInstance, { + value: (instance) => { + return instance instanceof Tensor && instance.assign != null && instance.assign instanceof Function; + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor_util.js + var tensor_util_exports = {}; + __export(tensor_util_exports, { + assertTypesMatch: () => assertTypesMatch, + getTensorsInContainer: () => getTensorsInContainer, + isTensorInList: () => isTensorInList, + makeTypesMatch: () => makeTypesMatch + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/types.js + init_define_BUILD_VERSION(); + var Rank; + (function(Rank2) { + Rank2["R0"] = "R0"; + Rank2["R1"] = "R1"; + Rank2["R2"] = "R2"; + Rank2["R3"] = "R3"; + Rank2["R4"] = "R4"; + Rank2["R5"] = "R5"; + Rank2["R6"] = "R6"; + })(Rank || (Rank = {})); + var UpcastInt32AndMap; + (function(UpcastInt32AndMap2) { + UpcastInt32AndMap2["float32"] = "float32"; + UpcastInt32AndMap2["int32"] = "int32"; + UpcastInt32AndMap2["bool"] = "int32"; + UpcastInt32AndMap2["complex64"] = "complex64"; + })(UpcastInt32AndMap || (UpcastInt32AndMap = {})); + var UpcastBoolAndMap; + (function(UpcastBoolAndMap2) { + UpcastBoolAndMap2["float32"] = "float32"; + UpcastBoolAndMap2["int32"] = "int32"; + UpcastBoolAndMap2["bool"] = "bool"; + UpcastBoolAndMap2["complex64"] = "complex64"; + })(UpcastBoolAndMap || (UpcastBoolAndMap = {})); + var UpcastFloat32AndMap; + (function(UpcastFloat32AndMap2) { + UpcastFloat32AndMap2["float32"] = "float32"; + UpcastFloat32AndMap2["int32"] = "float32"; + UpcastFloat32AndMap2["bool"] = "float32"; + UpcastFloat32AndMap2["complex64"] = "complex64"; + })(UpcastFloat32AndMap || (UpcastFloat32AndMap = {})); + var UpcastComplex64AndMap; + (function(UpcastComplex64AndMap2) { + UpcastComplex64AndMap2["float32"] = "complex64"; + UpcastComplex64AndMap2["int32"] = "complex64"; + UpcastComplex64AndMap2["bool"] = "complex64"; + UpcastComplex64AndMap2["complex64"] = "complex64"; + })(UpcastComplex64AndMap || (UpcastComplex64AndMap = {})); + var upcastTypeMap = { + "float32": UpcastFloat32AndMap, + "int32": UpcastInt32AndMap, + "bool": UpcastBoolAndMap, + "complex64": UpcastComplex64AndMap + }; + function upcastType(typeA, typeB) { + if (typeA === "string" || typeB === "string") { + if (typeA === "string" && typeB === "string") { + return "string"; + } + throw new Error(`Can not upcast ${typeA} with ${typeB}`); + } + return upcastTypeMap[typeA][typeB]; + } + function sumOutType(type) { + return upcastType(type, "int32"); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor_util.js + function makeTypesMatch(a, b) { + if (a.dtype === b.dtype) { + return [a, b]; + } + const dtype = upcastType(a.dtype, b.dtype); + return [a.cast(dtype), b.cast(dtype)]; + } + function assertTypesMatch(a, b) { + assert(a.dtype === b.dtype, () => `The dtypes of the first(${a.dtype}) and second(${b.dtype}) input must match`); + } + function isTensorInList(tensor2, tensorList) { + return tensorList.some((x) => x.id === tensor2.id); + } + function getTensorsInContainer(result) { + const list = []; + const seen = /* @__PURE__ */ new Set(); + walkTensorContainer(result, list, seen); + return list; + } + function walkTensorContainer(container, list, seen) { + if (container == null) { + return; + } + if (container instanceof Tensor) { + list.push(container); + return; + } + if (!isIterable(container)) { + return; + } + const iterable = container; + for (const k in iterable) { + const val = iterable[k]; + if (!seen.has(val)) { + seen.add(val); + walkTensorContainer(val, list, seen); + } + } + } + function isIterable(obj) { + return Array.isArray(obj) || typeof obj === "object"; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/engine.js + function isRegisteredKernelInvocation(kernelInvocation) { + return kernelInvocation.kernelName != null; + } + var EngineState = class { + constructor() { + this.registeredVariables = {}; + this.nextTapeNodeId = 0; + this.numBytes = 0; + this.numTensors = 0; + this.numStringTensors = 0; + this.numDataBuffers = 0; + this.gradientDepth = 0; + this.kernelDepth = 0; + this.scopeStack = []; + this.numDataMovesStack = []; + this.nextScopeId = 0; + this.tensorInfo = /* @__PURE__ */ new WeakMap(); + this.profiling = false; + this.activeProfile = { + newBytes: 0, + newTensors: 0, + peakBytes: 0, + kernels: [], + result: null, + get kernelNames() { + return Array.from(new Set(this.kernels.map((k) => k.name))); + } + }; + } + dispose() { + for (const variableName in this.registeredVariables) { + this.registeredVariables[variableName].dispose(); + } + } + }; + var Engine = class { + constructor(ENV7) { + this.ENV = ENV7; + this.registry = {}; + this.registryFactory = {}; + this.pendingBackendInitId = 0; + this.state = new EngineState(); + } + async ready() { + if (this.pendingBackendInit != null) { + return this.pendingBackendInit.then(() => { + }); + } + if (this.backendInstance != null) { + return; + } + const sortedBackends = this.getSortedBackends(); + for (let i = 0; i < sortedBackends.length; i++) { + const backendName = sortedBackends[i]; + const success = await this.initializeBackend(backendName).success; + if (success) { + await this.setBackend(backendName); + return; + } + } + throw new Error(`Could not initialize any backends, all backend initializations failed.`); + } + get backend() { + if (this.pendingBackendInit != null) { + throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`); + } + if (this.backendInstance == null) { + const { name, asyncInit } = this.initializeBackendsAndReturnBest(); + if (asyncInit) { + throw new Error(`The highest priority backend '${name}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`); + } + this.setBackend(name); + } + return this.backendInstance; + } + backendNames() { + return Object.keys(this.registryFactory); + } + findBackend(backendName) { + if (!(backendName in this.registry)) { + if (backendName in this.registryFactory) { + const { asyncInit } = this.initializeBackend(backendName); + if (asyncInit) { + return null; + } + } else { + return null; + } + } + return this.registry[backendName]; + } + findBackendFactory(backendName) { + if (!(backendName in this.registryFactory)) { + return null; + } + return this.registryFactory[backendName].factory; + } + registerBackend(backendName, factory, priority = 1) { + if (backendName in this.registryFactory) { + warn(`${backendName} backend was already registered. Reusing existing backend factory.`); + return false; + } + this.registryFactory[backendName] = { factory, priority }; + return true; + } + async setBackend(backendName) { + if (this.registryFactory[backendName] == null) { + throw new Error(`Backend name '${backendName}' not found in registry`); + } + this.backendName = backendName; + if (this.registry[backendName] == null) { + this.backendInstance = null; + const { success, asyncInit } = this.initializeBackend(backendName); + const result = asyncInit ? await success : success; + if (!result) { + return false; + } + } + this.backendInstance = this.registry[backendName]; + this.setupRegisteredKernels(); + this.profiler = new Profiler(this.backendInstance); + return true; + } + setupRegisteredKernels() { + const kernels = getKernelsForBackend(this.backendName); + kernels.forEach((kernel) => { + if (kernel.setupFunc != null) { + kernel.setupFunc(this.backendInstance); + } + }); + } + disposeRegisteredKernels(backendName) { + const kernels = getKernelsForBackend(backendName); + kernels.forEach((kernel) => { + if (kernel.disposeFunc != null) { + kernel.disposeFunc(this.registry[backendName]); + } + }); + } + initializeBackend(backendName) { + const registryFactoryEntry = this.registryFactory[backendName]; + if (registryFactoryEntry == null) { + throw new Error(`Cannot initialize backend ${backendName}, no registration found.`); + } + try { + const backend2 = registryFactoryEntry.factory(); + if (backend2 && !(backend2 instanceof KernelBackend) && typeof backend2.then === "function") { + const promiseId = ++this.pendingBackendInitId; + const success = backend2.then((backendInstance) => { + if (promiseId < this.pendingBackendInitId) { + return false; + } + this.registry[backendName] = backendInstance; + this.pendingBackendInit = null; + return true; + }).catch((err) => { + if (promiseId < this.pendingBackendInitId) { + return false; + } + this.pendingBackendInit = null; + warn(`Initialization of backend ${backendName} failed`); + warn(err.stack || err.message); + return false; + }); + this.pendingBackendInit = success; + return { success, asyncInit: true }; + } else { + this.registry[backendName] = backend2; + return { success: true, asyncInit: false }; + } + } catch (err) { + warn(`Initialization of backend ${backendName} failed`); + warn(err.stack || err.message); + return { success: false, asyncInit: false }; + } + } + removeBackend(backendName) { + if (!(backendName in this.registryFactory)) { + throw new Error(`${backendName} backend not found in registry`); + } + if (this.backendName === backendName && this.pendingBackendInit != null) { + this.pendingBackendInitId++; + } + if (backendName in this.registry) { + this.disposeRegisteredKernels(backendName); + this.registry[backendName].dispose(); + delete this.registry[backendName]; + } + delete this.registryFactory[backendName]; + if (this.backendName === backendName) { + this.pendingBackendInit = null; + this.backendName = null; + this.backendInstance = null; + } + } + getSortedBackends() { + if (Object.keys(this.registryFactory).length === 0) { + throw new Error("No backend found in registry."); + } + return Object.keys(this.registryFactory).sort((a, b) => { + return this.registryFactory[b].priority - this.registryFactory[a].priority; + }); + } + initializeBackendsAndReturnBest() { + const sortedBackends = this.getSortedBackends(); + for (let i = 0; i < sortedBackends.length; i++) { + const backendName = sortedBackends[i]; + const { success, asyncInit } = this.initializeBackend(backendName); + if (asyncInit || success) { + return { name: backendName, asyncInit }; + } + } + throw new Error(`Could not initialize any backends, all backend initializations failed.`); + } + moveData(backend2, dataId) { + const info = this.state.tensorInfo.get(dataId); + const srcBackend = info.backend; + const values = this.readSync(dataId); + const refCount = srcBackend.refCount(dataId); + srcBackend.disposeData(dataId, true); + info.backend = backend2; + backend2.move(dataId, values, info.shape, info.dtype, refCount); + if (this.shouldCheckForMemLeaks()) { + this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1]++; + } + } + tidy(nameOrFn, fn) { + let name = null; + if (fn == null) { + if (typeof nameOrFn !== "function") { + throw new Error("Please provide a function to tidy()"); + } + fn = nameOrFn; + } else { + if (typeof nameOrFn !== "string" && !(nameOrFn instanceof String)) { + throw new Error("When calling with two arguments, the first argument to tidy() must be a string"); + } + if (typeof fn !== "function") { + throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function"); + } + name = nameOrFn; + } + let result; + return this.scopedRun(() => this.startScope(name), () => this.endScope(result), () => { + result = fn(); + if (result instanceof Promise) { + console.error("Cannot return a Promise inside of tidy."); + } + return result; + }); + } + scopedRun(start, end, f) { + start(); + try { + const res = f(); + end(); + return res; + } catch (ex) { + end(); + throw ex; + } + } + nextTensorId() { + return Engine.nextTensorId++; + } + nextVariableId() { + return Engine.nextVariableId++; + } + clone(x) { + const y = ENGINE.runKernel(Identity, { x }); + const inputs = { x }; + const grad = (dy) => ({ + x: () => { + const dtype = "float32"; + const gradInputs = { x: dy }; + const attrs = { dtype }; + return ENGINE.runKernel( + Cast, + gradInputs, + attrs + ); + } + }); + const saved = []; + this.addTapeNode(this.state.activeScope.name, inputs, [y], grad, saved, {}); + return y; + } + runKernel(kernelName, inputs, attrs) { + if (this.backendName == null) { + this.backend; + } + const hasKernel = getKernel(kernelName, this.backendName) != null; + if (!hasKernel) { + throw new Error(`Kernel '${kernelName}' not registered for backend '${this.backendName}'`); + } + return this.runKernelFunc({ kernelName, inputs, attrs }); + } + shouldCheckForMemLeaks() { + return this.ENV.getBool("IS_TEST"); + } + checkKernelForMemLeak(kernelName, numDataIdsBefore, outInfos) { + const numDataIdsAfter = this.backend.numDataIds(); + let numOutputDataIds = 0; + outInfos.forEach((info) => { + numOutputDataIds += info.dtype === "complex64" ? 3 : 1; + }); + const numMoves = this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1]; + const dataIdsLeaked = numDataIdsAfter - numDataIdsBefore - numOutputDataIds - numMoves; + if (dataIdsLeaked > 0) { + throw new Error(`Backend '${this.backendName}' has an internal memory leak (${dataIdsLeaked} data ids) after running '${kernelName}'`); + } + } + runKernelFunc(kernelParams) { + let outputs; + let saved = []; + const isTapeOn = this.isTapeOn(); + const startingBytecount = this.state.numBytes; + const startingNumTensors = this.state.numTensors; + if (this.shouldCheckForMemLeaks()) { + this.state.numDataMovesStack.push(0); + } + let kernelFunc3; + if (this.backendName == null) { + this.backend; + } + let out; + const kernelOrScopeName = isRegisteredKernelInvocation(kernelParams) ? kernelParams.kernelName : this.state.activeScope != null ? this.state.activeScope.name : ""; + if (isRegisteredKernelInvocation(kernelParams)) { + const { kernelName, inputs: inputs2, attrs: attrs2 } = kernelParams; + if (this.backendName == null) { + this.backend; + } + const kernel = getKernel(kernelName, this.backendName); + assert(kernel != null, () => `Cannot find registered kernel '${kernelName}' for backend '${this.backendName}'`); + kernelFunc3 = () => { + const numDataIdsBefore = this.backend.numDataIds(); + out = kernel.kernelFunc({ inputs: inputs2, attrs: attrs2, backend: this.backend }); + const outInfos = Array.isArray(out) ? out : [out]; + if (this.shouldCheckForMemLeaks()) { + this.checkKernelForMemLeak(kernelName, numDataIdsBefore, outInfos); + } + const outTensors = outInfos.map((outInfo) => { + if (outInfo.rank != null) { + return outInfo; + } + return this.makeTensorFromTensorInfo(outInfo); + }); + if (isTapeOn) { + const tensorsToSave = this.getTensorsForGradient(kernelName, inputs2, outTensors); + saved = this.saveTensorsForBackwardMode(tensorsToSave); + } + return outTensors; + }; + } else { + const { forwardFunc } = kernelParams; + const saveFunc = (tensors) => { + if (!isTapeOn) { + return; + } + saved = tensors.map((tensor2) => this.keep(this.clone(tensor2))); + }; + kernelFunc3 = () => { + const numDataIdsBefore = this.backend.numDataIds(); + out = this.tidy(() => forwardFunc(this.backend, saveFunc)); + const outs = Array.isArray(out) ? out : [out]; + if (this.shouldCheckForMemLeaks()) { + this.checkKernelForMemLeak(kernelOrScopeName, numDataIdsBefore, outs); + } + return outs; + }; + } + const { inputs, attrs } = kernelParams; + const backwardsFunc = isRegisteredKernelInvocation(kernelParams) ? null : kernelParams.backwardsFunc; + let kernelProfile; + this.scopedRun( + () => this.state.kernelDepth++, + () => this.state.kernelDepth--, + () => { + if (!this.ENV.getBool("DEBUG") && !this.state.profiling) { + outputs = kernelFunc3(); + } else { + kernelProfile = this.profiler.profileKernel(kernelOrScopeName, inputs, () => kernelFunc3()); + if (this.ENV.getBool("DEBUG")) { + this.profiler.logKernelProfile(kernelProfile); + } + outputs = kernelProfile.outputs; + } + } + ); + if (isTapeOn) { + this.addTapeNode(kernelOrScopeName, inputs, outputs, backwardsFunc, saved, attrs); + } + if (this.state.profiling) { + this.state.activeProfile.kernels.push({ + name: kernelOrScopeName, + bytesAdded: this.state.numBytes - startingBytecount, + totalBytesSnapshot: this.state.numBytes, + tensorsAdded: this.state.numTensors - startingNumTensors, + totalTensorsSnapshot: this.state.numTensors, + inputShapes: Object.keys(inputs).map((key) => inputs[key] != null ? inputs[key].shape : null), + outputShapes: outputs.map((item) => item.shape), + kernelTimeMs: kernelProfile.timeMs, + extraInfo: kernelProfile.extraInfo + }); + } + return Array.isArray(out) ? outputs : outputs[0]; + } + saveTensorsForBackwardMode(tensors) { + const saved = tensors.map((tensor2) => this.keep(this.clone(tensor2))); + return saved; + } + getTensorsForGradient(kernelName, inputs, outputs) { + const gradConfig = getGradient(kernelName); + if (gradConfig != null) { + const inputsToSave = gradConfig.inputsToSave || []; + const outputsToSave = gradConfig.outputsToSave || []; + let inputTensorsToSave; + if (gradConfig.saveAllInputs) { + assert(Array.isArray(inputs), () => "saveAllInputs is true, expected inputs to be an array."); + inputTensorsToSave = Object.keys(inputs).map((key) => inputs[key]); + } else { + inputTensorsToSave = inputsToSave.map((inputName) => inputs[inputName]); + } + const outputTensorsToSave = outputs.filter((_, i) => outputsToSave[i]); + return inputTensorsToSave.concat(outputTensorsToSave); + } + return []; + } + makeTensor(values, shape, dtype, backend2) { + if (values == null) { + throw new Error("Values passed to engine.makeTensor() are null"); + } + dtype = dtype || "float32"; + backend2 = backend2 || this.backend; + let backendVals = values; + if (dtype === "string" && isString(values[0])) { + backendVals = values.map((d) => encodeString(d)); + } + const dataId = backend2.write(backendVals, shape, dtype); + const t = new Tensor(shape, dtype, dataId, this.nextTensorId()); + this.trackTensor(t, backend2); + if (dtype === "string") { + const info = this.state.tensorInfo.get(dataId); + const newBytes = bytesFromStringArray(backendVals); + this.state.numBytes += newBytes - info.bytes; + info.bytes = newBytes; + } + return t; + } + makeTensorFromDataId(dataId, shape, dtype, backend2) { + dtype = dtype || "float32"; + const tensorInfo = { dataId, shape, dtype }; + return this.makeTensorFromTensorInfo(tensorInfo, backend2); + } + makeTensorFromTensorInfo(tensorInfo, backend2) { + const { dataId, shape, dtype } = tensorInfo; + const t = new Tensor(shape, dtype, dataId, this.nextTensorId()); + this.trackTensor(t, backend2); + return t; + } + makeVariable(initialValue, trainable = true, name, dtype) { + name = name || this.nextVariableId().toString(); + if (dtype != null && dtype !== initialValue.dtype) { + initialValue = initialValue.cast(dtype); + } + const v = new Variable(initialValue, trainable, name, this.nextTensorId()); + if (this.state.registeredVariables[v.name] != null) { + throw new Error(`Variable with name ${v.name} was already registered`); + } + this.state.registeredVariables[v.name] = v; + this.incRef(v, this.backend); + return v; + } + trackTensor(a, backend2) { + this.state.numTensors++; + if (a.dtype === "string") { + this.state.numStringTensors++; + } + let bytes = 0; + if (a.dtype !== "complex64" && a.dtype !== "string") { + bytes = a.size * bytesPerElement(a.dtype); + } + this.state.numBytes += bytes; + if (!this.state.tensorInfo.has(a.dataId)) { + this.state.numDataBuffers++; + this.state.tensorInfo.set(a.dataId, { + backend: backend2 || this.backend, + dtype: a.dtype, + shape: a.shape, + bytes + }); + } + if (!(a instanceof Variable)) { + this.track(a); + } + } + incRef(a, backend2) { + this.trackTensor(a, backend2); + this.backend.incRef(a.dataId); + } + removeDataId(dataId, backend2) { + if (this.state.tensorInfo.has(dataId) && this.state.tensorInfo.get(dataId).backend === backend2) { + this.state.tensorInfo.delete(dataId); + this.state.numDataBuffers--; + } + } + disposeTensor(a) { + if (!this.state.tensorInfo.has(a.dataId)) { + return; + } + const info = this.state.tensorInfo.get(a.dataId); + this.state.numTensors--; + if (a.dtype === "string") { + this.state.numStringTensors--; + this.state.numBytes -= info.bytes; + } + if (a.dtype !== "complex64" && a.dtype !== "string") { + const bytes = a.size * bytesPerElement(a.dtype); + this.state.numBytes -= bytes; + } + if (info.backend.disposeData(a.dataId)) { + this.removeDataId(a.dataId, info.backend); + } + } + disposeVariables() { + for (const varName in this.state.registeredVariables) { + const v = this.state.registeredVariables[varName]; + this.disposeVariable(v); + } + } + disposeVariable(v) { + this.disposeTensor(v); + if (this.state.registeredVariables[v.name] != null) { + delete this.state.registeredVariables[v.name]; + } + } + memory() { + const info = this.backend.memory(); + info.numTensors = this.state.numTensors; + info.numDataBuffers = this.state.numDataBuffers; + info.numBytes = this.state.numBytes; + if (this.state.numStringTensors > 0) { + info.unreliable = true; + if (info.reasons == null) { + info.reasons = []; + } + info.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)"); + } + return info; + } + async profile(query) { + this.state.profiling = true; + const startBytes = this.state.numBytes; + const startNumTensors = this.state.numTensors; + this.state.activeProfile.kernels = []; + this.state.activeProfile.result = await query(); + this.state.profiling = false; + this.state.activeProfile.peakBytes = Math.max(...this.state.activeProfile.kernels.map((d) => d.totalBytesSnapshot)); + this.state.activeProfile.newBytes = this.state.numBytes - startBytes; + this.state.activeProfile.newTensors = this.state.numTensors - startNumTensors; + for (const kernel of this.state.activeProfile.kernels) { + kernel.kernelTimeMs = await kernel.kernelTimeMs; + kernel.extraInfo = await kernel.extraInfo; + } + return this.state.activeProfile; + } + isTapeOn() { + return this.state.gradientDepth > 0 && this.state.kernelDepth === 0; + } + addTapeNode(kernelName, inputs, outputs, gradientsFunc, saved, attrs) { + const tapeNode = { id: this.state.nextTapeNodeId++, kernelName, inputs, outputs, saved }; + const gradConfig = getGradient(kernelName); + if (gradConfig != null) { + gradientsFunc = gradConfig.gradFunc; + } + if (gradientsFunc != null) { + tapeNode.gradient = (dys) => { + dys = dys.map((dy, i) => { + if (dy == null) { + const output = outputs[i]; + const vals = makeZerosTypedArray(output.size, output.dtype); + return this.makeTensor(vals, output.shape, output.dtype); + } + return dy; + }); + return gradientsFunc(dys.length > 1 ? dys : dys[0], saved, attrs); + }; + } + this.state.activeTape.push(tapeNode); + } + keep(result) { + result.kept = true; + return result; + } + startTape() { + if (this.state.gradientDepth === 0) { + this.state.activeTape = []; + } + this.state.gradientDepth++; + } + endTape() { + this.state.gradientDepth--; + } + startScope(name) { + const scopeInfo = { + track: [], + name: "unnamed scope", + id: this.state.nextScopeId++ + }; + if (name) { + scopeInfo.name = name; + } + this.state.scopeStack.push(scopeInfo); + this.state.activeScope = scopeInfo; + } + endScope(result) { + const tensorsToTrackInParent = getTensorsInContainer(result); + const tensorsToTrackInParentSet = new Set(tensorsToTrackInParent.map((t) => t.id)); + for (let i = 0; i < this.state.activeScope.track.length; i++) { + const tensor2 = this.state.activeScope.track[i]; + if (!tensor2.kept && !tensorsToTrackInParentSet.has(tensor2.id)) { + tensor2.dispose(); + } + } + const oldScope = this.state.scopeStack.pop(); + this.state.activeScope = this.state.scopeStack.length === 0 ? null : this.state.scopeStack[this.state.scopeStack.length - 1]; + tensorsToTrackInParent.forEach((tensor2) => { + if (!tensor2.kept && tensor2.scopeId === oldScope.id) { + this.track(tensor2); + } + }); + } + gradients(f, xs, dy, allowNoGradients = false) { + assert(xs.length > 0, () => "gradients() received an empty list of xs."); + if (dy != null && dy.dtype !== "float32") { + throw new Error(`dy must have 'float32' dtype, but has '${dy.dtype}'`); + } + const y = this.scopedRun(() => this.startTape(), () => this.endTape(), () => this.tidy("forward", f)); + assert(y instanceof Tensor, () => "The result y returned by f() must be a tensor."); + const filteredTape = getFilteredNodesXToY(this.state.activeTape, xs, y); + if (!allowNoGradients && filteredTape.length === 0 && xs.length > 0) { + throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y."); + } + return this.tidy("backward", () => { + const accumulatedGradientMap = {}; + accumulatedGradientMap[y.id] = dy == null ? ones(y.shape) : dy; + backpropagateGradients( + accumulatedGradientMap, + filteredTape, + (f2) => this.tidy(f2), + add + ); + const grads = xs.map((x) => accumulatedGradientMap[x.id]); + if (this.state.gradientDepth === 0) { + this.state.activeTape.forEach((node) => { + for (const tensor2 of node.saved) { + tensor2.dispose(); + } + }); + this.state.activeTape = null; + } + return { value: y, grads }; + }); + } + customGrad(f) { + assert(isFunction(f), () => "The f passed in customGrad(f) must be a function."); + return (...inputs) => { + assert(inputs.every((t) => t instanceof Tensor), () => "The args passed in customGrad(f)(x1, x2,...) must all be tensors"); + let res; + const inputMap = {}; + inputs.forEach((input2, i) => { + inputMap[i] = input2; + }); + const forwardFunc = (_, save) => { + res = f(...[...inputs, save]); + assert(res.value instanceof Tensor, () => "The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"); + assert(isFunction(res.gradFunc), () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."); + return res.value; + }; + const backwardsFunc = (dy, saved) => { + const gradRes = res.gradFunc(dy, saved); + const grads = Array.isArray(gradRes) ? gradRes : [gradRes]; + assert(grads.length === inputs.length, () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."); + assert(grads.every((t) => t instanceof Tensor), () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors."); + const gradMap = {}; + grads.forEach((grad, i) => { + gradMap[i] = () => grad; + }); + return gradMap; + }; + return this.runKernelFunc({ + forwardFunc, + backwardsFunc, + inputs: inputMap + }); + }; + } + readSync(dataId) { + const info = this.state.tensorInfo.get(dataId); + return info.backend.readSync(dataId); + } + read(dataId) { + const info = this.state.tensorInfo.get(dataId); + return info.backend.read(dataId); + } + readToGPU(dataId, options) { + const info = this.state.tensorInfo.get(dataId); + return info.backend.readToGPU(dataId, options); + } + async time(query) { + const start = now(); + const timingInfo = await this.backend.time(query); + timingInfo.wallMs = now() - start; + return timingInfo; + } + track(result) { + if (this.state.activeScope != null) { + result.scopeId = this.state.activeScope.id; + this.state.activeScope.track.push(result); + } + return result; + } + get registeredVariables() { + return this.state.registeredVariables; + } + reset() { + this.pendingBackendInitId++; + this.state.dispose(); + this.ENV.reset(); + this.state = new EngineState(); + for (const backendName in this.registry) { + this.disposeRegisteredKernels(backendName); + this.registry[backendName].dispose(); + delete this.registry[backendName]; + } + this.backendName = null; + this.backendInstance = null; + this.pendingBackendInit = null; + } + }; + Engine.nextTensorId = 0; + Engine.nextVariableId = 0; + function ones(shape) { + const values = makeOnesTypedArray(sizeFromShape(shape), "float32"); + return ENGINE.makeTensor(values, shape, "float32"); + } + function getOrMakeEngine() { + const ns = getGlobalNamespace(); + if (ns._tfengine == null) { + const environment = new Environment(ns); + ns._tfengine = new Engine(environment); + } + setEnvironmentGlobal(ns._tfengine.ENV); + setTensorTracker(() => ns._tfengine); + return ns._tfengine; + } + var ENGINE = getOrMakeEngine(); + function add(a, b) { + const inputs = { a, b }; + return ENGINE.runKernel(Add, inputs); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/flags.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/device_util.js + var device_util_exports = {}; + __export(device_util_exports, { + isBrowser: () => isBrowser, + isMobile: () => isMobile, + mockIsMobile: () => mockIsMobile + }); + init_define_BUILD_VERSION(); + function _isNavigatorDefined() { + return typeof navigator !== "undefined" && navigator != null; + } + var isMobileMockValue; + function mockIsMobile(value) { + isMobileMockValue = value; + } + function isMobile(nav) { + if (isMobileMockValue !== void 0) { + return isMobileMockValue; + } + if (nav || _isNavigatorDefined()) { + if (!nav) { + nav = navigator; + } + if (nav.product === "ReactNative") { + return true; + } + const a = nav.userAgent || nav.vendor || (typeof window !== "undefined" ? window.opera : ""); + if (!a) { + const navAny = nav; + return navAny.userAgentData && navAny.userAgentData.mobile; + } + return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)); + } + return false; + } + function isBrowser() { + return typeof window !== "undefined" && window.document != null || typeof WorkerGlobalScope !== "undefined"; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/flags.js + var ENV2 = env(); + ENV2.registerFlag("DEBUG", () => false, (debugValue) => { + if (debugValue) { + console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance."); + } + }); + ENV2.registerFlag("IS_BROWSER", () => isBrowser()); + ENV2.registerFlag("IS_NODE", () => typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined"); + ENV2.registerFlag("IS_CHROME", () => typeof navigator !== "undefined" && navigator != null && navigator.userAgent != null && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor)); + ENV2.registerFlag("PROD", () => false); + ENV2.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY", () => ENV2.getBool("DEBUG")); + ENV2.registerFlag("DEPRECATION_WARNINGS_ENABLED", () => true); + ENV2.registerFlag("IS_TEST", () => false); + ENV2.registerFlag("CHECK_COMPUTATION_FOR_ERRORS", () => true); + ENV2.registerFlag("WRAP_TO_IMAGEBITMAP", () => false); + ENV2.registerFlag("ENGINE_COMPILE_ONLY", () => false); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/platforms/platform_browser.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/indexed_db.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/io_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/complex.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/tensor_util_env.js + init_define_BUILD_VERSION(); + function inferShape(val, dtype) { + let firstElem = val; + if (isTypedArray(val)) { + return dtype === "string" ? [] : [val.length]; + } + if (!Array.isArray(val)) { + return []; + } + const shape = []; + while (Array.isArray(firstElem) || isTypedArray(firstElem) && dtype !== "string") { + shape.push(firstElem.length); + firstElem = firstElem[0]; + } + if (Array.isArray(val) && env().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")) { + deepAssertShapeConsistency(val, shape, []); + } + return shape; + } + function deepAssertShapeConsistency(val, shape, indices) { + indices = indices || []; + if (!Array.isArray(val) && !isTypedArray(val)) { + assert(shape.length === 0, () => `Element arr[${indices.join("][")}] is a primitive, but should be an array/TypedArray of ${shape[0]} elements`); + return; + } + assert(shape.length > 0, () => `Element arr[${indices.join("][")}] should be a primitive, but is an array of ${val.length} elements`); + assert(val.length === shape[0], () => `Element arr[${indices.join("][")}] should have ${shape[0]} elements, but has ${val.length} elements`); + const subShape = shape.slice(1); + for (let i = 0; i < val.length; ++i) { + deepAssertShapeConsistency(val[i], subShape, indices.concat(i)); + } + } + function assertDtype(expectedDtype, actualDType, argName, functionName) { + if (expectedDtype === "string_or_numeric") { + return; + } + if (expectedDtype == null) { + throw new Error(`Expected dtype cannot be null.`); + } + if (expectedDtype !== "numeric" && expectedDtype !== actualDType || expectedDtype === "numeric" && actualDType === "string") { + throw new Error(`Argument '${argName}' passed to '${functionName}' must be ${expectedDtype} tensor, but got ${actualDType} tensor`); + } + } + function convertToTensor(x, argName, functionName, parseAsDtype = "numeric") { + if (x instanceof Tensor) { + assertDtype(parseAsDtype, x.dtype, argName, functionName); + return x; + } + let inferredDtype = inferDtype(x); + if (inferredDtype !== "string" && ["bool", "int32", "float32"].indexOf(parseAsDtype) >= 0) { + inferredDtype = parseAsDtype; + } + assertDtype(parseAsDtype, inferredDtype, argName, functionName); + if (x == null || !isTypedArray(x) && !Array.isArray(x) && typeof x !== "number" && typeof x !== "boolean" && typeof x !== "string") { + const type = x == null ? "null" : x.constructor.name; + throw new Error(`Argument '${argName}' passed to '${functionName}' must be a Tensor or TensorLike, but got '${type}'`); + } + const inferredShape = inferShape(x, inferredDtype); + if (!isTypedArray(x) && !Array.isArray(x)) { + x = [x]; + } + const skipTypedArray = true; + const values = inferredDtype !== "string" ? toTypedArray(x, inferredDtype) : flatten(x, [], skipTypedArray); + return ENGINE.makeTensor(values, inferredShape, inferredDtype); + } + function convertToTensorArray(arg, argName, functionName, parseAsDtype = "numeric") { + if (!Array.isArray(arg)) { + throw new Error(`Argument ${argName} passed to ${functionName} must be a \`Tensor[]\` or \`TensorLike[]\``); + } + const tensors = arg; + return tensors.map((t, i) => convertToTensor(t, `${argName}[${i}]`, functionName, parseAsDtype)); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/operation.js + init_define_BUILD_VERSION(); + var OP_SCOPE_SUFFIX = "__op"; + function op(f) { + const keys = Object.keys(f); + if (keys.length !== 1) { + throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${keys.length} keys.`); + } + let opName = keys[0]; + const fn = f[opName]; + if (opName.endsWith("_")) { + opName = opName.substring(0, opName.length - 1); + } + opName = opName + OP_SCOPE_SUFFIX; + const f2 = (...args) => { + ENGINE.startScope(opName); + try { + const result = fn(...args); + if (isPromise(result)) { + console.error("Cannot return a Promise inside of tidy."); + } + ENGINE.endScope(result); + return result; + } catch (ex) { + ENGINE.endScope(null); + throw ex; + } + }; + Object.defineProperty(f2, "name", { value: opName, configurable: true }); + return f2; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/complex.js + function complex_(real4, imag4) { + const $real = convertToTensor(real4, "real", "complex"); + const $imag = convertToTensor(imag4, "imag", "complex"); + assertShapesMatch($real.shape, $imag.shape, `real and imag shapes, ${$real.shape} and ${$imag.shape}, must match in call to tf.complex().`); + const inputs = { real: $real, imag: $imag }; + return ENGINE.runKernel(Complex, inputs); + } + var complex = op({ complex_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor_ops_util.js + init_define_BUILD_VERSION(); + function makeTensor(values, shape, inferredShape, dtype) { + if (dtype == null) { + dtype = inferDtype(values); + } + if (dtype === "complex64") { + throw new Error(`Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).`); + } + if (!isTypedArray(values) && !Array.isArray(values) && typeof values !== "number" && typeof values !== "boolean" && typeof values !== "string") { + throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray"); + } + if (shape != null) { + assertNonNegativeIntegerDimensions(shape); + const providedSize = sizeFromShape(shape); + const inferredSize = sizeFromShape(inferredShape); + assert(providedSize === inferredSize, () => `Based on the provided shape, [${shape}], the tensor should have ${providedSize} values but has ${inferredSize}`); + for (let i = 0; i < inferredShape.length; ++i) { + const inferred = inferredShape[i]; + const flatDimsDontMatch = i === inferredShape.length - 1 ? inferred !== sizeFromShape(shape.slice(i)) : true; + assert(inferredShape[i] === shape[i] || !flatDimsDontMatch, () => `Error creating a new Tensor. Inferred shape (${inferredShape}) does not match the provided shape (${shape}). `); + } + } + if (!isTypedArray(values) && !Array.isArray(values)) { + values = [values]; + } + shape = shape || inferredShape; + values = dtype !== "string" ? toTypedArray(values, dtype) : flatten(values, [], true); + return ENGINE.makeTensor(values, shape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor.js + function tensor(values, shape, dtype) { + const inferredShape = inferShape(values, dtype); + return makeTensor(values, shape, inferredShape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/types.js + init_define_BUILD_VERSION(); + var DTYPE_VALUE_SIZE_MAP = { + "float32": 4, + "float16": 2, + "int32": 4, + "uint16": 2, + "uint8": 1, + "bool": 1, + "complex64": 8 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/io_utils.js + var NUM_BYTES_STRING_LENGTH = 4; + async function encodeWeights(tensors, group) { + const specs = []; + const dataPromises = []; + const names = Array.isArray(tensors) ? tensors.map((tensor2) => tensor2.name) : Object.keys(tensors); + for (let i = 0; i < names.length; ++i) { + const name = names[i]; + const t = Array.isArray(tensors) ? tensors[i].tensor : tensors[name]; + if (t.dtype !== "float32" && t.dtype !== "int32" && t.dtype !== "bool" && t.dtype !== "string" && t.dtype !== "complex64") { + throw new Error(`Unsupported dtype in weight '${name}': ${t.dtype}`); + } + const spec = { name, shape: t.shape, dtype: t.dtype }; + if (t.dtype === "string") { + const utf8bytes = new Promise(async (resolve) => { + const vals = await t.bytes(); + const totalNumBytes = vals.reduce((p2, c) => p2 + c.length, 0) + NUM_BYTES_STRING_LENGTH * vals.length; + const bytes = new Uint8Array(totalNumBytes); + let offset = 0; + for (let i2 = 0; i2 < vals.length; i2++) { + const val = vals[i2]; + const bytesOfLength = new Uint8Array(new Uint32Array([val.length]).buffer); + bytes.set(bytesOfLength, offset); + offset += NUM_BYTES_STRING_LENGTH; + bytes.set(val, offset); + offset += val.length; + } + resolve(bytes); + }); + dataPromises.push(utf8bytes); + } else { + dataPromises.push(t.data()); + } + if (group != null) { + spec.group = group; + } + specs.push(spec); + } + const tensorValues = await Promise.all(dataPromises); + return { data: concatenateTypedArrays(tensorValues), specs }; + } + function decodeWeights(buffer2, specs) { + const out = {}; + let float16Decode; + let offset = 0; + for (const spec of specs) { + const name = spec.name; + const dtype = spec.dtype; + const shape = spec.shape; + const size = sizeFromShape(shape); + let values; + if ("quantization" in spec) { + const quantization = spec.quantization; + if (quantization.dtype === "uint8" || quantization.dtype === "uint16") { + if (!("min" in quantization && "scale" in quantization)) { + throw new Error(`Weight ${spec.name} with quantization ${quantization.dtype} doesn't have corresponding metadata min and scale.`); + } + } else if (quantization.dtype === "float16") { + if (dtype !== "float32") { + throw new Error(`Weight ${spec.name} is quantized with ${quantization.dtype} which only supports weights of type float32 not ${dtype}.`); + } + } else { + throw new Error(`Weight ${spec.name} has unknown quantization dtype ${quantization.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`); + } + const quantizationSizeFactor = DTYPE_VALUE_SIZE_MAP[quantization.dtype]; + const byteBuffer = buffer2.slice(offset, offset + size * quantizationSizeFactor); + const quantizedArray = quantization.dtype === "uint8" ? new Uint8Array(byteBuffer) : new Uint16Array(byteBuffer); + if (dtype === "float32") { + if (quantization.dtype === "uint8" || quantization.dtype === "uint16") { + values = new Float32Array(quantizedArray.length); + for (let i = 0; i < quantizedArray.length; i++) { + const v = quantizedArray[i]; + values[i] = v * quantization.scale + quantization.min; + } + } else if (quantization.dtype === "float16") { + if (float16Decode === void 0) { + float16Decode = getFloat16Decoder(); + } + values = float16Decode(quantizedArray); + } else { + throw new Error(`Unsupported quantization type ${quantization.dtype} for weight type float32.`); + } + } else if (dtype === "int32") { + if (quantization.dtype !== "uint8" && quantization.dtype !== "uint16") { + throw new Error(`Unsupported quantization type ${quantization.dtype} for weight type int32.`); + } + values = new Int32Array(quantizedArray.length); + for (let i = 0; i < quantizedArray.length; i++) { + const v = quantizedArray[i]; + values[i] = Math.round(v * quantization.scale + quantization.min); + } + } else { + throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`); + } + offset += size * quantizationSizeFactor; + } else if (dtype === "string") { + const size2 = sizeFromShape(spec.shape); + values = []; + for (let i = 0; i < size2; i++) { + const byteLength = new Uint32Array(buffer2.slice(offset, offset + NUM_BYTES_STRING_LENGTH))[0]; + offset += NUM_BYTES_STRING_LENGTH; + const bytes = new Uint8Array(buffer2.slice(offset, offset + byteLength)); + values.push(bytes); + offset += byteLength; + } + } else { + const dtypeFactor = DTYPE_VALUE_SIZE_MAP[dtype]; + const byteBuffer = buffer2.slice(offset, offset + size * dtypeFactor); + if (dtype === "float32") { + values = new Float32Array(byteBuffer); + } else if (dtype === "int32") { + values = new Int32Array(byteBuffer); + } else if (dtype === "bool") { + values = new Uint8Array(byteBuffer); + } else if (dtype === "complex64") { + values = new Float32Array(byteBuffer); + const real4 = new Float32Array(values.length / 2); + const image2 = new Float32Array(values.length / 2); + for (let i = 0; i < real4.length; i++) { + real4[i] = values[i * 2]; + image2[i] = values[i * 2 + 1]; + } + const realTensor = tensor(real4, shape, "float32"); + const imageTensor = tensor(image2, shape, "float32"); + out[name] = complex(realTensor, imageTensor); + realTensor.dispose(); + imageTensor.dispose(); + } else { + throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`); + } + offset += size * dtypeFactor; + } + if (dtype !== "complex64") { + out[name] = tensor(values, shape, dtype); + } + } + return out; + } + function concatenateTypedArrays(xs) { + if (xs === null) { + throw new Error(`Invalid input value: ${JSON.stringify(xs)}`); + } + let totalByteLength = 0; + const normalizedXs = []; + xs.forEach((x) => { + totalByteLength += x.byteLength; + normalizedXs.push(x.byteLength === x.buffer.byteLength ? x : new x.constructor(x)); + if (!(x instanceof Float32Array || x instanceof Int32Array || x instanceof Uint8Array)) { + throw new Error(`Unsupported TypedArray subtype: ${x.constructor.name}`); + } + }); + const y = new Uint8Array(totalByteLength); + let offset = 0; + normalizedXs.forEach((x) => { + y.set(new Uint8Array(x.buffer), offset); + offset += x.byteLength; + }); + return y.buffer; + } + var useNodeBuffer = typeof Buffer !== "undefined" && (typeof Blob === "undefined" || typeof atob === "undefined" || typeof btoa === "undefined"); + function stringByteLength(str) { + if (useNodeBuffer) { + return Buffer.byteLength(str); + } + return new Blob([str]).size; + } + function arrayBufferToBase64String(buffer2) { + if (useNodeBuffer) { + return Buffer.from(buffer2).toString("base64"); + } + const buf = new Uint8Array(buffer2); + let s = ""; + for (let i = 0, l = buf.length; i < l; i++) { + s += String.fromCharCode(buf[i]); + } + return btoa(s); + } + function base64StringToArrayBuffer(str) { + if (useNodeBuffer) { + const buf = Buffer.from(str, "base64"); + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + } + const s = atob(str); + const buffer2 = new Uint8Array(s.length); + for (let i = 0; i < s.length; ++i) { + buffer2.set([s.charCodeAt(i)], i); + } + return buffer2.buffer; + } + function concatenateArrayBuffers(buffers) { + if (buffers.length === 1) { + return buffers[0]; + } + let totalByteLength = 0; + buffers.forEach((buffer2) => { + totalByteLength += buffer2.byteLength; + }); + const temp = new Uint8Array(totalByteLength); + let offset = 0; + buffers.forEach((buffer2) => { + temp.set(new Uint8Array(buffer2), offset); + offset += buffer2.byteLength; + }); + return temp.buffer; + } + function basename(path) { + const SEPARATOR = "/"; + path = path.trim(); + while (path.endsWith(SEPARATOR)) { + path = path.slice(0, path.length - 1); + } + const items = path.split(SEPARATOR); + return items[items.length - 1]; + } + function getModelJSONForModelArtifacts(artifacts, manifest) { + const result = { + modelTopology: artifacts.modelTopology, + format: artifacts.format, + generatedBy: artifacts.generatedBy, + convertedBy: artifacts.convertedBy, + weightsManifest: manifest + }; + if (artifacts.signature != null) { + result.signature = artifacts.signature; + } + if (artifacts.userDefinedMetadata != null) { + result.userDefinedMetadata = artifacts.userDefinedMetadata; + } + if (artifacts.modelInitializer != null) { + result.modelInitializer = artifacts.modelInitializer; + } + if (artifacts.trainingConfig != null) { + result.trainingConfig = artifacts.trainingConfig; + } + return result; + } + async function getModelArtifactsForJSON(modelJSON, loadWeights2) { + const modelArtifacts = { + modelTopology: modelJSON.modelTopology, + format: modelJSON.format, + generatedBy: modelJSON.generatedBy, + convertedBy: modelJSON.convertedBy + }; + if (modelJSON.trainingConfig != null) { + modelArtifacts.trainingConfig = modelJSON.trainingConfig; + } + if (modelJSON.weightsManifest != null) { + const [weightSpecs, weightData] = await loadWeights2(modelJSON.weightsManifest); + modelArtifacts.weightSpecs = weightSpecs; + modelArtifacts.weightData = weightData; + } + if (modelJSON.signature != null) { + modelArtifacts.signature = modelJSON.signature; + } + if (modelJSON.userDefinedMetadata != null) { + modelArtifacts.userDefinedMetadata = modelJSON.userDefinedMetadata; + } + if (modelJSON.modelInitializer != null) { + modelArtifacts.modelInitializer = modelJSON.modelInitializer; + } + return modelArtifacts; + } + function getModelArtifactsInfoForJSON(modelArtifacts) { + if (modelArtifacts.modelTopology instanceof ArrayBuffer) { + throw new Error("Expected JSON model topology, received ArrayBuffer."); + } + return { + dateSaved: new Date(), + modelTopologyType: "JSON", + modelTopologyBytes: modelArtifacts.modelTopology == null ? 0 : stringByteLength(JSON.stringify(modelArtifacts.modelTopology)), + weightSpecsBytes: modelArtifacts.weightSpecs == null ? 0 : stringByteLength(JSON.stringify(modelArtifacts.weightSpecs)), + weightDataBytes: modelArtifacts.weightData == null ? 0 : modelArtifacts.weightData.byteLength + }; + } + function computeFloat16MantisaTable() { + const convertMantissa = (i) => { + let m = i << 13; + let e = 0; + while ((m & 8388608) === 0) { + e -= 8388608; + m <<= 1; + } + m &= ~8388608; + e += 947912704; + return m | e; + }; + const mantisaTable = new Uint32Array(2048); + mantisaTable[0] = 0; + for (let i = 1; i < 1024; i++) { + mantisaTable[i] = convertMantissa(i); + } + for (let i = 1024; i < 2048; i++) { + mantisaTable[i] = 939524096 + (i - 1024 << 13); + } + return mantisaTable; + } + function computeFloat16ExponentTable() { + const exponentTable = new Uint32Array(64); + exponentTable[0] = 0; + exponentTable[31] = 1199570944; + exponentTable[32] = 2147483648; + exponentTable[63] = 3347054592; + for (let i = 1; i < 31; i++) { + exponentTable[i] = i << 23; + } + for (let i = 33; i < 63; i++) { + exponentTable[i] = 2147483648 + (i - 32 << 23); + } + return exponentTable; + } + function computeFloat16OffsetTable() { + const offsetTable = new Uint32Array(64); + for (let i = 0; i < 64; i++) { + offsetTable[i] = 1024; + } + offsetTable[0] = offsetTable[32] = 0; + return offsetTable; + } + function getFloat16Decoder() { + const mantisaTable = computeFloat16MantisaTable(); + const exponentTable = computeFloat16ExponentTable(); + const offsetTable = computeFloat16OffsetTable(); + return (quantizedArray) => { + const buffer2 = new ArrayBuffer(4 * quantizedArray.length); + const bufferUint32View = new Uint32Array(buffer2); + for (let index = 0; index < quantizedArray.length; index++) { + const float16Bits = quantizedArray[index]; + const float32Bits = mantisaTable[offsetTable[float16Bits >> 10] + (float16Bits & 1023)] + exponentTable[float16Bits >> 10]; + bufferUint32View[index] = float32Bits; + } + return new Float32Array(buffer2); + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/router_registry.js + init_define_BUILD_VERSION(); + var IORouterRegistry = class { + constructor() { + this.saveRouters = []; + this.loadRouters = []; + } + static getInstance() { + if (IORouterRegistry.instance == null) { + IORouterRegistry.instance = new IORouterRegistry(); + } + return IORouterRegistry.instance; + } + static registerSaveRouter(saveRouter) { + IORouterRegistry.getInstance().saveRouters.push(saveRouter); + } + static registerLoadRouter(loadRouter) { + IORouterRegistry.getInstance().loadRouters.push(loadRouter); + } + static getSaveHandlers(url) { + return IORouterRegistry.getHandlers(url, "save"); + } + static getLoadHandlers(url, loadOptions) { + return IORouterRegistry.getHandlers(url, "load", loadOptions); + } + static getHandlers(url, handlerType, loadOptions) { + const validHandlers = []; + const routers = handlerType === "load" ? IORouterRegistry.getInstance().loadRouters : IORouterRegistry.getInstance().saveRouters; + routers.forEach((router) => { + const handler = router(url, loadOptions); + if (handler !== null) { + validHandlers.push(handler); + } + }); + return validHandlers; + } + }; + var registerSaveRouter = (loudRouter) => IORouterRegistry.registerSaveRouter(loudRouter); + var registerLoadRouter = (loudRouter) => IORouterRegistry.registerLoadRouter(loudRouter); + var getSaveHandlers = (url) => IORouterRegistry.getSaveHandlers(url); + var getLoadHandlers = (url, loadOptions) => IORouterRegistry.getLoadHandlers(url, loadOptions); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/indexed_db.js + var DATABASE_NAME = "tensorflowjs"; + var DATABASE_VERSION = 1; + var MODEL_STORE_NAME = "models_store"; + var INFO_STORE_NAME = "model_info_store"; + function getIndexedDBFactory() { + if (!env().getBool("IS_BROWSER")) { + throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser."); + } + const theWindow = typeof window === "undefined" ? self : window; + const factory = theWindow.indexedDB || theWindow.mozIndexedDB || theWindow.webkitIndexedDB || theWindow.msIndexedDB || theWindow.shimIndexedDB; + if (factory == null) { + throw new Error("The current browser does not appear to support IndexedDB."); + } + return factory; + } + function setUpDatabase(openRequest) { + const db = openRequest.result; + db.createObjectStore(MODEL_STORE_NAME, { keyPath: "modelPath" }); + db.createObjectStore(INFO_STORE_NAME, { keyPath: "modelPath" }); + } + var BrowserIndexedDB = class { + constructor(modelPath) { + this.indexedDB = getIndexedDBFactory(); + if (modelPath == null || !modelPath) { + throw new Error("For IndexedDB, modelPath must not be null, undefined or empty."); + } + this.modelPath = modelPath; + } + async save(modelArtifacts) { + if (modelArtifacts.modelTopology instanceof ArrayBuffer) { + throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet."); + } + return this.databaseAction(this.modelPath, modelArtifacts); + } + async load() { + return this.databaseAction(this.modelPath); + } + databaseAction(modelPath, modelArtifacts) { + return new Promise((resolve, reject) => { + const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION); + openRequest.onupgradeneeded = () => setUpDatabase(openRequest); + openRequest.onsuccess = () => { + const db = openRequest.result; + if (modelArtifacts == null) { + const modelTx = db.transaction(MODEL_STORE_NAME, "readonly"); + const modelStore = modelTx.objectStore(MODEL_STORE_NAME); + const getRequest = modelStore.get(this.modelPath); + getRequest.onsuccess = () => { + if (getRequest.result == null) { + db.close(); + return reject(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`)); + } else { + resolve(getRequest.result.modelArtifacts); + } + }; + getRequest.onerror = (error) => { + db.close(); + return reject(getRequest.error); + }; + modelTx.oncomplete = () => db.close(); + } else { + const modelArtifactsInfo = getModelArtifactsInfoForJSON(modelArtifacts); + const infoTx = db.transaction(INFO_STORE_NAME, "readwrite"); + let infoStore = infoTx.objectStore(INFO_STORE_NAME); + const putInfoRequest = infoStore.put({ modelPath: this.modelPath, modelArtifactsInfo }); + let modelTx; + putInfoRequest.onsuccess = () => { + modelTx = db.transaction(MODEL_STORE_NAME, "readwrite"); + const modelStore = modelTx.objectStore(MODEL_STORE_NAME); + const putModelRequest = modelStore.put({ + modelPath: this.modelPath, + modelArtifacts, + modelArtifactsInfo + }); + putModelRequest.onsuccess = () => resolve({ modelArtifactsInfo }); + putModelRequest.onerror = (error) => { + infoStore = infoTx.objectStore(INFO_STORE_NAME); + const deleteInfoRequest = infoStore.delete(this.modelPath); + deleteInfoRequest.onsuccess = () => { + db.close(); + return reject(putModelRequest.error); + }; + deleteInfoRequest.onerror = (error2) => { + db.close(); + return reject(putModelRequest.error); + }; + }; + }; + putInfoRequest.onerror = (error) => { + db.close(); + return reject(putInfoRequest.error); + }; + infoTx.oncomplete = () => { + if (modelTx == null) { + db.close(); + } else { + modelTx.oncomplete = () => db.close(); + } + }; + } + }; + openRequest.onerror = (error) => reject(openRequest.error); + }); + } + }; + BrowserIndexedDB.URL_SCHEME = "indexeddb://"; + var indexedDBRouter = (url) => { + if (!env().getBool("IS_BROWSER")) { + return null; + } else { + if (!Array.isArray(url) && url.startsWith(BrowserIndexedDB.URL_SCHEME)) { + return browserIndexedDB(url.slice(BrowserIndexedDB.URL_SCHEME.length)); + } else { + return null; + } + } + }; + IORouterRegistry.registerSaveRouter(indexedDBRouter); + IORouterRegistry.registerLoadRouter(indexedDBRouter); + function browserIndexedDB(modelPath) { + return new BrowserIndexedDB(modelPath); + } + function maybeStripScheme(key) { + return key.startsWith(BrowserIndexedDB.URL_SCHEME) ? key.slice(BrowserIndexedDB.URL_SCHEME.length) : key; + } + var BrowserIndexedDBManager = class { + constructor() { + this.indexedDB = getIndexedDBFactory(); + } + async listModels() { + return new Promise((resolve, reject) => { + const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION); + openRequest.onupgradeneeded = () => setUpDatabase(openRequest); + openRequest.onsuccess = () => { + const db = openRequest.result; + const tx = db.transaction(INFO_STORE_NAME, "readonly"); + const store = tx.objectStore(INFO_STORE_NAME); + const getAllInfoRequest = store.getAll(); + getAllInfoRequest.onsuccess = () => { + const out = {}; + for (const item of getAllInfoRequest.result) { + out[item.modelPath] = item.modelArtifactsInfo; + } + resolve(out); + }; + getAllInfoRequest.onerror = (error) => { + db.close(); + return reject(getAllInfoRequest.error); + }; + tx.oncomplete = () => db.close(); + }; + openRequest.onerror = (error) => reject(openRequest.error); + }); + } + async removeModel(path) { + path = maybeStripScheme(path); + return new Promise((resolve, reject) => { + const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION); + openRequest.onupgradeneeded = () => setUpDatabase(openRequest); + openRequest.onsuccess = () => { + const db = openRequest.result; + const infoTx = db.transaction(INFO_STORE_NAME, "readwrite"); + const infoStore = infoTx.objectStore(INFO_STORE_NAME); + const getInfoRequest = infoStore.get(path); + let modelTx; + getInfoRequest.onsuccess = () => { + if (getInfoRequest.result == null) { + db.close(); + return reject(new Error(`Cannot find model with path '${path}' in IndexedDB.`)); + } else { + const deleteInfoRequest = infoStore.delete(path); + const deleteModelData = () => { + modelTx = db.transaction(MODEL_STORE_NAME, "readwrite"); + const modelStore = modelTx.objectStore(MODEL_STORE_NAME); + const deleteModelRequest = modelStore.delete(path); + deleteModelRequest.onsuccess = () => resolve(getInfoRequest.result.modelArtifactsInfo); + deleteModelRequest.onerror = (error) => reject(getInfoRequest.error); + }; + deleteInfoRequest.onsuccess = deleteModelData; + deleteInfoRequest.onerror = (error) => { + deleteModelData(); + db.close(); + return reject(getInfoRequest.error); + }; + } + }; + getInfoRequest.onerror = (error) => { + db.close(); + return reject(getInfoRequest.error); + }; + infoTx.oncomplete = () => { + if (modelTx == null) { + db.close(); + } else { + modelTx.oncomplete = () => db.close(); + } + }; + }; + openRequest.onerror = (error) => reject(openRequest.error); + }); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/local_storage.js + init_define_BUILD_VERSION(); + var PATH_SEPARATOR = "/"; + var PATH_PREFIX = "tensorflowjs_models"; + var INFO_SUFFIX = "info"; + var MODEL_TOPOLOGY_SUFFIX = "model_topology"; + var WEIGHT_SPECS_SUFFIX = "weight_specs"; + var WEIGHT_DATA_SUFFIX = "weight_data"; + var MODEL_METADATA_SUFFIX = "model_metadata"; + function getModelKeys(path) { + return { + info: [PATH_PREFIX, path, INFO_SUFFIX].join(PATH_SEPARATOR), + topology: [PATH_PREFIX, path, MODEL_TOPOLOGY_SUFFIX].join(PATH_SEPARATOR), + weightSpecs: [PATH_PREFIX, path, WEIGHT_SPECS_SUFFIX].join(PATH_SEPARATOR), + weightData: [PATH_PREFIX, path, WEIGHT_DATA_SUFFIX].join(PATH_SEPARATOR), + modelMetadata: [PATH_PREFIX, path, MODEL_METADATA_SUFFIX].join(PATH_SEPARATOR) + }; + } + function removeItems(keys) { + for (const key of Object.values(keys)) { + window.localStorage.removeItem(key); + } + } + function getModelPathFromKey(key) { + const items = key.split(PATH_SEPARATOR); + if (items.length < 3) { + throw new Error(`Invalid key format: ${key}`); + } + return items.slice(1, items.length - 1).join(PATH_SEPARATOR); + } + function maybeStripScheme2(key) { + return key.startsWith(BrowserLocalStorage.URL_SCHEME) ? key.slice(BrowserLocalStorage.URL_SCHEME.length) : key; + } + var BrowserLocalStorage = class { + constructor(modelPath) { + if (!env().getBool("IS_BROWSER") || typeof window === "undefined" || typeof window.localStorage === "undefined") { + throw new Error("The current environment does not support local storage."); + } + this.LS = window.localStorage; + if (modelPath == null || !modelPath) { + throw new Error("For local storage, modelPath must not be null, undefined or empty."); + } + this.modelPath = modelPath; + this.keys = getModelKeys(this.modelPath); + } + async save(modelArtifacts) { + if (modelArtifacts.modelTopology instanceof ArrayBuffer) { + throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet."); + } else { + const topology = JSON.stringify(modelArtifacts.modelTopology); + const weightSpecs = JSON.stringify(modelArtifacts.weightSpecs); + const modelArtifactsInfo = getModelArtifactsInfoForJSON(modelArtifacts); + try { + this.LS.setItem(this.keys.info, JSON.stringify(modelArtifactsInfo)); + this.LS.setItem(this.keys.topology, topology); + this.LS.setItem(this.keys.weightSpecs, weightSpecs); + this.LS.setItem(this.keys.weightData, arrayBufferToBase64String(modelArtifacts.weightData)); + const metadata = { + format: modelArtifacts.format, + generatedBy: modelArtifacts.generatedBy, + convertedBy: modelArtifacts.convertedBy, + signature: modelArtifacts.signature != null ? modelArtifacts.signature : void 0, + userDefinedMetadata: modelArtifacts.userDefinedMetadata != null ? modelArtifacts.userDefinedMetadata : void 0, + modelInitializer: modelArtifacts.modelInitializer != null ? modelArtifacts.modelInitializer : void 0, + trainingConfig: modelArtifacts.trainingConfig != null ? modelArtifacts.trainingConfig : void 0 + }; + this.LS.setItem(this.keys.modelMetadata, JSON.stringify(metadata)); + return { modelArtifactsInfo }; + } catch (err) { + removeItems(this.keys); + throw new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${modelArtifactsInfo.modelTopologyBytes}, weightSpecsBytes=${modelArtifactsInfo.weightSpecsBytes}, weightDataBytes=${modelArtifactsInfo.weightDataBytes}.`); + } + } + } + async load() { + const info = JSON.parse(this.LS.getItem(this.keys.info)); + if (info == null) { + throw new Error(`In local storage, there is no model with name '${this.modelPath}'`); + } + if (info.modelTopologyType !== "JSON") { + throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet."); + } + const out = {}; + const topology = JSON.parse(this.LS.getItem(this.keys.topology)); + if (topology == null) { + throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`); + } + out.modelTopology = topology; + const weightSpecs = JSON.parse(this.LS.getItem(this.keys.weightSpecs)); + if (weightSpecs == null) { + throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`); + } + out.weightSpecs = weightSpecs; + const metadataString = this.LS.getItem(this.keys.modelMetadata); + if (metadataString != null) { + const metadata = JSON.parse(metadataString); + out.format = metadata.format; + out.generatedBy = metadata.generatedBy; + out.convertedBy = metadata.convertedBy; + if (metadata.signature != null) { + out.signature = metadata.signature; + } + if (metadata.userDefinedMetadata != null) { + out.userDefinedMetadata = metadata.userDefinedMetadata; + } + if (metadata.modelInitializer != null) { + out.modelInitializer = metadata.modelInitializer; + } + if (metadata.trainingConfig != null) { + out.trainingConfig = metadata.trainingConfig; + } + } + const weightDataBase64 = this.LS.getItem(this.keys.weightData); + if (weightDataBase64 == null) { + throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`); + } + out.weightData = base64StringToArrayBuffer(weightDataBase64); + return out; + } + }; + BrowserLocalStorage.URL_SCHEME = "localstorage://"; + var localStorageRouter = (url) => { + if (!env().getBool("IS_BROWSER")) { + return null; + } else { + if (!Array.isArray(url) && url.startsWith(BrowserLocalStorage.URL_SCHEME)) { + return browserLocalStorage(url.slice(BrowserLocalStorage.URL_SCHEME.length)); + } else { + return null; + } + } + }; + IORouterRegistry.registerSaveRouter(localStorageRouter); + IORouterRegistry.registerLoadRouter(localStorageRouter); + function browserLocalStorage(modelPath) { + return new BrowserLocalStorage(modelPath); + } + var BrowserLocalStorageManager = class { + constructor() { + assert(env().getBool("IS_BROWSER"), () => "Current environment is not a web browser"); + assert(typeof window === "undefined" || typeof window.localStorage !== "undefined", () => "Current browser does not appear to support localStorage"); + this.LS = window.localStorage; + } + async listModels() { + const out = {}; + const prefix = PATH_PREFIX + PATH_SEPARATOR; + const suffix = PATH_SEPARATOR + INFO_SUFFIX; + for (let i = 0; i < this.LS.length; ++i) { + const key = this.LS.key(i); + if (key.startsWith(prefix) && key.endsWith(suffix)) { + const modelPath = getModelPathFromKey(key); + out[modelPath] = JSON.parse(this.LS.getItem(key)); + } + } + return out; + } + async removeModel(path) { + path = maybeStripScheme2(path); + const keys = getModelKeys(path); + if (this.LS.getItem(keys.info) == null) { + throw new Error(`Cannot find model at path '${path}'`); + } + const info = JSON.parse(this.LS.getItem(keys.info)); + removeItems(keys); + return info; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/model_management.js + init_define_BUILD_VERSION(); + var URL_SCHEME_SUFFIX = "://"; + var ModelStoreManagerRegistry = class { + constructor() { + this.managers = {}; + } + static getInstance() { + if (ModelStoreManagerRegistry.instance == null) { + ModelStoreManagerRegistry.instance = new ModelStoreManagerRegistry(); + } + return ModelStoreManagerRegistry.instance; + } + static registerManager(scheme, manager) { + assert(scheme != null, () => "scheme must not be undefined or null."); + if (scheme.endsWith(URL_SCHEME_SUFFIX)) { + scheme = scheme.slice(0, scheme.indexOf(URL_SCHEME_SUFFIX)); + } + assert(scheme.length > 0, () => "scheme must not be an empty string."); + const registry = ModelStoreManagerRegistry.getInstance(); + assert(registry.managers[scheme] == null, () => `A model store manager is already registered for scheme '${scheme}'.`); + registry.managers[scheme] = manager; + } + static getManager(scheme) { + const manager = ModelStoreManagerRegistry.getInstance().managers[scheme]; + if (manager == null) { + throw new Error(`Cannot find model manager for scheme '${scheme}'`); + } + return manager; + } + static getSchemes() { + return Object.keys(ModelStoreManagerRegistry.getInstance().managers); + } + }; + function parseURL(url) { + if (url.indexOf(URL_SCHEME_SUFFIX) === -1) { + throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${ModelStoreManagerRegistry.getSchemes().join(",")}`); + } + return { + scheme: url.split(URL_SCHEME_SUFFIX)[0], + path: url.split(URL_SCHEME_SUFFIX)[1] + }; + } + async function cloneModelInternal(sourceURL, destURL, deleteSource = false) { + assert(sourceURL !== destURL, () => `Old path and new path are the same: '${sourceURL}'`); + const loadHandlers = IORouterRegistry.getLoadHandlers(sourceURL); + assert(loadHandlers.length > 0, () => `Copying failed because no load handler is found for source URL ${sourceURL}.`); + assert(loadHandlers.length < 2, () => `Copying failed because more than one (${loadHandlers.length}) load handlers for source URL ${sourceURL}.`); + const loadHandler = loadHandlers[0]; + const saveHandlers = IORouterRegistry.getSaveHandlers(destURL); + assert(saveHandlers.length > 0, () => `Copying failed because no save handler is found for destination URL ${destURL}.`); + assert(saveHandlers.length < 2, () => `Copying failed because more than one (${loadHandlers.length}) save handlers for destination URL ${destURL}.`); + const saveHandler = saveHandlers[0]; + const sourceScheme = parseURL(sourceURL).scheme; + const sourcePath = parseURL(sourceURL).path; + const sameMedium = sourceScheme === parseURL(sourceURL).scheme; + const modelArtifacts = await loadHandler.load(); + if (deleteSource && sameMedium) { + await ModelStoreManagerRegistry.getManager(sourceScheme).removeModel(sourcePath); + } + const saveResult = await saveHandler.save(modelArtifacts); + if (deleteSource && !sameMedium) { + await ModelStoreManagerRegistry.getManager(sourceScheme).removeModel(sourcePath); + } + return saveResult.modelArtifactsInfo; + } + async function listModels() { + const schemes = ModelStoreManagerRegistry.getSchemes(); + const out = {}; + for (const scheme of schemes) { + const schemeOut = await ModelStoreManagerRegistry.getManager(scheme).listModels(); + for (const path in schemeOut) { + const url = scheme + URL_SCHEME_SUFFIX + path; + out[url] = schemeOut[path]; + } + } + return out; + } + async function removeModel(url) { + const schemeAndPath = parseURL(url); + const manager = ModelStoreManagerRegistry.getManager(schemeAndPath.scheme); + return manager.removeModel(schemeAndPath.path); + } + async function copyModel(sourceURL, destURL) { + const deleteSource = false; + return cloneModelInternal(sourceURL, destURL, deleteSource); + } + async function moveModel(sourceURL, destURL) { + const deleteSource = true; + return cloneModelInternal(sourceURL, destURL, deleteSource); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/platforms/platform_browser.js + var PlatformBrowser = class { + fetch(path, init2) { + return fetch(path, init2); + } + now() { + return performance.now(); + } + encode(text, encoding) { + if (encoding !== "utf-8" && encoding !== "utf8") { + throw new Error(`Browser's encoder only supports utf-8, but got ${encoding}`); + } + if (this.textEncoder == null) { + this.textEncoder = new TextEncoder(); + } + return this.textEncoder.encode(text); + } + decode(bytes, encoding) { + return new TextDecoder(encoding).decode(bytes); + } + }; + if (env().get("IS_BROWSER")) { + env().setPlatform("browser", new PlatformBrowser()); + try { + ModelStoreManagerRegistry.registerManager(BrowserLocalStorage.URL_SCHEME, new BrowserLocalStorageManager()); + } catch (err) { + } + try { + ModelStoreManagerRegistry.registerManager(BrowserIndexedDB.URL_SCHEME, new BrowserIndexedDBManager()); + } catch (err) { + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/platforms/platform_node.js + init_define_BUILD_VERSION(); + var getNodeFetch = { + importFetch: () => require_browser() + }; + var systemFetch; + var PlatformNode = class { + constructor() { + this.util = require_util(); + this.textEncoder = new this.util.TextEncoder(); + } + fetch(path, requestInits) { + if (env().global.fetch != null) { + return env().global.fetch(path, requestInits); + } + if (systemFetch == null) { + systemFetch = getNodeFetch.importFetch(); + } + return systemFetch(path, requestInits); + } + now() { + const time = process.hrtime(); + return time[0] * 1e3 + time[1] / 1e6; + } + encode(text, encoding) { + if (encoding !== "utf-8" && encoding !== "utf8") { + throw new Error(`Node built-in encoder only supports utf-8, but got ${encoding}`); + } + return this.textEncoder.encode(text); + } + decode(bytes, encoding) { + if (bytes.length === 0) { + return ""; + } + return new this.util.TextDecoder(encoding).decode(bytes); + } + }; + if (env().get("IS_NODE") && !env().get("IS_BROWSER")) { + env().setPlatform("node", new PlatformNode()); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/buffer.js + init_define_BUILD_VERSION(); + function buffer(shape, dtype = "float32", values) { + dtype = dtype || "float32"; + assertNonNegativeIntegerDimensions(shape); + return new TensorBuffer(shape, dtype, values); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/cast.js + init_define_BUILD_VERSION(); + function cast_(x, dtype) { + const $x = convertToTensor(x, "x", "cast"); + if (!isValidDtype(dtype)) { + throw new Error(`Failed to cast to unknown dtype ${dtype}`); + } + if (dtype === "string" && $x.dtype !== "string" || dtype !== "string" && $x.dtype === "string") { + throw new Error("Only strings can be casted to strings"); + } + const inputs = { x: $x }; + const attrs = { dtype }; + return ENGINE.runKernel(Cast, inputs, attrs); + } + var cast = op({ cast_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/clone.js + init_define_BUILD_VERSION(); + function clone_(x) { + const $x = convertToTensor(x, "x", "clone", "string_or_numeric"); + const inputs = { x: $x }; + return ENGINE.runKernel(Identity, inputs); + } + var clone = op({ clone_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/print.js + init_define_BUILD_VERSION(); + function print(x, verbose = false) { + console.log(x.toString(verbose)); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/base_side_effects.js + getOrMakeEngine(); + var opHandler2 = { + buffer, + cast, + clone, + print + }; + setOpHandler(opHandler2); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/base.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/io.js + var io_exports = {}; + __export(io_exports, { + browserFiles: () => browserFiles, + browserHTTPRequest: () => browserHTTPRequest, + concatenateArrayBuffers: () => concatenateArrayBuffers, + copyModel: () => copyModel, + decodeWeights: () => decodeWeights, + encodeWeights: () => encodeWeights, + fromMemory: () => fromMemory, + fromMemorySync: () => fromMemorySync, + getLoadHandlers: () => getLoadHandlers, + getModelArtifactsForJSON: () => getModelArtifactsForJSON, + getModelArtifactsInfoForJSON: () => getModelArtifactsInfoForJSON, + getSaveHandlers: () => getSaveHandlers, + http: () => http, + isHTTPScheme: () => isHTTPScheme, + listModels: () => listModels, + loadWeights: () => loadWeights, + moveModel: () => moveModel, + registerLoadRouter: () => registerLoadRouter, + registerSaveRouter: () => registerSaveRouter, + removeModel: () => removeModel, + weightsLoaderFactory: () => weightsLoaderFactory, + withSaveHandler: () => withSaveHandler, + withSaveHandlerSync: () => withSaveHandlerSync + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/browser_files.js + init_define_BUILD_VERSION(); + var DEFAULT_FILE_NAME_PREFIX = "model"; + var DEFAULT_JSON_EXTENSION_NAME = ".json"; + var DEFAULT_WEIGHT_DATA_EXTENSION_NAME = ".weights.bin"; + function defer(f) { + return new Promise((resolve) => setTimeout(resolve)).then(f); + } + var BrowserDownloads = class { + constructor(fileNamePrefix) { + if (!env().getBool("IS_BROWSER")) { + throw new Error("browserDownloads() cannot proceed because the current environment is not a browser."); + } + if (fileNamePrefix.startsWith(BrowserDownloads.URL_SCHEME)) { + fileNamePrefix = fileNamePrefix.slice(BrowserDownloads.URL_SCHEME.length); + } + if (fileNamePrefix == null || fileNamePrefix.length === 0) { + fileNamePrefix = DEFAULT_FILE_NAME_PREFIX; + } + this.modelJsonFileName = fileNamePrefix + DEFAULT_JSON_EXTENSION_NAME; + this.weightDataFileName = fileNamePrefix + DEFAULT_WEIGHT_DATA_EXTENSION_NAME; + } + async save(modelArtifacts) { + if (typeof document === "undefined") { + throw new Error("Browser downloads are not supported in this environment since `document` is not present"); + } + const weightsURL = window.URL.createObjectURL(new Blob([modelArtifacts.weightData], { type: "application/octet-stream" })); + if (modelArtifacts.modelTopology instanceof ArrayBuffer) { + throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet."); + } else { + const weightsManifest = [{ + paths: ["./" + this.weightDataFileName], + weights: modelArtifacts.weightSpecs + }]; + const modelJSON = getModelJSONForModelArtifacts(modelArtifacts, weightsManifest); + const modelJsonURL = window.URL.createObjectURL(new Blob([JSON.stringify(modelJSON)], { type: "application/json" })); + const jsonAnchor = this.modelJsonAnchor == null ? document.createElement("a") : this.modelJsonAnchor; + jsonAnchor.download = this.modelJsonFileName; + jsonAnchor.href = modelJsonURL; + await defer(() => jsonAnchor.dispatchEvent(new MouseEvent("click"))); + if (modelArtifacts.weightData != null) { + const weightDataAnchor = this.weightDataAnchor == null ? document.createElement("a") : this.weightDataAnchor; + weightDataAnchor.download = this.weightDataFileName; + weightDataAnchor.href = weightsURL; + await defer(() => weightDataAnchor.dispatchEvent(new MouseEvent("click"))); + } + return { modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts) }; + } + } + }; + BrowserDownloads.URL_SCHEME = "downloads://"; + var BrowserFiles = class { + constructor(files) { + if (files == null || files.length < 1) { + throw new Error(`When calling browserFiles, at least 1 file is required, but received ${files}`); + } + this.jsonFile = files[0]; + this.weightsFiles = files.slice(1); + } + async load() { + return new Promise((resolve, reject) => { + const jsonReader = new FileReader(); + jsonReader.onload = (event) => { + const modelJSON = JSON.parse(event.target.result); + const modelTopology = modelJSON.modelTopology; + if (modelTopology == null) { + reject(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`)); + return; + } + const weightsManifest = modelJSON.weightsManifest; + if (weightsManifest == null) { + reject(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`)); + return; + } + if (this.weightsFiles.length === 0) { + resolve({ modelTopology }); + return; + } + const modelArtifactsPromise = getModelArtifactsForJSON(modelJSON, (weightsManifest2) => this.loadWeights(weightsManifest2)); + resolve(modelArtifactsPromise); + }; + jsonReader.onerror = (error) => reject(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`); + jsonReader.readAsText(this.jsonFile); + }); + } + loadWeights(weightsManifest) { + const weightSpecs = []; + const paths = []; + for (const entry of weightsManifest) { + weightSpecs.push(...entry.weights); + paths.push(...entry.paths); + } + const pathToFile = this.checkManifestAndWeightFiles(weightsManifest); + const promises = paths.map((path) => this.loadWeightsFile(path, pathToFile[path])); + return Promise.all(promises).then((buffers) => [weightSpecs, concatenateArrayBuffers(buffers)]); + } + loadWeightsFile(path, file) { + return new Promise((resolve, reject) => { + const weightFileReader = new FileReader(); + weightFileReader.onload = (event) => { + const weightData = event.target.result; + resolve(weightData); + }; + weightFileReader.onerror = (error) => reject(`Failed to weights data from file of path '${path}'.`); + weightFileReader.readAsArrayBuffer(file); + }); + } + checkManifestAndWeightFiles(manifest) { + const basenames = []; + const fileNames = this.weightsFiles.map((file) => basename(file.name)); + const pathToFile = {}; + for (const group of manifest) { + group.paths.forEach((path) => { + const pathBasename = basename(path); + if (basenames.indexOf(pathBasename) !== -1) { + throw new Error(`Duplicate file basename found in weights manifest: '${pathBasename}'`); + } + basenames.push(pathBasename); + if (fileNames.indexOf(pathBasename) === -1) { + throw new Error(`Weight file with basename '${pathBasename}' is not provided.`); + } else { + pathToFile[path] = this.weightsFiles[fileNames.indexOf(pathBasename)]; + } + }); + } + if (basenames.length !== this.weightsFiles.length) { + throw new Error(`Mismatch in the number of files in weights manifest (${basenames.length}) and the number of weight files provided (${this.weightsFiles.length}).`); + } + return pathToFile; + } + }; + var browserDownloadsRouter = (url) => { + if (!env().getBool("IS_BROWSER")) { + return null; + } else { + if (!Array.isArray(url) && url.startsWith(BrowserDownloads.URL_SCHEME)) { + return browserDownloads(url.slice(BrowserDownloads.URL_SCHEME.length)); + } else { + return null; + } + } + }; + IORouterRegistry.registerSaveRouter(browserDownloadsRouter); + function browserDownloads(fileNamePrefix = "model") { + return new BrowserDownloads(fileNamePrefix); + } + function browserFiles(files) { + return new BrowserFiles(files); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/http.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/weights_loader.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/progress.js + init_define_BUILD_VERSION(); + function monitorPromisesProgress(promises, onProgress, startFraction, endFraction) { + checkPromises(promises); + startFraction = startFraction == null ? 0 : startFraction; + endFraction = endFraction == null ? 1 : endFraction; + checkFraction(startFraction, endFraction); + let resolvedPromise = 0; + const registerMonitor = (promise) => { + promise.then((value) => { + const fraction = startFraction + ++resolvedPromise / promises.length * (endFraction - startFraction); + onProgress(fraction); + return value; + }); + return promise; + }; + function checkPromises(promises2) { + assert(promises2 != null && Array.isArray(promises2) && promises2.length > 0, () => "promises must be a none empty array"); + } + function checkFraction(startFraction2, endFraction2) { + assert(startFraction2 >= 0 && startFraction2 <= 1, () => `Progress fraction must be in range [0, 1], but got startFraction ${startFraction2}`); + assert(endFraction2 >= 0 && endFraction2 <= 1, () => `Progress fraction must be in range [0, 1], but got endFraction ${endFraction2}`); + assert(endFraction2 >= startFraction2, () => `startFraction must be no more than endFraction, but got startFraction ${startFraction2} and endFraction ${endFraction2}`); + } + return Promise.all(promises.map(registerMonitor)); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/weights_loader.js + async function loadWeightsAsArrayBuffer(fetchURLs, loadOptions) { + if (loadOptions == null) { + loadOptions = {}; + } + const fetchFunc = loadOptions.fetchFunc == null ? env().platform.fetch : loadOptions.fetchFunc; + const requests = fetchURLs.map((fetchURL) => fetchFunc(fetchURL, loadOptions.requestInit, { isBinary: true })); + const fetchStartFraction = 0; + const fetchEndFraction = 0.5; + const responses = loadOptions.onProgress == null ? await Promise.all(requests) : await monitorPromisesProgress(requests, loadOptions.onProgress, fetchStartFraction, fetchEndFraction); + const bufferPromises = responses.map((response) => response.arrayBuffer()); + const bufferStartFraction = 0.5; + const bufferEndFraction = 1; + const buffers = loadOptions.onProgress == null ? await Promise.all(bufferPromises) : await monitorPromisesProgress(bufferPromises, loadOptions.onProgress, bufferStartFraction, bufferEndFraction); + return buffers; + } + async function loadWeights(manifest, filePathPrefix = "", weightNames, requestInit) { + const fetchWeights = (fetchUrls) => loadWeightsAsArrayBuffer(fetchUrls, { requestInit }); + const loadWeights2 = weightsLoaderFactory(fetchWeights); + return loadWeights2(manifest, filePathPrefix, weightNames); + } + function weightsLoaderFactory(fetchWeightsFunction) { + return async (manifest, filePathPrefix = "", weightNames) => { + const groupIndicesToFetchMap = manifest.map(() => false); + const groupWeightsToFetch = {}; + const weightsFound = weightNames != null ? weightNames.map(() => false) : []; + const allManifestWeightNames = []; + manifest.forEach((manifestGroupConfig, groupIndex) => { + let groupOffset = 0; + manifestGroupConfig.weights.forEach((weightsEntry) => { + const rawDtype = "quantization" in weightsEntry ? weightsEntry.quantization.dtype : weightsEntry.dtype; + const weightsBytes = DTYPE_VALUE_SIZE_MAP[rawDtype] * sizeFromShape(weightsEntry.shape); + const enqueueWeightsForFetchingFn = () => { + groupIndicesToFetchMap[groupIndex] = true; + if (groupWeightsToFetch[groupIndex] == null) { + groupWeightsToFetch[groupIndex] = []; + } + groupWeightsToFetch[groupIndex].push({ + manifestEntry: weightsEntry, + groupOffset, + sizeBytes: weightsBytes + }); + }; + if (weightNames != null) { + weightNames.forEach((weightName, weightIndex) => { + if (weightName === weightsEntry.name) { + enqueueWeightsForFetchingFn(); + weightsFound[weightIndex] = true; + } + }); + } else { + enqueueWeightsForFetchingFn(); + } + allManifestWeightNames.push(weightsEntry.name); + groupOffset += weightsBytes; + }); + }); + if (!weightsFound.every((found) => found)) { + const weightsNotFound = weightNames.filter((_, i) => !weightsFound[i]); + throw new Error(`Could not find weights in manifest with names: ${weightsNotFound.join(", ")}. +Manifest JSON has weights with names: ${allManifestWeightNames.join(", ")}.`); + } + const groupIndicesToFetch = groupIndicesToFetchMap.reduce((accumulator, shouldFetch, i) => { + if (shouldFetch) { + accumulator.push(i); + } + return accumulator; + }, []); + const fetchUrls = []; + groupIndicesToFetch.forEach((i) => { + manifest[i].paths.forEach((filepath) => { + const fetchUrl = filePathPrefix + (!filePathPrefix.endsWith("/") ? "/" : "") + filepath; + fetchUrls.push(fetchUrl); + }); + }); + const buffers = await fetchWeightsFunction(fetchUrls); + const weightsTensorMap = {}; + let bufferIndexOffset = 0; + groupIndicesToFetch.forEach((i) => { + const numBuffers = manifest[i].paths.length; + let groupBytes = 0; + for (let i2 = 0; i2 < numBuffers; i2++) { + groupBytes += buffers[bufferIndexOffset + i2].byteLength; + } + const groupBuffer = new ArrayBuffer(groupBytes); + const groupByteBuffer = new Uint8Array(groupBuffer); + let groupBufferOffset = 0; + for (let i2 = 0; i2 < numBuffers; i2++) { + const buffer2 = new Uint8Array(buffers[bufferIndexOffset + i2]); + groupByteBuffer.set(buffer2, groupBufferOffset); + groupBufferOffset += buffer2.byteLength; + } + const weightsEntries = groupWeightsToFetch[i]; + weightsEntries.forEach((weightsEntry) => { + const byteBuffer = groupBuffer.slice(weightsEntry.groupOffset, weightsEntry.groupOffset + weightsEntry.sizeBytes); + const nameToTensorMap = decodeWeights(byteBuffer, [weightsEntry.manifestEntry]); + for (const name in nameToTensorMap) { + weightsTensorMap[name] = nameToTensorMap[name]; + } + }); + bufferIndexOffset += numBuffers; + }); + return weightsTensorMap; + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/http.js + var OCTET_STREAM_MIME_TYPE = "application/octet-stream"; + var JSON_TYPE = "application/json"; + var HTTPRequest = class { + constructor(path, loadOptions) { + this.DEFAULT_METHOD = "POST"; + if (loadOptions == null) { + loadOptions = {}; + } + this.weightPathPrefix = loadOptions.weightPathPrefix; + this.onProgress = loadOptions.onProgress; + this.weightUrlConverter = loadOptions.weightUrlConverter; + if (loadOptions.fetchFunc != null) { + assert(typeof loadOptions.fetchFunc === "function", () => "Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"); + this.fetch = loadOptions.fetchFunc; + } else { + this.fetch = env().platform.fetch; + } + assert(path != null && path.length > 0, () => "URL path for http must not be null, undefined or empty."); + if (Array.isArray(path)) { + assert(path.length === 2, () => `URL paths for http must have a length of 2, (actual length is ${path.length}).`); + } + this.path = path; + if (loadOptions.requestInit != null && loadOptions.requestInit.body != null) { + throw new Error("requestInit is expected to have no pre-existing body, but has one."); + } + this.requestInit = loadOptions.requestInit || {}; + } + async save(modelArtifacts) { + if (modelArtifacts.modelTopology instanceof ArrayBuffer) { + throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet."); + } + const init2 = Object.assign({ method: this.DEFAULT_METHOD }, this.requestInit); + init2.body = new FormData(); + const weightsManifest = [{ + paths: ["./model.weights.bin"], + weights: modelArtifacts.weightSpecs + }]; + const modelTopologyAndWeightManifest = getModelJSONForModelArtifacts(modelArtifacts, weightsManifest); + init2.body.append("model.json", new Blob([JSON.stringify(modelTopologyAndWeightManifest)], { type: JSON_TYPE }), "model.json"); + if (modelArtifacts.weightData != null) { + init2.body.append("model.weights.bin", new Blob([modelArtifacts.weightData], { type: OCTET_STREAM_MIME_TYPE }), "model.weights.bin"); + } + const response = await this.fetch(this.path, init2); + if (response.ok) { + return { + modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts), + responses: [response] + }; + } else { + throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${response.status}.`); + } + } + async load() { + const modelConfigRequest = await this.fetch(this.path, this.requestInit); + if (!modelConfigRequest.ok) { + throw new Error(`Request to ${this.path} failed with status code ${modelConfigRequest.status}. Please verify this URL points to the model JSON of the model to load.`); + } + let modelJSON; + try { + modelJSON = await modelConfigRequest.json(); + } catch (e) { + let message = `Failed to parse model JSON of response from ${this.path}.`; + if (this.path.endsWith(".pb")) { + message += " Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository."; + } else { + message += " Please make sure the server is serving valid JSON for this request."; + } + throw new Error(message); + } + const modelTopology = modelJSON.modelTopology; + const weightsManifest = modelJSON.weightsManifest; + if (modelTopology == null && weightsManifest == null) { + throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`); + } + return getModelArtifactsForJSON(modelJSON, (weightsManifest2) => this.loadWeights(weightsManifest2)); + } + async loadWeights(weightsManifest) { + const weightPath = Array.isArray(this.path) ? this.path[1] : this.path; + const [prefix, suffix] = parseUrl(weightPath); + const pathPrefix = this.weightPathPrefix || prefix; + const weightSpecs = []; + for (const entry of weightsManifest) { + weightSpecs.push(...entry.weights); + } + const fetchURLs = []; + const urlPromises = []; + for (const weightsGroup of weightsManifest) { + for (const path of weightsGroup.paths) { + if (this.weightUrlConverter != null) { + urlPromises.push(this.weightUrlConverter(path)); + } else { + fetchURLs.push(pathPrefix + path + suffix); + } + } + } + if (this.weightUrlConverter) { + fetchURLs.push(...await Promise.all(urlPromises)); + } + const buffers = await loadWeightsAsArrayBuffer(fetchURLs, { + requestInit: this.requestInit, + fetchFunc: this.fetch, + onProgress: this.onProgress + }); + return [weightSpecs, concatenateArrayBuffers(buffers)]; + } + }; + HTTPRequest.URL_SCHEME_REGEX = /^https?:\/\//; + function parseUrl(url) { + const lastSlash = url.lastIndexOf("/"); + const lastSearchParam = url.lastIndexOf("?"); + const prefix = url.substring(0, lastSlash); + const suffix = lastSearchParam > lastSlash ? url.substring(lastSearchParam) : ""; + return [prefix + "/", suffix]; + } + function isHTTPScheme(url) { + return url.match(HTTPRequest.URL_SCHEME_REGEX) != null; + } + var httpRouter = (url, loadOptions) => { + if (typeof fetch === "undefined" && (loadOptions == null || loadOptions.fetchFunc == null)) { + return null; + } else { + let isHTTP = true; + if (Array.isArray(url)) { + isHTTP = url.every((urlItem) => isHTTPScheme(urlItem)); + } else { + isHTTP = isHTTPScheme(url); + } + if (isHTTP) { + return http(url, loadOptions); + } + } + return null; + }; + IORouterRegistry.registerSaveRouter(httpRouter); + IORouterRegistry.registerLoadRouter(httpRouter); + function http(path, loadOptions) { + return new HTTPRequest(path, loadOptions); + } + function browserHTTPRequest(path, loadOptions) { + return http(path, loadOptions); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/io/passthrough.js + init_define_BUILD_VERSION(); + var PassthroughLoader = class { + constructor(modelArtifacts) { + this.modelArtifacts = modelArtifacts; + } + load() { + return this.modelArtifacts; + } + }; + var PassthroughSaver = class { + constructor(saveHandler) { + this.saveHandler = saveHandler; + } + save(modelArtifacts) { + return this.saveHandler(modelArtifacts); + } + }; + var PassthroughAsync = class { + constructor(handler) { + if (handler.load) { + this.load = () => Promise.resolve(handler.load()); + } + if (handler.save) { + this.save = (modelArtifacts) => Promise.resolve(handler.save(modelArtifacts)); + } + } + }; + function fromMemory(modelArtifacts, weightSpecs, weightData, trainingConfig) { + const args = arguments; + return new PassthroughAsync(fromMemorySync(...args)); + } + function fromMemorySync(modelArtifacts, weightSpecs, weightData, trainingConfig) { + if (arguments.length === 1) { + const isModelArtifacts = modelArtifacts.modelTopology != null || modelArtifacts.weightSpecs != null; + if (isModelArtifacts) { + return new PassthroughLoader(modelArtifacts); + } else { + console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."); + return new PassthroughLoader({ modelTopology: modelArtifacts }); + } + } else { + console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."); + return new PassthroughLoader({ + modelTopology: modelArtifacts, + weightSpecs, + weightData, + trainingConfig + }); + } + } + function withSaveHandler(saveHandler) { + return new PassthroughSaver(saveHandler); + } + function withSaveHandlerSync(saveHandler) { + return new PassthroughSaver(saveHandler); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/mat_mul.js + init_define_BUILD_VERSION(); + function matMul_(a, b, transposeA = false, transposeB = false) { + let $a = convertToTensor(a, "a", "matMul"); + let $b = convertToTensor(b, "b", "matMul"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + const attrs = { transposeA, transposeB }; + return ENGINE.runKernel(BatchMatMul, inputs, attrs); + } + var matMul = op({ matMul_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/one_hot.js + init_define_BUILD_VERSION(); + function oneHot_(indices, depth, onValue = 1, offValue = 0) { + if (depth < 2) { + throw new Error(`Error in oneHot: depth must be >=2, but it is ${depth}`); + } + const $indices = convertToTensor(indices, "indices", "oneHot", "int32"); + const inputs = { indices: $indices }; + const attrs = { depth, onValue, offValue }; + return ENGINE.runKernel(OneHot, inputs, attrs); + } + var oneHot = op({ oneHot_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/transpose.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/globals.js + init_define_BUILD_VERSION(); + function enableProdMode() { + env().set("PROD", true); + } + function deprecationWarn(msg) { + if (env().getBool("DEPRECATION_WARNINGS_ENABLED")) { + console.warn(msg + " You can disable deprecation warnings with tf.disableDeprecationWarnings()."); + } + } + setDeprecationWarningFn(deprecationWarn); + function engine() { + return ENGINE; + } + function memory() { + return ENGINE.memory(); + } + function tidy(nameOrFn, fn) { + return ENGINE.tidy(nameOrFn, fn); + } + function dispose(container) { + const tensors = getTensorsInContainer(container); + tensors.forEach((tensor2) => tensor2.dispose()); + } + function keep(result) { + return ENGINE.keep(result); + } + function setBackend(backendName) { + return ENGINE.setBackend(backendName); + } + function registerBackend(name, factory, priority = 1) { + return ENGINE.registerBackend(name, factory, priority); + } + function backend() { + return ENGINE.backend; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/imag.js + init_define_BUILD_VERSION(); + function imag_(input2) { + const $input = convertToTensor(input2, "input", "imag"); + const inputs = { input: $input }; + return ENGINE.runKernel(Imag, inputs); + } + var imag = op({ imag_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/neg.js + init_define_BUILD_VERSION(); + function neg_(x) { + const $x = convertToTensor(x, "x", "neg"); + const inputs = { x: $x }; + return ENGINE.runKernel(Neg, inputs); + } + var neg = op({ neg_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/real.js + init_define_BUILD_VERSION(); + function real_(input2) { + const $input = convertToTensor(input2, "input", "real"); + const inputs = { input: $input }; + return ENGINE.runKernel(Real, inputs); + } + var real = op({ real_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/transpose.js + function transpose_(x, perm, conjugate) { + const $x = convertToTensor(x, "x", "transpose"); + if (perm == null) { + perm = $x.shape.map((s, i) => i).reverse(); + } + assert($x.rank === perm.length, () => `Error in transpose: rank of input ${$x.rank} must match length of perm ${perm}.`); + perm.forEach((axis) => { + assert(axis >= 0 && axis < $x.rank, () => `All entries in 'perm' must be between 0 and ${$x.rank - 1} but got ${perm}`); + }); + if ($x.rank <= 1) { + return $x.clone(); + } + const inputs = { x: $x }; + const attrs = { perm }; + if ($x.dtype === "complex64") { + return tidy(() => { + let $real = real($x); + let $imag = imag($x); + $real = ENGINE.runKernel(Transpose, { x: $real }, attrs); + $imag = ENGINE.runKernel(Transpose, { x: $imag }, attrs); + if (conjugate) { + $imag = neg($imag); + } + return complex($real, $imag); + }); + } + return ENGINE.runKernel(Transpose, inputs, attrs); + } + var transpose = op({ transpose_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_util.js + var broadcast_util_exports = {}; + __export(broadcast_util_exports, { + assertAndGetBroadcastShape: () => assertAndGetBroadcastShape, + getBroadcastDims: () => getBroadcastDims, + getReductionAxes: () => getReductionAxes + }); + init_define_BUILD_VERSION(); + function getBroadcastDims(inShape, outShape) { + const inRank = inShape.length; + const dims = []; + for (let i = 0; i < inRank; i++) { + const dim = inRank - 1 - i; + const a = inShape[dim] || 1; + const b = outShape[outShape.length - 1 - i] || 1; + if (b > 1 && a === 1) { + dims.unshift(dim); + } + } + return dims; + } + function getReductionAxes(inShape, outShape) { + const result = []; + for (let i = 0; i < outShape.length; i++) { + const inDim = inShape[inShape.length - i - 1]; + const outAxis = outShape.length - i - 1; + const outDim = outShape[outAxis]; + if (inDim == null || inDim === 1 && outDim > 1) { + result.unshift(outAxis); + } + } + return result; + } + function assertAndGetBroadcastShape(shapeA, shapeB) { + const result = []; + const l = Math.max(shapeA.length, shapeB.length); + for (let i = 0; i < l; i++) { + let a = shapeA[shapeA.length - i - 1]; + if (a == null) { + a = 1; + } + let b = shapeB[shapeB.length - i - 1]; + if (b == null) { + b = 1; + } + if (a === 1) { + result.unshift(b); + } else if (b === 1) { + result.unshift(a); + } else if (a !== b) { + const errMsg = `Operands could not be broadcast together with shapes ${shapeA} and ${shapeB}.`; + throw Error(errMsg); + } else { + result.unshift(a); + } + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor3d.js + init_define_BUILD_VERSION(); + function tensor3d(values, shape, dtype) { + assertNonNull(values); + if (shape != null && shape.length !== 3) { + throw new Error("tensor3d() requires shape to have three numbers"); + } + const inferredShape = inferShape(values, dtype); + if (inferredShape.length !== 3 && inferredShape.length !== 1) { + throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray"); + } + if (inferredShape.length === 1 && shape == null) { + throw new Error("tensor3d() requires shape to be provided when `values` are a flat array"); + } + return makeTensor(values, shape, inferredShape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd_util.js + var gather_nd_util_exports = {}; + __export(gather_nd_util_exports, { + prepareAndValidate: () => prepareAndValidate + }); + init_define_BUILD_VERSION(); + function prepareAndValidate(tensor2, indices) { + const tensorRank = tensor2.shape.length; + const indicesRank = indices.shape.length; + if (tensorRank < 1) { + throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${tensorRank}.`); + } + if (indicesRank < 1) { + throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${indicesRank}.`); + } + if (indices.dtype !== "int32") { + throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${indices.dtype}.`); + } + if (indices.shape[indicesRank - 1] > tensorRank) { + throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${indices.shape[indicesRank - 1]} vs. ${tensorRank}`); + } + if (sizeFromShape(tensor2.shape) === 0) { + throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${tensor2.shape}.`); + } + const indicesShape = indices.shape; + const sliceRank = indicesShape[indicesShape.length - 1]; + let nResult = 1; + for (let i = 0; i < indicesShape.length - 1; ++i) { + nResult *= indicesShape[i]; + } + const inputShape = tensor2.shape; + const resultShape = indicesShape.slice(); + resultShape.pop(); + let sliceSize = 1; + for (let i = sliceRank; i < tensorRank; ++i) { + sliceSize *= inputShape[i]; + resultShape.push(inputShape[i]); + } + const strides = [ + ...computeStrides(tensor2.shape).map((stride) => stride / sliceSize), + 1 + ].slice(0, sliceRank); + return [resultShape, nResult, sliceSize, strides]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd_util.js + var scatter_nd_util_exports = {}; + __export(scatter_nd_util_exports, { + calculateShapes: () => calculateShapes, + validateInput: () => validateInput, + validateUpdateShape: () => validateUpdateShape + }); + init_define_BUILD_VERSION(); + function validateUpdateShape(shape, indices, updates) { + const sliceDim = indices.rank > 1 ? indices.shape[indices.rank - 1] : 1; + const batchDim = indices.rank > 1 ? indices.rank - 1 : 1; + const shapeError = `Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${updates.shape}, indices.shape: ${indices.shape}, shape: ${shape}, sliceDim: ${sliceDim}, and batchDim: ${batchDim}.`; + if (updates.rank < batchDim) { + throw new Error(shapeError + ` update.rank < ${batchDim}. `); + } + if (shape.length < sliceDim + (updates.rank - batchDim)) { + throw new Error(shapeError + ` Output shape length < ${sliceDim + (updates.rank - batchDim)}`); + } + if (updates.rank !== batchDim + shape.length - sliceDim) { + throw new Error(shapeError + ` update.rank != ${batchDim + shape.length - sliceDim}`); + } + for (let d = 0; d < batchDim; ++d) { + if (updates.shape[d] !== indices.shape[d]) { + throw new Error(shapeError + ` updates.shape[${d}] (${updates.shape[d]}) != indices.shape[${d}] (${indices.shape[d]}).`); + } + } + for (let d = 0; d < updates.rank - batchDim; ++d) { + if (updates.shape[d + batchDim] !== shape[d + sliceDim]) { + throw new Error(shapeError + ` updates.shape[${d + batchDim}] (${updates.shape[d + batchDim]}) != shape[${d + batchDim}] (${shape[d + batchDim]})`); + } + } + } + function validateInput(updates, indices, shape) { + if (indices.rank < 1) { + throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${indices.rank}.`); + } + if (updates.rank < 1) { + throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${updates.rank}.`); + } + if (indices.dtype !== "int32") { + throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${indices.dtype}`); + } + if (shape.length < 1) { + throw new Error(`Output rank must be greater or equal to 1, but got shape: ${shape}`); + } + if (shape.length === 0) { + if (indices.size === 0) { + throw new Error(`Indices specified for empty output. indices shape: ${indices.shape}`); + } + if (updates.size === 0) { + throw new Error(`Updates specified for empty output. updates shape: ${updates.shape}`); + } + } + validateUpdateShape(shape, indices, updates); + } + function calculateShapes(updates, indices, shape) { + const indicesRank = indices.shape.length; + const sliceRank = indicesRank > 1 ? indices.shape[indicesRank - 1] : 1; + const totalNd = shape.length; + let sliceSize = 1; + for (let i = sliceRank; i < totalNd; ++i) { + sliceSize *= shape[i]; + } + const safeSliceDim = sliceRank < 1 ? 1 : sliceRank; + const numUpdates = sizeFromShape(indices.shape) / safeSliceDim; + const strides = [...computeStrides(shape.slice(0, sliceRank)), 1]; + const outputSize = sizeFromShape(shape); + return { sliceRank, numUpdates, sliceSize, strides, outputSize }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice_util.js + var slice_util_exports = {}; + __export(slice_util_exports, { + assertParamsValid: () => assertParamsValid, + computeFlatOffset: () => computeFlatOffset, + computeOutShape: () => computeOutShape, + getNormalizedAxes: () => getNormalizedAxes, + isSliceContinous: () => isSliceContinous, + maskToAxes: () => maskToAxes, + parseSliceParams: () => parseSliceParams, + sliceInfo: () => sliceInfo, + startForAxis: () => startForAxis, + startIndicesWithElidedDims: () => startIndicesWithElidedDims, + stopForAxis: () => stopForAxis, + stopIndicesWithElidedDims: () => stopIndicesWithElidedDims, + stridesForAxis: () => stridesForAxis, + stridesWithElidedDims: () => stridesWithElidedDims + }); + init_define_BUILD_VERSION(); + var NEW_AXIS = -2; + var SHRINK_AXIS = -1; + function assertParamsValid(input2, begin, size) { + const inputRank = input2.shape.length; + assert(inputRank === begin.length, () => `Error in slice${inputRank}D: Length of begin ${begin} must match the rank of the array (${inputRank}).`); + assert(inputRank === size.length, () => `Error in slice${inputRank}D: Length of size ${size} must match the rank of the array (${inputRank}).`); + for (let i = 0; i < inputRank; ++i) { + assert(begin[i] + size[i] <= input2.shape[i], () => `Error in slice${inputRank}D: begin[${i}] + size[${i}] (${begin[i] + size[i]}) would overflow input.shape[${i}] (${input2.shape[i]})`); + } + } + function maskToAxes(mask) { + const axes = []; + let axis = 0; + while (mask > 0) { + if (mask & 1) { + axes.push(axis); + } + mask /= 2; + axis++; + } + return axes; + } + function computeOutShape(begin, end, strides) { + const size = []; + for (let axis = 0; axis < begin.length; axis++) { + size[axis] = Math.ceil((end[axis] - begin[axis]) / strides[axis]); + } + return size; + } + function stridesWithElidedDims(strides, ellipsisInsertionIndex, numElidedAxes, inputShape) { + const newStrides = [...strides]; + for (let i = newStrides.length; i < inputShape.length; i++) { + newStrides.push(1); + } + for (let i = 0; i < numElidedAxes; i++) { + if (i === 0) { + newStrides[ellipsisInsertionIndex] = 1; + } else { + newStrides.splice(ellipsisInsertionIndex, 0, 1); + newStrides.pop(); + } + } + return newStrides; + } + function unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, normalizedAxis) { + if (normalizedAxis <= ellipsisInsertionIndex) { + return normalizedAxis; + } + return normalizedAxis - (numElidedAxes - 1); + } + function getElidedAxes(numElidedAxes, ellipsisInsertionIndex) { + const elidedAxes = []; + for (let i = 0; i < numElidedAxes; i++) { + elidedAxes.push(ellipsisInsertionIndex + i); + } + return elidedAxes; + } + function getNormalizedAxes(inputShape, ellipsisAxes, numInterpolatedAxes, begin, end, strides, beginMask, endMask, ellipsisMask) { + const inputRank = inputShape.length; + let normalizedBegin = new Array(inputRank), normalizedEnd = new Array(inputRank), normalizedStrides = new Array(inputRank); + if (ellipsisAxes.length && numInterpolatedAxes > 0) { + const fullIndex = ellipsisAxes[0]; + const numElidedAxes = numInterpolatedAxes + 1; + normalizedBegin = startIndicesWithElidedDims(beginMask, fullIndex, numElidedAxes, begin, inputShape); + normalizedEnd = stopIndicesWithElidedDims(endMask, fullIndex, numElidedAxes, end, inputShape); + normalizedStrides = stridesWithElidedDims(strides, fullIndex, numElidedAxes, inputShape); + } else { + for (let axis = 0; axis < inputRank; axis++) { + normalizedBegin[axis] = startForAxis(beginMask, begin, strides, inputShape, axis, ellipsisMask); + normalizedEnd[axis] = stopForAxis(endMask, end, strides, inputShape, axis, ellipsisMask); + normalizedStrides[axis] = stridesForAxis(strides, axis, ellipsisMask); + } + } + return { + begin: normalizedBegin, + end: normalizedEnd, + strides: normalizedStrides + }; + } + function startIndicesWithElidedDims(beginMask, ellipsisInsertionIndex, numElidedAxes, originalBegin, inputShape) { + const newIndices = [...inputShape]; + const elidedAxes = getElidedAxes(numElidedAxes, ellipsisInsertionIndex); + for (let axis = 0; axis < newIndices.length; axis++) { + if (elidedAxes.indexOf(axis) > -1) { + newIndices[axis] = 0; + } else { + const originalAxis = unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, axis); + let originalValue = originalBegin[originalAxis]; + if (beginMask & 1 << originalAxis) { + originalValue = 0; + } + newIndices[axis] = originalValue; + } + } + return newIndices; + } + function stopIndicesWithElidedDims(endMask, ellipsisInsertionIndex, numElidedAxes, originalEnd, inputShape) { + const newIndices = [...inputShape]; + const elidedAxes = getElidedAxes(numElidedAxes, ellipsisInsertionIndex); + for (let axis = 0; axis < newIndices.length; axis++) { + if (elidedAxes.indexOf(axis) > -1) { + newIndices[axis] = Number.MAX_SAFE_INTEGER; + } else { + const originalAxis = unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, axis); + let originalValue = originalEnd[originalAxis]; + if (endMask & 1 << originalAxis) { + originalValue = Number.MAX_SAFE_INTEGER; + } + newIndices[axis] = originalValue; + } + } + for (let i = 0; i < newIndices.length; i++) { + const axisSize = inputShape[i]; + if (newIndices[i] < 0) { + newIndices[i] += axisSize; + } + newIndices[i] = clamp(0, newIndices[i], inputShape[i]); + } + return newIndices; + } + function stridesForAxis(strides, axis, ellipsisMask) { + let stride = strides[axis]; + if (ellipsisMask & 1 << axis || stride == null) { + stride = 1; + } + return stride; + } + function startForAxis(beginMask, startIndices, strides, inputShape, axis, ellipsisMask) { + let start = startIndices[axis]; + const stride = strides[axis] || 1; + if (beginMask & 1 << axis || ellipsisMask & 1 << axis || start == null) { + if (stride > 0) { + start = Number.MIN_SAFE_INTEGER; + } else { + start = Number.MAX_SAFE_INTEGER; + } + } + const axisSize = inputShape[axis]; + if (start < 0) { + start += axisSize; + } + start = clamp(0, start, axisSize - 1); + return start; + } + function stopForAxis(endMask, stopIndices, strides, inputShape, axis, ellipsisMask) { + let stop = stopIndices[axis]; + const stride = strides[axis] || 1; + if (endMask & 1 << axis || ellipsisMask & 1 << axis || stop == null) { + if (stride > 0) { + stop = Number.MAX_SAFE_INTEGER; + } else { + stop = Number.MIN_SAFE_INTEGER; + } + } + const axisSize = inputShape[axis]; + if (stop < 0) { + stop += axisSize; + } + if (stride > 0) { + stop = clamp(0, stop, axisSize); + } else { + stop = clamp(-1, stop, axisSize - 1); + } + return stop; + } + function isSliceContinous(shape, begin, size) { + let firstNonOneAxis = size.length; + for (let i = 0; i < size.length; i++) { + if (size[i] > 1) { + firstNonOneAxis = i; + break; + } + } + for (let i = firstNonOneAxis + 1; i < size.length; i++) { + if (begin[i] > 0 || size[i] !== shape[i]) { + return false; + } + } + return true; + } + function computeFlatOffset(begin, strides) { + let flatOffset = begin.length > 0 ? begin[begin.length - 1] : 1; + for (let i = 0; i < begin.length - 1; i++) { + flatOffset += begin[i] * strides[i]; + } + return flatOffset; + } + function parseSliceParams(x, begin, size) { + let begin_; + const xRank = x.shape.length; + if (typeof begin === "number") { + begin_ = [begin, ...new Array(xRank - 1).fill(0)]; + } else if (begin.length < xRank) { + begin_ = begin.concat(new Array(xRank - begin.length).fill(0)); + } else { + begin_ = begin.slice(); + } + begin_.forEach((d) => { + assert(d !== -1, () => "slice() does not support negative begin indexing."); + }); + let size_; + if (size == null) { + size_ = new Array(xRank).fill(-1); + } else if (typeof size === "number") { + size_ = [size, ...new Array(xRank - 1).fill(-1)]; + } else if (size.length < xRank) { + size_ = size.concat(new Array(xRank - size.length).fill(-1)); + } else { + size_ = size; + } + size_ = size_.map((d, i) => { + if (d >= 0) { + return d; + } else { + assert(d === -1, () => `Negative size values should be exactly -1 but got ${d} for the slice() size at index ${i}.`); + return x.shape[i] - begin_[i]; + } + }); + return [begin_, size_]; + } + function sliceInfo(xShape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask) { + let stridesNonNull; + if (strides == null) { + stridesNonNull = new Array(begin.length); + stridesNonNull.fill(1); + } else { + stridesNonNull = strides; + } + if (ellipsisMask != null && (ellipsisMask & ellipsisMask - 1) !== 0) { + throw new Error("Multiple ellipses in slice is not allowed."); + } + let ellipsisSeen = false; + const sparseSpec = { + dims: stridesNonNull.length, + numAddAxisAfterEllipsis: 0, + begin: begin.slice(), + end: end.slice(), + strides: stridesNonNull.slice(), + beginMask, + endMask, + ellipsisMask, + newAxisMask, + shrinkAxisMask + }; + for (let i = 0; i < sparseSpec.dims; i++) { + if (ellipsisSeen && (1 << i & newAxisMask) !== 0) { + sparseSpec.numAddAxisAfterEllipsis++; + } + if (1 << i & ellipsisMask) { + ellipsisSeen = true; + } + } + if (!ellipsisSeen) { + sparseSpec.ellipsisMask |= 1 << sparseSpec.dims; + sparseSpec.dims++; + } + const denseSpec = { + dims: xShape.length, + beginMask: 0, + endMask: 0, + beginValid: false, + endValid: false + }; + buildDenseSpec(sparseSpec, denseSpec); + let isIdentity = true; + let sliceDim0 = true; + let isSimpleSlice = true; + const processingShape = []; + const finalShape = []; + for (let i = 0; i < xShape.length; ++i) { + if (denseSpec.strides[i] === 0) { + throw Error(`strides[${i}] must be non-zero`); + } + const shrinkI = !!(denseSpec.shrinkAxisMask & 1 << i); + const dimI = xShape[i]; + if (dimI === -1) { + processingShape.push(shrinkI ? 1 : -1); + continue; + } + const masks = [denseSpec.beginMask & 1 << i, denseSpec.endMask & 1 << i]; + const validRange = [ + denseSpec.strides[i] > 0 ? 0 : -1, + denseSpec.strides[i] > 0 ? dimI : dimI - 1 + ]; + if (shrinkI && denseSpec.strides[i] <= 0) { + throw Error("only stride 1 allowed on non-range indexing."); + } + isSimpleSlice = isSimpleSlice && denseSpec.strides[i] === 1; + const beginAndEndMasked = !!(denseSpec.beginMask & 1 << i && denseSpec.endMask & 1 << i); + if (denseSpec.beginValid && denseSpec.endValid) { + if (shrinkI) { + const xFwd = denseSpec.begin[i] < 0 ? dimI + denseSpec.begin[i] : denseSpec.begin[i]; + denseSpec.begin[i] = xFwd; + denseSpec.end[i] = denseSpec.begin[i] + 1; + if (xFwd < 0 || xFwd >= dimI) { + throw Error(`slice index ${denseSpec.begin[i]} of dimension ${i} out of bounds.`); + } + } else { + denseSpec.begin[i] = canonical(denseSpec.begin[i], 0, denseSpec.strides[i], dimI, masks, validRange); + denseSpec.end[i] = canonical(denseSpec.end[i], 1, denseSpec.strides[i], dimI, masks, validRange); + } + const takeAllInDimension = denseSpec.strides[i] === 1 && denseSpec.begin[i] === 0 && denseSpec.end[i] === dimI; + isIdentity = isIdentity && takeAllInDimension; + sliceDim0 = sliceDim0 && (i === 0 && denseSpec.strides[i] === 1 || takeAllInDimension); + } else { + isIdentity = isIdentity && (denseSpec.strides[i] === 1 && beginAndEndMasked); + sliceDim0 = sliceDim0 && (i === 0 && denseSpec.strides[i] === 1 || beginAndEndMasked); + } + let intervalLength; + let knownInterval = false; + if (denseSpec.beginValid && denseSpec.endValid) { + intervalLength = denseSpec.end[i] - denseSpec.begin[i]; + knownInterval = true; + } else if (shrinkI) { + intervalLength = 1; + knownInterval = true; + } else if (beginAndEndMasked) { + if (dimI >= 0) { + if (denseSpec.strides[i] < 0) { + intervalLength = -dimI; + } else { + intervalLength = dimI; + } + knownInterval = true; + } + } + if (knownInterval) { + let sizeI; + if (intervalLength === 0 || intervalLength < 0 !== denseSpec.strides[i] < 0) { + sizeI = 0; + } else { + sizeI = Math.trunc(intervalLength / denseSpec.strides[i]) + (intervalLength % denseSpec.strides[i] !== 0 ? 1 : 0); + } + processingShape.push(sizeI); + } else { + processingShape.push(-1); + } + } + for (let denseDim = 0; denseDim < denseSpec.finalShapeGatherIndices.length; ++denseDim) { + const gatherIndex = denseSpec.finalShapeGatherIndices[denseDim]; + if (gatherIndex >= 0) { + finalShape.push(processingShape[gatherIndex]); + } else if (gatherIndex === NEW_AXIS) { + finalShape.push(1); + } + } + const finalShapeSparse = finalShape.filter((dim, i) => denseSpec.finalShapeGatherIndices[i] !== NEW_AXIS); + return { + finalShapeSparse, + finalShape, + isIdentity, + sliceDim0, + isSimpleSlice, + begin: denseSpec.begin, + end: denseSpec.end, + strides: denseSpec.strides + }; + } + function buildDenseSpec(sparse, dense) { + dense.beginMask = 0; + dense.endMask = 0; + dense.shrinkAxisMask = 0; + let fullIndex = 0; + dense.beginValid = sparse.begin != null; + dense.endValid = sparse.end != null; + dense.begin = new Array(dense.dims); + dense.end = new Array(dense.dims); + dense.strides = new Array(dense.dims); + dense.finalShapeGatherIndices = []; + dense.finalShapeGatherIndicesSparse = []; + dense.inputShapeGatherIndicesSparse = new Array(dense.dims); + for (let i = 0; i < sparse.dims; i++) { + if (1 << i & sparse.ellipsisMask) { + const nextIndex = Math.min(dense.dims - (sparse.dims - i) + 1 + sparse.numAddAxisAfterEllipsis, dense.dims); + for (; fullIndex < nextIndex; fullIndex++) { + dense.begin[fullIndex] = 0; + dense.end[fullIndex] = 0; + dense.strides[fullIndex] = 1; + dense.beginMask |= 1 << fullIndex; + dense.endMask |= 1 << fullIndex; + dense.finalShapeGatherIndices.push(fullIndex); + dense.finalShapeGatherIndicesSparse.push(-1); + dense.inputShapeGatherIndicesSparse[fullIndex] = i; + } + } else if (1 << i & sparse.newAxisMask) { + dense.finalShapeGatherIndices.push(NEW_AXIS); + dense.finalShapeGatherIndicesSparse.push(-1); + } else { + if (fullIndex === dense.begin.length) { + throw Error(`Index out of range using input dim ${fullIndex}; input has only ${dense.dims} dims, ${dense.begin.length}.`); + } + if (sparse.begin != null) { + dense.begin[fullIndex] = sparse.begin[i]; + } + if (sparse.end != null) { + dense.end[fullIndex] = sparse.end[i]; + } + dense.strides[fullIndex] = sparse.strides[i]; + if (sparse.beginMask & 1 << i) { + dense.beginMask |= 1 << fullIndex; + } + if (sparse.endMask & 1 << i) { + dense.endMask |= 1 << fullIndex; + } + if (sparse.shrinkAxisMask & 1 << i) { + dense.finalShapeGatherIndices.push(SHRINK_AXIS); + dense.finalShapeGatherIndicesSparse.push(-1); + dense.shrinkAxisMask |= 1 << fullIndex; + } else { + dense.finalShapeGatherIndices.push(fullIndex); + dense.finalShapeGatherIndicesSparse.push(i); + } + dense.inputShapeGatherIndicesSparse[fullIndex] = i; + fullIndex++; + } + } + } + function canonical(x, c, strideI, dimI, masks, validRange) { + if (masks[c]) { + return strideI > 0 ? validRange[c] : validRange[c + 1 & 1]; + } else { + const xFwd = x < 0 ? dimI + x : x; + return xFwd < validRange[0] ? validRange[0] : xFwd > validRange[1] ? validRange[1] : xFwd; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/serialization.js + var serialization_exports = {}; + __export(serialization_exports, { + Serializable: () => Serializable, + SerializationMap: () => SerializationMap, + registerClass: () => registerClass + }); + init_define_BUILD_VERSION(); + var Serializable = class { + getClassName() { + return this.constructor.className; + } + static fromConfig(cls, config) { + return new cls(config); + } + }; + var SerializationMap = class { + constructor() { + this.classNameMap = {}; + } + static getMap() { + if (SerializationMap.instance == null) { + SerializationMap.instance = new SerializationMap(); + } + return SerializationMap.instance; + } + static register(cls) { + SerializationMap.getMap().classNameMap[cls.className] = [cls, cls.fromConfig]; + } + }; + function registerClass(cls) { + assert(cls.className != null, () => `Class being registered does not have the static className property defined.`); + assert(typeof cls.className === "string", () => `className is required to be a string, but got type ` + typeof cls.className); + assert(cls.className.length > 0, () => `Class being registered has an empty-string as its className, which is disallowed.`); + SerializationMap.register(cls); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adadelta_optimizer.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/add.js + init_define_BUILD_VERSION(); + function add_(a, b) { + let $a = convertToTensor(a, "a", "add"); + let $b = convertToTensor(b, "b", "add"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Add, inputs); + } + var add2 = op({ add_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/div.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/floorDiv.js + init_define_BUILD_VERSION(); + function floorDiv_(a, b) { + let $a = convertToTensor(a, "a", "floorDiv"); + let $b = convertToTensor(b, "b", "floorDiv"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(FloorDiv, inputs); + } + var floorDiv = op({ floorDiv_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/div.js + function div_(a, b) { + let $a = convertToTensor(a, "a", "div"); + let $b = convertToTensor(b, "b", "div"); + [$a, $b] = makeTypesMatch($a, $b); + if ($a.dtype === "int32" && $b.dtype === "int32") { + return floorDiv($a, $b); + } + const inputs = { a: $a, b: $b }; + const attrs = {}; + return ENGINE.runKernel(RealDiv, inputs, attrs); + } + var div = op({ div_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/mul.js + init_define_BUILD_VERSION(); + function mul_(a, b) { + let $a = convertToTensor(a, "a", "mul"); + let $b = convertToTensor(b, "b", "mul"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Multiply, inputs); + } + var mul = op({ mul_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ops.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/abs.js + init_define_BUILD_VERSION(); + function abs_(x) { + const $x = convertToTensor(x, "x", "abs"); + if ($x.dtype === "complex64") { + const inputs = { x: $x }; + return ENGINE.runKernel(ComplexAbs, inputs); + } else { + const inputs = { x: $x }; + return ENGINE.runKernel(Abs, inputs); + } + } + var abs = op({ abs_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/acos.js + init_define_BUILD_VERSION(); + function acos_(x) { + const $x = convertToTensor(x, "x", "acos"); + const inputs = { x: $x }; + return ENGINE.runKernel(Acos, inputs); + } + var acos = op({ acos_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/acosh.js + init_define_BUILD_VERSION(); + function acosh_(x) { + const $x = convertToTensor(x, "x", "acosh"); + const inputs = { x: $x }; + return ENGINE.runKernel(Acosh, inputs); + } + var acosh = op({ acosh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/all.js + init_define_BUILD_VERSION(); + function all_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "all", "bool"); + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(All, inputs, attrs); + } + var all = op({ all_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/any.js + init_define_BUILD_VERSION(); + function any_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "any", "bool"); + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(Any, inputs, attrs); + } + var any = op({ any_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/arg_max.js + init_define_BUILD_VERSION(); + function argMax_(x, axis = 0) { + const $x = convertToTensor(x, "x", "argMax"); + const inputs = { x: $x }; + const attrs = { axis }; + return ENGINE.runKernel(ArgMax, inputs, attrs); + } + var argMax = op({ argMax_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/arg_min.js + init_define_BUILD_VERSION(); + function argMin_(x, axis = 0) { + const $x = convertToTensor(x, "x", "argMin"); + const inputs = { x: $x }; + const attrs = { axis }; + return ENGINE.runKernel(ArgMin, inputs, attrs); + } + var argMin = op({ argMin_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/asin.js + init_define_BUILD_VERSION(); + function asin_(x) { + const $x = convertToTensor(x, "x", "asin"); + const inputs = { x: $x }; + return ENGINE.runKernel(Asin, inputs); + } + var asin = op({ asin_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/asinh.js + init_define_BUILD_VERSION(); + function asinh_(x) { + const $x = convertToTensor(x, "x", "asinh"); + const inputs = { x: $x }; + return ENGINE.runKernel(Asinh, inputs); + } + var asinh = op({ asinh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/atan.js + init_define_BUILD_VERSION(); + function atan_(x) { + const $x = convertToTensor(x, "x", "atan"); + const inputs = { x: $x }; + return ENGINE.runKernel(Atan, inputs); + } + var atan = op({ atan_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/atan2.js + init_define_BUILD_VERSION(); + function atan2_(a, b) { + let $a = convertToTensor(a, "a", "atan2"); + let $b = convertToTensor(b, "b", "atan2"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Atan2, inputs); + } + var atan2 = op({ atan2_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/atanh.js + init_define_BUILD_VERSION(); + function atanh_(x) { + const $x = convertToTensor(x, "x", "atanh"); + const inputs = { x: $x }; + return ENGINE.runKernel(Atanh, inputs); + } + var atanh = op({ atanh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv_util.js + init_define_BUILD_VERSION(); + function computeDilation2DInfo(inputShape, filterShape, strides, pad3, dataFormat = "NHWC", dilations) { + const inputChannels = inputShape[3]; + const $filterShape = [...filterShape, inputChannels]; + const $dataFormat = convertConv2DDataFormat(dataFormat); + return computeConv2DInfo(inputShape, $filterShape, strides, dilations, pad3, null, null, $dataFormat); + } + function computePool2DInfo(inShape, filterSize, strides, dilations, pad3, roundingMode, dataFormat = "channelsLast") { + const [filterHeight, filterWidth] = parseTupleParam(filterSize); + let filterShape; + if (dataFormat === "channelsLast") { + filterShape = [filterHeight, filterWidth, inShape[3], inShape[3]]; + } else if (dataFormat === "channelsFirst") { + filterShape = [filterHeight, filterWidth, inShape[1], inShape[1]]; + } else { + throw new Error(`Unknown dataFormat ${dataFormat}`); + } + return computeConv2DInfo(inShape, filterShape, strides, dilations, pad3, roundingMode, false, dataFormat); + } + function computePool3DInfo(inShape, filterSize, strides, dilations, pad3, roundingMode, dataFormat = "NDHWC") { + const [filterDepth, filterHeight, filterWidth] = parse3TupleParam(filterSize); + let filterShape; + let $dataFormat; + if (dataFormat === "NDHWC") { + $dataFormat = "channelsLast"; + filterShape = [filterDepth, filterHeight, filterWidth, inShape[4], inShape[4]]; + } else if (dataFormat === "NCDHW") { + $dataFormat = "channelsFirst"; + filterShape = [filterDepth, filterHeight, filterWidth, inShape[1], inShape[1]]; + } else { + throw new Error(`Unknown dataFormat ${dataFormat}`); + } + return computeConv3DInfo(inShape, filterShape, strides, dilations, pad3, false, $dataFormat, roundingMode); + } + function computeConv2DInfo(inShape, filterShape, strides, dilations, pad3, roundingMode, depthwise = false, dataFormat = "channelsLast") { + let [batchSize, inHeight, inWidth, inChannels] = [-1, -1, -1, -1]; + if (dataFormat === "channelsLast") { + [batchSize, inHeight, inWidth, inChannels] = inShape; + } else if (dataFormat === "channelsFirst") { + [batchSize, inChannels, inHeight, inWidth] = inShape; + } else { + throw new Error(`Unknown dataFormat ${dataFormat}`); + } + const [filterHeight, filterWidth, , filterChannels] = filterShape; + const [strideHeight, strideWidth] = parseTupleParam(strides); + const [dilationHeight, dilationWidth] = parseTupleParam(dilations); + const effectiveFilterHeight = getEffectiveFilterSize(filterHeight, dilationHeight); + const effectiveFilterWidth = getEffectiveFilterSize(filterWidth, dilationWidth); + const { padInfo, outHeight, outWidth } = getPadAndOutInfo(pad3, inHeight, inWidth, strideHeight, strideWidth, effectiveFilterHeight, effectiveFilterWidth, roundingMode, dataFormat); + const outChannels = depthwise ? filterChannels * inChannels : filterChannels; + let outShape; + if (dataFormat === "channelsFirst") { + outShape = [batchSize, outChannels, outHeight, outWidth]; + } else if (dataFormat === "channelsLast") { + outShape = [batchSize, outHeight, outWidth, outChannels]; + } + return { + batchSize, + dataFormat, + inHeight, + inWidth, + inChannels, + outHeight, + outWidth, + outChannels, + padInfo, + strideHeight, + strideWidth, + filterHeight, + filterWidth, + effectiveFilterHeight, + effectiveFilterWidth, + dilationHeight, + dilationWidth, + inShape, + outShape, + filterShape + }; + } + function computeConv3DInfo(inShape, filterShape, strides, dilations, pad3, depthwise = false, dataFormat = "channelsLast", roundingMode) { + let [batchSize, inDepth, inHeight, inWidth, inChannels] = [-1, -1, -1, -1, -1]; + if (dataFormat === "channelsLast") { + [batchSize, inDepth, inHeight, inWidth, inChannels] = inShape; + } else if (dataFormat === "channelsFirst") { + [batchSize, inChannels, inDepth, inHeight, inWidth] = inShape; + } else { + throw new Error(`Unknown dataFormat ${dataFormat}`); + } + const [filterDepth, filterHeight, filterWidth, , filterChannels] = filterShape; + const [strideDepth, strideHeight, strideWidth] = parse3TupleParam(strides); + const [dilationDepth, dilationHeight, dilationWidth] = parse3TupleParam(dilations); + const effectiveFilterDepth = getEffectiveFilterSize(filterDepth, dilationDepth); + const effectiveFilterHeight = getEffectiveFilterSize(filterHeight, dilationHeight); + const effectiveFilterWidth = getEffectiveFilterSize(filterWidth, dilationWidth); + const { padInfo, outDepth, outHeight, outWidth } = get3DPadAndOutInfo(pad3, inDepth, inHeight, inWidth, strideDepth, strideHeight, strideWidth, effectiveFilterDepth, effectiveFilterHeight, effectiveFilterWidth, roundingMode); + const outChannels = depthwise ? filterChannels * inChannels : filterChannels; + let outShape; + if (dataFormat === "channelsFirst") { + outShape = [batchSize, outChannels, outDepth, outHeight, outWidth]; + } else if (dataFormat === "channelsLast") { + outShape = [batchSize, outDepth, outHeight, outWidth, outChannels]; + } + return { + batchSize, + dataFormat, + inDepth, + inHeight, + inWidth, + inChannels, + outDepth, + outHeight, + outWidth, + outChannels, + padInfo, + strideDepth, + strideHeight, + strideWidth, + filterDepth, + filterHeight, + filterWidth, + effectiveFilterDepth, + effectiveFilterHeight, + effectiveFilterWidth, + dilationDepth, + dilationHeight, + dilationWidth, + inShape, + outShape, + filterShape + }; + } + function computeOutputShape2D(inShape, fieldSize, stride, zeroPad, roundingMode) { + if (zeroPad == null) { + zeroPad = computeDefaultPad(inShape, fieldSize, stride); + } + const inputRows = inShape[0]; + const inputCols = inShape[1]; + const outputRows = round((inputRows - fieldSize + 2 * zeroPad) / stride + 1, roundingMode); + const outputCols = round((inputCols - fieldSize + 2 * zeroPad) / stride + 1, roundingMode); + return [outputRows, outputCols]; + } + function computeOutputShape4D(inShape, fieldSize, outChannels, stride, zeroPad, roundingMode) { + if (zeroPad == null) { + zeroPad = computeDefaultPad(inShape, fieldSize, stride); + } + const inputDepth = inShape[0]; + const inputRows = inShape[1]; + const inputCols = inShape[2]; + const outputDepths = round((inputDepth - fieldSize + 2 * zeroPad) / stride + 1, roundingMode); + const outputRows = round((inputRows - fieldSize + 2 * zeroPad) / stride + 1, roundingMode); + const outputCols = round((inputCols - fieldSize + 2 * zeroPad) / stride + 1, roundingMode); + return [outputDepths, outputRows, outputCols, outChannels]; + } + function computeDefaultPad(inputShape, fieldSize, stride, dilation = 1) { + const effectiveFieldSize = getEffectiveFilterSize(fieldSize, dilation); + return Math.floor((inputShape[0] * (stride - 1) - stride + effectiveFieldSize) / 2); + } + function parseTupleParam(param) { + if (typeof param === "number") { + return [param, param, param]; + } + if (param.length === 2) { + return [param[0], param[1], 1]; + } + return param; + } + function parse3TupleParam(param) { + return typeof param === "number" ? [param, param, param] : param; + } + function getEffectiveFilterSize(filterSize, dilation) { + if (dilation <= 1) { + return filterSize; + } + return filterSize + (filterSize - 1) * (dilation - 1); + } + function getPadAndOutInfo(pad3, inHeight, inWidth, strideHeight, strideWidth, filterHeight, filterWidth, roundingMode, dataFormat) { + let padInfo; + let outHeight; + let outWidth; + if (typeof pad3 === "number") { + const padType = pad3 === 0 ? "VALID" : "NUMBER"; + padInfo = { top: pad3, bottom: pad3, left: pad3, right: pad3, type: padType }; + const outShape = computeOutputShape2D([inHeight, inWidth], filterHeight, strideHeight, pad3, roundingMode); + outHeight = outShape[0]; + outWidth = outShape[1]; + } else if (pad3 === "same") { + outHeight = Math.ceil(inHeight / strideHeight); + outWidth = Math.ceil(inWidth / strideWidth); + const padAlongHeight = Math.max(0, (outHeight - 1) * strideHeight + filterHeight - inHeight); + const padAlongWidth = Math.max(0, (outWidth - 1) * strideWidth + filterWidth - inWidth); + const top = Math.floor(padAlongHeight / 2); + const bottom = padAlongHeight - top; + const left = Math.floor(padAlongWidth / 2); + const right = padAlongWidth - left; + padInfo = { top, bottom, left, right, type: "SAME" }; + } else if (pad3 === "valid") { + padInfo = { top: 0, bottom: 0, left: 0, right: 0, type: "VALID" }; + outHeight = Math.ceil((inHeight - filterHeight + 1) / strideHeight); + outWidth = Math.ceil((inWidth - filterWidth + 1) / strideWidth); + } else if (typeof pad3 === "object") { + const top = dataFormat === "channelsLast" ? pad3[1][0] : pad3[2][0]; + const bottom = dataFormat === "channelsLast" ? pad3[1][1] : pad3[2][1]; + const left = dataFormat === "channelsLast" ? pad3[2][0] : pad3[3][0]; + const right = dataFormat === "channelsLast" ? pad3[2][1] : pad3[3][1]; + const padType = top === 0 && bottom === 0 && left === 0 && right === 0 ? "VALID" : "EXPLICIT"; + padInfo = { top, bottom, left, right, type: padType }; + outHeight = round((inHeight - filterHeight + top + bottom) / strideHeight + 1, roundingMode); + outWidth = round((inWidth - filterWidth + left + right) / strideWidth + 1, roundingMode); + } else { + throw Error(`Unknown padding parameter: ${pad3}`); + } + return { padInfo, outHeight, outWidth }; + } + function get3DPadAndOutInfo(pad3, inDepth, inHeight, inWidth, strideDepth, strideHeight, strideWidth, filterDepth, filterHeight, filterWidth, roundingMode) { + let padInfo; + let outDepth; + let outHeight; + let outWidth; + if (typeof pad3 === "number") { + const padType = pad3 === 0 ? "VALID" : "NUMBER"; + padInfo = { + top: pad3, + bottom: pad3, + left: pad3, + right: pad3, + front: pad3, + back: pad3, + type: padType + }; + const outShape = computeOutputShape4D([inDepth, inHeight, inWidth, 1], filterDepth, 1, strideDepth, pad3, roundingMode); + outDepth = outShape[0]; + outHeight = outShape[1]; + outWidth = outShape[2]; + } else if (pad3 === "same") { + outDepth = Math.ceil(inDepth / strideDepth); + outHeight = Math.ceil(inHeight / strideHeight); + outWidth = Math.ceil(inWidth / strideWidth); + const padAlongDepth = (outDepth - 1) * strideDepth + filterDepth - inDepth; + const padAlongHeight = (outHeight - 1) * strideHeight + filterHeight - inHeight; + const padAlongWidth = (outWidth - 1) * strideWidth + filterWidth - inWidth; + const front = Math.floor(padAlongDepth / 2); + const back = padAlongDepth - front; + const top = Math.floor(padAlongHeight / 2); + const bottom = padAlongHeight - top; + const left = Math.floor(padAlongWidth / 2); + const right = padAlongWidth - left; + padInfo = { top, bottom, left, right, front, back, type: "SAME" }; + } else if (pad3 === "valid") { + padInfo = { + top: 0, + bottom: 0, + left: 0, + right: 0, + front: 0, + back: 0, + type: "VALID" + }; + outDepth = Math.ceil((inDepth - filterDepth + 1) / strideDepth); + outHeight = Math.ceil((inHeight - filterHeight + 1) / strideHeight); + outWidth = Math.ceil((inWidth - filterWidth + 1) / strideWidth); + } else { + throw Error(`Unknown padding parameter: ${pad3}`); + } + return { padInfo, outDepth, outHeight, outWidth }; + } + function round(value, roundingMode) { + if (!roundingMode) { + return Math.trunc(value); + } + switch (roundingMode) { + case "round": + return Math.round(value); + case "ceil": + return Math.ceil(value); + case "floor": + return Math.floor(value); + default: + throw new Error(`Unknown roundingMode ${roundingMode}`); + } + } + function tupleValuesAreOne(param) { + const [dimA, dimB, dimC] = parseTupleParam(param); + return dimA === 1 && dimB === 1 && dimC === 1; + } + function eitherStridesOrDilationsAreOne(strides, dilations) { + return tupleValuesAreOne(strides) || tupleValuesAreOne(dilations); + } + function convertConv2DDataFormat(dataFormat) { + if (dataFormat === "NHWC") { + return "channelsLast"; + } else if (dataFormat === "NCHW") { + return "channelsFirst"; + } else { + throw new Error(`Unknown dataFormat ${dataFormat}`); + } + } + function checkPadOnDimRoundingMode(opDesc, pad3, dimRoundingMode) { + if (dimRoundingMode != null) { + if (typeof pad3 === "string") { + throw Error(`Error in ${opDesc}: pad must be an integer when using dimRoundingMode ${dimRoundingMode} but got pad ${pad3}.`); + } else if (typeof pad3 === "number") { + assert(isInt(pad3), () => `Error in ${opDesc}: pad must be an integer when using dimRoundingMode ${dimRoundingMode} but got pad ${pad3}.`); + } else if (typeof pad3 === "object") { + pad3.forEach((p2) => { + p2.forEach((v) => { + assert(isInt(v), () => `Error in ${opDesc}: pad must be an integer when using dimRoundingMode ${dimRoundingMode} but got pad ${v}.`); + }); + }); + } else { + throw Error(`Error in ${opDesc}: Unknown padding parameter: ${pad3}`); + } + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/reshape.js + init_define_BUILD_VERSION(); + function reshape_(x, shape) { + const $x = convertToTensor(x, "x", "reshape", "string_or_numeric"); + const inputs = { x: $x }; + const attrs = { shape }; + return ENGINE.runKernel(Reshape, inputs, attrs); + } + var reshape = op({ reshape_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool.js + function avgPool_(x, filterSize, strides, pad3, dimRoundingMode) { + const $x = convertToTensor(x, "x", "avgPool", "float32"); + const dilations = 1; + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in avgPool: x must be rank 4 but got rank ${x4D.rank}.`); + checkPadOnDimRoundingMode("avgPool", pad3, dimRoundingMode); + const inputs = { x: x4D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode }; + let res = ENGINE.runKernel(AvgPool, inputs, attrs); + res = cast(res, $x.dtype); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var avgPool = op({ avgPool_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_3d.js + init_define_BUILD_VERSION(); + function avgPool3d_(x, filterSize, strides, pad3, dimRoundingMode, dataFormat = "NDHWC") { + const $x = convertToTensor(x, "x", "avgPool3d", "float32"); + let x5D = $x; + let reshapedTo5D = false; + if ($x.rank === 4) { + reshapedTo5D = true; + x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]); + } + assert(x5D.rank === 5, () => `Error in avgPool3d: x must be rank 5 but got rank ${x5D.rank}.`); + assert(dataFormat === "NDHWC", () => `Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${dataFormat}`); + checkPadOnDimRoundingMode("avgPool3d", pad3, dimRoundingMode); + const inputs = { x: x5D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode, dataFormat }; + let res = ENGINE.runKernel(AvgPool3D, inputs, attrs); + res = cast(res, x5D.dtype); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var avgPool3d = op({ avgPool3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat.js + init_define_BUILD_VERSION(); + function concat_(tensors, axis = 0) { + assert(tensors.length >= 1, () => "Pass at least one tensor to concat"); + const $tensors = convertToTensorArray(tensors, "tensors", "concat", "string_or_numeric"); + if ($tensors[0].dtype === "complex64") { + $tensors.forEach((tensor2) => { + if (tensor2.dtype !== "complex64") { + throw new Error(`Cannot concatenate complex64 tensors with a tensor + with dtype ${tensor2.dtype}. `); + } + }); + } + if ($tensors.length === 1) { + return clone($tensors[0]); + } + const inputs = $tensors; + const attr = { axis }; + return ENGINE.runKernel(Concat, inputs, attr); + } + var concat = op({ concat_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sigmoid.js + init_define_BUILD_VERSION(); + function sigmoid_(x) { + const $x = convertToTensor(x, "x", "sigmoid", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Sigmoid, inputs); + } + var sigmoid = op({ sigmoid_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice.js + init_define_BUILD_VERSION(); + function slice_(x, begin, size) { + const $x = convertToTensor(x, "x", "slice", "string_or_numeric"); + if ($x.rank === 0) { + throw new Error("Slicing scalar is not possible"); + } + const inputs = { x: $x }; + const attrs = { begin, size }; + return ENGINE.runKernel(Slice, inputs, attrs); + } + var slice = op({ slice_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tanh.js + init_define_BUILD_VERSION(); + function tanh_(x) { + const $x = convertToTensor(x, "x", "tanh", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Tanh, inputs); + } + var tanh2 = op({ tanh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batch_to_space_nd.js + init_define_BUILD_VERSION(); + function batchToSpaceND_(x, blockShape, crops) { + const $x = convertToTensor(x, "x", "batchToSpaceND"); + const prod5 = blockShape.reduce((a, b) => a * b); + assert($x.rank >= 1 + blockShape.length, () => `input rank is ${$x.rank} but should be > than blockShape.length ${blockShape.length}`); + assert(crops.length === blockShape.length, () => `crops.length is ${crops.length} but should be equal to blockShape.length ${blockShape.length}`); + assert($x.shape[0] % prod5 === 0, () => `input tensor batch is ${$x.shape[0]} but is not divisible by the product of the elements of blockShape ${blockShape.join(" * ")} === ${prod5}`); + const inputs = { x: $x }; + const attrs = { blockShape, crops }; + return ENGINE.runKernel(BatchToSpaceND, inputs, attrs); + } + var batchToSpaceND = op({ batchToSpaceND_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm_util.js + init_define_BUILD_VERSION(); + function xAs4D(x) { + let x4D; + if (x.rank === 0 || x.rank === 1) { + x4D = reshape(x, [1, 1, 1, x.size]); + } else if (x.rank === 2) { + x4D = reshape(x, [1, 1, x.shape[0], x.shape[1]]); + } else if (x.rank === 3) { + x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]); + } else { + x4D = x; + } + return x4D; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm.js + function batchNorm_(x, mean4, variance, offset, scale2, varianceEpsilon) { + if (varianceEpsilon == null) { + varianceEpsilon = 1e-3; + } + const $x = convertToTensor(x, "x", "batchNorm"); + const $mean = convertToTensor(mean4, "mean", "batchNorm"); + const $variance = convertToTensor(variance, "variance", "batchNorm"); + let $scale; + if (scale2 != null) { + $scale = convertToTensor(scale2, "scale", "batchNorm"); + } + let $offset; + if (offset != null) { + $offset = convertToTensor(offset, "offset", "batchNorm"); + } + assert($mean.rank === $variance.rank, () => "Batch normalization gradient requires mean and variance to have equal ranks."); + assert($offset == null || $mean.rank === $offset.rank, () => "Batch normalization gradient requires mean and offset to have equal ranks."); + assert($scale == null || $mean.rank === $scale.rank, () => "Batch normalization gradient requires mean and scale to have equal ranks."); + const x4D = xAs4D($x); + const inputs = { + x: x4D, + scale: $scale, + offset: $offset, + mean: $mean, + variance: $variance + }; + const attrs = { varianceEpsilon }; + const res = ENGINE.runKernel(FusedBatchNorm, inputs, attrs); + return reshape(res, $x.shape); + } + var batchNorm = op({ batchNorm_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm2d.js + init_define_BUILD_VERSION(); + function batchNorm2d_(x, mean4, variance, offset, scale2, varianceEpsilon) { + const $x = convertToTensor(x, "x", "batchNorm"); + const $mean = convertToTensor(mean4, "mean", "batchNorm"); + const $variance = convertToTensor(variance, "variance", "batchNorm"); + let $scale; + if (scale2 != null) { + $scale = convertToTensor(scale2, "scale", "batchNorm"); + } + let $offset; + if (offset != null) { + $offset = convertToTensor(offset, "offset", "batchNorm"); + } + assert($x.rank === 2, () => `Error in batchNorm2D: x must be rank 2 but got rank ${$x.rank}.`); + assert($mean.rank === 2 || $mean.rank === 1, () => `Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${$mean.rank}.`); + assert($variance.rank === 2 || $variance.rank === 1, () => `Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${$variance.rank}.`); + if ($scale != null) { + assert($scale.rank === 2 || $scale.rank === 1, () => `Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${$scale.rank}.`); + } + if ($offset != null) { + assert($offset.rank === 2 || $offset.rank === 1, () => `Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${$offset.rank}.`); + } + return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon); + } + var batchNorm2d = op({ batchNorm2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm3d.js + init_define_BUILD_VERSION(); + function batchNorm3d_(x, mean4, variance, offset, scale2, varianceEpsilon) { + const $x = convertToTensor(x, "x", "batchNorm"); + const $mean = convertToTensor(mean4, "mean", "batchNorm"); + const $variance = convertToTensor(variance, "variance", "batchNorm"); + let $scale; + if (scale2 != null) { + $scale = convertToTensor(scale2, "scale", "batchNorm"); + } + let $offset; + if (offset != null) { + $offset = convertToTensor(offset, "offset", "batchNorm"); + } + assert($x.rank === 3, () => `Error in batchNorm3D: x must be rank 3 but got rank ${$x.rank}.`); + assert($mean.rank === 3 || $mean.rank === 1, () => `Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${$mean.rank}.`); + assert($variance.rank === 3 || $variance.rank === 1, () => `Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${$variance.rank}.`); + if ($scale != null) { + assert($scale.rank === 3 || $scale.rank === 1, () => `Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${$scale.rank}.`); + } + if ($offset != null) { + assert($offset.rank === 3 || $offset.rank === 1, () => `Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${$offset.rank}.`); + } + return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon); + } + var batchNorm3d = op({ batchNorm3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm4d.js + init_define_BUILD_VERSION(); + function batchNorm4d_(x, mean4, variance, offset, scale2, varianceEpsilon) { + const $x = convertToTensor(x, "x", "batchNorm"); + const $mean = convertToTensor(mean4, "mean", "batchNorm"); + const $variance = convertToTensor(variance, "variance", "batchNorm"); + let $scale; + if (scale2 != null) { + $scale = convertToTensor(scale2, "scale", "batchNorm"); + } + let $offset; + if (offset != null) { + $offset = convertToTensor(offset, "offset", "batchNorm"); + } + assert($x.rank === 4, () => `Error in batchNorm4D: x must be rank 4 but got rank ${$x.rank}.`); + assert($mean.rank === 4 || $mean.rank === 1, () => `Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${$mean.rank}.`); + assert($variance.rank === 4 || $variance.rank === 1, () => `Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${$variance.rank}.`); + if ($scale != null) { + assert($scale.rank === 4 || $scale.rank === 1, () => `Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${$scale.rank}.`); + } + if ($offset != null) { + assert($offset.rank === 4 || $offset.rank === 1, () => `Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${$offset.rank}.`); + } + return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon); + } + var batchNorm4d = op({ batchNorm4d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/bincount.js + init_define_BUILD_VERSION(); + function bincount_(x, weights, size) { + const $x = convertToTensor(x, "x", "bincount"); + const $weights = convertToTensor(weights, "weights", "bincount"); + assert($x.dtype === "int32", () => `Error in bincount: input dtype must be int32, but got ${$x.dtype}`); + assert(size >= 0, () => `size must be non-negative, but got ${size}.`); + assert($weights.size === $x.size || $weights.size === 0, () => `Error in bincount: weights must have the same size as input or0-length, but got input shape: ${$x.shape}, weights shape: ${$weights.shape}.`); + const inputs = { x: $x, weights: $weights }; + const attrs = { size }; + return ENGINE.runKernel(Bincount, inputs, attrs); + } + var bincount = op({ bincount_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_to.js + init_define_BUILD_VERSION(); + function broadcastTo_(x, shape) { + let input2 = convertToTensor(x, "broadcastTo", "x"); + const xShape = input2.shape; + if (shape.some((d) => !(d > 0) || d % 1 !== 0)) { + throw new Error(`broadcastTo(): Invalid broadcast shape [${shape}].`); + } + if (shape.length < input2.rank) { + throw new Error(`broadcastTo(): shape.length=${shape.length} < input.rank=${input2.rank}.`); + } + if (shape.length > input2.rank) { + const newShape = input2.shape.slice(); + while (newShape.length < shape.length) { + newShape.unshift(1); + } + input2 = reshape(input2, newShape); + } + const inputShape = input2.shape; + const reps = Array.from(shape); + for (let i = shape.length - 1; i >= 0; i--) { + if (inputShape[i] === shape[i]) { + reps[i] = 1; + } else if (input2.shape[i] !== 1) { + throw new Error(`broadcastTo(): [${xShape}] cannot be broadcast to [${shape}].`); + } + } + const axes = reps.map((n, i) => n > 1 ? i : -1).filter((i) => i >= 0); + if (axes.length === 0) { + return clone(input2); + } + const inputs = { x: input2 }; + const attrs = { reps }; + return ENGINE.runKernel(Tile, inputs, attrs); + } + var broadcastTo = op({ broadcastTo_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ceil.js + init_define_BUILD_VERSION(); + function ceil_(x) { + const $x = convertToTensor(x, "x", "ceil", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Ceil, inputs); + } + var ceil = op({ ceil_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/clip_by_value.js + init_define_BUILD_VERSION(); + function clipByValue_(x, clipValueMin, clipValueMax) { + const $x = convertToTensor(x, "x", "clipByValue"); + assert(clipValueMin <= clipValueMax, () => `Error in clip: min (${clipValueMin}) must be less than or equal to max (${clipValueMax}).`); + const inputs = { x: $x }; + const attrs = { clipValueMin, clipValueMax }; + return ENGINE.runKernel(ClipByValue, inputs, attrs); + } + var clipByValue = op({ clipByValue_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_1d.js + init_define_BUILD_VERSION(); + function concat1d_(tensors) { + return concat(tensors, 0); + } + var concat1d = op({ concat1d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_2d.js + init_define_BUILD_VERSION(); + function concat2d_(tensors, axis) { + return concat(tensors, axis); + } + var concat2d = op({ concat2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_3d.js + init_define_BUILD_VERSION(); + function concat3d_(tensors, axis) { + return concat(tensors, axis); + } + var concat3d = op({ concat3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_4d.js + init_define_BUILD_VERSION(); + function concat4d_(tensors, axis) { + return concat(tensors, axis); + } + var concat4d = op({ concat4d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv1d.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d.js + init_define_BUILD_VERSION(); + function conv2d_(x, filter, strides, pad3, dataFormat = "NHWC", dilations = [1, 1], dimRoundingMode) { + const $x = convertToTensor(x, "x", "conv2d", "float32"); + const $filter = convertToTensor(filter, "filter", "conv2d", "float32"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in conv2d: input must be rank 4, but got rank ${x4D.rank}.`); + assert($filter.rank === 4, () => `Error in conv2d: filter must be rank 4, but got rank ${$filter.rank}.`); + checkPadOnDimRoundingMode("conv2d", pad3, dimRoundingMode); + const inDepth = dataFormat === "NHWC" ? x4D.shape[3] : x4D.shape[1]; + assert(inDepth === $filter.shape[2], () => `Error in conv2d: depth of input (${inDepth}) must match input depth for filter ${$filter.shape[2]}.`); + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const inputs = { x: x4D, filter: $filter }; + const attrs = { strides, pad: pad3, dataFormat, dilations, dimRoundingMode }; + const res = ENGINE.runKernel(Conv2D, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var conv2d = op({ conv2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv1d.js + function conv1d_(x, filter, stride, pad3, dataFormat = "NWC", dilation = 1, dimRoundingMode) { + const $x = convertToTensor(x, "x", "conv1d"); + const $filter = convertToTensor(filter, "filter", "conv1d"); + let x3D = $x; + let reshapedTo3D = false; + if ($x.rank === 2) { + reshapedTo3D = true; + x3D = reshape($x, [1, $x.shape[0], $x.shape[1]]); + } + assert(x3D.rank === 3, () => `Error in conv1d: input must be rank 3, but got rank ${x3D.rank}.`); + assert($filter.rank === 3, () => `Error in conv1d: filter must be rank 3, but got rank ${$filter.rank}.`); + checkPadOnDimRoundingMode("conv1d", pad3, dimRoundingMode); + assert(x3D.shape[2] === $filter.shape[1], () => `Error in conv1d: depth of input (${x3D.shape[2]}) must match input depth for filter ${$filter.shape[1]}.`); + assert(eitherStridesOrDilationsAreOne(stride, dilation), () => `Error in conv1D: Either stride or dilation must be 1. Got stride ${stride} and dilation '${dilation}'`); + assert(dataFormat === "NWC", () => `Error in conv1d: got dataFormat of ${dataFormat} but only NWC is currently supported.`); + const filter4D = reshape($filter, [1, $filter.shape[0], $filter.shape[1], $filter.shape[2]]); + const input4D = reshape(x3D, [x3D.shape[0], 1, x3D.shape[1], x3D.shape[2]]); + const strides = [1, stride]; + const dilations = [1, dilation]; + const conv2dDataFormat = "NHWC"; + const res = conv2d(input4D, filter4D, strides, pad3, conv2dDataFormat, dilations, dimRoundingMode); + if (reshapedTo3D) { + return reshape(res, [res.shape[2], res.shape[3]]); + } + return reshape(res, [res.shape[0], res.shape[2], res.shape[3]]); + } + var conv1d = op({ conv1d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_transpose.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_backprop_input.js + init_define_BUILD_VERSION(); + function conv2DBackpropInput_(xShape, dy, filter, strides, pad3, dataFormat = "NHWC", dimRoundingMode) { + assert(xShape.length === dy.rank, () => `Length of inShape (${xShape.length}) and rank of dy (${dy.rank}) must match`); + let xShape4D = xShape; + let dy4D = dy; + let reshapedTo4D = false; + if (dy.rank === 3) { + reshapedTo4D = true; + dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]); + xShape4D = [1, xShape[0], xShape[1], xShape[2]]; + } + assert(xShape4D.length === 4, () => `Error in conv2dDerInput: inShape must be length 4, but got length ${xShape4D.length}.`); + assert(dy4D.rank === 4, () => `Error in conv2dDerInput: dy must be rank 4, but got rank ${dy4D.rank}`); + assert(filter.rank === 4, () => `Error in conv2dDerInput: filter must be rank 4, but got rank ${filter.rank}`); + const inDepth = dataFormat === "NHWC" ? xShape4D[3] : xShape4D[1]; + const outDepth = dataFormat === "NHWC" ? dy4D.shape[3] : dy4D.shape[1]; + assert(inDepth === filter.shape[2], () => `Error in conv2dDerInput: depth of input (${inDepth}) must match input depth for filter ${filter.shape[2]}.`); + assert(outDepth === filter.shape[3], () => `Error in conv2dDerInput: depth of output (${outDepth}) must match output depth for filter ${filter.shape[3]}.`); + checkPadOnDimRoundingMode("conv2dDerInput", pad3, dimRoundingMode); + const inputs = { dy: dy4D, filter }; + const attrs = { strides, pad: pad3, dataFormat, dimRoundingMode, inputShape: xShape4D }; + const res = ENGINE.runKernel(Conv2DBackpropInput, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var conv2DBackpropInput = op({ conv2DBackpropInput_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_transpose.js + function conv2dTranspose_(x, filter, outputShape, strides, pad3, dimRoundingMode) { + const $x = convertToTensor(x, "x", "conv2dTranspose"); + const $filter = convertToTensor(filter, "filter", "conv2dTranspose"); + return conv2DBackpropInput(outputShape, $x, $filter, strides, pad3, "NHWC", dimRoundingMode); + } + var conv2dTranspose = op({ conv2dTranspose_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d.js + init_define_BUILD_VERSION(); + function conv3d_(x, filter, strides, pad3, dataFormat = "NDHWC", dilations = [1, 1, 1]) { + const $x = convertToTensor(x, "x", "conv3d"); + const $filter = convertToTensor(filter, "filter", "conv3d"); + let x5D = $x; + let reshapedTo5D = false; + if ($x.rank === 4) { + reshapedTo5D = true; + x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]); + } + assert(x5D.rank === 5, () => `Error in conv3d: input must be rank 5, but got rank ${x5D.rank}.`); + assert($filter.rank === 5, () => `Error in conv3d: filter must be rank 5, but got rank ${$filter.rank}.`); + assert(x5D.shape[4] === $filter.shape[3], () => `Error in conv3d: depth of input (${x5D.shape[4]}) must match input depth for filter ${$filter.shape[3]}.`); + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in conv3D: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + assert(dataFormat === "NDHWC", () => `Error in conv3d: got dataFormat of ${dataFormat} but only NDHWC is currently supported.`); + const inputs = { x: x5D, filter: $filter }; + const attrs = { strides, pad: pad3, dataFormat, dilations }; + const res = ENGINE.runKernel(Conv3D, inputs, attrs); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var conv3d = op({ conv3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_transpose.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_backprop_input.js + init_define_BUILD_VERSION(); + function conv3DBackpropInput_(xShape, dy, filter, strides, pad3) { + assert(xShape.length === dy.rank, () => `Length of inShape (${xShape.length}) and rank of dy (${dy.rank}) must match`); + let xShape5D = xShape; + let dy5D = dy; + let reshapedTo5D = false; + if (dy.rank === 4) { + reshapedTo5D = true; + dy5D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2], dy.shape[3]]); + xShape5D = [1, xShape[0], xShape[1], xShape[2], xShape[3]]; + } + const inDepth = xShape5D[4]; + const outDepth = dy5D.shape[4]; + assert(xShape5D.length === 5, () => `Error in conv3dDerInput: inShape must be length 5, but got length ${xShape5D.length}.`); + assert(dy5D.rank === 5, () => `Error in conv3dDerInput: dy must be rank 5, but got rank ${dy5D.rank}`); + assert(filter.rank === 5, () => `Error in conv3dDerInput: filter must be rank 5, but got rank ${filter.rank}`); + assert(inDepth === filter.shape[3], () => `Error in conv3dDerInput: depth of input (${inDepth}) must match input depth for filter ${filter.shape[3]}.`); + assert(outDepth === filter.shape[4], () => `Error in conv3dDerInput: depth of output (${outDepth}) must match output depth for filter ${filter.shape[4]}.`); + const inputs = { dy: dy5D, filter }; + const attrs = { pad: pad3, strides, inputShape: xShape5D }; + const res = ENGINE.runKernel(Conv3DBackpropInputV2, inputs, attrs); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var conv3DBackpropInput = op({ conv3DBackpropInput_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_transpose.js + function conv3dTranspose_(x, filter, outputShape, strides, pad3) { + const $x = convertToTensor(x, "x", "conv3dTranspose"); + const $filter = convertToTensor(filter, "filter", "conv3dTranspose"); + return conv3DBackpropInput(outputShape, $x, $filter, strides, pad3); + } + var conv3dTranspose = op({ conv3dTranspose_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/cos.js + init_define_BUILD_VERSION(); + function cos_(x) { + const $x = convertToTensor(x, "x", "cos", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Cos, inputs); + } + var cos = op({ cos_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/cosh.js + init_define_BUILD_VERSION(); + function cosh_(x) { + const $x = convertToTensor(x, "x", "cosh", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Cosh, inputs); + } + var cosh = op({ cosh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/cumprod.js + init_define_BUILD_VERSION(); + function cumprod_(x, axis = 0, exclusive = false, reverse5 = false) { + const $x = convertToTensor(x, "x", "cumprod"); + const inputs = { x: $x }; + const attrs = { axis, exclusive, reverse: reverse5 }; + return ENGINE.runKernel(Cumprod, inputs, attrs); + } + var cumprod = op({ cumprod_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/cumsum.js + init_define_BUILD_VERSION(); + function cumsum_(x, axis = 0, exclusive = false, reverse5 = false) { + const $x = convertToTensor(x, "x", "cumsum"); + const inputs = { x: $x }; + const attrs = { axis, exclusive, reverse: reverse5 }; + return ENGINE.runKernel(Cumsum, inputs, attrs); + } + var cumsum = op({ cumsum_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/depth_to_space.js + init_define_BUILD_VERSION(); + function depthToSpace_(x, blockSize, dataFormat = "NHWC") { + const $x = convertToTensor(x, "x", "depthToSpace", "float32"); + const inputHeight = dataFormat === "NHWC" ? $x.shape[1] : $x.shape[2]; + const inputWidth = dataFormat === "NHWC" ? $x.shape[2] : $x.shape[3]; + const inputDepth = dataFormat === "NHWC" ? $x.shape[3] : $x.shape[1]; + assert(blockSize > 1, () => `blockSize should be > 1 for depthToSpace, but was: ${blockSize}`); + assert(inputHeight * blockSize >= 0, () => `Negative dimension size caused by overflow when multiplying + ${inputHeight} and ${blockSize} for depthToSpace with input shape + ${$x.shape}`); + assert(inputWidth * blockSize >= 0, () => `Negative dimension size caused by overflow when multiplying + ${inputWidth} and ${blockSize} for depthToSpace with input shape + ${$x.shape}`); + assert(inputDepth % (blockSize * blockSize) === 0, () => `Dimension size must be evenly divisible by ${blockSize * blockSize} but is ${inputDepth} for depthToSpace with input shape ${$x.shape}`); + const inputs = { x: $x }; + const attrs = { blockSize, dataFormat }; + return ENGINE.runKernel(DepthToSpace, inputs, attrs); + } + var depthToSpace = op({ depthToSpace_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d.js + init_define_BUILD_VERSION(); + function depthwiseConv2d_(x, filter, strides, pad3, dataFormat = "NHWC", dilations = [1, 1], dimRoundingMode) { + const $x = convertToTensor(x, "x", "depthwiseConv2d", "float32"); + const $filter = convertToTensor(filter, "filter", "depthwiseConv2d", "float32"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in depthwiseConv2d: input must be rank 4, but got rank ${x4D.rank}.`); + assert($filter.rank === 4, () => `Error in depthwiseConv2d: filter must be rank 4, but got rank ${$filter.rank}.`); + const inChannels = dataFormat === "NHWC" ? x4D.shape[3] : x4D.shape[1]; + assert(inChannels === $filter.shape[2], () => `Error in depthwiseConv2d: number of input channels (${inChannels}) must match the inChannels dimension in filter ${$filter.shape[2]}.`); + checkPadOnDimRoundingMode("depthwiseConv2d", pad3, dimRoundingMode); + const inputs = { x: x4D, filter: $filter }; + const attrs = { strides, pad: pad3, dataFormat, dilations, dimRoundingMode }; + const res = ENGINE.runKernel(DepthwiseConv2dNative, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var depthwiseConv2d = op({ depthwiseConv2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/dilation2d.js + init_define_BUILD_VERSION(); + function dilation2d_(x, filter, strides, pad3, dilations = [1, 1], dataFormat = "NHWC") { + const $x = convertToTensor(x, "x", "dilation2d"); + const $filter = convertToTensor(filter, "filter", "dilation2d"); + assert($x.rank === 3 || $x.rank === 4, () => `Error in dilation2d: input must be rank 3 or 4, but got rank ${$x.rank}.`); + assert($filter.rank === 3, () => `Error in dilation2d: filter must be rank 3, but got rank ${$filter.rank}.`); + assert(dataFormat === "NHWC", () => `Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${dataFormat}`); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + reshapedTo4D = true; + } + const inputs = { x: x4D, filter: $filter }; + const attrs = { strides, pad: pad3, dilations }; + const res = ENGINE.runKernel(Dilation2D, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var dilation2d = op({ dilation2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/div_no_nan.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/equal.js + init_define_BUILD_VERSION(); + function equal_(a, b) { + let $a = convertToTensor(a, "a", "equal", "string_or_numeric"); + let $b = convertToTensor(b, "b", "equal", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Equal, inputs); + } + var equal = op({ equal_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/where.js + init_define_BUILD_VERSION(); + function where_(condition, a, b) { + const $a = convertToTensor(a, "a", "where"); + const $b = convertToTensor(b, "b", "where"); + const $condition = convertToTensor(condition, "condition", "where", "bool"); + const broadcastShape = assertAndGetBroadcastShape(assertAndGetBroadcastShape($condition.shape, $a.shape), $b.shape); + const $broadcastedCondition = broadcastTo($condition, broadcastShape); + const $broadcastedA = broadcastTo($a, broadcastShape); + const $broadcastedB = broadcastTo($b, broadcastShape); + const inputs = { + condition: $broadcastedCondition, + t: $broadcastedA, + e: $broadcastedB + }; + return ENGINE.runKernel(Select, inputs); + } + var where = op({ where_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/zeros_like.js + init_define_BUILD_VERSION(); + function zerosLike_(x) { + const $x = convertToTensor(x, "x", "zerosLike"); + const inputs = { x: $x }; + return ENGINE.runKernel(ZerosLike, inputs); + } + var zerosLike = op({ zerosLike_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/div_no_nan.js + function divNoNan_(a, b) { + let $a = convertToTensor(a, "a", "div"); + let $b = convertToTensor(b, "b", "div"); + [$a, $b] = makeTypesMatch($a, $b); + const divResult = div($a, $b); + const zeros3 = zerosLike(divResult); + const bEqualsZero = equal($b, zeros3); + return where(bEqualsZero, zeros3, divResult); + } + var divNoNan = op({ divNoNan_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/dot.js + init_define_BUILD_VERSION(); + function dot_(t1, t2) { + const $t1 = convertToTensor(t1, "t1", "dot"); + const $t2 = convertToTensor(t2, "t2", "dot"); + assert(($t1.rank === 1 || $t1.rank === 2) && ($t2.rank === 1 || $t2.rank === 2), () => `Error in dot: inputs must all be rank 1 or 2, but got ranks ${$t1.rank} and ${$t2.rank}.`); + const t1Inner = $t1.rank === 1 ? $t1.size : $t1.shape[1]; + const t2Inner = $t2.rank === 1 ? $t2.size : $t2.shape[0]; + assert(t1Inner === t2Inner, () => `Error in dot: inner dimensions of inputs must match, but got ${t1Inner} and ${t2Inner}.`); + if ($t1.rank === 1 && $t2.rank === 1) { + const t12D = reshape($t1, [1, -1]); + const t22D = reshape($t2, [-1, 1]); + const t1t2 = matMul(t12D, t22D); + return reshape(t1t2, []); + } else if ($t1.rank === 1 && $t2.rank === 2) { + const t12D = reshape($t1, [1, -1]); + const t22D = reshape($t2, [$t2.shape[0], $t2.shape[1]]); + const t1t2 = matMul(t12D, t22D); + return reshape(t1t2, [t1t2.size]); + } else if ($t1.rank === 2 && $t2.rank === 1) { + const t22D = reshape($t2, [-1, 1]); + const t1t2 = matMul($t1, t22D); + return reshape(t1t2, [t1t2.size]); + } else { + const t22D = reshape($t2, [$t2.shape[0], $t2.shape[1]]); + const t1t2 = matMul($t1, t22D); + return t1t2; + } + } + var dot = op({ dot_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/elu.js + init_define_BUILD_VERSION(); + function elu_(x) { + const $x = convertToTensor(x, "x", "elu", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Elu, inputs); + } + var elu = op({ elu_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/erf.js + init_define_BUILD_VERSION(); + function erf_(x) { + let $x = convertToTensor(x, "x", "erf"); + assert($x.dtype === "int32" || $x.dtype === "float32", () => "Input dtype must be `int32` or `float32`."); + if ($x.dtype === "int32") { + $x = cast($x, "float32"); + } + const inputs = { x: $x }; + return ENGINE.runKernel(Erf, inputs); + } + var erf = op({ erf_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/euclidean_norm.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/norm.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/axis_util.js + init_define_BUILD_VERSION(); + function axesAreInnerMostDims(axes, rank) { + for (let i = 0; i < axes.length; ++i) { + if (axes[axes.length - i - 1] !== rank - 1 - i) { + return false; + } + } + return true; + } + function combineLocations(outputLoc, reduceLoc, axes) { + const rank = outputLoc.length + reduceLoc.length; + const loc = []; + let outIdx = 0; + let reduceIdx = 0; + for (let dim = 0; dim < rank; dim++) { + if (axes.indexOf(dim) === -1) { + loc.push(outputLoc[outIdx++]); + } else { + loc.push(reduceLoc[reduceIdx++]); + } + } + return loc; + } + function computeOutAndReduceShapes(aShape, axes) { + const outShape = []; + const rank = aShape.length; + for (let dim = 0; dim < rank; dim++) { + if (axes.indexOf(dim) === -1) { + outShape.push(aShape[dim]); + } + } + const reduceShape = axes.map((dim) => aShape[dim]); + return [outShape, reduceShape]; + } + function expandShapeToKeepDim(shape, axes) { + const reduceSubShape = axes.map((x) => 1); + return combineLocations(shape, reduceSubShape, axes); + } + function assertAxesAreInnerMostDims(msg, axes, rank) { + assert(axesAreInnerMostDims(axes, rank), () => `${msg} supports only inner-most axes for now. Got axes ${axes} and rank-${rank} input.`); + } + function getAxesPermutation(axes, rank) { + if (axesAreInnerMostDims(axes, rank)) { + return null; + } + const result = []; + for (let i = 0; i < rank; ++i) { + if (axes.indexOf(i) === -1) { + result.push(i); + } + } + axes.forEach((axis) => result.push(axis)); + return result; + } + function getUndoAxesPermutation(axes) { + return axes.map((axis, i) => [i, axis]).sort((a, b) => a[1] - b[1]).map((x) => x[0]); + } + function getInnerMostAxes(numAxes, rank) { + const res = []; + for (let i = rank - numAxes; i < rank; ++i) { + res.push(i); + } + return res; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/max.js + init_define_BUILD_VERSION(); + function max_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "max"); + const inputs = { x: $x }; + const attrs = { reductionIndices: axis, keepDims }; + return ENGINE.runKernel(Max, inputs, attrs); + } + var max = op({ max_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/min.js + init_define_BUILD_VERSION(); + function min_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "min"); + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(Min, inputs, attrs); + } + var min = op({ min_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/pow.js + init_define_BUILD_VERSION(); + function pow_(base, exp4) { + let $base = convertToTensor(base, "base", "pow"); + let $exp = convertToTensor(exp4, "exp", "pow"); + [$base, $exp] = makeTypesMatch($base, $exp); + const inputs = { a: $base, b: $exp }; + return ENGINE.runKernel(Pow, inputs); + } + var pow = op({ pow_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/scalar.js + init_define_BUILD_VERSION(); + function scalar(value, dtype) { + if ((isTypedArray(value) && dtype !== "string" || Array.isArray(value)) && dtype !== "complex64") { + throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)"); + } + if (dtype === "string" && isTypedArray(value) && !(value instanceof Uint8Array)) { + throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`."); + } + const shape = []; + const inferredShape = []; + return makeTensor(value, shape, inferredShape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sqrt.js + init_define_BUILD_VERSION(); + function sqrt_(x) { + const $x = convertToTensor(x, "x", "sqrt", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Sqrt, inputs); + } + var sqrt = op({ sqrt_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/square.js + init_define_BUILD_VERSION(); + function square_(x) { + const $x = convertToTensor(x, "x", "square"); + const attrs = {}; + return ENGINE.runKernel("Square", { x: $x }, attrs); + } + var square = op({ square_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sum.js + init_define_BUILD_VERSION(); + function sum_(x, axis = null, keepDims = false) { + let $x = convertToTensor(x, "x", "sum"); + if ($x.dtype === "bool") { + $x = cast($x, "int32"); + } + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(Sum, inputs, attrs); + } + var sum2 = op({ sum_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/norm.js + function norm_(x, ord = "euclidean", axis = null, keepDims = false) { + x = convertToTensor(x, "x", "norm"); + const norm2 = normImpl(x, ord, axis); + let keepDimsShape = norm2.shape; + if (keepDims) { + const axes = parseAxisParam(axis, x.shape); + keepDimsShape = expandShapeToKeepDim(norm2.shape, axes); + } + return reshape(norm2, keepDimsShape); + } + function normImpl(x, p2, axis = null) { + if (x.rank === 0) { + return abs(x); + } + if (x.rank !== 1 && axis === null) { + return normImpl(reshape(x, [-1]), p2, axis); + } + if (x.rank === 1 || typeof axis === "number" || Array.isArray(axis) && axis.length === 1) { + if (p2 === 1) { + return sum2(abs(x), axis); + } + if (p2 === Infinity) { + return max(abs(x), axis); + } + if (p2 === -Infinity) { + return min(abs(x), axis); + } + if (p2 === "euclidean" || p2 === 2) { + return sqrt(sum2(pow(abs(x), scalar(2, "int32")), axis)); + } + throw new Error(`Error in norm: invalid ord value: ${p2}`); + } + if (Array.isArray(axis) && axis.length === 2) { + if (p2 === 1) { + return max(sum2(abs(x), axis[0]), axis[1] - 1); + } + if (p2 === Infinity) { + return max(sum2(abs(x), axis[1]), axis[0]); + } + if (p2 === -Infinity) { + return min(sum2(abs(x), axis[1]), axis[0]); + } + if (p2 === "fro" || p2 === "euclidean") { + return sqrt(sum2(square(x), axis)); + } + throw new Error(`Error in norm: invalid ord value: ${p2}`); + } + throw new Error(`Error in norm: invalid axis: ${axis}`); + } + var norm = op({ norm_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/euclidean_norm.js + function euclideanNorm_(x, axis = null, keepDims = false) { + return norm(x, "euclidean", axis, keepDims); + } + var euclideanNorm = op({ euclideanNorm_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/exp.js + init_define_BUILD_VERSION(); + function exp_(x) { + const $x = convertToTensor(x, "x", "exp"); + const inputs = { x: $x }; + return ENGINE.runKernel(Exp, inputs); + } + var exp = op({ exp_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/expand_dims.js + init_define_BUILD_VERSION(); + function expandDims_(x, axis = 0) { + const $x = convertToTensor(x, "x", "expandDims", "string_or_numeric"); + assert(axis <= $x.rank, () => "Axis must be <= rank of the tensor"); + const inputs = { input: $x }; + const attrs = { dim: axis }; + return ENGINE.runKernel(ExpandDims, inputs, attrs); + } + var expandDims = op({ expandDims_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/expm1.js + init_define_BUILD_VERSION(); + function expm1_(x) { + const $x = convertToTensor(x, "x", "expm1"); + const inputs = { x: $x }; + return ENGINE.runKernel(Expm1, inputs); + } + var expm1 = op({ expm1_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/eye.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tile.js + init_define_BUILD_VERSION(); + function tile_(x, reps) { + const $x = convertToTensor(x, "x", "tile", "string_or_numeric"); + assert($x.rank === reps.length, () => `Error in transpose: rank of input ${$x.rank} must match length of reps ${reps}.`); + const inputs = { x: $x }; + const attrs = { reps }; + return ENGINE.runKernel(Tile, inputs, attrs); + } + var tile = op({ tile_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/eye.js + function eye_(numRows, numColumns, batchShape, dtype = "float32") { + if (numColumns == null) { + numColumns = numRows; + } + const buff = buffer([numRows, numColumns], dtype); + const n = numRows <= numColumns ? numRows : numColumns; + for (let i = 0; i < n; ++i) { + buff.set(1, i, i); + } + const out = reshape(buff.toTensor(), [numRows, numColumns]); + if (batchShape == null) { + return out; + } else { + if (batchShape.length === 1) { + return tile(expandDims(out, 0), [batchShape[0], 1, 1]); + } else if (batchShape.length === 2) { + return tile(expandDims(expandDims(out, 0), 0), [batchShape[0], batchShape[1], 1, 1]); + } else if (batchShape.length === 3) { + return tile(expandDims(expandDims(expandDims(out, 0), 0), 0), [ + batchShape[0], + batchShape[1], + batchShape[2], + 1, + 1 + ]); + } else { + throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${batchShape.length}D.`); + } + } + } + var eye = op({ eye_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fill.js + init_define_BUILD_VERSION(); + function fill(shape, value, dtype) { + const attrs = { shape, value, dtype }; + return ENGINE.runKernel(Fill, {}, attrs); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/floor.js + init_define_BUILD_VERSION(); + function floor_(x) { + const $x = convertToTensor(x, "x", "floor", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Floor, inputs); + } + var floor = op({ floor_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/gather.js + init_define_BUILD_VERSION(); + function gather_(x, indices, axis = 0, batchDims = 0) { + const $x = convertToTensor(x, "x", "gather"); + const $indices = convertToTensor(indices, "indices", "gather", "int32"); + const inputs = { x: $x, indices: $indices }; + const attrs = { axis, batchDims }; + return ENGINE.runKernel(GatherV2, inputs, attrs); + } + var gather = op({ gather_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/greater.js + init_define_BUILD_VERSION(); + function greater_(a, b) { + let $a = convertToTensor(a, "a", "greater", "string_or_numeric"); + let $b = convertToTensor(b, "b", "greater", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Greater, inputs); + } + var greater = op({ greater_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/greater_equal.js + init_define_BUILD_VERSION(); + function greaterEqual_(a, b) { + let $a = convertToTensor(a, "a", "greaterEqual", "string_or_numeric"); + let $b = convertToTensor(b, "b", "greaterEqual", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(GreaterEqual, inputs); + } + var greaterEqual = op({ greaterEqual_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/is_finite.js + init_define_BUILD_VERSION(); + function isFinite_(x) { + const $x = convertToTensor(x, "x", "isFinite"); + const inputs = { x: $x }; + return ENGINE.runKernel(IsFinite, inputs); + } + var isFinite2 = op({ isFinite_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/is_inf.js + init_define_BUILD_VERSION(); + function isInf_(x) { + const $x = convertToTensor(x, "x", "isInf"); + const inputs = { x: $x }; + return ENGINE.runKernel(IsInf, inputs); + } + var isInf = op({ isInf_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/is_nan.js + init_define_BUILD_VERSION(); + function isNaN_(x) { + const $x = convertToTensor(x, "x", "isNaN"); + const inputs = { x: $x }; + return ENGINE.runKernel(IsNan, inputs); + } + var isNaN2 = op({ isNaN_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/leaky_relu.js + init_define_BUILD_VERSION(); + function leakyRelu_(x, alpha = 0.2) { + const $x = convertToTensor(x, "x", "leakyRelu"); + const inputs = { x: $x }; + const attrs = { alpha }; + return ENGINE.runKernel(LeakyRelu, inputs, attrs); + } + var leakyRelu = op({ leakyRelu_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/less.js + init_define_BUILD_VERSION(); + function less_(a, b) { + let $a = convertToTensor(a, "a", "less", "string_or_numeric"); + let $b = convertToTensor(b, "b", "less", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Less, inputs); + } + var less = op({ less_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/less_equal.js + init_define_BUILD_VERSION(); + function lessEqual_(a, b) { + let $a = convertToTensor(a, "a", "lessEqual", "string_or_numeric"); + let $b = convertToTensor(b, "b", "lessEqual", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(LessEqual, inputs); + } + var lessEqual = op({ lessEqual_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/local_response_normalization.js + init_define_BUILD_VERSION(); + function localResponseNormalization_(x, depthRadius = 5, bias = 1, alpha = 1, beta = 0.5) { + const $x = convertToTensor(x, "x", "localResponseNormalization"); + assert($x.rank === 4 || $x.rank === 3, () => `Error in localResponseNormalization: x must be rank 3 or 4 but got + rank ${$x.rank}.`); + assert(isInt(depthRadius), () => `Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${depthRadius}.`); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + const inputs = { x: x4D }; + const attrs = { depthRadius, bias, alpha, beta }; + const res = ENGINE.runKernel(LRN, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } else { + return res; + } + } + var localResponseNormalization = op({ localResponseNormalization_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log.js + init_define_BUILD_VERSION(); + function log_(x) { + const $x = convertToTensor(x, "x", "log", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Log, inputs); + } + var log2 = op({ log_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log1p.js + init_define_BUILD_VERSION(); + function log1p_(x) { + const $x = convertToTensor(x, "x", "log1p"); + const inputs = { x: $x }; + return ENGINE.runKernel(Log1p, inputs); + } + var log1p = op({ log1p_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_sigmoid.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients.js + init_define_BUILD_VERSION(); + function variableGrads(f, varList) { + assert(isFunction(f), () => "The f passed in variableGrads(f) must be a function"); + assert(varList == null || Array.isArray(varList) && varList.every((v) => v instanceof Variable), () => "The varList passed in variableGrads(f, varList) must be an array of variables"); + const specifiedVarList = varList != null; + if (!specifiedVarList) { + varList = []; + for (const varName in ENGINE.registeredVariables) { + varList.push(ENGINE.registeredVariables[varName]); + } + } + const specifiedNonTrainable = specifiedVarList ? varList.filter((variable2) => !variable2.trainable) : null; + const originalVarCount = varList.length; + varList = varList.filter((variable2) => variable2.trainable); + assert(varList.length > 0, () => `variableGrads() expects at least one of the input variables to be trainable, but none of the ${originalVarCount} variables is trainable.`); + const allowNoGradients = true; + const { value, grads } = ENGINE.gradients(f, varList, null, allowNoGradients); + assert(grads.some((g) => g != null), () => "Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."); + assert(value.rank === 0, () => `The f passed in variableGrads(f) must return a scalar, but it returned a rank-${value.rank} tensor`); + const namedGrads = {}; + varList.forEach((v, i) => { + if (grads[i] != null) { + namedGrads[v.name] = grads[i]; + } + }); + if (specifiedNonTrainable != null) { + specifiedNonTrainable.forEach((v) => namedGrads[v.name] = null); + } + return { value, grads: namedGrads }; + } + function customGrad(f) { + return ENGINE.customGrad(f); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/softplus.js + init_define_BUILD_VERSION(); + function softplus_(x) { + const $x = convertToTensor(x, "x", "softplus"); + const inputs = { x: $x }; + return ENGINE.runKernel(Softplus, inputs); + } + var softplus = op({ softplus_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_sigmoid.js + function logSigmoid_(x) { + const $x = convertToTensor(x, "x", "logSigmoid"); + const customOp = customGrad((x2) => { + const value = neg(softplus(neg(x2))); + const gradFunc = (dy) => { + const derX = mul(dy, sigmoid(neg(x2))); + return derX; + }; + return { value, gradFunc }; + }); + return customOp($x); + } + var logSigmoid = op({ logSigmoid_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_softmax.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sub.js + init_define_BUILD_VERSION(); + function sub_(a, b) { + let $a = convertToTensor(a, "a", "sub"); + let $b = convertToTensor(b, "b", "sub"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Sub, inputs); + } + var sub = op({ sub_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_softmax.js + function logSoftmax_(logits, axis = -1) { + const $logits = convertToTensor(logits, "logits", "logSoftmax"); + if (axis === -1) { + axis = $logits.rank - 1; + } + if (axis !== $logits.rank - 1) { + throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${$logits.rank} and axis was ${axis}`); + } + const customOp = customGrad((logits2, save) => { + const keepDims = true; + const xMax = max(logits2, axis, true); + const shifted = sub(logits2, xMax); + const value = sub(cast(shifted, "float32"), log2(sum2(exp(shifted), axis, keepDims))); + save([value]); + const gradFunc = (dy, saved) => { + const [value2] = saved; + const keepDims2 = true; + const softmax5 = exp(value2); + return sub(dy, mul(sum2(dy, axis, keepDims2), softmax5)); + }; + return { value, gradFunc }; + }); + return customOp($logits); + } + var logSoftmax = op({ logSoftmax_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/log_sum_exp.js + init_define_BUILD_VERSION(); + function logSumExp_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "logSumExp"); + const axes = parseAxisParam(axis, $x.shape); + const xMax = max($x, axes, true); + const a = sub($x, xMax); + const b = exp(a); + const c = sum2(b, axes); + const d = log2(c); + const res = add2(reshape(xMax, d.shape), d); + if (keepDims) { + const newShape = expandShapeToKeepDim(res.shape, axes); + return reshape(res, newShape); + } + return res; + } + var logSumExp = op({ logSumExp_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_and.js + init_define_BUILD_VERSION(); + function logicalAnd_(a, b) { + const $a = convertToTensor(a, "a", "logicalAnd", "bool"); + const $b = convertToTensor(b, "b", "logicalAnd", "bool"); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(LogicalAnd, inputs); + } + var logicalAnd = op({ logicalAnd_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_not.js + init_define_BUILD_VERSION(); + function logicalNot_(x) { + const $x = convertToTensor(x, "x", "logicalNot", "bool"); + const inputs = { x: $x }; + return ENGINE.runKernel(LogicalNot, inputs); + } + var logicalNot = op({ logicalNot_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_or.js + init_define_BUILD_VERSION(); + function logicalOr_(a, b) { + const $a = convertToTensor(a, "a", "logicalOr", "bool"); + const $b = convertToTensor(b, "b", "logicalOr", "bool"); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(LogicalOr, inputs); + } + var logicalOr = op({ logicalOr_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/logical_xor.js + init_define_BUILD_VERSION(); + function logicalXor_(a, b) { + const $a = convertToTensor(a, "a", "logicalXor", "bool"); + const $b = convertToTensor(b, "b", "logicalXor", "bool"); + assertAndGetBroadcastShape($a.shape, $b.shape); + return logicalAnd(logicalOr(a, b), logicalNot(logicalAnd(a, b))); + } + var logicalXor = op({ logicalXor_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/max_pool.js + init_define_BUILD_VERSION(); + function maxPool_(x, filterSize, strides, pad3, dimRoundingMode) { + const $x = convertToTensor(x, "x", "maxPool"); + const dilations = 1; + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in maxPool: input must be rank 4 but got rank ${x4D.rank}.`); + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + checkPadOnDimRoundingMode("maxPool", pad3, dimRoundingMode); + const inputs = { x: x4D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode }; + const res = ENGINE.runKernel(MaxPool, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var maxPool = op({ maxPool_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_3d.js + init_define_BUILD_VERSION(); + function maxPool3d_(x, filterSize = [1, 1, 1], strides, pad3, dimRoundingMode, dataFormat = "NDHWC") { + const $x = convertToTensor(x, "x", "maxPool3d"); + let x5D = $x; + let reshapedTo5D = false; + if ($x.rank === 4) { + reshapedTo5D = true; + x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]); + } + assert(x5D.rank === 5, () => `Error in maxPool3d: x must be rank 5 but got rank ${x5D.rank}.`); + assert(dataFormat === "NDHWC", () => `Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${dataFormat}`); + checkPadOnDimRoundingMode("maxPool3d", pad3, dimRoundingMode); + const inputs = { x: x5D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode, dataFormat }; + const res = ENGINE.runKernel(MaxPool3D, inputs, attrs); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var maxPool3d = op({ maxPool3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/maximum.js + init_define_BUILD_VERSION(); + function maximum_(a, b) { + let $a = convertToTensor(a, "a", "maximum"); + let $b = convertToTensor(b, "b", "maximum"); + [$a, $b] = makeTypesMatch($a, $b); + if ($a.dtype === "bool") { + $a = cast($a, "int32"); + $b = cast($b, "int32"); + } + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Maximum, inputs); + } + var maximum = op({ maximum_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/mean.js + init_define_BUILD_VERSION(); + function mean_(x, axis = null, keepDims = false) { + const $x = convertToTensor(x, "x", "mean"); + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(Mean, inputs, attrs); + } + var mean = op({ mean_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ones.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/zeros.js + init_define_BUILD_VERSION(); + function zeros(shape, dtype = "float32") { + if (dtype === "complex64") { + const real4 = zeros(shape, "float32"); + const imag4 = zeros(shape, "float32"); + return complex(real4, imag4); + } + const values = makeZerosTypedArray(sizeFromShape(shape), dtype); + return ENGINE.makeTensor(values, shape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ones.js + function ones2(shape, dtype = "float32") { + if (dtype === "complex64") { + const real4 = ones2(shape, "float32"); + const imag4 = zeros(shape, "float32"); + return complex(real4, imag4); + } + const values = makeOnesTypedArray(sizeFromShape(shape), dtype); + return ENGINE.makeTensor(values, shape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/minimum.js + init_define_BUILD_VERSION(); + function minimum_(a, b) { + let $a = convertToTensor(a, "a", "minimum"); + let $b = convertToTensor(b, "b", "minimum"); + [$a, $b] = makeTypesMatch($a, $b); + if ($a.dtype === "bool") { + $a = cast($a, "int32"); + $b = cast($b, "int32"); + } + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Minimum, inputs); + } + var minimum = op({ minimum_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/mirror_pad.js + init_define_BUILD_VERSION(); + function mirrorPad_(x, paddings, mode) { + assert(mode === "reflect" || mode === "symmetric", () => `Invalid mode. Mode must be either reflect or symmetric. Got ${mode}.`); + const $x = convertToTensor(x, "x", "mirrorPad"); + if ($x.rank === 0) { + throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad"); + } + assert(paddings.length === $x.rank, () => `Padding doesn't match input. Must be ${$x.rank}. Got ${paddings.length}.`); + const shapeOffset = mode === "reflect" ? 1 : 0; + for (let i = 0; i < $x.rank; i++) { + assert(paddings[i].length === 2, () => `Invalid number of paddings. Must be length of 2 each.`); + assert(paddings[i][0] >= 0 && paddings[i][0] <= $x.shape[i] - shapeOffset && paddings[i][1] >= 0 && paddings[i][1] <= $x.shape[i] - shapeOffset, () => `Padding in dimension ${i} cannot be greater than or equal to ${$x.shape[i] - shapeOffset} or less than 0 for input of shape ${$x.shape}`); + } + const attrs = { paddings, mode }; + const inputs = { x: $x }; + return ENGINE.runKernel(MirrorPad, inputs, attrs); + } + var mirrorPad = op({ mirrorPad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/mod.js + init_define_BUILD_VERSION(); + function mod_(a, b) { + let $a = convertToTensor(a, "a", "mod"); + let $b = convertToTensor(b, "b", "mod"); + [$a, $b] = makeTypesMatch($a, $b); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(Mod, inputs); + } + var mod = op({ mod_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/moments.js + init_define_BUILD_VERSION(); + function moments_(x, axis = null, keepDims = false) { + x = convertToTensor(x, "x", "moments"); + const axes = parseAxisParam(axis, x.shape); + const xMean = mean(x, axes, keepDims); + let keepDimsShape = xMean.shape; + if (!keepDims) { + keepDimsShape = expandShapeToKeepDim(xMean.shape, axes); + } + const devSquared = square(sub(cast(x, "float32"), reshape(xMean, keepDimsShape))); + const variance = mean(devSquared, axes, keepDims); + return { mean: xMean, variance }; + } + var moments = op({ moments_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/not_equal.js + init_define_BUILD_VERSION(); + function notEqual_(a, b) { + let $a = convertToTensor(a, "a", "notEqual", "string_or_numeric"); + let $b = convertToTensor(b, "b", "notEqual", "string_or_numeric"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + return ENGINE.runKernel(NotEqual, inputs); + } + var notEqual = op({ notEqual_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ones_like.js + init_define_BUILD_VERSION(); + function onesLike_(x) { + const $x = convertToTensor(x, "x", "onesLike"); + const inputs = { x: $x }; + return ENGINE.runKernel(OnesLike, inputs); + } + var onesLike = op({ onesLike_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/pad.js + init_define_BUILD_VERSION(); + function pad_(x, paddings, constantValue = 0) { + const $x = convertToTensor(x, "x", "pad"); + if ($x.rank === 0) { + throw new Error("pad(scalar) is not defined. Pass non-scalar to pad"); + } + const attrs = { paddings, constantValue }; + const inputs = { x: $x }; + return ENGINE.runKernel(PadV2, inputs, attrs); + } + var pad = op({ pad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/pool.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/space_to_batch_nd.js + init_define_BUILD_VERSION(); + function spaceToBatchND_(x, blockShape, paddings) { + const $x = convertToTensor(x, "x", "spaceToBatchND"); + assert($x.rank >= 1 + blockShape.length, () => `input rank ${$x.rank} should be > than [blockShape] ${blockShape.length}`); + assert(paddings.length === blockShape.length, () => `paddings.shape[0] ${paddings.length} must be equal to [blockShape] ${blockShape.length}`); + assert($x.shape.reduce((a, b, i) => { + if (i > 0 && i <= blockShape.length) { + return a && (b + paddings[i - 1][0] + paddings[i - 1][1]) % blockShape[i - 1] === 0; + } + return a; + }, true), () => `input spatial dimensions ${$x.shape.slice(1)} with paddings ${paddings.toString()} must be divisible by blockShapes ${blockShape.toString()}`); + const inputs = { x: $x }; + const attrs = { blockShape, paddings }; + return ENGINE.runKernel(SpaceToBatchND, inputs, attrs); + } + var spaceToBatchND = op({ spaceToBatchND_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/pool.js + function pool_(input2, windowShape, poolingType, pad3, dilations, strides, dimRoundingMode) { + if (dilations == null) { + dilations = [1, 1]; + } + if (strides == null) { + strides = 1; + } + if (pad3 === 0) { + pad3 = "valid"; + } + const $x = convertToTensor(input2, "x", "maxPool"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in pool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = computePool2DInfo(x4D.shape, windowShape, strides, dilations, pad3); + const dilation = [convInfo.dilationHeight, convInfo.dilationWidth]; + let basePadding; + if (pad3 === "same") { + basePadding = withSpaceToBatchBasePaddings([convInfo.filterHeight, convInfo.filterWidth], dilation); + } else { + basePadding = [[0, 0], [0, 0]]; + } + const isDilationOne = dilation[0] === 1 && dilation[1] === 1; + const [adjustedPadding, adjustedCrops] = requiredSpaceToBatchPaddings([convInfo.inHeight, convInfo.inWidth], dilation, basePadding); + const convertedPad = isDilationOne ? pad3 : "valid"; + const convertedX = isDilationOne ? x4D : spaceToBatchND(x4D, dilation, adjustedPadding); + const forwardOp = poolingType === "avg" ? () => avgPool(convertedX, windowShape, strides, convertedPad, dimRoundingMode) : () => maxPool(convertedX, windowShape, strides, convertedPad, dimRoundingMode); + const y = forwardOp(); + const res = isDilationOne ? y : batchToSpaceND(y, dilation, adjustedCrops); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + function requiredSpaceToBatchPaddings(inputShape, blockShape, basePadding) { + const padStart = basePadding.map((b) => b[0]); + const origPadEnd = basePadding.map((b) => b[1]); + const fullInputShape = inputShape.concat(padStart, origPadEnd); + const padEndExtra = blockShape.map((b, i) => (b - fullInputShape[i] % b) % b); + const padEnd = origPadEnd.map((s, i) => s + padEndExtra[i]); + const paddings = blockShape.map((_, i) => [padStart[i], padEnd[i]]); + const crops = blockShape.map((_, i) => [0, padEndExtra[i]]); + return [paddings, crops]; + } + function withSpaceToBatchBasePaddings(filterShape, dilation) { + const dilatedFilterShape = filterShape.map((s, i) => { + return s + (s - 1) * (dilation[i] - 1); + }); + const padExtraShape = dilatedFilterShape.map((s) => s - 1); + const padExtraStart = padExtraShape.map((s) => Math.floor(s / 2)); + const padExtraEnd = padExtraShape.map((s, i) => s - padExtraStart[i]); + return padExtraShape.map((_, i) => { + return [padExtraStart[i], padExtraEnd[i]]; + }); + } + var pool = op({ pool_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/prelu.js + init_define_BUILD_VERSION(); + function prelu_(x, alpha) { + const $x = convertToTensor(x, "x", "prelu"); + const $alpha = convertToTensor(alpha, "alpha", "prelu"); + const inputs = { x: $x, alpha: $alpha }; + return ENGINE.runKernel(Prelu, inputs); + } + var prelu = op({ prelu_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/prod.js + init_define_BUILD_VERSION(); + function prod_(x, axis = null, keepDims = false) { + let $x = convertToTensor(x, "x", "prod"); + if ($x.dtype === "bool") { + $x = cast($x, "int32"); + } + const inputs = { x: $x }; + const attrs = { axis, keepDims }; + return ENGINE.runKernel(Prod, inputs, attrs); + } + var prod = op({ prod_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/rand_util.js + init_define_BUILD_VERSION(); + var seedrandom = __toESM(require_seedrandom2()); + var MPRandGauss = class { + constructor(mean4, stdDeviation, dtype, truncated, seed) { + this.mean = mean4; + this.stdDev = stdDeviation; + this.dtype = dtype; + this.nextVal = NaN; + this.truncated = truncated; + if (this.truncated) { + this.upper = this.mean + this.stdDev * 2; + this.lower = this.mean - this.stdDev * 2; + } + const seedValue = seed ? seed : Math.random(); + this.random = seedrandom.alea(seedValue.toString()); + } + nextValue() { + if (!isNaN(this.nextVal)) { + const value = this.nextVal; + this.nextVal = NaN; + return value; + } + let resultX, resultY; + let isValid = false; + while (!isValid) { + let v1, v2, s; + do { + v1 = 2 * this.random() - 1; + v2 = 2 * this.random() - 1; + s = v1 * v1 + v2 * v2; + } while (s >= 1 || s === 0); + const mul2 = Math.sqrt(-2 * Math.log(s) / s); + resultX = this.mean + this.stdDev * v1 * mul2; + resultY = this.mean + this.stdDev * v2 * mul2; + if (!this.truncated || this.isValidTruncated(resultX)) { + isValid = true; + } + } + if (!this.truncated || this.isValidTruncated(resultY)) { + this.nextVal = this.convertValue(resultY); + } + return this.convertValue(resultX); + } + convertValue(value) { + if (this.dtype == null || this.dtype === "float32") { + return value; + } + return Math.round(value); + } + isValidTruncated(value) { + return value <= this.upper && value >= this.lower; + } + }; + var UniformRandom = class { + constructor(min6 = 0, max6 = 1, dtype, seed) { + this.canReturnFloat = () => this.dtype == null || this.dtype === "float32"; + this.min = min6; + this.range = max6 - min6; + this.dtype = dtype; + if (seed == null) { + seed = Math.random(); + } + if (typeof seed === "number") { + seed = seed.toString(); + } + if (!this.canReturnFloat() && this.range <= 1) { + throw new Error(`The difference between ${min6} - ${max6} <= 1 and dtype is not float`); + } + this.random = seedrandom.alea(seed); + } + convertValue(value) { + if (this.canReturnFloat()) { + return value; + } + return Math.round(value); + } + nextValue() { + return this.convertValue(this.min + this.range * this.random()); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/random_normal.js + init_define_BUILD_VERSION(); + function randomNormal_(shape, mean4 = 0, stdDev = 1, dtype, seed) { + if (dtype != null && dtype === "bool") { + throw new Error(`Unsupported data type ${dtype}`); + } + const randGauss = new MPRandGauss(mean4, stdDev, dtype, false, seed); + const res = buffer(shape, dtype); + for (let i = 0; i < res.values.length; i++) { + res.values[i] = randGauss.nextValue(); + } + return res.toTensor(); + } + var randomNormal = op({ randomNormal_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/random_uniform.js + init_define_BUILD_VERSION(); + function randomUniform_(shape, minval = 0, maxval = 1, dtype = "float32", seed) { + const res = buffer(shape, dtype); + const random = new UniformRandom(minval, maxval, null, seed); + for (let i = 0; i < res.values.length; i++) { + res.values[i] = random.nextValue(); + } + return res.toTensor(); + } + var randomUniform = op({ randomUniform_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/range.js + init_define_BUILD_VERSION(); + function range(start, stop, step5 = 1, dtype = "float32") { + if (step5 === 0) { + throw new Error("Cannot have a step of zero"); + } + const attrs = { start, stop, step: step5, dtype }; + return ENGINE.runKernel(Range, {}, attrs); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/reciprocal.js + init_define_BUILD_VERSION(); + function reciprocal_(x) { + const $x = convertToTensor(x, "x", "reciprocal"); + const inputs = { x: $x }; + return ENGINE.runKernel(Reciprocal, inputs); + } + var reciprocal = op({ reciprocal_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/relu.js + init_define_BUILD_VERSION(); + function relu_(x) { + const $x = convertToTensor(x, "x", "relu"); + const inputs = { x: $x }; + return ENGINE.runKernel(Relu, inputs); + } + var relu = op({ relu_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/relu6.js + init_define_BUILD_VERSION(); + function relu6_(x) { + const $x = convertToTensor(x, "x", "relu6"); + const inputs = { x: $x }; + return ENGINE.runKernel(Relu6, inputs); + } + var relu6 = op({ relu6_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/reverse.js + init_define_BUILD_VERSION(); + function reverse_(x, axis) { + const $x = convertToTensor(x, "x", "reverse"); + const inputs = { x: $x }; + const attrs = { dims: axis }; + return ENGINE.runKernel(Reverse, inputs, attrs); + } + var reverse = op({ reverse_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/round.js + init_define_BUILD_VERSION(); + function round_(x) { + const $x = convertToTensor(x, "x", "round"); + const inputs = { x: $x }; + return ENGINE.runKernel(Round, inputs); + } + var round2 = op({ round_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/rsqrt.js + init_define_BUILD_VERSION(); + function rsqrt_(x) { + const $x = convertToTensor(x, "x", "rsqrt", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Rsqrt, inputs); + } + var rsqrt = op({ rsqrt_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/selu.js + init_define_BUILD_VERSION(); + function selu_(x) { + const $x = convertToTensor(x, "x", "selu"); + const inputs = { x: $x }; + return ENGINE.runKernel(Selu, inputs); + } + var selu = op({ selu_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/separable_conv2d.js + init_define_BUILD_VERSION(); + function separableConv2d_(x, depthwiseFilter, pointwiseFilter, strides, pad3, dilation = [1, 1], dataFormat = "NHWC") { + const $x = convertToTensor(x, "x", "separableConv2d"); + const $depthwiseFilter = convertToTensor(depthwiseFilter, "depthwiseFilter", "separableConv2d"); + const $pointwiseFilter = convertToTensor(pointwiseFilter, "pointwiseFilter", "separableConv2d"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + if (dataFormat === "NCHW") { + throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported"); + } + assert(x4D.rank === 4, () => `Error in separableConv2d: input must be rank 4, but got rank ${x4D.rank}.`); + assert($depthwiseFilter.rank === 4, () => `Error in separableConv2d: depthwise filter must be rank 4, but got rank ${$depthwiseFilter.rank}.`); + assert($pointwiseFilter.rank === 4, () => `Error in separableConv2d: pointwise filter must be rank 4, but got rank ${$depthwiseFilter.rank}.`); + assert($pointwiseFilter.shape[0] === 1, () => `Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${$pointwiseFilter.shape[0]}.`); + assert($pointwiseFilter.shape[1] === 1, () => `Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${$pointwiseFilter.shape[1]}.`); + const inChannels = $depthwiseFilter.shape[2]; + const channelMultiplier = $depthwiseFilter.shape[3]; + assert($pointwiseFilter.shape[2] === inChannels * channelMultiplier, () => `Error in separableConv2d: the third dimension of pointwise filter must be ${inChannels * channelMultiplier}, but got ${$pointwiseFilter.shape[2]}.`); + const depthwise = depthwiseConv2d(x4D, $depthwiseFilter, strides, pad3, dataFormat, dilation); + const pointwiseStride = 1; + const res = conv2d(depthwise, $pointwiseFilter, pointwiseStride, "valid", dataFormat); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var separableConv2d = op({ separableConv2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sign.js + init_define_BUILD_VERSION(); + function sign_(x) { + const $x = convertToTensor(x, "x", "sign"); + const inputs = { x: $x }; + return ENGINE.runKernel(Sign, inputs); + } + var sign = op({ sign_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sin.js + init_define_BUILD_VERSION(); + function sin_(x) { + const $x = convertToTensor(x, "x", "sin", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Sin, inputs); + } + var sin = op({ sin_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sinh.js + init_define_BUILD_VERSION(); + function sinh_(x) { + const $x = convertToTensor(x, "x", "sinh"); + const inputs = { x: $x }; + return ENGINE.runKernel(Sinh, inputs); + } + var sinh = op({ sinh_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice1d.js + init_define_BUILD_VERSION(); + function slice1d_(x, begin, size) { + const $x = convertToTensor(x, "x", "slice1d"); + assert($x.rank === 1, () => `slice1d expects a rank-1 tensor, but got a rank-${$x.rank} tensor`); + return slice($x, [begin], [size]); + } + var slice1d = op({ slice1d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice2d.js + init_define_BUILD_VERSION(); + function slice2d_(x, begin, size) { + const $x = convertToTensor(x, "x", "slice2d"); + assert($x.rank === 2, () => `slice2d expects a rank-2 tensor, but got a rank-${$x.rank} tensor`); + return slice($x, begin, size); + } + var slice2d = op({ slice2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice3d.js + init_define_BUILD_VERSION(); + function slice3d_(x, begin, size) { + const $x = convertToTensor(x, "x", "slice3d"); + assert($x.rank === 3, () => `slice3d expects a rank-3 tensor, but got a rank-${$x.rank} tensor`); + return slice($x, begin, size); + } + var slice3d = op({ slice3d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/slice4d.js + init_define_BUILD_VERSION(); + function slice4d_(x, begin, size) { + const $x = convertToTensor(x, "x", "slice4d"); + assert($x.rank === 4, () => `slice4d expects a rank-4 tensor, but got a rank-${$x.rank} tensor`); + return slice($x, begin, size); + } + var slice4d = op({ slice4d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/softmax.js + init_define_BUILD_VERSION(); + function softmax_(logits, dim = -1) { + const $logits = convertToTensor(logits, "logits", "softmax", "float32"); + if (dim === -1) { + dim = $logits.rank - 1; + } + if (dim !== $logits.rank - 1) { + throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${$logits.rank} and dim was ${dim}`); + } + const inputs = { logits: $logits }; + const attrs = { dim }; + return ENGINE.runKernel(Softmax, inputs, attrs); + } + var softmax = op({ softmax_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/fft.js + init_define_BUILD_VERSION(); + function fft_(input2) { + assert(input2.dtype === "complex64", () => `The dtype for tf.spectral.fft() must be complex64 but got ${input2.dtype}.`); + const inputs = { input: input2 }; + return ENGINE.runKernel(FFT, inputs); + } + var fft = op({ fft_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/ifft.js + init_define_BUILD_VERSION(); + function ifft_(input2) { + assert(input2.dtype === "complex64", () => `The dtype for tf.spectral.ifft() must be complex64 but got ${input2.dtype}.`); + const inputs = { input: input2 }; + return ENGINE.runKernel(IFFT, inputs); + } + var ifft = op({ ifft_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/irfft.js + init_define_BUILD_VERSION(); + function irfft_(input2) { + const innerDimensionSize = input2.shape[input2.shape.length - 1]; + const batch = input2.size / innerDimensionSize; + let ret; + if (innerDimensionSize <= 2) { + const complexInput = reshape(input2, [batch, innerDimensionSize]); + ret = ifft(complexInput); + } else { + const outputShape = [batch, 2 * (innerDimensionSize - 1)]; + const realInput = reshape(real(input2), [batch, innerDimensionSize]); + const imagInput = reshape(imag(input2), [batch, innerDimensionSize]); + const realConjugate = reverse(slice(realInput, [0, 1], [batch, innerDimensionSize - 2]), 1); + const imagConjugate = mul(reverse(slice(imagInput, [0, 1], [batch, innerDimensionSize - 2]), 1), scalar(-1)); + const r = concat([realInput, realConjugate], 1); + const i = concat([imagInput, imagConjugate], 1); + const complexInput = reshape(complex(r, i), [outputShape[0], outputShape[1]]); + ret = ifft(complexInput); + } + ret = real(ret); + if (input2.rank === 3 && input2.shape[0] !== 0) { + const temp = ret; + const batch2 = input2.shape[0]; + ret = reshape(ret, [batch2, ret.shape[0] / batch2, ret.shape[1]]); + temp.dispose(); + } + return ret; + } + var irfft = op({ irfft_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/rfft.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/split.js + init_define_BUILD_VERSION(); + function split_(x, numOrSizeSplits, axis = 0) { + const $x = convertToTensor(x, "x", "split"); + const inputs = { x: $x }; + const attr = { numOrSizeSplits, axis }; + return ENGINE.runKernel(SplitV, inputs, attr); + } + var split = op({ split_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/spectral/rfft.js + function rfft_(input2, fftLength) { + assert(input2.dtype === "float32", () => `The dtype for rfft() must be real value but got ${input2.dtype}`); + let innerDimensionSize = input2.shape[input2.shape.length - 1]; + const batch = input2.size / innerDimensionSize; + let adjustedInput; + if (fftLength != null && fftLength < innerDimensionSize) { + const begin = input2.shape.map((v) => 0); + const size = input2.shape.map((v) => v); + size[input2.shape.length - 1] = fftLength; + adjustedInput = slice(input2, begin, size); + innerDimensionSize = fftLength; + } else if (fftLength != null && fftLength > innerDimensionSize) { + const zerosShape = input2.shape.map((v) => v); + zerosShape[input2.shape.length - 1] = fftLength - innerDimensionSize; + adjustedInput = concat([input2, zeros(zerosShape)], input2.shape.length - 1); + innerDimensionSize = fftLength; + } else { + adjustedInput = input2; + } + const zerosInput = zerosLike(adjustedInput); + const complexInput = reshape(complex(adjustedInput, zerosInput), [batch, innerDimensionSize]); + const ret = fft(complexInput); + const half = Math.floor(innerDimensionSize / 2) + 1; + const realValues = real(ret); + const imagValues = imag(ret); + const realComplexConjugate = split(realValues, [half, innerDimensionSize - half], realValues.shape.length - 1); + const imagComplexConjugate = split(imagValues, [half, innerDimensionSize - half], imagValues.shape.length - 1); + const outputShape = adjustedInput.shape.slice(); + outputShape[adjustedInput.shape.length - 1] = half; + return reshape(complex(realComplexConjugate[0], imagComplexConjugate[0]), outputShape); + } + var rfft = op({ rfft_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/squared_difference.js + init_define_BUILD_VERSION(); + function squaredDifference_(a, b) { + let $a = convertToTensor(a, "a", "squaredDifference"); + let $b = convertToTensor(b, "b", "squaredDifference"); + [$a, $b] = makeTypesMatch($a, $b); + assertAndGetBroadcastShape($a.shape, $b.shape); + const inputs = { a: $a, b: $b }; + const attrs = {}; + return ENGINE.runKernel(SquaredDifference, inputs, attrs); + } + var squaredDifference = op({ squaredDifference_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/squeeze.js + init_define_BUILD_VERSION(); + function squeeze_(x, axis) { + const $x = convertToTensor(x, "x", "squeeze", "string_or_numeric"); + return reshape($x, squeezeShape($x.shape, axis).newShape); + } + var squeeze = op({ squeeze_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/stack.js + init_define_BUILD_VERSION(); + function stack_(tensors, axis = 0) { + const $tensors = convertToTensorArray(tensors, "tensors", "stack", "string_or_numeric"); + assert($tensors.length >= 1, () => "Pass at least one tensor to tf.stack"); + if ($tensors.length > 0) { + assert(axis <= $tensors[0].rank, () => "Axis must be <= rank of the tensor"); + } + const inputs = $tensors; + const attrs = { axis }; + return ENGINE.runKernel(Pack, inputs, attrs); + } + var stack = op({ stack_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/step.js + init_define_BUILD_VERSION(); + function step_(x, alpha = 0) { + const $x = convertToTensor(x, "x", "step"); + const inputs = { x: $x }; + const attrs = { alpha }; + return ENGINE.runKernel(Step, inputs, attrs); + } + var step = op({ step_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/strided_slice.js + init_define_BUILD_VERSION(); + function stridedSlice_(x, begin, end, strides, beginMask = 0, endMask = 0, ellipsisMask = 0, newAxisMask = 0, shrinkAxisMask = 0) { + const $x = convertToTensor(x, "x", "stridedSlice", "string_or_numeric"); + const inputs = { x: $x }; + const attrs = { + begin, + end, + strides, + beginMask, + endMask, + ellipsisMask, + newAxisMask, + shrinkAxisMask + }; + return ENGINE.runKernel(StridedSlice, inputs, attrs); + } + var stridedSlice = op({ stridedSlice_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tan.js + init_define_BUILD_VERSION(); + function tan_(x) { + const $x = convertToTensor(x, "x", "tan", "float32"); + const inputs = { x: $x }; + return ENGINE.runKernel(Tan, inputs); + } + var tan = op({ tan_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor1d.js + init_define_BUILD_VERSION(); + function tensor1d(values, dtype) { + assertNonNull(values); + const inferredShape = inferShape(values, dtype); + if (inferredShape.length !== 1) { + throw new Error("tensor1d() requires values to be a flat/TypedArray"); + } + const shape = null; + return makeTensor(values, shape, inferredShape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/tensor2d.js + init_define_BUILD_VERSION(); + function tensor2d(values, shape, dtype) { + assertNonNull(values); + if (shape != null && shape.length !== 2) { + throw new Error("tensor2d() requires shape to have two numbers"); + } + const inferredShape = inferShape(values, dtype); + if (inferredShape.length !== 2 && inferredShape.length !== 1) { + throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray"); + } + if (inferredShape.length === 1 && shape == null) { + throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray"); + } + return makeTensor(values, shape, inferredShape, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/topk.js + init_define_BUILD_VERSION(); + function topk_(x, k = 1, sorted = true) { + const $x = convertToTensor(x, "x", "topk"); + if ($x.rank === 0) { + throw new Error("topk() expects the input to be of rank 1 or higher"); + } + const lastDim = $x.shape[$x.shape.length - 1]; + if (k < 0) { + throw new Error(`'k' passed to topk() must be >= 0 but got ${k}`); + } + if (k > lastDim) { + throw new Error(`'k' passed to topk() must be <= the last dimension (${lastDim}) but got ${k}`); + } + const inputs = { x: $x }; + const attrs = { k, sorted }; + const [values, indices] = ENGINE.runKernel(TopK, inputs, attrs); + return { values, indices }; + } + var topk = op({ topk_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/truncated_normal.js + init_define_BUILD_VERSION(); + function truncatedNormal_(shape, mean4 = 0, stdDev = 1, dtype, seed) { + if (dtype != null && dtype === "bool") { + throw new Error(`Unsupported data type $ { dtype }`); + } + const randGauss = new MPRandGauss(mean4, stdDev, dtype, true, seed); + const res = buffer(shape, dtype); + for (let i = 0; i < res.values.length; i++) { + res.values[i] = randGauss.nextValue(); + } + return res.toTensor(); + } + var truncatedNormal = op({ truncatedNormal_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/unique.js + init_define_BUILD_VERSION(); + function unique_(x, axis = 0) { + const $x = convertToTensor(x, "x", "unique", "string_or_numeric"); + assert($x.rank > 0, () => "The input tensor must be at least 1D"); + const inputs = { x: $x }; + const attrs = { axis }; + const [values, indices] = ENGINE.runKernel(Unique, inputs, attrs); + return { values, indices }; + } + var unique = op({ unique_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/unsorted_segment_sum.js + init_define_BUILD_VERSION(); + function unsortedSegmentSum_(x, segmentIds, numSegments) { + const $x = convertToTensor(x, "x", "unsortedSegmentSum"); + const $segmentIds = convertToTensor(segmentIds, "segmentIds", "unsortedSegmentSum", "int32"); + assert(isInt(numSegments), () => "numSegments must be of dtype int"); + const inputs = { x: $x, segmentIds: $segmentIds }; + const attrs = { numSegments }; + return ENGINE.runKernel(UnsortedSegmentSum, inputs, attrs); + } + var unsortedSegmentSum = op({ unsortedSegmentSum_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/unstack.js + init_define_BUILD_VERSION(); + function unstack_(x, axis = 0) { + const $x = convertToTensor(x, "x", "unstack", "string_or_numeric"); + assert(axis >= -$x.shape.length && axis < $x.shape.length, () => `Axis = ${axis} is not in [-${$x.shape.length}, ${$x.shape.length})`); + const inputs = { value: $x }; + const attrs = { axis }; + return ENGINE.runKernel(Unpack, inputs, attrs); + } + var unstack = op({ unstack_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/variable.js + init_define_BUILD_VERSION(); + function variable(initialValue, trainable = true, name, dtype) { + return ENGINE.makeVariable(initialValue, trainable, name, dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/where_impl.js + init_define_BUILD_VERSION(); + function whereImpl(condShape, condVals) { + const indices = []; + for (let i = 0; i < condVals.length; i++) { + if (condVals[i]) { + indices.push(i); + } + } + const inBuffer = buffer(condShape, "int32"); + const out = buffer([indices.length, condShape.length], "int32"); + for (let i = 0; i < indices.length; i++) { + const loc = inBuffer.indexToLoc(indices[i]); + const offset = i * condShape.length; + out.values.set(loc, offset); + } + return out.toTensor(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/dropout.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/dropout_util.js + init_define_BUILD_VERSION(); + function getNoiseShape(x, noiseShape) { + if (noiseShape == null) { + return x.shape.slice(); + } + if (arraysEqual(x.shape, noiseShape)) { + return noiseShape; + } + if (x.shape.length === noiseShape.length) { + const newDimension = []; + for (let i = 0; i < x.shape.length; i++) { + if (noiseShape[i] == null && x.shape[i] != null) { + newDimension.push(x.shape[i]); + } else { + newDimension.push(noiseShape[i]); + } + } + return newDimension; + } + return noiseShape; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/dropout.js + function dropout_(x, rate, noiseShape, seed) { + const $x = convertToTensor(x, "x", "dropout"); + assert($x.dtype === "float32", () => `x has to be a floating point tensor since it's going to be scaled, but got a ${$x.dtype} tensor instead.`); + assert(rate >= 0 && rate < 1, () => `rate must be a float in the range [0, 1), but got ${rate}.`); + if (rate === 0) { + return x instanceof Tensor ? $x.clone() : $x; + } + const $noiseShape = getNoiseShape($x, noiseShape); + const keepProb = 1 - rate; + const multiplier = div(floor(add2(randomUniform($noiseShape, 0, 1, "float32", seed), keepProb)), keepProb); + return mul($x, multiplier); + } + var dropout = op({ dropout_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused_ops.js + var fused_ops_exports = {}; + __export(fused_ops_exports, { + conv2d: () => conv2d2, + depthwiseConv2d: () => depthwiseConv2d2, + matMul: () => matMul2 + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/conv2d.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_backprop_filter.js + init_define_BUILD_VERSION(); + function conv2DBackpropFilter_(x, dy, filterShape, strides, pad3, dataFormat = "NHWC", dimRoundingMode) { + let x4D = x; + if (x.rank === 3) { + x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]); + } + let dy4D = dy; + if (dy4D.rank === 3) { + dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in conv2dDerFilter: input must be rank 4, but got shape ${x4D.shape}.`); + assert(dy4D.rank === 4, () => `Error in conv2dDerFilter: dy must be rank 4, but got shape ${dy4D.shape}.`); + assert(filterShape.length === 4, () => `Error in conv2dDerFilter: filterShape must be length 4, but got ${filterShape}.`); + const inDepth = dataFormat === "NHWC" ? x4D.shape[3] : x4D.shape[1]; + const outDepth = dataFormat === "NHWC" ? dy4D.shape[3] : dy4D.shape[1]; + assert(inDepth === filterShape[2], () => `Error in conv2dDerFilter: depth of input ${inDepth}) must match input depth in filter (${filterShape[2]}.`); + assert(outDepth === filterShape[3], () => `Error in conv2dDerFilter: depth of dy (${outDepth}) must match output depth for filter (${filterShape[3]}).`); + checkPadOnDimRoundingMode("conv2dDerFilter", pad3, dimRoundingMode); + const inputs = { x: x4D, dy: dy4D }; + const attrs = { strides, pad: pad3, dataFormat, dimRoundingMode, filterShape }; + return ENGINE.runKernel(Conv2DBackpropFilter, inputs, attrs); + } + var conv2DBackpropFilter = op({ conv2DBackpropFilter_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused_util.js + init_define_BUILD_VERSION(); + function getFusedDyActivation(dy, y, activation) { + if (activation == null || activation === "linear") { + return dy; + } + if (activation === "relu") { + return mul(dy, step(y)); + } + throw new Error(`Cannot compute gradient for fused activation ${activation}.`); + } + function getFusedBiasGradient(bias, dyActivation) { + let res = dyActivation; + const reduceAxes = getReductionAxes(bias.shape, dyActivation.shape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, bias.shape); + } + function applyActivation(x, activation, preluActivationWeights, leakyreluAlpha) { + if (activation === "linear") { + return x; + } else if (activation === "relu") { + return relu(x); + } else if (activation === "elu") { + return elu(x); + } else if (activation === "relu6") { + return relu6(x); + } else if (activation === "prelu") { + return prelu(x, preluActivationWeights); + } else if (activation === "leakyrelu") { + return leakyRelu(x, leakyreluAlpha); + } else if (activation === "sigmoid") { + return sigmoid(x); + } + throw new Error(`Unknown fused activation ${activation}.`); + } + var shouldFuse = (gradientDepth, activation) => { + const gradientMode = gradientDepth > 0; + return !gradientMode || activation === "linear"; + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/conv2d.js + function fusedConv2d_({ x, filter, strides, pad: pad3, dataFormat = "NHWC", dilations = [1, 1], dimRoundingMode, bias, activation = "linear", preluActivationWeights, leakyreluAlpha }) { + activation = activation || "linear"; + if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) { + assert(dataFormat === "NHWC", () => `Error in fused conv2d: got dataFormat of ${dataFormat} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`); + let result = conv2d(x, filter, strides, pad3, dataFormat, dilations, dimRoundingMode); + if (bias != null) { + result = add2(result, bias); + } + return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha); + } + const $x = convertToTensor(x, "x", "conv2d", "float32"); + const $filter = convertToTensor(filter, "filter", "conv2d", "float32"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in fused conv2d: input must be rank 4, but got rank ${x4D.rank}.`); + assert($filter.rank === 4, () => `Error in fused conv2d: filter must be rank 4, but got rank ${$filter.rank}.`); + checkPadOnDimRoundingMode("fused conv2d", pad3, dimRoundingMode); + const inputChannels = dataFormat === "NHWC" ? x4D.shape[3] : x4D.shape[1]; + assert($filter.shape[2] === inputChannels, () => `Error in conv2d: depth of input (${inputChannels}) must match input depth for filter ${$filter.shape[2]}.`); + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = computeConv2DInfo(x4D.shape, $filter.shape, strides, dilations, pad3, dimRoundingMode); + let $bias; + if (bias != null) { + $bias = convertToTensor(bias, "bias", "fused conv2d"); + [$bias] = makeTypesMatch($bias, $x); + if (dataFormat === "NHWC") { + assertAndGetBroadcastShape(convInfo.outShape, $bias.shape); + } else { + assert($bias.shape.length <= 1, () => `Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${$bias.shape.length}.`); + assert($bias.shape.length === 0 || $bias.shape[0] === convInfo.outChannels || $bias.shape[0] === 1, () => `Error in fused conv2d: bias shape (${$bias.shape}) is not compatible with the number of output channels (${convInfo.outChannels})`); + } + } + let $preluActivationWeights; + if (preluActivationWeights != null) { + const alphaShape = preluActivationWeights.shape; + assert(alphaShape.length <= 1 || alphaShape.length === 3, () => `Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${alphaShape.length}.`); + if (alphaShape.length === 1) { + assert(alphaShape[0] === 1 || alphaShape[0] === convInfo.outChannels, () => `Error in fused conv2d: PReLU activation weights (${alphaShape}) is not compatible with the number of output channels (${convInfo.outChannels}).`); + } else if (alphaShape.length === 3) { + try { + assertAndGetBroadcastShape(alphaShape, convInfo.outShape); + } catch (e) { + const errMsg = `Error in fused conv2d: PReLU activation weights (${alphaShape}) is not compatible with the output shape of the conv2d (${convInfo.outShape}).`; + throw Error(errMsg); + } + } + $preluActivationWeights = convertToTensor(preluActivationWeights, "prelu weights", "fused conv2d"); + } + const grad = (dy, saved) => { + assert(dataFormat === "NHWC", () => `Error in gradient of fused conv2D: got dataFormat of ${dataFormat} but only NHWC is currently supported.`); + const [$filter2, x4D2, y, $bias2] = saved; + const dyActivation = getFusedDyActivation(dy, y, activation); + assert(tupleValuesAreOne(dilations), () => `Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${dilations}'`); + const xDer = conv2DBackpropInput(x4D2.shape, dyActivation, $filter2, strides, pad3); + const filterDer = conv2DBackpropFilter(x4D2, dyActivation, $filter2.shape, strides, pad3); + const der = [xDer, filterDer]; + if ($bias2 != null) { + const biasDer = getFusedBiasGradient($bias2, dyActivation); + der.push(biasDer); + } + return der; + }; + const inputs = { + x: x4D, + filter: $filter, + bias: $bias, + preluActivationWeights: $preluActivationWeights + }; + const attrs = { + strides, + pad: pad3, + dataFormat, + dilations, + dimRoundingMode, + activation, + leakyreluAlpha + }; + if (bias == null) { + const customOp = customGrad((x4D2, filter2, save) => { + let res = ENGINE.runKernel(FusedConv2D, inputs, attrs); + save([filter2, x4D2, res]); + if (reshapedTo4D) { + res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return { value: res, gradFunc: grad }; + }); + return customOp(x4D, $filter); + } else { + const customOpWithBias = customGrad((x4D2, filter2, bias2, save) => { + let res = ENGINE.runKernel(FusedConv2D, inputs, attrs); + save([filter2, x4D2, res, bias2]); + if (reshapedTo4D) { + res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return { value: res, gradFunc: grad }; + }); + return customOpWithBias(x4D, $filter, $bias); + } + } + var conv2d2 = op({ fusedConv2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/depthwise_conv2d.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d_native_backprop_filter.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNativeBackpropFilter_(x, dy, filterShape, strides, pad3, dilations = [1, 1], dimRoundingMode) { + let x4D = x; + if (x.rank === 3) { + x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]); + } + let dy4D = dy; + if (dy4D.rank === 3) { + dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]); + } + const inputs = { x: x4D, dy: dy4D }; + const attrs = { strides, pad: pad3, dimRoundingMode, dilations, filterShape }; + return ENGINE.runKernel(DepthwiseConv2dNativeBackpropFilter, inputs, attrs); + } + var depthwiseConv2dNativeBackpropFilter = op({ depthwiseConv2dNativeBackpropFilter_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d_native_backprop_input.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNativeBackpropInput_(xShape, dy, filter, strides, pad3, dilations = [1, 1], dimRoundingMode) { + let dy4D = dy; + let reshapedTo4D = false; + if (dy.rank === 3) { + reshapedTo4D = true; + dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]); + } + const inputs = { dy: dy4D, filter }; + const attrs = { strides, pad: pad3, dimRoundingMode, dilations, inputShape: xShape }; + const res = ENGINE.runKernel(DepthwiseConv2dNativeBackpropInput, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var depthwiseConv2dNativeBackpropInput = op({ depthwiseConv2dNativeBackpropInput_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/depthwise_conv2d.js + function fusedDepthwiseConv2d_({ x, filter, strides, pad: pad3, dataFormat = "NHWC", dilations = [1, 1], dimRoundingMode, bias, activation = "linear", preluActivationWeights, leakyreluAlpha }) { + if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) { + let result = depthwiseConv2d(x, filter, strides, pad3, dataFormat, dilations, dimRoundingMode); + if (bias != null) { + result = add2(result, bias); + } + return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha); + } + const $x = convertToTensor(x, "x", "depthwiseConv2d", "float32"); + const $filter = convertToTensor(filter, "filter", "depthwiseConv2d", "float32"); + let x4D = $x; + let reshapedTo4D = false; + if ($x.rank === 3) { + reshapedTo4D = true; + x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]); + } + assert(x4D.rank === 4, () => `Error in fused depthwiseConv2d: input must be rank 4, but got rank ${x4D.rank}.`); + assert($filter.rank === 4, () => `Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${$filter.rank}.`); + assert(x4D.shape[3] === $filter.shape[2], () => `Error in fused depthwiseConv2d: number of input channels (${x4D.shape[3]}) must match the inChannels dimension in filter ${$filter.shape[2]}.`); + if (dilations == null) { + dilations = [1, 1]; + } + assert(eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + checkPadOnDimRoundingMode("fused depthwiseConv2d", pad3, dimRoundingMode); + const convInfo = computeConv2DInfo(x4D.shape, $filter.shape, strides, dilations, pad3, dimRoundingMode, true); + let $bias; + if (bias != null) { + $bias = convertToTensor(bias, "bias", "fused conv2d"); + [$bias] = makeTypesMatch($bias, $x); + assertAndGetBroadcastShape(convInfo.outShape, $bias.shape); + } + let $preluActivationWeights; + if (preluActivationWeights != null) { + $preluActivationWeights = convertToTensor(preluActivationWeights, "prelu weights", "fused depthwiseConv2d"); + } + const grad = (dy, saved) => { + assert(tupleValuesAreOne(dilations), () => `Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${dilations}'`); + const [$filter2, x4D2, y, bias2] = saved; + const dyActivation = getFusedDyActivation(dy, y, activation); + const xDer = depthwiseConv2dNativeBackpropInput(x4D2.shape, dyActivation, $filter2, strides, pad3, dilations, dimRoundingMode); + const filterDer = depthwiseConv2dNativeBackpropFilter(x4D2, dyActivation, $filter2.shape, strides, pad3, dilations, dimRoundingMode); + if (bias2 != null) { + const biasDer = getFusedBiasGradient($bias, dyActivation); + return [xDer, filterDer, biasDer]; + } + return [xDer, filterDer]; + }; + const inputs = { + x: x4D, + filter: $filter, + bias: $bias, + preluActivationWeights: $preluActivationWeights + }; + const attrs = { + strides, + pad: pad3, + dataFormat, + dilations, + dimRoundingMode, + activation, + leakyreluAlpha + }; + if (bias == null) { + const customOp = customGrad((x4D2, filter2, save) => { + let res = ENGINE.runKernel(FusedDepthwiseConv2D, inputs, attrs); + save([filter2, x4D2, res]); + if (reshapedTo4D) { + res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return { value: res, gradFunc: grad }; + }); + return customOp(x4D, $filter); + } else { + const customOpWithBias = customGrad((x4D2, filter2, bias2, save) => { + let res = ENGINE.runKernel(FusedDepthwiseConv2D, inputs, attrs); + save([filter2, x4D2, res, bias2]); + if (reshapedTo4D) { + res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return { value: res, gradFunc: grad }; + }); + return customOpWithBias(x4D, $filter, $bias); + } + } + var depthwiseConv2d2 = op({ fusedDepthwiseConv2d_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/fused/mat_mul.js + init_define_BUILD_VERSION(); + function fusedMatMul_({ a, b, transposeA = false, transposeB = false, bias, activation = "linear", preluActivationWeights, leakyreluAlpha = 0.2 }) { + if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) { + let result = matMul(a, b, transposeA, transposeB); + if (bias != null) { + result = add2(result, bias); + } + return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha); + } + let $a = convertToTensor(a, "a", "fused matMul"); + let $b = convertToTensor(b, "b", "fused matMul"); + [$a, $b] = makeTypesMatch($a, $b); + const innerShapeA = transposeA ? $a.shape[$a.rank - 2] : $a.shape[$a.rank - 1]; + const innerShapeB = transposeB ? $b.shape[$b.rank - 1] : $b.shape[$b.rank - 2]; + const outerShapeA = transposeA ? $a.shape[$a.rank - 1] : $a.shape[$a.rank - 2]; + const outerShapeB = transposeB ? $b.shape[$b.rank - 2] : $b.shape[$b.rank - 1]; + const outerDimsA = $a.shape.slice(0, -2); + const outerDimsB = $b.shape.slice(0, -2); + const batchDimA = sizeFromShape(outerDimsA); + const batchDimB = sizeFromShape(outerDimsB); + assert(innerShapeA === innerShapeB, () => `Error in fused matMul: inner shapes (${innerShapeA}) and (${innerShapeB}) of Tensors with shapes ${$a.shape} and ${$b.shape} and transposeA=${transposeA} and transposeB=${transposeB} must match.`); + const outShapeOuterDims = assertAndGetBroadcastShape($a.shape.slice(0, -2), $b.shape.slice(0, -2)); + const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]); + const a3D = transposeA ? reshape($a, [batchDimA, innerShapeA, outerShapeA]) : reshape($a, [batchDimA, outerShapeA, innerShapeA]); + const b3D = transposeB ? reshape($b, [batchDimB, outerShapeB, innerShapeB]) : reshape($b, [batchDimB, innerShapeB, outerShapeB]); + let $bias; + if (bias != null) { + $bias = convertToTensor(bias, "bias", "fused matMul"); + [$bias] = makeTypesMatch($bias, $a); + assertAndGetBroadcastShape(outShape, $bias.shape); + } + let $preluActivationWeights; + if (preluActivationWeights != null) { + $preluActivationWeights = convertToTensor(preluActivationWeights, "prelu weights", "fused matMul"); + } + const grad = (dy, saved) => { + const [a3D2, b3D2, y, $bias2] = saved; + const dyActivation = getFusedDyActivation(reshape(dy, y.shape), y, activation); + let aDer; + let bDer; + if (!transposeA && !transposeB) { + aDer = matMul(dyActivation, b3D2, false, true); + bDer = matMul(a3D2, dyActivation, true, false); + } else if (!transposeA && transposeB) { + aDer = matMul(dyActivation, b3D2, false, false); + bDer = matMul(dyActivation, a3D2, true, false); + } else if (transposeA && !transposeB) { + aDer = matMul(b3D2, dyActivation, false, true); + bDer = matMul(a3D2, dyActivation, false, false); + } else { + aDer = matMul(b3D2, dyActivation, true, true); + bDer = matMul(dyActivation, a3D2, true, true); + } + if (bias != null) { + const biasDer = getFusedBiasGradient($bias2, dyActivation); + return [aDer, bDer, biasDer]; + } else { + return [aDer, bDer]; + } + }; + const inputs = { + a: a3D, + b: b3D, + bias: $bias, + preluActivationWeights: $preluActivationWeights + }; + const attrs = { transposeA, transposeB, activation, leakyreluAlpha }; + if (bias == null) { + const customOp = customGrad((a3D2, b3D2, save) => { + const res = ENGINE.runKernel(_FusedMatMul, inputs, attrs); + save([a3D2, b3D2, res]); + return { value: reshape(res, outShape), gradFunc: grad }; + }); + return customOp(a3D, b3D); + } else { + const customOpWithBias = customGrad((a3D2, b3D2, $bias2, save) => { + const res = ENGINE.runKernel(_FusedMatMul, inputs, attrs); + save([a3D2, b3D2, res, $bias2]); + return { value: reshape(res, outShape), gradFunc: grad }; + }); + return customOpWithBias(a3D, b3D, $bias); + } + } + var matMul2 = op({ fusedMatMul_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/crop_and_resize.js + init_define_BUILD_VERSION(); + function cropAndResize_(image2, boxes, boxInd, cropSize, method = "bilinear", extrapolationValue = 0) { + const $image = convertToTensor(image2, "image", "cropAndResize"); + const $boxes = convertToTensor(boxes, "boxes", "cropAndResize", "float32"); + const $boxInd = convertToTensor(boxInd, "boxInd", "cropAndResize", "int32"); + const numBoxes = $boxes.shape[0]; + assert($image.rank === 4, () => `Error in cropAndResize: image must be rank 4,but got rank ${$image.rank}.`); + assert($boxes.rank === 2 && $boxes.shape[1] === 4, () => `Error in cropAndResize: boxes must be have size [${numBoxes},4] but had shape ${$boxes.shape}.`); + assert($boxInd.rank === 1 && $boxInd.shape[0] === numBoxes, () => `Error in cropAndResize: boxInd must be have size [${numBoxes}] but had shape ${$boxes.shape}.`); + assert(cropSize.length === 2, () => `Error in cropAndResize: cropSize must be of length 2, but got length ${cropSize.length}.`); + assert(cropSize[0] >= 1 && cropSize[1] >= 1, () => `cropSize must be atleast [1,1], but was ${cropSize}`); + assert(method === "bilinear" || method === "nearest", () => `method must be bilinear or nearest, but was ${method}`); + const inputs = { image: $image, boxes: $boxes, boxInd: $boxInd }; + const attrs = { method, extrapolationValue, cropSize }; + const res = ENGINE.runKernel(CropAndResize, inputs, attrs); + return res; + } + var cropAndResize = op({ cropAndResize_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/flip_left_right.js + init_define_BUILD_VERSION(); + function flipLeftRight_(image2) { + const $image = convertToTensor(image2, "image", "flipLeftRight", "float32"); + assert($image.rank === 4, () => `Error in flipLeftRight: image must be rank 4,but got rank ${$image.rank}.`); + const inputs = { image: $image }; + const res = ENGINE.runKernel(FlipLeftRight, inputs, {}); + return res; + } + var flipLeftRight = op({ flipLeftRight_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/grayscale_to_rgb.js + init_define_BUILD_VERSION(); + function grayscaleToRGB_(image2) { + const $image = convertToTensor(image2, "image", "grayscaleToRGB"); + const lastDimsIdx = $image.rank - 1; + const lastDims = $image.shape[lastDimsIdx]; + assert($image.rank >= 2, () => `Error in grayscaleToRGB: images must be at least rank 2, but got rank ${$image.rank}.`); + assert(lastDims === 1, () => `Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${lastDims}.`); + const reps = new Array($image.rank); + reps.fill(1, 0, lastDimsIdx); + reps[lastDimsIdx] = 3; + return tile($image, reps); + } + var grayscaleToRGB = op({ grayscaleToRGB_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/rotate_with_offset.js + init_define_BUILD_VERSION(); + function rotateWithOffset_(image2, radians, fillValue = 0, center = 0.5) { + const $image = convertToTensor(image2, "image", "rotateWithOffset", "float32"); + assert($image.rank === 4, () => `Error in rotateWithOffset: image must be rank 4,but got rank ${$image.rank}.`); + const inputs = { image: $image }; + const attrs = { radians, fillValue, center }; + const res = ENGINE.runKernel(RotateWithOffset, inputs, attrs); + return res; + } + var rotateWithOffset = op({ rotateWithOffset_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/nonmax_util.js + init_define_BUILD_VERSION(); + function nonMaxSuppSanityCheck(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma) { + if (iouThreshold == null) { + iouThreshold = 0.5; + } + if (scoreThreshold == null) { + scoreThreshold = Number.NEGATIVE_INFINITY; + } + if (softNmsSigma == null) { + softNmsSigma = 0; + } + const numBoxes = boxes.shape[0]; + maxOutputSize = Math.min(maxOutputSize, numBoxes); + assert(0 <= iouThreshold && iouThreshold <= 1, () => `iouThreshold must be in [0, 1], but was '${iouThreshold}'`); + assert(boxes.rank === 2, () => `boxes must be a 2D tensor, but was of rank '${boxes.rank}'`); + assert(boxes.shape[1] === 4, () => `boxes must have 4 columns, but 2nd dimension was ${boxes.shape[1]}`); + assert(scores.rank === 1, () => "scores must be a 1D tensor"); + assert(scores.shape[0] === numBoxes, () => `scores has incompatible shape with boxes. Expected ${numBoxes}, but was ${scores.shape[0]}`); + assert(0 <= softNmsSigma && softNmsSigma <= 1, () => `softNmsSigma must be in [0, 1], but was '${softNmsSigma}'`); + return { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression.js + function nonMaxSuppression_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppression", "float32"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppression", "float32"); + const inputs = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold); + maxOutputSize = inputs.maxOutputSize; + iouThreshold = inputs.iouThreshold; + scoreThreshold = inputs.scoreThreshold; + const attrs = { maxOutputSize, iouThreshold, scoreThreshold }; + return ENGINE.runKernel(NonMaxSuppressionV3, { boxes: $boxes, scores: $scores }, attrs); + } + var nonMaxSuppression = op({ nonMaxSuppression_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_async.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_util.js + init_define_BUILD_VERSION(); + function binaryInsert(arr, element, comparator) { + const index = binarySearch(arr, element, comparator); + const insertionPoint = index < 0 ? -(index + 1) : index; + arr.splice(insertionPoint, 0, element); + } + function binarySearch(arr, target, comparator) { + return binarySearch_(arr, target, comparator || defaultComparator); + } + function defaultComparator(a, b) { + return a > b ? 1 : a < b ? -1 : 0; + } + function binarySearch_(arr, target, comparator) { + let left = 0; + let right = arr.length; + let middle = 0; + let found = false; + while (left < right) { + middle = left + (right - left >>> 1); + const compareResult = comparator(target, arr[middle]); + if (compareResult > 0) { + left = middle + 1; + } else { + right = middle; + found = !compareResult; + } + } + return found ? left : -left - 1; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_impl.js + function nonMaxSuppressionV3Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold) { + return nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, 0); + } + function nonMaxSuppressionV4Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize) { + return nonMaxSuppressionImpl_( + boxes, + scores, + maxOutputSize, + iouThreshold, + scoreThreshold, + 0, + false, + padToMaxOutputSize, + true + ); + } + function nonMaxSuppressionV5Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma) { + return nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma, true); + } + function nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma, returnScoresTensor = false, padToMaxOutputSize = false, returnValidOutputs = false) { + const candidates = []; + for (let i = 0; i < scores.length; i++) { + if (scores[i] > scoreThreshold) { + candidates.push({ score: scores[i], boxIndex: i, suppressBeginIndex: 0 }); + } + } + candidates.sort(ascendingComparator); + const scale2 = softNmsSigma > 0 ? -0.5 / softNmsSigma : 0; + const selectedIndices = []; + const selectedScores = []; + while (selectedIndices.length < maxOutputSize && candidates.length > 0) { + const candidate = candidates.pop(); + const { score: originalScore, boxIndex, suppressBeginIndex } = candidate; + if (originalScore < scoreThreshold) { + break; + } + let ignoreCandidate = false; + for (let j = selectedIndices.length - 1; j >= suppressBeginIndex; --j) { + const iou = intersectionOverUnion(boxes, boxIndex, selectedIndices[j]); + if (iou >= iouThreshold) { + ignoreCandidate = true; + break; + } + candidate.score = candidate.score * suppressWeight(iouThreshold, scale2, iou); + if (candidate.score <= scoreThreshold) { + break; + } + } + candidate.suppressBeginIndex = selectedIndices.length; + if (!ignoreCandidate) { + if (candidate.score === originalScore) { + selectedIndices.push(boxIndex); + selectedScores.push(candidate.score); + } else if (candidate.score > scoreThreshold) { + binaryInsert(candidates, candidate, ascendingComparator); + } + } + } + const validOutputs = selectedIndices.length; + const elemsToPad = maxOutputSize - validOutputs; + if (padToMaxOutputSize && elemsToPad > 0) { + selectedIndices.push(...new Array(elemsToPad).fill(0)); + selectedScores.push(...new Array(elemsToPad).fill(0)); + } + const result = { selectedIndices }; + if (returnScoresTensor) { + result["selectedScores"] = selectedScores; + } + if (returnValidOutputs) { + result["validOutputs"] = validOutputs; + } + return result; + } + function intersectionOverUnion(boxes, i, j) { + const iCoord = boxes.subarray(i * 4, i * 4 + 4); + const jCoord = boxes.subarray(j * 4, j * 4 + 4); + const yminI = Math.min(iCoord[0], iCoord[2]); + const xminI = Math.min(iCoord[1], iCoord[3]); + const ymaxI = Math.max(iCoord[0], iCoord[2]); + const xmaxI = Math.max(iCoord[1], iCoord[3]); + const yminJ = Math.min(jCoord[0], jCoord[2]); + const xminJ = Math.min(jCoord[1], jCoord[3]); + const ymaxJ = Math.max(jCoord[0], jCoord[2]); + const xmaxJ = Math.max(jCoord[1], jCoord[3]); + const areaI = (ymaxI - yminI) * (xmaxI - xminI); + const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ); + if (areaI <= 0 || areaJ <= 0) { + return 0; + } + const intersectionYmin = Math.max(yminI, yminJ); + const intersectionXmin = Math.max(xminI, xminJ); + const intersectionYmax = Math.min(ymaxI, ymaxJ); + const intersectionXmax = Math.min(xmaxI, xmaxJ); + const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0) * Math.max(intersectionXmax - intersectionXmin, 0); + return intersectionArea / (areaI + areaJ - intersectionArea); + } + function suppressWeight(iouThreshold, scale2, iou) { + const weight = Math.exp(scale2 * iou * iou); + return iou <= iouThreshold ? weight : 0; + } + function ascendingComparator(c1, c2) { + return c1.score - c2.score || c1.score === c2.score && c2.boxIndex - c1.boxIndex; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_async.js + async function nonMaxSuppressionAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppressionAsync"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppressionAsync"); + const inputs = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold); + maxOutputSize = inputs.maxOutputSize; + iouThreshold = inputs.iouThreshold; + scoreThreshold = inputs.scoreThreshold; + const boxesAndScores = await Promise.all([$boxes.data(), $scores.data()]); + const boxesVals = boxesAndScores[0]; + const scoresVals = boxesAndScores[1]; + const { selectedIndices } = nonMaxSuppressionV3Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold); + if ($boxes !== boxes) { + $boxes.dispose(); + } + if ($scores !== scores) { + $scores.dispose(); + } + return tensor1d(selectedIndices, "int32"); + } + var nonMaxSuppressionAsync = nonMaxSuppressionAsync_; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_with_score.js + init_define_BUILD_VERSION(); + function nonMaxSuppressionWithScore_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, softNmsSigma = 0) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppression"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppression"); + const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma); + maxOutputSize = params.maxOutputSize; + iouThreshold = params.iouThreshold; + scoreThreshold = params.scoreThreshold; + softNmsSigma = params.softNmsSigma; + const inputs = { boxes: $boxes, scores: $scores }; + const attrs = { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma }; + const result = ENGINE.runKernel(NonMaxSuppressionV5, inputs, attrs); + return { selectedIndices: result[0], selectedScores: result[1] }; + } + var nonMaxSuppressionWithScore = op({ nonMaxSuppressionWithScore_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_with_score_async.js + init_define_BUILD_VERSION(); + async function nonMaxSuppressionWithScoreAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, softNmsSigma = 0) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppressionAsync"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppressionAsync"); + const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma); + maxOutputSize = params.maxOutputSize; + iouThreshold = params.iouThreshold; + scoreThreshold = params.scoreThreshold; + softNmsSigma = params.softNmsSigma; + const boxesAndScores = await Promise.all([$boxes.data(), $scores.data()]); + const boxesVals = boxesAndScores[0]; + const scoresVals = boxesAndScores[1]; + const { selectedIndices, selectedScores } = nonMaxSuppressionV5Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma); + if ($boxes !== boxes) { + $boxes.dispose(); + } + if ($scores !== scores) { + $scores.dispose(); + } + return { + selectedIndices: tensor1d(selectedIndices, "int32"), + selectedScores: tensor1d(selectedScores) + }; + } + var nonMaxSuppressionWithScoreAsync = nonMaxSuppressionWithScoreAsync_; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_padded.js + init_define_BUILD_VERSION(); + function nonMaxSuppressionPadded_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, padToMaxOutputSize = false) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppression"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppression"); + const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, null); + const $maxOutputSize = params.maxOutputSize; + const $iouThreshold = params.iouThreshold; + const $scoreThreshold = params.scoreThreshold; + const inputs = { boxes: $boxes, scores: $scores }; + const attrs = { + maxOutputSize: $maxOutputSize, + iouThreshold: $iouThreshold, + scoreThreshold: $scoreThreshold, + padToMaxOutputSize + }; + const result = ENGINE.runKernel(NonMaxSuppressionV4, inputs, attrs); + return { selectedIndices: result[0], validOutputs: result[1] }; + } + var nonMaxSuppressionPadded = op({ nonMaxSuppressionPadded_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_padded_async.js + init_define_BUILD_VERSION(); + async function nonMaxSuppressionPaddedAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, padToMaxOutputSize = false) { + const $boxes = convertToTensor(boxes, "boxes", "nonMaxSuppressionAsync"); + const $scores = convertToTensor(scores, "scores", "nonMaxSuppressionAsync"); + const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, null); + const $maxOutputSize = params.maxOutputSize; + const $iouThreshold = params.iouThreshold; + const $scoreThreshold = params.scoreThreshold; + const [boxesVals, scoresVals] = await Promise.all([$boxes.data(), $scores.data()]); + const { selectedIndices, validOutputs } = nonMaxSuppressionV4Impl(boxesVals, scoresVals, $maxOutputSize, $iouThreshold, $scoreThreshold, padToMaxOutputSize); + if ($boxes !== boxes) { + $boxes.dispose(); + } + if ($scores !== scores) { + $scores.dispose(); + } + return { + selectedIndices: tensor1d(selectedIndices, "int32"), + validOutputs: scalar(validOutputs, "int32") + }; + } + var nonMaxSuppressionPaddedAsync = nonMaxSuppressionPaddedAsync_; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/resize_bilinear.js + init_define_BUILD_VERSION(); + function resizeBilinear_(images, size, alignCorners = false, halfPixelCenters = false) { + const $images = convertToTensor(images, "images", "resizeBilinear"); + assert($images.rank === 3 || $images.rank === 4, () => `Error in resizeBilinear: x must be rank 3 or 4, but got rank ${$images.rank}.`); + assert(size.length === 2, () => `Error in resizeBilinear: new shape must 2D, but got shape ${size}.`); + assert(halfPixelCenters === false || alignCorners === false, () => `Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.`); + let batchImages = $images; + let reshapedTo4D = false; + if ($images.rank === 3) { + reshapedTo4D = true; + batchImages = reshape($images, [1, $images.shape[0], $images.shape[1], $images.shape[2]]); + } + const [] = size; + const inputs = { images: batchImages }; + const attrs = { alignCorners, halfPixelCenters, size }; + const res = ENGINE.runKernel(ResizeBilinear, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var resizeBilinear = op({ resizeBilinear_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/resize_nearest_neighbor.js + init_define_BUILD_VERSION(); + function resizeNearestNeighbor_(images, size, alignCorners = false, halfPixelCenters = false) { + const $images = convertToTensor(images, "images", "resizeNearestNeighbor"); + assert($images.rank === 3 || $images.rank === 4, () => `Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${$images.rank}.`); + assert(size.length === 2, () => `Error in resizeNearestNeighbor: new shape must 2D, but got shape ${size}.`); + assert($images.dtype === "float32" || $images.dtype === "int32", () => "`images` must have `int32` or `float32` as dtype"); + assert(halfPixelCenters === false || alignCorners === false, () => `Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.`); + let batchImages = $images; + let reshapedTo4D = false; + if ($images.rank === 3) { + reshapedTo4D = true; + batchImages = reshape($images, [1, $images.shape[0], $images.shape[1], $images.shape[2]]); + } + const [] = size; + const inputs = { images: batchImages }; + const attrs = { alignCorners, halfPixelCenters, size }; + const res = ENGINE.runKernel(ResizeNearestNeighbor, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var resizeNearestNeighbor = op({ resizeNearestNeighbor_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/threshold.js + init_define_BUILD_VERSION(); + function threshold_(image2, method = "binary", inverted = false, threshValue = 0.5) { + const $image = convertToTensor(image2, "image", "threshold"); + const RED_INTENCITY_COEF = 0.2989; + const GREEN_INTENCITY_COEF = 0.587; + const BLUE_INTENCITY_COEF = 0.114; + const totalPixelsInImage = $image.shape[0] * $image.shape[1]; + let $threshold = mul(tensor1d([threshValue]), 255); + let r, g, b, grayscale; + assert($image.rank === 3, () => `Error in threshold: image must be rank 3,but got rank ${$image.rank}.`); + assert($image.shape[2] === 3 || $image.shape[2] === 1, () => `Error in threshold: image color channel must be equal to 3 or 1but got ${$image.shape[2]}.`); + assert($image.dtype === "int32" || $image.dtype === "float32", () => `Error in dtype: image dtype must be int32 or float32,but got dtype ${$image.dtype}.`); + assert(method === "otsu" || method === "binary", () => `Method must be binary or otsu, but was ${method}`); + if ($image.shape[2] === 3) { + [r, g, b] = split($image, [1, 1, 1], -1); + const $r = mul(r, RED_INTENCITY_COEF); + const $g = mul(g, GREEN_INTENCITY_COEF); + const $b = mul(b, BLUE_INTENCITY_COEF); + grayscale = add2(add2($r, $g), $b); + } else { + grayscale = image2; + } + if (method === "otsu") { + const $histogram = bincount(cast(round2(grayscale), "int32"), tensor([]), 256); + $threshold = otsu($histogram, totalPixelsInImage); + } + const invCondition = inverted ? lessEqual(grayscale, $threshold) : greater(grayscale, $threshold); + const result = cast(mul(invCondition, 255), "int32"); + return result; + } + function otsu(histogram, total) { + let bestThresh = tensor1d([-1]); + let bestInBetVar = tensor1d([0]); + let cInBetVar = tensor1d([0]); + let classFirst, classSecond, meanFirst, meanSec, weightForeground, weightBack; + for (let index = 0; index < histogram.size - 1; index++) { + classFirst = slice(histogram, 0, index + 1); + classSecond = slice(histogram, index + 1); + weightForeground = div(sum2(classFirst), total); + weightBack = div(sum2(classSecond), total); + const meanFirstDivA = sum2(mul(classFirst, range(0, classFirst.size))); + meanFirst = div(meanFirstDivA, sum2(classFirst)); + const meanSecFill = fill(classSecond.shape, classFirst.size); + const meanSecAdd = add2(range(0, classSecond.size), meanSecFill); + const meanSecMul = mul(classSecond, meanSecAdd); + meanSec = div(sum2(meanSecMul), sum2(classSecond)); + const cInBetVarSubA = sub(meanFirst, meanSec); + const cInBetVarSubB = sub(meanFirst, meanSec); + const cInBetVarMul = mul(weightForeground, weightBack); + cInBetVar = mul(mul(cInBetVarMul, cInBetVarSubA), cInBetVarSubB); + const condition = greater(cInBetVar, bestInBetVar); + bestInBetVar = where(condition, cInBetVar, bestInBetVar); + bestThresh = where(condition, tensor1d([index]), bestThresh); + } + return bestThresh; + } + var threshold = op({ threshold_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/image/transform.js + init_define_BUILD_VERSION(); + function transform_(image2, transforms, interpolation = "nearest", fillMode = "constant", fillValue = 0, outputShape) { + const $image = convertToTensor(image2, "image", "transform", "float32"); + const $transforms = convertToTensor(transforms, "transforms", "transform", "float32"); + assert($image.rank === 4, () => `Error in transform: image must be rank 4,but got rank ${$image.rank}.`); + assert($transforms.rank === 2 && ($transforms.shape[0] === $image.shape[0] || $transforms.shape[0] === 1) && $transforms.shape[1] === 8, () => `Error in transform: Input transform should be batch x 8 or 1 x 8`); + assert(outputShape == null || outputShape.length === 2, () => `Error in transform: outputShape must be [height, width] or null, but got ${outputShape}.`); + const inputs = { image: $image, transforms: $transforms }; + const attrs = { interpolation, fillMode, fillValue, outputShape }; + return ENGINE.runKernel(Transform, inputs, attrs); + } + var transform = op({ transform_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/linalg/band_part.js + init_define_BUILD_VERSION(); + function bandPart_(a, numLower, numUpper) { + assert(numLower % 1 === 0, () => `bandPart(): numLower must be an integer, got ${numLower}.`); + assert(numUpper % 1 === 0, () => `bandPart(): numUpper must be an integer, got ${numUpper}.`); + const $a = convertToTensor(a, "a", "bandPart"); + assert($a.rank >= 2, () => `bandPart(): Rank must be at least 2, got ${$a.rank}.`); + const shape = $a.shape; + const [M, N] = $a.shape.slice(-2); + if (!(numLower <= M)) { + throw new Error(`bandPart(): numLower (${numLower}) must not be greater than the number of rows (${M}).`); + } + if (!(numUpper <= N)) { + throw new Error(`bandPart(): numUpper (${numUpper}) must not be greater than the number of columns (${N}).`); + } + if (numLower < 0) { + numLower = M; + } + if (numUpper < 0) { + numUpper = N; + } + const i = reshape(range(0, M, 1, "int32"), [-1, 1]); + const j = range(0, N, 1, "int32"); + const ij = sub(i, j); + const inBand = logicalAnd(lessEqual(ij, scalar(+numLower, "int32")), greaterEqual(ij, scalar(-numUpper, "int32"))); + const zero = zeros([M, N], $a.dtype); + return reshape(stack(unstack(reshape($a, [-1, M, N])).map((mat) => where(inBand, mat, zero))), shape); + } + var bandPart = op({ bandPart_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/linalg/gram_schmidt.js + init_define_BUILD_VERSION(); + function gramSchmidt_(xs) { + let inputIsTensor2D; + if (Array.isArray(xs)) { + inputIsTensor2D = false; + assert(xs != null && xs.length > 0, () => "Gram-Schmidt process: input must not be null, undefined, or empty"); + const dim = xs[0].shape[0]; + for (let i = 1; i < xs.length; ++i) { + assert(xs[i].shape[0] === dim, () => `Gram-Schmidt: Non-unique lengths found in the input vectors: (${xs[i].shape[0]} vs. ${dim})`); + } + } else { + inputIsTensor2D = true; + xs = split(xs, xs.shape[0], 0).map((x) => squeeze(x, [0])); + } + assert(xs.length <= xs[0].shape[0], () => `Gram-Schmidt: Number of vectors (${xs.length}) exceeds number of dimensions (${xs[0].shape[0]}).`); + const ys = []; + const xs1d = xs; + for (let i = 0; i < xs.length; ++i) { + ys.push(ENGINE.tidy(() => { + let x = xs1d[i]; + if (i > 0) { + for (let j = 0; j < i; ++j) { + const proj = mul(sum2(mul(ys[j], x)), ys[j]); + x = sub(x, proj); + } + } + return div(x, norm(x, "euclidean")); + })); + } + if (inputIsTensor2D) { + return stack(ys, 0); + } else { + return ys; + } + } + var gramSchmidt = op({ gramSchmidt_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/linalg/qr.js + init_define_BUILD_VERSION(); + function qr_(x, fullMatrices = false) { + assert(x.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${x.rank}`); + if (x.rank === 2) { + return qr2d(x, fullMatrices); + } else { + const outerDimsProd = x.shape.slice(0, x.shape.length - 2).reduce((value, prev) => value * prev); + const x2ds = unstack(reshape(x, [ + outerDimsProd, + x.shape[x.shape.length - 2], + x.shape[x.shape.length - 1] + ]), 0); + const q2ds = []; + const r2ds = []; + x2ds.forEach((x2d) => { + const [q2d, r2d] = qr2d(x2d, fullMatrices); + q2ds.push(q2d); + r2ds.push(r2d); + }); + const q = reshape(stack(q2ds, 0), x.shape); + const r = reshape(stack(r2ds, 0), x.shape); + return [q, r]; + } + } + function qr2d(x, fullMatrices = false) { + return ENGINE.tidy(() => { + assert(x.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${x.shape.length}D Tensor.`); + const m = x.shape[0]; + const n = x.shape[1]; + let q = eye(m); + let r = clone(x); + const one2D = tensor2d([[1]], [1, 1]); + let w = clone(one2D); + const iters = m >= n ? n : m; + for (let j = 0; j < iters; ++j) { + const rTemp = r; + const wTemp = w; + const qTemp = q; + [w, r, q] = ENGINE.tidy(() => { + const rjEnd1 = slice(r, [j, j], [m - j, 1]); + const normX = norm(rjEnd1); + const rjj = slice(r, [j, j], [1, 1]); + const s = where(greater(rjj, 0), tensor2d([[-1]]), tensor2d([[1]])); + const u1 = sub(rjj, mul(s, normX)); + const wPre = div(rjEnd1, u1); + if (wPre.shape[0] === 1) { + w = clone(one2D); + } else { + w = concat([ + one2D, + slice(wPre, [1, 0], [wPre.shape[0] - 1, wPre.shape[1]]) + ], 0); + } + const tau = neg(div(matMul(s, u1), normX)); + const rjEndAll = slice(r, [j, 0], [m - j, n]); + const tauTimesW = mul(tau, w); + const wT = transpose(w); + if (j === 0) { + r = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll))); + } else { + const rTimesTau = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll))); + r = concat([slice(r, [0, 0], [j, n]), rTimesTau], 0); + } + const tawTimesWT = transpose(tauTimesW); + const qAllJEnd = slice(q, [0, j], [m, q.shape[1] - j]); + if (j === 0) { + q = sub(qAllJEnd, matMul(matMul(qAllJEnd, w), tawTimesWT)); + } else { + const qTimesTau = sub(qAllJEnd, matMul(matMul(qAllJEnd, w), tawTimesWT)); + q = concat([slice(q, [0, 0], [m, j]), qTimesTau], 1); + } + return [w, r, q]; + }); + dispose([rTemp, wTemp, qTemp]); + } + if (!fullMatrices && m > n) { + q = slice(q, [0, 0], [m, n]); + r = slice(r, [0, 0], [n, n]); + } + return [q, r]; + }); + } + var qr = op({ qr_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/ops.js + var image = { + flipLeftRight, + grayscaleToRGB, + resizeNearestNeighbor, + resizeBilinear, + rotateWithOffset, + cropAndResize, + nonMaxSuppression, + nonMaxSuppressionAsync, + nonMaxSuppressionWithScore, + nonMaxSuppressionWithScoreAsync, + nonMaxSuppressionPadded, + nonMaxSuppressionPaddedAsync, + threshold, + transform + }; + var linalg = { + bandPart, + gramSchmidt, + qr + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer.js + init_define_BUILD_VERSION(); + var Optimizer = class extends Serializable { + minimize(f, returnCost = false, varList) { + const { value, grads } = this.computeGradients(f, varList); + if (varList != null) { + const gradArray = varList.map((v) => ({ name: v.name, tensor: grads[v.name] })); + this.applyGradients(gradArray); + } else { + this.applyGradients(grads); + } + dispose(grads); + if (returnCost) { + return value; + } else { + value.dispose(); + return null; + } + } + get iterations() { + if (this.iterations_ == null) { + this.iterations_ = 0; + } + return this.iterations_; + } + incrementIterations() { + this.iterations_ = this.iterations + 1; + } + computeGradients(f, varList) { + return variableGrads(f, varList); + } + dispose() { + if (this.iterations_ != null) { + dispose(this.iterations_); + } + } + async saveIterations() { + if (this.iterations_ == null) { + this.iterations_ = 0; + } + return { + name: "iter", + tensor: scalar(this.iterations_, "int32") + }; + } + async getWeights() { + throw new Error("getWeights() is not implemented for this optimizer yet."); + } + async setWeights(weightValues) { + throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`); + } + async extractIterations(weightValues) { + this.iterations_ = (await weightValues[0].tensor.data())[0]; + return weightValues.slice(1); + } + }; + Object.defineProperty(Optimizer, Symbol.hasInstance, { + value: (instance) => { + return instance.minimize != null && instance.computeGradients != null && instance.applyGradients != null; + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adadelta_optimizer.js + var AdadeltaOptimizer = class extends Optimizer { + constructor(learningRate, rho, epsilon3 = null) { + super(); + this.learningRate = learningRate; + this.rho = rho; + this.epsilon = epsilon3; + this.accumulatedGrads = []; + this.accumulatedUpdates = []; + if (epsilon3 == null) { + this.epsilon = ENGINE.backend.epsilon(); + } + } + applyGradients(variableGradients) { + const variableNames = Array.isArray(variableGradients) ? variableGradients.map((item) => item.name) : Object.keys(variableGradients); + variableNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + const trainable = false; + if (this.accumulatedGrads[i] == null) { + this.accumulatedGrads[i] = { + originalName: `${name}/accum_grad`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + if (this.accumulatedUpdates[i] == null) { + this.accumulatedUpdates[i] = { + originalName: `${name}/accum_var`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const accumulatedGrad = this.accumulatedGrads[i].variable; + const accumulatedUpdate = this.accumulatedUpdates[i].variable; + tidy(() => { + const newAccumulatedGrad = add2(mul(accumulatedGrad, this.rho), mul(square(gradient), 1 - this.rho)); + const updates = mul(div(sqrt(add2(accumulatedUpdate, this.epsilon)), sqrt(add2(accumulatedGrad, this.epsilon))), gradient); + const newAccumulatedUpdate = add2(mul(accumulatedUpdate, this.rho), mul(square(updates), 1 - this.rho)); + accumulatedGrad.assign(newAccumulatedGrad); + accumulatedUpdate.assign(newAccumulatedUpdate); + const newValue = add2(mul(updates, -this.learningRate), value); + value.assign(newValue); + }); + }); + this.incrementIterations(); + } + dispose() { + if (this.accumulatedUpdates != null) { + dispose(this.accumulatedGrads.map((v) => v.variable)); + dispose(this.accumulatedUpdates.map((v) => v.variable)); + } + } + async getWeights() { + const variables = [...this.accumulatedGrads, ...this.accumulatedUpdates]; + return [await this.saveIterations()].concat(variables.map((v) => ({ name: v.originalName, tensor: v.variable }))); + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + const variableCount = weightValues.length / 2; + const trainable = false; + this.accumulatedGrads = weightValues.slice(0, variableCount).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + this.accumulatedUpdates = weightValues.slice(variableCount, variableCount * 2).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + } + getConfig() { + return { + "learningRate": this.learningRate, + "rho": this.rho, + "epsilon": this.epsilon + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["rho"], config["epsilon"]); + } + }; + AdadeltaOptimizer.className = "Adadelta"; + registerClass(AdadeltaOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adagrad_optimizer.js + init_define_BUILD_VERSION(); + var AdagradOptimizer = class extends Optimizer { + constructor(learningRate, initialAccumulatorValue = 0.1) { + super(); + this.learningRate = learningRate; + this.initialAccumulatorValue = initialAccumulatorValue; + this.accumulatedGrads = []; + } + applyGradients(variableGradients) { + const variableNames = Array.isArray(variableGradients) ? variableGradients.map((item) => item.name) : Object.keys(variableGradients); + variableNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + if (this.accumulatedGrads[i] == null) { + const trainable = false; + this.accumulatedGrads[i] = { + originalName: `${name}/accumulator`, + variable: tidy(() => fill(value.shape, this.initialAccumulatorValue).variable(trainable)) + }; + } + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const accumulatedGrad = this.accumulatedGrads[i].variable; + tidy(() => { + const newAccumulatedGrad = add2(accumulatedGrad, square(gradient)); + accumulatedGrad.assign(newAccumulatedGrad); + const newValue = add2(mul(div(gradient, sqrt(add2(newAccumulatedGrad, ENGINE.backend.epsilon()))), -this.learningRate), value); + value.assign(newValue); + }); + }); + this.incrementIterations(); + } + dispose() { + if (this.accumulatedGrads != null) { + dispose(this.accumulatedGrads.map((v) => v.variable)); + } + } + async getWeights() { + return [await this.saveIterations()].concat(this.accumulatedGrads.map((v) => ({ name: v.originalName, tensor: v.variable }))); + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + const trainable = false; + this.accumulatedGrads = weightValues.map((v) => ({ originalName: v.name, variable: v.tensor.variable(trainable) })); + } + getConfig() { + return { + "learningRate": this.learningRate, + "initialAccumulatorValue": this.initialAccumulatorValue + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["initialAccumulatorValue"]); + } + }; + AdagradOptimizer.className = "Adagrad"; + registerClass(AdagradOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adam_optimizer.js + init_define_BUILD_VERSION(); + var AdamOptimizer = class extends Optimizer { + constructor(learningRate, beta1, beta2, epsilon3 = null) { + super(); + this.learningRate = learningRate; + this.beta1 = beta1; + this.beta2 = beta2; + this.epsilon = epsilon3; + this.accumulatedFirstMoment = []; + this.accumulatedSecondMoment = []; + tidy(() => { + this.accBeta1 = scalar(beta1).variable(); + this.accBeta2 = scalar(beta2).variable(); + }); + if (epsilon3 == null) { + this.epsilon = ENGINE.backend.epsilon(); + } + } + applyGradients(variableGradients) { + const varNames = Array.isArray(variableGradients) ? variableGradients.map((v) => v.name) : Object.keys(variableGradients); + tidy(() => { + const oneMinusAccBeta1 = sub(1, this.accBeta1); + const oneMinusAccBeta2 = sub(1, this.accBeta2); + varNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + const trainable = false; + if (this.accumulatedFirstMoment[i] == null) { + this.accumulatedFirstMoment[i] = { + originalName: `${name}/m`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + if (this.accumulatedSecondMoment[i] == null) { + this.accumulatedSecondMoment[i] = { + originalName: `${name}/v`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const firstMoment = this.accumulatedFirstMoment[i].variable; + const secondMoment = this.accumulatedSecondMoment[i].variable; + const newFirstMoment = add2(mul(firstMoment, this.beta1), mul(gradient, 1 - this.beta1)); + const newSecondMoment = add2(mul(secondMoment, this.beta2), mul(square(gradient), 1 - this.beta2)); + const biasCorrectedFirstMoment = div(newFirstMoment, oneMinusAccBeta1); + const biasCorrectedSecondMoment = div(newSecondMoment, oneMinusAccBeta2); + firstMoment.assign(newFirstMoment); + secondMoment.assign(newSecondMoment); + const newValue = add2(mul(div(biasCorrectedFirstMoment, add2(sqrt(biasCorrectedSecondMoment), this.epsilon)), -this.learningRate), value); + value.assign(newValue); + }); + this.accBeta1.assign(mul(this.accBeta1, this.beta1)); + this.accBeta2.assign(mul(this.accBeta2, this.beta2)); + }); + this.incrementIterations(); + } + dispose() { + this.accBeta1.dispose(); + this.accBeta2.dispose(); + if (this.accumulatedFirstMoment != null) { + dispose(this.accumulatedFirstMoment.map((v) => v.variable)); + } + if (this.accumulatedSecondMoment != null) { + dispose(this.accumulatedSecondMoment.map((v) => v.variable)); + } + } + async getWeights() { + const variables = [...this.accumulatedFirstMoment, ...this.accumulatedSecondMoment]; + return [await this.saveIterations()].concat(variables.map((v) => ({ name: v.originalName, tensor: v.variable }))); + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + tidy(() => { + this.accBeta1.assign(pow(this.beta1, this.iterations_ + 1)); + this.accBeta2.assign(pow(this.beta2, this.iterations_ + 1)); + }); + const variableCount = weightValues.length / 2; + const trainable = false; + this.accumulatedFirstMoment = weightValues.slice(0, variableCount).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + this.accumulatedSecondMoment = weightValues.slice(variableCount, variableCount * 2).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + } + getConfig() { + return { + "learningRate": this.learningRate, + "beta1": this.beta1, + "beta2": this.beta2, + "epsilon": this.epsilon + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["beta1"], config["beta2"], config["epsilon"]); + } + }; + AdamOptimizer.className = "Adam"; + registerClass(AdamOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/adamax_optimizer.js + init_define_BUILD_VERSION(); + var AdamaxOptimizer = class extends Optimizer { + constructor(learningRate, beta1, beta2, epsilon3 = null, decay = 0) { + super(); + this.learningRate = learningRate; + this.beta1 = beta1; + this.beta2 = beta2; + this.epsilon = epsilon3; + this.decay = decay; + this.accumulatedFirstMoment = []; + this.accumulatedWeightedInfNorm = []; + tidy(() => { + this.iteration = scalar(0).variable(); + this.accBeta1 = scalar(beta1).variable(); + }); + if (epsilon3 == null) { + this.epsilon = ENGINE.backend.epsilon(); + } + } + applyGradients(variableGradients) { + const variableNames = Array.isArray(variableGradients) ? variableGradients.map((item) => item.name) : Object.keys(variableGradients); + tidy(() => { + const oneMinusAccBeta1 = sub(1, this.accBeta1); + const lr = div(-this.learningRate, add2(mul(this.iteration, this.decay), 1)); + variableNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + const trainable = false; + if (this.accumulatedFirstMoment[i] == null) { + this.accumulatedFirstMoment[i] = { + originalName: `${name}/m`, + variable: zerosLike(value).variable(trainable) + }; + } + if (this.accumulatedWeightedInfNorm[i] == null) { + this.accumulatedWeightedInfNorm[i] = { + originalName: `${name}/v`, + variable: zerosLike(value).variable(trainable) + }; + } + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const firstMoment = this.accumulatedFirstMoment[i].variable; + const weightedInfNorm = this.accumulatedWeightedInfNorm[i].variable; + const newFirstMoment = add2(mul(firstMoment, this.beta1), mul(gradient, 1 - this.beta1)); + const ut0 = mul(weightedInfNorm, this.beta2); + const ut1 = abs(gradient); + const newWeightedInfNorm = maximum(ut0, ut1); + firstMoment.assign(newFirstMoment); + weightedInfNorm.assign(newWeightedInfNorm); + const newValue = add2(mul(div(lr, oneMinusAccBeta1), div(newFirstMoment, add2(newWeightedInfNorm, this.epsilon))), value); + value.assign(newValue); + }); + this.iteration.assign(add2(this.iteration, 1)); + this.accBeta1.assign(mul(this.accBeta1, this.beta1)); + }); + this.incrementIterations(); + } + dispose() { + this.accBeta1.dispose(); + this.iteration.dispose(); + if (this.accumulatedFirstMoment != null) { + dispose(this.accumulatedFirstMoment.map((v) => v.variable)); + } + if (this.accumulatedWeightedInfNorm != null) { + dispose(this.accumulatedWeightedInfNorm.map((v) => v.variable)); + } + } + async getWeights() { + throw new Error("getWeights() is not implemented for Adamax yet."); + } + async setWeights(weightValues) { + throw new Error("setWeights() is not implemented for Adamax yet."); + } + getConfig() { + return { + "learningRate": this.learningRate, + "beta1": this.beta1, + "beta2": this.beta2, + "epsilon": this.epsilon, + "decay": this.decay + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["beta1"], config["beta2"], config["epsilon"], config["decay"]); + } + }; + AdamaxOptimizer.className = "Adamax"; + registerClass(AdamaxOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/momentum_optimizer.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/sgd_optimizer.js + init_define_BUILD_VERSION(); + var SGDOptimizer = class extends Optimizer { + constructor(learningRate) { + super(); + this.learningRate = learningRate; + this.setLearningRate(learningRate); + } + applyGradients(variableGradients) { + const varNames = Array.isArray(variableGradients) ? variableGradients.map((v) => v.name) : Object.keys(variableGradients); + varNames.forEach((name, i) => { + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const value = ENGINE.registeredVariables[name]; + tidy(() => { + const newValue = add2(mul(this.c, gradient), value); + value.assign(newValue); + }); + }); + this.incrementIterations(); + } + setLearningRate(learningRate) { + this.learningRate = learningRate; + if (this.c != null) { + this.c.dispose(); + } + this.c = keep(scalar(-learningRate)); + } + dispose() { + this.c.dispose(); + } + async getWeights() { + return [await this.saveIterations()]; + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + if (weightValues.length !== 0) { + throw new Error("SGD optimizer does not have settable weights."); + } + } + getConfig() { + return { "learningRate": this.learningRate }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"]); + } + }; + SGDOptimizer.className = "SGD"; + registerClass(SGDOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/momentum_optimizer.js + var MomentumOptimizer = class extends SGDOptimizer { + constructor(learningRate, momentum, useNesterov = false) { + super(learningRate); + this.learningRate = learningRate; + this.momentum = momentum; + this.useNesterov = useNesterov; + this.accumulations = []; + this.m = scalar(this.momentum); + } + applyGradients(variableGradients) { + const variableNames = Array.isArray(variableGradients) ? variableGradients.map((item) => item.name) : Object.keys(variableGradients); + variableNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + if (this.accumulations[i] == null) { + const trainable = false; + this.accumulations[i] = { + originalName: `${name}/momentum`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + const accumulation = this.accumulations[i].variable; + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + tidy(() => { + let newValue; + const newAccumulation = add2(mul(this.m, accumulation), gradient); + if (this.useNesterov) { + newValue = add2(mul(this.c, add2(gradient, mul(newAccumulation, this.m))), value); + } else { + newValue = add2(mul(this.c, newAccumulation), value); + } + accumulation.assign(newAccumulation); + value.assign(newValue); + }); + }); + this.incrementIterations(); + } + dispose() { + this.m.dispose(); + if (this.accumulations != null) { + dispose(this.accumulations.map((v) => v.variable)); + } + } + setMomentum(momentum) { + this.momentum = momentum; + } + async getWeights() { + return [await this.saveIterations()].concat(this.accumulations.map((v) => ({ name: v.originalName, tensor: v.variable }))); + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + const trainable = false; + this.accumulations = weightValues.map((v) => ({ originalName: v.name, variable: v.tensor.variable(trainable) })); + } + getConfig() { + return { + "learningRate": this.learningRate, + "momentum": this.momentum, + "useNesterov": this.useNesterov + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["momentum"], config["useNesterov"]); + } + }; + MomentumOptimizer.className = "Momentum"; + registerClass(MomentumOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer_constructors.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/rmsprop_optimizer.js + init_define_BUILD_VERSION(); + var RMSPropOptimizer = class extends Optimizer { + constructor(learningRate, decay = 0.9, momentum = 0, epsilon3 = null, centered = false) { + super(); + this.learningRate = learningRate; + this.decay = decay; + this.momentum = momentum; + this.epsilon = epsilon3; + this.accumulatedMeanSquares = []; + this.accumulatedMoments = []; + this.accumulatedMeanGrads = []; + this.centered = centered; + if (epsilon3 == null) { + this.epsilon = ENGINE.backend.epsilon(); + } + if (learningRate == null) { + throw new Error(`learningRate for RMSPropOptimizer must be defined.`); + } + } + applyGradients(variableGradients) { + const variableNames = Array.isArray(variableGradients) ? variableGradients.map((item) => item.name) : Object.keys(variableGradients); + variableNames.forEach((name, i) => { + const value = ENGINE.registeredVariables[name]; + const trainable = false; + if (this.accumulatedMeanSquares[i] == null) { + this.accumulatedMeanSquares[i] = { + originalName: `${name}/rms`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + if (this.accumulatedMoments[i] == null) { + this.accumulatedMoments[i] = { + originalName: `${name}/momentum`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + if (this.accumulatedMeanGrads[i] == null && this.centered) { + this.accumulatedMeanGrads[i] = { + originalName: `${name}/mg`, + variable: tidy(() => zerosLike(value).variable(trainable)) + }; + } + const gradient = Array.isArray(variableGradients) ? variableGradients[i].tensor : variableGradients[name]; + if (gradient == null) { + return; + } + const accumulatedMeanSquare = this.accumulatedMeanSquares[i].variable; + const accumulatedMoments = this.accumulatedMoments[i].variable; + tidy(() => { + const newAccumulatedMeanSquare = add2(mul(accumulatedMeanSquare, this.decay), mul(square(gradient), 1 - this.decay)); + if (this.centered) { + const accumulatedMeanGrad = this.accumulatedMeanGrads[i].variable; + const newAccumulatedMeanGrad = add2(mul(accumulatedMeanGrad, this.decay), mul(gradient, 1 - this.decay)); + const gradContribution = div(mul(gradient, this.learningRate), sqrt(sub(newAccumulatedMeanSquare, add2(square(newAccumulatedMeanGrad), this.epsilon)))); + const newAccumulatedMoments = add2(mul(accumulatedMoments, this.momentum), gradContribution); + accumulatedMeanSquare.assign(newAccumulatedMeanSquare); + accumulatedMeanGrad.assign(newAccumulatedMeanGrad); + accumulatedMoments.assign(newAccumulatedMoments); + const newValue = sub(value, newAccumulatedMoments); + value.assign(newValue); + } else { + const newAccumulatedMeanSquare2 = add2(mul(accumulatedMeanSquare, this.decay), mul(square(gradient), 1 - this.decay)); + const newAccumulatedMoments = add2(mul(accumulatedMoments, this.momentum), div(mul(gradient, this.learningRate), sqrt(add2(newAccumulatedMeanSquare2, this.epsilon)))); + accumulatedMeanSquare.assign(newAccumulatedMeanSquare2); + accumulatedMoments.assign(newAccumulatedMoments); + const newValue = sub(value, newAccumulatedMoments); + value.assign(newValue); + } + }); + }); + this.incrementIterations(); + } + dispose() { + if (this.accumulatedMeanSquares != null) { + dispose(this.accumulatedMeanSquares.map((v) => v.variable)); + } + if (this.accumulatedMeanGrads != null && this.centered) { + dispose(this.accumulatedMeanGrads.map((v) => v.variable)); + } + if (this.accumulatedMoments != null) { + dispose(this.accumulatedMoments.map((v) => v.variable)); + } + } + async getWeights() { + const variables = [...this.accumulatedMeanSquares, ...this.accumulatedMoments]; + if (this.centered) { + variables.push(...this.accumulatedMeanGrads); + } + return [await this.saveIterations()].concat(variables.map((v) => ({ name: v.originalName, tensor: v.variable }))); + } + async setWeights(weightValues) { + weightValues = await this.extractIterations(weightValues); + const variableCount = this.centered ? weightValues.length / 3 : weightValues.length / 2; + const trainable = false; + this.accumulatedMeanSquares = weightValues.slice(0, variableCount).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + this.accumulatedMoments = weightValues.slice(variableCount, variableCount * 2).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + if (this.centered) { + this.accumulatedMeanGrads = weightValues.slice(variableCount * 2, variableCount * 3).map((v) => ({ + originalName: v.name, + variable: v.tensor.variable(trainable) + })); + } + } + getConfig() { + return { + "learningRate": this.learningRate, + "decay": this.decay, + "momentum": this.momentum, + "epsilon": this.epsilon, + "centered": this.centered + }; + } + static fromConfig(cls, config) { + return new cls(config["learningRate"], config["decay"], config["momentum"], config["epsilon"], config["centered"]); + } + }; + RMSPropOptimizer.className = "RMSProp"; + registerClass(RMSPropOptimizer); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer_constructors.js + var OptimizerConstructors = class { + static sgd(learningRate) { + return new SGDOptimizer(learningRate); + } + static momentum(learningRate, momentum, useNesterov = false) { + return new MomentumOptimizer(learningRate, momentum, useNesterov); + } + static rmsprop(learningRate, decay = 0.9, momentum = 0, epsilon3 = null, centered = false) { + return new RMSPropOptimizer(learningRate, decay, momentum, epsilon3, centered); + } + static adam(learningRate = 1e-3, beta1 = 0.9, beta2 = 0.999, epsilon3 = null) { + return new AdamOptimizer(learningRate, beta1, beta2, epsilon3); + } + static adadelta(learningRate = 1e-3, rho = 0.95, epsilon3 = null) { + return new AdadeltaOptimizer(learningRate, rho, epsilon3); + } + static adamax(learningRate = 2e-3, beta1 = 0.9, beta2 = 0.999, epsilon3 = null, decay = 0) { + return new AdamaxOptimizer(learningRate, beta1, beta2, epsilon3, decay); + } + static adagrad(learningRate, initialAccumulatorValue = 0.1) { + return new AdagradOptimizer(learningRate, initialAccumulatorValue); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/train.js + init_define_BUILD_VERSION(); + var train = { + sgd: OptimizerConstructors.sgd, + momentum: OptimizerConstructors.momentum, + adadelta: OptimizerConstructors.adadelta, + adagrad: OptimizerConstructors.adagrad, + rmsprop: OptimizerConstructors.rmsprop, + adamax: OptimizerConstructors.adamax, + adam: OptimizerConstructors.adam + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/browser_util.js + init_define_BUILD_VERSION(); + var delayCallback = (() => { + if (typeof requestAnimationFrame !== "undefined") { + return requestAnimationFrame; + } else if (typeof setImmediate !== "undefined") { + return setImmediate; + } + return (f) => f(); + })(); + function nextFrame() { + return new Promise((resolve) => delayCallback(() => resolve())); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/backend_util.js + var backend_util_exports = {}; + __export(backend_util_exports, { + ERF_A1: () => ERF_A1, + ERF_A2: () => ERF_A2, + ERF_A3: () => ERF_A3, + ERF_A4: () => ERF_A4, + ERF_A5: () => ERF_A5, + ERF_P: () => ERF_P, + PARALLELIZE_THRESHOLD: () => PARALLELIZE_THRESHOLD, + SELU_SCALE: () => SELU_SCALE, + SELU_SCALEALPHA: () => SELU_SCALEALPHA, + applyActivation: () => applyActivation, + assertAndGetBroadcastShape: () => assertAndGetBroadcastShape, + assertAxesAreInnerMostDims: () => assertAxesAreInnerMostDims, + assertParamsConsistent: () => assertParamsConsistent, + assignToTypedArray: () => assignToTypedArray, + axesAreInnerMostDims: () => axesAreInnerMostDims, + calculateShapes: () => calculateShapes, + checkEinsumDimSizes: () => checkEinsumDimSizes, + checkPadOnDimRoundingMode: () => checkPadOnDimRoundingMode, + combineLocations: () => combineLocations, + complexWithEvenIndex: () => complexWithEvenIndex, + complexWithOddIndex: () => complexWithOddIndex, + computeConv2DInfo: () => computeConv2DInfo, + computeConv3DInfo: () => computeConv3DInfo, + computeDefaultPad: () => computeDefaultPad, + computeDilation2DInfo: () => computeDilation2DInfo, + computeOptimalWindowSize: () => computeOptimalWindowSize, + computeOutAndReduceShapes: () => computeOutAndReduceShapes, + computeOutShape: () => computeOutShape2, + computePool2DInfo: () => computePool2DInfo, + computePool3DInfo: () => computePool3DInfo, + convertConv2DDataFormat: () => convertConv2DDataFormat, + decodeEinsumEquation: () => decodeEinsumEquation, + eitherStridesOrDilationsAreOne: () => eitherStridesOrDilationsAreOne, + expandShapeToKeepDim: () => expandShapeToKeepDim, + exponent: () => exponent, + exponents: () => exponents, + fromStringArrayToUint8: () => fromStringArrayToUint8, + fromUint8ToStringArray: () => fromUint8ToStringArray, + getAxesPermutation: () => getAxesPermutation, + getBroadcastDims: () => getBroadcastDims, + getComplexWithIndex: () => getComplexWithIndex, + getEinsumComputePath: () => getEinsumComputePath, + getEinsumPermutation: () => getEinsumPermutation, + getFusedBiasGradient: () => getFusedBiasGradient, + getFusedDyActivation: () => getFusedDyActivation, + getImageCenter: () => getImageCenter, + getInnerMostAxes: () => getInnerMostAxes, + getPermuted: () => getPermuted, + getReductionAxes: () => getReductionAxes, + getReshaped: () => getReshaped, + getReshapedPermuted: () => getReshapedPermuted, + getSliceBeginCoords: () => getSliceBeginCoords, + getSliceSize: () => getSliceSize, + getSparseFillEmptyRowsIndicesDenseShapeMismatch: () => getSparseFillEmptyRowsIndicesDenseShapeMismatch, + getSparseFillEmptyRowsNegativeIndexErrorMessage: () => getSparseFillEmptyRowsNegativeIndexErrorMessage, + getSparseFillEmptyRowsOutOfRangeIndexErrorMessage: () => getSparseFillEmptyRowsOutOfRangeIndexErrorMessage, + getSparseReshapeEmptyTensorZeroOutputDimErrorMessage: () => getSparseReshapeEmptyTensorZeroOutputDimErrorMessage, + getSparseReshapeInputOutputMismatchErrorMessage: () => getSparseReshapeInputOutputMismatchErrorMessage, + getSparseReshapeInputOutputMultipleErrorMessage: () => getSparseReshapeInputOutputMultipleErrorMessage, + getSparseReshapeMultipleNegativeOneOutputDimErrorMessage: () => getSparseReshapeMultipleNegativeOneOutputDimErrorMessage, + getSparseReshapeNegativeOutputDimErrorMessage: () => getSparseReshapeNegativeOutputDimErrorMessage, + getSparseSegmentReductionIndicesOutOfRangeErrorMessage: () => getSparseSegmentReductionIndicesOutOfRangeErrorMessage, + getSparseSegmentReductionNegativeSegmentIdsErrorMessage: () => getSparseSegmentReductionNegativeSegmentIdsErrorMessage, + getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage: () => getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage, + getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage: () => getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage, + getUndoAxesPermutation: () => getUndoAxesPermutation, + isIdentityPermutation: () => isIdentityPermutation, + log: () => log, + mergeRealAndImagArrays: () => mergeRealAndImagArrays, + prepareAndValidate: () => prepareAndValidate, + prepareSplitSize: () => prepareSplitSize, + segment_util: () => segment_util_exports, + shouldFuse: () => shouldFuse, + slice_util: () => slice_util_exports, + splitRealAndImagArrays: () => splitRealAndImagArrays, + tupleValuesAreOne: () => tupleValuesAreOne, + upcastType: () => upcastType, + validateInput: () => validateInput, + validateUpdateShape: () => validateUpdateShape, + warn: () => warn + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/concat_util.js + init_define_BUILD_VERSION(); + function assertParamsConsistent(shapes, axis) { + const rank = shapes[0].length; + shapes.forEach((shape, i) => { + assert(shape.length === rank, () => `Error in concat${rank}D: rank of tensors[${i}] must be the same as the rank of the rest (${rank})`); + }); + assert(axis >= 0 && axis < rank, () => `Error in concat${rank}D: axis must be between 0 and ${rank - 1}.`); + const firstShape = shapes[0]; + shapes.forEach((shape, i) => { + for (let r = 0; r < rank; r++) { + assert(r === axis || shape[r] === firstShape[r], () => `Error in concat${rank}D: Shape of tensors[${i}] (${shape}) does not match the shape of the rest (${firstShape}) along the non-concatenated axis ${i}.`); + } + }); + } + function computeOutShape2(shapes, axis) { + const outputShape = shapes[0].slice(); + for (let i = 1; i < shapes.length; i++) { + outputShape[axis] += shapes[i][axis]; + } + return outputShape; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/reduce_util.js + init_define_BUILD_VERSION(); + var PARALLELIZE_THRESHOLD = 30; + function computeOptimalWindowSize(inSize) { + if (inSize <= PARALLELIZE_THRESHOLD) { + return inSize; + } + return nearestDivisor(inSize, Math.floor(Math.sqrt(inSize))); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/rotate_util.js + init_define_BUILD_VERSION(); + function getImageCenter(center, imageHeight, imageWidth) { + const centerX = imageWidth * (typeof center === "number" ? center : center[0]); + const centerY = imageHeight * (typeof center === "number" ? center : center[1]); + return [centerX, centerY]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/array_ops_util.js + init_define_BUILD_VERSION(); + function getReshaped(inputShape, blockShape, prod5, batchToSpace = true) { + let reshaped = []; + if (batchToSpace) { + reshaped = reshaped.concat(blockShape.slice(0)); + reshaped.push(inputShape[0] / prod5); + reshaped = reshaped.concat(inputShape.slice(1)); + } else { + reshaped = reshaped.concat(inputShape[0]); + const spatialLength = blockShape.length; + for (let i = 0; i < spatialLength; ++i) { + reshaped = reshaped.concat([inputShape[i + 1] / blockShape[i], blockShape[i]]); + } + reshaped = reshaped.concat(inputShape.slice(spatialLength + 1)); + } + return reshaped; + } + function getPermuted(reshapedRank, blockShapeRank, batchToSpace = true) { + const permuted = []; + if (batchToSpace) { + permuted.push(blockShapeRank); + for (let i = blockShapeRank + 1; i < reshapedRank; ++i) { + if (i <= 2 * blockShapeRank) { + permuted.push(i); + permuted.push(i - (blockShapeRank + 1)); + } else { + permuted.push(i); + } + } + } else { + const permutedBeforeBatch = []; + const permutedAfterBatch = []; + for (let i = 1; i < reshapedRank; ++i) { + if (i >= blockShapeRank * 2 + 1 || i % 2 === 1) { + permutedAfterBatch.push(i); + } else { + permutedBeforeBatch.push(i); + } + } + permuted.push(...permutedBeforeBatch); + permuted.push(0); + permuted.push(...permutedAfterBatch); + } + return permuted; + } + function getReshapedPermuted(inputShape, blockShape, prod5, batchToSpace = true) { + const reshapedPermuted = []; + if (batchToSpace) { + reshapedPermuted.push(inputShape[0] / prod5); + } else { + reshapedPermuted.push(inputShape[0] * prod5); + } + for (let i = 1; i < inputShape.length; ++i) { + if (i <= blockShape.length) { + if (batchToSpace) { + reshapedPermuted.push(blockShape[i - 1] * inputShape[i]); + } else { + reshapedPermuted.push(inputShape[i] / blockShape[i - 1]); + } + } else { + reshapedPermuted.push(inputShape[i]); + } + } + return reshapedPermuted; + } + function getSliceBeginCoords(crops, blockShape) { + const sliceBeginCoords = [0]; + for (let i = 0; i < blockShape; ++i) { + sliceBeginCoords.push(crops[i][0]); + } + return sliceBeginCoords; + } + function getSliceSize(uncroppedShape, crops, blockShape) { + const sliceSize = uncroppedShape.slice(0, 1); + for (let i = 0; i < blockShape; ++i) { + sliceSize.push(uncroppedShape[i + 1] - crops[i][0] - crops[i][1]); + } + return sliceSize; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/selu_util.js + init_define_BUILD_VERSION(); + var SELU_SCALEALPHA = 1.7580993408473768; + var SELU_SCALE = 1.0507009873554805; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/erf_util.js + init_define_BUILD_VERSION(); + var ERF_P = 0.3275911; + var ERF_A1 = 0.254829592; + var ERF_A2 = -0.284496736; + var ERF_A3 = 1.421413741; + var ERF_A4 = -1.453152027; + var ERF_A5 = 1.061405429; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/complex_util.js + init_define_BUILD_VERSION(); + function mergeRealAndImagArrays(real4, imag4) { + if (real4.length !== imag4.length) { + throw new Error(`Cannot merge real and imag arrays of different lengths. real:${real4.length}, imag: ${imag4.length}.`); + } + const result = new Float32Array(real4.length * 2); + for (let i = 0; i < result.length; i += 2) { + result[i] = real4[i / 2]; + result[i + 1] = imag4[i / 2]; + } + return result; + } + function splitRealAndImagArrays(complex4) { + const real4 = new Float32Array(complex4.length / 2); + const imag4 = new Float32Array(complex4.length / 2); + for (let i = 0; i < complex4.length; i += 2) { + real4[i / 2] = complex4[i]; + imag4[i / 2] = complex4[i + 1]; + } + return { real: real4, imag: imag4 }; + } + function complexWithEvenIndex(complex4) { + const len = Math.ceil(complex4.length / 4); + const real4 = new Float32Array(len); + const imag4 = new Float32Array(len); + for (let i = 0; i < complex4.length; i += 4) { + real4[Math.floor(i / 4)] = complex4[i]; + imag4[Math.floor(i / 4)] = complex4[i + 1]; + } + return { real: real4, imag: imag4 }; + } + function complexWithOddIndex(complex4) { + const len = Math.floor(complex4.length / 4); + const real4 = new Float32Array(len); + const imag4 = new Float32Array(len); + for (let i = 2; i < complex4.length; i += 4) { + real4[Math.floor(i / 4)] = complex4[i]; + imag4[Math.floor(i / 4)] = complex4[i + 1]; + } + return { real: real4, imag: imag4 }; + } + function getComplexWithIndex(complex4, index) { + const real4 = complex4[index * 2]; + const imag4 = complex4[index * 2 + 1]; + return { real: real4, imag: imag4 }; + } + function assignToTypedArray(data, real4, imag4, index) { + data[index * 2] = real4; + data[index * 2 + 1] = imag4; + } + function exponents(n, inverse) { + const real4 = new Float32Array(n / 2); + const imag4 = new Float32Array(n / 2); + for (let i = 0; i < Math.ceil(n / 2); i++) { + const x = (inverse ? 2 : -2) * Math.PI * (i / n); + real4[i] = Math.cos(x); + imag4[i] = Math.sin(x); + } + return { real: real4, imag: imag4 }; + } + function exponent(k, n, inverse) { + const x = (inverse ? 2 : -2) * Math.PI * (k / n); + const real4 = Math.cos(x); + const imag4 = Math.sin(x); + return { real: real4, imag: imag4 }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/einsum_util.js + init_define_BUILD_VERSION(); + var ARROW = "->"; + var ARROW_REGEX = /->/g; + var COMMA = ","; + var ELLIPSIS = "..."; + function decodeEinsumEquation(equation, numTensors) { + equation = equation.replace(/\s/g, ""); + const numArrows = (equation.length - equation.replace(ARROW_REGEX, "").length) / ARROW.length; + if (numArrows < 1) { + throw new Error("Equations without an arrow are not supported."); + } else if (numArrows > 1) { + throw new Error(`Equation must contain exactly one arrow ("${ARROW}").`); + } + const [inputString, outputString] = equation.split(ARROW); + assert(inputString.indexOf(ELLIPSIS) === -1, () => `The ellipsis notation ("${ELLIPSIS}") is not supported yet.`); + const inputTerms = inputString.split(COMMA); + const numInputs = inputTerms.length; + if (numTensors !== numInputs) { + throw new Error(`Expected ${numInputs} input tensors, received ${numTensors}`); + } + if (numInputs > 2) { + throw new Error("Support for more than 2 input tensors is not implemented yet."); + } + const allDims = []; + for (let i = 0; i < outputString.length; ++i) { + const dimName = outputString[i]; + if (!inputTerms.some((inputTerm) => inputTerm.indexOf(dimName) !== -1)) { + throw new Error(`Output subscripts contain the label ${dimName} not present in the input subscripts.`); + } + if (allDims.indexOf(dimName) === -1) { + allDims.push(dimName); + } + } + for (let i = 0; i < inputString.length; ++i) { + const dimName = inputString[i]; + if (allDims.indexOf(dimName) === -1 && dimName !== COMMA) { + allDims.push(dimName); + } + } + const idDims = new Array(inputTerms.length); + for (let i = 0; i < numInputs; ++i) { + if (new Set(inputTerms[i].split("")).size !== inputTerms[i].length) { + throw new Error(`Found duplicate axes in input component ${inputTerms[i]}. Support for duplicate axes in input is not implemented yet.`); + } + idDims[i] = []; + for (let j = 0; j < inputTerms[i].length; ++j) { + idDims[i].push(allDims.indexOf(inputTerms[i][j])); + } + } + const numDims = allDims.length; + const numOutDims = outputString.length; + const summedDims = []; + for (let i = numOutDims; i < numDims; ++i) { + summedDims.push(i); + } + return { allDims, summedDims, idDims }; + } + function getEinsumPermutation(nDims, idDims) { + let permutationIndices = new Array(nDims); + permutationIndices.fill(-1); + for (let i = 0; i < idDims.length; ++i) { + permutationIndices[idDims[i]] = i; + } + const expandDims6 = []; + for (let i = 0; i < nDims; ++i) { + if (permutationIndices[i] === -1) { + expandDims6.push(i); + } + } + permutationIndices = permutationIndices.filter((d) => d !== -1); + return { permutationIndices, expandDims: expandDims6 }; + } + function checkEinsumDimSizes(nDims, idDims, tensors) { + const dimSizes = new Array(nDims); + for (let i = 0; i < tensors.length; ++i) { + const shape = tensors[i].shape; + for (let j = 0; j < idDims[i].length; ++j) { + if (dimSizes[idDims[i][j]] === void 0) { + dimSizes[idDims[i][j]] = shape[j]; + } else { + assert(dimSizes[idDims[i][j]] === shape[j], () => `Expected dimension ${dimSizes[idDims[i][j]]} at axis ${j} of input shaped ${JSON.stringify(shape)}, but got dimension ${shape[j]}`); + } + } + } + } + function getEinsumComputePath(summedDims, idDims) { + const path = summedDims; + const steps = []; + let nSteps = 0; + if (summedDims.length === 0) { + path.push(-1); + } + nSteps = summedDims.length + 1; + for (let i = 0; i < nSteps; ++i) { + steps.push([]); + } + const computedTermIndices = []; + for (let i = 0; i < path.length; ++i) { + const summedDim = path[i]; + const termIndices = findTermsWithDim(idDims, summedDim); + for (const termIndex of termIndices) { + if (computedTermIndices.indexOf(termIndex) === -1) { + steps[i].push(termIndex); + computedTermIndices.push(termIndex); + } + } + } + return { path, steps }; + } + function isIdentityPermutation(perm) { + return perm.every((dim, index) => dim === index); + } + function findTermsWithDim(idDims, dim) { + const termIndices = []; + for (let i = 0; i < idDims.length; ++i) { + if (idDims[i].length === 0 || idDims[i].indexOf(dim) !== -1 || dim === -1) { + termIndices.push(i); + } + } + return termIndices; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/split_util.js + init_define_BUILD_VERSION(); + function prepareSplitSize(x, numOrSizeSplits, axis = 0) { + let splitSizes = []; + if (typeof numOrSizeSplits === "number") { + assert(x.shape[axis] % numOrSizeSplits === 0, () => "Number of splits must evenly divide the axis."); + splitSizes = new Array(numOrSizeSplits).fill(x.shape[axis] / numOrSizeSplits); + } else { + const numOfNegs = numOrSizeSplits.reduce((count2, value) => { + if (value === -1) { + count2 += 1; + } + return count2; + }, 0); + assert(numOfNegs <= 1, () => "There should be only one negative value in split array."); + const negIndex = numOrSizeSplits.indexOf(-1); + if (negIndex !== -1) { + const total = numOrSizeSplits.reduce((a, b) => b > 0 ? a + b : a); + numOrSizeSplits[negIndex] = x.shape[axis] - total; + } + assert(x.shape[axis] === numOrSizeSplits.reduce((a, b) => a + b), () => "The sum of sizes must match the size of the axis dimension."); + splitSizes = numOrSizeSplits; + } + return splitSizes; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_fill_empty_rows_util.js + init_define_BUILD_VERSION(); + function getSparseFillEmptyRowsIndicesDenseShapeMismatch(indicesLength) { + return `Received SparseTensor with denseShape[0] = 0 but + indices.shape[0] = ${indicesLength}`; + } + function getSparseFillEmptyRowsNegativeIndexErrorMessage(index, value) { + return `indices(${index}, 0) is invalid: ${value} < 0`; + } + function getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(index, value, limit) { + return `indices(${index}, 0) is invalid: ${value} >= ${limit}`; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_reshape_util.js + init_define_BUILD_VERSION(); + function getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(dim1, dim2) { + return `only one output dimension may be -1, not both ${dim1} and ${dim2}`; + } + function getSparseReshapeNegativeOutputDimErrorMessage(dim, value) { + return `size ${dim} must be non-negative, not ${value}`; + } + function getSparseReshapeEmptyTensorZeroOutputDimErrorMessage() { + return "reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"; + } + function getSparseReshapeInputOutputMultipleErrorMessage(inputShape, outputShape) { + const inputSize = sizeFromShape(inputShape); + const outputSize = sizeFromShape(outputShape); + return `Input to reshape is a SparseTensor with ${inputSize} + dense values, but the requested shape requires a multiple of ${outputSize}. inputShape=${inputShape} outputShape= ${outputShape}`; + } + function getSparseReshapeInputOutputMismatchErrorMessage(inputShape, outputShape) { + const inputSize = sizeFromShape(inputShape); + const outputSize = sizeFromShape(outputShape); + return `Input to reshape is a tensor with ${inputSize} dense values, but the requested shape has ${outputSize}. inputShape=${inputShape} outputShape=${outputShape}`; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_segment_reduction_util.js + init_define_BUILD_VERSION(); + function getSparseSegmentReductionNegativeSegmentIdsErrorMessage() { + return `segment ids must be >= 0`; + } + function getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage() { + return `segment ids are not increasing`; + } + function getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(segmentId, outputRows) { + return `Segment id ${segmentId} out of range [0, ${outputRows}), possibly because segmentIds input is not sorted.`; + } + function getSparseSegmentReductionIndicesOutOfRangeErrorMessage(index, indexValue, inputRows) { + return `Bad: indices[${index}] == ${indexValue} out of range [0, ${inputRows})`; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/segment_util.js + var segment_util_exports = {}; + __export(segment_util_exports, { + collectGatherOpShapeInfo: () => collectGatherOpShapeInfo, + computeOutShape: () => computeOutShape3, + segOpComputeOptimalWindowSize: () => segOpComputeOptimalWindowSize + }); + init_define_BUILD_VERSION(); + function segOpComputeOptimalWindowSize(inSize, numSegments) { + let done = false; + let res; + if (inSize <= PARALLELIZE_THRESHOLD) { + res = inSize; + done = true; + } else { + res = nearestDivisor(inSize, Math.floor(Math.sqrt(inSize))); + } + while (!done) { + if (res > numSegments || res === inSize) { + done = true; + } else { + res = nearestDivisor(inSize, res + 1); + } + } + return res; + } + function computeOutShape3(aShape, axis, numSegments) { + const outShape = []; + const rank = aShape.length; + for (let dim = 0; dim < rank; dim++) { + if (dim !== axis) { + outShape.push(aShape[dim]); + } else { + outShape.push(numSegments); + } + } + return outShape; + } + function collectGatherOpShapeInfo(x, indices, axis, batchDims) { + const indicesRank = indices.shape.length; + const xRank = x.shape.length; + if (batchDims !== 0) { + if (batchDims < -indicesRank || batchDims > indicesRank) { + throw new Error(`Expect batchDims in the range of [-${indicesRank}, ${indicesRank}], but got ${batchDims}`); + } + } + if (batchDims < 0) { + batchDims += indicesRank; + } + if (batchDims > xRank) { + throw new Error(`batchDims (${batchDims}) must be less than rank(x) ( + ${xRank}).`); + } + if (axis < batchDims) { + throw new Error(`batchDims (${batchDims}) must be less than or equal to axis (${axis}).`); + } + for (let i = 0; i < batchDims; ++i) { + if (x.shape[i] !== indices.shape[i]) { + throw new Error(`x.shape[${i}]: ${x.shape[i]} should be equal to indices.shape[${i}]: ${indices.shape[i]}.`); + } + } + const dimSize = x.shape[axis]; + const outputShape = []; + let batchSize = 1; + let outerSize = 1; + let sliceSize = 1; + for (let i = 0; i < batchDims; ++i) { + outputShape.push(x.shape[i]); + batchSize *= x.shape[i]; + } + for (let i = batchDims; i < axis; i++) { + outputShape.push(x.shape[i]); + outerSize *= x.shape[i]; + } + for (let i = batchDims; i < indicesRank; i++) { + outputShape.push(indices.shape[i]); + } + for (let i = axis + 1; i < xRank; i++) { + outputShape.push(x.shape[i]); + sliceSize *= x.shape[i]; + } + return { batchSize, sliceSize, outerSize, dimSize, outputShape }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/backend_util.js + function fromUint8ToStringArray(vals) { + try { + return vals.map((val) => decodeString(val)); + } catch (err) { + throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${err}`); + } + } + function fromStringArrayToUint8(strings) { + return strings.map((s) => encodeString(s)); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/backends/kernel_impls.js + var kernel_impls_exports = {}; + __export(kernel_impls_exports, { + nonMaxSuppressionV3Impl: () => nonMaxSuppressionV3Impl, + nonMaxSuppressionV4Impl: () => nonMaxSuppressionV4Impl, + nonMaxSuppressionV5Impl: () => nonMaxSuppressionV5Impl, + whereImpl: () => whereImpl + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/register_all_gradients.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Abs_grad.js + init_define_BUILD_VERSION(); + var absGradConfig = { + kernelName: Abs, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(dy, step(cast(x, "float32"), -1)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Acos_grad.js + init_define_BUILD_VERSION(); + var acosGradConfig = { + kernelName: Acos, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { + x: () => { + const a = square(cast(x, "float32")); + const b = sqrt(sub(scalar(1), a)); + return neg(div(dy, b)); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Acosh_grad.js + init_define_BUILD_VERSION(); + var acoshGradConfig = { + kernelName: Acosh, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { + x: () => { + const a = sqrt(sub(square(cast(x, "float32")), 1)); + return div(dy, a); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Add_grad.js + init_define_BUILD_VERSION(); + var addGradConfig = { + kernelName: Add, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + let res = dy; + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, a.shape); + }; + const derB = () => { + let res = dy; + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, b.shape); + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/AddN_grad.js + init_define_BUILD_VERSION(); + var addNGradConfig = { + kernelName: AddN, + saveAllInputs: true, + gradFunc: (dy, saved) => { + const ders = {}; + saved.forEach((_, i) => { + ders[i] = () => dy.clone(); + }); + return ders; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ArgMax_grad.js + init_define_BUILD_VERSION(); + var argMaxGradConfig = { + kernelName: ArgMax, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => zerosLike(x) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ArgMin_grad.js + init_define_BUILD_VERSION(); + var argMinGradConfig = { + kernelName: ArgMin, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => zerosLike(x) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Asin_grad.js + init_define_BUILD_VERSION(); + var asinGradConfig = { + kernelName: Asin, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, sqrt(sub(scalar(1), square(cast(x, "float32"))))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Asinh_grad.js + init_define_BUILD_VERSION(); + var asinhGradConfig = { + kernelName: Asinh, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { + x: () => { + const a = sqrt(add2(scalar(1), square(cast(x, "float32")))); + return div(dy, a); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Atan2_grad.js + init_define_BUILD_VERSION(); + var atan2GradConfig = { + kernelName: Atan2, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + const d = add2(square(a), square(b)); + let res = mul(dy, div(b, d)); + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, a.shape); + }; + const derB = () => { + const d = add2(square(a), square(b)); + let res = neg(mul(dy, div(a, d))); + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, b.shape); + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Atan_grad.js + init_define_BUILD_VERSION(); + var atanGradConfig = { + kernelName: Atan, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, add2(square(cast(x, "float32")), 1)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Atanh_grad.js + init_define_BUILD_VERSION(); + var atanhGradConfig = { + kernelName: Atanh, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, sub(scalar(1), square(cast(x, "float32")))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/AvgPool3D_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_3d_grad.js + init_define_BUILD_VERSION(); + function avgPool3dGrad_(dy, input2, filterSize, strides, pad3, dimRoundingMode) { + const $dy = convertToTensor(dy, "dy", "avgPool3dGrad"); + const $input = convertToTensor(input2, "input", "avgPool3dGrad"); + let dy5D = $dy; + let input5D = $input; + let reshapedTo5D = false; + if ($input.rank === 4) { + reshapedTo5D = true; + dy5D = reshape($dy, [1, $dy.shape[0], $dy.shape[1], $dy.shape[2], $dy.shape[3]]); + input5D = reshape($input, [ + 1, + $input.shape[0], + $input.shape[1], + $input.shape[2], + $input.shape[3] + ]); + } + assert(dy5D.rank === 5, () => `Error in avgPool3dGrad: dy must be rank 5 but got rank ${dy5D.rank}.`); + assert(input5D.rank === 5, () => `Error in avgPool3dGrad: input must be rank 5 but got rank ${input5D.rank}.`); + checkPadOnDimRoundingMode("avgPool3dGrad", pad3, dimRoundingMode); + const inputs = { dy: dy5D, input: input5D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode }; + const res = ENGINE.runKernel(AvgPool3DGrad, inputs, attrs); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var avgPool3dGrad = op({ avgPool3dGrad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/AvgPool3D_grad.js + var avgPool3DGradConfig = { + kernelName: AvgPool3D, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + return { + x: () => avgPool3dGrad(dy, x, filterSize, strides, pad3, dimRoundingMode) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/AvgPool_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_grad.js + init_define_BUILD_VERSION(); + function avgPoolGrad_(dy, input2, filterSize, strides, pad3) { + const $dy = convertToTensor(dy, "dy", "avgPoolGrad"); + const $input = convertToTensor(input2, "input", "avgPoolGrad"); + assert($input.rank === $dy.rank, () => `Rank of input (${$input.rank}) does not match rank of dy (${$dy.rank})`); + let input4D = $input; + let dy4D = $dy; + let reshapedTo4D = false; + if ($input.rank === 3) { + reshapedTo4D = true; + input4D = reshape($input, [1, $input.shape[0], $input.shape[1], $input.shape[2]]); + dy4D = reshape($dy, [1, $dy.shape[0], $dy.shape[1], $dy.shape[2]]); + } + assert(dy4D.rank === 4, () => `Error in avgPoolGrad: dy must be rank 4 but got rank ${dy4D.rank}.`); + assert(input4D.rank === 4, () => `Error in avgPoolGrad: input must be rank 4 but got rank ${input4D.rank}.`); + const inputs = { dy: dy4D, input: input4D }; + const attrs = { filterSize, strides, pad: pad3 }; + const res = ENGINE.runKernel(AvgPoolGrad, inputs, attrs); + if (reshapedTo4D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]); + } + return res; + } + var avgPoolGrad = op({ avgPoolGrad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/AvgPool_grad.js + var avgPoolGradConfig = { + kernelName: AvgPool, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { filterSize, strides, pad: pad3 } = attrs; + return { x: () => avgPoolGrad(dy, x, filterSize, strides, pad3) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/BatchMatMul_grad.js + init_define_BUILD_VERSION(); + var batchMatMulGradConfig = { + kernelName: BatchMatMul, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved, attrs) => { + const [a, b] = saved; + const { transposeA, transposeB } = attrs; + if (!transposeA && !transposeB) { + return { + a: () => matMul(dy, b, false, true), + b: () => matMul(a, dy, true, false) + }; + } else if (!transposeA && transposeB) { + return { + a: () => matMul(dy, b, false, false), + b: () => matMul(dy, a, true, false) + }; + } else if (transposeA && !transposeB) { + return { + a: () => matMul(b, dy, false, true), + b: () => matMul(a, dy, false, false) + }; + } else { + return { + a: () => matMul(b, dy, true, true), + b: () => matMul(dy, a, true, true) + }; + } + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/BatchToSpaceND_grad.js + init_define_BUILD_VERSION(); + var batchToSpaceNDGradConfig = { + kernelName: BatchToSpaceND, + gradFunc: (dy, saved, attrs) => { + const { blockShape, crops } = attrs; + return { x: () => spaceToBatchND(dy, blockShape, crops) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/BroadcastTo_grad.js + init_define_BUILD_VERSION(); + var broadcastToGradConfig = { + kernelName: BroadcastTo, + gradFunc: (dy, saved, attrs) => { + const broadCastToAttrs = attrs; + const inputShape = broadCastToAttrs.inputShape; + const outputShape = broadCastToAttrs.shape; + const reps = Array.from(outputShape); + for (let i = inputShape.length - 1; i >= 0; i--) { + if (inputShape[i] === outputShape[i]) { + reps[i] = 1; + } else if (inputShape[i] !== 1) { + throw new Error(`broadcastTo(): [${inputShape}] cannot be broadcast to [${outputShape}].`); + } + } + const axes = []; + for (let i = 0; i < reps.length; i++) { + if (reps[i] > 1) { + axes.push(i); + } + } + return { x: () => sum2(dy, axes, true) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Cast_grad.js + init_define_BUILD_VERSION(); + var castGradConfig = { + kernelName: Cast, + gradFunc: (dy) => { + return { x: () => dy.clone() }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Ceil_grad.js + init_define_BUILD_VERSION(); + var ceilGradConfig = { + kernelName: Ceil, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ClipByValue_grad.js + init_define_BUILD_VERSION(); + var clipByValueGradConfig = { + kernelName: ClipByValue, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { clipValueMin, clipValueMax } = attrs; + return { + x: () => where(logicalAnd(greaterEqual(x, clipValueMin), lessEqual(x, clipValueMax)), dy, zerosLike(dy)) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ComplexAbs_grad.js + init_define_BUILD_VERSION(); + var complexAbsGradConfig = { + kernelName: ComplexAbs, + inputsToSave: ["x"], + gradFunc: absGradConfig.gradFunc + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Concat_grad.js + init_define_BUILD_VERSION(); + var concatGradConfig = { + kernelName: Concat, + saveAllInputs: true, + gradFunc: (dy, saved, attrs) => { + const shapes = saved.map((t) => t.shape); + const { axis } = attrs; + const $axis = parseAxisParam(axis, saved[0].shape)[0]; + const sizeSplits = shapes.map((s) => s[$axis]); + const derTensors = split(dy, sizeSplits, $axis); + return derTensors.map((t) => () => t); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Conv2D_grad.js + init_define_BUILD_VERSION(); + var conv2DGradConfig = { + kernelName: Conv2D, + inputsToSave: ["x", "filter"], + gradFunc: (dy, saved, attrs) => { + const [x4D, $filter] = saved; + const { dilations, strides, pad: pad3, dataFormat } = attrs; + assert(tupleValuesAreOne(dilations), () => `Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${dilations}'`); + return { + x: () => conv2DBackpropInput(x4D.shape, dy, $filter, strides, pad3, dataFormat), + filter: () => conv2DBackpropFilter(x4D, dy, $filter.shape, strides, pad3, dataFormat) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Conv2DBackpropInput_grad.js + init_define_BUILD_VERSION(); + var conv2DBackpropInputGradConfig = { + kernelName: Conv2DBackpropInput, + inputsToSave: ["dy", "filter"], + gradFunc: (ddx, saved, attrs) => { + const [dy, filter] = saved; + const { strides, pad: pad3, dataFormat, dimRoundingMode } = attrs; + return { + dy: () => conv2d(ddx, filter, strides, pad3, dataFormat, 1, dimRoundingMode), + filter: () => conv2DBackpropFilter(ddx, dy, filter.shape, strides, pad3, dataFormat, dimRoundingMode) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Conv3D_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_backprop_filter.js + init_define_BUILD_VERSION(); + function conv3DBackpropFilter_(x, dy, filterShape, strides, pad3) { + let x5D = x; + if (x.rank === 4) { + x5D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2], x.shape[3]]); + } + let dy5D = dy; + if (dy5D.rank === 4) { + dy5D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2], dy.shape[3]]); + } + assert(x5D.rank === 5, () => `Error in conv3dDerFilter: input must be rank 5, but got shape ${x5D.shape}.`); + assert(dy5D.rank === 5, () => `Error in conv3dDerFilter: dy must be rank 5, but got shape ${dy5D.shape}.`); + assert(filterShape.length === 5, () => `Error in conv3dDerFilter: filterShape must be length 5, but got ${filterShape}.`); + assert(x5D.shape[4] === filterShape[3], () => `Error in conv3dDerFilter: depth of input ${x5D.shape[4]}) must match input depth in filter (${filterShape[3]}.`); + assert(dy5D.shape[4] === filterShape[4], () => `Error in conv3dDerFilter: depth of dy (${dy5D.shape[4]}) must match output depth for filter (${filterShape[4]}).`); + const inputs = { x: x5D, dy: dy5D }; + const attrs = { strides, pad: pad3, filterShape }; + return ENGINE.runKernel(Conv3DBackpropFilterV2, inputs, attrs); + } + var conv3DBackpropFilter = op({ conv3DBackpropFilter_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Conv3D_grad.js + var conv3DGradConfig = { + kernelName: Conv3D, + inputsToSave: ["x", "filter"], + gradFunc: (dy, saved, attrs) => { + const { dilations, strides, pad: pad3 } = attrs; + assert(tupleValuesAreOne(dilations), () => `Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${dilations}'`); + const [x5D, $filter] = saved; + return { + x: () => conv3DBackpropInput(x5D.shape, dy, $filter, strides, pad3), + filter: () => conv3DBackpropFilter(x5D, dy, $filter.shape, strides, pad3) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Cos_grad.js + init_define_BUILD_VERSION(); + var cosGradConfig = { + kernelName: Cos, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(neg(sin(cast(x, "float32"))), dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Cosh_grad.js + init_define_BUILD_VERSION(); + var coshGradConfig = { + kernelName: Cosh, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(sinh(cast(x, "float32")), dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Cumsum_grad.js + init_define_BUILD_VERSION(); + var cumsumGradConfig = { + kernelName: Cumsum, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { axis, exclusive, reverse: reverse5 } = attrs; + return { + x: () => { + const permutation = getAxesPermutation([axis], x.rank); + let out = cumsum(dy, axis, exclusive, !reverse5); + if (permutation != null) { + out = transpose(out, permutation); + } + return out; + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/DepthwiseConv2dNative_grad.js + init_define_BUILD_VERSION(); + var depthwiseConv2dNativeGradConfig = { + kernelName: DepthwiseConv2dNative, + inputsToSave: ["x", "filter"], + gradFunc: (dy, saved, attrs) => { + const { dilations, strides, pad: pad3, dimRoundingMode } = attrs; + const $dilations = dilations == null ? [1, 1] : dilations; + assert(tupleValuesAreOne($dilations), () => `Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${$dilations}'`); + const [x, filter] = saved; + assert(x.rank === 4, () => `Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${x.rank}.`); + assert(filter.rank === 4, () => `Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${filter.rank}.`); + assert(x.shape[3] === filter.shape[2], () => `Error in gradient of depthwiseConv2d: number of input channels (${x.shape[3]}) must match the inChannels dimension in filter ${filter.shape[2]}.`); + assert(eitherStridesOrDilationsAreOne(strides, $dilations), () => `Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${strides} and dilations '${$dilations}'.`); + checkPadOnDimRoundingMode("depthwiseConv2d", pad3, dimRoundingMode); + return { + x: () => depthwiseConv2dNativeBackpropInput(x.shape, dy, filter, strides, pad3, $dilations, dimRoundingMode), + filter: () => depthwiseConv2dNativeBackpropFilter(x, dy, filter.shape, strides, pad3, $dilations, dimRoundingMode) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Dilation2D_grad.js + init_define_BUILD_VERSION(); + var dilation2dGradConfig = { + kernelName: Dilation2D, + inputsToSave: ["x", "filter"], + gradFunc: (dy, saved, attrs) => { + const [x, filter] = saved; + const inputInputs = { x, filter, dy }; + const filterInputs = { x, filter, dy }; + return { + x: () => ENGINE.runKernel(Dilation2DBackpropInput, inputInputs, attrs), + filter: () => ENGINE.runKernel(Dilation2DBackpropFilter, filterInputs, attrs) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Elu_grad.js + init_define_BUILD_VERSION(); + var eluGradConfig = { + kernelName: Elu, + outputsToSave: [true], + gradFunc: (dy, saved) => { + const [y] = saved; + const inputs = { dy, y }; + return { x: () => ENGINE.runKernel(EluGrad, inputs) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Erf_grad.js + init_define_BUILD_VERSION(); + var erfGradConfig = { + kernelName: Erf, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + const a = mul(exp(neg(square(x))), 2 / Math.sqrt(Math.PI)); + return { x: () => mul(dy, a) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Exp_grad.js + init_define_BUILD_VERSION(); + var expGradConfig = { + kernelName: Exp, + outputsToSave: [true], + gradFunc: (dy, saved) => { + const [y] = saved; + return { x: () => mul(dy, y) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ExpandDims_grad.js + init_define_BUILD_VERSION(); + var expandDimsGradConfig = { + kernelName: ExpandDims, + inputsToSave: ["input"], + gradFunc: (dy, saved) => { + const [input2] = saved; + return { input: () => reshape(dy, input2.shape) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Expm1_grad.js + init_define_BUILD_VERSION(); + var expm1GradConfig = { + kernelName: Expm1, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(dy, exp(x)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Floor_grad.js + init_define_BUILD_VERSION(); + var floorGradConfig = { + kernelName: Floor, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/FloorDiv_grad.js + init_define_BUILD_VERSION(); + var floorDivGradConfig = { + kernelName: FloorDiv, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + const res = div(dy, cast(b, "float32")); + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(res, reduceAxes), a.shape); + } + return res; + }; + const derB = () => { + let res = mul(dy, cast(a, "float32")); + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + res = reshape(sum2(res, reduceAxes), b.shape); + } + const tmp = square(b); + return neg(div(res, cast(tmp, "float32"))); + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/FusedBatchNorm_grad.js + init_define_BUILD_VERSION(); + var fusedBatchNormGradConfig = { + kernelName: FusedBatchNorm, + inputsToSave: ["x", "mean", "variance", "scale"], + gradFunc: (dy, saved, attrs) => { + const { varianceEpsilon } = attrs; + const [x, mean4, variance, scale2] = saved; + const scaleValue = scale2 == null ? scalar(1) : scale2; + const reductionAxes = getReductionAxes(mean4.shape, x.shape); + const tileShape = []; + if (mean4.rank === 1) { + for (let i = 0; i < x.shape.length - 1; ++i) { + tileShape.push(x.shape[i]); + } + tileShape.push(1); + } + const xMinusMean = sub(x, mean4); + const dyTimesScaleValue = mul(dy, scaleValue); + const oneOverSqrtVariance = rsqrt(add2(variance, scalar(varianceEpsilon))); + const minusHalfRCube = mul(mul(mul(oneOverSqrtVariance, oneOverSqrtVariance), oneOverSqrtVariance), scalar(-0.5)); + const derX = () => { + if (mean4.rank === 1) { + return reshape(mul(mul(dy, tile(reshape(oneOverSqrtVariance, [1, 1, 1, mean4.shape[0]]), tileShape)), scaleValue), x.shape); + } else { + return reshape(mul(mul(dy, oneOverSqrtVariance), scaleValue), x.shape); + } + }; + const derMean = () => { + let meanDer = mul(mul(oneOverSqrtVariance, scalar(-1)), dyTimesScaleValue); + if (mean4.rank === 1) { + meanDer = sum2(meanDer, reductionAxes); + } + return reshape(meanDer, mean4.shape); + }; + const derVariance = () => { + let varianceDer = mul(mul(minusHalfRCube, xMinusMean), dyTimesScaleValue); + if (mean4.rank === 1) { + varianceDer = sum2(varianceDer, reductionAxes); + } + return reshape(varianceDer, mean4.shape); + }; + const derScale = () => { + const xMinusMean2TimesRsqrt = mul(xMinusMean, oneOverSqrtVariance); + let scaleDer = mul(dy, xMinusMean2TimesRsqrt); + if (mean4.rank === 1) { + scaleDer = sum2(scaleDer, reductionAxes); + } + return reshape(scaleDer, mean4.shape); + }; + const derOffset = () => { + let offsetDer = dy; + if (mean4.rank === 1) { + offsetDer = sum2(offsetDer, reductionAxes); + } + return reshape(offsetDer, mean4.shape); + }; + return { + x: derX, + mean: derMean, + variance: derVariance, + scale: derScale, + offset: derOffset + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/GatherV2_grad.js + init_define_BUILD_VERSION(); + var gatherGradConfig = { + kernelName: GatherV2, + inputsToSave: ["x", "indices"], + gradFunc: (dy, saved, attrs) => { + const [x, indices] = saved; + const { axis } = attrs; + const parsedAxis = parseAxisParam(axis, x.shape)[0]; + const derX = () => { + const paramsShape = x.shape; + const indicesSize = indices.size; + const outerShape = paramsShape.slice(0, parsedAxis); + const outerDims = outerShape.length; + const innerShape = paramsShape.slice(axis, paramsShape.length).slice(1); + const innerDims = innerShape.length; + const outerAxesIndices = arrayRange(0, outerDims); + const innerAxesIndices = arrayRange(outerDims + 1, outerDims + 1 + innerDims); + const valuesShape = arrayConcat([outerShape, [indicesSize], innerShape]); + const values = reshape(dy, valuesShape); + const reshapedIndices = reshape(indices, [indicesSize]); + const transposeDims = arrayConcat([[outerDims], outerAxesIndices, innerAxesIndices]); + const valuesTranspose = transpose(values, transposeDims); + let paramsGrad = unsortedSegmentSum(valuesTranspose, reshapedIndices, x.shape[parsedAxis]); + const invertTransposeDims = getUndoAxesPermutation(transposeDims); + paramsGrad = transpose(paramsGrad, invertTransposeDims); + return paramsGrad; + }; + return { x: derX, indices: () => indices }; + } + }; + function arrayRange(start, stop) { + const result = []; + for (let i = start; i < stop; ++i) { + result.push(i); + } + return result; + } + function arrayConcat(arrays) { + const result = []; + for (let i = 0; i < arrays.length; ++i) { + for (let j = 0; j < arrays[i].length; ++j) { + result.push(arrays[i][j]); + } + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/GreaterEqual_grad.js + init_define_BUILD_VERSION(); + var greaterEqualGradConfig = { + kernelName: GreaterEqual, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + return { a: () => zerosLike(a), b: () => zerosLike(b) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Identity_grad.js + init_define_BUILD_VERSION(); + var identityGradConfig = { + kernelName: Identity, + gradFunc: (dy) => { + return { x: () => cast(dy, "float32") }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/IsFinite_grad.js + init_define_BUILD_VERSION(); + var isFiniteGradConfig = { + kernelName: IsFinite, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/IsInf_grad.js + init_define_BUILD_VERSION(); + var isInfGradConfig = { + kernelName: IsInf, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/IsNan_grad.js + init_define_BUILD_VERSION(); + var isNanGradConfig = { + kernelName: IsNan, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/LeakyRelu_grad.js + init_define_BUILD_VERSION(); + var leakyReluGradConfig = { + kernelName: LeakyRelu, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { alpha } = attrs; + const mask = greater(x, 0); + return { x: () => where(mask, dy, mul(dy, alpha)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Log1p_grad.js + init_define_BUILD_VERSION(); + var log1pGradConfig = { + kernelName: Log1p, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, add2(x, 1)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Log_grad.js + init_define_BUILD_VERSION(); + var logGradConfig = { + kernelName: Log, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, cast(x, "float32")) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/LogSoftmax_grad.js + init_define_BUILD_VERSION(); + var logSoftmaxGradConfig = { + kernelName: LogSoftmax, + inputsToSave: [], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const [value] = saved; + const { axis } = attrs; + return { + logits: () => { + const keepDims = true; + const softmax5 = exp(value); + return sub(dy, mul(sum2(dy, axis, keepDims), softmax5)); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/LRN_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/local_response_normalization_backprop.js + init_define_BUILD_VERSION(); + function localResponseNormalizationBackprop_(x, y, dy, depthRadius = 5, bias = 1, alpha = 1, beta = 0.5) { + const inputs = { x, y, dy }; + const attrs = { depthRadius, bias, alpha, beta }; + return ENGINE.runKernel(LRNGrad, inputs, attrs); + } + var localResponseNormalizationBackprop = op({ localResponseNormalizationBackprop_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/LRN_grad.js + var lrnGradConfig = { + kernelName: LRN, + inputsToSave: ["x"], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const [x, y] = saved; + const { depthRadius, bias, alpha, beta } = attrs; + return { + x: () => localResponseNormalizationBackprop(x, y, dy, depthRadius, bias, alpha, beta) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Max_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/min_max_grad_util.js + init_define_BUILD_VERSION(); + function gradForMinAndMax(dy, y, xOrig, origAxes) { + if (y.rank < xOrig.rank) { + y = reshape(y, expandShapeToKeepDim(y.shape, origAxes)); + } + if (dy.rank < xOrig.rank) { + dy = reshape(dy, expandShapeToKeepDim(dy.shape, origAxes)); + } + return { + x: () => { + const dx = mul(dy, cast(equal(xOrig, y), dy.dtype)); + return dx; + } + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Max_grad.js + var maxGradConfig = { + kernelName: Max, + inputsToSave: ["x"], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const maxAttrs = attrs; + const { reductionIndices } = maxAttrs; + const x = saved[0]; + const y = saved[1]; + const origAxes = parseAxisParam(reductionIndices, x.shape); + const maxGrad = gradForMinAndMax(dy, y, x, origAxes); + return { + x: () => { + return maxGrad["x"](); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Maximum_grad.js + init_define_BUILD_VERSION(); + var maximumGradConfig = { + kernelName: Maximum, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const derA = () => mul(dy, cast(greaterEqual(a, b), "float32")); + const derB = () => mul(dy, cast(less(a, b), "float32")); + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/MaxPool3D_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_3d_grad.js + init_define_BUILD_VERSION(); + function maxPool3dGrad_(dy, input2, output, filterSize, strides, pad3, dimRoundingMode) { + const $dy = convertToTensor(dy, "dy", "maxPool3dGrad"); + const $input = convertToTensor(input2, "input", "maxPool3dGrad"); + const $output = convertToTensor(output, "output", "maxPool3dGrad"); + let dy5D = $dy; + let input5D = $input; + let output5D = $output; + let reshapedTo5D = false; + if ($input.rank === 4) { + reshapedTo5D = true; + dy5D = reshape($dy, [1, $dy.shape[0], $dy.shape[1], $dy.shape[2], $dy.shape[3]]); + input5D = reshape($input, [ + 1, + $input.shape[0], + $input.shape[1], + $input.shape[2], + $input.shape[3] + ]); + output5D = reshape($output, [ + 1, + $output.shape[0], + $output.shape[1], + $output.shape[2], + $output.shape[3] + ]); + } + assert(dy5D.rank === 5, () => `Error in maxPool3dGrad: dy must be rank 5 but got rank ${dy5D.rank}.`); + assert(input5D.rank === 5, () => `Error in maxPool3dGrad: input must be rank 5 but got rank ${input5D.rank}.`); + assert(output5D.rank === 5, () => `Error in maxPool3dGrad: output must be rank 5 but got rank ${output5D.rank}.`); + checkPadOnDimRoundingMode("maxPool3dGrad", pad3, dimRoundingMode); + const inputs = { dy: dy5D, input: input5D, output: output5D }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode }; + const res = ENGINE.runKernel(MaxPool3DGrad, inputs, attrs); + if (reshapedTo5D) { + return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]); + } + return res; + } + var maxPool3dGrad = op({ maxPool3dGrad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/MaxPool3D_grad.js + var maxPool3DGradConfig = { + kernelName: MaxPool3D, + inputsToSave: ["x"], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const [x, y] = saved; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + return { + x: () => maxPool3dGrad(dy, x, y, filterSize, strides, pad3, dimRoundingMode) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/MaxPool_grad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_grad.js + init_define_BUILD_VERSION(); + function maxPoolGrad_(dy, input2, output, filterSize, strides, pad3, dimRoundingMode) { + const $dy = convertToTensor(dy, "dy", "maxPoolGrad"); + const $input = convertToTensor(input2, "input", "maxPoolGrad"); + const $output = convertToTensor(output, "output", "maxPoolGrad"); + assert($input.rank === $dy.rank, () => `Rank of input (${$input.rank}) does not match rank of dy (${$dy.rank})`); + assert($dy.rank === 4, () => `Error in maxPoolGrad: dy must be rank 4 but got rank ${$dy.rank}.`); + assert($input.rank === 4, () => `Error in maxPoolGrad: input must be rank 4 but got rank ${$input.rank}.`); + checkPadOnDimRoundingMode("maxPoolGrad", pad3, dimRoundingMode); + const inputs = { dy: $dy, input: $input, output: $output }; + const attrs = { filterSize, strides, pad: pad3, dimRoundingMode }; + return ENGINE.runKernel(MaxPoolGrad, inputs, attrs); + } + var maxPoolGrad = op({ maxPoolGrad_ }); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/MaxPool_grad.js + var maxPoolGradConfig = { + kernelName: MaxPool, + inputsToSave: ["x"], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const [x, y] = saved; + const { filterSize, strides, pad: pad3 } = attrs; + return { + x: () => maxPoolGrad(dy, x, y, filterSize, strides, pad3) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Mean_grad.js + init_define_BUILD_VERSION(); + var meanGradConfig = { + kernelName: Mean, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { axis } = attrs; + const axes = parseAxisParam(axis, x.shape); + const shapes = computeOutAndReduceShapes(x.shape, axes); + const reduceShape = shapes[1]; + const reduceSize = sizeFromShape(reduceShape); + const derX = () => { + const expandedDyShape = x.shape.slice(); + axes.forEach((axis2) => { + expandedDyShape[axis2] = 1; + }); + const expandedDy = reshape(dy, expandedDyShape); + const res = div(mul(expandedDy, ones2(x.shape, "float32")), reduceSize); + return res; + }; + return { x: derX }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Min_grad.js + init_define_BUILD_VERSION(); + var minGradConfig = { + kernelName: Min, + inputsToSave: ["x"], + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const minAttrs = attrs; + const { axis } = minAttrs; + const [x, y] = saved; + const origAxes = parseAxisParam(axis, x.shape); + const minGrad = gradForMinAndMax(dy, y, x, origAxes); + return { + x: () => { + return minGrad["x"](); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Minimum_grad.js + init_define_BUILD_VERSION(); + var minimumGradConfig = { + kernelName: Minimum, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const derA = () => mul(dy, cast(lessEqual(a, b), "float32")); + const derB = () => mul(dy, cast(greater(a, b), "float32")); + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/MirrorPad_grad.js + init_define_BUILD_VERSION(); + var mirrorPadGradConfig = { + kernelName: MirrorPad, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const x = saved[0]; + const { paddings } = attrs; + const begin = paddings.map((p2) => p2[0]); + return { x: () => slice(dy, begin, x.shape) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Mod_grad.js + init_define_BUILD_VERSION(); + var modGradConfig = { + kernelName: Mod, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(dy, reduceAxes), a.shape); + } + return dy; + }; + const derB = () => { + const res = mul(dy, neg(floor(div(a, b)))); + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(res, reduceAxes), b.shape); + } + return res; + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Multiply_grad.js + init_define_BUILD_VERSION(); + var multiplyGradConfig = { + kernelName: Multiply, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + const res = mul(dy, cast(b, "float32")); + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(res, reduceAxes), a.shape); + } + return res; + }; + const derB = () => { + const res = mul(dy, cast(a, "float32")); + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(res, reduceAxes), b.shape); + } + return res; + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Neg_grad.js + init_define_BUILD_VERSION(); + var negGradConfig = { + kernelName: Neg, + gradFunc: (dy) => { + return { x: () => neg(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/OneHot_grad.js + init_define_BUILD_VERSION(); + var oneHotGradConfig = { + kernelName: OneHot, + inputsToSave: ["indices"], + gradFunc: (dy, saved) => { + const indices = saved[0]; + return { indices: () => zeros(indices.shape, "float32") }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/OnesLike_grad.js + init_define_BUILD_VERSION(); + var onesLikeGradConfig = { + kernelName: OnesLike, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Pack_grad.js + init_define_BUILD_VERSION(); + var packGradConfig = { + kernelName: Pack, + saveAllInputs: true, + gradFunc: (dy, saved, attrs) => { + const { axis } = attrs; + const derTensors = unstack(dy, axis); + return derTensors.map((t) => () => t); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/PadV2_grad.js + init_define_BUILD_VERSION(); + var padV2GradConfig = { + kernelName: PadV2, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const x = saved[0]; + const { paddings } = attrs; + const begin = paddings.map((p2) => p2[0]); + return { x: () => slice(dy, begin, x.shape) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Pow_grad.js + init_define_BUILD_VERSION(); + var powGradConfig = { + kernelName: Pow, + inputsToSave: ["a", "b"], + outputsToSave: [true], + gradFunc: (dy, saved) => { + const [a, b, y] = saved; + const base = a; + const exp4 = b; + const outShape = assertAndGetBroadcastShape(base.shape, exp4.shape); + const derBase = () => { + const expFloat = cast(exp4, "float32"); + let res = mul(dy, mul(expFloat, pow(base, sub(expFloat, scalar(1))))); + const reduceAxes = getReductionAxes(base.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, base.shape); + }; + const derExp = () => { + const condition = greater(base, 0); + const logBase = where(condition, log2(base), zerosLike(base)); + let res = mul(dy, mul(y, logBase)); + const reduceAxes = getReductionAxes(exp4.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, exp4.shape); + }; + return { a: derBase, b: derExp }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Prelu_grad.js + init_define_BUILD_VERSION(); + var preluGradConfig = { + kernelName: Prelu, + inputsToSave: ["x", "alpha"], + gradFunc: (dy, saved) => { + const [x, alpha] = saved; + const mask = greater(x, 0); + return { + x: () => where(mask, dy, mul(dy, alpha)), + alpha: () => { + let res = where(mask, zerosLike(dy), mul(dy, x)); + const reduceAxes = getReductionAxes(alpha.shape, dy.shape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, alpha.shape); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Prod_grad.js + init_define_BUILD_VERSION(); + function prodGradFn_(x, dy, axis) { + const expandedYShape = x.shape.slice(); + expandedYShape[axis] = 1; + const expandedDy = reshape(dy, expandedYShape); + const xCumProd = cumprod(x, axis, true, false); + const xCumRevProd = cumprod(x, axis, true, true); + const dx = mul(xCumProd, xCumRevProd); + return mul(expandedDy, dx); + } + function prodsGradFn_(x, dy, axis) { + const xRank = x.shape.length; + const finalProdAxis = xRank - axis.length; + const xPermutation = backend_util_exports.getAxesPermutation(axis, xRank); + let permutedX = x; + if (xPermutation != null) { + permutedX = transpose(x, xPermutation); + } + const newShape = permutedX.shape.slice(); + const removedShape = newShape.splice(xRank - axis.length, axis.length); + const endPartShape = removedShape.reduce((p2, c) => p2 * c, 1); + newShape.push(endPartShape); + const reshapedPermutedX = permutedX.reshape(newShape); + let prodGrad = prodGradFn_(reshapedPermutedX, dy, finalProdAxis); + prodGrad = prodGrad.reshape(permutedX.shape); + if (xPermutation != null) { + const undoPermutation = backend_util_exports.getUndoAxesPermutation(xPermutation); + prodGrad = transpose(prodGrad, undoPermutation); + } + return prodGrad; + } + var prodGradConfig = { + kernelName: Prod, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { axis } = attrs; + let axisArr = []; + if (axis === void 0 || axis === null) { + axisArr = x.shape.map((_, i) => i); + } else if (typeof axis === "number") { + axisArr = [axis]; + } else { + axisArr = axis; + } + return { x: () => prodsGradFn_(x, dy, axisArr) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/RealDiv_grad.js + init_define_BUILD_VERSION(); + var divGradConfig = { + kernelName: RealDiv, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + const res = div(dy, cast(b, "float32")); + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + return reshape(sum2(res, reduceAxes), a.shape); + } + return res; + }; + const derB = () => { + let res = mul(dy, cast(a, "float32")); + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + res = reshape(sum2(res, reduceAxes), b.shape); + } + const tmp = square(b); + return neg(div(res, cast(tmp, "float32"))); + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Reciprocal_grad.js + init_define_BUILD_VERSION(); + var reciprocalGradConfig = { + kernelName: Reciprocal, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, neg(square(x))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Relu6_grad.js + init_define_BUILD_VERSION(); + var relu6GradConfig = { + kernelName: Relu6, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + const mask = mul(lessEqual(x, 6), step(x)); + return { x: () => mul(dy, cast(mask, "float32")) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Relu_grad.js + init_define_BUILD_VERSION(); + var reluGradConfig = { + kernelName: Relu, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(dy, cast(step(x), "float32")) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Reshape_grad.js + init_define_BUILD_VERSION(); + var reshapeGradConfig = { + kernelName: Reshape, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => reshape(dy, x.shape) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ResizeBilinear_grad.js + init_define_BUILD_VERSION(); + var resizeBilinearGradConfig = { + kernelName: ResizeBilinear, + inputsToSave: ["images"], + gradFunc: (dy, saved, attrs) => { + const [images] = saved; + const inputs = { dy, images }; + const imagesDer = () => ENGINE.runKernel(ResizeBilinearGrad, inputs, attrs); + return { images: imagesDer }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ResizeNearestNeighbor_grad.js + init_define_BUILD_VERSION(); + var resizeNearestNeighborGradConfig = { + kernelName: ResizeNearestNeighbor, + inputsToSave: ["images"], + gradFunc: (dy, saved, attrs) => { + const [images] = saved; + const inputs = { dy, images }; + const imagesDer = () => ENGINE.runKernel(ResizeNearestNeighborGrad, inputs, attrs); + return { images: imagesDer }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Reverse_grad.js + init_define_BUILD_VERSION(); + var reverseGradConfig = { + kernelName: Reverse, + gradFunc: (dy, saved, attrs) => { + const { dims } = attrs; + const axes = parseAxisParam(dims, dy.shape); + return { x: () => reverse(dy, axes) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Round_grad.js + init_define_BUILD_VERSION(); + var roundGradConfig = { + kernelName: Round, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Rsqrt_grad.js + init_define_BUILD_VERSION(); + var rsqrtGradConfig = { + kernelName: Rsqrt, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => neg(div(dy, mul(pow(x, 1.5), 2))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Select_grad.js + init_define_BUILD_VERSION(); + var selectGradConfig = { + kernelName: Select, + inputsToSave: ["condition"], + gradFunc: (dy, saved) => { + const [condition] = saved; + return { + condition: () => cast(zerosLike(condition), "float32"), + t: () => mul(dy, cast(condition, dy.dtype)), + e: () => mul(dy, cast(logicalNot(condition), dy.dtype)) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Selu_grad.js + init_define_BUILD_VERSION(); + var seluGradConfig = { + kernelName: Selu, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { + x: () => { + const mask = greater(x, scalar(0)); + const scaleAlpha2 = scalar(SELU_SCALEALPHA); + const scale2 = scalar(SELU_SCALE); + const greaterThanZeroDer = mul(dy, scale2); + const lessEqualZeroDer = mul(mul(dy, scaleAlpha2), exp(cast(x, "float32"))); + return where(mask, greaterThanZeroDer, lessEqualZeroDer); + } + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sigmoid_grad.js + init_define_BUILD_VERSION(); + var sigmoidGradConfig = { + kernelName: Sigmoid, + outputsToSave: [true], + gradFunc: (dy, saved) => { + const [y] = saved; + return { x: () => mul(dy, mul(y, sub(scalar(1), y))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sign_grad.js + init_define_BUILD_VERSION(); + var signGradConfig = { + kernelName: Sign, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sin_grad.js + init_define_BUILD_VERSION(); + var sinGradConfig = { + kernelName: Sin, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(cos(cast(x, "float32")), dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sinh_grad.js + init_define_BUILD_VERSION(); + var sinhGradConfig = { + kernelName: Sinh, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(cosh(cast(x, "float32")), dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Slice_grad.js + init_define_BUILD_VERSION(); + var sliceGradConfig = { + kernelName: Slice, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { begin, size } = attrs; + const inputShape = x.shape; + const [begin_, size_] = parseSliceParams(x, begin, size); + const paddings = []; + for (let i = 0; i < dy.rank; i++) { + paddings.push([begin_[i], inputShape[i] - begin_[i] - size_[i]]); + } + return { x: () => pad(dy, paddings) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Softmax_grad.js + init_define_BUILD_VERSION(); + var softmaxGradConfig = { + kernelName: Softmax, + outputsToSave: [true], + gradFunc: (dy, saved, attrs) => { + const [y] = saved; + const { dim } = attrs; + const keepDims = true; + const dyTimesY = mul(dy, y); + return { + logits: () => sub(dyTimesY, mul(sum2(dyTimesY, [dim], keepDims), y)) + }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Softplus_grad.js + init_define_BUILD_VERSION(); + var softplusGradConfig = { + kernelName: Softplus, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(dy, sigmoid(x)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/SpaceToBatchND_grad.js + init_define_BUILD_VERSION(); + var spaceToBatchNDGradConfig = { + kernelName: SpaceToBatchND, + gradFunc: (dy, saved, attrs) => { + const { blockShape, paddings } = attrs; + return { x: () => batchToSpaceND(dy, blockShape, paddings) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/SplitV_grad.js + init_define_BUILD_VERSION(); + var splitVGradConfig = { + kernelName: SplitV, + gradFunc: (dy, saved, attrs) => { + const { axis } = attrs; + return { x: () => concat(dy, axis) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sqrt_grad.js + init_define_BUILD_VERSION(); + var sqrtGradConfig = { + kernelName: Sqrt, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, mul(sqrt(cast(x, "float32")), 2)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Square_grad.js + init_define_BUILD_VERSION(); + var squareGradConfig = { + kernelName: Square, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => mul(dy, mul(cast(x, "float32"), 2)) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/SquaredDifference_grad.js + init_define_BUILD_VERSION(); + var squaredDifferenceGradConfig = { + kernelName: SquaredDifference, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const two = scalar(2); + const derA = () => mul(dy, mul(two, sub(a, b))); + const derB = () => mul(dy, mul(two, sub(b, a))); + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Step_grad.js + init_define_BUILD_VERSION(); + var stepGradConfig = { + kernelName: Step, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sub_grad.js + init_define_BUILD_VERSION(); + var subGradConfig = { + kernelName: Sub, + inputsToSave: ["a", "b"], + gradFunc: (dy, saved) => { + const [a, b] = saved; + const outShape = assertAndGetBroadcastShape(a.shape, b.shape); + const derA = () => { + let res = dy; + const reduceAxes = getReductionAxes(a.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(res, a.shape); + }; + const derB = () => { + let res = dy; + const reduceAxes = getReductionAxes(b.shape, outShape); + if (reduceAxes.length > 0) { + res = sum2(res, reduceAxes); + } + return reshape(neg(res), b.shape); + }; + return { a: derA, b: derB }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Sum_grad.js + init_define_BUILD_VERSION(); + var sumGradConfig = { + kernelName: Sum, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const expandedDyShape = x.shape.slice(); + const { axis } = attrs; + const axes = parseAxisParam(axis, x.shape); + axes.forEach((axis2) => { + expandedDyShape[axis2] = 1; + }); + const expandedDy = reshape(dy, expandedDyShape); + const derX = mul(expandedDy, ones2(x.shape, "float32")); + return { x: () => derX }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Tan_grad.js + init_define_BUILD_VERSION(); + var tanGradConfig = { + kernelName: Tan, + inputsToSave: ["x"], + gradFunc: (dy, saved) => { + const [x] = saved; + return { x: () => div(dy, square(cos(x))) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Tanh_grad.js + init_define_BUILD_VERSION(); + var tanhGradConfig = { + kernelName: Tanh, + outputsToSave: [true], + gradFunc: (dy, saved) => { + const [y] = saved; + return { x: () => mul(sub(scalar(1), square(y)), dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Tile_grad.js + init_define_BUILD_VERSION(); + var tileGradConfig = { + kernelName: Tile, + inputsToSave: ["x"], + gradFunc: (dy, saved, attrs) => { + const [x] = saved; + const { reps } = attrs; + const derX = () => { + let xGrad = zerosLike(x); + if (x.rank === 1) { + for (let i = 0; i < reps[0]; ++i) { + xGrad = add2(xGrad, slice(dy, [i * x.shape[0]], [x.shape[0]])); + } + } else if (x.rank === 2) { + for (let i = 0; i < reps[0]; ++i) { + for (let j = 0; j < reps[1]; ++j) { + xGrad = add2(xGrad, slice(dy, [i * x.shape[0], j * x.shape[1]], [ + x.shape[0], + x.shape[1] + ])); + } + } + } else if (x.rank === 3) { + for (let i = 0; i < reps[0]; ++i) { + for (let j = 0; j < reps[1]; ++j) { + for (let k = 0; k < reps[2]; ++k) { + xGrad = add2(xGrad, slice(dy, [i * x.shape[0], j * x.shape[1], k * x.shape[2]], [x.shape[0], x.shape[1], x.shape[2]])); + } + } + } + } else if (x.rank === 4) { + for (let i = 0; i < reps[0]; ++i) { + for (let j = 0; j < reps[1]; ++j) { + for (let k = 0; k < reps[2]; ++k) { + for (let l = 0; l < reps[3]; ++l) { + xGrad = add2(xGrad, slice(dy, [ + i * x.shape[0], + j * x.shape[1], + k * x.shape[2], + l * x.shape[3] + ], [x.shape[0], x.shape[1], x.shape[2], x.shape[3]])); + } + } + } + } + } else { + throw new Error(`Gradient for tile operation is not implemented for rank-${x.rank} tensors yet.`); + } + return xGrad; + }; + return { x: derX }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Transpose_grad.js + init_define_BUILD_VERSION(); + var transposeGradConfig = { + kernelName: Transpose, + gradFunc: (dy, saved, attrs) => { + const transposeAttrs = attrs; + const { perm } = transposeAttrs; + const undoPerm = getUndoAxesPermutation(perm); + return { x: () => transpose(dy, undoPerm) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/Unpack_grad.js + init_define_BUILD_VERSION(); + var unpackGradConfig = { + kernelName: Unpack, + gradFunc: (dy, saved, attrs) => { + const unpackAttrs = attrs; + const { axis } = unpackAttrs; + return { value: () => stack(dy, axis) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/UnsortedSegmentSum_grad.js + init_define_BUILD_VERSION(); + var unsortedSegmentSumGradConfig = { + kernelName: UnsortedSegmentSum, + inputsToSave: ["segmentIds"], + gradFunc: (dy, saved) => { + const [segmentIds] = saved; + const derX = () => { + return gatherDropNegatives(dy, segmentIds); + }; + return { x: derX }; + } + }; + function gatherDropNegatives(x, indices) { + const zeroClippedIndices = maximum(indices, zerosLike(indices)); + const gathered = gather(x, zeroClippedIndices); + let isPositive = greaterEqual(indices, scalar(0, "int32")); + const numIters = gathered.rank - isPositive.rank; + for (let i = 0; i < numIters; ++i) { + isPositive = expandDims(isPositive, i + 1); + } + isPositive = logicalAnd(isPositive, ones2(gathered.shape, "bool")); + const zeroSlice = zerosLike(gathered); + return where(isPositive, gathered, zeroSlice); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/gradients/ZerosLike_grad.js + init_define_BUILD_VERSION(); + var zerosLikeGradConfig = { + kernelName: ZerosLike, + gradFunc: (dy) => { + return { x: () => zerosLike(dy) }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/register_all_gradients.js + var gradConfigs = [ + absGradConfig, + acosGradConfig, + acoshGradConfig, + addGradConfig, + addNGradConfig, + argMaxGradConfig, + argMinGradConfig, + asinGradConfig, + asinhGradConfig, + atan2GradConfig, + atanGradConfig, + atanhGradConfig, + avgPool3DGradConfig, + avgPoolGradConfig, + batchMatMulGradConfig, + batchToSpaceNDGradConfig, + broadcastToGradConfig, + castGradConfig, + ceilGradConfig, + clipByValueGradConfig, + complexAbsGradConfig, + concatGradConfig, + conv2DBackpropInputGradConfig, + conv2DGradConfig, + conv3DGradConfig, + cosGradConfig, + coshGradConfig, + cumsumGradConfig, + depthwiseConv2dNativeGradConfig, + dilation2dGradConfig, + divGradConfig, + eluGradConfig, + erfGradConfig, + expGradConfig, + expandDimsGradConfig, + expm1GradConfig, + floorDivGradConfig, + floorGradConfig, + fusedBatchNormGradConfig, + gatherGradConfig, + greaterEqualGradConfig, + identityGradConfig, + isFiniteGradConfig, + isInfGradConfig, + isNanGradConfig, + leakyReluGradConfig, + log1pGradConfig, + logGradConfig, + logSoftmaxGradConfig, + lrnGradConfig, + maxGradConfig, + maxGradConfig, + maximumGradConfig, + maxPool3DGradConfig, + maxPoolGradConfig, + meanGradConfig, + minGradConfig, + minimumGradConfig, + mirrorPadGradConfig, + modGradConfig, + multiplyGradConfig, + negGradConfig, + oneHotGradConfig, + onesLikeGradConfig, + packGradConfig, + padV2GradConfig, + padV2GradConfig, + powGradConfig, + preluGradConfig, + prodGradConfig, + reciprocalGradConfig, + relu6GradConfig, + reluGradConfig, + reshapeGradConfig, + resizeBilinearGradConfig, + resizeNearestNeighborGradConfig, + reverseGradConfig, + roundGradConfig, + rsqrtGradConfig, + selectGradConfig, + seluGradConfig, + sigmoidGradConfig, + signGradConfig, + sinGradConfig, + sinhGradConfig, + sliceGradConfig, + softmaxGradConfig, + softplusGradConfig, + spaceToBatchNDGradConfig, + spaceToBatchNDGradConfig, + splitVGradConfig, + splitVGradConfig, + sqrtGradConfig, + squaredDifferenceGradConfig, + squareGradConfig, + stepGradConfig, + subGradConfig, + sumGradConfig, + tanGradConfig, + tanhGradConfig, + tileGradConfig, + transposeGradConfig, + unpackGradConfig, + unsortedSegmentSumGradConfig, + zerosLikeGradConfig + ]; + for (const gradientConfig of gradConfigs) { + registerGradient(gradientConfig); + } + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/abs.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.abs = function() { + this.throwIfDisposed(); + return abs(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/acos.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.acos = function() { + this.throwIfDisposed(); + return acos(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/acosh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.acosh = function() { + this.throwIfDisposed(); + return acosh(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/add.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.add = function(b) { + this.throwIfDisposed(); + return add2(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/all.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.all = function(axis, keepDims) { + this.throwIfDisposed(); + return all(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/any.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.any = function(axis, keepDims) { + this.throwIfDisposed(); + return any(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/arg_max.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.argMax = function(axis) { + this.throwIfDisposed(); + return argMax(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/arg_min.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.argMin = function(axis) { + this.throwIfDisposed(); + return argMin(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as_scalar.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.asScalar = function() { + this.throwIfDisposed(); + assert(this.size === 1, () => "The array must have only 1 element."); + return reshape(this, []); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as_type.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.asType = function(dtype) { + this.throwIfDisposed(); + return cast(this, dtype); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as1d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.as1D = function() { + this.throwIfDisposed(); + return reshape(this, [this.size]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as2d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.as2D = function(rows, columns) { + this.throwIfDisposed(); + return reshape(this, [rows, columns]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as3d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.as3D = function(rows, columns, depth) { + this.throwIfDisposed(); + return reshape(this, [rows, columns, depth]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as4d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.as4D = function(rows, columns, depth, depth2) { + this.throwIfDisposed(); + return reshape(this, [rows, columns, depth, depth2]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as5d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.as5D = function(rows, columns, depth, depth2, depth3) { + this.throwIfDisposed(); + return reshape(this, [rows, columns, depth, depth2, depth3]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/asin.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.asin = function() { + this.throwIfDisposed(); + return asin(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/asinh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.asinh = function() { + this.throwIfDisposed(); + return asinh(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atan.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.atan = function() { + this.throwIfDisposed(); + return atan(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atan2.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.atan2 = function(b) { + this.throwIfDisposed(); + return atan2(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atanh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.atanh = function() { + this.throwIfDisposed(); + return atanh(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/avg_pool.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.avgPool = function(filterSize, strides, pad3, dimRoundingMode) { + this.throwIfDisposed(); + return avgPool(this, filterSize, strides, pad3, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/batch_to_space_nd.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.batchToSpaceND = function(blockShape, crops) { + this.throwIfDisposed(); + return batchToSpaceND(this, blockShape, crops); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/batchnorm.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.batchNorm = function(mean4, variance, offset, scale2, varianceEpsilon) { + this.throwIfDisposed(); + return batchNorm(this, mean4, variance, offset, scale2, varianceEpsilon); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/broadcast_to.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.broadcastTo = function(shape) { + this.throwIfDisposed(); + return broadcastTo(this, shape); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cast.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.cast = function(dtype) { + this.throwIfDisposed(); + return cast(this, dtype); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ceil.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.ceil = function() { + this.throwIfDisposed(); + return ceil(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/clip_by_value.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.clipByValue = function(min6, max6) { + this.throwIfDisposed(); + return clipByValue(this, min6, max6); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/concat.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.concat = function(x, axis) { + this.throwIfDisposed(); + if (x instanceof Tensor) { + x = [x]; + } + return concat([this, ...x], axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv1d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.conv1d = function(filter, stride, pad3, dataFormat, dilation, dimRoundingMode) { + this.throwIfDisposed(); + return conv1d(this, filter, stride, pad3, dataFormat, dilation, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv2d_transpose.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.conv2dTranspose = function(filter, outputShape, strides, pad3, dimRoundingMode) { + this.throwIfDisposed(); + return conv2dTranspose(this, filter, outputShape, strides, pad3, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv2d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.conv2d = function(filter, strides, pad3, dataFormat, dilations, dimRoundingMode) { + this.throwIfDisposed(); + return conv2d(this, filter, strides, pad3, dataFormat, dilations, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cos.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.cos = function() { + this.throwIfDisposed(); + return cos(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cosh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.cosh = function() { + this.throwIfDisposed(); + return cosh(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cumprod.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.cumprod = function(axis, exclusive, reverse5) { + this.throwIfDisposed(); + return cumprod(this, axis, exclusive, reverse5); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cumsum.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.cumsum = function(axis, exclusive, reverse5) { + this.throwIfDisposed(); + return cumsum(this, axis, exclusive, reverse5); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/depth_to_space.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.depthToSpace = function(blockSize, dataFormat) { + this.throwIfDisposed(); + return depthToSpace(this, blockSize, dataFormat); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/depthwise_conv2d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.depthwiseConv2d = function(filter, strides, pad3, dataFormat, dilations, dimRoundingMode) { + this.throwIfDisposed(); + return depthwiseConv2d(this, filter, strides, pad3, dataFormat, dilations, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/dilation2d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.dilation2d = function(filter, strides, pad3, dilations, dataFormat) { + this.throwIfDisposed(); + return dilation2d(this, filter, strides, pad3, dilations, dataFormat); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/div_no_nan.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.divNoNan = function(b) { + this.throwIfDisposed(); + return divNoNan(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/div.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.div = function(b) { + this.throwIfDisposed(); + return div(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/dot.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.dot = function(b) { + this.throwIfDisposed(); + return dot(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/elu.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.elu = function() { + this.throwIfDisposed(); + return elu(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/equal.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.equal = function(b) { + this.throwIfDisposed(); + return equal(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/erf.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.erf = function() { + this.throwIfDisposed(); + return erf(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/euclidean_norm.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.euclideanNorm = function(axis, keepDims) { + this.throwIfDisposed(); + return euclideanNorm(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/exp.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.exp = function() { + this.throwIfDisposed(); + return exp(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/expand_dims.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.expandDims = function(axis) { + this.throwIfDisposed(); + return expandDims(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/expm1.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.expm1 = function() { + this.throwIfDisposed(); + return expm1(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/fft.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.fft = function() { + this.throwIfDisposed(); + return fft(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/flatten.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.flatten = function() { + this.throwIfDisposed(); + return reshape(this, [this.size]); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/floor.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.floor = function() { + this.throwIfDisposed(); + return floor(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/floorDiv.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.floorDiv = function(b) { + this.throwIfDisposed(); + return floorDiv(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/gather.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.gather = function(indices, axis) { + this.throwIfDisposed(); + return gather(this, indices, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/greater_equal.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.greaterEqual = function(b) { + this.throwIfDisposed(); + return greaterEqual(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/greater.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.greater = function(b) { + this.throwIfDisposed(); + return greater(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ifft.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.ifft = function() { + this.throwIfDisposed(); + return ifft(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/irfft.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.irfft = function() { + this.throwIfDisposed(); + return irfft(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_finite.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.isFinite = function() { + this.throwIfDisposed(); + return isFinite2(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_inf.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.isInf = function() { + this.throwIfDisposed(); + return isInf(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_nan.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.isNaN = function() { + this.throwIfDisposed(); + return isNaN2(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/leaky_relu.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.leakyRelu = function(alpha) { + this.throwIfDisposed(); + return leakyRelu(this, alpha); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/less_equal.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.lessEqual = function(b) { + this.throwIfDisposed(); + return lessEqual(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/less.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.less = function(b) { + this.throwIfDisposed(); + return less(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/local_response_normalization.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.localResponseNormalization = function(depthRadius, bias, alpha, beta) { + this.throwIfDisposed(); + return localResponseNormalization(this, depthRadius, bias, alpha, beta); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_sigmoid.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logSigmoid = function() { + this.throwIfDisposed(); + return logSigmoid(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_softmax.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logSoftmax = function(axis) { + this.throwIfDisposed(); + return logSoftmax(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_sum_exp.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logSumExp = function(axis, keepDims) { + this.throwIfDisposed(); + return logSumExp(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.log = function() { + this.throwIfDisposed(); + return log2(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log1p.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.log1p = function() { + this.throwIfDisposed(); + return log1p(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_and.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logicalAnd = function(b) { + this.throwIfDisposed(); + return logicalAnd(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_not.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logicalNot = function() { + this.throwIfDisposed(); + return logicalNot(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_or.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logicalOr = function(b) { + this.throwIfDisposed(); + return logicalOr(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_xor.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.logicalXor = function(b) { + this.throwIfDisposed(); + return logicalXor(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mat_mul.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.matMul = function(b, transposeA, transposeB) { + this.throwIfDisposed(); + return matMul(this, b, transposeA, transposeB); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/max_pool.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.maxPool = function(filterSize, strides, pad3, dimRoundingMode) { + this.throwIfDisposed(); + return maxPool(this, filterSize, strides, pad3, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/max.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.max = function(axis, keepDims) { + this.throwIfDisposed(); + return max(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/maximum.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.maximum = function(b) { + this.throwIfDisposed(); + return maximum(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mean.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.mean = function(axis, keepDims) { + this.throwIfDisposed(); + return mean(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/min.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.min = function(axis, keepDims) { + this.throwIfDisposed(); + return min(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/minimum.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.minimum = function(b) { + this.throwIfDisposed(); + return minimum(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mirror_pad.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.mirrorPad = function(paddings, mode) { + this.throwIfDisposed(); + return mirrorPad(this, paddings, mode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mod.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.mod = function(b) { + this.throwIfDisposed(); + return mod(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mul.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.mul = function(b) { + this.throwIfDisposed(); + return mul(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/neg.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.neg = function() { + this.throwIfDisposed(); + return neg(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/norm.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.norm = function(ord, axis, keepDims) { + this.throwIfDisposed(); + return norm(this, ord, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/not_equal.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.notEqual = function(b) { + this.throwIfDisposed(); + return notEqual(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/one_hot.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.oneHot = function(depth, onValue = 1, offValue = 0) { + this.throwIfDisposed(); + return oneHot(this, depth, onValue, offValue); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ones_like.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.onesLike = function() { + this.throwIfDisposed(); + return onesLike(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pad.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.pad = function(paddings, constantValue) { + this.throwIfDisposed(); + return pad(this, paddings, constantValue); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pool.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.pool = function(windowShape, poolingType, padding, dilationRate, strides, dimRoundingMode) { + this.throwIfDisposed(); + return pool(this, windowShape, poolingType, padding, dilationRate, strides, dimRoundingMode); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pow.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.pow = function(exp4) { + this.throwIfDisposed(); + return pow(this, exp4); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/prelu.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.prelu = function(alpha) { + this.throwIfDisposed(); + return prelu(this, alpha); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/prod.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.prod = function(axis, keepDims) { + this.throwIfDisposed(); + return prod(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reciprocal.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.reciprocal = function() { + this.throwIfDisposed(); + return reciprocal(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/relu.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.relu = function() { + this.throwIfDisposed(); + return relu(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/relu6.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.relu6 = function() { + this.throwIfDisposed(); + return relu6(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reshape_as.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.reshapeAs = function(x) { + this.throwIfDisposed(); + return reshape(this, x.shape); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reshape.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.reshape = function(shape) { + this.throwIfDisposed(); + return reshape(this, shape); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/resize_bilinear.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.resizeBilinear = function(newShape2D, alignCorners, halfPixelCenters) { + this.throwIfDisposed(); + return resizeBilinear(this, newShape2D, alignCorners, halfPixelCenters); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/resize_nearest_neighbor.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.resizeNearestNeighbor = function(newShape2D, alignCorners, halfFloatCenters) { + this.throwIfDisposed(); + return resizeNearestNeighbor(this, newShape2D, alignCorners, halfFloatCenters); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reverse.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.reverse = function(axis) { + this.throwIfDisposed(); + return reverse(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/rfft.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.rfft = function() { + this.throwIfDisposed(); + return rfft(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/round.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.round = function() { + this.throwIfDisposed(); + return round2(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/rsqrt.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.rsqrt = function() { + this.throwIfDisposed(); + return rsqrt(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/selu.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.selu = function() { + this.throwIfDisposed(); + return selu(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/separable_conv2d.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.separableConv2d = function(depthwiseFilter, pointwiseFilter, strides, pad3, dilation, dataFormat) { + this.throwIfDisposed(); + return separableConv2d(this, depthwiseFilter, pointwiseFilter, strides, pad3, dilation, dataFormat); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sigmoid.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sigmoid = function() { + this.throwIfDisposed(); + return sigmoid(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sign.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sign = function() { + this.throwIfDisposed(); + return sign(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sin.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sin = function() { + this.throwIfDisposed(); + return sin(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sinh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sinh = function() { + this.throwIfDisposed(); + return sinh(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/slice.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.slice = function(begin, size) { + this.throwIfDisposed(); + return slice(this, begin, size); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/softmax.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.softmax = function(dim) { + this.throwIfDisposed(); + return softmax(this, dim); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/softplus.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.softplus = function() { + this.throwIfDisposed(); + return softplus(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/space_to_batch_nd.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.spaceToBatchND = function(blockShape, paddings) { + this.throwIfDisposed(); + return spaceToBatchND(this, blockShape, paddings); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/split.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.split = function(numOrSizeSplits, axis) { + this.throwIfDisposed(); + return split(this, numOrSizeSplits, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sqrt.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sqrt = function() { + this.throwIfDisposed(); + return sqrt(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/square.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.square = function() { + this.throwIfDisposed(); + return square(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/squared_difference.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.squaredDifference = function(b) { + this.throwIfDisposed(); + return squaredDifference(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/squeeze.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.squeeze = function(axis) { + this.throwIfDisposed(); + return squeeze(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/stack.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.stack = function(x, axis) { + this.throwIfDisposed(); + const tensorsToBeStacked = x instanceof Tensor ? [this, x] : [this, ...x]; + return stack(tensorsToBeStacked, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/step.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.step = function(alpha) { + this.throwIfDisposed(); + return step(this, alpha); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/strided_slice.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.stridedSlice = function(begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask) { + this.throwIfDisposed(); + return stridedSlice(this, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sub.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sub = function(b) { + this.throwIfDisposed(); + return sub(this, b); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sum.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.sum = function(axis, keepDims) { + this.throwIfDisposed(); + return sum2(this, axis, keepDims); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tan.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.tan = function() { + this.throwIfDisposed(); + return tan(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tanh.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.tanh = function() { + this.throwIfDisposed(); + return tanh2(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tile.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.tile = function(reps) { + this.throwIfDisposed(); + return tile(this, reps); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_bool.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.toBool = function() { + this.throwIfDisposed(); + return cast(this, "bool"); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_float.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.toFloat = function() { + this.throwIfDisposed(); + return cast(this, "float32"); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_int.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.toInt = function() { + this.throwIfDisposed(); + return cast(this, "int32"); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/topk.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.topk = function(k, sorted) { + this.throwIfDisposed(); + return topk(this, k, sorted); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/transpose.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.transpose = function(perm) { + this.throwIfDisposed(); + return transpose(this, perm); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unique.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.unique = function(axis) { + this.throwIfDisposed(); + return unique(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unsorted_segment_sum.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.unsortedSegmentSum = function(segmentIds, numSegments) { + this.throwIfDisposed(); + return unsortedSegmentSum(this, segmentIds, numSegments); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unstack.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.unstack = function(axis) { + this.throwIfDisposed(); + return unstack(this, axis); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/where.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.where = function(condition, x) { + this.throwIfDisposed(); + return where(condition, this, x); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/zeros_like.js + init_define_BUILD_VERSION(); + getGlobalTensorClass().prototype.zerosLike = function() { + this.throwIfDisposed(); + return zerosLike(this); + }; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/flags_layers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/errors.js + init_define_BUILD_VERSION(); + var AttributeError = class extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, AttributeError.prototype); + } + }; + var RuntimeError = class extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, RuntimeError.prototype); + } + }; + var ValueError = class extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, ValueError.prototype); + } + }; + var NotImplementedError = class extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, NotImplementedError.prototype); + } + }; + var AssertionError = class extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, AssertionError.prototype); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/executor_utils.js + init_define_BUILD_VERSION(); + var LruCache = class { + constructor(maxEntries) { + this.maxEntries = maxEntries || 100; + this.cache = /* @__PURE__ */ new Map(); + } + get(key) { + let entry; + if (this.cache.has(key)) { + entry = this.cache.get(key); + this.cache.delete(key); + this.cache.set(key, entry); + } + return entry; + } + put(key, value) { + if (this.cache.has(key)) { + this.cache.delete(key); + } else if (this.cache.size >= this.maxEntries) { + const keyToDelete = this.cache.keys().next().value; + this.cache.delete(keyToDelete); + } + this.cache.set(key, value); + } + getMaxEntries() { + return this.maxEntries; + } + setMaxEntries(maxEntries) { + if (maxEntries < 0) { + throw new Error(`The maxEntries of LRU caches must be at least 0, but got ${maxEntries}.`); + } + if (this.maxEntries > maxEntries) { + for (let i = 0; i < this.maxEntries - maxEntries; i++) { + const keyToDelete = this.cache.keys().next().value; + this.cache.delete(keyToDelete); + } + } + this.maxEntries = maxEntries; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/generic_utils.js + init_define_BUILD_VERSION(); + function pyListRepeat(value, numValues) { + if (Array.isArray(value)) { + let newArray = []; + for (let i = 0; i < numValues; i++) { + newArray = newArray.concat(value); + } + return newArray; + } else { + const newArray = new Array(numValues); + newArray.fill(value); + return newArray; + } + } + function assert2(val, message) { + if (!val) { + throw new AssertionError(message); + } + } + function count(array2, refernce) { + let counter = 0; + for (const item of array2) { + if (item === refernce) { + counter++; + } + } + return counter; + } + function singletonOrArray(xs) { + if (xs.length === 1) { + return xs[0]; + } + return xs; + } + function toList(x) { + if (Array.isArray(x)) { + return x; + } + return [x]; + } + function toSnakeCase(name) { + const intermediate = name.replace(/(.)([A-Z][a-z0-9]+)/g, "$1_$2"); + const insecure = intermediate.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase(); + if (insecure[0] !== "_") { + return insecure; + } + return "private" + insecure; + } + function toCamelCase(identifier) { + if (identifier.length <= 1) { + return identifier; + } + if (identifier.indexOf("_") === -1) { + return identifier; + } + return identifier.replace(/[_]+(\w|$)/g, (m, p1) => p1.toUpperCase()); + } + var _GLOBAL_CUSTOM_OBJECTS = {}; + function serializeKerasObject(instance) { + if (instance === null || instance === void 0) { + return null; + } + const dict = {}; + dict["className"] = instance.getClassName(); + dict["config"] = instance.getConfig(); + return dict; + } + function convertNDArrayScalarsInConfig(config) { + if (config == null || typeof config !== "object") { + return; + } else if (Array.isArray(config)) { + config.forEach((configItem) => convertNDArrayScalarsInConfig(configItem)); + } else { + const fields = Object.keys(config); + for (const field of fields) { + const value = config[field]; + if (value != null && typeof value === "object") { + if (!Array.isArray(value) && value["type"] === "ndarray" && typeof value["value"] === "number") { + config[field] = value["value"]; + } else { + convertNDArrayScalarsInConfig(value); + } + } + } + } + } + function deserializeKerasObject(identifier, moduleObjects = {}, customObjects = {}, printableModuleName = "object", fastWeightInit = false) { + if (typeof identifier === "string") { + const functionName = identifier; + let fn; + if (functionName in customObjects) { + fn = customObjects[functionName]; + } else if (functionName in _GLOBAL_CUSTOM_OBJECTS) { + fn = _GLOBAL_CUSTOM_OBJECTS[functionName]; + } else { + fn = moduleObjects[functionName]; + if (fn == null) { + throw new ValueError(`Unknown ${printableModuleName}: ${identifier}. This may be due to one of the following reasons: +1. The ${printableModuleName} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code. +2. The custom ${printableModuleName} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`); + } + } + return fn; + } else { + const config = identifier; + if (config["className"] == null || config["config"] == null) { + throw new ValueError(`${printableModuleName}: Improper config format: ${JSON.stringify(config)}. +'className' and 'config' must set.`); + } + const className = config["className"]; + let cls, fromConfig; + if (className in customObjects) { + [cls, fromConfig] = customObjects[className]; + } else if (className in _GLOBAL_CUSTOM_OBJECTS) { + [cls, fromConfig] = _GLOBAL_CUSTOM_OBJECTS["className"]; + } else if (className in moduleObjects) { + [cls, fromConfig] = moduleObjects[className]; + } + if (cls == null) { + throw new ValueError(`Unknown ${printableModuleName}: ${className}. This may be due to one of the following reasons: +1. The ${printableModuleName} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code. +2. The custom ${printableModuleName} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`); + } + if (fromConfig != null) { + const customObjectsCombined = {}; + for (const key of Object.keys(_GLOBAL_CUSTOM_OBJECTS)) { + customObjectsCombined[key] = _GLOBAL_CUSTOM_OBJECTS[key]; + } + for (const key of Object.keys(customObjects)) { + customObjectsCombined[key] = customObjects[key]; + } + const nestedConfig = config["config"]; + nestedConfig["customObjects"] = customObjectsCombined; + const backupCustomObjects = Object.assign({}, _GLOBAL_CUSTOM_OBJECTS); + for (const key of Object.keys(customObjects)) { + _GLOBAL_CUSTOM_OBJECTS[key] = customObjects[key]; + } + convertNDArrayScalarsInConfig(config["config"]); + const returnObj = fromConfig(cls, config["config"], customObjects, fastWeightInit); + _GLOBAL_CUSTOM_OBJECTS = Object.assign({}, backupCustomObjects); + return returnObj; + } else { + const backupCustomObjects = Object.assign({}, _GLOBAL_CUSTOM_OBJECTS); + for (const key of Object.keys(customObjects)) { + _GLOBAL_CUSTOM_OBJECTS[key] = customObjects[key]; + } + const returnObj = new cls(config["config"]); + _GLOBAL_CUSTOM_OBJECTS = Object.assign({}, backupCustomObjects); + return returnObj; + } + } + } + function numberCompare(a, b) { + return a < b ? -1 : a > b ? 1 : 0; + } + function reverseNumberCompare(a, b) { + return -1 * numberCompare(a, b); + } + function unique2(xs) { + if (xs == null) { + return xs; + } + const out = []; + for (const x of xs) { + if (out.indexOf(x) === -1) { + out.push(x); + } + } + return out; + } + function isObjectEmpty(obj) { + if (obj == null) { + throw new ValueError(`Invalid value in obj: ${JSON.stringify(obj)}`); + } + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + return false; + } + } + return true; + } + function checkStringTypeUnionValue(values, label, value) { + if (value == null) { + return; + } + if (values.indexOf(value) < 0) { + throw new ValueError(`${value} is not a valid ${label}. Valid values are ${values} or null/undefined.`); + } + } + function checkArrayTypeAndLength(x, expectedType, minLength = 0, maxLength = Infinity) { + assert2(minLength >= 0); + assert2(maxLength >= minLength); + return Array.isArray(x) && x.length >= minLength && x.length <= maxLength && x.every((e) => typeof e === expectedType); + } + function assertPositiveInteger(value, name) { + if (Array.isArray(value)) { + util_exports.assert(value.length > 0, () => `${name} is unexpectedly an empty array.`); + value.forEach((v, i) => assertPositiveInteger(v, `element ${i + 1} of ${name}`)); + } else { + util_exports.assert(Number.isInteger(value) && value > 0, () => `Expected ${name} to be a positive integer, but got ${formatAsFriendlyString(value)}.`); + } + } + function formatAsFriendlyString(value) { + if (value === null) { + return "null"; + } else if (Array.isArray(value)) { + return "[" + value.map((v) => formatAsFriendlyString(v)).join(",") + "]"; + } else if (typeof value === "string") { + return `"${value}"`; + } else { + return `${value}`; + } + } + function debounce(f, waitMs, nowFunc) { + let lastTime = nowFunc != null ? nowFunc() : util_exports.now(); + let lastResult; + const f2 = (...args) => { + const now2 = nowFunc != null ? nowFunc() : util_exports.now(); + if (now2 - lastTime < waitMs) { + return lastResult; + } + lastTime = now2; + lastResult = f(...args); + return lastResult; + }; + return f2; + } + function mapActivationToFusedKernel(activationName) { + if (activationName === "relu") { + return "relu"; + } + if (activationName === "linear") { + return "linear"; + } + if (activationName === "elu") { + return "elu"; + } + return null; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/input_layer.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/backend/state.js + init_define_BUILD_VERSION(); + var _nextUniqueTensorId = 0; + function getNextUniqueTensorId() { + return _nextUniqueTensorId++; + } + var _uidPrefixes = {}; + function getUid(prefix = "") { + if (!(prefix in _uidPrefixes)) { + _uidPrefixes[prefix] = 0; + } + _uidPrefixes[prefix] += 1; + return prefix + _uidPrefixes[prefix].toString(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/topology.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/common.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/common.js + init_define_BUILD_VERSION(); + var VALID_DATA_FORMAT_VALUES = ["channelsFirst", "channelsLast"]; + var VALID_INTERPOLATION_FORMAT_VALUES = ["nearest", "bilinear"]; + var VALID_PADDING_MODE_VALUES = ["valid", "same", "causal"]; + var VALID_POOL_MODE_VALUES = ["max", "avg"]; + var VALID_BIDIRECTIONAL_MERGE_MODES = ["sum", "mul", "concat", "ave"]; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/common.js + var nameMap = /* @__PURE__ */ new Map(); + function checkDataFormat(value) { + checkStringTypeUnionValue(VALID_DATA_FORMAT_VALUES, "DataFormat", value); + } + function checkInterpolationFormat(value) { + checkStringTypeUnionValue(VALID_INTERPOLATION_FORMAT_VALUES, "InterpolationFormat", value); + } + function checkPaddingMode(value) { + checkStringTypeUnionValue(VALID_PADDING_MODE_VALUES, "PaddingMode", value); + } + function checkPoolMode(value) { + checkStringTypeUnionValue(VALID_POOL_MODE_VALUES, "PoolMode", value); + } + var _nameScopeStack = []; + var _nameScopeDivider = "/"; + function nameScope(name, fn) { + _nameScopeStack.push(name); + try { + const val = fn(); + _nameScopeStack.pop(); + return val; + } catch (e) { + _nameScopeStack.pop(); + throw e; + } + } + function currentNameScopePrefix() { + if (_nameScopeStack.length === 0) { + return ""; + } else { + return _nameScopeStack.join(_nameScopeDivider) + _nameScopeDivider; + } + } + function getScopedTensorName(tensorName) { + if (!isValidTensorName(tensorName)) { + throw new Error("Not a valid tensor name: '" + tensorName + "'"); + } + return currentNameScopePrefix() + tensorName; + } + function getUniqueTensorName(scopedName) { + if (!isValidTensorName(scopedName)) { + throw new Error("Not a valid tensor name: '" + scopedName + "'"); + } + if (!nameMap.has(scopedName)) { + nameMap.set(scopedName, 0); + } + const index = nameMap.get(scopedName); + nameMap.set(scopedName, nameMap.get(scopedName) + 1); + if (index > 0) { + const result = `${scopedName}_${index}`; + nameMap.set(result, 1); + return result; + } else { + return scopedName; + } + } + var tensorNameRegex = new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/); + function isValidTensorName(name) { + return !!name.match(tensorNameRegex); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/initializers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/backend/tfjs_backend.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/math_utils.js + init_define_BUILD_VERSION(); + function isInteger(x) { + return x === parseInt(x.toString(), 10); + } + function arrayProd(array2, begin, end) { + if (begin == null) { + begin = 0; + } + if (end == null) { + end = array2.length; + } + let prod5 = 1; + for (let i = begin; i < end; ++i) { + prod5 *= array2[i]; + } + return prod5; + } + function min2(array2) { + if (array2.length === 0) { + return Number.NaN; + } + let min6 = Number.POSITIVE_INFINITY; + for (let i = 0; i < array2.length; i++) { + const value = array2[i]; + if (value < min6) { + min6 = value; + } + } + return min6; + } + function max2(array2) { + if (array2.length === 0) { + return Number.NaN; + } + let max6 = Number.NEGATIVE_INFINITY; + for (let i = 0; i < array2.length; i++) { + const value = array2[i]; + if (value > max6) { + max6 = value; + } + } + return max6; + } + function range2(begin, end) { + if (end < begin) { + throw new ValueError(`end (${end}) < begin (${begin}) is forbidden.`); + } + const out = []; + for (let i = begin; i < end; ++i) { + out.push(i); + } + return out; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/backend/common.js + init_define_BUILD_VERSION(); + var _epsilon; + function epsilon() { + if (_epsilon == null) { + _epsilon = backend().epsilon(); + } + return _epsilon; + } + function imageDataFormat() { + return "channelsLast"; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/backend/tfjs_backend.js + function cast2(x, dtype) { + return cast(x, dtype); + } + function expandDims2(x, axis = -1) { + const outShape = x.shape.slice(); + if (axis < 0) { + axis = outShape.length + axis + 1; + } + outShape.splice(axis, 0, 1); + return reshape(x, outShape); + } + function repeat(x, n) { + return tidy(() => { + if (x.shape.length !== 2) { + throw new ValueError(`repeat() expects a rank-2 tensor, but received a rank-${x.shape.length} tensor.`); + } + const y = expandDims2(x, 1); + return tile2(y, [1, n, 1]); + }); + } + function flatten2(x) { + const newShape = [arrayProd(x.shape)]; + return reshape(x, newShape); + } + function batchFlatten(x) { + if (x.rank <= 1) { + throw new ValueError(`batchFlatten requires a minimum rank of 2. Got rank: ${x.rank}.`); + } + const newShape = [x.shape[0], arrayProd(x.shape, 1)]; + return reshape(x, newShape); + } + function sliceAlongFirstAxis(array2, start, size) { + return tidy(() => { + switch (array2.rank) { + case 1: + return slice1d(array2, start, size); + case 2: + return slice2d(array2, [start, 0], [size, array2.shape[1]]); + case 3: + return slice3d(array2, [start, 0, 0], [size, array2.shape[1], array2.shape[2]]); + case 4: + return slice4d(array2, [start, 0, 0, 0], [size, array2.shape[1], array2.shape[2], array2.shape[3]]); + case 5: + return slice(array2, [start, 0, 0, 0, 0], [ + size, + array2.shape[1], + array2.shape[2], + array2.shape[3], + array2.shape[4] + ]); + case 6: + return slice(array2, [start, 0, 0, 0, 0, 0], [ + size, + array2.shape[1], + array2.shape[2], + array2.shape[3], + array2.shape[4], + array2.shape[5] + ]); + default: + throw new ValueError(`sliceAlongFirstAxis() received an unsupported tensor rank: ${array2.rank}`); + } + }); + } + function sliceAlongLastAxis(array2, start, size) { + return tidy(() => { + switch (array2.rank) { + case 1: + return slice1d(array2, start, size); + case 2: + return slice2d(array2, [0, start], [array2.shape[0], size]); + case 3: + return slice3d(array2, [0, 0, start], [array2.shape[0], array2.shape[1], size]); + case 4: + return slice4d(array2, [0, 0, 0, start], [array2.shape[0], array2.shape[1], array2.shape[2], size]); + default: + throw new ValueError(`sliceAlongLastAxis() received an unsupported tensor rank: ${array2.rank}`); + } + }); + } + function sliceAlongAxis(array2, start, size, axis) { + return tidy(() => { + switch (array2.rank) { + case 1: + return slice1d(array2, start, size); + case 2: + switch (axis) { + case 1: + return sliceAlongFirstAxis(array2, start, size); + case 2: + return sliceAlongLastAxis(array2, start, size); + default: + throw new ValueError(`The axis is not within the rank of the tensor ${axis}`); + } + case 3: + switch (axis) { + case 1: + return sliceAlongFirstAxis(array2, start, size); + case 2: + return slice3d(array2, [0, start, 0], [array2.shape[0], size, array2.shape[2]]); + case 3: + return sliceAlongLastAxis(array2, start, size); + default: + throw new ValueError(`The axis is not within the rank of the tensor ${axis}`); + } + case 4: + switch (axis) { + case 1: + return sliceAlongFirstAxis(array2, start, size); + case 2: + return slice4d(array2, [0, start, 0, 0], [array2.shape[0], size, array2.shape[2], array2.shape[3]]); + case 3: + return slice4d(array2, [0, 0, start, 0], [array2.shape[0], array2.shape[1], size, array2.shape[3]]); + case 4: + return sliceAlongLastAxis(array2, start, size); + default: + throw new ValueError(`The axis is not within the rank of the tensor ${axis}`); + } + default: + throw new ValueError(`sliceAlongLastAxis() received an unsupported tensor rank: ${array2.rank}`); + } + }); + } + function concatenate(tensors, axis = -1) { + let rank; + if (axis < 0) { + rank = tensors[0].rank; + if (rank !== 0) { + axis = rank; + } else { + axis = 0; + } + } + if (axis === tensors[0].rank) { + axis = -1; + } + return concat(tensors, axis); + } + function concatAlongFirstAxis(a, b) { + switch (a.rank) { + case 1: + return concat1d([a, b]); + case 2: + return concat2d([a, b], 0); + case 3: + return concat3d([a, b], 0); + case 4: + return concat4d([a, b], 0); + default: + throw new ValueError(`concatAlongFirstAxis() received an unsupported tensor rank: ${a.rank}`); + } + } + function tile2(x, n) { + if (!Array.isArray(n)) { + n = [n]; + } + if (x.rank !== n.length) { + throw new ValueError(`The length of input n (${n.length}) does not match the number of dimensions in input x (${x.rank})`); + } + return tile(x, n); + } + function randomNormal2(shape, mean4 = 0, stddev = 1, dtype, seed) { + return randomNormal(shape, mean4, stddev, dtype, seed); + } + function dot2(a, b, activation, bias) { + if (a.rank < 2 || b.rank < 2) { + throw new NotImplementedError(`dot requires both inputs to be rank >= 2 but got x shape = ${a.shape} and y shape = ${b.shape}`); + } + if (b.rank >= 3) { + const xLastDim = a.shape.slice(-1)[0]; + const ySecondLastDim = b.shape.slice(-2)[0]; + if (xLastDim !== ySecondLastDim) { + throw new NotImplementedError(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${a.shape} and y shape = ${b.shape}`); + } + } + if (a.rank === 2 && b.rank === 2) { + const transposeA = false; + const transposeB = false; + return fused_ops_exports.matMul({ + a, + b, + transposeA, + transposeB, + bias: bias ? reshapeBias(a.rank, bias, imageDataFormat()) : null, + activation + }); + } else { + const aFirstDims = a.shape.slice(); + const aLastDim = aFirstDims.pop(); + a = reshape(a, [-1, aLastDim]); + const bShape = b.shape.slice(); + const bLastDim = bShape.pop(); + const ySecondLastDim = bShape.pop(); + const yOtherDims = [...bShape, bLastDim]; + const perm = Array.from({ length: b.rank }, (_, i) => { + if (i === 0) { + return b.rank - 2; + } else if (i <= b.rank - 2) { + return i - 1; + } + return i; + }); + b = reshape(transpose(b, perm), [ySecondLastDim, -1]); + const outputShape = [...aFirstDims, ...yOtherDims]; + const transposeA = false; + const transposeB = false; + return reshape(fused_ops_exports.matMul({ + a, + b, + transposeA, + transposeB, + bias: bias ? reshapeBias(a.rank, bias, imageDataFormat()) : null, + activation + }), outputShape); + } + } + function gather2(reference, indices, axis) { + return tidy(() => { + if (Array.isArray(indices)) { + indices = tensor1d(indices, "int32"); + } else { + indices = cast(indices, "int32"); + } + return gather(reference, indices, axis); + }); + } + function square2(x) { + return mul(x, x); + } + function reshapeBias(xRank, bias, dataFormat) { + const biasShape = bias.shape; + if (bias.rank !== 1 && bias.rank !== xRank) { + throw new ValueError(`Unexpected bias dimensions: ${bias.rank}; expected it to be 1 or ${xRank}`); + } + if (xRank === 5) { + if (dataFormat === "channelsFirst") { + if (biasShape.length === 1) { + return reshape(bias, [1, biasShape[0], 1, 1, 1]); + } else { + return reshape(bias, [1, biasShape[3], biasShape[0], biasShape[1], biasShape[2]]); + } + } else if (dataFormat === "channelsLast") { + if (biasShape.length === 1) { + return reshape(bias, [1, 1, 1, 1, biasShape[0]]); + } else { + return reshape(bias, [1].concat(biasShape)); + } + } + } else if (xRank === 4) { + if (dataFormat === "channelsFirst") { + if (biasShape.length === 1) { + return reshape(bias, [1, biasShape[0], 1, 1]); + } else { + return reshape(bias, [1, biasShape[2], biasShape[0], biasShape[1]]); + } + } else if (dataFormat === "channelsLast") { + if (biasShape.length === 1) { + return reshape(bias, [1, 1, 1, biasShape[0]]); + } else { + return reshape(bias, [1].concat(biasShape)); + } + } + } else if (xRank === 3) { + if (dataFormat === "channelsFirst") { + if (biasShape.length === 1) { + return reshape(bias, [1, biasShape[0], 1]); + } else { + return reshape(bias, [1, biasShape[1], biasShape[0]]); + } + } else if (dataFormat === "channelsLast") { + if (biasShape.length === 1) { + return reshape(bias, [1, 1, biasShape[0]]); + } else { + return reshape(bias, [1].concat(biasShape)); + } + } + } else if (xRank < 3) { + return bias; + } + throw new ValueError(`Unsupported input rank by biasAdd: ${bias.rank}`); + } + function biasAdd(x, bias, dataFormat) { + return tidy(() => { + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + checkDataFormat(dataFormat); + return add2(x, reshapeBias(x.rank, bias, dataFormat)); + }); + } + function elu2(x, alpha = 1) { + if (alpha !== 1) { + throw new NotImplementedError(`Support for alpha values other than 1 (${alpha}) is not implemented yet.`); + } + return elu(x); + } + function softsign(x) { + return tidy(() => div(x, add2(abs(x), 1))); + } + function dropout2(x, level, noiseShape, seed) { + return tidy(() => dropout(x, level, noiseShape, seed)); + } + function hardSigmoid(x) { + return tidy(() => { + const y = add2(0.5, mul(0.2, x)); + return clipByValue(y, 0, 1); + }); + } + function inTrainPhase(x, alt, training = false) { + return training ? x() : alt(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/keras_format/initializer_config.js + init_define_BUILD_VERSION(); + var VALID_FAN_MODE_VALUES = ["fanIn", "fanOut", "fanAvg"]; + var VALID_DISTRIBUTION_VALUES = ["normal", "uniform", "truncatedNormal"]; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/initializers.js + function checkFanMode(value) { + checkStringTypeUnionValue(VALID_FAN_MODE_VALUES, "FanMode", value); + } + function checkDistribution(value) { + checkStringTypeUnionValue(VALID_DISTRIBUTION_VALUES, "Distribution", value); + } + var Initializer = class extends serialization_exports.Serializable { + fromConfigUsesCustomObjects() { + return false; + } + getConfig() { + return {}; + } + }; + var Zeros = class extends Initializer { + apply(shape, dtype) { + return zeros(shape, dtype); + } + }; + Zeros.className = "Zeros"; + serialization_exports.registerClass(Zeros); + var Ones = class extends Initializer { + apply(shape, dtype) { + return ones2(shape, dtype); + } + }; + Ones.className = "Ones"; + serialization_exports.registerClass(Ones); + var Constant = class extends Initializer { + constructor(args) { + super(); + if (typeof args !== "object") { + throw new ValueError(`Expected argument of type ConstantConfig but got ${args}`); + } + if (args.value === void 0) { + throw new ValueError(`config must have value set but got ${args}`); + } + this.value = args.value; + } + apply(shape, dtype) { + return tidy(() => mul(scalar(this.value), ones2(shape, dtype))); + } + getConfig() { + return { + value: this.value + }; + } + }; + Constant.className = "Constant"; + serialization_exports.registerClass(Constant); + var RandomUniform = class extends Initializer { + constructor(args) { + super(); + this.DEFAULT_MINVAL = -0.05; + this.DEFAULT_MAXVAL = 0.05; + this.minval = args.minval || this.DEFAULT_MINVAL; + this.maxval = args.maxval || this.DEFAULT_MAXVAL; + this.seed = args.seed; + } + apply(shape, dtype) { + return randomUniform(shape, this.minval, this.maxval, dtype); + } + getConfig() { + return { minval: this.minval, maxval: this.maxval, seed: this.seed }; + } + }; + RandomUniform.className = "RandomUniform"; + serialization_exports.registerClass(RandomUniform); + var RandomNormal = class extends Initializer { + constructor(args) { + super(); + this.DEFAULT_MEAN = 0; + this.DEFAULT_STDDEV = 0.05; + this.mean = args.mean || this.DEFAULT_MEAN; + this.stddev = args.stddev || this.DEFAULT_STDDEV; + this.seed = args.seed; + } + apply(shape, dtype) { + dtype = dtype || "float32"; + if (dtype !== "float32" && dtype !== "int32") { + throw new NotImplementedError(`randomNormal does not support dType ${dtype}.`); + } + return randomNormal2(shape, this.mean, this.stddev, dtype, this.seed); + } + getConfig() { + return { mean: this.mean, stddev: this.stddev, seed: this.seed }; + } + }; + RandomNormal.className = "RandomNormal"; + serialization_exports.registerClass(RandomNormal); + var TruncatedNormal = class extends Initializer { + constructor(args) { + super(); + this.DEFAULT_MEAN = 0; + this.DEFAULT_STDDEV = 0.05; + this.mean = args.mean || this.DEFAULT_MEAN; + this.stddev = args.stddev || this.DEFAULT_STDDEV; + this.seed = args.seed; + } + apply(shape, dtype) { + dtype = dtype || "float32"; + if (dtype !== "float32" && dtype !== "int32") { + throw new NotImplementedError(`truncatedNormal does not support dType ${dtype}.`); + } + return truncatedNormal(shape, this.mean, this.stddev, dtype, this.seed); + } + getConfig() { + return { mean: this.mean, stddev: this.stddev, seed: this.seed }; + } + }; + TruncatedNormal.className = "TruncatedNormal"; + serialization_exports.registerClass(TruncatedNormal); + var Identity2 = class extends Initializer { + constructor(args) { + super(); + this.gain = args.gain != null ? args.gain : 1; + } + apply(shape, dtype) { + return tidy(() => { + if (shape.length !== 2 || shape[0] !== shape[1]) { + throw new ValueError("Identity matrix initializer can only be used for 2D square matrices."); + } else { + return mul(this.gain, eye(shape[0])); + } + }); + } + getConfig() { + return { gain: this.gain }; + } + }; + Identity2.className = "Identity"; + serialization_exports.registerClass(Identity2); + function computeFans(shape, dataFormat = "channelsLast") { + let fanIn; + let fanOut; + checkDataFormat(dataFormat); + if (shape.length === 2) { + fanIn = shape[0]; + fanOut = shape[1]; + } else if ([3, 4, 5].indexOf(shape.length) !== -1) { + if (dataFormat === "channelsFirst") { + const receptiveFieldSize = arrayProd(shape, 2); + fanIn = shape[1] * receptiveFieldSize; + fanOut = shape[0] * receptiveFieldSize; + } else if (dataFormat === "channelsLast") { + const receptiveFieldSize = arrayProd(shape, 0, shape.length - 2); + fanIn = shape[shape.length - 2] * receptiveFieldSize; + fanOut = shape[shape.length - 1] * receptiveFieldSize; + } + } else { + const shapeProd = arrayProd(shape); + fanIn = Math.sqrt(shapeProd); + fanOut = Math.sqrt(shapeProd); + } + return [fanIn, fanOut]; + } + var VarianceScaling = class extends Initializer { + constructor(args) { + super(); + if (args.scale < 0) { + throw new ValueError(`scale must be a positive float. Got: ${args.scale}`); + } + this.scale = args.scale == null ? 1 : args.scale; + this.mode = args.mode == null ? "fanIn" : args.mode; + checkFanMode(this.mode); + this.distribution = args.distribution == null ? "normal" : args.distribution; + checkDistribution(this.distribution); + this.seed = args.seed; + } + apply(shape, dtype) { + const fans = computeFans(shape); + const fanIn = fans[0]; + const fanOut = fans[1]; + let scale2 = this.scale; + if (this.mode === "fanIn") { + scale2 /= Math.max(1, fanIn); + } else if (this.mode === "fanOut") { + scale2 /= Math.max(1, fanOut); + } else { + scale2 /= Math.max(1, (fanIn + fanOut) / 2); + } + if (this.distribution === "normal") { + const stddev = Math.sqrt(scale2); + dtype = dtype || "float32"; + if (dtype !== "float32" && dtype !== "int32") { + throw new NotImplementedError(`${this.getClassName()} does not support dType ${dtype}.`); + } + return truncatedNormal(shape, 0, stddev, dtype, this.seed); + } else { + const limit = Math.sqrt(3 * scale2); + return randomUniform(shape, -limit, limit, dtype); + } + } + getConfig() { + return { + scale: this.scale, + mode: this.mode, + distribution: this.distribution, + seed: this.seed + }; + } + }; + VarianceScaling.className = "VarianceScaling"; + serialization_exports.registerClass(VarianceScaling); + var GlorotUniform = class extends VarianceScaling { + constructor(args) { + super({ + scale: 1, + mode: "fanAvg", + distribution: "uniform", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + GlorotUniform.className = "GlorotUniform"; + serialization_exports.registerClass(GlorotUniform); + var GlorotNormal = class extends VarianceScaling { + constructor(args) { + super({ + scale: 1, + mode: "fanAvg", + distribution: "normal", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + GlorotNormal.className = "GlorotNormal"; + serialization_exports.registerClass(GlorotNormal); + var HeNormal = class extends VarianceScaling { + constructor(args) { + super({ + scale: 2, + mode: "fanIn", + distribution: "normal", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + HeNormal.className = "HeNormal"; + serialization_exports.registerClass(HeNormal); + var HeUniform = class extends VarianceScaling { + constructor(args) { + super({ + scale: 2, + mode: "fanIn", + distribution: "uniform", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + HeUniform.className = "HeUniform"; + serialization_exports.registerClass(HeUniform); + var LeCunNormal = class extends VarianceScaling { + constructor(args) { + super({ + scale: 1, + mode: "fanIn", + distribution: "normal", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + LeCunNormal.className = "LeCunNormal"; + serialization_exports.registerClass(LeCunNormal); + var LeCunUniform = class extends VarianceScaling { + constructor(args) { + super({ + scale: 1, + mode: "fanIn", + distribution: "uniform", + seed: args == null ? null : args.seed + }); + } + getClassName() { + return VarianceScaling.className; + } + }; + LeCunUniform.className = "LeCunNormal"; + serialization_exports.registerClass(LeCunUniform); + var Orthogonal = class extends Initializer { + constructor(args) { + super(); + this.DEFAULT_GAIN = 1; + this.gain = args.gain == null ? this.DEFAULT_GAIN : args.gain; + this.seed = args.seed; + if (this.seed != null) { + throw new NotImplementedError("Random seed is not implemented for Orthogonal Initializer yet."); + } + } + apply(shape, dtype) { + return tidy(() => { + if (shape.length < 2) { + throw new NotImplementedError("Shape must be at least 2D."); + } + if (shape[0] * shape[1] > 2e3) { + console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${shape[0] * shape[1]}) elements: Slowness may result.`); + } + const normalizedShape = shape[0] > shape[1] ? [shape[1], shape[0]] : shape; + const a = randomNormal2(normalizedShape, 0, 1, "float32"); + let q = linalg.gramSchmidt(a); + if (shape[0] > shape[1]) { + q = transpose(q); + } + return mul(this.gain, q); + }); + } + getConfig() { + return { + gain: this.gain, + seed: this.seed + }; + } + }; + Orthogonal.className = "Orthogonal"; + serialization_exports.registerClass(Orthogonal); + var INITIALIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP = { + "constant": "Constant", + "glorotNormal": "GlorotNormal", + "glorotUniform": "GlorotUniform", + "heNormal": "HeNormal", + "heUniform": "HeUniform", + "identity": "Identity", + "leCunNormal": "LeCunNormal", + "leCunUniform": "LeCunUniform", + "ones": "Ones", + "orthogonal": "Orthogonal", + "randomNormal": "RandomNormal", + "randomUniform": "RandomUniform", + "truncatedNormal": "TruncatedNormal", + "varianceScaling": "VarianceScaling", + "zeros": "Zeros" + }; + function deserializeInitializer(config, customObjects = {}) { + return deserializeKerasObject(config, serialization_exports.SerializationMap.getMap().classNameMap, customObjects, "initializer"); + } + function serializeInitializer(initializer) { + return serializeKerasObject(initializer); + } + function getInitializer(identifier) { + if (typeof identifier === "string") { + const className = identifier in INITIALIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP ? INITIALIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP[identifier] : identifier; + if (className === "GlorotNormal") { + return new GlorotNormal(); + } else if (className === "GlorotUniform") { + return new GlorotUniform(); + } else if (className === "HeNormal") { + return new HeNormal(); + } else if (className === "HeUniform") { + return new HeUniform(); + } else if (className === "LeCunNormal") { + return new LeCunNormal(); + } else if (className === "LeCunUniform") { + return new LeCunUniform(); + } else { + const config = {}; + config["className"] = className; + config["config"] = {}; + return deserializeInitializer(config); + } + } else if (identifier instanceof Initializer) { + return identifier; + } else { + return deserializeInitializer(identifier); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/types_utils.js + init_define_BUILD_VERSION(); + function isArrayOfShapes(x) { + return Array.isArray(x) && Array.isArray(x[0]); + } + function normalizeShapeList(x) { + if (x.length === 0) { + return []; + } + if (!Array.isArray(x[0])) { + return [x]; + } + return x; + } + function getExactlyOneTensor(xs) { + let x; + if (Array.isArray(xs)) { + if (xs.length !== 1) { + throw new ValueError(`Expected Tensor length to be 1; got ${xs.length}`); + } + x = xs[0]; + } else { + x = xs; + } + return x; + } + function getExactlyOneShape(shapes) { + if (Array.isArray(shapes) && Array.isArray(shapes[0])) { + if (shapes.length === 1) { + shapes = shapes; + return shapes[0]; + } else { + throw new ValueError(`Expected exactly 1 Shape; got ${shapes.length}`); + } + } else { + return shapes; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/variable_utils.js + init_define_BUILD_VERSION(); + function countParamsInWeights(weights) { + let count2 = 0; + for (const weight of weights) { + if (weight.shape.length === 0) { + count2 += 1; + } else { + count2 += weight.shape.reduce((a, b) => a * b); + } + } + return count2; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/variables.js + init_define_BUILD_VERSION(); + var DEFAULT_VARIABLE_NAME_PREFIX = "Variable"; + var LayerVariable = class { + constructor(val, dtype = "float32", name = DEFAULT_VARIABLE_NAME_PREFIX, trainable = true, constraint = null) { + this.dtype = dtype == null ? "float32" : dtype; + this.shape = val.shape; + this.id = getNextUniqueTensorId(); + name = name == null ? DEFAULT_VARIABLE_NAME_PREFIX : name; + this.originalName = getScopedTensorName(name); + this.name = getUniqueTensorName(this.originalName); + this.trainable_ = trainable; + this.constraint = constraint; + this.val = variable(val, this.trainable_, this.name, this.dtype); + } + read() { + this.assertNotDisposed(); + return this.val; + } + write(newVal) { + this.assertNotDisposed(); + checkShapesMatch(this.val, newVal); + if (this.val.id !== newVal.id) { + this.val.assign(newVal); + if (this.constraint != null) { + this.val.assign(this.constraint.apply(this.val)); + } + } + return this; + } + dispose() { + this.assertNotDisposed(); + this.val.dispose(); + } + assertNotDisposed() { + if (this.val.isDisposed) { + throw new Error(`LayersVariable ${this.name} is already disposed.`); + } + } + get trainable() { + return this.trainable_; + } + set trainable(trainable) { + this.trainable_ = trainable; + this.val.trainable = trainable; + } + }; + function checkShapesMatch(x, y) { + if (x.shape.toString() !== y.shape.toString()) { + throw new Error("Shape mismatch: " + JSON.stringify(x.shape) + " vs. " + JSON.stringify(y.shape)); + } + } + function batchGetValue(xs) { + return xs.map((x) => x.read()); + } + function batchSetValue(variablesAndValues) { + variablesAndValues.forEach((variableAndValue) => { + const variable2 = variableAndValue[0]; + variable2.write(variableAndValue[1]); + }); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/topology.js + var InputSpec = class { + constructor(args) { + this.dtype = args.dtype; + this.shape = args.shape; + if (args.shape != null) { + this.ndim = args.shape.length; + } else { + this.ndim = args.ndim; + } + this.maxNDim = args.maxNDim; + this.minNDim = args.minNDim; + this.axes = args.axes || {}; + } + }; + var SymbolicTensor = class { + constructor(dtype, shape, sourceLayer, inputs, callArgs, name, outputTensorIndex) { + this.dtype = dtype; + this.shape = shape; + this.sourceLayer = sourceLayer; + this.inputs = inputs; + this.callArgs = callArgs; + this.outputTensorIndex = outputTensorIndex; + this.id = getNextUniqueTensorId(); + if (name != null) { + this.originalName = getScopedTensorName(name); + this.name = getUniqueTensorName(this.originalName); + } + this.rank = shape.length; + } + }; + var _nextNodeID = 0; + var Node = class { + constructor(args, callArgs) { + this.callArgs = callArgs; + this.id = _nextNodeID++; + this.outboundLayer = args.outboundLayer; + this.inboundLayers = args.inboundLayers; + this.nodeIndices = args.nodeIndices; + this.tensorIndices = args.tensorIndices; + this.inputTensors = args.inputTensors; + this.outputTensors = args.outputTensors; + this.inputMasks = args.inputMasks; + this.outputMasks = args.outputMasks; + this.inputShapes = args.inputShapes; + this.outputShapes = args.outputShapes; + for (const layer of args.inboundLayers) { + if (layer != null) { + layer.outboundNodes.push(this); + } + } + args.outboundLayer.inboundNodes.push(this); + } + getConfig() { + const inboundNames = []; + for (const layer of this.inboundLayers) { + if (layer != null) { + inboundNames.push(layer.name); + } else { + inboundNames.push(null); + } + } + return { + outboundLayer: this.outboundLayer ? this.outboundLayer.name : null, + inboundLayers: inboundNames, + nodeIndices: this.nodeIndices, + tensorIndices: this.tensorIndices + }; + } + }; + var _nextLayerID = 0; + var Layer = class extends serialization_exports.Serializable { + constructor(args = {}) { + super(); + this._callHook = null; + this._addedWeightNames = []; + this._stateful = false; + this.id = _nextLayerID++; + this.activityRegularizer = null; + this.inputSpec = null; + this.supportsMasking = false; + this._trainableWeights = []; + this._nonTrainableWeights = []; + this._losses = []; + this._updates = []; + this._built = false; + this.inboundNodes = []; + this.outboundNodes = []; + let name = args.name; + if (!name) { + const prefix = this.getClassName(); + name = toSnakeCase(prefix) + "_" + getUid(prefix); + } + this.name = name; + this.trainable_ = args.trainable == null ? true : args.trainable; + if (args.inputShape != null || args.batchInputShape != null) { + let batchInputShape; + if (args.batchInputShape != null) { + batchInputShape = args.batchInputShape; + } else if (args.inputShape != null) { + let batchSize = null; + if (args.batchSize != null) { + batchSize = args.batchSize; + } + batchInputShape = [batchSize].concat(args.inputShape); + } + this.batchInputShape = batchInputShape; + let dtype = args.dtype; + if (dtype == null) { + dtype = args.inputDType; + } + if (dtype == null) { + dtype = "float32"; + } + this.dtype = dtype; + } + if (args.weights != null) { + this.initialWeights = args.weights; + } else { + this.initialWeights = null; + } + this._refCount = null; + this.fastWeightInitDuringBuild = false; + } + static nodeKey(layer, nodeIndex) { + return layer.name + "_ib-" + nodeIndex.toString(); + } + getNodeAtIndex(nodeIndex, attrName) { + if (this.inboundNodes.length === 0) { + throw new RuntimeError(`The layer has never been called and thus has no defined ${attrName}.`); + } + if (this.inboundNodes.length <= nodeIndex) { + throw new ValueError(`Asked to get ${attrName} at node ${nodeIndex}, but the layer has only ${this.inboundNodes.length} inbound nodes.`); + } + return this.inboundNodes[nodeIndex]; + } + getInputAt(nodeIndex) { + return singletonOrArray(this.getNodeAtIndex(nodeIndex, "input").inputTensors); + } + getOutputAt(nodeIndex) { + return singletonOrArray(this.getNodeAtIndex(nodeIndex, "output").outputTensors); + } + get input() { + if (this.inboundNodes.length > 1) { + throw new AttributeError(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use \`getInputAt(nodeIndex)\` instead.`); + } else if (this.inboundNodes.length === 0) { + throw new AttributeError(`Layer ${this.name} is not connected, no input to return.`); + } + return singletonOrArray(this.getNodeAtIndex(0, "input").inputTensors); + } + get output() { + if (this.inboundNodes.length === 0) { + throw new AttributeError(`Layer ${this.name} has no inbound nodes.`); + } + if (this.inboundNodes.length > 1) { + throw new AttributeError(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`); + } + return singletonOrArray(this.getNodeAtIndex(0, "output").outputTensors); + } + get losses() { + return this._losses; + } + calculateLosses() { + return this.losses.map((lossFn) => lossFn()); + } + get updates() { + return this._updates; + } + get built() { + return this._built; + } + set built(built) { + this._built = built; + } + get trainable() { + return this.trainable_; + } + set trainable(trainable) { + this._trainableWeights.forEach((w) => w.trainable = trainable); + this.trainable_ = trainable; + } + get trainableWeights() { + if (this.trainable_) { + return this._trainableWeights.filter((w) => w.trainable); + } else { + return []; + } + } + set trainableWeights(weights) { + this._trainableWeights = weights; + } + get nonTrainableWeights() { + if (this.trainable) { + return this._trainableWeights.filter((w) => !w.trainable).concat(this._nonTrainableWeights); + } else { + return this._trainableWeights.concat(this._nonTrainableWeights); + } + } + set nonTrainableWeights(weights) { + this._nonTrainableWeights = weights; + } + get weights() { + return this.trainableWeights.concat(this.nonTrainableWeights); + } + get stateful() { + return this._stateful; + } + resetStates() { + if (!this.stateful) { + throw new Error("Cannot call the resetStates() method of a non-stateful Layer object."); + } + } + assertInputCompatibility(inputs) { + inputs = toList(inputs); + if (this.inputSpec == null || this.inputSpec.length === 0) { + return; + } + const inputSpec = toList(this.inputSpec); + if (inputs.length !== inputSpec.length) { + throw new ValueError(`Layer ${this.name} expects ${inputSpec.length} inputs, but it received ${inputs.length} input tensors. Input received: ${inputs}`); + } + for (let inputIndex = 0; inputIndex < inputs.length; inputIndex++) { + const x = inputs[inputIndex]; + const spec = inputSpec[inputIndex]; + if (spec == null) { + continue; + } + const ndim = x.rank; + if (spec.ndim != null) { + if (ndim !== spec.ndim) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name}: expected ndim=${spec.ndim}, found ndim=${ndim}`); + } + } + if (spec.maxNDim != null) { + if (ndim > spec.maxNDim) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name}: expected max_ndim=${spec.maxNDim}, found ndim=${ndim}`); + } + } + if (spec.minNDim != null) { + if (ndim < spec.minNDim) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name}: expected min_ndim=${spec.minNDim}, found ndim=${ndim}.`); + } + } + if (spec.dtype != null) { + if (x.dtype !== spec.dtype) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name} : expected dtype=${spec.dtype}, found dtype=${x.dtype}.`); + } + } + if (spec.axes) { + const xShape = x.shape; + for (const key in spec.axes) { + const axis = Number(key); + const value = spec.axes[key]; + const xShapeAtAxis = axis >= 0 ? xShape[axis] : xShape[xShape.length + axis]; + if (value != null && [value, null].indexOf(xShapeAtAxis) === -1) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name}: expected axis ${axis} of input shape to have value ${value} but got shape ${xShape}.`); + } + } + } + if (spec.shape != null) { + for (let i = 0; i < spec.shape.length; ++i) { + const specDim = spec.shape[i]; + const dim = x.shape[i]; + if (specDim != null && dim != null) { + if (specDim !== dim) { + throw new ValueError(`Input ${inputIndex} is incompatible with layer ${this.name}: expected shape=${spec.shape}, found shape=${x.shape}.`); + } + } + } + } + } + } + call(inputs, kwargs) { + return inputs; + } + invokeCallHook(inputs, kwargs) { + if (this._callHook != null) { + this._callHook(inputs, kwargs); + } + } + setCallHook(callHook) { + this._callHook = callHook; + } + clearCallHook() { + this._callHook = null; + } + apply(inputs, kwargs) { + kwargs = kwargs || {}; + this.assertNotDisposed(); + const inputsList = toList(inputs); + let allAreSymbolic = true; + for (const input2 of inputsList) { + if (!(input2 instanceof SymbolicTensor)) { + allAreSymbolic = false; + break; + } + } + let noneAreSymbolic = true; + for (const input2 of inputsList) { + if (input2 instanceof SymbolicTensor) { + noneAreSymbolic = false; + break; + } + } + if (allAreSymbolic === noneAreSymbolic) { + throw new ValueError("Arguments to apply() must be all SymbolicTensors or all Tensors"); + } + return nameScope(this.name, () => { + if (!this.built) { + this.assertInputCompatibility(inputs); + const inputShapes = []; + for (const xElem of toList(inputs)) { + inputShapes.push(xElem.shape); + } + this.build(singletonOrArray(inputShapes)); + this.built = true; + if (this.initialWeights) { + this.setWeights(this.initialWeights); + } + if (this._refCount === null && noneAreSymbolic) { + this._refCount = 1; + } + } + this.assertInputCompatibility(inputs); + if (noneAreSymbolic) { + let output = this.call(inputs, kwargs); + const outputList = toList(output); + const outputListCopy = []; + for (let x of outputList) { + if (inputsList.indexOf(x) !== -1) { + x = x.clone(); + } + outputListCopy.push(x); + } + output = singletonOrArray(outputListCopy); + if (this.activityRegularizer != null) { + throw new NotImplementedError("Layer invocation in the presence of activity regularizer(s) is not supported yet."); + } + return output; + } else { + const inputShape = collectInputShape(inputs); + const outputShape = this.computeOutputShape(inputShape); + let output; + const outputDType = guessOutputDType(inputs); + this.warnOnIncompatibleInputShape(Array.isArray(inputs) ? inputShape[0] : inputShape); + if (outputShape != null && outputShape.length > 0 && Array.isArray(outputShape[0])) { + output = outputShape.map((shape, index) => new SymbolicTensor(outputDType, shape, this, toList(inputs), kwargs, this.name, index)); + } else { + output = new SymbolicTensor(outputDType, outputShape, this, toList(inputs), kwargs, this.name); + } + this.addInboundNode(inputs, output, null, null, inputShape, outputShape, kwargs); + this._refCount++; + if (this.activityRegularizer != null) { + throw new NotImplementedError("Layer invocation in the presence of activity regularizer(s) is not supported yet."); + } + return output; + } + }); + } + warnOnIncompatibleInputShape(inputShape) { + if (this.batchInputShape == null) { + return; + } else if (inputShape.length !== this.batchInputShape.length) { + console.warn(`The rank of the input tensor provided (shape: ${JSON.stringify(inputShape)}) does not match that of the batchInputShape (${JSON.stringify(this.batchInputShape)}) of the layer ${this.name}`); + } else { + let dimMismatch = false; + this.batchInputShape.forEach((dimension, i) => { + if (dimension != null && inputShape[i] != null && inputShape[i] !== dimension) { + dimMismatch = true; + } + }); + if (dimMismatch) { + console.warn(`The shape of the input tensor (${JSON.stringify(inputShape)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`); + } + } + } + get outputShape() { + if (this.inboundNodes == null || this.inboundNodes.length === 0) { + throw new AttributeError(`The layer ${this.name} has never been called and thus has no defined output shape.`); + } + const allOutputShapes = []; + for (const node of this.inboundNodes) { + const shapeString = JSON.stringify(node.outputShapes); + if (allOutputShapes.indexOf(shapeString) === -1) { + allOutputShapes.push(shapeString); + } + } + if (allOutputShapes.length === 1) { + const outputShapes = this.inboundNodes[0].outputShapes; + if (Array.isArray(outputShapes) && Array.isArray(outputShapes[0]) && outputShapes.length === 1) { + return outputShapes[0]; + } else { + return outputShapes; + } + } else { + throw new AttributeError(`The layer ${this.name} has multiple inbound nodes with different output shapes. Hence the notion of "output shape" is ill-defined for the layer.`); + } + } + countParams() { + if (!this.built) { + throw new RuntimeError(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`); + } + return countParamsInWeights(this.weights); + } + build(inputShape) { + this.built = true; + } + getWeights(trainableOnly = false) { + return batchGetValue(trainableOnly ? this.trainableWeights : this.weights); + } + setWeights(weights) { + tidy(() => { + const params = this.weights; + if (params.length !== weights.length) { + throw new ValueError(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${weights.length}, but the layer was expecting ${params.length} weights. Provided weights: ${weights}...`); + } + if (params.length === 0) { + return; + } + const weightValueTuples = []; + const paramValues = batchGetValue(params); + for (let i = 0; i < paramValues.length; ++i) { + const pv = paramValues[i]; + const p2 = params[i]; + const w = weights[i]; + if (!util_exports.arraysEqual(pv.shape, w.shape)) { + throw new ValueError(`Layer weight shape ${pv.shape} not compatible with provided weight shape ${w.shape}`); + } + weightValueTuples.push([p2, w]); + } + batchSetValue(weightValueTuples); + }); + } + addWeight(name, shape, dtype, initializer, regularizer, trainable, constraint, getInitializerFunc) { + if (this._addedWeightNames.indexOf(name) !== -1) { + throw new ValueError(`Duplicate weight name ${name} for layer ${this.name}`); + } + this._addedWeightNames.push(name); + if (dtype == null) { + dtype = "float32"; + } + if (this.fastWeightInitDuringBuild) { + initializer = getInitializerFunc != null ? getInitializerFunc() : getInitializer("zeros"); + } + const initValue = initializer.apply(shape, dtype); + const weight = new LayerVariable(initValue, dtype, name, trainable, constraint); + initValue.dispose(); + if (regularizer != null) { + this.addLoss(() => regularizer.apply(weight.read())); + } + if (trainable == null) { + trainable = true; + } + if (trainable) { + this._trainableWeights.push(weight); + } else { + this._nonTrainableWeights.push(weight); + } + return weight; + } + setFastWeightInitDuringBuild(value) { + this.fastWeightInitDuringBuild = value; + } + addLoss(losses) { + if (losses == null || Array.isArray(losses) && losses.length === 0) { + return; + } + losses = toList(losses); + if (this._losses !== void 0 && this._losses !== null) { + this.losses.push(...losses); + } + } + computeOutputShape(inputShape) { + return inputShape; + } + computeMask(inputs, mask) { + if (!this.supportsMasking) { + if (mask != null) { + if (Array.isArray(mask)) { + mask.forEach((maskElement) => { + if (maskElement != null) { + throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`); + } + }); + } else { + throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`); + } + } + return null; + } + return mask; + } + addInboundNode(inputTensors, outputTensors, inputMasks, outputMasks, inputShapes, outputShapes, kwargs = null) { + const inputTensorList = toList(inputTensors); + outputTensors = toList(outputTensors); + inputMasks = toList(inputMasks); + outputMasks = toList(outputMasks); + inputShapes = normalizeShapeList(inputShapes); + outputShapes = normalizeShapeList(outputShapes); + const inboundLayers = []; + const nodeIndices = []; + const tensorIndices = []; + for (const x of inputTensorList) { + inboundLayers.push(x.sourceLayer); + nodeIndices.push(x.nodeIndex); + tensorIndices.push(x.tensorIndex); + } + new Node({ + outboundLayer: this, + inboundLayers, + nodeIndices, + tensorIndices, + inputTensors: inputTensorList, + outputTensors, + inputMasks, + outputMasks, + inputShapes, + outputShapes + }, kwargs); + for (let i = 0; i < outputTensors.length; i++) { + outputTensors[i].sourceLayer = this; + outputTensors[i].nodeIndex = this.inboundNodes.length - 1; + outputTensors[i].tensorIndex = i; + } + } + getConfig() { + const config = { name: this.name, trainable: this.trainable }; + if (this.batchInputShape != null) { + config["batchInputShape"] = this.batchInputShape; + } + if (this.dtype != null) { + config["dtype"] = this.dtype; + } + return config; + } + disposeWeights() { + this.weights.forEach((weight) => weight.dispose()); + return this.weights.length; + } + assertNotDisposed() { + if (this._refCount === 0) { + throw new Error(`Layer '${this.name}' is already disposed.`); + } + } + dispose() { + if (!this.built) { + throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`); + } + if (this._refCount === null) { + throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`); + } + this.assertNotDisposed(); + let numDisposedVariables = 0; + if (--this._refCount === 0) { + numDisposedVariables = this.disposeWeights(); + } + return { refCountAfterDispose: this._refCount, numDisposedVariables }; + } + }; + function collectInputShape(inputTensors) { + inputTensors = toList(inputTensors); + const shapes = []; + for (const x of inputTensors) { + shapes.push(x.shape); + } + return singletonOrArray(shapes); + } + function guessOutputDType(inputTensors) { + return "float32"; + } + function getSourceInputs(tensor2, layer, nodeIndex) { + if (layer == null || nodeIndex != null && nodeIndex > 0) { + layer = tensor2.sourceLayer; + nodeIndex = tensor2.nodeIndex; + } + if (layer.inboundNodes.length === 0) { + return [tensor2]; + } else { + const node = layer.inboundNodes[nodeIndex]; + if (node.inboundLayers.length === 0) { + return node.inputTensors; + } else { + const sourceTensors = []; + for (let i = 0; i < node.inboundLayers.length; i++) { + const x = node.inputTensors[i]; + const layer2 = node.inboundLayers[i]; + const nodeIndex2 = node.nodeIndices[i]; + const previousSources = getSourceInputs(x, layer2, nodeIndex2); + for (const x2 of previousSources) { + if (sourceTensors.indexOf(x2) === -1) { + sourceTensors.push(x2); + } + } + } + return sourceTensors; + } + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/input_layer.js + var InputLayer = class extends Layer { + constructor(args) { + super({ + dtype: args.dtype, + name: args.name != null ? args.name : getUid("input").toString() + }); + if (args.batchSize == null) { + args.batchSize = null; + } + if (args.sparse == null) { + args.sparse = false; + } + this.trainable = false; + this.built = true; + this.sparse = args.sparse; + if (args.inputShape != null && args.batchInputShape != null) { + throw new ValueError("Only provide the inputShape OR batchInputShape argument to inputLayer, not both at the same time."); + } + let batchInputShape = args.batchInputShape; + if (batchInputShape == null) { + if (args.inputShape == null) { + throw new ValueError("An InputLayer should be passed either a `batchInputShape` or an `inputShape`."); + } else { + batchInputShape = [args.batchSize].concat(args.inputShape); + } + } else { + if (args.batchSize != null) { + throw new ValueError("Cannot specify batchSize if batchInputShape is specified when creating an InputLayer."); + } + } + const dtype = args.dtype || "float32"; + this.batchInputShape = batchInputShape; + this.dtype = dtype; + this.inputSpec = [{ shape: batchInputShape }]; + const inputTensor = new SymbolicTensor(this.dtype, this.batchInputShape, this, [], {}, this.name); + inputTensor.nodeIndex = 0; + inputTensor.tensorIndex = 0; + new Node({ + outboundLayer: this, + inboundLayers: [], + nodeIndices: [], + tensorIndices: [], + inputTensors: [inputTensor], + outputTensors: [inputTensor], + inputMasks: [null], + outputMasks: [null], + inputShapes: [batchInputShape], + outputShapes: [batchInputShape] + }); + } + apply(inputs, kwargs) { + throw new ValueError(`Cannot pass any input to an InputLayer's apply() method. InputLayer name: ${this.name}`); + } + dispose() { + return { refCountAfterDispose: this._refCount, numDisposedVariables: 0 }; + } + getConfig() { + return { + batchInputShape: this.batchInputShape, + dtype: this.dtype, + sparse: this.sparse, + name: this.name + }; + } + }; + InputLayer.className = "InputLayer"; + serialization_exports.registerClass(InputLayer); + function Input(config) { + if (config.batchShape == null && config.shape == null) { + throw new Error("Please provide to Input either a `shape` or a `batchShape` argument. Note that `shape` does not include the batch dimension."); + } + if (config.batchShape != null && config.shape != null) { + throw new ValueError("Please provide either a `shape` or `batchShape` argument to Input, but not both."); + } + let batchShape = config.batchShape; + if (config.shape != null && batchShape == null) { + batchShape = [null].concat(config.shape); + } + let dtype = config.dtype; + if (dtype == null) { + dtype = "float32"; + } + const inputLayer = new InputLayer({ + batchInputShape: batchShape, + name: config.name, + dtype, + sparse: config.sparse + }); + const outputs = inputLayer.inboundNodes[0].outputTensors; + return outputs[0]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/executor.js + function assertFeedCompatibility(key, val) { + if (key.dtype == null || key.dtype === val.dtype) { + return val; + } + try { + return cast(val, key.dtype); + } catch (err) { + throw new ValueError(`The dtype of the feed (${val.dtype}) can not be cast to the dtype of the key '${key.name}' (${key.dtype}).`); + } + } + var FeedDict = class { + constructor(feeds) { + this.id2Value = {}; + this.id2Mask = {}; + this.name2Id = {}; + if (feeds instanceof FeedDict) { + for (const id in feeds.id2Value) { + this.id2Value[id] = feeds.id2Value[id]; + if (id in feeds.id2Mask) { + this.id2Mask[id] = feeds.id2Mask[id]; + } + } + } else { + if (feeds == null) { + return; + } + for (const feed of feeds) { + this.add(feed.key, feed.value); + } + } + } + add(key, value, mask) { + if (this.id2Value[key.id] == null) { + this.id2Value[key.id] = assertFeedCompatibility(key, value); + this.name2Id[key.name] = key.id; + if (mask != null) { + this.id2Mask[key.id] = mask; + } + } else { + throw new ValueError(`Duplicate key: name=${key.name}, id=${key.id}`); + } + return this; + } + addFeed(feed) { + this.add(feed.key, feed.value); + } + hasKey(key) { + return this.id2Value[key.id] != null; + } + names() { + return Object.keys(this.name2Id); + } + getValue(key) { + if (key instanceof SymbolicTensor) { + if (this.id2Value[key.id] == null) { + throw new ValueError(`Nonexistent key: ${key.name}`); + } else { + return this.id2Value[key.id]; + } + } else { + const id = this.name2Id[key]; + if (id == null) { + throw new ValueError(`Feed dict has no SymbolicTensor name: ${key}`); + } + return this.id2Value[id]; + } + } + getMask(key) { + if (key instanceof SymbolicTensor) { + if (this.id2Value[key.id] == null) { + throw new ValueError(`Nonexistent key: ${key.name}`); + } else { + return this.id2Mask[key.id]; + } + } else { + const id = this.name2Id[key]; + if (id == null) { + throw new ValueError(`Feed dict has no SymbolicTensor name: ${key}`); + } + return this.id2Mask[id]; + } + } + disposeMasks() { + if (this.id2Mask != null) { + dispose(this.id2Mask); + } + } + }; + var cachedSorted = new LruCache(); + var cachedRecipientCounts = new LruCache(); + function updateCacheMaxEntries(maxEntries) { + if (cachedSorted != null) { + cachedSorted.setMaxEntries(maxEntries); + } + if (cachedRecipientCounts != null) { + cachedRecipientCounts.setMaxEntries(maxEntries); + } + } + function execute(fetches, feedDict, kwargs, probe) { + const training = kwargs == null ? false : kwargs["training"]; + const arrayFetches = Array.isArray(fetches); + const fetchArray = arrayFetches ? fetches : [fetches]; + const outputNames = fetchArray.map((t) => t.name); + const finalOutputs = []; + const feedNames = feedDict.names(); + for (const outputName of outputNames) { + if (feedNames.indexOf(outputName) !== -1) { + finalOutputs.push(feedDict.getValue(outputName)); + } else { + finalOutputs.push(null); + } + } + if (probe != null) { + probe.maxNumTensors = -Infinity; + probe.minNumTensors = Infinity; + } + const fetchAndFeedKey = outputNames.join(",") + "|" + feedDict.names().sort().join(","); + let sorted = cachedSorted.get(fetchAndFeedKey); + let recipientCounts; + if (sorted == null) { + const out = getTopologicalSortAndRecipientCounts(fetchArray, feedDict); + sorted = out.sorted; + recipientCounts = out.recipientCounts; + cachedSorted.put(fetchAndFeedKey, sorted); + cachedRecipientCounts.put(fetchAndFeedKey, recipientCounts); + } + recipientCounts = {}; + if (!training) { + Object.assign(recipientCounts, cachedRecipientCounts.get(fetchAndFeedKey)); + } + const internalFeedDict = new FeedDict(feedDict); + for (let i = 0; i < sorted.length; ++i) { + if (probe != null) { + const numTensors = memory().numTensors; + if (numTensors > probe.maxNumTensors) { + probe.maxNumTensors = numTensors; + } + if (numTensors < probe.minNumTensors) { + probe.minNumTensors = numTensors; + } + } + const symbolic = sorted[i]; + const srcLayer = symbolic.sourceLayer; + if (srcLayer instanceof InputLayer) { + continue; + } + const inputValues = []; + const inputMasks = []; + const tensorsToDispose = []; + let maskExists = false; + for (const input2 of symbolic.inputs) { + const value = internalFeedDict.getValue(input2); + const mask = internalFeedDict.getMask(input2); + inputValues.push(value); + inputMasks.push(mask); + if (mask != null) { + maskExists = true; + } + if (!training) { + recipientCounts[input2.name]--; + if (recipientCounts[input2.name] === 0 && !feedDict.hasKey(input2) && outputNames.indexOf(input2.name) === -1 && !value.isDisposed && input2.sourceLayer.stateful !== true) { + tensorsToDispose.push(value); + } + } + } + if (maskExists) { + kwargs = kwargs || {}; + kwargs["mask"] = inputMasks[0]; + } + const outputTensors = toList(srcLayer.apply(inputValues, kwargs)); + let outputMask = null; + if (srcLayer.supportsMasking) { + outputMask = srcLayer.computeMask(inputValues, inputMasks); + } + const layerOutputs = getNodeOutputs(symbolic); + const outputSymbolicTensors = Array.isArray(layerOutputs) ? layerOutputs : [layerOutputs]; + for (let i2 = 0; i2 < outputSymbolicTensors.length; ++i2) { + if (!internalFeedDict.hasKey(outputSymbolicTensors[i2])) { + internalFeedDict.add(outputSymbolicTensors[i2], outputTensors[i2], Array.isArray(outputMask) ? outputMask[0] : outputMask); + } + const index = outputNames.indexOf(outputSymbolicTensors[i2].name); + if (index !== -1) { + finalOutputs[index] = outputTensors[i2]; + } + } + if (!training) { + dispose(tensorsToDispose); + } + } + internalFeedDict.disposeMasks(); + return arrayFetches ? finalOutputs : finalOutputs[0]; + } + function getTopologicalSortAndRecipientCounts(fetches, feedDict) { + util_exports.assert(fetches != null && fetches.length > 0, () => `Expected at least one fetch, got none`); + let finalSorted = []; + let finalRecipientMap = {}; + if (fetches.length === 1) { + const out = getTopologicalSortAndRecipientCountsForOneFetch(fetches[0], feedDict); + finalSorted = out.sorted; + finalRecipientMap = out.recipientMap; + } else { + const visited = /* @__PURE__ */ new Set(); + for (const fetch4 of fetches) { + const { sorted, recipientMap } = getTopologicalSortAndRecipientCountsForOneFetch(fetch4, feedDict); + for (const symbolicTensor of sorted) { + if (!visited.has(symbolicTensor.name)) { + finalSorted.push(symbolicTensor); + visited.add(symbolicTensor.name); + } + } + for (const name in recipientMap) { + if (finalRecipientMap[name] == null) { + finalRecipientMap[name] = /* @__PURE__ */ new Set(); + } + recipientMap[name].forEach((recipient) => finalRecipientMap[name].add(recipient)); + } + } + } + return { + sorted: finalSorted, + recipientCounts: recipientMap2Counts(finalRecipientMap) + }; + } + function recipientMap2Counts(recipientMap) { + const recipientCounts = {}; + for (const name in recipientMap) { + recipientCounts[name] = recipientMap[name].size; + } + return recipientCounts; + } + function getTopologicalSortAndRecipientCountsForOneFetch(fetch4, feedDict) { + const visited = /* @__PURE__ */ new Set(); + const sorted = []; + const recipientMap = {}; + for (const key of feedDict.names()) { + visited.add(key); + } + const stack2 = []; + const marks = []; + stack2.push(fetch4); + while (stack2.length > 0) { + const top = stack2[stack2.length - 1]; + if (visited.has(top.name)) { + stack2.pop(); + continue; + } + const topIsMarked = marks[marks.length - 1] === stack2.length - 1; + if (top.inputs.length === 0 || topIsMarked) { + stack2.pop(); + sorted.push(top); + visited.add(top.name); + if (topIsMarked) { + marks.pop(); + } + } else { + marks.push(stack2.length - 1); + for (const input2 of top.inputs) { + if (recipientMap[input2.name] == null) { + recipientMap[input2.name] = /* @__PURE__ */ new Set(); + } + recipientMap[input2.name].add(top.name); + if (visited.has(input2.name)) { + continue; + } + stack2.push(input2); + } + } + } + return { sorted, recipientMap }; + } + function getNodeOutputs(fetch4) { + let layerOutputs; + if (fetch4.sourceLayer.inboundNodes.length === 1) { + layerOutputs = fetch4.sourceLayer.output; + } else { + let nodeIndex = null; + for (let i = 0; i < fetch4.sourceLayer.inboundNodes.length; ++i) { + for (const outputTensor of fetch4.sourceLayer.inboundNodes[i].outputTensors) { + if (outputTensor.id === fetch4.id) { + nodeIndex = i; + break; + } + } + } + layerOutputs = fetch4.sourceLayer.getOutputAt(nodeIndex); + } + return layerOutputs; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/flags_layers.js + var ENV3 = env(); + ENV3.registerFlag("TOPOLOGICAL_SORT_CACHE_MAX_ENTRIES", () => 100, updateCacheMaxEntries); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_constraints.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/constraints.js + init_define_BUILD_VERSION(); + function calcL2Norms(w, axis) { + return tidy(() => sqrt(sum2(mul(w, w), axis, true))); + } + var Constraint = class extends serialization_exports.Serializable { + getConfig() { + return {}; + } + }; + var MaxNorm = class extends Constraint { + constructor(args) { + super(); + this.defaultMaxValue = 2; + this.defaultAxis = 0; + this.maxValue = args.maxValue != null ? args.maxValue : this.defaultMaxValue; + this.axis = args.axis != null ? args.axis : this.defaultAxis; + } + apply(w) { + return tidy(() => { + const norms = calcL2Norms(w, this.axis); + const desired = clipByValue(norms, 0, this.maxValue); + return mul(w, div(desired, add2(epsilon(), norms))); + }); + } + getConfig() { + return { maxValue: this.maxValue, axis: this.axis }; + } + }; + MaxNorm.className = "MaxNorm"; + serialization_exports.registerClass(MaxNorm); + var UnitNorm = class extends Constraint { + constructor(args) { + super(); + this.defaultAxis = 0; + this.axis = args.axis != null ? args.axis : this.defaultAxis; + } + apply(w) { + return tidy(() => div(w, add2(epsilon(), calcL2Norms(w, this.axis)))); + } + getConfig() { + return { axis: this.axis }; + } + }; + UnitNorm.className = "UnitNorm"; + serialization_exports.registerClass(UnitNorm); + var NonNeg = class extends Constraint { + apply(w) { + return relu(w); + } + }; + NonNeg.className = "NonNeg"; + serialization_exports.registerClass(NonNeg); + var MinMaxNorm = class extends Constraint { + constructor(args) { + super(); + this.defaultMinValue = 0; + this.defaultMaxValue = 1; + this.defaultRate = 1; + this.defaultAxis = 0; + this.minValue = args.minValue != null ? args.minValue : this.defaultMinValue; + this.maxValue = args.maxValue != null ? args.maxValue : this.defaultMaxValue; + this.rate = args.rate != null ? args.rate : this.defaultRate; + this.axis = args.axis != null ? args.axis : this.defaultAxis; + } + apply(w) { + return tidy(() => { + const norms = calcL2Norms(w, this.axis); + const desired = add2(mul(this.rate, clipByValue(norms, this.minValue, this.maxValue)), mul(1 - this.rate, norms)); + return mul(w, div(desired, add2(epsilon(), norms))); + }); + } + getConfig() { + return { + minValue: this.minValue, + maxValue: this.maxValue, + rate: this.rate, + axis: this.axis + }; + } + }; + MinMaxNorm.className = "MinMaxNorm"; + serialization_exports.registerClass(MinMaxNorm); + var CONSTRAINT_IDENTIFIER_REGISTRY_SYMBOL_MAP = { + "maxNorm": "MaxNorm", + "minMaxNorm": "MinMaxNorm", + "nonNeg": "NonNeg", + "unitNorm": "UnitNorm" + }; + function serializeConstraint(constraint) { + return serializeKerasObject(constraint); + } + function deserializeConstraint(config, customObjects = {}) { + return deserializeKerasObject(config, serialization_exports.SerializationMap.getMap().classNameMap, customObjects, "constraint"); + } + function getConstraint(identifier) { + if (identifier == null) { + return null; + } + if (typeof identifier === "string") { + const className = identifier in CONSTRAINT_IDENTIFIER_REGISTRY_SYMBOL_MAP ? CONSTRAINT_IDENTIFIER_REGISTRY_SYMBOL_MAP[identifier] : identifier; + const config = { className, config: {} }; + return deserializeConstraint(config); + } else if (identifier instanceof Constraint) { + return identifier; + } else { + return deserializeConstraint(identifier); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_initializers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_layers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/base_callbacks.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/logs.js + init_define_BUILD_VERSION(); + async function resolveScalarsInLogs(logs) { + if (logs == null) { + return; + } + const promises = []; + const keys = []; + const scalarsToDispose = []; + for (const key in logs) { + const value = logs[key]; + if (typeof value !== "number") { + const valueScalar = value; + promises.push(valueScalar.data()); + keys.push(key); + scalarsToDispose.push(valueScalar); + } + } + if (promises.length > 0) { + const values = await Promise.all(promises); + for (let i = 0; i < values.length; ++i) { + logs[keys[i]] = values[i][0]; + } + dispose(scalarsToDispose); + } + } + function disposeTensorsInLogs(logs) { + if (logs == null) { + return; + } + for (const key in logs) { + const value = logs[key]; + if (typeof value !== "number") { + value.dispose(); + } + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/base_callbacks.js + var ModelLoggingVerbosity; + (function(ModelLoggingVerbosity2) { + ModelLoggingVerbosity2[ModelLoggingVerbosity2["SILENT"] = 0] = "SILENT"; + ModelLoggingVerbosity2[ModelLoggingVerbosity2["VERBOSE"] = 1] = "VERBOSE"; + })(ModelLoggingVerbosity || (ModelLoggingVerbosity = {})); + var DEFAULT_YIELD_EVERY_MS = 125; + var BaseCallback = class { + constructor() { + this.validationData = null; + } + setParams(params) { + this.params = params; + } + async onEpochBegin(epoch, logs) { + } + async onEpochEnd(epoch, logs) { + } + async onBatchBegin(batch, logs) { + } + async onBatchEnd(batch, logs) { + } + async onTrainBegin(logs) { + } + async onTrainEnd(logs) { + } + setModel(model3) { + } + }; + var CallbackList = class { + constructor(callbacks2, queueLength = 10) { + if (callbacks2 == null) { + callbacks2 = []; + } + this.callbacks = callbacks2; + this.queueLength = queueLength; + } + append(callback) { + this.callbacks.push(callback); + } + setParams(params) { + for (const callback of this.callbacks) { + callback.setParams(params); + } + } + setModel(model3) { + for (const callback of this.callbacks) { + callback.setModel(model3); + } + } + async onEpochBegin(epoch, logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onEpochBegin(epoch, logs); + } + } + async onEpochEnd(epoch, logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onEpochEnd(epoch, logs); + } + } + async onBatchBegin(batch, logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onBatchBegin(batch, logs); + } + } + async onBatchEnd(batch, logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onBatchEnd(batch, logs); + } + } + async onTrainBegin(logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onTrainBegin(logs); + } + } + async onTrainEnd(logs) { + if (logs == null) { + logs = {}; + } + for (const callback of this.callbacks) { + await callback.onTrainEnd(logs); + } + } + }; + var BaseLogger = class extends BaseCallback { + constructor() { + super(); + } + async onEpochBegin(epoch) { + this.seen = 0; + this.totals = {}; + } + async onBatchEnd(batch, logs) { + if (logs == null) { + logs = {}; + } + const batchSize = logs["size"] == null ? 0 : logs["size"]; + this.seen += batchSize; + for (const key in logs) { + const value = logs[key]; + if (typeof value === "number") { + if (!this.totals.hasOwnProperty(key)) { + this.totals[key] = 0; + } + this.totals[key] = this.totals[key] + value * batchSize; + } else { + let oldTotalsToDispose; + if (key in this.totals) { + oldTotalsToDispose = this.totals[key]; + } else { + this.totals[key] = 0; + } + const total = tidy(() => add2(this.totals[key], mul(value, batchSize))); + this.totals[key] = total; + if (oldTotalsToDispose != null) { + oldTotalsToDispose.dispose(); + } + } + } + } + async onEpochEnd(epoch, logs) { + if (logs != null) { + for (const key of this.params["metrics"]) { + if (this.totals[key] == null) { + continue; + } + if (typeof this.totals[key] === "number") { + logs[key] = this.totals[key] / this.seen; + } else { + tidy(() => { + const log5 = mul(div(1, this.seen), this.totals[key]); + logs[key] = log5; + this.totals[key].dispose(); + keep(logs[key]); + }); + } + } + } + } + }; + var History = class extends BaseCallback { + async onTrainBegin(logs) { + this.epoch = []; + this.history = {}; + } + async onEpochEnd(epoch, logs) { + if (logs == null) { + logs = {}; + } + this.epoch.push(epoch); + for (const key in logs) { + if (this.history[key] == null) { + this.history[key] = []; + } + this.history[key].push(logs[key]); + } + } + async syncData() { + const promises = []; + const keys = []; + const indices = []; + for (const key in this.history) { + const valueArray = this.history[key]; + for (let i = 0; i < valueArray.length; ++i) { + if (typeof valueArray[i] !== "number") { + const valueScalar = valueArray[i]; + promises.push(valueScalar.data()); + keys.push(key); + indices.push(i); + } + } + } + const values = await Promise.all(promises); + for (let n = 0; n < values.length; ++n) { + const tensorToDispose = this.history[keys[n]][indices[n]]; + tensorToDispose.dispose(); + this.history[keys[n]][indices[n]] = values[n][0]; + } + } + }; + var CustomCallback = class extends BaseCallback { + constructor(args, yieldEvery) { + super(); + this.currentEpoch = 0; + this.nowFunc = args.nowFunc; + this.nextFrameFunc = args.nextFrameFunc || nextFrame; + this.yieldEvery = yieldEvery || "auto"; + if (this.yieldEvery === "auto") { + this.yieldEvery = DEFAULT_YIELD_EVERY_MS; + } + if (this.yieldEvery === "never" && args.onYield != null) { + throw new Error("yieldEvery is `never` but you provided an `onYield` callback. Either change `yieldEvery` or remove the callback"); + } + if (util_exports.isNumber(this.yieldEvery)) { + this.maybeWait = debounce(this.maybeWait.bind(this), this.yieldEvery, this.nowFunc); + } + this.trainBegin = args.onTrainBegin; + this.trainEnd = args.onTrainEnd; + this.epochBegin = args.onEpochBegin; + this.epochEnd = args.onEpochEnd; + this.batchBegin = args.onBatchBegin; + this.batchEnd = args.onBatchEnd; + this.yield = args.onYield; + } + async maybeWait(epoch, batch, logs) { + const ps = []; + if (this.yield != null) { + await resolveScalarsInLogs(logs); + ps.push(this.yield(epoch, batch, logs)); + } + ps.push(this.nextFrameFunc()); + await Promise.all(ps); + } + async onEpochBegin(epoch, logs) { + this.currentEpoch = epoch; + if (this.epochBegin != null) { + await resolveScalarsInLogs(logs); + await this.epochBegin(epoch, logs); + } + } + async onEpochEnd(epoch, logs) { + const ps = []; + if (this.epochEnd != null) { + await resolveScalarsInLogs(logs); + ps.push(this.epochEnd(epoch, logs)); + } + if (this.yieldEvery === "epoch") { + ps.push(this.nextFrameFunc()); + } + await Promise.all(ps); + } + async onBatchBegin(batch, logs) { + if (this.batchBegin != null) { + await resolveScalarsInLogs(logs); + await this.batchBegin(batch, logs); + } + } + async onBatchEnd(batch, logs) { + const ps = []; + if (this.batchEnd != null) { + await resolveScalarsInLogs(logs); + ps.push(this.batchEnd(batch, logs)); + } + if (this.yieldEvery === "batch") { + ps.push(this.nextFrameFunc()); + } else if (util_exports.isNumber(this.yieldEvery)) { + ps.push(this.maybeWait(this.currentEpoch, batch, logs)); + } + await Promise.all(ps); + } + async onTrainBegin(logs) { + if (this.trainBegin != null) { + await resolveScalarsInLogs(logs); + await this.trainBegin(logs); + } + } + async onTrainEnd(logs) { + if (this.trainEnd != null) { + await resolveScalarsInLogs(logs); + await this.trainEnd(logs); + } + } + }; + function standardizeCallbacks(callbacks2, yieldEvery) { + if (callbacks2 == null) { + callbacks2 = {}; + } + if (callbacks2 instanceof BaseCallback) { + return [callbacks2]; + } + if (Array.isArray(callbacks2) && callbacks2[0] instanceof BaseCallback) { + return callbacks2; + } + const callbackConfigs = toList(callbacks2); + return callbackConfigs.map((callbackConfig) => new CustomCallback(callbackConfig, yieldEvery)); + } + var CallbackConstructorRegistry = class { + constructor() { + } + static registerCallbackConstructor(verbosityLevel, callbackConstructor) { + util_exports.assert(verbosityLevel >= 0 && Number.isInteger(verbosityLevel), () => `Verbosity level is expected to be an integer >= 0, but got ${verbosityLevel}`); + CallbackConstructorRegistry.checkForDuplicate(callbackConstructor); + if (CallbackConstructorRegistry.constructors[verbosityLevel] == null) { + CallbackConstructorRegistry.constructors[verbosityLevel] = []; + } + CallbackConstructorRegistry.constructors[verbosityLevel].push(callbackConstructor); + } + static checkForDuplicate(callbackConstructor) { + for (const levelName in CallbackConstructorRegistry.constructors) { + const constructors = CallbackConstructorRegistry.constructors[+levelName]; + constructors.forEach((ctor) => { + if (ctor === callbackConstructor) { + throw new ValueError("Duplicate callback constructor."); + } + }); + } + } + static clear() { + CallbackConstructorRegistry.constructors = {}; + } + static createCallbacks(verbosityLevel) { + const constructors = []; + for (const levelName in CallbackConstructorRegistry.constructors) { + const level = +levelName; + if (verbosityLevel >= level) { + constructors.push(...CallbackConstructorRegistry.constructors[level]); + } + } + return constructors.map((ctor) => new ctor()); + } + }; + CallbackConstructorRegistry.constructors = {}; + function configureCallbacks(callbacks2, verbose, epochs, initialEpoch, numTrainSamples, stepsPerEpoch, batchSize, doValidation, callbackMetrics) { + const history = new History(); + const actualCallbacks = [ + new BaseLogger(), + ...CallbackConstructorRegistry.createCallbacks(verbose) + ]; + if (callbacks2 != null) { + actualCallbacks.push(...callbacks2); + } + actualCallbacks.push(history); + const callbackList = new CallbackList(actualCallbacks); + callbackList.setParams({ + epochs, + initialEpoch, + samples: numTrainSamples, + steps: stepsPerEpoch, + batchSize, + verbose, + doValidation, + metrics: callbackMetrics + }); + return { callbackList, history }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/serialization.js + init_define_BUILD_VERSION(); + function deserialize(config, customObjects = {}, fastWeightInit = false) { + return deserializeKerasObject(config, serialization_exports.SerializationMap.getMap().classNameMap, customObjects, "layer", fastWeightInit); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/losses.js + init_define_BUILD_VERSION(); + function l2Normalize(x, axis) { + return tidy(() => { + if (x.dtype !== "float32") { + x = cast(x, "float32"); + } + const squareSum = sum2(square2(x), axis, true); + const epsilonTensor = fill(squareSum.shape, epsilon()); + const norm2 = sqrt(maximum(squareSum, epsilonTensor)); + return div(x, norm2); + }); + } + function meanSquaredError(yTrue, yPred) { + return tidy(() => mean(square2(sub(yPred, yTrue)), -1)); + } + function meanAbsoluteError(yTrue, yPred) { + return tidy(() => mean(abs(sub(yPred, yTrue)), -1)); + } + function meanAbsolutePercentageError(yTrue, yPred) { + return tidy(() => { + const diff = sub(yTrue, yPred); + const clippedTrue = clipByValue(abs(yTrue), epsilon(), Number.MAX_VALUE); + const absResult = abs(div(diff, clippedTrue)); + return mul(100, mean(absResult, -1)); + }); + } + function meanSquaredLogarithmicError(yTrue, yPred) { + return tidy(() => { + const clippedPred = clipByValue(yPred, epsilon(), Number.MAX_VALUE); + const firstLog = log2(add2(1, clippedPred)); + const clippedTrue = clipByValue(yTrue, epsilon(), Number.MAX_VALUE); + const secondLog = log2(add2(1, clippedTrue)); + return mean(square2(sub(firstLog, secondLog)), -1); + }); + } + function squaredHinge(yTrue, yPred) { + return tidy(() => { + const maxResult = maximum(0, sub(1, mul(yTrue, yPred))); + return mean(square2(maxResult), -1); + }); + } + function hinge(yTrue, yPred) { + return tidy(() => { + const maxResult = maximum(0, sub(1, mul(yTrue, yPred))); + return mean(maxResult, -1); + }); + } + function categoricalHinge(yTrue, yPred) { + return tidy(() => { + const pos = sum2(mul(yTrue, yPred), -1); + const neg4 = max(mul(sub(1, yTrue), yPred), -1); + return maximum(0, add2(1, sub(neg4, pos))); + }); + } + function logcosh(yTrue, yPred) { + return tidy(() => { + const log22 = Math.log(2); + const predictionDiff = sub(yPred, yTrue); + const logcoshResult = sub(add2(predictionDiff, softplus(mul(-2, predictionDiff))), log22); + return mean(logcoshResult, -1); + }); + } + function categoricalCrossentropy(target, output, fromLogits = false) { + return tidy(() => { + if (fromLogits) { + output = softmax(output); + } else { + const outputSum = sum2(output, output.shape.length - 1, true); + output = div(output, outputSum); + } + output = clipByValue(output, epsilon(), 1 - epsilon()); + return neg(sum2(mul(cast(target, "float32"), log2(output)), output.shape.length - 1)); + }); + } + function sparseCategoricalCrossentropy(target, output, fromLogits = false) { + return tidy(() => { + const flatTarget = cast(floor(flatten2(target)), "int32"); + output = clipByValue(output, epsilon(), 1 - epsilon()); + const outputShape = output.shape; + const oneHotTarget = reshape(oneHot(flatTarget, outputShape[outputShape.length - 1]), outputShape); + return categoricalCrossentropy(oneHotTarget, output, fromLogits); + }); + } + function sigmoidCrossEntropyWithLogits(labels, logits) { + if (!util_exports.arraysEqual(labels.shape, logits.shape)) { + throw new ValueError(`logits and labels must have the same shape, but got shapes ${JSON.stringify(labels.shape)} and ${JSON.stringify(logits.shape)}`); + } + return tidy(() => { + const reluLogits = relu(logits); + const negAbsLogits = neg(abs(logits)); + return add2(sub(reluLogits, mul(logits, labels)), log1p(exp(negAbsLogits))); + }); + } + function binaryCrossentropy(yTrue, yPred) { + return tidy(() => { + let y; + y = clipByValue(yPred, epsilon(), 1 - epsilon()); + y = log2(div(y, sub(1, y))); + return mean(sigmoidCrossEntropyWithLogits(yTrue, y), -1); + }); + } + function kullbackLeiblerDivergence(yTrue, yPred) { + return tidy(() => { + const clippedTrue = clipByValue(yTrue, epsilon(), 1); + const clippedPred = clipByValue(yPred, epsilon(), 1); + return sum2(mul(yTrue, log2(div(clippedTrue, clippedPred))), -1); + }); + } + function poisson(yTrue, yPred) { + return tidy(() => { + const logPred = log2(add2(epsilon(), yPred)); + return mean(sub(yPred, mul(yTrue, logPred)), -1); + }); + } + function cosineProximity(yTrue, yPred) { + return tidy(() => { + const trueNormalized = l2Normalize(yTrue, -1); + const predNormalized = l2Normalize(yPred, -1); + const trueXPred = mul(trueNormalized, predNormalized); + return neg(sum2(trueXPred, -1)); + }); + } + var lossesMap = { + meanSquaredError, + meanAbsoluteError, + meanAbsolutePercentageError, + meanSquaredLogarithmicError, + squaredHinge, + hinge, + categoricalHinge, + logcosh, + categoricalCrossentropy, + sparseCategoricalCrossentropy, + binaryCrossentropy, + kullbackLeiblerDivergence, + poisson, + cosineProximity + }; + function get(identifierOrFn) { + if (typeof identifierOrFn === "string") { + if (identifierOrFn in lossesMap) { + return lossesMap[identifierOrFn]; + } + let errMsg = `Unknown loss ${identifierOrFn}`; + if (identifierOrFn.toLowerCase().includes("softmaxcrossentropy")) { + errMsg = `Unknown loss ${identifierOrFn}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`; + } + throw new ValueError(errMsg); + } else { + return identifierOrFn; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/metrics.js + init_define_BUILD_VERSION(); + function binaryAccuracy(yTrue, yPred) { + return tidy(() => { + const threshold3 = mul(0.5, onesLike(yPred)); + const yPredThresholded = cast2(greater(yPred, threshold3), yTrue.dtype); + return mean(equal(yTrue, yPredThresholded), -1); + }); + } + function categoricalAccuracy(yTrue, yPred) { + return tidy(() => cast2(equal(argMax(yTrue, -1), argMax(yPred, -1)), "float32")); + } + function truePositives(yTrue, yPred) { + return tidy(() => { + return cast(sum2(logicalAnd(equal(yTrue, 1), equal(yPred, 1))), "float32"); + }); + } + function falsePositives(yTrue, yPred) { + return tidy(() => { + return cast(sum2(logicalAnd(equal(yTrue, 0), equal(yPred, 1))), "float32"); + }); + } + function precision(yTrue, yPred) { + return tidy(() => { + const tp = truePositives(yTrue, yPred); + const fp = falsePositives(yTrue, yPred); + const denominator = add2(tp, fp); + return cast(where(greater(denominator, 0), div(tp, denominator), 0), "float32"); + }); + } + function binaryCrossentropy2(yTrue, yPred) { + return binaryCrossentropy(yTrue, yPred); + } + function sparseCategoricalAccuracy(yTrue, yPred) { + if (yTrue.rank === yPred.rank) { + yTrue = squeeze(yTrue, [yTrue.rank - 1]); + } + yPred = argMax(yPred, -1); + if (yPred.dtype !== yTrue.dtype) { + yPred = cast(yPred, yTrue.dtype); + } + return cast(equal(yTrue, yPred), "float32"); + } + var mse = meanSquaredError; + var MSE = meanSquaredError; + var mae = meanAbsoluteError; + var MAE = meanAbsoluteError; + var mape = meanAbsolutePercentageError; + var MAPE = meanAbsolutePercentageError; + var categoricalCrossentropy2 = categoricalCrossentropy; + var cosine = cosineProximity; + var sparseCategoricalCrossentropy2 = sparseCategoricalCrossentropy; + var metricsMap = { + binaryAccuracy, + categoricalAccuracy, + precision, + categoricalCrossentropy: categoricalCrossentropy2, + sparseCategoricalCrossentropy: sparseCategoricalCrossentropy2, + mse, + MSE, + mae, + MAE, + mape, + MAPE, + cosine + }; + function get2(identifier) { + if (typeof identifier === "string" && identifier in metricsMap) { + return metricsMap[identifier]; + } else if (typeof identifier !== "string" && identifier != null) { + return identifier; + } else { + throw new ValueError(`Unknown metric ${identifier}`); + } + } + function getLossOrMetricName(fn) { + assert2(fn !== null, `Unknown LossOrMetricFn ${fn}`); + if (typeof fn === "string") { + return fn; + } else { + let fnName; + for (const key of Object.keys(lossesMap)) { + if (lossesMap[key] === fn) { + fnName = key; + break; + } + } + if (fnName !== void 0) { + return fnName; + } + for (const key of Object.keys(metricsMap)) { + if (metricsMap[key] === fn) { + fnName = key; + break; + } + } + if (fnName !== void 0) { + return fnName; + } + return fn.name; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/optimizers.js + init_define_BUILD_VERSION(); + function getOptimizer(identifier) { + const optimizerMap = { + "Adagrad": () => train.adagrad(0.01), + "Adadelta": () => train.adadelta(1, 0.95, epsilon()), + "Adam": () => train.adam(1e-3, 0.9, 0.999, epsilon()), + "Adamax": () => train.adamax(2e-3, 0.9, 0.999, epsilon(), 0), + "RMSProp": () => train.rmsprop(1e-3, 0.9, 0, epsilon()), + "SGD": () => train.sgd(0.01) + }; + optimizerMap["adagrad"] = optimizerMap["Adagrad"]; + optimizerMap["adadelta"] = optimizerMap["Adadelta"]; + optimizerMap["adam"] = optimizerMap["Adam"]; + optimizerMap["adamax"] = optimizerMap["Adamax"]; + optimizerMap["rmsprop"] = optimizerMap["RMSProp"]; + optimizerMap["sgd"] = optimizerMap["SGD"]; + if (identifier in optimizerMap) { + return optimizerMap[identifier](); + } + throw new ValueError(`Unknown Optimizer ${identifier}`); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/user_defined_metadata.js + init_define_BUILD_VERSION(); + var MAX_USER_DEFINED_METADATA_SERIALIZED_LENGTH = 1 * 1024 * 1024; + function checkUserDefinedMetadata(userDefinedMetadata, modelName, checkSize = false) { + if (userDefinedMetadata == null || typeof userDefinedMetadata !== "object" || Object.getPrototypeOf(userDefinedMetadata) !== Object.prototype || !plainObjectCheck(userDefinedMetadata)) { + throw new Error("User-defined metadata is expected to be a JSON object, but is not."); + } + if (checkSize) { + const out = JSON.stringify(userDefinedMetadata); + if (out.length > MAX_USER_DEFINED_METADATA_SERIALIZED_LENGTH) { + console.warn(`User-defined metadata of model "${modelName}" is too large in size (length=${out.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= ${MAX_USER_DEFINED_METADATA_SERIALIZED_LENGTH}.`); + } + } + } + function plainObjectCheck(x) { + if (x === null) { + return true; + } else if (typeof x === "object") { + if (Object.getPrototypeOf(x) === Object.prototype) { + const keys = Object.keys(x); + for (const key of keys) { + if (typeof key !== "string") { + return false; + } + if (!plainObjectCheck(x[key])) { + return false; + } + } + return true; + } else { + if (Array.isArray(x)) { + for (const item of x) { + if (!plainObjectCheck(item)) { + return false; + } + } + return true; + } else { + return false; + } + } + } else { + const xType = typeof x; + return xType === "string" || xType === "number" || xType === "boolean"; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/layer_utils.js + init_define_BUILD_VERSION(); + function printSummary(model3, lineLength, positions, printFn = console.log) { + const sequentialLike = isModelSequentialLike(model3); + const toDisplay = ["Layer (type)", "Input Shape", "Output shape", "Param #"]; + if (sequentialLike) { + lineLength = lineLength || 90; + positions = positions || [0.32, 0.61, 0.89, 1]; + } else { + lineLength = lineLength || 115; + positions = positions || [0.24, 0.48, 0.7, 0.8, 1]; + } + if (positions[positions.length - 1] <= 1) { + positions = positions.map((p2) => Math.floor(lineLength * p2)); + } + let relevantNodes; + if (!sequentialLike) { + toDisplay.push("Receives inputs"); + relevantNodes = []; + for (const depth in model3.nodesByDepth) { + relevantNodes.push(...model3.nodesByDepth[depth]); + } + } + printFn("_".repeat(lineLength)); + printRow(toDisplay, positions, printFn); + printFn("=".repeat(lineLength)); + const layers = model3.layers; + for (let i = 0; i < layers.length; ++i) { + if (sequentialLike) { + printLayerSummary(layers[i], positions, printFn); + } else { + printLayerSummaryWithConnections(layers[i], positions, relevantNodes, printFn); + } + printFn((i === layers.length - 1 ? "=" : "_").repeat(lineLength)); + } + model3.checkTrainableWeightsConsistency(); + const trainableCount = countTrainableParams(model3); + const nonTrainableCount = countParamsInWeights(model3.nonTrainableWeights); + printFn(`Total params: ${trainableCount + nonTrainableCount}`); + printFn(`Trainable params: ${trainableCount}`); + printFn(`Non-trainable params: ${nonTrainableCount}`); + printFn("_".repeat(lineLength)); + } + function countTrainableParams(model3) { + let trainableCount; + if (model3.collectedTrainableWeights != null) { + trainableCount = countParamsInWeights(model3.collectedTrainableWeights); + } else { + trainableCount = countParamsInWeights(model3.trainableWeights); + } + return trainableCount; + } + function isModelSequentialLike(model3) { + let sequentialLike = true; + const nodesByDepth = []; + const nodes = []; + for (const depth in model3.nodesByDepth) { + nodesByDepth.push(model3.nodesByDepth[depth]); + } + for (const depthNodes of nodesByDepth) { + if (depthNodes.length > 1 || depthNodes.length === 1 && depthNodes[0].inboundLayers.length > 1) { + sequentialLike = false; + break; + } + nodes.push(...depthNodes); + } + if (sequentialLike) { + for (const layer of model3.layers) { + let flag = false; + for (const node of layer.inboundNodes) { + if (nodes.indexOf(node) !== -1) { + if (flag) { + sequentialLike = false; + break; + } else { + flag = true; + } + } + } + if (!sequentialLike) { + break; + } + } + } + return sequentialLike; + } + function printRow(fields, positions, printFn = console.log) { + let line = ""; + for (let i = 0; i < fields.length; ++i) { + if (i > 0) { + line = line.slice(0, line.length - 1) + " "; + } + line += fields[i]; + line = line.slice(0, positions[i]); + line += " ".repeat(positions[i] - line.length); + } + printFn(line); + } + function printLayerSummary(layer, positions, printFn) { + let outputShape; + let inputShape; + try { + inputShape = layer.inboundNodes.map((x) => JSON.stringify(x.inputShapes)).join(","); + } catch (err) { + inputShape = "multiple"; + } + try { + outputShape = JSON.stringify(layer.outputShape); + } catch (err) { + outputShape = "multiple"; + } + const name = layer.name; + const className = layer.getClassName(); + const fields = [ + `${name} (${className})`, + inputShape, + outputShape, + layer.countParams().toString() + ]; + printRow(fields, positions, printFn); + } + function printLayerSummaryWithConnections(layer, positions, relevantNodes, printFn) { + let outputShape; + let inputShape; + try { + inputShape = layer.inboundNodes.map((x) => JSON.stringify(x.inputShapes)).join(","); + } catch (err) { + inputShape = "multiple"; + } + try { + outputShape = JSON.stringify(layer.outputShape); + } catch (err) { + outputShape = "multiple"; + } + const connections = []; + for (const node of layer.inboundNodes) { + if (relevantNodes != null && relevantNodes.length > 0 && relevantNodes.indexOf(node) === -1) { + continue; + } + for (let i = 0; i < node.inboundLayers.length; ++i) { + const inboundLayer = node.inboundLayers[i].name; + const inboundLayerIndex = node.nodeIndices[i]; + const inboundTensorIndex = node.tensorIndices[i]; + connections.push(`${inboundLayer}[${inboundLayerIndex}][${inboundTensorIndex}]`); + } + } + const name = layer.name; + const className = layer.getClassName(); + const firstConnection = connections.length === 0 ? "" : connections[0]; + const fields = [ + `${name} (${className})`, + inputShape, + outputShape, + layer.countParams().toString(), + firstConnection + ]; + printRow(fields, positions, printFn); + for (let i = 1; i < connections.length; ++i) { + printRow(["", "", "", "", connections[i]], positions, printFn); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/serialization_utils.js + init_define_BUILD_VERSION(); + function isArrayItemInputOrOutputName(key, index, value) { + return (key === "inboundNodes" || key === "outputLayers" || key === "inputLayers") && index === 0 && typeof value === "string"; + } + function convertPythonicToTs(pythonicConfig, key) { + if (pythonicConfig === null) { + return null; + } else if (typeof pythonicConfig === "string") { + return toCamelCase(pythonicConfig); + } else if (typeof pythonicConfig === "number" || typeof pythonicConfig === "boolean") { + return pythonicConfig; + } else if (pythonicConfig instanceof Array) { + const tsArray = []; + const arrayLength = pythonicConfig.length; + for (let i = 0; i < arrayLength; ++i) { + const item = pythonicConfig[i]; + if (isArrayItemInputOrOutputName(key, i, item)) { + tsArray.push(item); + } else { + tsArray.push(convertPythonicToTs(item, key)); + } + } + return tsArray; + } else { + const tsDict = {}; + for (const pythonicKey of Object.keys(pythonicConfig)) { + const pythonicValue = pythonicConfig[pythonicKey]; + if (pythonicKey === "name" && typeof pythonicValue === "string") { + tsDict[pythonicKey] = pythonicValue; + } else { + const tsKey = toCamelCase(pythonicKey); + tsDict[tsKey] = convertPythonicToTs(pythonicValue, tsKey); + } + } + return tsDict; + } + } + function convertTsToPythonic(tsConfig, key) { + if (tsConfig === null || tsConfig === void 0) { + return null; + } else if (typeof tsConfig === "string") { + return toSnakeCase(tsConfig); + } else if (typeof tsConfig === "number" || typeof tsConfig === "boolean") { + return tsConfig; + } else if (tsConfig instanceof Array) { + const pyArray = []; + const arrayLength = tsConfig.length; + for (let i = 0; i < arrayLength; ++i) { + const item = tsConfig[i]; + if (isArrayItemInputOrOutputName(key, i, item)) { + pyArray.push(item); + } else { + pyArray.push(convertTsToPythonic(item, key)); + } + } + return pyArray; + } else { + const pyDict = {}; + for (const tsKey of Object.keys(tsConfig)) { + const tsValue = tsConfig[tsKey]; + const pyKey = toSnakeCase(tsKey); + if ((tsKey === "name" || tsKey === "className") && typeof tsValue === "string") { + pyDict[pyKey] = tsValue; + } else { + pyDict[pyKey] = convertTsToPythonic(tsValue, tsKey); + } + } + return pyDict; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/version.js + init_define_BUILD_VERSION(); + var version = "3.19.0"; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/container.js + init_define_BUILD_VERSION(); + var Container = class extends Layer { + constructor(args) { + super({}); + this.containerNodes = /* @__PURE__ */ new Set(); + this.name = args.name; + if (this.name == null) { + const prefix = this.getClassName().toLowerCase(); + this.name = getUid(prefix); + } + this.supportsMasking = false; + this.trainable_ = true; + if (Array.isArray(args.inputs)) { + this.inputs = args.inputs.slice(); + } else { + this.inputs = [args.inputs]; + } + if (Array.isArray(args.outputs)) { + this.outputs = args.outputs.slice(); + } else { + this.outputs = [args.outputs]; + } + if (unique2(this.inputs).length !== this.inputs.length) { + throw new ValueError(`The list of inputs passed to the model is redundant. All inputs should only appear once. Found: ${this.inputs.map((x) => x.name)}`); + } + if (unique2(this.outputs).length !== this.outputs.length) { + console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map((x) => x.name)}`); + } + this.inputLayers = []; + this.inputLayersNodeIndices = []; + this.inputLayersTensorIndices = []; + this.outputLayers = []; + this.outputLayersNodeIndices = []; + this.outputLayersTensorIndices = []; + this.layers = []; + this.internalContainerRefs = []; + for (const x of this.outputs) { + const layer = x.sourceLayer; + const nodeIndex = x.nodeIndex; + const tensorIndex = x.tensorIndex; + this.outputLayers.push(layer); + this.outputLayersNodeIndices.push(nodeIndex); + this.outputLayersTensorIndices.push(tensorIndex); + } + for (const x of this.inputs) { + const layer = x.sourceLayer; + const nodeIndex = x.nodeIndex; + const tensorIndex = x.tensorIndex; + assert2(nodeIndex === 0, "input layer has >1 nodes"); + assert2(tensorIndex === 0, "input layer has >1 tensors"); + this.inputLayers.push(layer); + this.inputLayersNodeIndices.push(nodeIndex); + this.inputLayersTensorIndices.push(tensorIndex); + } + this.inputNames = []; + this.outputNames = []; + this.feedInputShapes = []; + this.feedInputNames = []; + this.feedOutputNames = []; + for (let i = 0; i < this.inputLayers.length; i++) { + const layer = this.inputLayers[i]; + if (!(layer instanceof InputLayer)) { + throw new TypeError(`Input layers to a LayersModel must be InputLayer objects. Received inputs: ${args.inputs}. Input ${i} (0-based) originates from layer type ${layer.getClassName()}.`); + } + this.inputNames.push(layer.name); + this.feedInputShapes.push(layer.batchInputShape); + this.feedInputNames.push(layer.name); + } + for (const layer of this.outputLayers) { + this.outputNames.push(layer.name); + } + this.internalInputShapes = this.inputs.map((x) => x.shape); + this.internalOutputShapes = this.outputs.map((x) => x.shape); + const nodesDepths = {}; + const nodeIDToNode = {}; + const layersDepths = {}; + const layerIDToLayer = {}; + const layerIndices = {}; + const nodesInDecreasingDepth = []; + const buildMapOfGraph = (tensor2, finishedNodes2, nodesInProgress2, layer, nodeIndex, tensorIndex) => { + if (layer == null || nodeIndex == null || tensorIndex == null) { + layer = tensor2.sourceLayer; + nodeIndex = tensor2.nodeIndex; + tensorIndex = tensor2.tensorIndex; + } + const node = layer.inboundNodes[nodeIndex]; + if (nodesInProgress2.indexOf(node) !== -1) { + throw new RuntimeError(`The tensor ${tensor2.name} at layer "${layer.name}" is part of a cycle.`); + } + if (finishedNodes2.indexOf(node) !== -1) { + return; + } + this.containerNodes.add(Container.nodeKey(layer, nodeIndex)); + if (!(layer.id in layerIndices)) { + layerIndices[layer.id] = Object.keys(layerIndices).length; + } + if (nodesInProgress2.indexOf(node) === -1) { + nodesInProgress2.push(node); + } + const numInboundLayers = node.inboundLayers.length; + for (let i = 0; i < numInboundLayers; i++) { + const x = node.inputTensors[i]; + const layer2 = node.inboundLayers[i]; + const nodeIndex2 = node.nodeIndices[i]; + const tensorIndex2 = node.tensorIndices[i]; + buildMapOfGraph(x, finishedNodes2, nodesInProgress2, layer2, nodeIndex2, tensorIndex2); + } + finishedNodes2.push(node); + while (nodesInProgress2.indexOf(node) >= 0) { + nodesInProgress2.splice(nodesInProgress2.indexOf(node), 1); + } + nodesInDecreasingDepth.push(node); + }; + const finishedNodes = []; + const nodesInProgress = []; + for (const x of this.outputs) { + buildMapOfGraph(x, finishedNodes, nodesInProgress); + } + const reversedNodesInDecreasingDepth = nodesInDecreasingDepth.slice().reverse(); + for (const node of reversedNodesInDecreasingDepth) { + nodeIDToNode[node.id] = node; + if (!(node.id in nodesDepths)) { + nodesDepths[node.id] = 0; + } + let depth = nodesDepths[node.id]; + const previousDepth = layersDepths[node.outboundLayer.id] == null ? 0 : layersDepths[node.outboundLayer.id]; + depth = Math.max(depth, previousDepth); + layersDepths[node.outboundLayer.id] = depth; + layerIDToLayer[node.outboundLayer.id] = node.outboundLayer; + nodesDepths[node.id] = depth; + for (let i = 0; i < node.inboundLayers.length; i++) { + const inboundLayer = node.inboundLayers[i]; + const nodeIndex = node.nodeIndices[i]; + const inboundNode = inboundLayer.inboundNodes[nodeIndex]; + const previousDepth2 = nodesDepths[inboundNode.id] == null ? 0 : nodesDepths[inboundNode.id]; + nodesDepths[inboundNode.id] = Math.max(depth + 1, previousDepth2); + nodeIDToNode[inboundNode.id] = inboundNode; + } + } + const nodesByDepth = {}; + for (const nodeID in nodesDepths) { + const depth = nodesDepths[nodeID]; + if (!(depth in nodesByDepth)) { + nodesByDepth[depth] = []; + } + nodesByDepth[depth].push(nodeIDToNode[nodeID]); + } + const layersByDepth = {}; + for (const layerID in layersDepths) { + const depth = layersDepths[layerID]; + if (!(depth in layersByDepth)) { + layersByDepth[depth] = []; + } + layersByDepth[depth].push(layerIDToLayer[layerID]); + } + let depthKeys = Object.keys(layersByDepth).map((x) => parseInt(x, 10)).sort(reverseNumberCompare); + this.layers = []; + for (const depth of depthKeys) { + const layersForDepth = layersByDepth[depth]; + layersForDepth.sort((a, b) => { + const aIndex = layerIndices[a.id]; + const bIndex = layerIndices[b.id]; + if (aIndex < bIndex) { + return -1; + } + if (aIndex > bIndex) { + return 1; + } + return 0; + }); + for (const layer of layersForDepth) { + if (layer instanceof Container) { + this.internalContainerRefs.push(layer); + } + this.layers.push(layer); + } + } + this.layersByDepth = layersByDepth; + depthKeys = Object.keys(nodesByDepth).map((x) => parseInt(x, 10)).sort(reverseNumberCompare); + const computableTensors = this.inputs.slice(); + const layersWithCompleteInput = []; + for (const depth of depthKeys) { + for (const node of nodesByDepth[depth]) { + const layer = node.outboundLayer; + if (layer != null) { + for (const x of node.inputTensors) { + if (computableTensors.indexOf(x) === -1) { + throw new RuntimeError(`Graph disconnected: cannot obtain value for tensor ${x} at layer "${layer.name}". The following previous layers were accessed without issue: ${layersWithCompleteInput}`); + } + } + for (const x of node.outputTensors) { + computableTensors.push(x); + } + layersWithCompleteInput.push(layer.name); + } + } + } + this.nodesByDepth = nodesByDepth; + const allNames = this.layers.map((x) => x.name); + for (const name of allNames) { + const numOccurrences = allNames.filter((x) => x === name).length; + if (numOccurrences !== 1) { + throw new RuntimeError(`The name "${name}" is used ${numOccurrences} times in the model. All layer names should be unique. Layer names: ` + JSON.stringify(allNames)); + } + } + this.outboundNodes = []; + this.inboundNodes = []; + new Node({ + outboundLayer: this, + inboundLayers: [], + nodeIndices: [], + tensorIndices: [], + inputTensors: this.inputs, + outputTensors: this.outputs, + inputMasks: this.inputs.map((x) => null), + outputMasks: this.outputs.map((x) => null), + inputShapes: this.inputs.map((x) => x.shape), + outputShapes: this.outputs.map((x) => x.shape) + }); + this.built = true; + this._refCount = 1; + } + assertNotDisposed() { + if (this._refCount === 0) { + throw new Error(`Container '${this.name}' is already disposed.`); + } + } + dispose() { + this.assertNotDisposed(); + const result = { refCountAfterDispose: null, numDisposedVariables: 0 }; + if (--this._refCount === 0) { + for (const layer of this.layers) { + result.numDisposedVariables += layer.dispose().numDisposedVariables; + } + for (const container of this.internalContainerRefs) { + result.numDisposedVariables += container.dispose().numDisposedVariables; + } + } + result.refCountAfterDispose = this._refCount; + return result; + } + get trainable() { + return this.trainable_; + } + set trainable(trainable) { + this.layers.forEach((layer) => { + layer._trainableWeights.forEach((w) => w.trainable = trainable); + }); + this.trainable_ = trainable; + } + get trainableWeights() { + if (this._trainableWeights.length > 0) { + throw new ValueError("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array."); + } + if (!this.trainable) { + return []; + } + let weights = []; + for (const layer of this.layers) { + weights = weights.concat(layer.trainableWeights); + } + return weights; + } + get nonTrainableWeights() { + const weights = []; + for (const layer of this.layers) { + weights.push(...layer.nonTrainableWeights); + } + if (!this.trainable) { + const trainableWeights = []; + for (const layer of this.layers) { + trainableWeights.push(...layer.trainableWeights); + } + return trainableWeights.concat(weights); + } + return weights; + } + get weights() { + return this.trainableWeights.concat(this.nonTrainableWeights); + } + loadWeights(weights, strict = true) { + const nameToWeight = {}; + let totalWeightsCount = 0; + for (const layer of this.layers) { + for (const weight of layer.weights) { + if (nameToWeight[weight.originalName] != null) { + throw new ValueError(`Duplicate weight name: ${weight.originalName}`); + } + nameToWeight[weight.originalName] = weight; + totalWeightsCount++; + } + } + const weightValueTuples = []; + for (const name in weights) { + let validatedName = name; + if (nameToWeight[name] == null) { + const tokens = name.split("/"); + const shortenNameArray = tokens.slice(0, -2).concat([tokens[tokens.length - 1]]); + validatedName = shortenNameArray.join("/"); + } + if (nameToWeight[validatedName] != null) { + weightValueTuples.push([nameToWeight[validatedName], weights[name]]); + } else if (strict) { + throw new ValueError(`Provided weight data has no target variable: ${name}`); + } + delete nameToWeight[validatedName]; + } + if (strict) { + const unsetNames = []; + for (const name in nameToWeight) { + unsetNames.push(name); + } + if (unsetNames.length > 0) { + throw new ValueError(`${unsetNames.length} of ${totalWeightsCount} weights are not set: ${unsetNames}`); + } + } + batchSetValue(weightValueTuples); + } + updatedConfig() { + const theConfig = this.getConfig(); + const modelConfig = {}; + modelConfig["className"] = this.getClassName(); + modelConfig["config"] = theConfig; + modelConfig["kerasVersion"] = `tfjs-layers ${version}`; + modelConfig["backend"] = "TensorFlow.js"; + return modelConfig; + } + toJSON(unused, returnString = true) { + const modelConfig = convertTsToPythonic(this.updatedConfig()); + return returnString ? JSON.stringify(modelConfig) : modelConfig; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = toList(inputs); + const feedDict = new FeedDict(); + for (let i = 0; i < this.inputs.length; ++i) { + feedDict.add(this.inputs[i], inputs[i]); + } + return execute(this.outputs, feedDict, kwargs); + }); + } + computeMask(inputs, mask) { + return tidy(() => { + inputs = toList(inputs); + let masks; + if (mask == null) { + masks = pyListRepeat(null, inputs.length); + } else { + masks = toList(mask); + } + return this.runInternalGraph(inputs, masks)[1]; + }); + } + computeOutputShape(inputShape) { + const inputShapes = normalizeShapeList(inputShape); + if (inputShapes.length !== this.inputLayers.length) { + throw new ValueError(`Invalid inputShape argument ${inputShape}: model has ${this.inputLayers.length} tensor inputs.`); + } + const layersToOutputShapes = {}; + for (let i = 0; i < inputShapes.length; i++) { + const layer = this.inputLayers[i]; + const inputShape2 = inputShapes[i]; + const shapeKey = layer.name + "_0_0"; + layersToOutputShapes[shapeKey] = inputShape2; + } + const depthKeys = Object.keys(this.nodesByDepth).map((x) => parseInt(x, 10)).sort(reverseNumberCompare); + if (depthKeys.length > 1) { + for (const depth of depthKeys) { + const nodes = this.nodesByDepth[depth]; + for (const node of nodes) { + const layer = node.outboundLayer; + if (this.inputLayers.map((x) => x.id).indexOf(layer.id) !== -1) { + continue; + } + const inputShapes2 = []; + for (let j = 0; j < node.inboundLayers.length; j++) { + const inboundLayer = node.inboundLayers[j]; + const nodeIndex2 = node.nodeIndices[j]; + const tensorIndex = node.tensorIndices[j]; + const shapeKey = `${inboundLayer.name}_${nodeIndex2}_${tensorIndex}`; + const inputShape2 = layersToOutputShapes[shapeKey]; + inputShapes2.push(inputShape2); + } + const outputShape = layer.computeOutputShape(singletonOrArray(inputShapes2)); + const outputShapes2 = normalizeShapeList(outputShape); + const nodeIndex = layer.inboundNodes.indexOf(node); + for (let j = 0; j < outputShapes2.length; j++) { + const shapeKey = `${layer.name}_${nodeIndex}_${j}`; + layersToOutputShapes[shapeKey] = outputShapes2[j]; + } + } + } + } + const outputShapes = []; + const outputShapeKeys = []; + for (let i = 0; i < this.outputLayers.length; i++) { + const layer = this.outputLayers[i]; + const nodeIndex = this.outputLayersNodeIndices[i]; + const tensorIndex = this.outputLayersTensorIndices[i]; + const shapeKey = `${layer.name}_${nodeIndex}_${tensorIndex}`; + outputShapeKeys.push(shapeKey); + } + for (let i = 0; i < outputShapeKeys.length; i++) { + const key = outputShapeKeys[i]; + assert2(key in layersToOutputShapes); + outputShapes.push(layersToOutputShapes[key]); + } + return singletonOrArray(outputShapes); + } + runInternalGraph(inputs, masks) { + if (masks == null) { + masks = pyListRepeat(null, inputs.length); + } + const tensorMap = {}; + for (let i = 0; i < this.inputs.length; ++i) { + const x = this.inputs[i]; + const y = inputs[i]; + const mask = masks[i]; + tensorMap[x.id] = [y, mask]; + } + const depthKeys = Object.keys(this.nodesByDepth).map((x) => parseInt(x, 10)).sort(reverseNumberCompare); + for (const depth of depthKeys) { + const nodes = this.nodesByDepth[depth]; + for (const node of nodes) { + const layer = node.outboundLayer; + const referenceInputTensors = node.inputTensors; + const referenceOutputTensors = node.outputTensors; + const computedData = new Array(); + for (const x of referenceInputTensors) { + if (x.id in tensorMap) { + computedData.push(tensorMap[x.id]); + } + } + if (computedData.length === referenceInputTensors.length) { + let kwargs = {}; + let computedTensors; + let computedMasks; + let outputTensors2; + let outputMasks2; + if (node.callArgs != null) { + kwargs = node.callArgs; + } + if (computedData.length === 1) { + const [computedTensor, computedMask] = computedData[0]; + if (kwargs["mask"] == null) { + kwargs["mask"] = computedMask; + } + outputTensors2 = toList(layer.call(computedTensor, kwargs)); + outputMasks2 = toList(layer.computeMask(computedTensor, computedMask)); + computedTensors = [computedTensor]; + computedMasks = [computedMask]; + } else { + computedTensors = computedData.map((x) => x[0]); + computedMasks = computedData.map((x) => x[1]); + if (kwargs["mask"] == null) { + kwargs["mask"] = computedMasks; + } + outputTensors2 = toList(layer.call(computedTensors, kwargs)); + outputMasks2 = toList(layer.computeMask(computedTensors, computedMasks)); + } + if (layer.activityRegularizer) { + throw new NotImplementedError("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet."); + } + for (let i = 0; i < referenceOutputTensors.length; ++i) { + const x = referenceOutputTensors[i]; + const y = outputTensors2[i]; + const mask = outputMasks2[i]; + tensorMap[x.id] = [y, mask]; + } + } + } + } + const outputTensors = []; + const outputMasks = []; + const outputShapes = []; + for (const x of this.outputs) { + assert2(x.id in tensorMap, `Could not compute output ${x.name} : ${x.id}`); + const [tensor2, mask] = tensorMap[x.id]; + outputShapes.push(tensor2.shape); + outputTensors.push(tensor2); + outputMasks.push(mask); + } + return [outputTensors, outputMasks, outputShapes]; + } + buildNodeConversionMap(layers) { + const nodeConversionMap = {}; + let keptNodes; + for (const layer of this.layers) { + keptNodes = layer instanceof Container ? 1 : 0; + for (let originalNodeIndex = 0; originalNodeIndex < layer.inboundNodes.length; originalNodeIndex++) { + const nodeKey = Container.nodeKey(layer, originalNodeIndex); + if (this.containerNodes.has(nodeKey)) { + nodeConversionMap[nodeKey] = keptNodes; + keptNodes += 1; + } + } + } + return nodeConversionMap; + } + getLayer(name, index) { + if (index != null) { + if (this.layers.length <= index) { + throw new ValueError(`Was asked to retrieve layer at index ${index}, but model only has ${this.layers.length} layer(s).`); + } else { + return this.layers[index]; + } + } else { + if (name == null) { + throw new ValueError("Provide either a layer name or layer index"); + } + } + for (const layer of this.layers) { + if (layer.name === name) { + return layer; + } + } + throw new ValueError(`No such layer: ${name}`); + } + calculateLosses() { + return tidy(() => { + const losses = []; + for (const layer of this.layers) { + for (let nodeIndex = 0; nodeIndex < layer.inboundNodes.length; ++nodeIndex) { + const nodeKey = Container.nodeKey(layer, nodeIndex); + if (this.containerNodes.has(nodeKey)) { + losses.push(...layer.calculateLosses()); + } + } + } + return losses; + }); + } + getConfig() { + const config = { name: this.name }; + const nodeConversionMap = this.buildNodeConversionMap(this.layers); + const layerConfigs = []; + for (const layer of this.layers) { + const layerClassName = layer.getClassName(); + const layerConfig = layer.getConfig(); + const filteredInboundNodes = []; + for (let originalNodeIndex = 0; originalNodeIndex < layer.inboundNodes.length; originalNodeIndex++) { + const node = layer.inboundNodes[originalNodeIndex]; + const nodeKey = Container.nodeKey(layer, originalNodeIndex); + let kwargs = {}; + if (this.containerNodes.has(nodeKey)) { + if (node.callArgs) { + try { + JSON.stringify(node.callArgs); + kwargs = node.callArgs; + } catch (err) { + console.warn(`Layer ${layer.name} was passed non-serializable keyword arguments: ${node.callArgs}. They will not be included in the serialized model (and thus will be missing at deserialization time).`); + kwargs = {}; + } + } + if (node.inboundLayers.length > 0) { + const nodeData = []; + for (let i = 0; i < node.inboundLayers.length; i++) { + const inboundLayer = node.inboundLayers[i]; + const nodeIndex = node.nodeIndices[i]; + const tensorIndex = node.tensorIndices[i]; + const nodeKey2 = Container.nodeKey(inboundLayer, nodeIndex); + let newNodeIndex = nodeConversionMap[nodeKey2]; + if (newNodeIndex == null) { + newNodeIndex = 0; + } + nodeData.push([inboundLayer.name, newNodeIndex, tensorIndex, kwargs]); + } + filteredInboundNodes.push(nodeData); + } + } + } + const dict = {}; + dict["name"] = layer.name; + dict["className"] = layerClassName; + dict["config"] = layerConfig; + dict["inboundNodes"] = filteredInboundNodes; + layerConfigs.push(dict); + } + config["layers"] = layerConfigs; + const modelInputs = []; + for (let i = 0; i < this.inputLayers.length; i++) { + const layer = this.inputLayers[i]; + const nodeIndex = this.inputLayersNodeIndices[i]; + const nodeKey = Container.nodeKey(layer, nodeIndex); + if (!this.containerNodes.has(nodeKey)) { + continue; + } + let newNodeIndex = nodeConversionMap[nodeKey]; + if (newNodeIndex === null || newNodeIndex === void 0) { + newNodeIndex = 0; + } + const tensorIndex = this.inputLayersTensorIndices[i]; + modelInputs.push([layer.name, newNodeIndex, tensorIndex]); + } + config["inputLayers"] = modelInputs; + const modelOutputs = []; + for (let i = 0; i < this.outputLayers.length; i++) { + const layer = this.outputLayers[i]; + const nodeIndex = this.outputLayersNodeIndices[i]; + const nodeKey = Container.nodeKey(layer, nodeIndex); + if (!this.containerNodes.has(nodeKey)) { + continue; + } + let newNodeIndex = nodeConversionMap[nodeKey]; + if (newNodeIndex === null || newNodeIndex === void 0) { + newNodeIndex = 0; + } + const tensorIndex = this.outputLayersTensorIndices[i]; + modelOutputs.push([layer.name, newNodeIndex, tensorIndex]); + } + config["outputLayers"] = modelOutputs; + return config; + } + static fromConfig(cls, config, customObjects = {}, fastWeightInit = false) { + const createdLayers = {}; + const unprocessedNodes = {}; + function addUnprocessedNode(layer, nodeData) { + if (!(layer.name in unprocessedNodes)) { + unprocessedNodes[layer.name] = [nodeData]; + } else { + unprocessedNodes[layer.name].push(nodeData); + } + } + function processNode(layer, nodeData) { + const inputTensors2 = []; + let kwargs; + for (const inputData of nodeData) { + const inboundLayerName = inputData[0]; + const inboundNodeIndex = inputData[1]; + const inboundTensorIndex = inputData[2]; + kwargs = inputData[3] == null ? {} : inputData[3]; + if (!(inboundLayerName in createdLayers)) { + addUnprocessedNode(layer, nodeData); + return; + } + const inboundLayer = createdLayers[inboundLayerName]; + if (inboundLayer.inboundNodes.length <= inboundNodeIndex) { + addUnprocessedNode(layer, nodeData); + return; + } + const inboundNode = inboundLayer.inboundNodes[inboundNodeIndex]; + inputTensors2.push(inboundNode.outputTensors[inboundTensorIndex]); + } + if (inputTensors2.length > 0) { + layer.apply(singletonOrArray(inputTensors2), kwargs); + } + } + function processLayer(layerData) { + const layerName = layerData["name"]; + const layer = deserialize(layerData, config["customObjects"] != null ? config["customObjects"] : {}); + layer.setFastWeightInitDuringBuild(fastWeightInit); + createdLayers[layerName] = layer; + const inboundNodesData = layerData["inboundNodes"]; + inboundNodesData.forEach((nodeData) => { + if (!(nodeData instanceof Array)) { + throw new ValueError(`Corrupted configuration, expected array for nodeData: ${nodeData}`); + } + addUnprocessedNode(layer, nodeData); + }); + } + const name = config["name"]; + const layersFromConfig = config["layers"]; + for (const layerData of layersFromConfig) { + processLayer(layerData); + } + while (!isObjectEmpty(unprocessedNodes)) { + for (const layerData of layersFromConfig) { + const layer = createdLayers[layerData["name"]]; + if (layer.name in unprocessedNodes) { + const currentUnprocessedNodesForLayer = unprocessedNodes[layer.name]; + delete unprocessedNodes[layer.name]; + for (const nodeData of currentUnprocessedNodesForLayer) { + processNode(layer, nodeData); + } + } + } + } + const inputTensors = []; + const outputTensors = []; + const inputLayersFromConfig = config["inputLayers"]; + for (const layerData of inputLayersFromConfig) { + const layerName = layerData[0]; + const nodeIndex = layerData[1]; + const tensorIndex = layerData[2]; + assert2(layerName in createdLayers); + const layer = createdLayers[layerName]; + const layerOutputTensors = layer.inboundNodes[nodeIndex].outputTensors; + inputTensors.push(layerOutputTensors[tensorIndex]); + } + const outputLayersFromConfig = config["outputLayers"]; + for (const layerData of outputLayersFromConfig) { + const layerName = layerData[0]; + const nodeIndex = layerData[1]; + const tensorIndex = layerData[2]; + assert2(layerName in createdLayers); + const layer = createdLayers[layerName]; + const layerOutputTensors = layer.inboundNodes[nodeIndex].outputTensors; + outputTensors.push(layerOutputTensors[tensorIndex]); + } + return new cls({ inputs: inputTensors, outputs: outputTensors, name }); + } + get stateful() { + if (this._stateful) { + throw new ValueError("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false."); + } + for (const layer of this.layers) { + if (layer.stateful) { + return true; + } + } + return false; + } + resetStates() { + tidy(() => { + this.layers.forEach((layer) => { + if (layer.stateful) { + layer.resetStates(); + } + }); + }); + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training_dataset.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training_utils.js + init_define_BUILD_VERSION(); + function standardizeSampleOrClassWeights(xWeight, outputNames, weightType) { + const numOutputs = outputNames.length; + if (xWeight == null || Array.isArray(xWeight) && xWeight.length === 0) { + return outputNames.map((name) => null); + } + if (numOutputs === 1) { + if (Array.isArray(xWeight) && xWeight.length === 1) { + return xWeight; + } else if (typeof xWeight === "object" && outputNames[0] in xWeight) { + return [xWeight[outputNames[0]]]; + } else { + return [xWeight]; + } + } + if (Array.isArray(xWeight)) { + if (xWeight.length !== numOutputs) { + throw new Error(`Provided ${weightType} is an array of ${xWeight.length} element(s), but the model has ${numOutputs} outputs. Make sure a set of weights is provided for each model output.`); + } + return xWeight; + } else if (typeof xWeight === "object" && Object.keys(xWeight).length > 0 && typeof xWeight[Object.keys(xWeight)[0]] === "object") { + const output = []; + outputNames.forEach((outputName) => { + if (outputName in xWeight) { + output.push(xWeight[outputName]); + } else { + output.push(null); + } + }); + return output; + } else { + throw new Error(`The model has multiple (${numOutputs}) outputs, so ${weightType} must be either an array with ${numOutputs} elements or an object with ${outputNames} keys. Provided ${weightType} not understood: ${JSON.stringify(xWeight)}`); + } + } + function standardizeClassWeights(classWeight, outputNames) { + return standardizeSampleOrClassWeights(classWeight, outputNames, "classWeight"); + } + async function standardizeWeights(y, sampleWeight, classWeight, sampleWeightMode) { + if (sampleWeight != null || sampleWeightMode != null) { + throw new Error("Support sampleWeight is not implemented yet"); + } + if (classWeight != null) { + const yClasses = tidy(() => { + if (y.shape.length === 1) { + return clone(y); + } else if (y.shape.length === 2) { + if (y.shape[1] > 1) { + const axis = 1; + return argMax(y, axis); + } else if (y.shape[1] === 1) { + return reshape(y, [y.shape[0]]); + } else { + throw new Error(`Encountered unexpected last-dimension size (${y.shape[1]}) during handling of class weights. The size is expected to be >= 1.`); + } + } else { + throw new Error(`Unexpected rank of target (y) tensor (${y.rank}) during handling of class weights. The rank is expected to be 1 or 2.`); + } + }); + const yClassIndices = Array.from(await yClasses.data()); + dispose(yClasses); + const classSampleWeight = []; + yClassIndices.forEach((classIndex) => { + if (classWeight[classIndex] == null) { + throw new Error(`classWeight must contain all classes in the training data. The class ${classIndex} exists in the data but not in classWeight`); + } else { + classSampleWeight.push(classWeight[classIndex]); + } + }); + return tensor1d(classSampleWeight, "float32"); + } else { + return null; + } + } + function computeWeightedLoss(losses, sampleWeights) { + return mul(losses, sampleWeights); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training_dataset.js + var DEFAULT_VALIDATION_BATCH_SIZE = 32; + function standardizeDataIteratorOutput(model3, iteratorOut) { + let xs; + let ys; + const iteratorOutObj = iteratorOut; + xs = iteratorOutObj["xs"]; + ys = iteratorOutObj["ys"]; + util_exports.assert(xs != null && ys != null, () => `A Dataset iterator for fitDataset() is expected to generate objects of the form \`{xs: xVal, ys: yVal}\`, where the two values may be \`tf.Tensor\`, an array of Tensors, or a map of string to Tensor. The provided Dataset instead generates ${iteratorOut}`); + const flattenedXs = flattenTensorOrArrayOrMap("input", model3.inputNames, xs); + const flattenedYs = flattenTensorOrArrayOrMap("output", model3.outputNames, ys); + const batchSize = flattenedXs[0].shape[0]; + util_exports.assert(flattenedXs.length === model3.inputs.length, () => `LayersModel has ${model3.inputs.length} inputs, but the dataset provides ${flattenedXs.length} inputs. (Expected input keys: ${JSON.stringify(model3.inputNames)})`); + util_exports.assert(flattenedYs.length === model3.outputs.length, () => `LayersModel has ${model3.outputs.length} outputs, but the dataset provides ${flattenedYs.length} outputs. (Expected output keys: ${JSON.stringify(model3.outputNames)})`); + for (let xIndex = 0; xIndex < flattenedXs.length; xIndex++) { + util_exports.assert(flattenedXs[xIndex].shape[0] === batchSize, () => `Batch size mismatch: input ${model3.inputNames[xIndex]} has ${flattenedXs[xIndex].shape[0]}; expected ${batchSize} based on input ${model3.inputNames[0]}.`); + } + for (let yIndex = 0; yIndex < flattenedYs.length; yIndex++) { + util_exports.assert(flattenedYs[yIndex].shape[0] === batchSize, () => `Batch size mismatch: output ${model3.outputNames[yIndex]} has ${flattenedYs[yIndex].shape[0]}; expected ${batchSize} based on input ${model3.inputNames[0]}.`); + } + return { xs: flattenedXs, ys: flattenedYs }; + } + function flattenTensorOrArrayOrMap(inputOrOutput, names, values) { + if (values instanceof Tensor) { + return [values]; + } else if (Array.isArray(values)) { + util_exports.assert(values.length === names.length, () => `Received an array of ${values.length} Tensors, but expected ${names.length} to match the ${inputOrOutput} keys ${names}.`); + return values; + } else { + const result = []; + for (const name of names) { + if (values[name] == null) { + throw new ValueError(`The feature data generated by the dataset lacks the required ${inputOrOutput} key '${name}'.`); + } + result.push(values[name]); + } + return result; + } + } + function standardizeTensorValidationData(data) { + if (data.length === 3) { + throw new NotImplementedError("Validation with sample weights is not implemented yet."); + } + return { xs: data[0], ys: data[1] }; + } + async function fitDataset(model3, dataset, args) { + const hasBatchesPerEpoch = args.batchesPerEpoch != null; + util_exports.assert(model3.optimizer != null, () => "You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."); + util_exports.assert(args != null, () => `For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call.`); + util_exports.assert(args.epochs != null && args.epochs > 0 && Number.isInteger(args.epochs), () => `For fitDataset(), config.epochs is expected to be a positive integer, but got ${args.epochs}`); + util_exports.assert(!hasBatchesPerEpoch || args.batchesPerEpoch > 0 && Number.isInteger(args.batchesPerEpoch), () => `For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${args.batchesPerEpoch}`); + util_exports.assert( + args["validationSplit"] == null, + () => "`validationSplit` is not supported by `fitDataset()`. Use validationData instead." + ); + if (model3.isTraining) { + throw new Error("Cannot start training because another fit() call is ongoing."); + } + model3.isTraining = true; + try { + const doValidation = args.validationData != null; + let valXs; + let valYs; + if (doValidation) { + if (isDatasetObject(args.validationData)) { + util_exports.assert(args.validationBatches == null || args.validationBatches > 0 && Number.isInteger(args.validationBatches), () => `For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, but got ${args.validationBatches}`); + } else { + const validationData = standardizeTensorValidationData(args.validationData); + valXs = validationData.xs; + valYs = validationData.ys; + } + } + const trainFunction = model3.makeTrainFunction(); + const outLabels = model3.getDedupedMetricsNames(); + let callbackMetrics; + if (doValidation) { + callbackMetrics = outLabels.slice().concat(outLabels.map((n) => "val_" + n)); + } else { + callbackMetrics = outLabels.slice(); + } + const callbacks2 = standardizeCallbacks(args.callbacks, args.yieldEvery); + const verbose = args.verbose == null ? 1 : args.verbose; + const { callbackList, history } = configureCallbacks( + callbacks2, + verbose, + args.epochs, + null, + null, + getStepsPerEpoch(dataset, args), + null, + doValidation, + callbackMetrics + ); + callbackList.setModel(model3); + model3.history = history; + await callbackList.onTrainBegin(); + model3.stopTraining_ = false; + let epoch = args.initialEpoch == null ? 0 : args.initialEpoch; + let dataIterator = await dataset.iterator(); + while (epoch < args.epochs) { + const epochLogs = {}; + await callbackList.onEpochBegin(epoch); + let stepsDone = 0; + let batchIndex = 0; + if (!hasBatchesPerEpoch) { + dataIterator = await dataset.iterator(); + } + while (hasBatchesPerEpoch ? stepsDone < args.batchesPerEpoch : true) { + const iteratorOut = await dataIterator.next(); + if (hasBatchesPerEpoch && iteratorOut.done) { + console.warn(`You provided \`batchesPerEpoch\` as ${args.batchesPerEpoch}, but your dataset iterator ran out of data after ${stepsDone} batches; interrupting training. Make sure that your dataset can generate at least \`batchesPerEpoch * epochs\` batches (in this case, ${args.batchesPerEpoch * args.epochs} batches). You may need to use the repeat() function when building your dataset.`); + break; + } + if (iteratorOut.value != null) { + const { xs, ys } = standardizeDataIteratorOutput(model3, iteratorOut.value); + const batchLogs = {}; + batchLogs["batch"] = batchIndex; + batchLogs["size"] = xs[0].shape[0]; + await callbackList.onBatchBegin(batchIndex, batchLogs); + const sampleWeights = []; + if (args.classWeight != null) { + const standardClassWeights = standardizeClassWeights(args.classWeight, model3.outputNames); + for (let i = 0; i < standardClassWeights.length; ++i) { + sampleWeights.push(await standardizeWeights(ys[i], null, standardClassWeights[i])); + } + } + const ins = xs.concat(ys).concat(sampleWeights); + const outs = trainFunction(ins); + dispose(ins); + for (let i = 0; i < outLabels.length; ++i) { + const label = outLabels[i]; + const out = outs[i]; + batchLogs[label] = out; + keep(out); + } + await callbackList.onBatchEnd(batchIndex, batchLogs); + disposeTensorsInLogs(batchLogs); + batchIndex++; + stepsDone++; + } + if (hasBatchesPerEpoch ? stepsDone >= args.batchesPerEpoch : iteratorOut.done) { + if (doValidation) { + let valOuts; + if (isDatasetObject(args.validationData)) { + valOuts = toList(await model3.evaluateDataset(args.validationData, { batches: args.validationBatches })); + } else { + valOuts = toList(model3.evaluate(valXs, valYs, { + batchSize: args.validationBatchSize == null ? DEFAULT_VALIDATION_BATCH_SIZE : args.validationBatchSize, + verbose: 0 + })); + } + for (let i = 0; i < model3.metricsNames.length; ++i) { + epochLogs[`val_${model3.metricsNames[i]}`] = valOuts[i]; + } + } + break; + } + if (model3.stopTraining_) { + break; + } + } + await callbackList.onEpochEnd(epoch, epochLogs); + epoch++; + if (model3.stopTraining_) { + break; + } + } + await callbackList.onTrainEnd(); + await model3.history.syncData(); + return model3.history; + } finally { + model3.isTraining = false; + } + } + function getStepsPerEpoch(dataset, args) { + let stepsPerEpoch = null; + if (args.batchesPerEpoch != null) { + stepsPerEpoch = args.batchesPerEpoch; + } else if (Number.isFinite(dataset.size)) { + stepsPerEpoch = dataset.size; + } + return stepsPerEpoch; + } + function isDatasetObject(dataset) { + return typeof dataset.iterator === "function"; + } + function isLazyIteratorObject(iterator) { + return typeof iterator.next === "function"; + } + async function evaluateDataset(model3, dataset, args) { + args = args || {}; + const hasBatches = args.batches != null; + const f = model3.testFunction; + let outs = []; + if (args.verbose > 0) { + throw new NotImplementedError("Verbose mode is not implemented yet."); + } + util_exports.assert(!hasBatches || args.batches > 0 && Number.isInteger(args.batches), () => `Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(args.batches)}`); + const dataIterator = isLazyIteratorObject(dataset) ? dataset : await dataset.iterator(); + let numExamples = 0; + let batch = 0; + while (hasBatches ? batch < args.batches : true) { + const iteratorOut = await dataIterator.next(); + outs = tidy(() => { + if (iteratorOut.value) { + const { xs, ys } = standardizeDataIteratorOutput(model3, iteratorOut.value); + const xsAndYs = xs.concat(ys); + const batchOuts = tidy(() => f(xsAndYs)); + dispose(xsAndYs); + if (batch === 0) { + for (let i = 0; i < batchOuts.length; ++i) { + outs.push(scalar(0)); + } + } + const batchSize = xsAndYs[0].shape[0]; + for (let i = 0; i < batchOuts.length; ++i) { + const batchOut = batchOuts[i]; + const oldScalar = outs[i]; + outs[i] = tidy(() => add2(outs[i], mul(batchSize, batchOut))); + if (batch > 0) { + dispose(oldScalar); + } + } + dispose(batchOuts); + numExamples += batchSize; + ++batch; + } + return outs; + }); + if (iteratorOut.done) { + if (hasBatches) { + console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${args.batches} batches). You may need to use the repeat() function when building your dataset.`); + } + break; + } + } + for (let i = 0; i < outs.length; ++i) { + const oldScalar = outs[i]; + outs[i] = div(outs[i], numExamples); + dispose(oldScalar); + } + return singletonOrArray(outs); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training_tensors.js + init_define_BUILD_VERSION(); + function checkBatchSize(batchSize) { + util_exports.assert(batchSize > 0 && Number.isInteger(batchSize), () => `batchSize is required to be a positive integer, but got ${batchSize}`); + } + function sliceArrays(arrays, start, stop) { + if (arrays == null) { + return [null]; + } else if (Array.isArray(arrays)) { + return arrays.map((array2) => sliceAlongFirstAxis(array2, start, stop - start)); + } else { + return sliceAlongFirstAxis(arrays, start, stop - start); + } + } + function sliceArraysByIndices(arrays, indices) { + return tidy(() => { + if (arrays == null) { + return null; + } else if (Array.isArray(arrays)) { + return arrays.map((array2) => sliceArraysByIndices(array2, indices)); + } else { + return gather2(arrays, indices.dtype === "int32" ? indices : cast(indices, "int32")); + } + }); + } + function makeBatches(size, batchSize) { + const output = []; + let batchStart = 0; + let batchEnd = null; + while (batchStart < size) { + batchEnd = batchStart + batchSize; + if (batchEnd >= size) { + batchEnd = size; + } + output.push([batchStart, batchEnd]); + batchStart = batchEnd; + } + return output; + } + async function fitLoop(model3, f, ins, outLabels, batchSize, epochs, verbose, callbacks2, valF, valIns, shuffle2, callbackMetrics, initialEpoch, stepsPerEpoch, validationSteps) { + if (batchSize == null) { + batchSize = 32; + } + if (epochs == null) { + epochs = 1; + } + if (shuffle2 == null) { + shuffle2 = true; + } + if (initialEpoch == null) { + initialEpoch = 0; + } + let doValidation = false; + if (valF != null && valIns != null) { + doValidation = true; + } + if (validationSteps != null) { + doValidation = true; + if (stepsPerEpoch == null) { + throw new ValueError("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set."); + } + } + const numTrainSamples = model3.checkNumSamples(ins, batchSize, stepsPerEpoch, "steps_per_epoch"); + let indexArray; + if (numTrainSamples != null) { + indexArray = range2(0, numTrainSamples); + } + if (verbose == null) { + verbose = 1; + } + const { callbackList, history } = configureCallbacks(callbacks2, verbose, epochs, initialEpoch, numTrainSamples, stepsPerEpoch, batchSize, doValidation, callbackMetrics); + callbackList.setModel(model3); + model3.history = history; + await callbackList.onTrainBegin(); + model3.stopTraining_ = false; + for (let epoch = initialEpoch; epoch < epochs; ++epoch) { + await callbackList.onEpochBegin(epoch); + const epochLogs = {}; + if (stepsPerEpoch != null) { + throw new NotImplementedError("stepsPerEpoch mode is not implemented yet."); + } else { + if (shuffle2 === "batch") { + throw new NotImplementedError("batch shuffling is not implemneted yet"); + } else if (shuffle2) { + util_exports.shuffle(indexArray); + } + const epochIndexArray1D = tensor1d(indexArray); + const batches = makeBatches(numTrainSamples, batchSize); + for (let batchIndex = 0; batchIndex < batches.length; ++batchIndex) { + const batchLogs = {}; + await callbackList.onBatchBegin(batchIndex, batchLogs); + tidy(() => { + const batchStart = batches[batchIndex][0]; + const batchEnd = batches[batchIndex][1]; + const batchIds = sliceAlongFirstAxis(epochIndexArray1D, batchStart, batchEnd - batchStart); + batchLogs["batch"] = batchIndex; + batchLogs["size"] = batchEnd - batchStart; + const insBatch = sliceArraysByIndices(ins, batchIds); + const outs = f(insBatch); + for (let i = 0; i < outLabels.length; ++i) { + const label = outLabels[i]; + const out = outs[i]; + batchLogs[label] = out; + keep(out); + } + if (batchIndex === batches.length - 1) { + if (doValidation) { + const valOuts = model3.testLoop(valF, valIns, batchSize); + for (let i = 0; i < outLabels.length; ++i) { + const label = outLabels[i]; + const out = valOuts[i]; + keep(out); + epochLogs["val_" + label] = out; + } + } + } + }); + await callbackList.onBatchEnd(batchIndex, batchLogs); + disposeTensorsInLogs(batchLogs); + if (model3.stopTraining_) { + break; + } + } + epochIndexArray1D.dispose(); + } + await callbackList.onEpochEnd(epoch, epochLogs); + if (model3.stopTraining_) { + break; + } + } + await callbackList.onTrainEnd(); + await model3.history.syncData(); + return model3.history; + } + async function fitTensors(model3, x, y, args = {}) { + if (model3.isTraining) { + throw new Error("Cannot start training because another fit() call is ongoing."); + } + model3.isTraining = true; + let inputs; + let targets; + let originalInputs; + let originalTargets; + let inputValX; + let inputValY; + let valX; + let valY; + let sampleWeights; + try { + const batchSize = args.batchSize == null ? 32 : args.batchSize; + checkBatchSize(batchSize); + const checkBatchAxis = false; + const standardizedOuts = await model3.standardizeUserData(x, y, args.sampleWeight, args.classWeight, checkBatchAxis, batchSize); + inputs = standardizedOuts[0]; + targets = standardizedOuts[1]; + sampleWeights = standardizedOuts[2]; + let doValidation = false; + let valIns; + if (args.validationData != null && args.validationData.length > 0) { + doValidation = true; + if (args.validationData.length === 2) { + inputValX = args.validationData[0]; + inputValY = args.validationData[1]; + } else if (args.validationData.length === 3) { + throw new NotImplementedError("validationData including sample weights is not supported yet."); + } else { + throw new ValueError(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${args.validationData} is invalid.`); + } + const checkBatchAxis2 = true; + const valStandardized = await model3.standardizeUserData(inputValX, inputValY, null, null, checkBatchAxis2, batchSize); + valX = valStandardized[0]; + valY = valStandardized[1]; + valIns = valX.concat(valY); + } else if (args.validationSplit != null && args.validationSplit > 0 && args.validationSplit < 1) { + doValidation = true; + const splitAt = Math.floor(inputs[0].shape[0] * (1 - args.validationSplit)); + const originalBatchSize = inputs[0].shape[0]; + valX = sliceArrays(inputs, splitAt, originalBatchSize); + originalInputs = inputs; + inputs = sliceArrays(inputs, 0, splitAt); + valY = sliceArrays(targets, splitAt, originalBatchSize); + originalTargets = targets; + targets = sliceArrays(targets, 0, splitAt); + valIns = valX.concat(valY); + } else if (args.validationSteps != null) { + doValidation = true; + } + const ins = inputs.concat(targets).concat(sampleWeights); + model3.checkTrainableWeightsConsistency(); + const trainFunction = model3.makeTrainFunction(); + const outLabels = model3.getDedupedMetricsNames(); + let valFunction; + let callbackMetrics; + if (doValidation) { + model3.makeTestFunction(); + valFunction = model3.testFunction; + callbackMetrics = outLabels.slice().concat(outLabels.map((n) => "val_" + n)); + } else { + valFunction = null; + valIns = []; + callbackMetrics = outLabels.slice(); + } + const callbacks2 = standardizeCallbacks(args.callbacks, args.yieldEvery); + const out = await fitLoop(model3, trainFunction, ins, outLabels, batchSize, args.epochs, args.verbose, callbacks2, valFunction, valIns, args.shuffle, callbackMetrics, args.initialEpoch, null, null); + return out; + } finally { + model3.isTraining = false; + disposeNewTensors(inputs, x); + disposeNewTensors(targets, y); + disposeNewTensors(originalInputs, x); + disposeNewTensors(originalTargets, y); + disposeNewTensors(valX, inputValX); + disposeNewTensors(valY, inputValY); + if (sampleWeights != null) { + dispose(sampleWeights); + } + } + } + function ensureTensorsRank2OrHigher(tensors) { + const outs = []; + if (tensors instanceof Tensor) { + tensors = [tensors]; + } + for (let i = 0; i < tensors.length; ++i) { + const tensor2 = tensors[i]; + if (tensor2.rank === 1) { + outs.push(expandDims2(tensor2, 1)); + } else if (tensor2.rank === 0) { + throw new Error("Expected tensor to be at least 1D, but received a 0D tensor (scalar)."); + } else { + outs.push(tensor2); + } + } + return outs; + } + function disposeNewTensors(tensors, refTensors) { + if (tensors == null) { + return; + } + const oldTensorIds = []; + if (refTensors instanceof Tensor) { + oldTensorIds.push(refTensors.id); + } else if (Array.isArray(refTensors)) { + refTensors.forEach((t) => oldTensorIds.push(t.id)); + } else if (refTensors != null) { + for (const name in refTensors) { + const oldTensor = refTensors[name]; + oldTensorIds.push(oldTensor.id); + } + } + const tensorsToDispose = []; + if (tensors instanceof Tensor) { + if (oldTensorIds.indexOf(tensors.id) === -1) { + tensorsToDispose.push(tensors); + } + } else if (Array.isArray(tensors)) { + tensors.forEach((t) => { + if (oldTensorIds.indexOf(t.id) === -1) { + tensorsToDispose.push(t); + } + }); + } else if (tensors != null) { + for (const name in tensors) { + const tensor2 = tensors[name]; + if (oldTensorIds.indexOf(tensor2.id) === -1) { + tensorsToDispose.push(tensor2); + } + } + } + tensorsToDispose.forEach((t) => { + if (!t.isDisposed) { + t.dispose(); + } + }); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/engine/training.js + function isDataTensor(x) { + return x instanceof Tensor; + } + function isDataArray(x) { + return Array.isArray(x); + } + function isDataDict(x) { + return !isDataTensor(x) && !isDataArray(x); + } + function standardizeInputData(data, names, shapes, checkBatchAxis = true, exceptionPrefix = "") { + if (names == null || names.length === 0) { + if (data != null) { + let gotUnexpectedData = false; + if (isDataArray(data) && data.length > 0) { + gotUnexpectedData = true; + } else if (isDataDict(data)) { + for (const key in data) { + if (data.hasOwnProperty(key)) { + gotUnexpectedData = true; + break; + } + } + } else { + gotUnexpectedData = true; + } + if (gotUnexpectedData) { + throw new ValueError(`Error when checking model ${exceptionPrefix} expected no data, but got ${data}`); + } + } + return []; + } + if (data == null) { + return names.map((name) => null); + } + let arrays; + if (isDataDict(data)) { + data = data; + arrays = []; + for (const name of names) { + if (data[name] == null) { + throw new ValueError(`No data provided for "${name}". Need data for each key in: ${names}`); + } + arrays.push(data[name]); + } + } else if (isDataArray(data)) { + data = data; + if (data.length !== names.length) { + throw new ValueError(`Error when checking model ${exceptionPrefix}: the Array of Tensors that you are passing to your model is not the size the model expected. Expected to see ${names.length} Tensor(s), but instead got the following list of Tensor(s): ${data}`); + } + arrays = data; + } else { + data = data; + if (names.length > 1) { + throw new ValueError(`The model ${exceptionPrefix} expects ${names.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${data.shape}`); + } + arrays = [data]; + } + arrays = ensureTensorsRank2OrHigher(arrays); + if (shapes != null) { + for (let i = 0; i < names.length; ++i) { + if (shapes[i] == null) { + continue; + } + const array2 = arrays[i]; + if (array2.shape.length !== shapes[i].length) { + throw new ValueError(`Error when checking ${exceptionPrefix}: expected ${names[i]} to have ${shapes[i].length} dimension(s). but got array with shape ${array2.shape}`); + } + for (let j = 0; j < shapes[i].length; ++j) { + if (j === 0 && !checkBatchAxis) { + continue; + } + const dim = array2.shape[j]; + const refDim = shapes[i][j]; + if (refDim != null && refDim >= 0 && dim !== refDim) { + throw new ValueError(`${exceptionPrefix} expected a batch of elements where each example has shape [${shapes[i].slice(1, shapes[i].length)}] (i.e.,tensor shape [*,${shapes[i].slice(1, shapes[i].length)}]) but the ${exceptionPrefix} received an input with ${array2.shape[0]} examples, each with shape [${array2.shape.slice(1, array2.shape.length)}] (tensor shape [${array2.shape}])`); + } + } + } + } + return arrays; + } + function checkArrayLengths(inputs, targets, weights) { + const setX = unique2(inputs.map((input2) => input2.shape[0])); + setX.sort(); + const setY = unique2(targets.map((target) => target.shape[0])); + setY.sort(); + if (setX.length > 1) { + throw new ValueError(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(inputs.map((input2) => input2.shape))}`); + } + if (setY.length > 1) { + throw new ValueError(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(targets.map((target) => target.shape))}`); + } + if (setX.length > 0 && setY.length > 0 && !util_exports.arraysEqual(setX, setY)) { + throw new ValueError(`Input Tensors should have the same number of samples as target Tensors. Found ${setX[0]} input sample(s) and ${setY[0]} target sample(s).`); + } + } + function checkLossAndTargetCompatibility(targets, lossFns, outputShapes) { + const keyLosses = [ + meanSquaredError, + binaryCrossentropy, + categoricalCrossentropy + ]; + for (let i = 0; i < targets.length; ++i) { + const y = targets[i]; + const loss = lossFns[i]; + const shape = outputShapes[i]; + if (loss == null) { + continue; + } + if (loss === categoricalCrossentropy) { + if (y.shape[y.shape.length - 1] === 1) { + throw new ValueError(`You are passing a target array of shape ${y.shape} while using a loss 'categorical_crossentropy'. 'categorical_crossentropy'expects targets to be binary matrices (1s and 0s) of shape [samples, classes].`); + } + } + if (keyLosses.indexOf(loss) !== -1) { + const slicedYShape = y.shape.slice(1); + const slicedShape = shape.slice(1); + for (let j = 0; j < slicedYShape.length; ++j) { + const targetDim = slicedYShape[j]; + const outDim = slicedShape[j]; + if (outDim != null && targetDim !== outDim) { + throw new ValueError(`A target Tensor with shape ${y.shape} was passed for an output of shape ${shape}, while using a loss function that expects targets to have the same shape as the output.`); + } + } + } + } + } + function checkInputData(data, names, shapes, checkBatchAxis = true, exceptionPrefix = "") { + let arrays; + if (Array.isArray(data)) { + if (data.length !== names.length) { + throw new ValueError(`Error when checking model ${exceptionPrefix}: the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see ${names.length} Tensor(s), but instead got ${data.length} Tensors(s).`); + } + arrays = data; + } else { + if (names.length > 1) { + throw new ValueError(`The model expects ${names.length} ${exceptionPrefix} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(data.shape)}.`); + } + arrays = [data]; + } + if (shapes != null) { + for (let i = 0; i < names.length; ++i) { + if (shapes[i] == null) { + continue; + } + const array2 = arrays[i]; + if (array2.shape.length !== shapes[i].length) { + throw new ValueError(`Error when checking ${exceptionPrefix}: expected ${names[i]} to have ${shapes[i].length} dimension(s), but got array with shape ${JSON.stringify(array2.shape)}`); + } + for (let j = 0; j < shapes[i].length; ++j) { + if (j === 0 && !checkBatchAxis) { + continue; + } + const dim = array2.shape[j]; + const refDim = shapes[i][j]; + if (refDim != null) { + if (refDim !== dim) { + throw new ValueError(`Error when checking ${exceptionPrefix}: expected ${names[i]} to have shape ${JSON.stringify(shapes[i])} but got array with shape ${JSON.stringify(array2.shape)}.`); + } + } + } + } + } + } + function collectMetrics(metrics, outputNames) { + if (metrics == null || Array.isArray(metrics) && metrics.length === 0) { + return outputNames.map((name) => []); + } + let wrappedMetrics; + if (typeof metrics === "string" || typeof metrics === "function") { + wrappedMetrics = [metrics]; + } else if (Array.isArray(metrics) || typeof metrics === "object") { + wrappedMetrics = metrics; + } else { + throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${metrics}`); + } + if (Array.isArray(wrappedMetrics)) { + return outputNames.map((name) => wrappedMetrics); + } else { + const nestedMetrics = []; + for (const name of outputNames) { + let outputMetrics = wrappedMetrics.hasOwnProperty(name) ? wrappedMetrics[name] : []; + if (!Array.isArray(outputMetrics)) { + outputMetrics = [outputMetrics]; + } + nestedMetrics.push(outputMetrics); + } + return nestedMetrics; + } + } + var LAYERS_MODEL_FORMAT_NAME = "layers-model"; + var LayersModel = class extends Container { + constructor(args) { + super(args); + this.isTraining = false; + } + summary(lineLength, positions, printFn = console.log) { + if (!this.built) { + throw new ValueError(`This model has never been called, thus its weights have not been created yet. So no summary can be displayed. Build the model first (e.g., by calling it on some test data).`); + } + printSummary(this, lineLength, positions, printFn); + } + compile(args) { + if (args.loss == null) { + args.loss = []; + } + this.loss = args.loss; + if (typeof args.optimizer === "string") { + this.optimizer_ = getOptimizer(args.optimizer); + this.isOptimizerOwned = true; + } else { + if (!(args.optimizer instanceof Optimizer)) { + throw new ValueError(`User-defined optimizer must be an instance of tf.Optimizer.`); + } + this.optimizer_ = args.optimizer; + this.isOptimizerOwned = false; + } + let lossFunctions = []; + if (!Array.isArray(args.loss) && typeof args.loss !== "string" && typeof args.loss !== "function") { + args.loss = args.loss; + for (const name in args.loss) { + if (this.outputNames.indexOf(name) === -1) { + throw new ValueError(`Unknown entry in loss dictionary: "${name}". Only expected the following keys: ${this.outputNames}`); + } + } + for (const name of this.outputNames) { + if (args.loss[name] == null) { + console.warn(`Output "${name}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${name} during training`); + } + lossFunctions.push(get(args.loss[name])); + } + } else if (Array.isArray(args.loss)) { + if (args.loss.length !== this.outputs.length) { + throw new ValueError(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${args.loss}.`); + } + const theLosses = args.loss; + lossFunctions = theLosses.map((l) => get(l)); + } else { + const lossFunction = get(args.loss); + this.outputs.forEach((_) => { + lossFunctions.push(lossFunction); + }); + } + this.lossFunctions = lossFunctions; + this.feedOutputNames = []; + this.feedOutputShapes = []; + this.feedLossFns = []; + for (let i = 0; i < this.outputs.length; ++i) { + const shape = this.internalOutputShapes[i]; + const name = this.outputNames[i]; + this.feedOutputNames.push(name); + this.feedOutputShapes.push(shape); + this.feedLossFns.push(this.lossFunctions[i]); + } + const skipTargetIndices = []; + this.metrics = args.metrics; + this.metricsNames = ["loss"]; + this.metricsTensors = []; + nameScope("loss", () => { + for (let i = 0; i < this.outputs.length; ++i) { + if (skipTargetIndices.indexOf(i) !== -1) { + continue; + } + const weightedLoss = this.lossFunctions[i]; + if (this.outputs.length > 1) { + this.metricsTensors.push([weightedLoss, i]); + this.metricsNames.push(this.outputNames[i] + "_loss"); + } + } + }); + const nestedMetrics = collectMetrics(args.metrics, this.outputNames); + const appendMetric = (outputIndex, metricName, metricTensor) => { + if (this.outputNames.length > 1) { + metricName = this.outputNames[outputIndex] + "_" + metricName; + } + this.metricsNames.push(metricName); + this.metricsTensors.push([metricTensor, outputIndex]); + }; + nameScope("metric", () => { + for (let i = 0; i < this.outputs.length; ++i) { + if (skipTargetIndices.indexOf(i) !== -1) { + continue; + } + const outputMetrics = nestedMetrics[i]; + const handleMetrics = (metrics) => { + const metricNamePrefix = ""; + let metricName; + let accFn; + let weightedMetricFn; + for (const metric of metrics) { + if (typeof metric === "string" && ["accuracy", "acc", "crossentropy", "ce"].indexOf(metric) !== -1) { + const outputShape = this.internalOutputShapes[i]; + if (outputShape[outputShape.length - 1] === 1 || this.lossFunctions[i] === binaryCrossentropy) { + if (["accuracy", "acc"].indexOf(metric) !== -1) { + accFn = binaryAccuracy; + } else if (["crossentropy", "ce"].indexOf(metric) !== -1) { + accFn = binaryCrossentropy2; + } + } else if (this.lossFunctions[i] === sparseCategoricalCrossentropy) { + if (["accuracy", "acc"].indexOf(metric) !== -1) { + accFn = sparseCategoricalAccuracy; + } else if (["crossentropy", "ce"].indexOf(metric) !== -1) { + accFn = sparseCategoricalCrossentropy2; + } + } else { + if (["accuracy", "acc"].indexOf(metric) !== -1) { + accFn = categoricalAccuracy; + } else if (["crossentropy", "ce"].indexOf(metric) !== -1) { + accFn = categoricalCrossentropy2; + } + } + let suffix; + if (["accuracy", "acc"].indexOf(metric) !== -1) { + suffix = "acc"; + } else if (["crossentropy", "ce"].indexOf(metric) !== -1) { + suffix = "ce"; + } + weightedMetricFn = accFn; + metricName = metricNamePrefix + suffix; + } else { + const metricFn = get2(metric); + weightedMetricFn = metricFn; + metricName = metricNamePrefix + getLossOrMetricName(metric); + } + let metricResult; + nameScope(metricName, () => { + metricResult = weightedMetricFn; + }); + appendMetric(i, metricName, metricResult); + } + }; + handleMetrics(outputMetrics); + } + }); + this.collectedTrainableWeights = this.trainableWeights; + } + checkTrainableWeightsConsistency() { + if (this.collectedTrainableWeights == null) { + return; + } + if (this.trainableWeights.length !== this.collectedTrainableWeights.length) { + console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?"); + } + } + evaluate(x, y, args = {}) { + const batchSize = args.batchSize == null ? 32 : args.batchSize; + checkBatchSize(batchSize); + const checkBatchAxis = true; + const standardizedOuts = this.standardizeUserDataXY(x, y, checkBatchAxis, batchSize); + try { + const ins = standardizedOuts[0].concat(standardizedOuts[1]); + this.makeTestFunction(); + const f = this.testFunction; + const testOuts = this.testLoop(f, ins, batchSize, args.verbose, args.steps); + return singletonOrArray(testOuts); + } finally { + disposeNewTensors(standardizedOuts[0], x); + disposeNewTensors(standardizedOuts[1], y); + } + } + async evaluateDataset(dataset, args) { + this.makeTestFunction(); + return evaluateDataset(this, dataset, args); + } + checkNumSamples(ins, batchSize, steps, stepsName = "steps") { + let numSamples; + if (steps != null) { + numSamples = null; + if (batchSize != null) { + throw new ValueError(`If ${stepsName} is set, batchSize must be null or undefined.Got batchSize = ${batchSize}`); + } + } else if (ins != null) { + if (Array.isArray(ins)) { + numSamples = ins[0].shape[0]; + } else { + numSamples = ins.shape[0]; + } + } else { + throw new ValueError(`Either the input data should have a defined shape, or ${stepsName} shoud be specified.`); + } + return numSamples; + } + execute(inputs, outputs) { + if (Array.isArray(outputs) && outputs.length === 0) { + throw new ValueError("`outputs` is an empty Array, which is not allowed."); + } + const outputsIsArray = Array.isArray(outputs); + const outputNames = outputsIsArray ? outputs : [outputs]; + const outputSymbolicTensors = this.retrieveSymbolicTensors(outputNames); + const feedDict = new FeedDict(); + if (inputs instanceof Tensor) { + inputs = [inputs]; + } + if (Array.isArray(inputs)) { + if (inputs.length !== this.inputs.length) { + throw new ValueError(`The number of inputs provided (${inputs.length}) does not match the number of inputs of this model (${this.inputs.length}).`); + } + for (let i = 0; i < this.inputs.length; ++i) { + feedDict.add(this.inputs[i], inputs[i]); + } + } else { + for (const input2 of this.inputs) { + const tensorValue = inputs[input2.name]; + if (tensorValue == null) { + throw new ValueError(`No value is provided for the model's input ${input2.name}`); + } + feedDict.add(input2, tensorValue); + } + } + const executeOutputs = execute(outputSymbolicTensors, feedDict); + return outputsIsArray ? executeOutputs : executeOutputs[0]; + } + retrieveSymbolicTensors(symbolicTensorNames) { + const outputSymbolicTensors = pyListRepeat(null, symbolicTensorNames.length); + let outputsRemaining = symbolicTensorNames.length; + for (const layer of this.layers) { + const layerOutputs = Array.isArray(layer.output) ? layer.output : [layer.output]; + const layerOutputNames = layerOutputs.map((output) => output.name); + for (let i = 0; i < symbolicTensorNames.length; ++i) { + const index = layerOutputNames.indexOf(symbolicTensorNames[i]); + if (index !== -1) { + outputSymbolicTensors[i] = layerOutputs[index]; + outputsRemaining--; + } + if (outputsRemaining === 0) { + break; + } + } + if (outputsRemaining === 0) { + break; + } + } + if (outputsRemaining > 0) { + const remainingNames = []; + outputSymbolicTensors.forEach((tensor2, i) => { + if (tensor2 == null) { + remainingNames.push(symbolicTensorNames[i]); + } + }); + throw new ValueError(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(remainingNames)}`); + } + return outputSymbolicTensors; + } + predictLoop(ins, batchSize = 32, verbose = false) { + return tidy(() => { + const numSamples = this.checkNumSamples(ins); + if (verbose) { + throw new NotImplementedError("Verbose predictLoop() is not implemented yet."); + } + const batches = makeBatches(numSamples, batchSize); + const outsBatches = this.outputs.map((output) => []); + for (let batchIndex = 0; batchIndex < batches.length; ++batchIndex) { + const batchOuts = tidy(() => { + const batchStart = batches[batchIndex][0]; + const batchEnd = batches[batchIndex][1]; + const insBatch = sliceArrays(ins, batchStart, batchEnd); + const feeds = []; + if (Array.isArray(insBatch)) { + for (let i = 0; i < insBatch.length; ++i) { + feeds.push({ key: this.inputs[i], value: insBatch[i] }); + } + } else { + feeds.push({ key: this.inputs[0], value: insBatch }); + } + const feedDict = new FeedDict(feeds); + return execute(this.outputs, feedDict); + }); + batchOuts.forEach((batchOut, i) => outsBatches[i].push(batchOut)); + } + return singletonOrArray(outsBatches.map((batches2) => concat(batches2, 0))); + }); + } + predict(x, args = {}) { + const xsRank2OrHigher = ensureTensorsRank2OrHigher(x); + checkInputData(xsRank2OrHigher, this.inputNames, this.feedInputShapes, false); + try { + const batchSize = args.batchSize == null ? 32 : args.batchSize; + checkBatchSize(batchSize); + return this.predictLoop(xsRank2OrHigher, batchSize); + } finally { + disposeNewTensors(xsRank2OrHigher, x); + } + } + predictOnBatch(x) { + checkInputData(x, this.inputNames, this.feedInputShapes, true); + const batchSize = (Array.isArray(x) ? x[0] : x).shape[0]; + return this.predictLoop(x, batchSize); + } + standardizeUserDataXY(x, y, checkBatchAxis = true, batchSize) { + if (this.optimizer_ == null) { + throw new RuntimeError("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs)."); + } + const outputShapes = []; + for (let i = 0; i < this.feedOutputShapes.length; ++i) { + const outputShape = this.feedOutputShapes[i]; + const lossFn = this.feedLossFns[i]; + if (lossFn === sparseCategoricalCrossentropy) { + outputShapes.push(outputShape.slice(0, outputShape.length - 1).concat([1])); + } else { + outputShapes.push(outputShape); + } + } + x = standardizeInputData(x, this.feedInputNames, this.feedInputShapes, false, "input"); + y = standardizeInputData(y, this.feedOutputNames, outputShapes, false, "target"); + checkArrayLengths(x, y, null); + checkLossAndTargetCompatibility(y, this.feedLossFns, this.feedOutputShapes); + if (this.stateful && batchSize != null && batchSize > 0) { + if (x[0].shape[0] % batchSize !== 0) { + throw new ValueError(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${batchSize}. Found: ${x[0].shape[0]} sample(s).`); + } + } + return [x, y]; + } + async standardizeUserData(x, y, sampleWeight, classWeight, checkBatchAxis = true, batchSize) { + const [standardXs, standardYs] = this.standardizeUserDataXY(x, y, checkBatchAxis, batchSize); + if (sampleWeight != null) { + throw new Error("sample weight is not supported yet."); + } + let standardSampleWeights = null; + if (classWeight != null) { + const classWeights = standardizeClassWeights(classWeight, this.outputNames); + standardSampleWeights = []; + for (let i = 0; i < classWeights.length; ++i) { + standardSampleWeights.push(await standardizeWeights(standardYs[i], null, classWeights[i])); + } + } + return [standardXs, standardYs, standardSampleWeights]; + } + testLoop(f, ins, batchSize, verbose = 0, steps) { + return tidy(() => { + const numSamples = this.checkNumSamples(ins, batchSize, steps, "steps"); + const outs = []; + if (verbose > 0) { + throw new NotImplementedError("Verbose mode is not implemented yet."); + } + if (steps != null) { + throw new NotImplementedError("steps mode in testLoop() is not implemented yet"); + } else { + const batches = makeBatches(numSamples, batchSize); + const indexArray = tensor1d(range2(0, numSamples)); + for (let batchIndex = 0; batchIndex < batches.length; ++batchIndex) { + const batchStart = batches[batchIndex][0]; + const batchEnd = batches[batchIndex][1]; + const batchIds = sliceAlongFirstAxis(indexArray, batchStart, batchEnd - batchStart); + const insBatch = sliceArraysByIndices(ins, batchIds); + const batchOuts = f(insBatch); + if (batchIndex === 0) { + for (let i = 0; i < batchOuts.length; ++i) { + outs.push(scalar(0)); + } + } + for (let i = 0; i < batchOuts.length; ++i) { + const batchOut = batchOuts[i]; + outs[i] = add2(outs[i], mul(batchEnd - batchStart, batchOut)); + } + } + for (let i = 0; i < outs.length; ++i) { + outs[i] = div(outs[i], numSamples); + } + } + return outs; + }); + } + getDedupedMetricsNames() { + const outLabels = this.metricsNames; + const dedupedOutLabels = []; + for (let i = 0; i < outLabels.length; ++i) { + const label = outLabels[i]; + let newLabel = label; + if (count(outLabels, label) > 1) { + const dupIndex = count(outLabels.slice(0, i), label); + newLabel += `_${dupIndex}`; + } + dedupedOutLabels.push(newLabel); + } + return dedupedOutLabels; + } + makeTrainFunction() { + return (data) => { + const lossValues = []; + const inputs = data.slice(0, this.inputs.length); + const targets = data.slice(this.inputs.length, this.inputs.length + this.outputs.length); + const sampleWeights = data.slice(this.inputs.length + this.outputs.length, this.inputs.length + this.outputs.length * 2); + const metricsValues = []; + const totalLossFunction = () => { + const feeds = []; + for (let i = 0; i < this.inputs.length; ++i) { + feeds.push({ key: this.inputs[i], value: inputs[i] }); + } + const feedDict = new FeedDict(feeds); + const outputs = execute(this.outputs, feedDict, { "training": true }); + let totalLoss; + for (let i = 0; i < this.lossFunctions.length; ++i) { + const lossFunction = this.lossFunctions[i]; + let loss = lossFunction(targets[i], outputs[i]); + if (sampleWeights[i] != null) { + loss = computeWeightedLoss(loss, sampleWeights[i]); + } + const meanLoss = mean(loss); + lossValues.push(meanLoss); + if (i === 0) { + totalLoss = loss; + } else { + totalLoss = add2(totalLoss, loss); + } + } + for (let i = 0; i < this.metricsTensors.length; ++i) { + let weightedMetric; + if (this.outputs.length > 1 && i < this.outputs.length) { + weightedMetric = lossValues[i]; + } else { + const metric = this.metricsTensors[i][0]; + const outputIndex = this.metricsTensors[i][1]; + weightedMetric = mean(metric(targets[outputIndex], outputs[outputIndex])); + } + keep(weightedMetric); + metricsValues.push(weightedMetric); + } + totalLoss = mean(totalLoss); + this.calculateLosses().forEach((regularizerLoss) => { + totalLoss = add2(totalLoss, regularizerLoss); + }); + return totalLoss; + }; + const variables = this.collectedTrainableWeights.map((param) => param.read()); + const returnCost = true; + const totalLossValue = this.optimizer_.minimize(totalLossFunction, returnCost, variables); + return [totalLossValue].concat(metricsValues); + }; + } + makeTestFunction() { + this.testFunction = (data) => { + return tidy(() => { + const valOutputs = []; + let totalLoss; + const inputs = data.slice(0, this.inputs.length); + const targets = data.slice(this.inputs.length, this.inputs.length + this.outputs.length); + const feeds = []; + for (let i = 0; i < this.inputs.length; ++i) { + feeds.push({ key: this.inputs[i], value: inputs[i] }); + } + const feedDict = new FeedDict(feeds); + const outputs = execute(this.outputs, feedDict); + for (let i = 0; i < this.lossFunctions.length; ++i) { + const lossFunction = this.lossFunctions[i]; + const loss = mean(lossFunction(targets[i], outputs[i])); + if (i === 0) { + totalLoss = loss; + } else { + totalLoss = add2(totalLoss, loss); + } + valOutputs.push(totalLoss); + } + for (let i = 0; i < this.metricsTensors.length; ++i) { + const metric = this.metricsTensors[i][0]; + const outputIndex = this.metricsTensors[i][1]; + const meanMetric = mean(metric(targets[outputIndex], outputs[outputIndex])); + valOutputs.push(meanMetric); + } + return valOutputs; + }); + }; + } + async fit(x, y, args = {}) { + return fitTensors(this, x, y, args); + } + async fitDataset(dataset, args) { + return fitDataset(this, dataset, args); + } + async trainOnBatch(x, y) { + const standardizeOut = await this.standardizeUserData(x, y); + const inputs = standardizeOut[0]; + const targets = standardizeOut[1]; + const trainFunction = this.makeTrainFunction(); + const losses = trainFunction(inputs.concat(targets)); + const lossValues = []; + for (const loss of losses) { + const v = await loss.data(); + lossValues.push(v[0]); + } + dispose(losses); + disposeNewTensors(standardizeOut[0], x); + disposeNewTensors(standardizeOut[1], y); + return singletonOrArray(lossValues); + } + getNamedWeights(config) { + const namedWeights = []; + const trainableOnly = config != null && config.trainableOnly; + const weights = trainableOnly ? this.trainableWeights : this.weights; + const weightValues = this.getWeights(trainableOnly); + for (let i = 0; i < weights.length; ++i) { + if (trainableOnly && !weights[i].trainable) { + continue; + } + namedWeights.push({ name: weights[i].originalName, tensor: weightValues[i] }); + } + return namedWeights; + } + set stopTraining(stop) { + this.stopTraining_ = stop; + } + get stopTraining() { + return this.stopTraining_; + } + get optimizer() { + return this.optimizer_; + } + set optimizer(optimizer) { + if (this.optimizer_ !== optimizer) { + this.optimizer_ = optimizer; + this.isOptimizerOwned = false; + } + } + dispose() { + const result = super.dispose(); + if (result.refCountAfterDispose === 0 && this.optimizer != null && this.isOptimizerOwned) { + const numTensorsBeforeOptmizerDisposal = memory().numTensors; + this.optimizer_.dispose(); + result.numDisposedVariables += numTensorsBeforeOptmizerDisposal - memory().numTensors; + } + return result; + } + getLossIdentifiers() { + let lossNames; + if (typeof this.loss === "string") { + lossNames = toSnakeCase(this.loss); + } else if (Array.isArray(this.loss)) { + for (const loss of this.loss) { + if (typeof loss !== "string") { + throw new Error("Serialization of non-string loss is not supported."); + } + } + lossNames = this.loss.map((name) => toSnakeCase(name)); + } else { + const outputNames = Object.keys(this.loss); + lossNames = {}; + const losses = this.loss; + for (const outputName of outputNames) { + if (typeof losses[outputName] === "string") { + lossNames[outputName] = toSnakeCase(losses[outputName]); + } else { + throw new Error("Serialization of non-string loss is not supported."); + } + } + } + return lossNames; + } + getMetricIdentifiers() { + if (typeof this.metrics === "string" || typeof this.metrics === "function") { + return [toSnakeCase(getLossOrMetricName(this.metrics))]; + } else if (Array.isArray(this.metrics)) { + return this.metrics.map((metric) => toSnakeCase(getLossOrMetricName(metric))); + } else { + const metricsIdentifiers = {}; + for (const key in this.metrics) { + metricsIdentifiers[key] = toSnakeCase(getLossOrMetricName(this.metrics[key])); + } + return metricsIdentifiers; + } + } + getTrainingConfig() { + return { + loss: this.getLossIdentifiers(), + metrics: this.getMetricIdentifiers(), + optimizer_config: { + class_name: this.optimizer.getClassName(), + config: this.optimizer.getConfig() + } + }; + } + loadTrainingConfig(trainingConfig) { + if (trainingConfig.weighted_metrics != null) { + throw new Error("Loading weight_metrics is not supported yet."); + } + if (trainingConfig.loss_weights != null) { + throw new Error("Loading loss_weights is not supported yet."); + } + if (trainingConfig.sample_weight_mode != null) { + throw new Error("Loading sample_weight_mode is not supported yet."); + } + const tsConfig = convertPythonicToTs(trainingConfig.optimizer_config); + const optimizer = deserialize(tsConfig); + let loss; + if (typeof trainingConfig.loss === "string") { + loss = toCamelCase(trainingConfig.loss); + } else if (Array.isArray(trainingConfig.loss)) { + loss = trainingConfig.loss.map((lossEntry) => toCamelCase(lossEntry)); + } else if (trainingConfig.loss != null) { + loss = {}; + for (const key in trainingConfig.loss) { + loss[key] = toCamelCase(trainingConfig.loss[key]); + } + } + let metrics; + if (Array.isArray(trainingConfig.metrics)) { + metrics = trainingConfig.metrics.map((metric) => toCamelCase(metric)); + } else if (trainingConfig.metrics != null) { + metrics = {}; + for (const key in trainingConfig.metrics) { + metrics[key] = toCamelCase(trainingConfig.metrics[key]); + } + } + this.compile({ loss, metrics, optimizer }); + } + async save(handlerOrURL, config) { + if (typeof handlerOrURL === "string") { + const handlers = io_exports.getSaveHandlers(handlerOrURL); + if (handlers.length === 0) { + throw new ValueError(`Cannot find any save handlers for URL '${handlerOrURL}'`); + } else if (handlers.length > 1) { + throw new ValueError(`Found more than one (${handlers.length}) save handlers for URL '${handlerOrURL}'`); + } + handlerOrURL = handlers[0]; + } + if (handlerOrURL.save == null) { + throw new ValueError("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined."); + } + const weightDataAndSpecs = await io_exports.encodeWeights(this.getNamedWeights(config)); + const returnString = false; + const unusedArg = null; + const modelConfig = this.toJSON(unusedArg, returnString); + const modelArtifacts = { + modelTopology: modelConfig, + format: LAYERS_MODEL_FORMAT_NAME, + generatedBy: `TensorFlow.js tfjs-layers v${version}`, + convertedBy: null + }; + const includeOptimizer = config == null ? false : config.includeOptimizer; + if (includeOptimizer && this.optimizer != null) { + modelArtifacts.trainingConfig = this.getTrainingConfig(); + const weightType = "optimizer"; + const { data: optimizerWeightData, specs: optimizerWeightSpecs } = await io_exports.encodeWeights(await this.optimizer.getWeights(), weightType); + weightDataAndSpecs.specs.push(...optimizerWeightSpecs); + weightDataAndSpecs.data = io_exports.concatenateArrayBuffers([weightDataAndSpecs.data, optimizerWeightData]); + } + if (this.userDefinedMetadata != null) { + const checkSize = true; + checkUserDefinedMetadata(this.userDefinedMetadata, this.name, checkSize); + modelArtifacts.userDefinedMetadata = this.userDefinedMetadata; + } + modelArtifacts.weightData = weightDataAndSpecs.data; + modelArtifacts.weightSpecs = weightDataAndSpecs.specs; + return handlerOrURL.save(modelArtifacts); + } + setUserDefinedMetadata(userDefinedMetadata) { + checkUserDefinedMetadata(userDefinedMetadata, this.name); + this.userDefinedMetadata = userDefinedMetadata; + } + getUserDefinedMetadata() { + return this.userDefinedMetadata; + } + }; + LayersModel.className = "Model"; + serialization_exports.registerClass(LayersModel); + var Functional = class extends LayersModel { + }; + Functional.className = "Functional"; + serialization_exports.registerClass(Functional); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/models.js + init_define_BUILD_VERSION(); + async function loadLayersModelInternal(pathOrIOHandler, options) { + if (options == null) { + options = {}; + } + if (typeof pathOrIOHandler === "string") { + const handlers = io_exports.getLoadHandlers(pathOrIOHandler, options); + if (handlers.length === 0) { + handlers.push(io_exports.browserHTTPRequest(pathOrIOHandler, options)); + } else if (handlers.length > 1) { + throw new ValueError(`Found more than one (${handlers.length}) load handlers for URL '${pathOrIOHandler}'`); + } + pathOrIOHandler = handlers[0]; + } + return loadLayersModelFromIOHandler(pathOrIOHandler, void 0, options); + } + async function loadLayersModelFromIOHandler(handler, customObjects, options) { + if (options == null) { + options = {}; + } + if (handler.load == null) { + throw new ValueError("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented."); + } + const artifacts = await handler.load(); + let modelTopology = artifacts.modelTopology; + if (modelTopology["model_config"] != null) { + modelTopology = modelTopology["model_config"]; + } + const strict = options.strict == null ? true : options.strict; + const fastWeightInit = artifacts.weightData != null && artifacts.weightSpecs != null && strict; + const model3 = deserialize(convertPythonicToTs(modelTopology), customObjects, fastWeightInit); + const trainingConfig = artifacts.trainingConfig; + if (trainingConfig != null) { + model3.loadTrainingConfig(trainingConfig); + } + if (artifacts.userDefinedMetadata != null) { + model3.setUserDefinedMetadata(artifacts.userDefinedMetadata); + } + if (artifacts.weightData != null) { + if (artifacts.weightSpecs == null) { + throw new ValueError("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed."); + } + const { modelWeights, optimizerWeights } = decodeModelAndOptimizerWeights(artifacts.weightData, artifacts.weightSpecs); + model3.loadWeights(modelWeights, strict); + if (model3.optimizer != null && optimizerWeights.length > 0) { + await model3.optimizer.setWeights(optimizerWeights); + } + dispose(modelWeights); + dispose(optimizerWeights.map((w) => w.tensor)); + } + return model3; + } + function decodeModelAndOptimizerWeights(buffer2, specs) { + const name2Tensor = io_exports.decodeWeights(buffer2, specs); + const modelWeights = {}; + const optimizerWeights = []; + specs.forEach((spec) => { + if (spec.group === "optimizer") { + optimizerWeights.push({ name: spec.name, tensor: name2Tensor[spec.name] }); + } else { + modelWeights[spec.name] = name2Tensor[spec.name]; + } + }); + return { modelWeights, optimizerWeights }; + } + var Sequential = class extends LayersModel { + constructor(args) { + super({ inputs: [], outputs: [] }); + args = args || {}; + this.trainable = true; + this.built = false; + this.name = args.name != null ? args.name : getUid("sequential_"); + if (args.layers != null) { + for (const layer of args.layers) { + this.add(layer); + } + } + } + checkShape(layer) { + const shape = layer.inboundNodes[0].outputTensors[0].shape; + if (shape.some((x) => x < 0)) { + throw new ValueError(`Negative dimension size caused by adding layer ${layer.name} with input shape [${layer.inboundNodes[0].inputTensors[0].shape}]`); + } + } + add(layer) { + const isLayerModelInstance = layer instanceof Sequential || layer instanceof LayersModel; + let modelLayer; + if (isLayerModelInstance) { + modelLayer = layer; + if (modelLayer.outputs.length !== 1) { + throw new ValueError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API."); + } + if (modelLayer.inputs.length !== 1) { + throw new ValueError("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API."); + } + } + if (this.outputs.length === 0) { + if (layer.inboundNodes.length === 0) { + if (layer.batchInputShape == null) { + throw new ValueError("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument."); + } + const x = Input({ + batchShape: layer.batchInputShape, + dtype: layer.dtype, + name: layer.name + "_input" + }); + layer.apply(x); + } + if (isLayerModelInstance) { + this.outputs = modelLayer.outputs; + this.inputs = modelLayer.inputs; + } else { + if (layer.inboundNodes.length !== 1) { + throw new ValueError(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${layer.name} which has ${layer.inboundNodes.length} pre-existing inbound connections.`); + } + if (layer.inboundNodes[0].outputTensors.length !== 1) { + throw new ValueError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API."); + } + this.checkShape(layer); + this.outputs = [layer.inboundNodes[0].outputTensors[0]]; + this.inputs = getSourceInputs(this.outputs[0]); + } + this.inboundNodes = []; + new Node({ + outboundLayer: this, + inboundLayers: [], + nodeIndices: [], + tensorIndices: [], + inputTensors: this.inputs, + outputTensors: this.outputs, + inputMasks: pyListRepeat(null, this.inputs.length), + outputMasks: [null], + inputShapes: this.inputs.map((x) => x.shape), + outputShapes: this.outputs[0].shape + }); + } else { + const outputTensor = layer.apply(this.outputs[0]); + if (Array.isArray(outputTensor)) { + throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API."); + } + this.checkShape(layer); + this.outputs = [outputTensor]; + this.inboundNodes[0].outputTensors = this.outputs; + this.inboundNodes[0].outputShapes = [this.outputs[0].shape]; + } + this.layers.push(layer); + this.built = false; + } + pop() { + if (this.layers.length === 0) { + throw new TypeError("There are no layers in the model."); + } + this.layers.pop(); + if (this.layers.length === 0) { + this.outputs = []; + this.inboundNodes = []; + this.outboundNodes = []; + } else { + const lastLayerIndex = this.layers.length - 1; + this.layers[lastLayerIndex].outboundNodes = []; + this.outputs = [this.layers[lastLayerIndex].output]; + this.inboundNodes[0].outputTensors = this.outputs; + this.inboundNodes[0].outputShapes = [this.outputs[0].shape]; + } + } + call(inputs, kwargs) { + if (this.model == null) { + this.build(); + } + return this.model.call(inputs, kwargs); + } + build(inputShape) { + getExactlyOneShape(inputShape); + if (this.inputs.length === 0 || this.outputs.length === 0) { + throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first."); + } + this.model = new LayersModel({ + inputs: this.inputs, + outputs: this.outputs[0], + name: this.name + "_model" + }); + this.model.trainable = this.trainable; + this.supportsMasking = this.model.supportsMasking; + this.inputLayers = this.model.inputLayers; + this.inputLayersNodeIndices = this.model.inputLayersNodeIndices; + this.inputLayersTensorIndices = this.model.inputLayersTensorIndices; + this.outputLayers = this.model.outputLayers; + this.outputLayersNodeIndices = this.model.outputLayersNodeIndices; + this.outputLayersTensorIndices = this.model.outputLayersTensorIndices; + this.nodesByDepth = this.model.nodesByDepth; + this.containerNodes = this.model.containerNodes; + this.outputNames = this.model.outputNames; + this.inputNames = this.model.inputNames; + this.built = true; + } + countParams() { + if (!this.built) { + this.build(); + } + return super.countParams(); + } + summary(lineLength, positions, printFn = console.log) { + if (!this.built) { + this.build(); + } + super.summary(lineLength, positions, printFn); + } + setWeights(weights) { + if (this.model == null) { + this.build(); + } + this.model.setWeights(weights); + } + evaluate(x, y, args = {}) { + if (!this.built) { + throw new RuntimeError("The model needs to be compiled before being used."); + } + return this.model.evaluate(x, y, args); + } + async evaluateDataset(dataset, args) { + if (!this.built) { + throw new RuntimeError("The model needs to be compiled before being used."); + } + return this.model.evaluateDataset(dataset, args); + } + predict(x, args = {}) { + if (this.model == null) { + this.build(); + } + return this.model.predict(x, args); + } + predictOnBatch(x) { + if (this.model == null) { + this.build(); + } + return this.model.predictOnBatch(x); + } + compile(args) { + this.build(); + this.model.compile(args); + this.optimizer_ = this.model.optimizer; + this.isOptimizerOwned = this.model.isOptimizerOwned; + this.loss = this.model.loss; + this.metrics = this.model.metrics; + this.metricsTensors = this.model.metricsTensors; + this.metricsNames = this.model.metricsNames; + } + get optimizer() { + return this.model == null ? void 0 : this.model.optimizer; + } + set optimizer(optimizer) { + this.model.optimizer = optimizer; + } + async fit(x, y, args = {}) { + if (!this.built) { + throw new RuntimeError("The model needs to be compiled before being used."); + } + return this.model.fit(x, y, args); + } + async fitDataset(dataset, args) { + if (!this.built) { + throw new RuntimeError("The model needs to be compiled before being used."); + } + return this.model.fitDataset(dataset, args); + } + async trainOnBatch(x, y) { + return this.model.trainOnBatch(x, y); + } + static fromConfig(cls, config, customObjects = {}, fastWeightInit = false) { + let configArray; + let extraModelConfig = {}; + if (config instanceof Array) { + if (!(config[0].className != null) || config[0]["className"] === "Merge") { + throw new ValueError("Legacy serialization format not supported yet."); + } + configArray = config; + } else { + util_exports.assert(config["layers"] != null, () => `When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field.`); + configArray = config["layers"]; + delete config["layers"]; + extraModelConfig = config; + } + const model3 = new cls(extraModelConfig); + if (!(model3 instanceof Sequential)) { + throw new NotImplementedError(`Sequential.fromConfig called on non-Sequential input: ${model3}`); + } + for (const conf of configArray) { + const customObjects2 = void 0; + const layer = deserialize(conf, customObjects2, fastWeightInit); + if (fastWeightInit) { + layer.setFastWeightInitDuringBuild(true); + } + model3.add(layer); + } + return model3; + } + set stopTraining(stop) { + if (this.model == null) { + throw new ValueError("Cannot set the stopTraining property of a sequential model before it is compiled."); + } + this.model.stopTraining = stop; + } + get stopTraining() { + if (this.model == null) { + throw new ValueError("Cannot get the stopTraining property of a sequential model before it is compiled."); + } + return this.model.stopTraining; + } + getConfig() { + const layers = []; + for (const layer of this.layers) { + const dict = {}; + dict["className"] = layer.getClassName(); + dict["config"] = layer.getConfig(); + layers.push(dict); + } + return { name: this.name, layers }; + } + }; + Sequential.className = "Sequential"; + serialization_exports.registerClass(Sequential); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports.js + function loadLayersModel(pathOrIOHandler, options) { + if (options == null) { + options = {}; + } + return loadLayersModelInternal(pathOrIOHandler, options); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/advanced_activations.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/activations.js + init_define_BUILD_VERSION(); + var Activation = class extends serialization_exports.Serializable { + getConfig() { + return {}; + } + }; + var Elu2 = class extends Activation { + apply(x, alpha = 1) { + return elu2(x, alpha); + } + }; + Elu2.className = "elu"; + serialization_exports.registerClass(Elu2); + var Selu2 = class extends Activation { + apply(x) { + return selu(x); + } + }; + Selu2.className = "selu"; + serialization_exports.registerClass(Selu2); + var Relu2 = class extends Activation { + apply(x) { + return relu(x); + } + }; + Relu2.className = "relu"; + serialization_exports.registerClass(Relu2); + var Relu62 = class extends Activation { + apply(x) { + return tidy(() => minimum(6, relu(x))); + } + }; + Relu62.className = "relu6"; + serialization_exports.registerClass(Relu62); + var Linear = class extends Activation { + apply(x) { + return x; + } + }; + Linear.className = "linear"; + serialization_exports.registerClass(Linear); + var Sigmoid2 = class extends Activation { + apply(x) { + return sigmoid(x); + } + }; + Sigmoid2.className = "sigmoid"; + serialization_exports.registerClass(Sigmoid2); + var HardSigmoid = class extends Activation { + apply(x) { + return hardSigmoid(x); + } + }; + HardSigmoid.className = "hardSigmoid"; + serialization_exports.registerClass(HardSigmoid); + var Softplus2 = class extends Activation { + apply(x) { + return softplus(x); + } + }; + Softplus2.className = "softplus"; + serialization_exports.registerClass(Softplus2); + var Softsign = class extends Activation { + apply(x) { + return softsign(x); + } + }; + Softsign.className = "softsign"; + serialization_exports.registerClass(Softsign); + var Tanh2 = class extends Activation { + apply(x) { + return tanh2(x); + } + }; + Tanh2.className = "tanh"; + serialization_exports.registerClass(Tanh2); + var Softmax2 = class extends Activation { + apply(x, axis = -1) { + return softmax(x, axis); + } + }; + Softmax2.className = "softmax"; + serialization_exports.registerClass(Softmax2); + var LogSoftmax2 = class extends Activation { + apply(x, axis = -1) { + return logSoftmax(x, axis); + } + }; + LogSoftmax2.className = "logSoftmax"; + serialization_exports.registerClass(LogSoftmax2); + var Swish = class extends Activation { + apply(x, alpha = 1) { + return tidy(() => mul(sigmoid(mul(x, alpha)), x)); + } + }; + Swish.className = "swish"; + serialization_exports.registerClass(Swish); + var Mish = class extends Activation { + apply(x) { + return tidy(() => mul(x, tanh2(softplus(x)))); + } + }; + Mish.className = "mish"; + serialization_exports.registerClass(Mish); + function serializeActivation(activation) { + return activation.getClassName(); + } + function deserializeActivation(config, customObjects = {}) { + return deserializeKerasObject(config, serialization_exports.SerializationMap.getMap().classNameMap, customObjects, "activation"); + } + function getActivation(identifier) { + if (identifier == null) { + const config = {}; + config["className"] = "linear"; + config["config"] = {}; + return deserializeActivation(config); + } + if (typeof identifier === "string") { + const config = {}; + config["className"] = identifier; + config["config"] = {}; + return deserializeActivation(config); + } else if (identifier instanceof Activation) { + return identifier; + } else { + return deserializeActivation(identifier); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/regularizers.js + init_define_BUILD_VERSION(); + function assertObjectArgs(args) { + if (args != null && typeof args !== "object") { + throw new Error(`Argument to L1L2 regularizer's constructor is expected to be an object, but received: ${args}`); + } + } + var Regularizer = class extends serialization_exports.Serializable { + }; + var L1L2 = class extends Regularizer { + constructor(args) { + super(); + assertObjectArgs(args); + this.l1 = args == null || args.l1 == null ? 0.01 : args.l1; + this.l2 = args == null || args.l2 == null ? 0.01 : args.l2; + this.hasL1 = this.l1 !== 0; + this.hasL2 = this.l2 !== 0; + } + apply(x) { + return tidy(() => { + let regularization = zeros([1]); + if (this.hasL1) { + regularization = add2(regularization, sum2(mul(this.l1, abs(x)))); + } + if (this.hasL2) { + regularization = add2(regularization, sum2(mul(this.l2, square2(x)))); + } + return reshape(regularization, []); + }); + } + getConfig() { + return { "l1": this.l1, "l2": this.l2 }; + } + static fromConfig(cls, config) { + return new cls({ l1: config["l1"], l2: config["l2"] }); + } + }; + L1L2.className = "L1L2"; + serialization_exports.registerClass(L1L2); + var REGULARIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP = { + "l1l2": "L1L2" + }; + function serializeRegularizer(constraint) { + return serializeKerasObject(constraint); + } + function deserializeRegularizer(config, customObjects = {}) { + return deserializeKerasObject(config, serialization_exports.SerializationMap.getMap().classNameMap, customObjects, "regularizer"); + } + function getRegularizer(identifier) { + if (identifier == null) { + return null; + } + if (typeof identifier === "string") { + const className = identifier in REGULARIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP ? REGULARIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP[identifier] : identifier; + const config = { className, config: {} }; + return deserializeRegularizer(config); + } else if (identifier instanceof Regularizer) { + return identifier; + } else { + return deserializeRegularizer(identifier); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/advanced_activations.js + var ReLU = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.supportsMasking = true; + if (args != null) { + this.maxValue = args.maxValue; + } + } + call(inputs, kwargs) { + inputs = getExactlyOneTensor(inputs); + let output = relu(inputs); + if (this.maxValue != null) { + output = clipByValue(output, 0, this.maxValue); + } + return output; + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const config = { maxValue: this.maxValue }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + ReLU.className = "ReLU"; + serialization_exports.registerClass(ReLU); + var LeakyReLU = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.DEFAULT_ALPHA = 0.3; + if (args == null) { + args = {}; + } + this.alpha = args.alpha == null ? this.DEFAULT_ALPHA : args.alpha; + } + call(inputs, kwargs) { + const x = getExactlyOneTensor(inputs); + return leakyRelu(x, this.alpha); + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const config = { alpha: this.alpha }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + LeakyReLU.className = "LeakyReLU"; + serialization_exports.registerClass(LeakyReLU); + var PReLU = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.DEFAULT_ALPHA_INITIALIZER = "zeros"; + if (args == null) { + args = {}; + } + this.supportsMasking = true; + this.alphaInitializer = getInitializer(args.alphaInitializer || this.DEFAULT_ALPHA_INITIALIZER); + this.alphaRegularizer = getRegularizer(args.alphaRegularizer); + this.alphaConstraint = getConstraint(args.alphaConstraint); + if (args.sharedAxes == null) { + this.sharedAxes = null; + } else if (Array.isArray(args.sharedAxes)) { + this.sharedAxes = args.sharedAxes; + } else if (typeof args.sharedAxes === "number") { + this.sharedAxes = [args.sharedAxes]; + } else { + throw new ValueError(`Expected sharedAxes to be a number or an array of numbers, but got ${args.sharedAxes}`); + } + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const paramShape = inputShape.slice(1); + if (this.sharedAxes != null) { + for (const i of this.sharedAxes) { + paramShape[i - 1] = 1; + } + } + this.alpha = this.addWeight("alpha", paramShape, "float32", this.alphaInitializer, this.alphaRegularizer, true, this.alphaConstraint); + const axes = {}; + if (this.sharedAxes != null) { + for (let i = 1; i < inputShape.length; ++i) { + axes[i] = inputShape[i]; + } + } + this.inputSpec = [new InputSpec({ + ndim: inputShape.length, + axes + })]; + this.built = true; + } + call(inputs, kwargs) { + inputs = getExactlyOneTensor(inputs); + return prelu(inputs, this.alpha.read()); + } + getConfig() { + const config = { + alphaInitializer: serializeInitializer(this.alphaInitializer), + alphaRegularizer: serializeRegularizer(this.alphaRegularizer), + alphaConstraint: serializeConstraint(this.alphaConstraint), + sharedAxes: this.sharedAxes + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + PReLU.className = "PReLU"; + serialization_exports.registerClass(PReLU); + var ELU = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.DEFAULT_ALPHA = 1; + if (args == null) { + args = {}; + } + if (args.alpha != null && args.alpha !== this.DEFAULT_ALPHA) { + throw new NotImplementedError(`Non-default alpha value (${args.alpha}) is not supported by the ELU layer yet.`); + } + this.alpha = args.alpha == null ? this.DEFAULT_ALPHA : args.alpha; + } + call(inputs, kwargs) { + const x = getExactlyOneTensor(inputs); + return elu(x); + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const config = { alpha: this.alpha }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + ELU.className = "ELU"; + serialization_exports.registerClass(ELU); + var ThresholdedReLU = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.DEFAULT_THETA = 1; + if (args == null) { + args = {}; + } + this.theta = args.theta == null ? this.DEFAULT_THETA : args.theta; + } + call(inputs, kwargs) { + const x = getExactlyOneTensor(inputs); + return mul(x, cast(greater(x, this.theta), "float32")); + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const config = { theta: this.theta }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + ThresholdedReLU.className = "ThresholdedReLU"; + serialization_exports.registerClass(ThresholdedReLU); + var Softmax3 = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.DEFAULT_AXIS = 1; + if (args == null) { + args = {}; + } + this.softmax = new Softmax2().apply; + this.axis = args.axis == null ? this.DEFAULT_AXIS : args.axis; + } + call(inputs, kwargs) { + const x = getExactlyOneTensor(inputs); + return this.softmax(x, this.axis); + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const config = { axis: this.axis }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Softmax3.className = "Softmax"; + serialization_exports.registerClass(Softmax3); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/utils/conv_utils.js + init_define_BUILD_VERSION(); + function normalizeArray(value, n, name) { + if (typeof value === "number") { + return pyListRepeat(value, n); + } else { + if (value.length !== n) { + throw new ValueError(`The ${name} argument must be an integer or tuple of ${n} integers. Received: ${value.length} elements.`); + } + for (let i = 0; i < n; ++i) { + const singleValue = value[i]; + if (!isInteger(singleValue)) { + throw new ValueError(`The ${name} argument must be an integer or tuple of ${n} integers. Received: ${JSON.stringify(value)} including a non-integer number ${singleValue}`); + } + } + return value; + } + } + function convOutputLength(inputLength, filterSize, padding, stride, dilation = 1) { + if (inputLength == null) { + return inputLength; + } + const dilatedFilterSize = filterSize + (filterSize - 1) * (dilation - 1); + let outputLength; + if (padding === "same") { + outputLength = inputLength; + } else { + outputLength = inputLength - dilatedFilterSize + 1; + } + return Math.floor((outputLength + stride - 1) / stride); + } + function deconvLength(dimSize, strideSize, kernelSize, padding) { + if (dimSize == null) { + return null; + } + if (padding === "valid") { + dimSize = dimSize * strideSize + max2([kernelSize - strideSize, 0]); + } else if (padding === "same") { + dimSize = dimSize * strideSize; + } else { + throw new ValueError(`Unsupport padding mode: ${padding}.`); + } + return dimSize; + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional.js + function preprocessConv2DInput(x, dataFormat) { + return tidy(() => { + checkDataFormat(dataFormat); + if (dataFormat === "channelsFirst") { + return transpose(x, [0, 2, 3, 1]); + } else { + return x; + } + }); + } + function preprocessConv3DInput(x, dataFormat) { + return tidy(() => { + checkDataFormat(dataFormat); + if (dataFormat === "channelsFirst") { + return transpose(x, [0, 2, 3, 4, 1]); + } else { + return x; + } + }); + } + function conv1dWithBias(x, kernel, bias, strides = 1, padding = "valid", dataFormat, dilationRate = 1) { + return tidy(() => { + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + checkDataFormat(dataFormat); + if (x.shape.length !== 3) { + throw new ValueError(`The input of a conv1dWithBias operation should be 3, but is ${x.shape.length} instead.`); + } + if (kernel.shape.length !== 3) { + throw new ValueError(`The kernel for a conv1dWithBias operation should be 3, but is ${kernel.shape.length} instead`); + } + if (bias != null && bias.shape.length !== 1) { + throw new ValueError(`The bias for a conv1dWithBias operation should be 1, but is ${kernel.shape.length} instead`); + } + if (dataFormat === "channelsFirst") { + x = transpose(x, [0, 2, 1]); + } + if (padding === "causal") { + throw new NotImplementedError("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet."); + } + let y = conv1d(x, kernel, strides, padding === "same" ? "same" : "valid", "NWC", dilationRate); + if (bias != null) { + y = biasAdd(y, bias); + } + return y; + }); + } + function conv2dWithBiasActivation(x, kernel, bias, strides = [1, 1], padding = "valid", dataFormat, dilationRate, activation = null) { + return tidy(() => { + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + checkDataFormat(dataFormat); + if (x.rank !== 3 && x.rank !== 4) { + throw new ValueError(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${x.rank}.`); + } + if (kernel.rank !== 3 && kernel.rank !== 4) { + throw new ValueError(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${x.rank}.`); + } + let y = preprocessConv2DInput(x, dataFormat); + if (padding === "causal") { + throw new NotImplementedError("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet."); + } + y = fused_ops_exports.conv2d({ + x: y, + filter: kernel, + strides, + pad: padding === "same" ? "same" : "valid", + dilations: dilationRate, + dataFormat: "NHWC", + bias, + activation + }); + if (dataFormat === "channelsFirst") { + y = transpose(y, [0, 3, 1, 2]); + } + return y; + }); + } + function conv3dWithBias(x, kernel, bias, strides = [1, 1, 1], padding = "valid", dataFormat, dilationRate) { + return tidy(() => { + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + checkDataFormat(dataFormat); + if (x.rank !== 4 && x.rank !== 5) { + throw new ValueError(`conv3dWithBias expects input to be of rank 4 or 5, but received ${x.rank}.`); + } + if (kernel.rank !== 4 && kernel.rank !== 5) { + throw new ValueError(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${x.rank}.`); + } + let y = preprocessConv3DInput(x, dataFormat); + if (padding === "causal") { + throw new NotImplementedError("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet."); + } + y = conv3d(y, kernel, strides, padding === "same" ? "same" : "valid", "NDHWC", dilationRate); + if (bias != null) { + y = biasAdd(y, bias); + } + if (dataFormat === "channelsFirst") { + y = transpose(y, [0, 4, 1, 2, 3]); + } + return y; + }); + } + var BaseConv = class extends Layer { + constructor(rank, args) { + super(args); + this.bias = null; + this.DEFAULT_KERNEL_INITIALIZER = "glorotNormal"; + this.DEFAULT_BIAS_INITIALIZER = "zeros"; + BaseConv.verifyArgs(args); + this.rank = rank; + assertPositiveInteger(this.rank, "rank"); + if (this.rank !== 1 && this.rank !== 2 && this.rank !== 3) { + throw new NotImplementedError(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`); + } + this.kernelSize = normalizeArray(args.kernelSize, rank, "kernelSize"); + this.strides = normalizeArray(args.strides == null ? 1 : args.strides, rank, "strides"); + this.padding = args.padding == null ? "valid" : args.padding; + checkPaddingMode(this.padding); + this.dataFormat = args.dataFormat == null ? "channelsLast" : args.dataFormat; + checkDataFormat(this.dataFormat); + this.activation = getActivation(args.activation); + this.useBias = args.useBias == null ? true : args.useBias; + this.biasInitializer = getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER); + this.biasConstraint = getConstraint(args.biasConstraint); + this.biasRegularizer = getRegularizer(args.biasRegularizer); + this.activityRegularizer = getRegularizer(args.activityRegularizer); + this.dilationRate = normalizeArray(args.dilationRate == null ? 1 : args.dilationRate, rank, "dilationRate"); + if (this.rank === 1 && (Array.isArray(this.dilationRate) && this.dilationRate.length !== 1)) { + throw new ValueError(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`); + } else if (this.rank === 2) { + if (typeof this.dilationRate === "number") { + this.dilationRate = [this.dilationRate, this.dilationRate]; + } else if (this.dilationRate.length !== 2) { + throw new ValueError(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`); + } + } else if (this.rank === 3) { + if (typeof this.dilationRate === "number") { + this.dilationRate = [this.dilationRate, this.dilationRate, this.dilationRate]; + } else if (this.dilationRate.length !== 3) { + throw new ValueError(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`); + } + } + } + static verifyArgs(args) { + assert2("kernelSize" in args, `required key 'kernelSize' not in config`); + if (typeof args.kernelSize !== "number" && !checkArrayTypeAndLength(args.kernelSize, "number", 1, 3)) { + throw new ValueError(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(args.kernelSize)}.`); + } + } + getConfig() { + const config = { + kernelSize: this.kernelSize, + strides: this.strides, + padding: this.padding, + dataFormat: this.dataFormat, + dilationRate: this.dilationRate, + activation: serializeActivation(this.activation), + useBias: this.useBias, + biasInitializer: serializeInitializer(this.biasInitializer), + biasRegularizer: serializeRegularizer(this.biasRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + biasConstraint: serializeConstraint(this.biasConstraint) + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + var Conv = class extends BaseConv { + constructor(rank, args) { + super(rank, args); + this.kernel = null; + Conv.verifyArgs(args); + this.filters = args.filters; + assertPositiveInteger(this.filters, "filters"); + this.kernelInitializer = getInitializer(args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.kernelConstraint = getConstraint(args.kernelConstraint); + this.kernelRegularizer = getRegularizer(args.kernelRegularizer); + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : inputShape.length - 1; + if (inputShape[channelAxis] == null) { + throw new ValueError(`The channel dimension of the input should be defined. Found ${inputShape[channelAxis]}`); + } + const inputDim = inputShape[channelAxis]; + const kernelShape = this.kernelSize.concat([inputDim, this.filters]); + this.kernel = this.addWeight("kernel", kernelShape, null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.filters], null, this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } + this.inputSpec = [{ ndim: this.rank + 2, axes: { [channelAxis]: inputDim } }]; + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + let outputs; + const biasValue = this.bias == null ? null : this.bias.read(); + const fusedActivationName = mapActivationToFusedKernel(this.activation.getClassName()); + if (fusedActivationName != null && this.rank === 2) { + outputs = conv2dWithBiasActivation(inputs, this.kernel.read(), biasValue, this.strides, this.padding, this.dataFormat, this.dilationRate, fusedActivationName); + } else { + if (this.rank === 1) { + outputs = conv1dWithBias(inputs, this.kernel.read(), biasValue, this.strides[0], this.padding, this.dataFormat, this.dilationRate[0]); + } else if (this.rank === 2) { + outputs = conv2dWithBiasActivation(inputs, this.kernel.read(), biasValue, this.strides, this.padding, this.dataFormat, this.dilationRate); + } else if (this.rank === 3) { + outputs = conv3dWithBias(inputs, this.kernel.read(), biasValue, this.strides, this.padding, this.dataFormat, this.dilationRate); + } else { + throw new NotImplementedError("convolutions greater than 3D are not implemented yet."); + } + if (this.activation != null) { + outputs = this.activation.apply(outputs); + } + } + return outputs; + }); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const newSpace = []; + const space = this.dataFormat === "channelsLast" ? inputShape.slice(1, inputShape.length - 1) : inputShape.slice(2); + for (let i = 0; i < space.length; ++i) { + const newDim = convOutputLength(space[i], this.kernelSize[i], this.padding, this.strides[i], typeof this.dilationRate === "number" ? this.dilationRate : this.dilationRate[i]); + newSpace.push(newDim); + } + let outputShape = [inputShape[0]]; + if (this.dataFormat === "channelsLast") { + outputShape = outputShape.concat(newSpace); + outputShape.push(this.filters); + } else { + outputShape.push(this.filters); + outputShape = outputShape.concat(newSpace); + } + return outputShape; + } + getConfig() { + const config = { + filters: this.filters, + kernelInitializer: serializeInitializer(this.kernelInitializer), + kernelRegularizer: serializeRegularizer(this.kernelRegularizer), + kernelConstraint: serializeConstraint(this.kernelConstraint) + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + static verifyArgs(args) { + if (!("filters" in args) || typeof args.filters !== "number" || args.filters < 1) { + throw new ValueError(`Convolution layer expected config.filters to be a 'number' > 0 but got ${JSON.stringify(args.filters)}`); + } + } + }; + var Conv2D2 = class extends Conv { + constructor(args) { + super(2, args); + Conv2D2.verifyArgs(args); + } + getConfig() { + const config = super.getConfig(); + delete config["rank"]; + return config; + } + static verifyArgs(args) { + if (typeof args.kernelSize !== "number" && !checkArrayTypeAndLength(args.kernelSize, "number", 1, 2)) { + throw new ValueError(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(args.kernelSize)}.`); + } + } + }; + Conv2D2.className = "Conv2D"; + serialization_exports.registerClass(Conv2D2); + var Conv3D2 = class extends Conv { + constructor(args) { + super(3, args); + Conv3D2.verifyArgs(args); + } + getConfig() { + const config = super.getConfig(); + delete config["rank"]; + return config; + } + static verifyArgs(args) { + if (typeof args.kernelSize !== "number") { + if (!(Array.isArray(args.kernelSize) && (args.kernelSize.length === 1 || args.kernelSize.length === 3))) { + throw new ValueError(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(args.kernelSize)}.`); + } + } + } + }; + Conv3D2.className = "Conv3D"; + serialization_exports.registerClass(Conv3D2); + var Conv2DTranspose = class extends Conv2D2 { + constructor(args) { + super(args); + this.inputSpec = [new InputSpec({ ndim: 4 })]; + if (this.padding !== "same" && this.padding !== "valid") { + throw new ValueError(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`); + } + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (inputShape.length !== 4) { + throw new ValueError("Input should have rank 4; Received input shape: " + JSON.stringify(inputShape)); + } + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : inputShape.length - 1; + if (inputShape[channelAxis] == null) { + throw new ValueError("The channel dimension of the inputs should be defined. Found `None`."); + } + const inputDim = inputShape[channelAxis]; + const kernelShape = this.kernelSize.concat([this.filters, inputDim]); + this.kernel = this.addWeight("kernel", kernelShape, "float32", this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.filters], "float32", this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } + this.inputSpec = [new InputSpec({ ndim: 4, axes: { [channelAxis]: inputDim } })]; + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + let input2 = getExactlyOneTensor(inputs); + if (input2.shape.length !== 4) { + throw new ValueError(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${input2.shape.length}`); + } + const inputShape = input2.shape; + const batchSize = inputShape[0]; + let hAxis; + let wAxis; + if (this.dataFormat === "channelsFirst") { + hAxis = 2; + wAxis = 3; + } else { + hAxis = 1; + wAxis = 2; + } + const height = inputShape[hAxis]; + const width = inputShape[wAxis]; + const kernelH = this.kernelSize[0]; + const kernelW = this.kernelSize[1]; + const strideH = this.strides[0]; + const strideW = this.strides[1]; + const outHeight = deconvLength(height, strideH, kernelH, this.padding); + const outWidth = deconvLength(width, strideW, kernelW, this.padding); + const outputShape = [batchSize, outHeight, outWidth, this.filters]; + if (this.dataFormat !== "channelsLast") { + input2 = transpose(input2, [0, 2, 3, 1]); + } + let outputs = conv2dTranspose(input2, this.kernel.read(), outputShape, this.strides, this.padding); + if (this.dataFormat !== "channelsLast") { + outputs = transpose(outputs, [0, 3, 1, 2]); + } + if (this.bias != null) { + outputs = biasAdd(outputs, this.bias.read(), this.dataFormat); + } + if (this.activation != null) { + outputs = this.activation.apply(outputs); + } + return outputs; + }); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const outputShape = inputShape.slice(); + let channelAxis; + let heightAxis; + let widthAxis; + if (this.dataFormat === "channelsFirst") { + channelAxis = 1; + heightAxis = 2; + widthAxis = 3; + } else { + channelAxis = 3; + heightAxis = 1; + widthAxis = 2; + } + const kernelH = this.kernelSize[0]; + const kernelW = this.kernelSize[1]; + const strideH = this.strides[0]; + const strideW = this.strides[1]; + outputShape[channelAxis] = this.filters; + outputShape[heightAxis] = deconvLength(outputShape[heightAxis], strideH, kernelH, this.padding); + outputShape[widthAxis] = deconvLength(outputShape[widthAxis], strideW, kernelW, this.padding); + return outputShape; + } + getConfig() { + const config = super.getConfig(); + delete config["dilationRate"]; + return config; + } + }; + Conv2DTranspose.className = "Conv2DTranspose"; + serialization_exports.registerClass(Conv2DTranspose); + var Conv3DTranspose = class extends Conv3D2 { + constructor(args) { + super(args); + this.inputSpec = [new InputSpec({ ndim: 5 })]; + if (this.padding !== "same" && this.padding !== "valid") { + throw new ValueError(`Conv3DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`); + } + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (inputShape.length !== 5) { + throw new ValueError("Input should have rank 5; Received input shape: " + JSON.stringify(inputShape)); + } + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : inputShape.length - 1; + if (inputShape[channelAxis] == null) { + throw new ValueError("The channel dimension of the inputs should be defined. Found `None`."); + } + const inputDim = inputShape[channelAxis]; + const kernelShape = this.kernelSize.concat([this.filters, inputDim]); + this.kernel = this.addWeight("kernel", kernelShape, "float32", this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.filters], "float32", this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } + this.inputSpec = [new InputSpec({ ndim: 5, axes: { [channelAxis]: inputDim } })]; + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + let input2 = getExactlyOneTensor(inputs); + if (input2.shape.length !== 5) { + throw new ValueError(`Conv3DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${input2.shape.length}`); + } + const inputShape = input2.shape; + const batchSize = inputShape[0]; + let hAxis; + let wAxis; + let dAxis; + if (this.dataFormat === "channelsFirst") { + dAxis = 2; + hAxis = 3; + wAxis = 4; + } else { + dAxis = 1; + hAxis = 2; + wAxis = 3; + } + const depth = inputShape[dAxis]; + const height = inputShape[hAxis]; + const width = inputShape[wAxis]; + const kernelD = this.kernelSize[0]; + const kernelH = this.kernelSize[1]; + const kernelW = this.kernelSize[2]; + const strideD = this.strides[0]; + const strideH = this.strides[1]; + const strideW = this.strides[2]; + const outDepth = deconvLength(depth, strideD, kernelD, this.padding); + const outHeight = deconvLength(height, strideH, kernelH, this.padding); + const outWidth = deconvLength(width, strideW, kernelW, this.padding); + const outputShape = [batchSize, outDepth, outHeight, outWidth, this.filters]; + if (this.dataFormat !== "channelsLast") { + input2 = transpose(input2, [0, 2, 3, 4, 1]); + } + let outputs = conv3dTranspose(input2, this.kernel.read(), outputShape, this.strides, this.padding); + if (this.dataFormat !== "channelsLast") { + outputs = transpose(outputs, [0, 4, 1, 2, 3]); + } + if (this.bias !== null) { + outputs = biasAdd(outputs, this.bias.read(), this.dataFormat); + } + if (this.activation !== null) { + outputs = this.activation.apply(outputs); + } + return outputs; + }); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const outputShape = inputShape.slice(); + let channelAxis; + let depthAxis; + let heightAxis; + let widthAxis; + if (this.dataFormat === "channelsFirst") { + channelAxis = 1; + depthAxis = 2; + heightAxis = 3; + widthAxis = 4; + } else { + channelAxis = 4; + depthAxis = 1; + heightAxis = 2; + widthAxis = 3; + } + const kernelD = this.kernelSize[0]; + const kernelH = this.kernelSize[1]; + const kernelW = this.kernelSize[2]; + const strideD = this.strides[0]; + const strideH = this.strides[1]; + const strideW = this.strides[2]; + outputShape[channelAxis] = this.filters; + outputShape[depthAxis] = deconvLength(outputShape[depthAxis], strideD, kernelD, this.padding); + outputShape[heightAxis] = deconvLength(outputShape[heightAxis], strideH, kernelH, this.padding); + outputShape[widthAxis] = deconvLength(outputShape[widthAxis], strideW, kernelW, this.padding); + return outputShape; + } + getConfig() { + const config = super.getConfig(); + delete config["dilationRate"]; + return config; + } + }; + Conv3DTranspose.className = "Conv3DTranspose"; + serialization_exports.registerClass(Conv3DTranspose); + var SeparableConv = class extends Conv { + constructor(rank, config) { + super(rank, config); + this.DEFAULT_DEPTHWISE_INITIALIZER = "glorotUniform"; + this.DEFAULT_POINTWISE_INITIALIZER = "glorotUniform"; + this.depthwiseKernel = null; + this.pointwiseKernel = null; + if (config.filters == null) { + throw new ValueError("The `filters` configuration field is required by SeparableConv, but is unspecified."); + } + if (config.kernelInitializer != null || config.kernelRegularizer != null || config.kernelConstraint != null) { + throw new ValueError("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead."); + } + if (config.padding != null && config.padding !== "same" && config.padding !== "valid") { + throw new ValueError(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(config.padding)}`); + } + this.depthMultiplier = config.depthMultiplier == null ? 1 : config.depthMultiplier; + this.depthwiseInitializer = getInitializer(config.depthwiseInitializer || this.DEFAULT_DEPTHWISE_INITIALIZER); + this.depthwiseRegularizer = getRegularizer(config.depthwiseRegularizer); + this.depthwiseConstraint = getConstraint(config.depthwiseConstraint); + this.pointwiseInitializer = getInitializer(config.depthwiseInitializer || this.DEFAULT_POINTWISE_INITIALIZER); + this.pointwiseRegularizer = getRegularizer(config.pointwiseRegularizer); + this.pointwiseConstraint = getConstraint(config.pointwiseConstraint); + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (inputShape.length < this.rank + 2) { + throw new ValueError(`Inputs to SeparableConv${this.rank}D should have rank ${this.rank + 2}, but received input shape: ${JSON.stringify(inputShape)}`); + } + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : inputShape.length - 1; + if (inputShape[channelAxis] == null || inputShape[channelAxis] < 0) { + throw new ValueError(`The channel dimension of the inputs should be defined, but found ${JSON.stringify(inputShape[channelAxis])}`); + } + const inputDim = inputShape[channelAxis]; + const depthwiseKernelShape = this.kernelSize.concat([inputDim, this.depthMultiplier]); + const pointwiseKernelShape = []; + for (let i = 0; i < this.rank; ++i) { + pointwiseKernelShape.push(1); + } + pointwiseKernelShape.push(inputDim * this.depthMultiplier, this.filters); + const trainable = true; + this.depthwiseKernel = this.addWeight("depthwise_kernel", depthwiseKernelShape, "float32", this.depthwiseInitializer, this.depthwiseRegularizer, trainable, this.depthwiseConstraint); + this.pointwiseKernel = this.addWeight("pointwise_kernel", pointwiseKernelShape, "float32", this.pointwiseInitializer, this.pointwiseRegularizer, trainable, this.pointwiseConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.filters], "float32", this.biasInitializer, this.biasRegularizer, trainable, this.biasConstraint); + } else { + this.bias = null; + } + this.inputSpec = [new InputSpec({ ndim: this.rank + 2, axes: { [channelAxis]: inputDim } })]; + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + let output; + if (this.rank === 1) { + throw new NotImplementedError("1D separable convolution is not implemented yet."); + } else if (this.rank === 2) { + if (this.dataFormat === "channelsFirst") { + inputs = transpose(inputs, [0, 2, 3, 1]); + } + output = separableConv2d(inputs, this.depthwiseKernel.read(), this.pointwiseKernel.read(), this.strides, this.padding, this.dilationRate, "NHWC"); + } + if (this.useBias) { + output = biasAdd(output, this.bias.read(), this.dataFormat); + } + if (this.activation != null) { + output = this.activation.apply(output); + } + if (this.dataFormat === "channelsFirst") { + output = transpose(output, [0, 3, 1, 2]); + } + return output; + }); + } + getConfig() { + const config = super.getConfig(); + delete config["rank"]; + delete config["kernelInitializer"]; + delete config["kernelRegularizer"]; + delete config["kernelConstraint"]; + config["depthwiseInitializer"] = serializeInitializer(this.depthwiseInitializer); + config["pointwiseInitializer"] = serializeInitializer(this.pointwiseInitializer); + config["depthwiseRegularizer"] = serializeRegularizer(this.depthwiseRegularizer); + config["pointwiseRegularizer"] = serializeRegularizer(this.pointwiseRegularizer); + config["depthwiseConstraint"] = serializeConstraint(this.depthwiseConstraint); + config["pointwiseConstraint"] = serializeConstraint(this.pointwiseConstraint); + return config; + } + }; + SeparableConv.className = "SeparableConv"; + var SeparableConv2D = class extends SeparableConv { + constructor(args) { + super(2, args); + } + }; + SeparableConv2D.className = "SeparableConv2D"; + serialization_exports.registerClass(SeparableConv2D); + var Conv1D = class extends Conv { + constructor(args) { + super(1, args); + Conv1D.verifyArgs(args); + this.inputSpec = [{ ndim: 3 }]; + } + getConfig() { + const config = super.getConfig(); + delete config["rank"]; + delete config["dataFormat"]; + return config; + } + static verifyArgs(args) { + if (typeof args.kernelSize !== "number" && !checkArrayTypeAndLength(args.kernelSize, "number", 1, 1)) { + throw new ValueError(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(args.kernelSize)}.`); + } + } + }; + Conv1D.className = "Conv1D"; + serialization_exports.registerClass(Conv1D); + var Cropping2D = class extends Layer { + constructor(args) { + super(args); + if (typeof args.cropping === "number") { + this.cropping = [[args.cropping, args.cropping], [args.cropping, args.cropping]]; + } else if (typeof args.cropping[0] === "number") { + this.cropping = [ + [args.cropping[0], args.cropping[0]], + [args.cropping[1], args.cropping[1]] + ]; + } else { + this.cropping = args.cropping; + } + this.dataFormat = args.dataFormat === void 0 ? "channelsLast" : args.dataFormat; + this.inputSpec = [{ ndim: 4 }]; + } + computeOutputShape(inputShape) { + if (this.dataFormat === "channelsFirst") { + return [ + inputShape[0], + inputShape[1], + inputShape[2] - this.cropping[0][0] - this.cropping[0][1], + inputShape[3] - this.cropping[1][0] - this.cropping[1][1] + ]; + } else { + return [ + inputShape[0], + inputShape[1] - this.cropping[0][0] - this.cropping[0][1], + inputShape[2] - this.cropping[1][0] - this.cropping[1][1], + inputShape[3] + ]; + } + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + if (this.dataFormat === "channelsLast") { + const hSliced = sliceAlongAxis(inputs, this.cropping[0][0], inputs.shape[1] - this.cropping[0][0] - this.cropping[0][1], 2); + return sliceAlongAxis(hSliced, this.cropping[1][0], inputs.shape[2] - this.cropping[1][1] - this.cropping[1][0], 3); + } else { + const hSliced = sliceAlongAxis(inputs, this.cropping[0][0], inputs.shape[2] - this.cropping[0][0] - this.cropping[0][1], 3); + return sliceAlongAxis(hSliced, this.cropping[1][0], inputs.shape[3] - this.cropping[1][1] - this.cropping[1][0], 4); + } + }); + } + getConfig() { + const config = { cropping: this.cropping, dataFormat: this.dataFormat }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Cropping2D.className = "Cropping2D"; + serialization_exports.registerClass(Cropping2D); + var UpSampling2D = class extends Layer { + constructor(args) { + super(args); + this.DEFAULT_SIZE = [2, 2]; + this.inputSpec = [{ ndim: 4 }]; + this.size = args.size == null ? this.DEFAULT_SIZE : args.size; + this.dataFormat = args.dataFormat == null ? "channelsLast" : args.dataFormat; + checkDataFormat(this.dataFormat); + this.interpolation = args.interpolation == null ? "nearest" : args.interpolation; + checkInterpolationFormat(this.interpolation); + } + computeOutputShape(inputShape) { + if (this.dataFormat === "channelsFirst") { + const height = inputShape[2] == null ? null : this.size[0] * inputShape[2]; + const width = inputShape[3] == null ? null : this.size[1] * inputShape[3]; + return [inputShape[0], inputShape[1], height, width]; + } else { + const height = inputShape[1] == null ? null : this.size[0] * inputShape[1]; + const width = inputShape[2] == null ? null : this.size[1] * inputShape[2]; + return [inputShape[0], height, width, inputShape[3]]; + } + } + call(inputs, kwargs) { + return tidy(() => { + let input2 = getExactlyOneTensor(inputs); + const inputShape = input2.shape; + if (this.dataFormat === "channelsFirst") { + input2 = transpose(input2, [0, 2, 3, 1]); + const height = this.size[0] * inputShape[2]; + const width = this.size[1] * inputShape[3]; + const resized = this.interpolation === "nearest" ? image.resizeNearestNeighbor(input2, [height, width]) : image.resizeBilinear(input2, [height, width]); + return transpose(resized, [0, 3, 1, 2]); + } else { + const height = this.size[0] * inputShape[1]; + const width = this.size[1] * inputShape[2]; + return this.interpolation === "nearest" ? image.resizeNearestNeighbor(input2, [height, width]) : image.resizeBilinear(input2, [height, width]); + } + }); + } + getConfig() { + const config = { + size: this.size, + dataFormat: this.dataFormat, + interpolation: this.interpolation + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + UpSampling2D.className = "UpSampling2D"; + serialization_exports.registerClass(UpSampling2D); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_depthwise.js + init_define_BUILD_VERSION(); + function depthwiseConv2d3(x, depthwiseKernel, strides = [1, 1], padding = "valid", dataFormat, dilationRate) { + return tidy(() => { + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + checkDataFormat(dataFormat); + let y = preprocessConv2DInput(x, dataFormat); + if (x.rank !== 4) { + throw new ValueError(`Input for depthwiseConv2d is required to be 4-D, but is instead ${x.rank}-D`); + } + if (depthwiseKernel.rank !== 4) { + throw new ValueError(`depthwiseKernel is required to be 4-D, but is instead ${depthwiseKernel.rank}-D`); + } + y = depthwiseConv2d(y, depthwiseKernel, strides, padding === "same" ? "same" : "valid", "NHWC", dilationRate); + if (dataFormat === "channelsFirst") { + y = transpose(y, [0, 3, 1, 2]); + } + return y; + }); + } + var DepthwiseConv2D = class extends BaseConv { + constructor(args) { + super(2, args); + this.depthwiseKernel = null; + this.depthMultiplier = args.depthMultiplier == null ? 1 : args.depthMultiplier; + this.depthwiseInitializer = getInitializer(args.depthwiseInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.depthwiseConstraint = getConstraint(args.depthwiseConstraint); + this.depthwiseRegularizer = getRegularizer(args.depthwiseRegularizer); + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (inputShape.length < 4) { + throw new ValueError(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(inputShape)}.`); + } + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : 3; + if (inputShape[channelAxis] == null || inputShape[channelAxis] < 0) { + throw new ValueError(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${inputShape[channelAxis]}).`); + } + const inputDim = inputShape[channelAxis]; + const depthwiseKernelShape = [ + this.kernelSize[0], + this.kernelSize[1], + inputDim, + this.depthMultiplier + ]; + this.depthwiseKernel = this.addWeight("depthwise_kernel", depthwiseKernelShape, null, this.depthwiseInitializer, this.depthwiseRegularizer, true, this.depthwiseConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [inputDim * this.depthMultiplier], null, this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } else { + this.bias = null; + } + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + let outputs = depthwiseConv2d3(inputs, this.depthwiseKernel.read(), this.strides, this.padding, this.dataFormat, null); + if (this.useBias) { + outputs = biasAdd(outputs, this.bias.read(), this.dataFormat); + } + if (this.activation != null) { + outputs = this.activation.apply(outputs); + } + return outputs; + }); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const rows = this.dataFormat === "channelsFirst" ? inputShape[2] : inputShape[1]; + const cols = this.dataFormat === "channelsFirst" ? inputShape[3] : inputShape[2]; + const outFilters = this.dataFormat === "channelsFirst" ? inputShape[1] * this.depthMultiplier : inputShape[3] * this.depthMultiplier; + const outRows = convOutputLength(rows, this.kernelSize[0], this.padding, this.strides[0]); + const outCols = convOutputLength(cols, this.kernelSize[1], this.padding, this.strides[1]); + if (this.dataFormat === "channelsFirst") { + return [inputShape[0], outFilters, outRows, outCols]; + } else { + return [inputShape[0], outRows, outCols, outFilters]; + } + } + getConfig() { + const config = super.getConfig(); + config["depthMultiplier"] = this.depthMultiplier; + config["depthwiseInitializer"] = serializeInitializer(this.depthwiseInitializer); + config["depthwiseRegularizer"] = serializeRegularizer(this.depthwiseRegularizer); + config["depthwiseConstraint"] = serializeConstraint(this.depthwiseRegularizer); + return config; + } + }; + DepthwiseConv2D.className = "DepthwiseConv2D"; + serialization_exports.registerClass(DepthwiseConv2D); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_recurrent.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/recurrent.js + init_define_BUILD_VERSION(); + function standardizeArgs(inputs, initialState, constants, numConstants) { + if (Array.isArray(inputs)) { + if (initialState != null || constants != null) { + throw new ValueError("When inputs is an array, neither initialState or constants should be provided"); + } + if (numConstants != null) { + constants = inputs.slice(inputs.length - numConstants, inputs.length); + inputs = inputs.slice(0, inputs.length - numConstants); + } + if (inputs.length > 1) { + initialState = inputs.slice(1, inputs.length); + } + inputs = inputs[0]; + } + function toListOrNull(x) { + if (x == null || Array.isArray(x)) { + return x; + } else { + return [x]; + } + } + initialState = toListOrNull(initialState); + constants = toListOrNull(constants); + return { inputs, initialState, constants }; + } + function rnn(stepFunction, inputs, initialStates, goBackwards = false, mask, constants, unroll = false, needPerStepOutputs = false) { + return tidy(() => { + const ndim = inputs.shape.length; + if (ndim < 3) { + throw new ValueError(`Input should be at least 3D, but is ${ndim}D.`); + } + const axes = [1, 0].concat(range2(2, ndim)); + inputs = transpose(inputs, axes); + if (constants != null) { + throw new NotImplementedError("The rnn() functoin of the deeplearn.js backend does not support constants yet."); + } + if (unroll) { + console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."); + } + if (mask != null) { + mask = cast(cast(mask, "bool"), "float32"); + if (mask.rank === ndim - 1) { + mask = expandDims(mask, -1); + } + mask = transpose(mask, axes); + } + if (goBackwards) { + inputs = reverse(inputs, 0); + if (mask != null) { + mask = reverse(mask, 0); + } + } + const perStepOutputs = []; + let lastOutput; + let states = initialStates; + const timeSteps = inputs.shape[0]; + const perStepInputs = unstack(inputs); + let perStepMasks; + if (mask != null) { + perStepMasks = unstack(mask); + } + for (let t = 0; t < timeSteps; ++t) { + const currentInput = perStepInputs[t]; + const stepOutputs = tidy(() => stepFunction(currentInput, states)); + if (mask == null) { + lastOutput = stepOutputs[0]; + states = stepOutputs[1]; + } else { + const maskedOutputs = tidy(() => { + const stepMask = perStepMasks[t]; + const negStepMask = sub(onesLike(stepMask), stepMask); + const output = add2(mul(stepOutputs[0], stepMask), mul(states[0], negStepMask)); + const newStates = states.map((state, i) => { + return add2(mul(stepOutputs[1][i], stepMask), mul(state, negStepMask)); + }); + return { output, newStates }; + }); + lastOutput = maskedOutputs.output; + states = maskedOutputs.newStates; + } + if (needPerStepOutputs) { + perStepOutputs.push(lastOutput); + } + } + let outputs; + if (needPerStepOutputs) { + const axis = 1; + outputs = stack(perStepOutputs, axis); + } + return [lastOutput, outputs, states]; + }); + } + var RNN = class extends Layer { + constructor(args) { + super(args); + let cell; + if (args.cell == null) { + throw new ValueError("cell property is missing for the constructor of RNN."); + } else if (Array.isArray(args.cell)) { + cell = new StackedRNNCells({ cells: args.cell }); + } else { + cell = args.cell; + } + if (cell.stateSize == null) { + throw new ValueError("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state)."); + } + this.cell = cell; + this.returnSequences = args.returnSequences == null ? false : args.returnSequences; + this.returnState = args.returnState == null ? false : args.returnState; + this.goBackwards = args.goBackwards == null ? false : args.goBackwards; + this._stateful = args.stateful == null ? false : args.stateful; + this.unroll = args.unroll == null ? false : args.unroll; + this.supportsMasking = true; + this.inputSpec = [new InputSpec({ ndim: 3 })]; + this.stateSpec = null; + this.states_ = null; + this.numConstants = null; + this.keptStates = []; + } + getStates() { + if (this.states_ == null) { + const numStates = Array.isArray(this.cell.stateSize) ? this.cell.stateSize.length : 1; + return range2(0, numStates).map((x) => null); + } else { + return this.states_; + } + } + setStates(states) { + this.states_ = states; + } + computeOutputShape(inputShape) { + if (isArrayOfShapes(inputShape)) { + inputShape = inputShape[0]; + } + inputShape = inputShape; + let stateSize = this.cell.stateSize; + if (!Array.isArray(stateSize)) { + stateSize = [stateSize]; + } + const outputDim = stateSize[0]; + let outputShape; + if (this.returnSequences) { + outputShape = [inputShape[0], inputShape[1], outputDim]; + } else { + outputShape = [inputShape[0], outputDim]; + } + if (this.returnState) { + const stateShape = []; + for (const dim of stateSize) { + stateShape.push([inputShape[0], dim]); + } + return [outputShape].concat(stateShape); + } else { + return outputShape; + } + } + computeMask(inputs, mask) { + return tidy(() => { + if (Array.isArray(mask)) { + mask = mask[0]; + } + const outputMask = this.returnSequences ? mask : null; + if (this.returnState) { + const stateMask = this.states.map((s) => null); + return [outputMask].concat(stateMask); + } else { + return outputMask; + } + }); + } + get states() { + if (this.states_ == null) { + const numStates = Array.isArray(this.cell.stateSize) ? this.cell.stateSize.length : 1; + const output = []; + for (let i = 0; i < numStates; ++i) { + output.push(null); + } + return output; + } else { + return this.states_; + } + } + set states(s) { + this.states_ = s; + } + build(inputShape) { + const constantShape = null; + if (this.numConstants != null) { + throw new NotImplementedError("Constants support is not implemented in RNN yet."); + } + if (isArrayOfShapes(inputShape)) { + inputShape = inputShape[0]; + } + inputShape = inputShape; + const batchSize = this.stateful ? inputShape[0] : null; + const inputDim = inputShape.slice(2); + this.inputSpec[0] = new InputSpec({ shape: [batchSize, null, ...inputDim] }); + const stepInputShape = [inputShape[0]].concat(inputShape.slice(2)); + if (constantShape != null) { + throw new NotImplementedError("Constants support is not implemented in RNN yet."); + } else { + this.cell.build(stepInputShape); + } + let stateSize; + if (Array.isArray(this.cell.stateSize)) { + stateSize = this.cell.stateSize; + } else { + stateSize = [this.cell.stateSize]; + } + if (this.stateSpec != null) { + if (!util_exports.arraysEqual(this.stateSpec.map((spec) => spec.shape[spec.shape.length - 1]), stateSize)) { + throw new ValueError(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`); + } + } else { + this.stateSpec = stateSize.map((dim) => new InputSpec({ shape: [null, dim] })); + } + if (this.stateful) { + this.resetStates(); + } + } + resetStates(states, training = false) { + tidy(() => { + if (!this.stateful) { + throw new AttributeError("Cannot call resetStates() on an RNN Layer that is not stateful."); + } + const batchSize = this.inputSpec[0].shape[0]; + if (batchSize == null) { + throw new ValueError("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer."); + } + if (this.states_ == null) { + if (Array.isArray(this.cell.stateSize)) { + this.states_ = this.cell.stateSize.map((dim) => zeros([batchSize, dim])); + } else { + this.states_ = [zeros([batchSize, this.cell.stateSize])]; + } + } else if (states == null) { + dispose(this.states_); + if (this.keptStates != null) { + dispose(this.keptStates); + this.keptStates = []; + } + if (Array.isArray(this.cell.stateSize)) { + this.states_ = this.cell.stateSize.map((dim) => zeros([batchSize, dim])); + } else { + this.states_[0] = zeros([batchSize, this.cell.stateSize]); + } + } else { + if (!Array.isArray(states)) { + states = [states]; + } + if (states.length !== this.states_.length) { + throw new ValueError(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${states.length} state value(s). Input received: ${states}`); + } + if (training === true) { + this.keptStates.push(this.states_.slice()); + } else { + dispose(this.states_); + } + for (let index = 0; index < this.states_.length; ++index) { + const value = states[index]; + const dim = Array.isArray(this.cell.stateSize) ? this.cell.stateSize[index] : this.cell.stateSize; + const expectedShape = [batchSize, dim]; + if (!util_exports.arraysEqual(value.shape, expectedShape)) { + throw new ValueError(`State ${index} is incompatible with layer ${this.name}: expected shape=${expectedShape}, received shape=${value.shape}`); + } + this.states_[index] = value; + } + } + this.states_ = this.states_.map((state) => keep(state.clone())); + }); + } + apply(inputs, kwargs) { + let initialState = kwargs == null ? null : kwargs["initialState"]; + let constants = kwargs == null ? null : kwargs["constants"]; + if (kwargs == null) { + kwargs = {}; + } + const standardized = standardizeArgs(inputs, initialState, constants, this.numConstants); + inputs = standardized.inputs; + initialState = standardized.initialState; + constants = standardized.constants; + let additionalInputs = []; + let additionalSpecs = []; + if (initialState != null) { + kwargs["initialState"] = initialState; + additionalInputs = additionalInputs.concat(initialState); + this.stateSpec = []; + for (const state of initialState) { + this.stateSpec.push(new InputSpec({ shape: state.shape })); + } + additionalSpecs = additionalSpecs.concat(this.stateSpec); + } + if (constants != null) { + kwargs["constants"] = constants; + additionalInputs = additionalInputs.concat(constants); + this.numConstants = constants.length; + } + const isTensor = additionalInputs[0] instanceof SymbolicTensor; + if (isTensor) { + const fullInput = [inputs].concat(additionalInputs); + const fullInputSpec = this.inputSpec.concat(additionalSpecs); + const originalInputSpec = this.inputSpec; + this.inputSpec = fullInputSpec; + const output = super.apply(fullInput, kwargs); + this.inputSpec = originalInputSpec; + return output; + } else { + return super.apply(inputs, kwargs); + } + } + call(inputs, kwargs) { + return tidy(() => { + const mask = kwargs == null ? null : kwargs["mask"]; + const training = kwargs == null ? null : kwargs["training"]; + let initialState = kwargs == null ? null : kwargs["initialState"]; + inputs = getExactlyOneTensor(inputs); + if (initialState == null) { + if (this.stateful) { + initialState = this.states_; + } else { + initialState = this.getInitialState(inputs); + } + } + const numStates = Array.isArray(this.cell.stateSize) ? this.cell.stateSize.length : 1; + if (initialState.length !== numStates) { + throw new ValueError(`RNN Layer has ${numStates} state(s) but was passed ${initialState.length} initial state(s).`); + } + if (this.unroll) { + console.warn("Ignoring unroll = true for RNN layer, due to imperative backend."); + } + const cellCallKwargs = { training }; + const step5 = (inputs2, states2) => { + const outputs2 = this.cell.call([inputs2].concat(states2), cellCallKwargs); + return [outputs2[0], outputs2.slice(1)]; + }; + const rnnOutputs = rnn(step5, inputs, initialState, this.goBackwards, mask, null, this.unroll, this.returnSequences); + const lastOutput = rnnOutputs[0]; + const outputs = rnnOutputs[1]; + const states = rnnOutputs[2]; + if (this.stateful) { + this.resetStates(states, training); + } + const output = this.returnSequences ? outputs : lastOutput; + if (this.returnState) { + return [output].concat(states); + } else { + return output; + } + }); + } + getInitialState(inputs) { + return tidy(() => { + let initialState = zeros(inputs.shape); + initialState = sum2(initialState, [1, 2]); + initialState = expandDims2(initialState); + if (Array.isArray(this.cell.stateSize)) { + return this.cell.stateSize.map((dim) => dim > 1 ? tile2(initialState, [1, dim]) : initialState); + } else { + return this.cell.stateSize > 1 ? [tile2(initialState, [1, this.cell.stateSize])] : [initialState]; + } + }); + } + get trainableWeights() { + if (!this.trainable) { + return []; + } + return this.cell.trainableWeights; + } + get nonTrainableWeights() { + if (!this.trainable) { + return this.cell.weights; + } + return this.cell.nonTrainableWeights; + } + setFastWeightInitDuringBuild(value) { + super.setFastWeightInitDuringBuild(value); + if (this.cell != null) { + this.cell.setFastWeightInitDuringBuild(value); + } + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { + returnSequences: this.returnSequences, + returnState: this.returnState, + goBackwards: this.goBackwards, + stateful: this.stateful, + unroll: this.unroll + }; + if (this.numConstants != null) { + config["numConstants"] = this.numConstants; + } + const cellConfig = this.cell.getConfig(); + if (this.getClassName() === RNN.className) { + config["cell"] = { + "className": this.cell.getClassName(), + "config": cellConfig + }; + } + return Object.assign({}, cellConfig, baseConfig, config); + } + static fromConfig(cls, config, customObjects = {}) { + const cellConfig = config["cell"]; + const cell = deserialize(cellConfig, customObjects); + return new cls(Object.assign(config, { cell })); + } + }; + RNN.className = "RNN"; + serialization_exports.registerClass(RNN); + var RNNCell = class extends Layer { + }; + var SimpleRNNCell = class extends RNNCell { + constructor(args) { + super(args); + this.DEFAULT_ACTIVATION = "tanh"; + this.DEFAULT_KERNEL_INITIALIZER = "glorotNormal"; + this.DEFAULT_RECURRENT_INITIALIZER = "orthogonal"; + this.DEFAULT_BIAS_INITIALIZER = "zeros"; + this.units = args.units; + assertPositiveInteger(this.units, `units`); + this.activation = getActivation(args.activation == null ? this.DEFAULT_ACTIVATION : args.activation); + this.useBias = args.useBias == null ? true : args.useBias; + this.kernelInitializer = getInitializer(args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.recurrentInitializer = getInitializer(args.recurrentInitializer || this.DEFAULT_RECURRENT_INITIALIZER); + this.biasInitializer = getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER); + this.kernelRegularizer = getRegularizer(args.kernelRegularizer); + this.recurrentRegularizer = getRegularizer(args.recurrentRegularizer); + this.biasRegularizer = getRegularizer(args.biasRegularizer); + this.kernelConstraint = getConstraint(args.kernelConstraint); + this.recurrentConstraint = getConstraint(args.recurrentConstraint); + this.biasConstraint = getConstraint(args.biasConstraint); + this.dropout = min2([1, max2([0, args.dropout == null ? 0 : args.dropout])]); + this.recurrentDropout = min2([ + 1, + max2([0, args.recurrentDropout == null ? 0 : args.recurrentDropout]) + ]); + this.dropoutFunc = args.dropoutFunc; + this.stateSize = this.units; + this.dropoutMask = null; + this.recurrentDropoutMask = null; + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + this.kernel = this.addWeight("kernel", [inputShape[inputShape.length - 1], this.units], null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + this.recurrentKernel = this.addWeight("recurrent_kernel", [this.units, this.units], null, this.recurrentInitializer, this.recurrentRegularizer, true, this.recurrentConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.units], null, this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } else { + this.bias = null; + } + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = inputs; + if (inputs.length !== 2) { + throw new ValueError(`SimpleRNNCell expects 2 input Tensors, got ${inputs.length}.`); + } + let prevOutput = inputs[1]; + inputs = inputs[0]; + const training = kwargs["training"] == null ? false : kwargs["training"]; + if (0 < this.dropout && this.dropout < 1 && this.dropoutMask == null) { + this.dropoutMask = generateDropoutMask({ + ones: () => onesLike(inputs), + rate: this.dropout, + training, + dropoutFunc: this.dropoutFunc + }); + } + if (0 < this.recurrentDropout && this.recurrentDropout < 1 && this.recurrentDropoutMask == null) { + this.recurrentDropoutMask = generateDropoutMask({ + ones: () => onesLike(prevOutput), + rate: this.recurrentDropout, + training, + dropoutFunc: this.dropoutFunc + }); + } + let h; + const dpMask = this.dropoutMask; + const recDpMask = this.recurrentDropoutMask; + if (dpMask != null) { + h = dot2(mul(inputs, dpMask), this.kernel.read()); + } else { + h = dot2(inputs, this.kernel.read()); + } + if (this.bias != null) { + h = biasAdd(h, this.bias.read()); + } + if (recDpMask != null) { + prevOutput = mul(prevOutput, recDpMask); + } + let output = add2(h, dot2(prevOutput, this.recurrentKernel.read())); + if (this.activation != null) { + output = this.activation.apply(output); + } + return [output, output]; + }); + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { + units: this.units, + activation: serializeActivation(this.activation), + useBias: this.useBias, + kernelInitializer: serializeInitializer(this.kernelInitializer), + recurrentInitializer: serializeInitializer(this.recurrentInitializer), + biasInitializer: serializeInitializer(this.biasInitializer), + kernelRegularizer: serializeRegularizer(this.kernelRegularizer), + recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer), + biasRegularizer: serializeRegularizer(this.biasRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + kernelConstraint: serializeConstraint(this.kernelConstraint), + recurrentConstraint: serializeConstraint(this.recurrentConstraint), + biasConstraint: serializeConstraint(this.biasConstraint), + dropout: this.dropout, + recurrentDropout: this.recurrentDropout + }; + return Object.assign({}, baseConfig, config); + } + }; + SimpleRNNCell.className = "SimpleRNNCell"; + serialization_exports.registerClass(SimpleRNNCell); + var SimpleRNN = class extends RNN { + constructor(args) { + args.cell = new SimpleRNNCell(args); + super(args); + } + call(inputs, kwargs) { + return tidy(() => { + if (this.cell.dropoutMask != null) { + dispose(this.cell.dropoutMask); + this.cell.dropoutMask = null; + } + if (this.cell.recurrentDropoutMask != null) { + dispose(this.cell.recurrentDropoutMask); + this.cell.recurrentDropoutMask = null; + } + const mask = kwargs == null ? null : kwargs["mask"]; + const training = kwargs == null ? null : kwargs["training"]; + const initialState = kwargs == null ? null : kwargs["initialState"]; + return super.call(inputs, { mask, training, initialState }); + }); + } + static fromConfig(cls, config) { + return new cls(config); + } + }; + SimpleRNN.className = "SimpleRNN"; + serialization_exports.registerClass(SimpleRNN); + var GRUCell = class extends RNNCell { + constructor(args) { + super(args); + this.DEFAULT_ACTIVATION = "tanh"; + this.DEFAULT_RECURRENT_ACTIVATION = "hardSigmoid"; + this.DEFAULT_KERNEL_INITIALIZER = "glorotNormal"; + this.DEFAULT_RECURRENT_INITIALIZER = "orthogonal"; + this.DEFAULT_BIAS_INITIALIZER = "zeros"; + if (args.resetAfter) { + throw new ValueError(`GRUCell does not support reset_after parameter set to true.`); + } + this.units = args.units; + assertPositiveInteger(this.units, "units"); + this.activation = getActivation(args.activation === void 0 ? this.DEFAULT_ACTIVATION : args.activation); + this.recurrentActivation = getActivation(args.recurrentActivation === void 0 ? this.DEFAULT_RECURRENT_ACTIVATION : args.recurrentActivation); + this.useBias = args.useBias == null ? true : args.useBias; + this.kernelInitializer = getInitializer(args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.recurrentInitializer = getInitializer(args.recurrentInitializer || this.DEFAULT_RECURRENT_INITIALIZER); + this.biasInitializer = getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER); + this.kernelRegularizer = getRegularizer(args.kernelRegularizer); + this.recurrentRegularizer = getRegularizer(args.recurrentRegularizer); + this.biasRegularizer = getRegularizer(args.biasRegularizer); + this.kernelConstraint = getConstraint(args.kernelConstraint); + this.recurrentConstraint = getConstraint(args.recurrentConstraint); + this.biasConstraint = getConstraint(args.biasConstraint); + this.dropout = min2([1, max2([0, args.dropout == null ? 0 : args.dropout])]); + this.recurrentDropout = min2([ + 1, + max2([0, args.recurrentDropout == null ? 0 : args.recurrentDropout]) + ]); + this.dropoutFunc = args.dropoutFunc; + this.implementation = args.implementation; + this.stateSize = this.units; + this.dropoutMask = null; + this.recurrentDropoutMask = null; + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const inputDim = inputShape[inputShape.length - 1]; + this.kernel = this.addWeight("kernel", [inputDim, this.units * 3], null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + this.recurrentKernel = this.addWeight("recurrent_kernel", [this.units, this.units * 3], null, this.recurrentInitializer, this.recurrentRegularizer, true, this.recurrentConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.units * 3], null, this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } else { + this.bias = null; + } + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = inputs; + if (inputs.length !== 2) { + throw new ValueError(`GRUCell expects 2 input Tensors (inputs, h, c), got ${inputs.length}.`); + } + const training = kwargs["training"] == null ? false : kwargs["training"]; + let hTMinus1 = inputs[1]; + inputs = inputs[0]; + if (0 < this.dropout && this.dropout < 1 && this.dropoutMask == null) { + this.dropoutMask = generateDropoutMask({ + ones: () => onesLike(inputs), + rate: this.dropout, + training, + count: 3, + dropoutFunc: this.dropoutFunc + }); + } + if (0 < this.recurrentDropout && this.recurrentDropout < 1 && this.recurrentDropoutMask == null) { + this.recurrentDropoutMask = generateDropoutMask({ + ones: () => onesLike(hTMinus1), + rate: this.recurrentDropout, + training, + count: 3, + dropoutFunc: this.dropoutFunc + }); + } + const dpMask = this.dropoutMask; + const recDpMask = this.recurrentDropoutMask; + let z; + let r; + let hh; + if (0 < this.dropout && this.dropout < 1) { + inputs = mul(inputs, dpMask[0]); + } + let matrixX = dot2(inputs, this.kernel.read()); + if (this.useBias) { + matrixX = biasAdd(matrixX, this.bias.read()); + } + if (0 < this.recurrentDropout && this.recurrentDropout < 1) { + hTMinus1 = mul(hTMinus1, recDpMask[0]); + } + const recurrentKernelValue = this.recurrentKernel.read(); + const [rk1, rk2] = split(recurrentKernelValue, [2 * this.units, this.units], recurrentKernelValue.rank - 1); + const matrixInner = dot2(hTMinus1, rk1); + const [xZ, xR, xH] = split(matrixX, 3, matrixX.rank - 1); + const [recurrentZ, recurrentR] = split(matrixInner, 2, matrixInner.rank - 1); + z = this.recurrentActivation.apply(add2(xZ, recurrentZ)); + r = this.recurrentActivation.apply(add2(xR, recurrentR)); + const recurrentH = dot2(mul(r, hTMinus1), rk2); + hh = this.activation.apply(add2(xH, recurrentH)); + const h = add2(mul(z, hTMinus1), mul(add2(1, neg(z)), hh)); + return [h, h]; + }); + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { + units: this.units, + activation: serializeActivation(this.activation), + recurrentActivation: serializeActivation(this.recurrentActivation), + useBias: this.useBias, + kernelInitializer: serializeInitializer(this.kernelInitializer), + recurrentInitializer: serializeInitializer(this.recurrentInitializer), + biasInitializer: serializeInitializer(this.biasInitializer), + kernelRegularizer: serializeRegularizer(this.kernelRegularizer), + recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer), + biasRegularizer: serializeRegularizer(this.biasRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + kernelConstraint: serializeConstraint(this.kernelConstraint), + recurrentConstraint: serializeConstraint(this.recurrentConstraint), + biasConstraint: serializeConstraint(this.biasConstraint), + dropout: this.dropout, + recurrentDropout: this.recurrentDropout, + implementation: this.implementation, + resetAfter: false + }; + return Object.assign({}, baseConfig, config); + } + }; + GRUCell.className = "GRUCell"; + serialization_exports.registerClass(GRUCell); + var GRU = class extends RNN { + constructor(args) { + if (args.implementation === 0) { + console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."); + } + args.cell = new GRUCell(args); + super(args); + } + call(inputs, kwargs) { + return tidy(() => { + if (this.cell.dropoutMask != null) { + dispose(this.cell.dropoutMask); + this.cell.dropoutMask = null; + } + if (this.cell.recurrentDropoutMask != null) { + dispose(this.cell.recurrentDropoutMask); + this.cell.recurrentDropoutMask = null; + } + const mask = kwargs == null ? null : kwargs["mask"]; + const training = kwargs == null ? null : kwargs["training"]; + const initialState = kwargs == null ? null : kwargs["initialState"]; + return super.call(inputs, { mask, training, initialState }); + }); + } + static fromConfig(cls, config) { + if (config["implmentation"] === 0) { + config["implementation"] = 1; + } + return new cls(config); + } + }; + GRU.className = "GRU"; + serialization_exports.registerClass(GRU); + var LSTMCell = class extends RNNCell { + constructor(args) { + super(args); + this.DEFAULT_ACTIVATION = "tanh"; + this.DEFAULT_RECURRENT_ACTIVATION = "hardSigmoid"; + this.DEFAULT_KERNEL_INITIALIZER = "glorotNormal"; + this.DEFAULT_RECURRENT_INITIALIZER = "orthogonal"; + this.DEFAULT_BIAS_INITIALIZER = "zeros"; + this.units = args.units; + assertPositiveInteger(this.units, "units"); + this.activation = getActivation(args.activation === void 0 ? this.DEFAULT_ACTIVATION : args.activation); + this.recurrentActivation = getActivation(args.recurrentActivation === void 0 ? this.DEFAULT_RECURRENT_ACTIVATION : args.recurrentActivation); + this.useBias = args.useBias == null ? true : args.useBias; + this.kernelInitializer = getInitializer(args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.recurrentInitializer = getInitializer(args.recurrentInitializer || this.DEFAULT_RECURRENT_INITIALIZER); + this.biasInitializer = getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER); + this.unitForgetBias = args.unitForgetBias; + this.kernelRegularizer = getRegularizer(args.kernelRegularizer); + this.recurrentRegularizer = getRegularizer(args.recurrentRegularizer); + this.biasRegularizer = getRegularizer(args.biasRegularizer); + this.kernelConstraint = getConstraint(args.kernelConstraint); + this.recurrentConstraint = getConstraint(args.recurrentConstraint); + this.biasConstraint = getConstraint(args.biasConstraint); + this.dropout = min2([1, max2([0, args.dropout == null ? 0 : args.dropout])]); + this.recurrentDropout = min2([ + 1, + max2([0, args.recurrentDropout == null ? 0 : args.recurrentDropout]) + ]); + this.dropoutFunc = args.dropoutFunc; + this.implementation = args.implementation; + this.stateSize = [this.units, this.units]; + this.dropoutMask = null; + this.recurrentDropoutMask = null; + } + build(inputShape) { + var _a; + inputShape = getExactlyOneShape(inputShape); + const inputDim = inputShape[inputShape.length - 1]; + this.kernel = this.addWeight("kernel", [inputDim, this.units * 4], null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + this.recurrentKernel = this.addWeight("recurrent_kernel", [this.units, this.units * 4], null, this.recurrentInitializer, this.recurrentRegularizer, true, this.recurrentConstraint); + let biasInitializer; + if (this.useBias) { + if (this.unitForgetBias) { + const capturedBiasInit = this.biasInitializer; + const capturedUnits = this.units; + biasInitializer = new (_a = class CustomInit extends Initializer { + apply(shape, dtype) { + const bI = capturedBiasInit.apply([capturedUnits]); + const bF = new Ones().apply([capturedUnits]); + const bCAndH = capturedBiasInit.apply([capturedUnits * 2]); + return concatAlongFirstAxis(concatAlongFirstAxis(bI, bF), bCAndH); + } + }, _a.className = "CustomInit", _a)(); + } else { + biasInitializer = this.biasInitializer; + } + this.bias = this.addWeight("bias", [this.units * 4], null, biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } else { + this.bias = null; + } + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + const training = kwargs["training"] == null ? false : kwargs["training"]; + inputs = inputs; + if (inputs.length !== 3) { + throw new ValueError(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${inputs.length}.`); + } + let hTMinus1 = inputs[1]; + const cTMinus1 = inputs[2]; + inputs = inputs[0]; + if (0 < this.dropout && this.dropout < 1 && this.dropoutMask == null) { + this.dropoutMask = generateDropoutMask({ + ones: () => onesLike(inputs), + rate: this.dropout, + training, + count: 4, + dropoutFunc: this.dropoutFunc + }); + } + if (0 < this.recurrentDropout && this.recurrentDropout < 1 && this.recurrentDropoutMask == null) { + this.recurrentDropoutMask = generateDropoutMask({ + ones: () => onesLike(hTMinus1), + rate: this.recurrentDropout, + training, + count: 4, + dropoutFunc: this.dropoutFunc + }); + } + const dpMask = this.dropoutMask; + const recDpMask = this.recurrentDropoutMask; + let i; + let f; + let c; + let o; + if (0 < this.dropout && this.dropout < 1) { + inputs = mul(inputs, dpMask[0]); + } + let z = dot2(inputs, this.kernel.read()); + if (0 < this.recurrentDropout && this.recurrentDropout < 1) { + hTMinus1 = mul(hTMinus1, recDpMask[0]); + } + z = add2(z, dot2(hTMinus1, this.recurrentKernel.read())); + if (this.useBias) { + z = biasAdd(z, this.bias.read()); + } + const [z0, z1, z2, z3] = split(z, 4, z.rank - 1); + i = this.recurrentActivation.apply(z0); + f = this.recurrentActivation.apply(z1); + c = add2(mul(f, cTMinus1), mul(i, this.activation.apply(z2))); + o = this.recurrentActivation.apply(z3); + const h = mul(o, this.activation.apply(c)); + return [h, h, c]; + }); + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { + units: this.units, + activation: serializeActivation(this.activation), + recurrentActivation: serializeActivation(this.recurrentActivation), + useBias: this.useBias, + kernelInitializer: serializeInitializer(this.kernelInitializer), + recurrentInitializer: serializeInitializer(this.recurrentInitializer), + biasInitializer: serializeInitializer(this.biasInitializer), + unitForgetBias: this.unitForgetBias, + kernelRegularizer: serializeRegularizer(this.kernelRegularizer), + recurrentRegularizer: serializeRegularizer(this.recurrentRegularizer), + biasRegularizer: serializeRegularizer(this.biasRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + kernelConstraint: serializeConstraint(this.kernelConstraint), + recurrentConstraint: serializeConstraint(this.recurrentConstraint), + biasConstraint: serializeConstraint(this.biasConstraint), + dropout: this.dropout, + recurrentDropout: this.recurrentDropout, + implementation: this.implementation + }; + return Object.assign({}, baseConfig, config); + } + }; + LSTMCell.className = "LSTMCell"; + serialization_exports.registerClass(LSTMCell); + var LSTM = class extends RNN { + constructor(args) { + if (args.implementation === 0) { + console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."); + } + args.cell = new LSTMCell(args); + super(args); + } + call(inputs, kwargs) { + return tidy(() => { + if (this.cell.dropoutMask != null) { + dispose(this.cell.dropoutMask); + this.cell.dropoutMask = null; + } + if (this.cell.recurrentDropoutMask != null) { + dispose(this.cell.recurrentDropoutMask); + this.cell.recurrentDropoutMask = null; + } + const mask = kwargs == null ? null : kwargs["mask"]; + const training = kwargs == null ? null : kwargs["training"]; + const initialState = kwargs == null ? null : kwargs["initialState"]; + return super.call(inputs, { mask, training, initialState }); + }); + } + static fromConfig(cls, config) { + if (config["implmentation"] === 0) { + config["implementation"] = 1; + } + return new cls(config); + } + }; + LSTM.className = "LSTM"; + serialization_exports.registerClass(LSTM); + var StackedRNNCells = class extends RNNCell { + constructor(args) { + super(args); + this.cells = args.cells; + } + get stateSize() { + const stateSize = []; + for (const cell of this.cells.slice().reverse()) { + if (Array.isArray(cell.stateSize)) { + stateSize.push(...cell.stateSize); + } else { + stateSize.push(cell.stateSize); + } + } + return stateSize; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = inputs; + let states = inputs.slice(1); + const nestedStates = []; + for (const cell of this.cells.slice().reverse()) { + if (Array.isArray(cell.stateSize)) { + nestedStates.push(states.splice(0, cell.stateSize.length)); + } else { + nestedStates.push(states.splice(0, 1)); + } + } + nestedStates.reverse(); + const newNestedStates = []; + let callInputs; + for (let i = 0; i < this.cells.length; ++i) { + const cell = this.cells[i]; + states = nestedStates[i]; + if (i === 0) { + callInputs = [inputs[0]].concat(states); + } else { + callInputs = [callInputs[0]].concat(states); + } + callInputs = cell.call(callInputs, kwargs); + newNestedStates.push(callInputs.slice(1)); + } + states = []; + for (const cellStates of newNestedStates.slice().reverse()) { + states.push(...cellStates); + } + return [callInputs[0]].concat(states); + }); + } + build(inputShape) { + if (isArrayOfShapes(inputShape)) { + inputShape = inputShape[0]; + } + inputShape = inputShape; + let outputDim; + this.cells.forEach((cell, i) => { + nameScope(`RNNCell_${i}`, () => { + cell.build(inputShape); + if (Array.isArray(cell.stateSize)) { + outputDim = cell.stateSize[0]; + } else { + outputDim = cell.stateSize; + } + inputShape = [inputShape[0], outputDim]; + }); + }); + this.built = true; + } + getConfig() { + const baseConfig = super.getConfig(); + const getCellConfig = (cell) => { + return { + "className": cell.getClassName(), + "config": cell.getConfig() + }; + }; + const cellConfigs = this.cells.map(getCellConfig); + const config = { "cells": cellConfigs }; + return Object.assign({}, baseConfig, config); + } + static fromConfig(cls, config, customObjects = {}) { + const cells = []; + for (const cellConfig of config["cells"]) { + cells.push(deserialize(cellConfig, customObjects)); + } + return new cls({ cells }); + } + get trainableWeights() { + if (!this.trainable) { + return []; + } + const weights = []; + for (const cell of this.cells) { + weights.push(...cell.trainableWeights); + } + return weights; + } + get nonTrainableWeights() { + const weights = []; + for (const cell of this.cells) { + weights.push(...cell.nonTrainableWeights); + } + if (!this.trainable) { + const trainableWeights = []; + for (const cell of this.cells) { + trainableWeights.push(...cell.trainableWeights); + } + return trainableWeights.concat(weights); + } + return weights; + } + getWeights() { + const weights = []; + for (const cell of this.cells) { + weights.push(...cell.weights); + } + return batchGetValue(weights); + } + setWeights(weights) { + const tuples = []; + for (const cell of this.cells) { + const numParams = cell.weights.length; + const inputWeights = weights.splice(numParams); + for (let i = 0; i < cell.weights.length; ++i) { + tuples.push([cell.weights[i], inputWeights[i]]); + } + } + batchSetValue(tuples); + } + }; + StackedRNNCells.className = "StackedRNNCells"; + serialization_exports.registerClass(StackedRNNCells); + function generateDropoutMask(args) { + const { ones: ones3, rate, training = false, count: count2 = 1, dropoutFunc } = args; + const droppedInputs = () => dropoutFunc != null ? dropoutFunc(ones3(), rate) : dropout2(ones3(), rate); + const createMask = () => inTrainPhase(droppedInputs, ones3, training); + if (!count2 || count2 <= 1) { + return keep(createMask().clone()); + } + const masks = Array(count2).fill(void 0).map(createMask); + return masks.map((m) => keep(m.clone())); + } + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_recurrent.js + var __rest = function(s, e) { + var t = {}; + for (var p2 in s) + if (Object.prototype.hasOwnProperty.call(s, p2) && e.indexOf(p2) < 0) + t[p2] = s[p2]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p2 = Object.getOwnPropertySymbols(s); i < p2.length; i++) { + if (e.indexOf(p2[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p2[i])) + t[p2[i]] = s[p2[i]]; + } + return t; + }; + var ConvRNN2D = class extends RNN { + constructor(args) { + if (args.unroll) { + throw new NotImplementedError("Unrolling is not possible with convolutional RNNs."); + } + if (Array.isArray(args.cell)) { + throw new NotImplementedError("It is not possible at the moment to stack convolutional cells."); + } + super(args); + this.inputSpec = [new InputSpec({ ndim: 5 })]; + } + call(inputs, kwargs) { + return tidy(() => { + if (this.cell.dropoutMask != null) { + dispose(this.cell.dropoutMask); + this.cell.dropoutMask = null; + } + if (this.cell.recurrentDropoutMask != null) { + dispose(this.cell.recurrentDropoutMask); + this.cell.recurrentDropoutMask = null; + } + if (kwargs && kwargs["constants"]) { + throw new ValueError("ConvRNN2D cell does not support constants"); + } + const mask = kwargs == null ? null : kwargs["mask"]; + const training = kwargs == null ? null : kwargs["training"]; + const initialState = kwargs == null ? null : kwargs["initialState"]; + return super.call(inputs, { mask, training, initialState }); + }); + } + computeOutputShape(inputShape) { + let outShape = this.computeSingleOutputShape(inputShape); + if (!this.returnSequences) { + outShape = [outShape[0], ...outShape.slice(2)]; + } + if (this.returnState) { + outShape = [outShape, ...Array(2).fill([inputShape[0], ...outShape.slice(-3)])]; + } + return outShape; + } + getInitialState(inputs) { + return tidy(() => { + const { stateSize } = this.cell; + const inputShape = inputs.shape; + const outputShape = this.computeSingleOutputShape(inputShape); + const stateShape = [outputShape[0], ...outputShape.slice(2)]; + const initialState = zeros(stateShape); + if (Array.isArray(stateSize)) { + return Array(stateSize.length).fill(initialState); + } + return [initialState]; + }); + } + resetStates(states, training = false) { + tidy(() => { + if (!this.stateful) { + throw new AttributeError("Cannot call resetStates() on an RNN Layer that is not stateful."); + } + const inputShape = this.inputSpec[0].shape; + const outputShape = this.computeSingleOutputShape(inputShape); + const stateShape = [outputShape[0], ...outputShape.slice(2)]; + const batchSize = inputShape[0]; + if (batchSize == null) { + throw new ValueError("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer."); + } + if (this.getStates() == null) { + if (Array.isArray(this.cell.stateSize)) { + this.states_ = this.cell.stateSize.map(() => zeros(stateShape)); + } else { + this.states_ = [zeros(stateShape)]; + } + } else if (states == null) { + dispose(this.states_); + if (this.keptStates != null) { + dispose(this.keptStates); + this.keptStates = []; + } + if (Array.isArray(this.cell.stateSize)) { + this.states_ = this.cell.stateSize.map(() => zeros(stateShape)); + } else { + this.states_[0] = zeros(stateShape); + } + } else { + if (!Array.isArray(states)) { + states = [states]; + } + if (states.length !== this.states_.length) { + throw new ValueError(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${states.length} state value(s). Input received: ${states}`); + } + if (training) { + this.keptStates.push(this.states_.slice()); + } else { + dispose(this.states_); + } + for (let index = 0; index < this.states_.length; ++index) { + const value = states[index]; + const expectedShape = stateShape; + if (!util_exports.arraysEqual(value.shape, expectedShape)) { + throw new ValueError(`State ${index} is incompatible with layer ${this.name}: expected shape=${expectedShape}, received shape=${value.shape}`); + } + this.states_[index] = value; + } + } + this.states_ = this.states_.map((state) => keep(state.clone())); + }); + } + computeSingleOutputShape(inputShape) { + const { dataFormat, filters, kernelSize, padding, strides, dilationRate } = this.cell; + const isChannelsFirst = dataFormat === "channelsFirst"; + const h = inputShape[isChannelsFirst ? 3 : 2]; + const w = inputShape[isChannelsFirst ? 4 : 3]; + const hOut = convOutputLength(h, kernelSize[0], padding, strides[0], dilationRate[0]); + const wOut = convOutputLength(w, kernelSize[1], padding, strides[1], dilationRate[1]); + const outShape = [ + ...inputShape.slice(0, 2), + ...isChannelsFirst ? [filters, hOut, wOut] : [hOut, wOut, filters] + ]; + return outShape; + } + }; + ConvRNN2D.className = "ConvRNN2D"; + var ConvLSTM2DCell = class extends LSTMCell { + constructor(args) { + const { filters, kernelSize, strides, padding, dataFormat, dilationRate } = args; + super(Object.assign({}, args, { units: filters })); + this.filters = filters; + assertPositiveInteger(this.filters, "filters"); + this.kernelSize = normalizeArray(kernelSize, 2, "kernelSize"); + this.kernelSize.forEach((size) => assertPositiveInteger(size, "kernelSize")); + this.strides = normalizeArray(strides || 1, 2, "strides"); + this.strides.forEach((stride) => assertPositiveInteger(stride, "strides")); + this.padding = padding || "valid"; + checkPaddingMode(this.padding); + this.dataFormat = dataFormat || "channelsLast"; + checkDataFormat(this.dataFormat); + this.dilationRate = normalizeArray(dilationRate || 1, 2, "dilationRate"); + this.dilationRate.forEach((rate) => assertPositiveInteger(rate, "dilationRate")); + } + build(inputShape) { + var _a; + inputShape = getExactlyOneShape(inputShape); + const channelAxis = this.dataFormat === "channelsFirst" ? 1 : inputShape.length - 1; + if (inputShape[channelAxis] == null) { + throw new ValueError(`The channel dimension of the input should be defined. Found ${inputShape[channelAxis]}`); + } + const inputDim = inputShape[channelAxis]; + const numOfKernels = 4; + const kernelShape = this.kernelSize.concat([inputDim, this.filters * numOfKernels]); + this.kernel = this.addWeight("kernel", kernelShape, null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + const recurrentKernelShape = this.kernelSize.concat([this.filters, this.filters * numOfKernels]); + this.recurrentKernel = this.addWeight("recurrent_kernel", recurrentKernelShape, null, this.recurrentInitializer, this.recurrentRegularizer, true, this.recurrentConstraint); + if (this.useBias) { + let biasInitializer; + if (this.unitForgetBias) { + const init2 = this.biasInitializer; + const filters = this.filters; + biasInitializer = new (_a = class CustomInit extends Initializer { + apply(shape, dtype) { + const biasI = init2.apply([filters]); + const biasF = ones2([filters]); + const biasCAndO = init2.apply([filters * 2]); + return concatenate([biasI, biasF, biasCAndO]); + } + }, _a.className = "CustomInit", _a)(); + } else { + biasInitializer = this.biasInitializer; + } + this.bias = this.addWeight("bias", [this.filters * numOfKernels], null, biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + if (inputs.length !== 3) { + throw new ValueError(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${inputs.length}.`); + } + const training = kwargs["training"] || false; + const x = inputs[0]; + const hTMinus1 = inputs[1]; + const cTMinus1 = inputs[2]; + const numOfKernels = 4; + if (0 < this.dropout && this.dropout < 1 && this.dropoutMask == null) { + this.dropoutMask = generateDropoutMask({ + ones: () => onesLike(x), + rate: this.dropout, + training, + count: numOfKernels, + dropoutFunc: this.dropoutFunc + }); + } + const dropoutMask = this.dropoutMask; + const applyDropout = (x2, mask, index) => { + if (!mask || !mask[index]) { + return x2; + } + return mul(mask[index], x2); + }; + let xI = applyDropout(x, dropoutMask, 0); + let xF = applyDropout(x, dropoutMask, 1); + let xC = applyDropout(x, dropoutMask, 2); + let xO = applyDropout(x, dropoutMask, 3); + if (0 < this.recurrentDropout && this.recurrentDropout < 1 && this.recurrentDropoutMask == null) { + this.recurrentDropoutMask = generateDropoutMask({ + ones: () => onesLike(hTMinus1), + rate: this.recurrentDropout, + training, + count: numOfKernels, + dropoutFunc: this.dropoutFunc + }); + } + const recDropoutMask = this.recurrentDropoutMask; + let hI = applyDropout(hTMinus1, recDropoutMask, 0); + let hF = applyDropout(hTMinus1, recDropoutMask, 1); + let hC = applyDropout(hTMinus1, recDropoutMask, 2); + let hO = applyDropout(hTMinus1, recDropoutMask, 3); + const kernelChannelAxis = 3; + const [kernelI, kernelF, kernelC, kernelO] = split(this.kernel.read(), numOfKernels, kernelChannelAxis); + const [biasI, biasF, biasC, biasO] = this.useBias ? split(this.bias.read(), numOfKernels) : [null, null, null, null]; + xI = this.inputConv(xI, kernelI, biasI, this.padding); + xF = this.inputConv(xF, kernelF, biasF, this.padding); + xC = this.inputConv(xC, kernelC, biasC, this.padding); + xO = this.inputConv(xO, kernelO, biasO, this.padding); + const [recKernelI, recKernelF, recKernelC, recKernelO] = split(this.recurrentKernel.read(), numOfKernels, kernelChannelAxis); + hI = this.recurrentConv(hI, recKernelI); + hF = this.recurrentConv(hF, recKernelF); + hC = this.recurrentConv(hC, recKernelC); + hO = this.recurrentConv(hO, recKernelO); + const i = this.recurrentActivation.apply(add2(xI, hI)); + const f = this.recurrentActivation.apply(add2(xF, hF)); + const c = add2(mul(f, cTMinus1), mul(i, this.activation.apply(add2(xC, hC)))); + const h = mul(this.recurrentActivation.apply(add2(xO, hO)), this.activation.apply(c)); + return [h, h, c]; + }); + } + getConfig() { + const _a = super.getConfig(), { "units": _ } = _a, baseConfig = __rest(_a, ["units"]); + const config = { + filters: this.filters, + kernelSize: this.kernelSize, + padding: this.padding, + dataFormat: this.dataFormat, + dilationRate: this.dilationRate, + strides: this.strides + }; + return Object.assign({}, baseConfig, config); + } + inputConv(x, w, b, padding) { + const out = conv2d(x, w, this.strides, padding || "valid", this.dataFormat === "channelsFirst" ? "NCHW" : "NHWC", this.dilationRate); + if (b) { + return biasAdd(out, b, this.dataFormat); + } + return out; + } + recurrentConv(x, w) { + const strides = 1; + return conv2d(x, w, strides, "same", this.dataFormat === "channelsFirst" ? "NCHW" : "NHWC"); + } + }; + ConvLSTM2DCell.className = "ConvLSTM2DCell"; + serialization_exports.registerClass(ConvLSTM2DCell); + var ConvLSTM2D = class extends ConvRNN2D { + constructor(args) { + const cell = new ConvLSTM2DCell(args); + super(Object.assign({}, args, { cell })); + } + static fromConfig(cls, config) { + return new cls(config); + } + }; + ConvLSTM2D.className = "ConvLSTM2D"; + serialization_exports.registerClass(ConvLSTM2D); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/core.js + init_define_BUILD_VERSION(); + var Dropout = class extends Layer { + constructor(args) { + super(args); + this.rate = Math.max(Math.min(args.rate, 1), 0); + this.noiseShape = args.noiseShape; + this.seed = args.seed; + this.supportsMasking = true; + } + getNoiseShape(input2) { + if (this.noiseShape == null) { + return this.noiseShape; + } + const inputShape = input2.shape; + const noiseShape = []; + for (let i = 0; i < this.noiseShape.length; ++i) { + noiseShape.push(this.noiseShape[i] == null ? inputShape[i] : this.noiseShape[i]); + } + return noiseShape; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + if (0 < this.rate && this.rate < 1) { + const training = kwargs["training"] == null ? false : kwargs["training"]; + const noiseShape = this.getNoiseShape(input2); + const output = inTrainPhase(() => dropout2(input2, this.rate, noiseShape, this.seed), () => input2, training); + return output; + } + return inputs; + }); + } + getConfig() { + const config = { + rate: this.rate, + noiseShape: this.noiseShape, + seed: this.seed + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + dispose() { + return super.dispose(); + } + }; + Dropout.className = "Dropout"; + serialization_exports.registerClass(Dropout); + var SpatialDropout1D = class extends Dropout { + constructor(args) { + super(args); + this.inputSpec = [{ ndim: 3 }]; + } + getNoiseShape(input2) { + const inputShape = input2.shape; + return [inputShape[0], 1, inputShape[2]]; + } + }; + SpatialDropout1D.className = "SpatialDropout1D"; + serialization_exports.registerClass(SpatialDropout1D); + var Dense = class extends Layer { + constructor(args) { + super(args); + this.activation = null; + this.useBias = true; + this.kernel = null; + this.bias = null; + this.DEFAULT_KERNEL_INITIALIZER = "glorotNormal"; + this.DEFAULT_BIAS_INITIALIZER = "zeros"; + if (args.batchInputShape == null && args.inputShape == null && args.inputDim != null) { + let batchSize = null; + if (args.batchSize != null) { + batchSize = args.batchSize; + } + this.batchInputShape = [batchSize, args.inputDim]; + } + this.units = args.units; + assertPositiveInteger(this.units, "units"); + this.activation = getActivation(args.activation); + if (args.useBias != null) { + this.useBias = args.useBias; + } + this.kernelInitializer = getInitializer(args.kernelInitializer || this.DEFAULT_KERNEL_INITIALIZER); + this.biasInitializer = getInitializer(args.biasInitializer || this.DEFAULT_BIAS_INITIALIZER); + this.kernelConstraint = getConstraint(args.kernelConstraint); + this.biasConstraint = getConstraint(args.biasConstraint); + this.kernelRegularizer = getRegularizer(args.kernelRegularizer); + this.biasRegularizer = getRegularizer(args.biasRegularizer); + this.activityRegularizer = getRegularizer(args.activityRegularizer); + this.supportsMasking = true; + this.inputSpec = [{ minNDim: 2 }]; + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const inputLastDim = inputShape[inputShape.length - 1]; + if (this.kernel == null) { + this.kernel = this.addWeight("kernel", [inputLastDim, this.units], null, this.kernelInitializer, this.kernelRegularizer, true, this.kernelConstraint); + if (this.useBias) { + this.bias = this.addWeight("bias", [this.units], null, this.biasInitializer, this.biasRegularizer, true, this.biasConstraint); + } + } + this.inputSpec = [{ minNDim: 2, axes: { [-1]: inputLastDim } }]; + this.built = true; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const outputShape = inputShape.slice(); + outputShape[outputShape.length - 1] = this.units; + return outputShape; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + const fusedActivationName = mapActivationToFusedKernel(this.activation.getClassName()); + let output; + if (fusedActivationName != null) { + output = dot2(input2, this.kernel.read(), fusedActivationName, this.bias ? this.bias.read() : null); + } else { + output = dot2(input2, this.kernel.read()); + if (this.bias != null) { + output = biasAdd(output, this.bias.read()); + } + if (this.activation != null) { + output = this.activation.apply(output); + } + } + return output; + }); + } + getConfig() { + const config = { + units: this.units, + activation: serializeActivation(this.activation), + useBias: this.useBias, + kernelInitializer: serializeInitializer(this.kernelInitializer), + biasInitializer: serializeInitializer(this.biasInitializer), + kernelRegularizer: serializeRegularizer(this.kernelRegularizer), + biasRegularizer: serializeRegularizer(this.biasRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + kernelConstraint: serializeConstraint(this.kernelConstraint), + biasConstraint: serializeConstraint(this.biasConstraint) + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Dense.className = "Dense"; + serialization_exports.registerClass(Dense); + var Flatten = class extends Layer { + constructor(args) { + args = args || {}; + super(args); + this.inputSpec = [{ minNDim: 3 }]; + this.dataFormat = args.dataFormat; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + for (const dim of inputShape.slice(1)) { + if (dim == null) { + throw new ValueError(`The shape of the input to "Flatten" is not fully defined (got ${inputShape.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`); + } + } + return [inputShape[0], arrayProd(inputShape, 1)]; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + let input2 = getExactlyOneTensor(inputs); + if (this.dataFormat === "channelsFirst" && input2.rank > 1) { + const permutation = [0]; + for (let i = 2; i < input2.rank; ++i) { + permutation.push(i); + } + permutation.push(1); + input2 = transpose(input2, permutation); + } + return batchFlatten(input2); + }); + } + getConfig() { + const config = {}; + if (this.dataFormat != null) { + config["dataFormat"] = this.dataFormat; + } + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Flatten.className = "Flatten"; + serialization_exports.registerClass(Flatten); + var Activation2 = class extends Layer { + constructor(args) { + super(args); + this.supportsMasking = true; + this.activation = getActivation(args.activation); + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + return this.activation.apply(input2); + }); + } + getConfig() { + const config = { activation: serializeActivation(this.activation) }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Activation2.className = "Activation"; + serialization_exports.registerClass(Activation2); + var RepeatVector = class extends Layer { + constructor(args) { + super(args); + this.n = args.n; + this.inputSpec = [{ ndim: 2 }]; + } + computeOutputShape(inputShape) { + return [inputShape[0], this.n, inputShape[1]]; + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + return repeat(inputs, this.n); + }); + } + getConfig() { + const config = { + n: this.n + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + RepeatVector.className = "RepeatVector"; + serialization_exports.registerClass(RepeatVector); + var Reshape2 = class extends Layer { + constructor(args) { + super(args); + this.targetShape = args.targetShape; + for (let i = 0; i < this.targetShape.length; ++i) { + if (this.isUnknown(this.targetShape[i])) { + this.targetShape[i] = null; + } + } + } + isUnknown(dim) { + return dim < 0 || dim == null; + } + fixUnknownDimension(inputShape, outputShape) { + const errorMsg = "Total size of new array must be unchanged."; + const finalShape = outputShape.slice(); + let known = 1; + let unknown = null; + for (let i = 0; i < finalShape.length; ++i) { + const dim = finalShape[i]; + if (this.isUnknown(dim)) { + if (unknown === null) { + unknown = i; + } else { + throw new ValueError("Can only specifiy one unknown dimension."); + } + } else { + known *= dim; + } + } + const originalSize = arrayProd(inputShape); + if (unknown !== null) { + if (known === 0 || originalSize % known !== 0) { + throw new ValueError(errorMsg); + } + finalShape[unknown] = originalSize / known; + } else if (originalSize !== known) { + throw new ValueError(errorMsg); + } + return finalShape; + } + computeOutputShape(inputShape) { + let anyUnknownDims = false; + for (let i = 0; i < inputShape.length; ++i) { + if (this.isUnknown(inputShape[i])) { + anyUnknownDims = true; + break; + } + } + if (anyUnknownDims) { + return inputShape.slice(0, 1).concat(this.targetShape); + } else { + return inputShape.slice(0, 1).concat(this.fixUnknownDimension(inputShape.slice(1), this.targetShape)); + } + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + const inputShape = input2.shape; + const outputShape = inputShape.slice(0, 1).concat(this.fixUnknownDimension(inputShape.slice(1), this.targetShape)); + return reshape(input2, outputShape); + }); + } + getConfig() { + const config = { + targetShape: this.targetShape + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Reshape2.className = "Reshape"; + serialization_exports.registerClass(Reshape2); + var Permute = class extends Layer { + constructor(args) { + super(args); + if (args.dims == null) { + throw new Error("Required configuration field `dims` is missing during Permute constructor call."); + } + if (!Array.isArray(args.dims)) { + throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${args.dims} instead.`); + } + const expectedSortedIndices = range2(1, args.dims.length + 1); + if (!util_exports.arraysEqual(args.dims.slice().sort(), expectedSortedIndices)) { + throw new Error("Invalid permutation `dims`: " + JSON.stringify(args.dims) + " `dims` must contain consecutive integers starting from 1."); + } + this.dims = args.dims; + this.dimsIncludingBatch = [0].concat(this.dims); + this.inputSpec = [new InputSpec({ ndim: this.dims.length + 1 })]; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const outputShape = inputShape.slice(); + this.dims.forEach((dim, i) => { + outputShape[i + 1] = inputShape[dim]; + }); + return outputShape; + } + call(inputs, kwargs) { + return transpose(getExactlyOneTensor(inputs), this.dimsIncludingBatch); + } + getConfig() { + const config = { + dims: this.dims + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Permute.className = "Permute"; + serialization_exports.registerClass(Permute); + var Masking = class extends Layer { + constructor(args) { + super(args == null ? {} : args); + this.supportsMasking = true; + if (args != null) { + this.maskValue = args.maskValue == null ? 0 : args.maskValue; + } else { + this.maskValue = 0; + } + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { maskValue: this.maskValue }; + Object.assign(config, baseConfig); + return config; + } + computeMask(inputs, mask) { + const input2 = getExactlyOneTensor(inputs); + const axis = -1; + return any(notEqual(input2, this.maskValue), axis); + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + const axis = -1; + const keepDims = true; + const booleanMask = any(notEqual(input2, this.maskValue), axis, keepDims); + const output = mul(input2, cast(booleanMask, input2.dtype)); + return output; + }); + } + }; + Masking.className = "Masking"; + serialization_exports.registerClass(Masking); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/embeddings.js + init_define_BUILD_VERSION(); + var Embedding = class extends Layer { + constructor(args) { + super(args); + this.embeddings = null; + this.DEFAULT_EMBEDDINGS_INITIALIZER = "randomUniform"; + if (args.batchInputShape == null && args.inputShape == null) { + let batchSize = null; + if (args.batchSize != null) { + batchSize = args.batchSize; + } + if (args.inputLength == null) { + this.batchInputShape = [batchSize, null]; + } else { + this.batchInputShape = [batchSize].concat(toList(args.inputLength)); + } + } + this.inputDim = args.inputDim; + assertPositiveInteger(this.inputDim, "inputDim"); + this.outputDim = args.outputDim; + assertPositiveInteger(this.outputDim, "outputDim"); + this.embeddingsInitializer = getInitializer(args.embeddingsInitializer || this.DEFAULT_EMBEDDINGS_INITIALIZER); + this.embeddingsRegularizer = getRegularizer(args.embeddingsRegularizer); + this.activityRegularizer = getRegularizer(args.activityRegularizer); + this.embeddingsConstraint = getConstraint(args.embeddingsConstraint); + this.maskZero = args.maskZero; + this.supportsMasking = args.maskZero; + this.inputLength = args.inputLength; + } + build(inputShape) { + this.embeddings = this.addWeight("embeddings", [this.inputDim, this.outputDim], this.dtype, this.embeddingsInitializer, this.embeddingsRegularizer, true, this.embeddingsConstraint); + this.built = true; + } + warnOnIncompatibleInputShape(inputShape) { + } + computeMask(inputs, mask) { + return tidy(() => { + if (!this.maskZero) { + return null; + } else { + inputs = getExactlyOneTensor(inputs); + return notEqual(inputs, zerosLike(inputs)); + } + }); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (this.inputLength == null) { + return [...inputShape, this.outputDim]; + } + const inLens = toList(this.inputLength); + if (inLens.length !== inputShape.length - 1) { + throw new ValueError(`"inputLength" is ${this.inputLength}, but received input shape has shape ${inputShape}`); + } else { + let i = 0; + for (let k = 0; k < inLens.length; ++k) { + const s1 = inLens[k]; + const s2 = inputShape[k + 1]; + if (s1 != null && s2 != null && s1 !== s2) { + throw new ValueError(`"inputLength" is ${this.inputLength}, but received input shape has shape ${inputShape}`); + } else if (s1 == null) { + inLens[i] = s2; + } + i++; + } + } + return [inputShape[0], ...inLens, this.outputDim]; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + let input2 = getExactlyOneTensor(inputs); + if (input2.dtype !== "int32") { + input2 = cast2(input2, "int32"); + } + const output = gather2(this.embeddings.read(), reshape(input2, [input2.size])); + return reshape(output, getExactlyOneShape(this.computeOutputShape(input2.shape))); + }); + } + getConfig() { + const config = { + inputDim: this.inputDim, + outputDim: this.outputDim, + embeddingsInitializer: serializeInitializer(this.embeddingsInitializer), + embeddingsRegularizer: serializeRegularizer(this.embeddingsRegularizer), + activityRegularizer: serializeRegularizer(this.activityRegularizer), + embeddingsConstraint: serializeConstraint(this.embeddingsConstraint), + maskZero: this.maskZero, + inputLength: this.inputLength + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Embedding.className = "Embedding"; + serialization_exports.registerClass(Embedding); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/merge.js + init_define_BUILD_VERSION(); + var Merge = class extends Layer { + constructor(args) { + super(args || {}); + this.supportsMasking = true; + } + mergeFunction(inputs) { + throw new NotImplementedError(); + } + computeElementwiseOpOutputShape(shape1, shape2) { + if (shape1 == null || shape2 == null) { + return null; + } else if (shape1.length < shape2.length) { + return this.computeElementwiseOpOutputShape(shape2, shape1); + } else if (shape2.length === 0) { + return shape1; + } + const outputShape = shape1.slice(0, shape1.length - shape2.length); + for (let k = 0; k < shape2.length; ++k) { + const i = shape1[shape1.length - shape2.length + k]; + const j = shape2[k]; + if (i == null || j == null || i < 0 || j < 0) { + outputShape.push(null); + } else if (i === 1) { + outputShape.push(j); + } else if (j === 1) { + outputShape.push(i); + } else { + if (i !== j) { + throw new ValueError("Operands could not be broadcast together with shapes " + JSON.stringify(shape1) + " " + JSON.stringify(shape2)); + } + outputShape.push(i); + } + } + return outputShape; + } + build(inputShape) { + if (Array.isArray(inputShape) && !Array.isArray(inputShape[0])) { + inputShape = [getExactlyOneShape(inputShape)]; + } + inputShape = inputShape; + if (inputShape.length < 2) { + throw new ValueError(`A merge layer should be called on an Array of at least 2 inputs. Got ${inputShape.length} input(s).`); + } + let batchSizes = []; + for (const shape of inputShape) { + if (shape != null && shape[0] !== null) { + batchSizes.push(shape[0]); + } + } + batchSizes = unique2(batchSizes); + if (batchSizes.length > 1) { + throw new ValueError(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(inputShape)}.`); + } + let outputShape = inputShape[0] == null ? null : inputShape[0].slice(1); + for (let i = 1; i < inputShape.length; ++i) { + const shape = inputShape[i] == null ? null : inputShape[i].slice(1); + outputShape = this.computeElementwiseOpOutputShape(outputShape, shape); + } + const allRanks = inputShape.map((shape) => shape.length); + if (inputShape.indexOf(null) === -1 && unique2(allRanks).length === 1) { + this.reshapeRequired = false; + } else { + this.reshapeRequired = true; + } + } + call(inputs, kwargs) { + return tidy(() => { + inputs = inputs; + if (this.reshapeRequired) { + const reshapedInputs = []; + const inputDims = inputs.map((input2) => input2.rank); + if (inputDims.indexOf(null) === -1) { + const maxNDim = max2(inputDims); + for (let x of inputs) { + const xNDim = x.rank; + for (let k = 0; k < maxNDim - xNDim; ++k) { + x = expandDims2(x, 1); + } + reshapedInputs.push(x); + } + return this.mergeFunction(reshapedInputs); + } else { + let transposed = false; + for (const x of inputs) { + const xNDim = x.rank; + if (xNDim == null) { + const xShape = x.shape; + const batchSize = xShape[0]; + const newShape = xShape.slice(1).concat([batchSize]); + let xTransposed = reshape(x, [batchSize].concat(arrayProd(xShape.slice(1)))); + xTransposed = transpose(xTransposed, [1, 0]); + xTransposed = reshape(xTransposed, newShape); + reshapedInputs.push(xTransposed); + transposed = true; + } else if (xNDim > 1) { + const dims = range2(1, xNDim).concat([0]); + reshapedInputs.push(transpose(x, dims)); + transposed = true; + } else { + reshapedInputs.push(x); + } + } + let y = this.mergeFunction(reshapedInputs); + const yNDim = y.rank; + if (transposed) { + if (yNDim == null) { + const yShape = y.shape; + const yNDim2 = yShape.length; + const batchSize = yShape[yNDim2 - 1]; + const newShape = [batchSize].concat(yShape.slice(0, yShape.length - 1)); + y = reshape(transpose(reshape(y, [-1, batchSize]), [1, 0]), newShape); + } else if (yNDim > 1) { + const dims = [yNDim - 1].concat(range2(0, yNDim - 1)); + y = transpose(y, dims); + } + } + return y; + } + } else { + return this.mergeFunction(inputs); + } + }); + } + computeOutputShape(inputShape) { + inputShape = inputShape; + let outputShape; + if (inputShape[0] == null) { + outputShape = null; + } else { + outputShape = inputShape[0].slice(1); + } + for (let i = 1; i < inputShape.length; ++i) { + const shape = inputShape[i] == null ? null : inputShape[i].slice(1); + outputShape = this.computeElementwiseOpOutputShape(outputShape, shape); + } + let batchSizes = []; + for (const shape of inputShape) { + if (shape != null && shape[0] !== null) { + batchSizes.push(shape[0]); + } + } + batchSizes = unique2(batchSizes); + if (batchSizes.length === 1) { + outputShape = batchSizes.concat(outputShape); + } else { + outputShape = [null].concat(outputShape); + } + return outputShape; + } + computeMask(inputs, mask) { + return tidy(() => { + if (mask == null) { + return null; + } + if (!Array.isArray(mask)) { + throw new ValueError("`mask` should be an Array"); + } + if (!Array.isArray(inputs)) { + throw new ValueError("`inputs` should be an Array"); + } + if (mask.length !== inputs.length) { + throw new ValueError(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${inputs.length} vs ${mask.length})`); + } + if (mask.every((m) => m == null)) { + return null; + } + mask = mask.map((m) => m == null ? m : expandDims(m, 0)); + let output = mask[0]; + for (let i = 1; i < mask.length - 1; ++i) { + output = logicalAnd(output, mask[i]); + } + return output; + }); + } + }; + var Add2 = class extends Merge { + constructor(args) { + super(args); + } + mergeFunction(inputs) { + return tidy(() => { + let output = inputs[0].clone(); + for (let i = 1; i < inputs.length; ++i) { + output = add2(output, inputs[i]); + } + return output; + }); + } + }; + Add2.className = "Add"; + serialization_exports.registerClass(Add2); + var Multiply2 = class extends Merge { + constructor(args) { + super(args); + } + mergeFunction(inputs) { + return tidy(() => { + let output = inputs[0].clone(); + for (let i = 1; i < inputs.length; ++i) { + output = mul(output, inputs[i]); + } + return output; + }); + } + }; + Multiply2.className = "Multiply"; + serialization_exports.registerClass(Multiply2); + var Average = class extends Merge { + constructor(args) { + super(args); + } + mergeFunction(inputs) { + return tidy(() => { + let output = inputs[0].clone(); + for (let i = 1; i < inputs.length; ++i) { + output = add2(output, inputs[i]); + } + return mul(1 / inputs.length, output); + }); + } + }; + Average.className = "Average"; + serialization_exports.registerClass(Average); + var Maximum2 = class extends Merge { + constructor(args) { + super(args); + } + mergeFunction(inputs) { + return tidy(() => { + let output = inputs[0]; + for (let i = 1; i < inputs.length; ++i) { + output = maximum(output, inputs[i]); + } + return output; + }); + } + }; + Maximum2.className = "Maximum"; + serialization_exports.registerClass(Maximum2); + var Minimum2 = class extends Merge { + constructor(args) { + super(args); + } + mergeFunction(inputs) { + return tidy(() => { + let output = inputs[0]; + for (let i = 1; i < inputs.length; ++i) { + output = minimum(output, inputs[i]); + } + return output; + }); + } + }; + Minimum2.className = "Minimum"; + serialization_exports.registerClass(Minimum2); + var Concatenate = class extends Merge { + constructor(args) { + super(args); + this.DEFAULT_AXIS = -1; + if (args == null) { + args = {}; + } + this.axis = args.axis == null ? this.DEFAULT_AXIS : args.axis; + this.supportsMasking = true; + this.reshapeRequired = false; + } + build(inputShape) { + if (!(Array.isArray(inputShape) && Array.isArray(inputShape[0])) || inputShape.length === 1) { + throw new ValueError("A `Concatenate` layer should be called on a list of at least 2 inputs"); + } + inputShape = inputShape; + let allNoneShape = true; + for (const shape of inputShape) { + if (shape != null) { + allNoneShape = false; + break; + } + } + if (allNoneShape) { + return; + } + const shapeSet = []; + for (let i = 0; i < inputShape.length; ++i) { + const shapeWithoutConcatAxis = inputShape[i].slice(); + shapeWithoutConcatAxis.splice(this.axis, 1); + let exists = false; + for (const shape of shapeSet) { + if (util_exports.arraysEqual(shape, shapeWithoutConcatAxis)) { + exists = true; + break; + } + } + if (!exists) { + shapeSet.push(shapeWithoutConcatAxis); + } + } + if (shapeSet.length > 1) { + throw new ValueError("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: " + JSON.stringify(inputShape)); + } + } + mergeFunction(inputs) { + return tidy(() => { + return concatenate(inputs, this.axis); + }); + } + computeOutputShape(inputShape) { + if (!(Array.isArray(inputShape) && Array.isArray(inputShape[0]))) { + throw new ValueError("A `Concatenate` layer should be called on a list of inputs."); + } + const inputShapes = inputShape; + const outputShape = inputShapes[0].slice(); + const axis = this.axis < 0 ? outputShape.length + this.axis : this.axis; + for (const shape of inputShapes.slice(1)) { + if (outputShape[axis] == null || shape[axis] == null) { + outputShape[axis] = null; + break; + } + outputShape[axis] += shape[axis]; + } + return outputShape; + } + computeMask(inputs, mask) { + if (mask == null) { + return null; + } + if (!Array.isArray(mask)) { + throw new ValueError("`mask` should be an array for Concatenate"); + } + if (!Array.isArray(inputs)) { + throw new ValueError("`inputs` should be an array for Concatenate"); + } + if (mask.length !== inputs.length) { + throw new ValueError(`Mismatch in the length of mask (${mask.length}) and the legnth of inputs (${inputs.length})`); + } + return tidy(() => { + let allNullMasks = true; + mask.forEach((m) => { + if (m != null) { + allNullMasks = false; + return; + } + }); + if (allNullMasks) { + return null; + } + const outputMasks = []; + for (let i = 0; i < inputs.length; ++i) { + if (mask[i] == null) { + outputMasks.push(cast(onesLike(inputs[i]), "bool")); + } else if (mask[i].rank < inputs[i].rank) { + outputMasks.push(expandDims(mask[i], -1)); + } else { + outputMasks.push(mask[i]); + } + } + const concatenatedMasks = concat(outputMasks, this.axis); + return all(concatenatedMasks, -1, false); + }); + } + getConfig() { + const config = { + "axis": this.axis + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Concatenate.className = "Concatenate"; + serialization_exports.registerClass(Concatenate); + function interpretAxis(axis, dim) { + while (axis < 0) { + axis += dim; + } + return axis; + } + function batchDot(x, y, axes) { + if (x.shape.length > 3 || y.shape.length > 3) { + throw new NotImplementedError("batchDot is not implemented for tensors of 4D or higher rank yet"); + } + util_exports.assert(x.shape.length >= 2, () => `batchDot requires the rank of x to be >= 2, but got ${x.shape.length}`); + util_exports.assert(x.shape.length >= 2, () => `batchDot requires the rank of y to be >= 2, but got ${y.shape.length}`); + if (typeof axes === "number") { + axes = [axes, axes]; + } + if (x.dtype === "complex64" || y.dtype === "complex64") { + throw new NotImplementedError("batchDot is not implemented for complex64-type Tensors yet."); + } + const xNDim = x.shape.length; + const yNDim = y.shape.length; + if (axes == null) { + axes = [xNDim - 1, yNDim - 2]; + } + const axesArray = axes; + return tidy(() => { + let diff; + if (xNDim > yNDim) { + diff = xNDim - yNDim; + const diffShape = []; + for (let i = 0; i < diff; ++i) { + diffShape.push(1); + } + y = reshape(y, y.shape.concat(diffShape)); + } else if (yNDim > xNDim) { + diff = yNDim - xNDim; + const diffShape = []; + for (let i = 0; i < diff; ++i) { + diffShape.push(1); + } + x = reshape(x, x.shape.concat(diffShape)); + } else { + diff = 0; + } + let out; + if (x.shape.length === 2 && y.shape.length === 2) { + if (axesArray[0] === axesArray[1]) { + out = sum2(mul(x, y), axesArray[0]); + } else { + out = sum2(mul(transpose(x, [1, 0]), y), axesArray[1]); + } + } else { + const adjX = axesArray[0] !== x.shape.length - 1; + const adjY = axesArray[1] === y.shape.length - 1; + out = matMul(x, y, adjX, adjY); + } + if (diff > 0) { + let idx; + if (xNDim > yNDim) { + idx = xNDim + yNDim - 3; + } else { + idx = xNDim - 1; + } + const squeezeAxes = []; + for (let i = idx; i < idx + diff; ++i) { + squeezeAxes.push(i); + } + out = squeeze(out, squeezeAxes); + } + if (out.shape.length === 1) { + out = expandDims(out, 1); + } + return out; + }); + } + var Dot = class extends Merge { + constructor(args) { + super(args); + this.axes = args.axes; + this.normalize = args.normalize == null ? false : args.normalize; + this.supportsMasking = true; + this.reshapeRequired = false; + } + build(inputShape) { + util_exports.assert(Array.isArray(inputShape) && inputShape.length === 2 && Array.isArray(inputShape[0]) && Array.isArray(inputShape[1]), () => "A `Dot` layer should be called on a list of exactly 2 inputs."); + const shape1 = inputShape[0]; + const shape2 = inputShape[1]; + if (shape1.length > 3 || shape2.length > 3) { + throw new NotImplementedError("Dot layer does not support tensors of 4D or higher rank yet."); + } + const axes = this.interpretAxes(shape1, shape2); + if (shape1[axes[0]] !== shape2[axes[1]]) { + throw new ValueError(`Dimension incompatibility: ${shape1[axes[0]]} !== ${shape2[axes[1]]}`); + } + } + mergeFunction(inputs) { + if (inputs.length !== 2) { + throw new ValueError(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${inputs.length} input(s).`); + } + let x1 = inputs[0]; + let x2 = inputs[1]; + let axes; + if (!Array.isArray(this.axes)) { + axes = [ + interpretAxis(this.axes, x1.shape.length), + interpretAxis(this.axes, x2.shape.length) + ]; + } else { + axes = this.axes.map((axis, i) => interpretAxis(axis, inputs[i].shape.length)); + } + if (this.normalize) { + x1 = l2Normalize(x1, axes[0]); + x2 = l2Normalize(x2, axes[1]); + } + return batchDot(x1, x2, axes); + } + interpretAxes(shape1, shape2) { + let axes; + if (!Array.isArray(this.axes)) { + axes = [ + interpretAxis(this.axes, shape1.length), + interpretAxis(this.axes, shape2.length) + ]; + } else { + axes = this.axes; + } + return axes; + } + computeOutputShape(inputShape) { + util_exports.assert(Array.isArray(inputShape) && inputShape.length === 2 && Array.isArray(inputShape[0]) && Array.isArray(inputShape[1]), () => "A `Dot` layer should be called on a list of exactly 2 inputs."); + const shape1 = inputShape[0].slice(); + const shape2 = inputShape[1].slice(); + if (shape1.length > 3 || shape2.length > 3) { + throw new NotImplementedError("Dot layer does not support tensors of 4D or higher rank yet."); + } + const axes = this.interpretAxes(shape1, shape2); + shape1.splice(axes[0], 1); + shape2.splice(axes[1], 1); + shape2.splice(0, 1); + const outputShape = shape1.concat(shape2); + if (outputShape.length === 1) { + outputShape.push(1); + } + return outputShape; + } + computeMask(inputs, mask) { + return null; + } + getConfig() { + const config = { + "axes": this.axes, + "normalize": this.normalize + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + Dot.className = "Dot"; + serialization_exports.registerClass(Dot); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/noise.js + init_define_BUILD_VERSION(); + var GaussianNoise = class extends Layer { + constructor(args) { + super(args); + this.supportsMasking = true; + this.stddev = args.stddev; + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { stddev: this.stddev }; + Object.assign(config, baseConfig); + return config; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + const noised = () => add2(randomNormal2(input2.shape, 0, this.stddev), input2); + const output = inTrainPhase(noised, () => input2, kwargs["training"] || false); + return output; + }); + } + }; + GaussianNoise.className = "GaussianNoise"; + serialization_exports.registerClass(GaussianNoise); + var GaussianDropout = class extends Layer { + constructor(args) { + super(args); + this.supportsMasking = true; + this.rate = args.rate; + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { rate: this.rate }; + Object.assign(config, baseConfig); + return config; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + const input2 = getExactlyOneTensor(inputs); + if (this.rate > 0 && this.rate < 1) { + const noised = () => { + const stddev = Math.sqrt(this.rate / (1 - this.rate)); + return mul(input2, randomNormal2(input2.shape, 1, stddev)); + }; + return inTrainPhase(noised, () => input2, kwargs["training"] || false); + } + return input2; + }); + } + }; + GaussianDropout.className = "GaussianDropout"; + serialization_exports.registerClass(GaussianDropout); + var AlphaDropout = class extends Layer { + constructor(args) { + super(args); + this.supportsMasking = true; + this.rate = args.rate; + this.noiseShape = args.noiseShape; + } + _getNoiseShape(inputs) { + return this.noiseShape || getExactlyOneTensor(inputs).shape; + } + computeOutputShape(inputShape) { + return inputShape; + } + getConfig() { + const baseConfig = super.getConfig(); + const config = { rate: this.rate }; + Object.assign(config, baseConfig); + return config; + } + call(inputs, kwargs) { + return tidy(() => { + if (this.rate < 1 && this.rate > 0) { + const noiseShape = this._getNoiseShape(inputs); + const droppedInputs = () => { + const input2 = getExactlyOneTensor(inputs); + const alpha = 1.6732632423543772; + const scale2 = 1.0507009873554805; + const alphaP = -alpha * scale2; + let keptIdx = greaterEqual(randomUniform(noiseShape), this.rate); + keptIdx = cast2(keptIdx, "float32"); + const a = ((1 - this.rate) * (1 + this.rate * alphaP ** 2)) ** -0.5; + const b = -a * alphaP * this.rate; + const x = add2(mul(input2, keptIdx), mul(add2(keptIdx, -1), alphaP)); + return add2(mul(x, a), b); + }; + return inTrainPhase(droppedInputs, () => getExactlyOneTensor(inputs), kwargs["training"] || false); + } + return inputs; + }); + } + }; + AlphaDropout.className = "AlphaDropout"; + serialization_exports.registerClass(AlphaDropout); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/normalization.js + init_define_BUILD_VERSION(); + function batchNormalization(x, mean4, variance, beta, gamma, epsilon3 = 1e-3) { + let out; + if (x.rank === 2) { + out = batchNorm2d(x, mean4, variance, beta, gamma, epsilon3); + } else if (x.rank === 3) { + out = batchNorm3d(x, mean4, variance, beta, gamma, epsilon3); + } else if (x.rank === 4) { + out = batchNorm4d(x, mean4, variance, beta, gamma, epsilon3); + } else { + throw new NotImplementedError(`batchNormalization is not implemented for array of rank ${x.rank} yet`); + } + return out; + } + function regularNormalizeBatchInTraining(x, gamma, beta, reductionAxes, epsilon3 = 1e-3) { + return tidy(() => { + const meanAndVariance = moments(x, reductionAxes); + const mean4 = meanAndVariance.mean; + const variance = meanAndVariance.variance; + const normed = batchNormalization(x, mean4, variance, beta, gamma, epsilon3); + return [normed, mean4, variance]; + }); + } + function broadcastNormalizeBatchInTraining(x, gamma, beta, reductionAxes, epsilon3 = 1e-3) { + return tidy(() => { + const meanAndVariance = moments(x, reductionAxes); + const mean4 = meanAndVariance.mean; + const variance = meanAndVariance.variance; + const targetShape = []; + for (const axis of range2(0, x.rank)) { + if (reductionAxes.indexOf(axis) !== -1) { + targetShape.push(1); + } else { + targetShape.push(x.shape[axis]); + } + } + const broadcastMean = reshape(mean4, targetShape); + const broadcastVariance = reshape(variance, targetShape); + const broadcastGamma = gamma == null ? null : reshape(gamma, targetShape); + const broadcastBeta = beta == null ? null : reshape(beta, targetShape); + const normed = batchNormalization(x, broadcastMean, broadcastVariance, broadcastBeta, broadcastGamma, epsilon3); + return [normed, mean4, variance]; + }); + } + function normalizeBatchInTraining(x, gamma, beta, reductionAxes, epsilon3 = 1e-3) { + if (util_exports.arraysEqual(reductionAxes.slice().sort(), range2(0, x.rank - 1))) { + return regularNormalizeBatchInTraining(x, gamma, beta, reductionAxes, epsilon3); + } else { + return broadcastNormalizeBatchInTraining(x, gamma, beta, reductionAxes, epsilon3); + } + } + var BatchNormalization = class extends Layer { + constructor(args) { + if (args == null) { + args = {}; + } + super(args); + this.supportsMasking = true; + this.axis = args.axis == null ? -1 : args.axis; + this.momentum = args.momentum == null ? 0.99 : args.momentum; + this.epsilon = args.epsilon == null ? 1e-3 : args.epsilon; + this.center = args.center == null ? true : args.center; + this.scale = args.scale == null ? true : args.scale; + this.betaInitializer = getInitializer(args.betaInitializer || "zeros"); + this.gammaInitializer = getInitializer(args.gammaInitializer || "ones"); + this.movingMeanInitializer = getInitializer(args.movingMeanInitializer || "zeros"); + this.movingVarianceInitializer = getInitializer(args.movingVarianceInitializer || "ones"); + this.betaConstraint = getConstraint(args.betaConstraint); + this.gammaConstraint = getConstraint(args.gammaConstraint); + this.betaRegularizer = getRegularizer(args.betaRegularizer); + this.gammaRegularizer = getRegularizer(args.gammaRegularizer); + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const axis = this.axis >= 0 ? this.axis : this.axis + inputShape.length; + const dim = inputShape[axis]; + if (dim == null) { + throw new ValueError(`Axis ${axis} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(inputShape)}.`); + } + this.inputSpec = [new InputSpec({ ndim: inputShape.length, axes: { [axis]: dim } })]; + const shape = [dim]; + if (this.scale) { + this.gamma = this.addWeight("gamma", shape, null, this.gammaInitializer, this.gammaRegularizer, true, this.gammaConstraint); + } + if (this.center) { + this.beta = this.addWeight("beta", shape, null, this.betaInitializer, this.betaRegularizer, true, this.betaConstraint); + } + this.movingMean = this.addWeight("moving_mean", shape, null, this.movingMeanInitializer, null, false); + this.movingVariance = this.addWeight("moving_variance", shape, null, this.movingVarianceInitializer, null, false); + this.built = true; + } + call(inputs, kwargs) { + return tidy(() => { + const training = kwargs["training"] == null ? false : kwargs["training"]; + const input2 = getExactlyOneTensor(inputs); + const inputShape = input2.shape; + const ndim = inputShape.length; + const reductionAxes = range2(0, ndim); + const axis = this.axis >= 0 ? this.axis : this.axis + ndim; + reductionAxes.splice(axis, 1); + const broadcastShape = pyListRepeat(1, ndim); + broadcastShape[axis] = inputShape[axis]; + const sortedReductionAxes = reductionAxes.slice(); + sortedReductionAxes.sort(); + const needsBroadcasting = !util_exports.arraysEqual(sortedReductionAxes, range2(0, ndim).slice(0, ndim - 1)); + const normalizeInference = () => { + if (needsBroadcasting) { + const broadcastMovingMean = reshape(this.movingMean.read(), broadcastShape); + const broadcastMovingVariance = reshape(this.movingVariance.read(), broadcastShape); + const broadcastBeta = this.center ? reshape(this.beta.read(), broadcastShape) : null; + const broadcastGamma = this.scale ? reshape(this.gamma.read(), broadcastShape) : null; + return batchNormalization(input2, broadcastMovingMean, broadcastMovingVariance, broadcastBeta, broadcastGamma, this.epsilon); + } else { + return batchNormalization(input2, this.movingMean.read(), this.movingVariance.read(), this.beta == null ? null : this.beta.read(), this.gamma == null ? null : this.gamma.read(), this.epsilon); + } + }; + if (!training) { + return normalizeInference(); + } + const [normedTraining, mean4, variance] = normalizeBatchInTraining(input2, this.gamma.read(), this.beta.read(), reductionAxes, this.epsilon); + const doMovingAverage = (variable2, value, momentum) => { + tidy(() => { + const decay = 1 - momentum; + const origValue = variable2.read(); + const updateDelta = mul(sub(origValue, value), decay); + variable2.write(sub(origValue, updateDelta)); + }); + }; + const updateMovingMeanAndVariance = () => { + doMovingAverage(this.movingMean, mean4, this.momentum); + doMovingAverage(this.movingVariance, variance, this.momentum); + }; + updateMovingMeanAndVariance(); + return normedTraining; + }); + } + getConfig() { + const config = { + axis: this.axis, + momentum: this.momentum, + epsilon: this.epsilon, + center: this.center, + scale: this.scale, + betaInitializer: serializeInitializer(this.betaInitializer), + gammaInitializer: serializeInitializer(this.gammaInitializer), + movingMeanInitializer: serializeInitializer(this.movingMeanInitializer), + movingVarianceInitializer: serializeInitializer(this.movingVarianceInitializer), + betaRegularizer: serializeRegularizer(this.betaRegularizer), + gammaRegularizer: serializeRegularizer(this.gammaRegularizer), + betaConstraint: serializeConstraint(this.betaConstraint), + gammaConstraint: serializeConstraint(this.gammaConstraint) + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + BatchNormalization.className = "BatchNormalization"; + serialization_exports.registerClass(BatchNormalization); + var LayerNormalization = class extends Layer { + constructor(args) { + if (args == null) { + args = {}; + } + super(args); + this.axis = args.axis == null ? -1 : args.axis; + if (typeof this.axis === "number") { + if (!Number.isInteger(this.axis)) { + throw new Error(`Expected axis to be an integer, but received ${this.axis}`); + } + } else if (Array.isArray(this.axis)) { + for (const axis of this.axis) { + if (!Number.isInteger(axis)) { + throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`); + } + } + } else { + throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`); + } + this.epsilon = args.epsilon == null ? 1e-3 : args.epsilon; + this.center = args.center == null ? true : args.center; + this.scale = args.scale == null ? true : args.scale; + this.betaInitializer = getInitializer(args.betaInitializer || "zeros"); + this.gammaInitializer = getInitializer(args.gammaInitializer || "ones"); + this.betaRegularizer = getRegularizer(args.betaRegularizer); + this.gammaRegularizer = getRegularizer(args.gammaRegularizer); + this.supportsMasking = true; + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const nDims = inputShape.length; + if (typeof this.axis === "number") { + this.axis = [this.axis]; + } + for (let i = 0; i < this.axis.length; ++i) { + if (this.axis[i] < 0) { + this.axis[i] += nDims; + } + } + for (const axis of this.axis) { + if (axis < 0 || axis >= nDims) { + throw new Error(`Invalid axis: ${axis}`); + } + } + if (this.axis.length !== unique2(this.axis).length) { + throw new Error(`Found duplicate axes in: ${this.axis}`); + } + const paramShape = this.axis.map((axis) => inputShape[axis]); + const trainable = true; + if (this.scale) { + this.gamma = this.addWeight("gamma", paramShape, "float32", this.gammaInitializer, this.gammaRegularizer, trainable); + } else { + this.gamma = null; + } + if (this.center) { + this.beta = this.addWeight("beta", paramShape, "float32", this.betaInitializer, this.betaRegularizer, trainable); + } else { + this.beta = null; + } + this.built = true; + } + call(inputs, kwargs) { + const input2 = getExactlyOneTensor(inputs); + const inputShape = input2.shape; + const nDims = inputShape.length; + return tidy(() => { + const keepDims = true; + let { mean: mean4, variance } = moments(input2, this.axis, keepDims); + const broadcastShape = pyListRepeat(1, nDims); + for (const dim of this.axis) { + broadcastShape[dim] = inputShape[dim]; + } + const broadcast = (v) => { + if (v != null && v.shape.length !== nDims) { + return reshape(v, broadcastShape); + } else { + return v; + } + }; + let scale2 = this.scale ? broadcast(this.gamma.read()) : null; + let offset = this.center ? broadcast(this.beta.read()) : null; + const momentsTiling = []; + const scaleOffsetTiling = []; + for (let i = 0; i < nDims; ++i) { + if (this.axis.indexOf(i) !== -1) { + momentsTiling.push(inputShape[i]); + scaleOffsetTiling.push(1); + } else { + momentsTiling.push(1); + scaleOffsetTiling.push(inputShape[i]); + } + } + mean4 = tile(mean4, momentsTiling); + variance = tile(variance, momentsTiling); + if (scale2 != null) { + scale2 = tile(scale2, scaleOffsetTiling); + } + if (offset != null) { + offset = tile(offset, scaleOffsetTiling); + } + return batchNormalization(input2, mean4, variance, offset, scale2, this.epsilon); + }); + } + getConfig() { + const config = { + axis: this.axis, + epsilon: this.epsilon, + center: this.center, + scale: this.scale, + betaInitializer: serializeInitializer(this.betaInitializer), + gammaInitializer: serializeInitializer(this.gammaInitializer), + betaRegularizer: serializeRegularizer(this.betaRegularizer), + gammaRegularizer: serializeRegularizer(this.gammaRegularizer) + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + LayerNormalization.className = "LayerNormalization"; + serialization_exports.registerClass(LayerNormalization); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/padding.js + init_define_BUILD_VERSION(); + function spatial2dPadding(x, padding, dataFormat) { + return tidy(() => { + if (x.rank !== 4) { + throw new ValueError(`temporalPadding expects input tensor to be 4-D, but received a ${x.rank}-D tensor.`); + } + if (padding == null) { + padding = [[1, 1], [1, 1]]; + } + if (padding.length !== 2 || padding[0].length !== 2 || padding[1].length !== 2) { + throw new ValueError("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers."); + } + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + if (dataFormat !== "channelsLast" && dataFormat !== "channelsFirst") { + throw new ValueError(`Unknown data format: ${dataFormat}. Supported data formats are 'channelsLast' and 'channelsFirst.`); + } + let pattern; + if (dataFormat === "channelsFirst") { + pattern = [[0, 0], [0, 0], padding[0], padding[1]]; + } else { + pattern = [[0, 0], padding[0], padding[1], [0, 0]]; + } + return pad(x, pattern); + }); + } + var ZeroPadding2D = class extends Layer { + constructor(args) { + if (args == null) { + args = {}; + } + super(args); + this.dataFormat = args.dataFormat == null ? imageDataFormat() : args.dataFormat; + if (args.padding == null) { + this.padding = [[1, 1], [1, 1]]; + } else if (typeof args.padding === "number") { + this.padding = [[args.padding, args.padding], [args.padding, args.padding]]; + } else { + args.padding = args.padding; + if (args.padding.length !== 2) { + throw new ValueError(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${args.padding.length} array.`); + } + let heightPadding; + let widthPadding; + if (typeof args.padding[0] === "number") { + heightPadding = [args.padding[0], args.padding[0]]; + widthPadding = [args.padding[1], args.padding[1]]; + } else { + args.padding = args.padding; + if (args.padding[0].length !== 2) { + throw new ValueError(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${args.padding[0].length} array.`); + } + heightPadding = args.padding[0]; + if (args.padding[1].length !== 2) { + throw new ValueError(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${args.padding[1].length} array.`); + } + widthPadding = args.padding[1]; + } + this.padding = [heightPadding, widthPadding]; + } + this.inputSpec = [new InputSpec({ ndim: 4 })]; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + let rows; + let cols; + if (this.dataFormat === "channelsFirst") { + if (inputShape[2] != null && inputShape[2] >= 0) { + rows = inputShape[2] + this.padding[0][0] + this.padding[0][1]; + } else { + rows = null; + } + if (inputShape[3] != null && inputShape[3] >= 0) { + cols = inputShape[3] + this.padding[1][0] + this.padding[1][1]; + } else { + cols = null; + } + return [inputShape[0], inputShape[1], rows, cols]; + } else { + if (inputShape[1] != null && inputShape[1] >= 0) { + rows = inputShape[1] + this.padding[0][0] + this.padding[0][1]; + } else { + rows = null; + } + if (inputShape[2] != null && inputShape[2] >= 0) { + cols = inputShape[2] + this.padding[1][0] + this.padding[1][1]; + } else { + cols = null; + } + return [inputShape[0], rows, cols, inputShape[3]]; + } + } + call(inputs, kwargs) { + return tidy(() => spatial2dPadding(getExactlyOneTensor(inputs), this.padding, this.dataFormat)); + } + getConfig() { + const config = { + padding: this.padding, + dataFormat: this.dataFormat + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + ZeroPadding2D.className = "ZeroPadding2D"; + serialization_exports.registerClass(ZeroPadding2D); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/pooling.js + init_define_BUILD_VERSION(); + function pool2d(x, poolSize, strides, padding, dataFormat, poolMode) { + return tidy(() => { + checkDataFormat(dataFormat); + checkPoolMode(poolMode); + checkPaddingMode(padding); + if (strides == null) { + strides = [1, 1]; + } + if (padding == null) { + padding = "valid"; + } + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + if (poolMode == null) { + poolMode = "max"; + } + x = preprocessConv2DInput(x, dataFormat); + let y; + const paddingString = padding === "same" ? "same" : "valid"; + if (poolMode === "max") { + y = maxPool(x, poolSize, strides, paddingString); + } else { + y = avgPool( + x, + poolSize, + strides, + paddingString + ); + } + if (dataFormat === "channelsFirst") { + y = transpose(y, [0, 3, 1, 2]); + } + return y; + }); + } + function pool3d(x, poolSize, strides, padding, dataFormat, poolMode) { + return tidy(() => { + checkDataFormat(dataFormat); + checkPoolMode(poolMode); + checkPaddingMode(padding); + if (strides == null) { + strides = [1, 1, 1]; + } + if (padding == null) { + padding = "valid"; + } + if (dataFormat == null) { + dataFormat = imageDataFormat(); + } + if (poolMode == null) { + poolMode = "max"; + } + x = preprocessConv3DInput(x, dataFormat); + let y; + const paddingString = padding === "same" ? "same" : "valid"; + if (poolMode === "max") { + y = maxPool3d(x, poolSize, strides, paddingString); + } else { + y = avgPool3d(x, poolSize, strides, paddingString); + } + if (dataFormat === "channelsFirst") { + y = transpose(y, [0, 4, 1, 2, 3]); + } + return y; + }); + } + var Pooling1D = class extends Layer { + constructor(args) { + if (args.poolSize == null) { + args.poolSize = 2; + } + super(args); + if (typeof args.poolSize === "number") { + this.poolSize = [args.poolSize]; + } else if (Array.isArray(args.poolSize) && args.poolSize.length === 1 && typeof args.poolSize[0] === "number") { + this.poolSize = args.poolSize; + } else { + throw new ValueError(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(args.poolSize)}`); + } + assertPositiveInteger(this.poolSize, "poolSize"); + if (args.strides == null) { + this.strides = this.poolSize; + } else { + if (typeof args.strides === "number") { + this.strides = [args.strides]; + } else if (Array.isArray(args.strides) && args.strides.length === 1 && typeof args.strides[0] === "number") { + this.strides = args.strides; + } else { + throw new ValueError(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(args.strides)}`); + } + } + assertPositiveInteger(this.strides, "strides"); + this.padding = args.padding == null ? "valid" : args.padding; + checkPaddingMode(this.padding); + this.inputSpec = [new InputSpec({ ndim: 3 })]; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const length = convOutputLength(inputShape[1], this.poolSize[0], this.padding, this.strides[0]); + return [inputShape[0], length, inputShape[2]]; + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + inputs = expandDims2(getExactlyOneTensor(inputs), 2); + const output = this.poolingFunction(getExactlyOneTensor(inputs), [this.poolSize[0], 1], [this.strides[0], 1], this.padding, "channelsLast"); + return squeeze(output, [2]); + }); + } + getConfig() { + const config = { + poolSize: this.poolSize, + padding: this.padding, + strides: this.strides + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + var MaxPooling1D = class extends Pooling1D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool2d(inputs, poolSize, strides, padding, dataFormat, "max"); + } + }; + MaxPooling1D.className = "MaxPooling1D"; + serialization_exports.registerClass(MaxPooling1D); + var AveragePooling1D = class extends Pooling1D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool2d(inputs, poolSize, strides, padding, dataFormat, "avg"); + } + }; + AveragePooling1D.className = "AveragePooling1D"; + serialization_exports.registerClass(AveragePooling1D); + var Pooling2D = class extends Layer { + constructor(args) { + if (args.poolSize == null) { + args.poolSize = [2, 2]; + } + super(args); + this.poolSize = Array.isArray(args.poolSize) ? args.poolSize : [args.poolSize, args.poolSize]; + if (args.strides == null) { + this.strides = this.poolSize; + } else if (Array.isArray(args.strides)) { + if (args.strides.length !== 2) { + throw new ValueError(`If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length ${args.strides.length}.`); + } + this.strides = args.strides; + } else { + this.strides = [args.strides, args.strides]; + } + assertPositiveInteger(this.poolSize, "poolSize"); + assertPositiveInteger(this.strides, "strides"); + this.padding = args.padding == null ? "valid" : args.padding; + this.dataFormat = args.dataFormat == null ? "channelsLast" : args.dataFormat; + checkDataFormat(this.dataFormat); + checkPaddingMode(this.padding); + this.inputSpec = [new InputSpec({ ndim: 4 })]; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + let rows = this.dataFormat === "channelsFirst" ? inputShape[2] : inputShape[1]; + let cols = this.dataFormat === "channelsFirst" ? inputShape[3] : inputShape[2]; + rows = convOutputLength(rows, this.poolSize[0], this.padding, this.strides[0]); + cols = convOutputLength(cols, this.poolSize[1], this.padding, this.strides[1]); + if (this.dataFormat === "channelsFirst") { + return [inputShape[0], inputShape[1], rows, cols]; + } else { + return [inputShape[0], rows, cols, inputShape[3]]; + } + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + return this.poolingFunction(getExactlyOneTensor(inputs), this.poolSize, this.strides, this.padding, this.dataFormat); + }); + } + getConfig() { + const config = { + poolSize: this.poolSize, + padding: this.padding, + strides: this.strides, + dataFormat: this.dataFormat + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + var MaxPooling2D = class extends Pooling2D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool2d(inputs, poolSize, strides, padding, dataFormat, "max"); + } + }; + MaxPooling2D.className = "MaxPooling2D"; + serialization_exports.registerClass(MaxPooling2D); + var AveragePooling2D = class extends Pooling2D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool2d(inputs, poolSize, strides, padding, dataFormat, "avg"); + } + }; + AveragePooling2D.className = "AveragePooling2D"; + serialization_exports.registerClass(AveragePooling2D); + var Pooling3D = class extends Layer { + constructor(args) { + if (args.poolSize == null) { + args.poolSize = [2, 2, 2]; + } + super(args); + this.poolSize = Array.isArray(args.poolSize) ? args.poolSize : [args.poolSize, args.poolSize, args.poolSize]; + if (args.strides == null) { + this.strides = this.poolSize; + } else if (Array.isArray(args.strides)) { + if (args.strides.length !== 3) { + throw new ValueError(`If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length ${args.strides.length}.`); + } + this.strides = args.strides; + } else { + this.strides = [args.strides, args.strides, args.strides]; + } + assertPositiveInteger(this.poolSize, "poolSize"); + assertPositiveInteger(this.strides, "strides"); + this.padding = args.padding == null ? "valid" : args.padding; + this.dataFormat = args.dataFormat == null ? "channelsLast" : args.dataFormat; + checkDataFormat(this.dataFormat); + checkPaddingMode(this.padding); + this.inputSpec = [new InputSpec({ ndim: 5 })]; + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + let depths = this.dataFormat === "channelsFirst" ? inputShape[2] : inputShape[1]; + let rows = this.dataFormat === "channelsFirst" ? inputShape[3] : inputShape[2]; + let cols = this.dataFormat === "channelsFirst" ? inputShape[4] : inputShape[3]; + depths = convOutputLength(depths, this.poolSize[0], this.padding, this.strides[0]); + rows = convOutputLength(rows, this.poolSize[1], this.padding, this.strides[1]); + cols = convOutputLength(cols, this.poolSize[2], this.padding, this.strides[2]); + if (this.dataFormat === "channelsFirst") { + return [inputShape[0], inputShape[1], depths, rows, cols]; + } else { + return [inputShape[0], depths, rows, cols, inputShape[4]]; + } + } + call(inputs, kwargs) { + return tidy(() => { + this.invokeCallHook(inputs, kwargs); + return this.poolingFunction(getExactlyOneTensor(inputs), this.poolSize, this.strides, this.padding, this.dataFormat); + }); + } + getConfig() { + const config = { + poolSize: this.poolSize, + padding: this.padding, + strides: this.strides, + dataFormat: this.dataFormat + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + var MaxPooling3D = class extends Pooling3D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool3d(inputs, poolSize, strides, padding, dataFormat, "max"); + } + }; + MaxPooling3D.className = "MaxPooling3D"; + serialization_exports.registerClass(MaxPooling3D); + var AveragePooling3D = class extends Pooling3D { + constructor(args) { + super(args); + } + poolingFunction(inputs, poolSize, strides, padding, dataFormat) { + checkDataFormat(dataFormat); + checkPaddingMode(padding); + return pool3d(inputs, poolSize, strides, padding, dataFormat, "avg"); + } + }; + AveragePooling3D.className = "AveragePooling3D"; + serialization_exports.registerClass(AveragePooling3D); + var GlobalPooling1D = class extends Layer { + constructor(args) { + super(args); + this.inputSpec = [new InputSpec({ ndim: 3 })]; + } + computeOutputShape(inputShape) { + return [inputShape[0], inputShape[2]]; + } + call(inputs, kwargs) { + throw new NotImplementedError(); + } + }; + var GlobalAveragePooling1D = class extends GlobalPooling1D { + constructor(args) { + super(args || {}); + } + call(inputs, kwargs) { + return tidy(() => { + const input2 = getExactlyOneTensor(inputs); + return mean(input2, 1); + }); + } + }; + GlobalAveragePooling1D.className = "GlobalAveragePooling1D"; + serialization_exports.registerClass(GlobalAveragePooling1D); + var GlobalMaxPooling1D = class extends GlobalPooling1D { + constructor(args) { + super(args || {}); + } + call(inputs, kwargs) { + return tidy(() => { + const input2 = getExactlyOneTensor(inputs); + return max(input2, 1); + }); + } + }; + GlobalMaxPooling1D.className = "GlobalMaxPooling1D"; + serialization_exports.registerClass(GlobalMaxPooling1D); + var GlobalPooling2D = class extends Layer { + constructor(args) { + super(args); + this.dataFormat = args.dataFormat == null ? "channelsLast" : args.dataFormat; + checkDataFormat(this.dataFormat); + this.inputSpec = [new InputSpec({ ndim: 4 })]; + } + computeOutputShape(inputShape) { + inputShape = inputShape; + if (this.dataFormat === "channelsLast") { + return [inputShape[0], inputShape[3]]; + } else { + return [inputShape[0], inputShape[1]]; + } + } + call(inputs, kwargs) { + throw new NotImplementedError(); + } + getConfig() { + const config = { dataFormat: this.dataFormat }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + }; + var GlobalAveragePooling2D = class extends GlobalPooling2D { + call(inputs, kwargs) { + return tidy(() => { + const input2 = getExactlyOneTensor(inputs); + if (this.dataFormat === "channelsLast") { + return mean(input2, [1, 2]); + } else { + return mean(input2, [2, 3]); + } + }); + } + }; + GlobalAveragePooling2D.className = "GlobalAveragePooling2D"; + serialization_exports.registerClass(GlobalAveragePooling2D); + var GlobalMaxPooling2D = class extends GlobalPooling2D { + call(inputs, kwargs) { + return tidy(() => { + const input2 = getExactlyOneTensor(inputs); + if (this.dataFormat === "channelsLast") { + return max(input2, [1, 2]); + } else { + return max(input2, [2, 3]); + } + }); + } + }; + GlobalMaxPooling2D.className = "GlobalMaxPooling2D"; + serialization_exports.registerClass(GlobalMaxPooling2D); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/layers/wrappers.js + init_define_BUILD_VERSION(); + var Wrapper = class extends Layer { + constructor(args) { + super(args); + this.layer = args.layer; + } + build(inputShape) { + this.built = true; + } + get trainable() { + if (this.layer != null) { + return this.layer.trainable; + } else { + return false; + } + } + set trainable(value) { + if (this.layer != null) { + this.layer.trainable = value; + } + } + get trainableWeights() { + return this.layer.trainableWeights; + } + get nonTrainableWeights() { + return this.layer.nonTrainableWeights; + } + get updates() { + return this.layer._updates; + } + get losses() { + return this.layer.losses; + } + getWeights() { + return this.layer.getWeights(); + } + setWeights(weights) { + this.layer.setWeights(weights); + } + getConfig() { + const config = { + "layer": { + "className": this.layer.getClassName(), + "config": this.layer.getConfig() + } + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + setFastWeightInitDuringBuild(value) { + super.setFastWeightInitDuringBuild(value); + if (this.layer != null) { + this.layer.setFastWeightInitDuringBuild(value); + } + } + static fromConfig(cls, config, customObjects = {}) { + const layerConfig = config["layer"]; + const layer = deserialize(layerConfig, customObjects); + delete config["layer"]; + const newConfig = { layer }; + Object.assign(newConfig, config); + return new cls(newConfig); + } + }; + var TimeDistributed = class extends Wrapper { + constructor(args) { + super(args); + this.supportsMasking = true; + } + build(inputShape) { + inputShape = getExactlyOneShape(inputShape); + if (inputShape.length < 3) { + throw new ValueError(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(inputShape)}`); + } + this.inputSpec = [{ shape: inputShape }]; + const childInputShape = [inputShape[0]].concat(inputShape.slice(2)); + if (!this.layer.built) { + this.layer.build(childInputShape); + this.layer.built = true; + } + super.build(inputShape); + } + computeOutputShape(inputShape) { + inputShape = getExactlyOneShape(inputShape); + const childInputShape = [inputShape[0]].concat(inputShape.slice(2)); + const childOutputShape = this.layer.computeOutputShape(childInputShape); + const timesteps = inputShape[1]; + return [childOutputShape[0], timesteps].concat(childOutputShape.slice(1)); + } + call(inputs, kwargs) { + return tidy(() => { + inputs = getExactlyOneTensor(inputs); + const step5 = (inputs2, states) => { + const output = getExactlyOneTensor(this.layer.call(inputs2, kwargs)); + return [output, []]; + }; + const rnnOutputs = rnn(step5, inputs, [], false, null, null, false, true); + const y = rnnOutputs[1]; + return y; + }); + } + }; + TimeDistributed.className = "TimeDistributed"; + serialization_exports.registerClass(TimeDistributed); + function checkBidirectionalMergeMode(value) { + checkStringTypeUnionValue(VALID_BIDIRECTIONAL_MERGE_MODES, "BidirectionalMergeMode", value); + } + var DEFAULT_BIDIRECTIONAL_MERGE_MODE = "concat"; + var Bidirectional = class extends Wrapper { + constructor(args) { + super(args); + const layerConfig = args.layer.getConfig(); + const forwDict = {}; + forwDict["className"] = args.layer.getClassName(); + forwDict["config"] = layerConfig; + this.forwardLayer = deserialize(forwDict); + layerConfig["goBackwards"] = layerConfig["goBackwards"] === true ? false : true; + const backDict = {}; + backDict["className"] = args.layer.getClassName(); + backDict["config"] = layerConfig; + this.backwardLayer = deserialize(backDict); + this.forwardLayer.name = "forward_" + this.forwardLayer.name; + this.backwardLayer.name = "backward_" + this.backwardLayer.name; + this.mergeMode = args.mergeMode === void 0 ? DEFAULT_BIDIRECTIONAL_MERGE_MODE : args.mergeMode; + checkBidirectionalMergeMode(this.mergeMode); + if (args.weights) { + throw new NotImplementedError("weights support is not implemented for Bidirectional layer yet."); + } + this._stateful = args.layer.stateful; + this.returnSequences = args.layer.returnSequences; + this.returnState = args.layer.returnState; + this.supportsMasking = true; + this._trainable = true; + this.inputSpec = args.layer.inputSpec; + this.numConstants = null; + } + get trainable() { + return this._trainable; + } + set trainable(value) { + this._trainable = value; + if (this.forwardLayer != null) { + this.forwardLayer.trainable = value; + } + if (this.backwardLayer != null) { + this.backwardLayer.trainable = value; + } + } + getWeights() { + return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights()); + } + setWeights(weights) { + const numWeights = weights.length; + const numeightsOver2 = Math.floor(numWeights / 2); + this.forwardLayer.setWeights(weights.slice(0, numeightsOver2)); + this.backwardLayer.setWeights(weights.slice(numeightsOver2)); + } + computeOutputShape(inputShape) { + let layerShapes = this.forwardLayer.computeOutputShape(inputShape); + if (!(Array.isArray(layerShapes) && Array.isArray(layerShapes[0]))) { + layerShapes = [layerShapes]; + } + layerShapes = layerShapes; + let outputShape; + let outputShapes; + let stateShape; + if (this.returnState) { + stateShape = layerShapes.slice(1); + outputShape = layerShapes[0]; + } else { + outputShape = layerShapes[0]; + } + outputShape = outputShape; + if (this.mergeMode === "concat") { + outputShape[outputShape.length - 1] *= 2; + outputShapes = [outputShape]; + } else if (this.mergeMode == null) { + outputShapes = [outputShape, outputShape.slice()]; + } else { + outputShapes = [outputShape]; + } + if (this.returnState) { + if (this.mergeMode == null) { + return outputShapes.concat(stateShape).concat(stateShape.slice()); + } + return [outputShape].concat(stateShape).concat(stateShape.slice()); + } + return singletonOrArray(outputShapes); + } + apply(inputs, kwargs) { + let initialState = kwargs == null ? null : kwargs["initialState"]; + let constants = kwargs == null ? null : kwargs["constants"]; + if (kwargs == null) { + kwargs = {}; + } + const standardized = standardizeArgs(inputs, initialState, constants, this.numConstants); + inputs = standardized.inputs; + initialState = standardized.initialState; + constants = standardized.constants; + if (Array.isArray(inputs)) { + initialState = inputs.slice(1); + inputs = inputs[0]; + } + if ((initialState == null || initialState.length === 0) && constants == null) { + return super.apply(inputs, kwargs); + } + const additionalInputs = []; + const additionalSpecs = []; + if (initialState != null) { + const numStates = initialState.length; + if (numStates % 2 > 0) { + throw new ValueError("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs."); + } + kwargs["initialState"] = initialState; + additionalInputs.push(...initialState); + const stateSpecs = initialState.map((state) => new InputSpec({ shape: state.shape })); + this.forwardLayer.stateSpec = stateSpecs.slice(0, numStates / 2); + this.backwardLayer.stateSpec = stateSpecs.slice(numStates / 2); + additionalSpecs.push(...stateSpecs); + } + if (constants != null) { + throw new NotImplementedError("Support for constants in Bidirectional layers is not implemented yet."); + } + const isSymbolicTensor = additionalInputs[0] instanceof SymbolicTensor; + for (const tensor2 of additionalInputs) { + if (tensor2 instanceof SymbolicTensor !== isSymbolicTensor) { + throw new ValueError("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors"); + } + } + if (isSymbolicTensor) { + const fullInput = [inputs].concat(additionalInputs); + const fullInputSpec = this.inputSpec.concat(additionalSpecs); + const originalInputSpec = this.inputSpec; + this.inputSpec = fullInputSpec; + const output = super.apply(fullInput, kwargs); + this.inputSpec = originalInputSpec; + return output; + } else { + return super.apply(inputs, kwargs); + } + } + call(inputs, kwargs) { + return tidy(() => { + const initialState = kwargs["initialState"]; + let y; + let yRev; + if (initialState == null) { + y = this.forwardLayer.call(inputs, kwargs); + yRev = this.backwardLayer.call(inputs, kwargs); + } else { + const forwardState = initialState.slice(0, initialState.length / 2); + const backwardState = initialState.slice(initialState.length / 2); + y = this.forwardLayer.call(inputs, Object.assign(kwargs, { initialState: forwardState })); + yRev = this.backwardLayer.call(inputs, Object.assign(kwargs, { initialState: backwardState })); + } + let states; + if (this.returnState) { + if (Array.isArray(y)) { + states = y.slice(1).concat(yRev.slice(1)); + } else { + } + y = y[0]; + yRev = yRev[0]; + } + if (this.returnSequences) { + yRev = reverse(yRev, 1); + } + let output; + if (this.mergeMode === "concat") { + output = concatenate([y, yRev]); + } else if (this.mergeMode === "sum") { + output = add2(y, yRev); + } else if (this.mergeMode === "ave") { + output = mul(0.5, add2(y, yRev)); + } else if (this.mergeMode === "mul") { + output = mul(y, yRev); + } else if (this.mergeMode == null) { + output = [y, yRev]; + } + if (this.returnState) { + if (this.mergeMode == null) { + return output.concat(states); + } + return [output].concat(states); + } + return output; + }); + } + resetStates(states) { + this.forwardLayer.resetStates(); + this.backwardLayer.resetStates(); + } + build(inputShape) { + nameScope(this.forwardLayer.name, () => { + this.forwardLayer.build(inputShape); + }); + nameScope(this.backwardLayer.name, () => { + this.backwardLayer.build(inputShape); + }); + this.built = true; + } + computeMask(inputs, mask) { + if (Array.isArray(mask)) { + mask = mask[0]; + } + let outputMask; + if (this.returnSequences) { + if (this.mergeMode == null) { + outputMask = [mask, mask]; + } else { + outputMask = mask; + } + } else { + if (this.mergeMode == null) { + outputMask = [null, null]; + } else { + outputMask = null; + } + } + if (this.returnState) { + const states = this.forwardLayer.states; + const stateMask = states.map((state) => null); + if (Array.isArray(outputMask)) { + return outputMask.concat(stateMask).concat(stateMask); + } else { + return [outputMask].concat(stateMask).concat(stateMask); + } + } else { + return outputMask; + } + } + get trainableWeights() { + return this.forwardLayer.trainableWeights.concat(this.backwardLayer.trainableWeights); + } + get nonTrainableWeights() { + return this.forwardLayer.nonTrainableWeights.concat(this.backwardLayer.nonTrainableWeights); + } + setFastWeightInitDuringBuild(value) { + super.setFastWeightInitDuringBuild(value); + if (this.forwardLayer != null) { + this.forwardLayer.setFastWeightInitDuringBuild(value); + } + if (this.backwardLayer != null) { + this.backwardLayer.setFastWeightInitDuringBuild(value); + } + } + getConfig() { + const config = { + "mergeMode": this.mergeMode + }; + const baseConfig = super.getConfig(); + Object.assign(config, baseConfig); + return config; + } + static fromConfig(cls, config) { + const rnnLayer = deserialize(config["layer"]); + delete config["layer"]; + if (config["numConstants"] != null) { + throw new NotImplementedError(`Deserialization of a Bidirectional layer with numConstants present is not supported yet.`); + } + const newConfig = config; + newConfig["layer"] = rnnLayer; + return new cls(newConfig); + } + }; + Bidirectional.className = "Bidirectional"; + serialization_exports.registerClass(Bidirectional); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_metrics.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_models.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/exports_regularizers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-layers@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-layers/dist/callbacks.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/flags.js + init_define_BUILD_VERSION(); + var ENV4 = env(); + ENV4.registerFlag("KEEP_INTERMEDIATE_TENSORS", () => false, (debugValue) => { + if (debugValue) { + console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance."); + } + }); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/operation_mapper.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/data/compiled_api.js + init_define_BUILD_VERSION(); + var DataType; + (function(DataType2) { + DataType2[DataType2["DT_INVALID"] = 0] = "DT_INVALID"; + DataType2[DataType2["DT_FLOAT"] = 1] = "DT_FLOAT"; + DataType2[DataType2["DT_DOUBLE"] = 2] = "DT_DOUBLE"; + DataType2[DataType2["DT_INT32"] = 3] = "DT_INT32"; + DataType2[DataType2["DT_UINT8"] = 4] = "DT_UINT8"; + DataType2[DataType2["DT_INT16"] = 5] = "DT_INT16"; + DataType2[DataType2["DT_INT8"] = 6] = "DT_INT8"; + DataType2[DataType2["DT_STRING"] = 7] = "DT_STRING"; + DataType2[DataType2["DT_COMPLEX64"] = 8] = "DT_COMPLEX64"; + DataType2[DataType2["DT_INT64"] = 9] = "DT_INT64"; + DataType2[DataType2["DT_BOOL"] = 10] = "DT_BOOL"; + DataType2[DataType2["DT_QINT8"] = 11] = "DT_QINT8"; + DataType2[DataType2["DT_QUINT8"] = 12] = "DT_QUINT8"; + DataType2[DataType2["DT_QINT32"] = 13] = "DT_QINT32"; + DataType2[DataType2["DT_BFLOAT16"] = 14] = "DT_BFLOAT16"; + DataType2[DataType2["DT_QINT16"] = 15] = "DT_QINT16"; + DataType2[DataType2["DT_QUINT16"] = 16] = "DT_QUINT16"; + DataType2[DataType2["DT_UINT16"] = 17] = "DT_UINT16"; + DataType2[DataType2["DT_COMPLEX128"] = 18] = "DT_COMPLEX128"; + DataType2[DataType2["DT_HALF"] = 19] = "DT_HALF"; + DataType2[DataType2["DT_RESOURCE"] = 20] = "DT_RESOURCE"; + DataType2[DataType2["DT_VARIANT"] = 21] = "DT_VARIANT"; + DataType2[DataType2["DT_UINT32"] = 22] = "DT_UINT32"; + DataType2[DataType2["DT_UINT64"] = 23] = "DT_UINT64"; + DataType2[DataType2["DT_FLOAT_REF"] = 101] = "DT_FLOAT_REF"; + DataType2[DataType2["DT_DOUBLE_REF"] = 102] = "DT_DOUBLE_REF"; + DataType2[DataType2["DT_INT32_REF"] = 103] = "DT_INT32_REF"; + DataType2[DataType2["DT_UINT8_REF"] = 104] = "DT_UINT8_REF"; + DataType2[DataType2["DT_INT16_REF"] = 105] = "DT_INT16_REF"; + DataType2[DataType2["DT_INT8_REF"] = 106] = "DT_INT8_REF"; + DataType2[DataType2["DT_STRING_REF"] = 107] = "DT_STRING_REF"; + DataType2[DataType2["DT_COMPLEX64_REF"] = 108] = "DT_COMPLEX64_REF"; + DataType2[DataType2["DT_INT64_REF"] = 109] = "DT_INT64_REF"; + DataType2[DataType2["DT_BOOL_REF"] = 110] = "DT_BOOL_REF"; + DataType2[DataType2["DT_QINT8_REF"] = 111] = "DT_QINT8_REF"; + DataType2[DataType2["DT_QUINT8_REF"] = 112] = "DT_QUINT8_REF"; + DataType2[DataType2["DT_QINT32_REF"] = 113] = "DT_QINT32_REF"; + DataType2[DataType2["DT_BFLOAT16_REF"] = 114] = "DT_BFLOAT16_REF"; + DataType2[DataType2["DT_QINT16_REF"] = 115] = "DT_QINT16_REF"; + DataType2[DataType2["DT_QUINT16_REF"] = 116] = "DT_QUINT16_REF"; + DataType2[DataType2["DT_UINT16_REF"] = 117] = "DT_UINT16_REF"; + DataType2[DataType2["DT_COMPLEX128_REF"] = 118] = "DT_COMPLEX128_REF"; + DataType2[DataType2["DT_HALF_REF"] = 119] = "DT_HALF_REF"; + DataType2[DataType2["DT_RESOURCE_REF"] = 120] = "DT_RESOURCE_REF"; + DataType2[DataType2["DT_VARIANT_REF"] = 121] = "DT_VARIANT_REF"; + DataType2[DataType2["DT_UINT32_REF"] = 122] = "DT_UINT32_REF"; + DataType2[DataType2["DT_UINT64_REF"] = 123] = "DT_UINT64_REF"; + })(DataType || (DataType = {})); + var SaverDef; + (function(SaverDef2) { + let CheckpointFormatVersion; + (function(CheckpointFormatVersion2) { + CheckpointFormatVersion2[CheckpointFormatVersion2["LEGACY"] = 0] = "LEGACY"; + CheckpointFormatVersion2[CheckpointFormatVersion2["V1"] = 1] = "V1"; + CheckpointFormatVersion2[CheckpointFormatVersion2["V2"] = 2] = "V2"; + })(CheckpointFormatVersion = SaverDef2.CheckpointFormatVersion || (SaverDef2.CheckpointFormatVersion = {})); + })(SaverDef || (SaverDef = {})); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/custom_op/register.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/arithmetic.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/basic_math.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/control.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/convolution.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/creation.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/dynamic.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/evaluation.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/graph.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/hash_table.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/image.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/logical.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/matrices.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/normalization.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/reduction.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/slice_join.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/sparse.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/spectral.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/string.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/transformation.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/graph_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/operation_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/custom_op/node_value_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/arithmetic_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/basic_math_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/control_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_array.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_list.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/convolution_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/creation_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/dynamic_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/evaluation_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/graph_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/hash_table_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/hash_table.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/image_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/logical_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/matrices_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/normalization_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/reduction_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/slice_join_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/sparse_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/spectral_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/string_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/operations/executors/transformation_executor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/execution_context.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/model_analysis.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/executor/resource_manager.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-converter@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-converter/dist/version.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/dataset.js + init_define_BUILD_VERSION(); + var seedrandom3 = __toESM(require_seedrandom2()); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/lazy_iterator.js + init_define_BUILD_VERSION(); + var seedrandom2 = __toESM(require_seedrandom2()); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/deep_clone.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/deep_map.js + init_define_BUILD_VERSION(); + function deepMap(input2, mapFn) { + return deepMapInternal(input2, mapFn); + } + function deepMapInternal(input2, mapFn, seen = /* @__PURE__ */ new Map(), containedIn = /* @__PURE__ */ new Set()) { + if (input2 == null) { + return null; + } + if (typeof Blob === "function" && input2 instanceof Blob) { + return input2.slice(); + } + if (containedIn.has(input2)) { + throw new Error("Circular references are not supported."); + } + if (seen.has(input2)) { + return seen.get(input2); + } + const result = mapFn(input2); + if (result.recurse && result.value !== null) { + throw new Error("A deep map function may not return both a value and recurse=true."); + } + if (!result.recurse) { + seen.set(input2, result.value); + return result.value; + } else if (isIterable2(input2)) { + const mappedIterable = Array.isArray(input2) ? [] : {}; + containedIn.add(input2); + for (const k in input2) { + const child = input2[k]; + const childResult = deepMapInternal(child, mapFn, seen, containedIn); + mappedIterable[k] = childResult; + } + containedIn.delete(input2); + if (input2.__proto__) { + mappedIterable.__proto__ = input2.__proto__; + } + return mappedIterable; + } else { + throw new Error(`Can't recurse into non-iterable type: ${input2}`); + } + } + function deepZip(inputs, zipFn = zipToList) { + return deepZipInternal(inputs, zipFn); + } + function deepZipInternal(inputs, zipFn, containedIn = /* @__PURE__ */ new Set()) { + const input2 = inputs[0]; + if (containedIn.has(input2)) { + throw new Error("Circular references are not supported."); + } + const result = zipFn(inputs); + if (result.recurse && result.value !== null) { + throw new Error("A deep zip function may not return both a value and recurse=true."); + } + if (!result.recurse) { + return result.value; + } else if (isIterable2(input2)) { + const mappedIterable = Array.isArray(input2) ? [] : {}; + containedIn.add(input2); + for (const k in input2) { + const children = inputs.map((x) => x[k]); + const childResult = deepZipInternal(children, zipFn, containedIn); + mappedIterable[k] = childResult; + } + containedIn.delete(input2); + return mappedIterable; + } else { + throw new Error(`Can't recurse into non-iterable type: ${input2}`); + } + } + function zipToList(x) { + if (x === null) { + return null; + } + if (isIterable2(x[0])) { + return { value: null, recurse: true }; + } else { + return { value: x, recurse: false }; + } + } + function isIterable2(obj) { + let isTextDecoder = false; + if (env().get("IS_BROWSER")) { + isTextDecoder = obj instanceof TextDecoder; + } else { + const { StringDecoder } = require_string_decoder(); + isTextDecoder = obj instanceof StringDecoder; + } + return obj != null && !ArrayBuffer.isView(obj) && (Array.isArray(obj) || typeof obj === "object" && !(obj instanceof Tensor) && !(obj instanceof Promise) && !isTextDecoder); + } + function canTensorify(obj) { + return obj == null || isPrimitive(obj) || Array.isArray(obj) || typeof obj === "object" && obj instanceof Tensor || util_exports.isTypedArray(obj); + } + function isPrimitive(value) { + return value === null || typeof value !== "object" && typeof value !== "function"; + } + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/deep_clone.js + function deepClone(container) { + return deepMap(container, cloneIfTensor); + } + function cloneIfTensor(item) { + if (item instanceof Tensor) { + return { value: item.clone(), recurse: false }; + } else if (isIterable2(item)) { + return { value: null, recurse: true }; + } else { + return { value: item, recurse: false }; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/growing_ring_buffer.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/ring_buffer.js + init_define_BUILD_VERSION(); + var RingBuffer = class { + constructor(capacity) { + this.capacity = capacity; + this.begin = 0; + this.end = 0; + if (capacity == null) { + throw new RangeError("Can't create a ring buffer of unknown capacity."); + } + if (capacity < 1) { + throw new RangeError("Can't create ring buffer of capacity < 1."); + } + this.data = new Array(capacity); + this.doubledCapacity = 2 * capacity; + } + wrap(index) { + while (index < 0) { + index += this.doubledCapacity; + } + return index % this.doubledCapacity; + } + get(index) { + if (index < 0) { + throw new RangeError("Can't get item at a negative index."); + } + return this.data[index % this.capacity]; + } + set(index, value) { + if (index < 0) { + throw new RangeError("Can't set item at a negative index."); + } + this.data[index % this.capacity] = value; + } + length() { + let length = this.end - this.begin; + if (length < 0) { + length = this.doubledCapacity + length; + } + return length; + } + isFull() { + return this.length() === this.capacity; + } + isEmpty() { + return this.length() === 0; + } + push(value) { + if (this.isFull()) { + throw new RangeError("Ring buffer is full."); + } + this.set(this.end, value); + this.end = this.wrap(this.end + 1); + } + pushAll(values) { + for (const value of values) { + this.push(value); + } + } + pop() { + if (this.isEmpty()) { + throw new RangeError("Ring buffer is empty."); + } + this.end = this.wrap(this.end - 1); + const result = this.get(this.end); + this.set(this.end, void 0); + return result; + } + unshift(value) { + if (this.isFull()) { + throw new RangeError("Ring buffer is full."); + } + this.begin = this.wrap(this.begin - 1); + this.set(this.begin, value); + } + shift() { + if (this.isEmpty()) { + throw new RangeError("Ring buffer is empty."); + } + const result = this.get(this.begin); + this.set(this.begin, void 0); + this.begin = this.wrap(this.begin + 1); + return result; + } + shuffleExcise(relativeIndex) { + if (this.isEmpty()) { + throw new RangeError("Ring buffer is empty."); + } + const index = this.wrap(this.begin + relativeIndex); + const result = this.get(index); + this.set(index, this.pop()); + return result; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/growing_ring_buffer.js + var GrowingRingBuffer = class extends RingBuffer { + constructor() { + super(GrowingRingBuffer.INITIAL_CAPACITY); + } + isFull() { + return false; + } + push(value) { + if (super.isFull()) { + this.expand(); + } + super.push(value); + } + unshift(value) { + if (super.isFull()) { + this.expand(); + } + super.unshift(value); + } + expand() { + const newCapacity = this.capacity * 2; + const newData = new Array(newCapacity); + const len = this.length(); + for (let i = 0; i < len; i++) { + newData[i] = this.get(this.wrap(this.begin + i)); + } + this.data = newData; + this.capacity = newCapacity; + this.doubledCapacity = 2 * this.capacity; + this.begin = 0; + this.end = len; + } + }; + GrowingRingBuffer.INITIAL_CAPACITY = 32; + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/lazy_iterator.js + function iteratorFromItems(items) { + return new ArrayIterator(items); + } + function iteratorFromFunction(func2) { + return new FunctionCallIterator(func2); + } + function iteratorFromConcatenated(baseIterators, baseErrorHandler) { + return new ChainedIterator(baseIterators, baseErrorHandler); + } + var LazyIterator = class { + async toArray() { + const result = []; + let x = await this.next(); + while (!x.done) { + result.push(x.value); + x = await this.next(); + } + return result; + } + async toArrayForTest() { + const stream = this.prefetch(100); + const result = []; + let x = await stream.next(); + while (!x.done) { + result.push(x.value); + x = await stream.next(); + } + return result; + } + async resolveFully() { + let x = await this.next(); + while (!x.done) { + x = await this.next(); + } + } + async resolveWhile(predicate) { + let x = await this.next(); + let shouldContinue = predicate(x.value); + while (!x.done && shouldContinue) { + x = await this.next(); + shouldContinue = predicate(x.value); + } + } + handleErrors(handler) { + return new ErrorHandlingLazyIterator(this, handler); + } + filter(predicate) { + return new FilterIterator(this, predicate); + } + map(transform5) { + return new MapIterator(this, transform5); + } + mapAsync(transform5) { + return new AsyncMapIterator(this, transform5); + } + serialMapAsync(transform5) { + return new AsyncMapIterator(this, transform5).serial(); + } + flatmap(transform5) { + return new FlatmapIterator(this, transform5); + } + async forEachAsync(f) { + return this.map(f).resolveFully(); + } + async serialForEach(f) { + return this.serialMapAsync(f).resolveWhile((x) => x === true); + } + rowMajorBatch(batchSize, smallLastBatch = true) { + return new RowMajorBatchIterator(this, batchSize, smallLastBatch); + } + columnMajorBatch(batchSize, smallLastBatch = true, zipFn = zipToList) { + const rowBatches = this.rowMajorBatch(batchSize, smallLastBatch); + return rowBatches.map((x) => deepZip(x, zipFn)); + } + concatenate(iterator, baseErrorHandler) { + return new ChainedIterator(iteratorFromItems([this, iterator]), baseErrorHandler); + } + take(count2) { + if (count2 < 0 || count2 == null) { + return this; + } + return new TakeIterator(this, count2); + } + skip(count2) { + if (count2 < 0 || count2 == null) { + return this; + } + return new SkipIterator(this, count2); + } + prefetch(bufferSize) { + return new PrefetchIterator(this, bufferSize); + } + shuffle(windowSize, seed) { + return new ShuffleIterator(this, windowSize, seed); + } + serial() { + return new SerialIterator(this); + } + }; + var ArrayIterator = class extends LazyIterator { + constructor(items) { + super(); + this.items = items; + this.trav = 0; + } + summary() { + return `Array of ${this.items.length} items`; + } + async next() { + if (this.trav >= this.items.length) { + return { value: null, done: true }; + } + const item = this.items[this.trav]; + this.trav++; + return { value: deepClone(item), done: false }; + } + }; + var FunctionCallIterator = class extends LazyIterator { + constructor(nextFn) { + super(); + this.nextFn = nextFn; + } + summary() { + return `Function call`; + } + async next() { + try { + return this.nextFn(); + } catch (e) { + e.message = `Error thrown while iterating through a dataset: ${e.message}`; + throw e; + } + } + }; + var SerialIterator = class extends LazyIterator { + constructor(upstream) { + super(); + this.upstream = upstream; + this.lastRead = Promise.resolve({ value: null, done: false }); + } + summary() { + return `${this.upstream.summary()} -> Serial`; + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + return this.upstream.next(); + } + }; + var SkipIterator = class extends LazyIterator { + constructor(upstream, maxCount) { + super(); + this.upstream = upstream; + this.maxCount = maxCount; + this.count = 0; + this.lastRead = Promise.resolve({ value: null, done: false }); + } + summary() { + return `${this.upstream.summary()} -> Skip`; + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + while (this.count++ < this.maxCount) { + const skipped = await this.upstream.next(); + if (skipped.done) { + return skipped; + } + dispose(skipped.value); + } + return this.upstream.next(); + } + }; + var TakeIterator = class extends LazyIterator { + constructor(upstream, maxCount) { + super(); + this.upstream = upstream; + this.maxCount = maxCount; + this.count = 0; + } + summary() { + return `${this.upstream.summary()} -> Take`; + } + async next() { + if (this.count++ >= this.maxCount) { + return { value: null, done: true }; + } + return this.upstream.next(); + } + }; + var RowMajorBatchIterator = class extends LazyIterator { + constructor(upstream, batchSize, enableSmallLastBatch = true) { + super(); + this.upstream = upstream; + this.batchSize = batchSize; + this.enableSmallLastBatch = enableSmallLastBatch; + this.lastRead = Promise.resolve({ value: null, done: false }); + } + summary() { + return `${this.upstream.summary()} -> RowMajorBatch`; + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + const batch = []; + while (batch.length < this.batchSize) { + const item = await this.upstream.next(); + if (item.done) { + if (this.enableSmallLastBatch && batch.length > 0) { + return { value: batch, done: false }; + } + return { value: null, done: true }; + } + batch.push(item.value); + } + return { value: batch, done: false }; + } + }; + var FilterIterator = class extends LazyIterator { + constructor(upstream, predicate) { + super(); + this.upstream = upstream; + this.predicate = predicate; + this.lastRead = Promise.resolve({ value: null, done: false }); + } + summary() { + return `${this.upstream.summary()} -> Filter`; + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + while (true) { + const item = await this.upstream.next(); + if (item.done || this.predicate(item.value)) { + return item; + } + dispose(item.value); + } + } + }; + var MapIterator = class extends LazyIterator { + constructor(upstream, transform5) { + super(); + this.upstream = upstream; + this.transform = transform5; + } + summary() { + return `${this.upstream.summary()} -> Map`; + } + async next() { + const item = await this.upstream.next(); + if (item.done) { + return { value: null, done: true }; + } + const inputTensors = tensor_util_exports.getTensorsInContainer(item.value); + const mapped = this.transform(item.value); + const outputTensors = tensor_util_exports.getTensorsInContainer(mapped); + for (const t of inputTensors) { + if (!tensor_util_exports.isTensorInList(t, outputTensors)) { + t.dispose(); + } + } + return { value: mapped, done: false }; + } + }; + var ErrorHandlingLazyIterator = class extends LazyIterator { + constructor(upstream, handler) { + super(); + this.upstream = upstream; + this.handler = handler; + this.count = 0; + this.lastRead = Promise.resolve({ value: null, done: false }); + } + summary() { + return `${this.upstream.summary()} -> handleErrors`; + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + while (true) { + try { + return await this.upstream.next(); + } catch (e) { + if (!this.handler(e)) { + return { value: null, done: true }; + } + } + } + } + }; + var AsyncMapIterator = class extends LazyIterator { + constructor(upstream, transform5) { + super(); + this.upstream = upstream; + this.transform = transform5; + } + summary() { + return `${this.upstream.summary()} -> AsyncMap`; + } + async next() { + const item = await this.upstream.next(); + if (item.done) { + return { value: null, done: true }; + } + const inputTensors = tensor_util_exports.getTensorsInContainer(item.value); + const mapped = await this.transform(item.value); + const outputTensors = tensor_util_exports.getTensorsInContainer(mapped); + for (const t of inputTensors) { + if (!tensor_util_exports.isTensorInList(t, outputTensors)) { + t.dispose(); + } + } + return { value: mapped, done: false }; + } + }; + var OneToManyIterator = class extends LazyIterator { + constructor() { + super(); + this.outputQueue = new GrowingRingBuffer(); + this.lastRead = Promise.resolve({ value: null, done: false }); + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + async serialNext() { + while (this.outputQueue.length() === 0) { + if (!await this.pump()) { + return { value: null, done: true }; + } + } + return { value: this.outputQueue.shift(), done: false }; + } + }; + var FlatmapIterator = class extends OneToManyIterator { + constructor(upstream, transform5) { + super(); + this.upstream = upstream; + this.transform = transform5; + } + summary() { + return `${this.upstream.summary()} -> Flatmap`; + } + async pump() { + const item = await this.upstream.next(); + if (item.done) { + return false; + } + const inputTensors = tensor_util_exports.getTensorsInContainer(item.value); + const mappedArray = this.transform(item.value); + const outputTensors = tensor_util_exports.getTensorsInContainer(mappedArray); + this.outputQueue.pushAll(mappedArray); + for (const t of inputTensors) { + if (!tensor_util_exports.isTensorInList(t, outputTensors)) { + t.dispose(); + } + } + return true; + } + }; + var ChainedIterator = class extends LazyIterator { + constructor(iterators, baseErrorHandler) { + super(); + this.baseErrorHandler = baseErrorHandler; + this.lastRead = null; + this.iterator = null; + this.moreIterators = iterators; + } + summary() { + const upstreamSummaries = "TODO: fill in upstream of chained summaries"; + return `${upstreamSummaries} -> Chained`; + } + async next() { + this.lastRead = this.readFromChain(this.lastRead); + return this.lastRead; + } + async readFromChain(lastRead) { + await lastRead; + if (this.iterator == null) { + const iteratorResult = await this.moreIterators.next(); + if (iteratorResult.done) { + return { value: null, done: true }; + } + this.iterator = iteratorResult.value; + if (this.baseErrorHandler != null) { + this.iterator = this.iterator.handleErrors(this.baseErrorHandler); + } + } + const itemResult = await this.iterator.next(); + if (itemResult.done) { + this.iterator = null; + return this.readFromChain(lastRead); + } + return itemResult; + } + }; + var ZipMismatchMode; + (function(ZipMismatchMode2) { + ZipMismatchMode2[ZipMismatchMode2["FAIL"] = 0] = "FAIL"; + ZipMismatchMode2[ZipMismatchMode2["SHORTEST"] = 1] = "SHORTEST"; + ZipMismatchMode2[ZipMismatchMode2["LONGEST"] = 2] = "LONGEST"; + })(ZipMismatchMode || (ZipMismatchMode = {})); + var PrefetchIterator = class extends LazyIterator { + constructor(upstream, bufferSize) { + super(); + this.upstream = upstream; + this.bufferSize = bufferSize; + this.buffer = new RingBuffer(bufferSize); + } + summary() { + return `${this.upstream.summary()} -> Prefetch`; + } + refill() { + while (!this.buffer.isFull()) { + const v = this.upstream.next(); + this.buffer.push(v); + } + } + next() { + this.refill(); + return this.buffer.shift(); + } + }; + var ShuffleIterator = class extends PrefetchIterator { + constructor(upstream, windowSize, seed) { + super(upstream, windowSize); + this.upstream = upstream; + this.windowSize = windowSize; + this.upstreamExhausted = false; + this.random = seedrandom2.alea(seed || util_exports.now().toString()); + this.lastRead = Promise.resolve({ value: null, done: false }); + } + async next() { + this.lastRead = this.lastRead.then(() => this.serialNext()); + return this.lastRead; + } + randomInt(max6) { + return Math.floor(this.random() * max6); + } + chooseIndex() { + return this.randomInt(this.buffer.length()); + } + async serialNext() { + if (!this.upstreamExhausted) { + this.refill(); + } + while (!this.buffer.isEmpty()) { + const chosenIndex = this.chooseIndex(); + const result = await this.buffer.shuffleExcise(chosenIndex); + if (result.done) { + this.upstreamExhausted = true; + } else { + this.refill(); + return result; + } + } + return { value: null, done: true }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/dataset.js + var Dataset = class { + constructor() { + this.size = null; + } + batch(batchSize, smallLastBatch = true) { + const base = this; + util_exports.assert(batchSize > 0, () => `batchSize needs to be positive, but it is + ${batchSize}`); + let size; + if (this.size === Infinity || this.size == null) { + size = this.size; + } else if (smallLastBatch) { + size = Math.ceil(this.size / batchSize); + } else { + size = Math.floor(this.size / batchSize); + } + return datasetFromIteratorFn(async () => { + return (await base.iterator()).columnMajorBatch(batchSize, smallLastBatch, deepBatchConcat); + }, size); + } + concatenate(dataset) { + const base = this; + let size; + if (this.size === Infinity || dataset.size === Infinity) { + size = Infinity; + } else if (this.size != null && dataset.size != null) { + size = this.size + dataset.size; + } else { + size = null; + } + return datasetFromIteratorFn(async () => (await base.iterator()).concatenate(await dataset.iterator()), size); + } + filter(predicate) { + const base = this; + let size; + if (this.size === Infinity) { + size = Infinity; + } else { + size = null; + } + return datasetFromIteratorFn(async () => { + return (await base.iterator()).filter((x) => tidy(() => predicate(x))); + }, size); + } + async forEachAsync(f) { + return (await this.iterator()).forEachAsync(f); + } + map(transform5) { + const base = this; + return datasetFromIteratorFn(async () => { + return (await base.iterator()).map((x) => tidy(() => transform5(x))); + }, this.size); + } + mapAsync(transform5) { + const base = this; + return datasetFromIteratorFn(async () => { + return (await base.iterator()).mapAsync(transform5); + }, this.size); + } + prefetch(bufferSize) { + if (bufferSize == null) { + throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified."); + } + const base = this; + return datasetFromIteratorFn(async () => (await base.iterator()).prefetch(bufferSize), this.size); + } + repeat(count2) { + const base = this; + let size; + if (this.size != null && count2 > 0) { + size = this.size * count2; + } else if (count2 === 0) { + size = 0; + } else if (this.size != null && (count2 === void 0 || count2 < 0)) { + size = Infinity; + } else { + size = null; + } + return datasetFromIteratorFn(async () => { + const iteratorIterator = iteratorFromFunction(async () => ({ value: await base.iterator(), done: false })); + return iteratorFromConcatenated(iteratorIterator.take(count2)); + }, size); + } + skip(count2) { + const base = this; + let size; + if (this.size != null && count2 >= 0 && this.size >= count2) { + size = this.size - count2; + } else if (this.size != null && (this.size < count2 || count2 === void 0 || count2 < 0)) { + size = 0; + } else { + size = null; + } + return datasetFromIteratorFn(async () => (await base.iterator()).skip(count2), size); + } + shuffle(bufferSize, seed, reshuffleEachIteration = true) { + if (bufferSize == null || bufferSize < 0) { + if (this.size == null) { + throw new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."); + } else { + throw new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`); + } + } + const base = this; + const random = seedrandom3.alea(seed || util_exports.now().toString()); + return datasetFromIteratorFn(async () => { + let seed2 = random.int32(); + if (reshuffleEachIteration) { + seed2 += random.int32(); + } + return (await base.iterator()).shuffle(bufferSize, seed2.toString()); + }, this.size); + } + take(count2) { + const base = this; + let size; + if (this.size != null && this.size > count2) { + size = count2; + } else if (this.size != null && this.size <= count2) { + size = this.size; + } else { + size = null; + } + return datasetFromIteratorFn(async () => (await base.iterator()).take(count2), size); + } + async toArray() { + if (this.size === Infinity) { + throw new Error("Can not convert infinite data stream to array."); + } + return (await this.iterator()).toArray(); + } + async toArrayForTest() { + if (this.size === Infinity) { + throw new Error("Can not convert infinite data stream to array."); + } + return (await this.iterator()).toArrayForTest(); + } + }; + Dataset.MAX_BUFFER_SIZE = 1e4; + function datasetFromIteratorFn(iteratorFn, size = null) { + return new class extends Dataset { + constructor() { + super(...arguments); + this.size = size; + } + async iterator() { + return iteratorFn(); + } + }(); + } + function deepBatchConcat(rows) { + if (rows === null) { + return null; + } + const exampleRow = rows[0]; + if (canTensorify(exampleRow)) { + const value = batchConcat(rows); + return { value, recurse: false }; + } + return { value: null, recurse: true }; + } + function batchConcat(arrays) { + if (arrays.length === 0) { + throw new Error("Can't make a batch of zero elements."); + } + if (arrays[0] instanceof Tensor) { + return stack(arrays); + } else { + return tensor(arrays); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/datasets/csv_dataset.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/datasets/text_line_dataset.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/datasets/csv_dataset.js + var STATE_OUT = Symbol("out"); + var STATE_FIELD = Symbol("field"); + var STATE_QUOTE = Symbol("quote"); + var STATE_QUOTE_AFTER_QUOTE = Symbol("quoteafterquote"); + var STATE_WITHIN_QUOTE_IN_QUOTE = Symbol("quoteinquote"); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/readers.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/microphone_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/webcam_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/sources/url_data_source.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/datasource.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/url_chunk_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/file_chunk_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/byte_chunk_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/iterators/string_iterator.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/util/source_util.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/sources/file_data_source.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-data@3.19.0_@tensorflow+tfjs-core@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs-data/dist/version.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/base.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/backend_cpu.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/cpu_util.js + init_define_BUILD_VERSION(); + function assertNotComplex(tensor2, opName) { + if (!Array.isArray(tensor2)) { + tensor2 = [tensor2]; + } + tensor2.forEach((t) => { + if (t != null) { + util_exports.assert(t.dtype !== "complex64", () => `${opName} does not support complex64 tensors in the CPU backend.`); + } + }); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/backend_cpu.js + var whereImpl2 = kernel_impls_exports.whereImpl; + var MathBackendCPU = class extends KernelBackend { + constructor() { + super(); + this.blockSize = 48; + this.firstUse = true; + this.data = new DataStorage(this, engine()); + } + nextDataId() { + return MathBackendCPU.nextDataId++; + } + write(values, shape, dtype) { + if (this.firstUse) { + this.firstUse = false; + if (env().get("IS_NODE")) { + backend_util_exports.warn("\n============================\nHi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. \n============================"); + } + } + const dataId = { id: this.nextDataId() }; + this.data.set(dataId, { values, dtype, refCount: 1 }); + return dataId; + } + makeTensorInfo(shape, dtype, values) { + let outId; + if (dtype === "string" && values != null && values.length > 0 && util_exports.isString(values[0])) { + const encodedValues = values.map((d) => util_exports.encodeString(d)); + outId = this.write(encodedValues, shape, dtype); + } else { + outId = this.write(values, shape, dtype); + } + return { dataId: outId, shape, dtype }; + } + refCount(dataId) { + if (this.data.has(dataId)) { + const tensorData = this.data.get(dataId); + return tensorData.refCount; + } + return 0; + } + incRef(dataId) { + const tensorData = this.data.get(dataId); + tensorData.refCount++; + } + decRef(dataId) { + if (this.data.has(dataId)) { + const tensorData = this.data.get(dataId); + tensorData.refCount--; + } + } + move(dataId, values, shape, dtype, refCount) { + this.data.set(dataId, { values, dtype, refCount }); + } + numDataIds() { + return this.data.numDataIds(); + } + async read(dataId) { + return this.readSync(dataId); + } + readSync(dataId) { + const { dtype, complexTensorInfos } = this.data.get(dataId); + if (dtype === "complex64") { + const realValues = this.readSync(complexTensorInfos.real.dataId); + const imagValues = this.readSync(complexTensorInfos.imag.dataId); + return backend_util_exports.mergeRealAndImagArrays(realValues, imagValues); + } + return this.data.get(dataId).values; + } + bufferSync(t) { + const data = this.readSync(t.dataId); + if (t.dtype === "string") { + try { + const strings = data.map((d) => util_exports.decodeString(d)); + return buffer(t.shape, t.dtype, strings); + } catch (_a) { + throw new Error("Failed to decode encoded string bytes into utf-8"); + } + } + return buffer(t.shape, t.dtype, data); + } + makeOutput(values, shape, dtype) { + return engine().makeTensorFromTensorInfo(this.makeTensorInfo(shape, dtype, values), this); + } + disposeData(dataId, force = false) { + if (this.data.has(dataId)) { + this.data.get(dataId).refCount--; + if (!force && this.data.get(dataId).refCount > 0) { + return false; + } + const { complexTensorInfos } = this.data.get(dataId); + if (complexTensorInfos != null) { + this.disposeData(complexTensorInfos.real.dataId, true); + this.disposeData(complexTensorInfos.imag.dataId, true); + } + this.data.delete(dataId); + } + return true; + } + disposeIntermediateTensorInfo(tensorInfo) { + this.disposeData(tensorInfo.dataId); + } + async time(f) { + const start = util_exports.now(); + f(); + const kernelMs = util_exports.now() - start; + return { kernelMs }; + } + memory() { + return { + unreliable: true, + reasons: ["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."] + }; + } + where(condition) { + assertNotComplex([condition], "where"); + const condVals = this.readSync(condition.dataId); + return whereImpl2(condition.shape, condVals); + } + dispose() { + } + floatPrecision() { + return 32; + } + epsilon() { + return super.epsilon(); + } + }; + MathBackendCPU.nextDataId = 0; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/shared.js + var shared_exports = {}; + __export(shared_exports, { + addImpl: () => addImpl, + bincountImpl: () => bincountImpl, + bincountReduceImpl: () => bincountReduceImpl, + ceilImpl: () => ceilImpl, + concatImpl: () => concatImpl, + equalImpl: () => equalImpl, + expImpl: () => expImpl, + expm1Impl: () => expm1Impl, + floorImpl: () => floorImpl, + gatherNdImpl: () => gatherNdImpl, + gatherV2Impl: () => gatherV2Impl, + greaterEqualImpl: () => greaterEqualImpl, + greaterImpl: () => greaterImpl, + lessEqualImpl: () => lessEqualImpl, + lessImpl: () => lessImpl, + linSpaceImpl: () => linSpaceImpl, + logImpl: () => logImpl, + maxImpl: () => maxImpl, + maximumImpl: () => maximumImpl, + minimumImpl: () => minimumImpl, + multiplyImpl: () => multiplyImpl, + negImpl: () => negImpl, + notEqualImpl: () => notEqualImpl, + prodImpl: () => prodImpl, + rangeImpl: () => rangeImpl, + rsqrtImpl: () => rsqrtImpl, + scatterImpl: () => scatterImpl, + sigmoidImpl: () => sigmoidImpl, + simpleAbsImpl: () => simpleAbsImpl, + sliceImpl: () => sliceImpl, + sparseFillEmptyRowsImpl: () => sparseFillEmptyRowsImpl, + sparseReshapeImpl: () => sparseReshapeImpl, + sparseSegmentReductionImpl: () => sparseSegmentReductionImpl, + sqrtImpl: () => sqrtImpl, + squaredDifferenceImpl: () => squaredDifferenceImpl, + stridedSliceImpl: () => stridedSliceImpl, + stringNGramsImpl: () => stringNGramsImpl, + stringSplitImpl: () => stringSplitImpl, + stringToHashBucketFastImpl: () => stringToHashBucketFastImpl, + subImpl: () => subImpl, + tileImpl: () => tileImpl, + topKImpl: () => topKImpl, + transposeImpl: () => transposeImpl, + uniqueImpl: () => uniqueImpl + }); + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Abs.js + init_define_BUILD_VERSION(); + function simpleAbsImpl(vals) { + const resultValues = new Float32Array(vals.length); + for (let i = 0; i < vals.length; ++i) { + resultValues[i] = Math.abs(vals[i]); + } + return resultValues; + } + var abs2 = (args) => { + const { x } = args.inputs; + const cpuBackend = args.backend; + assertNotComplex(x, "abs"); + let resultValues = new Float32Array(util_exports.sizeFromShape(x.shape)); + const values = cpuBackend.data.get(x.dataId).values; + resultValues = simpleAbsImpl(values); + return cpuBackend.makeOutput(resultValues, x.shape, x.dtype); + }; + var absConfig = { + kernelName: Abs, + backendName: "cpu", + kernelFunc: abs2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Add.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_impl.js + init_define_BUILD_VERSION(); + function createSimpleBinaryKernelImpl(op2) { + return (aShape, bShape, aVals, bVals, dtype) => { + const newShape = backend_util_exports.assertAndGetBroadcastShape(aShape, bShape); + const resultRank = newShape.length; + const resultStrides = util_exports.computeStrides(newShape); + const resultSize = util_exports.sizeFromShape(newShape); + const result = util_exports.getTypedArrayFromDType(dtype, resultSize); + const aRank = aShape.length; + const bRank = bShape.length; + const aStrides = util_exports.computeStrides(aShape); + const bStrides = util_exports.computeStrides(bShape); + const aBroadcastDims = backend_util_exports.getBroadcastDims(aShape, newShape); + const bBroadcastDims = backend_util_exports.getBroadcastDims(bShape, newShape); + if (aBroadcastDims.length + bBroadcastDims.length === 0) { + for (let i = 0; i < result.length; ++i) { + result[i] = op2(aVals[i % aVals.length], bVals[i % bVals.length]); + } + } else { + for (let i = 0; i < result.length; ++i) { + const loc = util_exports.indexToLoc(i, resultRank, resultStrides); + const aLoc = loc.slice(-aRank); + aBroadcastDims.forEach((d) => aLoc[d] = 0); + const aIndex = util_exports.locToIndex(aLoc, aRank, aStrides); + const bLoc = loc.slice(-bRank); + bBroadcastDims.forEach((d) => bLoc[d] = 0); + const bIndex = util_exports.locToIndex(bLoc, bRank, bStrides); + result[i] = op2(aVals[aIndex], bVals[bIndex]); + } + } + return [result, newShape]; + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cast.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/zeros_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Complex.js + init_define_BUILD_VERSION(); + function complex2(args) { + const { inputs, backend: backend2 } = args; + const { real: real4, imag: imag4 } = inputs; + const realVals = backend2.data.get(real4.dataId).values; + const imagVals = backend2.data.get(imag4.dataId).values; + const complexInfo = backend2.makeTensorInfo(real4.shape, "complex64"); + const complex4 = backend2.data.get(complexInfo.dataId); + complex4.complexTensorInfos = { + real: backend2.makeTensorInfo(real4.shape, "float32", realVals), + imag: backend2.makeTensorInfo(imag4.shape, "float32", imagVals) + }; + return complexInfo; + } + var complexConfig = { + kernelName: Complex, + backendName: "cpu", + kernelFunc: complex2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/zeros_impl.js + function zeros2(backend2, shape, dtype = "float32") { + if (dtype === "complex64") { + const real4 = zeros2(backend2, shape, "float32"); + const imag4 = zeros2(backend2, shape, "float32"); + return complex2({ inputs: { real: real4, imag: imag4 }, backend: backend2 }); + } + const values = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(shape), dtype); + return backend2.makeTensorInfo(shape, dtype, values); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Identity.js + init_define_BUILD_VERSION(); + function identity(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + backend2.incRef(x.dataId); + return { dataId: x.dataId, shape: x.shape, dtype: x.dtype }; + } + var identityConfig = { + kernelName: Identity, + backendName: "cpu", + kernelFunc: identity + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Real.js + init_define_BUILD_VERSION(); + function real2(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const real4 = backend2.data.get(input2.dataId).complexTensorInfos.real; + const realVal = backend2.data.get(real4.dataId).values; + return backend2.makeTensorInfo(real4.shape, real4.dtype, realVal); + } + var realConfig = { + kernelName: Real, + backendName: "cpu", + kernelFunc: real2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cast.js + function cast3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { dtype } = attrs; + if (dtype === "complex64") { + if (x.dtype === "complex64") { + return identity({ inputs: { x }, backend: backend2 }); + } + const zerosTensorInfo = zeros2(backend2, x.shape, x.dtype); + const floatX = cast3({ inputs: { x }, backend: backend2, attrs: { dtype: "float32" } }); + const result = complex2({ inputs: { real: floatX, imag: zerosTensorInfo }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(zerosTensorInfo); + backend2.disposeIntermediateTensorInfo(floatX); + return result; + } + if (x.dtype === "complex64") { + const realPart = real2({ inputs: { input: x }, backend: backend2 }); + const result = cast3({ inputs: { x: realPart }, backend: backend2, attrs: { dtype } }); + backend2.disposeIntermediateTensorInfo(realPart); + return result; + } + if (!util_exports.hasEncodingLoss(x.dtype, dtype)) { + const result = identity({ inputs: { x }, backend: backend2 }); + return { dataId: result.dataId, shape: result.shape, dtype }; + } + if (dtype === "int32") { + const values = backend2.data.get(x.dataId).values; + const resultValues = Int32Array.from(values); + return backend2.makeTensorInfo(x.shape, "int32", resultValues); + } + if (dtype === "bool") { + const xVals = backend2.data.get(x.dataId).values; + const zero = util_exports.toTypedArray([0], x.dtype); + const [resultData, resultShape] = createSimpleBinaryKernelImpl((a, b) => a !== b ? 1 : 0)(x.shape, [], xVals, zero, "bool"); + return backend2.makeTensorInfo(resultShape, "bool", resultData); + } + throw new Error(`Error in Cast: failed to cast ${x.dtype} to ${dtype}`); + } + var castConfig = { + kernelName: Cast, + backendName: "cpu", + kernelFunc: cast3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_utils.js + function binaryKernelFunc(name, simpleImpl, complexImpl, dtype) { + if (complexImpl == null) { + return ({ inputs, backend: backend2 }) => { + const { a, b } = inputs; + const cpuBackend = backend2; + assertNotComplex([a, b], name); + const aVals = cpuBackend.data.get(a.dataId).values; + const bVals = cpuBackend.data.get(b.dataId).values; + const decodedAVals = a.dtype === "string" ? backend_util_exports.fromUint8ToStringArray(aVals) : aVals; + const decodedBVals = a.dtype === "string" ? backend_util_exports.fromUint8ToStringArray(bVals) : bVals; + const $dtype = dtype || a.dtype; + const [resultData, resultShape] = simpleImpl(a.shape, b.shape, decodedAVals, decodedBVals, $dtype); + return cpuBackend.makeTensorInfo(resultShape, $dtype, resultData); + }; + } + return ({ inputs, backend: backend2 }) => { + const { a, b } = inputs; + const cpuBackend = backend2; + if (a.dtype === "complex64" || b.dtype === "complex64") { + const $aComplex = cast3({ inputs: { x: a }, backend: cpuBackend, attrs: { dtype: "complex64" } }); + const $aComplexVals = cpuBackend.data.get($aComplex.dataId); + const aReal = $aComplexVals.complexTensorInfos.real; + const aImag = $aComplexVals.complexTensorInfos.imag; + const aRealVals = cpuBackend.data.get(aReal.dataId).values; + const aImagVals = cpuBackend.data.get(aImag.dataId).values; + const $bComplex = cast3({ inputs: { x: b }, backend: cpuBackend, attrs: { dtype: "complex64" } }); + const $bComplexVals = cpuBackend.data.get($bComplex.dataId); + const bReal = $bComplexVals.complexTensorInfos.real; + const bImag = $bComplexVals.complexTensorInfos.imag; + const bRealVals = cpuBackend.data.get(bReal.dataId).values; + const bImagVals = cpuBackend.data.get(bImag.dataId).values; + const [resultRealData, resultImagData, resultShape] = complexImpl(a.shape, b.shape, aRealVals, aImagVals, bRealVals, bImagVals); + const resultReal = cpuBackend.makeTensorInfo(resultShape, "float32", resultRealData); + const resultImag = cpuBackend.makeTensorInfo(resultShape, "float32", resultImagData); + const result = complex2({ inputs: { real: resultReal, imag: resultImag }, backend: cpuBackend }); + cpuBackend.disposeIntermediateTensorInfo($aComplex); + cpuBackend.disposeIntermediateTensorInfo($bComplex); + cpuBackend.disposeIntermediateTensorInfo(resultReal); + cpuBackend.disposeIntermediateTensorInfo(resultImag); + return result; + } else { + const aVals = cpuBackend.data.get(a.dataId).values; + const bVals = cpuBackend.data.get(b.dataId).values; + const $dtype = dtype || a.dtype; + const [resultData, resultShape] = simpleImpl(a.shape, b.shape, aVals, bVals, $dtype); + return cpuBackend.makeTensorInfo(resultShape, $dtype, resultData); + } + }; + } + function createComplexBinaryKernelImpl(op2) { + return (aShape, bShape, aRealVals, aImagVals, bRealVals, bImagVals) => { + const resultShape = backend_util_exports.assertAndGetBroadcastShape(aShape, bShape); + const resultSize = util_exports.sizeFromShape(resultShape); + const resultRank = resultShape.length; + const resultStrides = util_exports.computeStrides(resultShape); + const resultRealVals = util_exports.getTypedArrayFromDType("float32", resultSize); + const resultImagVals = util_exports.getTypedArrayFromDType("float32", resultSize); + const aBroadcastDims = backend_util_exports.getBroadcastDims(aShape, resultShape); + const bBroadcastDims = backend_util_exports.getBroadcastDims(bShape, resultShape); + const aVals = backend_util_exports.mergeRealAndImagArrays(aRealVals, aImagVals); + const bVals = backend_util_exports.mergeRealAndImagArrays(bRealVals, bImagVals); + const aRank = aShape.length; + const aStrides = util_exports.computeStrides(aShape); + const bRank = bShape.length; + const bStrides = util_exports.computeStrides(bShape); + if (aBroadcastDims.length + bBroadcastDims.length === 0) { + for (let i = 0; i < resultRealVals.length; i++) { + const aIdx = i % aVals.length; + const bIdx = i % bVals.length; + const result = op2(aVals[aIdx * 2], aVals[aIdx * 2 + 1], bVals[bIdx * 2], bVals[bIdx * 2 + 1]); + resultRealVals[i] = result.real; + resultImagVals[i] = result.imag; + } + } else { + for (let i = 0; i < resultRealVals.length; i++) { + const loc = util_exports.indexToLoc(i, resultRank, resultStrides); + const aLoc = loc.slice(-aRank); + aBroadcastDims.forEach((d) => aLoc[d] = 0); + const aIndex = util_exports.locToIndex(aLoc, aRank, aStrides); + const bLoc = loc.slice(-bRank); + bBroadcastDims.forEach((d) => bLoc[d] = 0); + const bIndex = util_exports.locToIndex(bLoc, bRank, bStrides); + const opResult = op2(aVals[aIndex * 2], aVals[aIndex * 2 + 1], bVals[bIndex * 2], bVals[bIndex * 2 + 1]); + resultRealVals[i] = opResult.real; + resultImagVals[i] = opResult.imag; + } + } + return [resultRealVals, resultImagVals, resultShape]; + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Add.js + var addImpl = createSimpleBinaryKernelImpl((a, b) => a + b); + var addComplexImpl = createComplexBinaryKernelImpl((aReal, aImag, bReal, bImag) => { + return { real: aReal + bReal, imag: aImag + bImag }; + }); + var add3 = binaryKernelFunc(Add, addImpl, addComplexImpl); + var addConfig = { + kernelName: Add, + backendName: "cpu", + kernelFunc: add3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Bincount_impl.js + init_define_BUILD_VERSION(); + function bincountImpl(xVals, weightsVals, weightsDtype, weightsShape, size) { + const weightsSize = util_exports.sizeFromShape(weightsShape); + const outVals = util_exports.makeZerosTypedArray(size, weightsDtype); + for (let i = 0; i < xVals.length; i++) { + const value = xVals[i]; + if (value < 0) { + throw new Error("Input x must be non-negative!"); + } + if (value >= size) { + continue; + } + if (weightsSize > 0) { + outVals[value] += weightsVals[i]; + } else { + outVals[value] += 1; + } + } + return outVals; + } + function bincountReduceImpl(xBuf, weightsBuf, size, binaryOutput = false) { + const numRows = xBuf.shape[0]; + const numCols = xBuf.shape[1]; + const outBuf = buffer([numRows, size], weightsBuf.dtype); + for (let i = 0; i < numRows; i++) { + for (let j = 0; j < numCols; j++) { + const value = xBuf.get(i, j); + if (value < 0) { + throw new Error("Input x must be non-negative!"); + } + if (value >= size) { + continue; + } + if (binaryOutput) { + outBuf.set(1, i, value); + } else { + if (weightsBuf.size > 0) { + outBuf.set(outBuf.get(i, value) + weightsBuf.get(i, j), i, value); + } else { + outBuf.set(outBuf.get(i, value) + 1, i, value); + } + } + } + } + return outBuf; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Ceil.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/unary_impl.js + init_define_BUILD_VERSION(); + function createSimpleUnaryImpl(op2) { + return (values, dtype, attrs) => { + const newValues = util_exports.getTypedArrayFromDType(dtype, values.length); + for (let i = 0; i < values.length; ++i) { + newValues[i] = op2(values[i], attrs); + } + return newValues; + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/unary_utils.js + init_define_BUILD_VERSION(); + function unaryKernelFunc(name, op2, dtype) { + return ({ inputs, attrs, backend: backend2 }) => { + const { x } = inputs; + assertNotComplex(x, name); + if (x.dtype === "string" || dtype === "string") { + throw new Error("unaryKernelFunc does not support string input/output"); + } + const cpuBackend = backend2; + const values = cpuBackend.data.get(x.dataId).values; + const xSize = util_exports.sizeFromShape(x.shape); + const $dtype = dtype || x.dtype; + const newValues = util_exports.getArrayFromDType($dtype, xSize); + for (let i = 0; i < xSize; ++i) { + newValues[i] = op2(values[i], attrs); + } + return cpuBackend.makeTensorInfo(x.shape, $dtype, newValues); + }; + } + function unaryKernelFuncFromImpl(name, unaryImpl, dtype) { + return ({ inputs, attrs, backend: backend2 }) => { + const { x } = inputs; + assertNotComplex(x, name); + if (x.dtype === "string" || dtype === "string") { + throw new Error("unaryKernelFunc does not support string input/output"); + } + const cpuBackend = backend2; + const values = cpuBackend.data.get(x.dataId).values; + const $dtype = dtype || x.dtype; + const newValues = unaryImpl(values, $dtype, attrs); + return cpuBackend.makeTensorInfo(x.shape, $dtype, newValues); + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Ceil.js + var ceilImpl = createSimpleUnaryImpl((xi) => Math.ceil(xi)); + var ceil2 = unaryKernelFuncFromImpl(Ceil, ceilImpl); + var ceilConfig = { + kernelName: Ceil, + backendName: "cpu", + kernelFunc: ceil2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat_impl.js + init_define_BUILD_VERSION(); + function concatImpl(inputs, outShape, dtype, simplyConcat) { + const outVals = util_exports.getArrayFromDType(dtype, util_exports.sizeFromShape(outShape)); + if (simplyConcat && dtype !== "string") { + let offset = 0; + inputs.forEach((input2) => { + const size = util_exports.sizeFromShape(input2.shape); + outVals.set(input2.vals, offset); + offset += size; + }); + } else { + let colOffset = 0; + inputs.forEach((input2) => { + const decodedData = dtype === "string" ? backend_util_exports.fromUint8ToStringArray(input2.vals) : input2.vals; + let tIdx = 0; + for (let row = 0; row < input2.shape[0]; ++row) { + const resIdx = row * outShape[1] + colOffset; + for (let col = 0; col < input2.shape[1]; ++col) { + outVals[resIdx + col] = decodedData[tIdx++]; + } + } + colOffset += input2.shape[1]; + }); + } + return outVals; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Equal.js + init_define_BUILD_VERSION(); + var equalImpl = createSimpleBinaryKernelImpl((a, b) => a === b ? 1 : 0); + var equal2 = binaryKernelFunc(Equal, equalImpl, null, "bool"); + var equalConfig = { + kernelName: Equal, + backendName: "cpu", + kernelFunc: equal2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Exp.js + init_define_BUILD_VERSION(); + var expImpl = createSimpleUnaryImpl((xi) => Math.exp(xi)); + var exp2 = unaryKernelFuncFromImpl(Exp, expImpl, "float32"); + var expConfig = { + kernelName: Exp, + backendName: "cpu", + kernelFunc: exp2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Expm1.js + init_define_BUILD_VERSION(); + var expm1Impl = createSimpleUnaryImpl((xi) => Math.expm1(xi)); + var expm12 = unaryKernelFuncFromImpl(Expm1, expm1Impl); + var expm1Config = { + kernelName: Expm1, + backendName: "cpu", + kernelFunc: expm12 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Floor.js + init_define_BUILD_VERSION(); + var floorImpl = createSimpleUnaryImpl((xi) => Math.floor(xi)); + var floor2 = unaryKernelFuncFromImpl(Floor, floorImpl); + var floorConfig = { + kernelName: Floor, + backendName: "cpu", + kernelFunc: floor2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherNd_Impl.js + init_define_BUILD_VERSION(); + function gatherNdImpl(indicesData, paramsBuf, dtype, numSlices, sliceRank, sliceSize, strides, paramsShape, paramsSize) { + const outBuf = buffer([numSlices, sliceSize], dtype); + for (let i = 0; i < numSlices; i++) { + const index = []; + let flattenIndex = 0; + for (let j = 0; j < sliceRank; j++) { + const dim = indicesData[i * sliceRank + j]; + flattenIndex += dim * strides[j]; + index.push(dim); + } + if (flattenIndex < 0 || flattenIndex >= paramsSize / sliceSize) { + throw new Error(`Invalid indices: ${index} does not index into ${paramsShape}`); + } + for (let k = 0; k < sliceSize; k++) { + outBuf.values[i * sliceSize + k] = paramsBuf.get(...paramsBuf.indexToLoc(flattenIndex * sliceSize + k)); + } + } + return outBuf; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherV2_impl.js + init_define_BUILD_VERSION(); + function gatherV2Impl(xBuf, indicesBuf, flattenOutputShape) { + const outBuf = buffer(flattenOutputShape, xBuf.dtype); + for (let i = 0; i < outBuf.size; ++i) { + const newLoc = outBuf.indexToLoc(i); + const originalLoc = newLoc.slice(); + const batchIdx = originalLoc[0]; + const indicesIdx = originalLoc[2]; + const indicesIndex = indicesBuf.locToIndex([batchIdx, indicesIdx]); + originalLoc[2] = indicesBuf.values[indicesIndex]; + const originalIndex = xBuf.locToIndex(originalLoc); + if (0 <= originalIndex && originalIndex < xBuf.values.length) { + outBuf.values[i] = xBuf.values[originalIndex]; + } + } + return outBuf; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Greater.js + init_define_BUILD_VERSION(); + var greaterImpl = createSimpleBinaryKernelImpl((a, b) => a > b ? 1 : 0); + var greater2 = binaryKernelFunc(Greater, greaterImpl, null, "bool"); + var greaterConfig = { + kernelName: Greater, + backendName: "cpu", + kernelFunc: greater2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GreaterEqual.js + init_define_BUILD_VERSION(); + var greaterEqualImpl = createSimpleBinaryKernelImpl((a, b) => a >= b ? 1 : 0); + var greaterEqual2 = binaryKernelFunc(GreaterEqual, greaterEqualImpl, null, "bool"); + var greaterEqualConfig = { + kernelName: GreaterEqual, + backendName: "cpu", + kernelFunc: greaterEqual2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Less.js + init_define_BUILD_VERSION(); + var lessImpl = createSimpleBinaryKernelImpl((a, b) => a < b ? 1 : 0); + var less2 = binaryKernelFunc(Less, lessImpl, null, "bool"); + var lessConfig = { + kernelName: Less, + backendName: "cpu", + kernelFunc: less2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LessEqual.js + init_define_BUILD_VERSION(); + var lessEqualImpl = createSimpleBinaryKernelImpl((a, b) => a <= b ? 1 : 0); + var lessEqual2 = binaryKernelFunc(LessEqual, lessEqualImpl, null, "bool"); + var lessEqualConfig = { + kernelName: LessEqual, + backendName: "cpu", + kernelFunc: lessEqual2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LinSpace_impl.js + init_define_BUILD_VERSION(); + function linSpaceImpl(start, stop, num) { + const step5 = (stop - start) / (num - 1); + const values = util_exports.makeZerosTypedArray(num, "float32"); + values[0] = start; + for (let i = 1; i < values.length; i++) { + values[i] = values[i - 1] + step5; + } + return values; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Log.js + init_define_BUILD_VERSION(); + var logImpl = createSimpleUnaryImpl((xi) => Math.log(xi)); + var log3 = unaryKernelFuncFromImpl(Log, logImpl); + var logConfig = { + kernelName: Log, + backendName: "cpu", + kernelFunc: log3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Max_impl.js + init_define_BUILD_VERSION(); + function maxImpl(aVals, reduceSize, outShape, dtype) { + const vals = util_exports.getTypedArrayFromDType(dtype, util_exports.sizeFromShape(outShape)); + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let max6 = aVals[offset]; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + if (Number.isNaN(value) || value > max6) { + max6 = value; + } + } + vals[i] = max6; + } + return vals; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Maximum.js + init_define_BUILD_VERSION(); + var maximumImpl = createSimpleBinaryKernelImpl((aValue, bValue) => Math.max(aValue, bValue)); + var maximum2 = binaryKernelFunc(Maximum, maximumImpl); + var maximumConfig = { + kernelName: Maximum, + backendName: "cpu", + kernelFunc: maximum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Minimum.js + init_define_BUILD_VERSION(); + var minimumImpl = createSimpleBinaryKernelImpl((aValue, bValue) => Math.min(aValue, bValue)); + var minimum2 = binaryKernelFunc(Minimum, minimumImpl); + var minimumConfig = { + kernelName: Minimum, + backendName: "cpu", + kernelFunc: minimum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multiply.js + init_define_BUILD_VERSION(); + var multiplyImpl = createSimpleBinaryKernelImpl((aValue, bValue) => aValue * bValue); + var multiplyComplexImpl = createComplexBinaryKernelImpl((aReal, aImag, bReal, bImag) => { + return { + real: aReal * bReal - aImag * bImag, + imag: aReal * bImag + aImag * bReal + }; + }); + var multiply = binaryKernelFunc(Multiply, multiplyImpl, multiplyComplexImpl); + var multiplyConfig = { + kernelName: Multiply, + backendName: "cpu", + kernelFunc: multiply + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Neg.js + init_define_BUILD_VERSION(); + function negImpl(xVals, xShape, xDtype) { + const minusOne = util_exports.createScalarValue(-1, xDtype); + return multiplyImpl([], xShape, minusOne, xVals, xDtype); + } + function neg2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + assertNotComplex(x, "neg"); + const xVals = backend2.data.get(x.dataId).values; + const [res, newShape] = negImpl(xVals, x.shape, x.dtype); + return backend2.makeTensorInfo(newShape, x.dtype, res); + } + var negConfig = { + kernelName: Neg, + backendName: "cpu", + kernelFunc: neg2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NotEqual.js + init_define_BUILD_VERSION(); + var notEqualImpl = createSimpleBinaryKernelImpl((a, b) => a !== b ? 1 : 0); + var notEqual2 = binaryKernelFunc(NotEqual, notEqualImpl, null, "bool"); + var notEqualConfig = { + kernelName: NotEqual, + backendName: "cpu", + kernelFunc: notEqual2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prod.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose_impl.js + init_define_BUILD_VERSION(); + function transposeImpl(xVals, xShape, dtype, perm, newShape) { + const xRank = xShape.length; + const xSize = util_exports.sizeFromShape(xShape); + const xStrides = util_exports.computeStrides(xShape); + const newStrides = util_exports.computeStrides(newShape); + const result = util_exports.getTypedArrayFromDType(dtype, util_exports.sizeFromShape(newShape)); + for (let i = 0; i < xSize; ++i) { + const loc = util_exports.indexToLoc(i, xRank, xStrides); + const newLoc = new Array(loc.length); + for (let i2 = 0; i2 < newLoc.length; i2++) { + newLoc[i2] = loc[perm[i2]]; + } + const newIndex = util_exports.locToIndex(newLoc, xRank, newStrides); + result[newIndex] = xVals[i]; + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose.js + function transpose2(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x } = inputs; + const { perm } = attrs; + assertNotComplex(x, "transpose"); + const xRank = x.shape.length; + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = x.shape[perm[i]]; + } + const values = backend2.data.get(x.dataId).values; + const result = transposeImpl(values, x.shape, x.dtype, perm, newShape); + const dataId = backend2.write(result, newShape, x.dtype); + return { dataId, shape: newShape, dtype: x.dtype }; + } + var transposeConfig = { + kernelName: Transpose, + backendName: "cpu", + kernelFunc: transpose2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prod.js + function prodImpl(xShape, xDtype, xVals, reductionAxes) { + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(xShape, reductionAxes); + const outDtype = upcastType(xDtype, "int32"); + const outVals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(outShape), outDtype); + const reduceSize = util_exports.sizeFromShape(reduceShape); + for (let i = 0; i < outVals.length; ++i) { + const offset = i * reduceSize; + let prod5 = 1; + for (let j = 0; j < reduceSize; ++j) { + prod5 *= xVals[offset + j]; + } + outVals[i] = prod5; + } + return { outVals, outShape, outDtype }; + } + function prod2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + assertNotComplex(x, "prod"); + const xRank = x.shape.length; + const axes = util_exports.parseAxisParam(axis, x.shape); + const permutation = backend_util_exports.getAxesPermutation(axes, xRank); + let reductionAxes = axes; + let permutedX = x; + const intermediateTensorInfos = []; + if (permutation != null) { + permutedX = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutation } }); + intermediateTensorInfos.push(permutedX); + reductionAxes = backend_util_exports.getInnerMostAxes(reductionAxes.length, xRank); + } + const xVals = backend2.data.get(permutedX.dataId).values; + const { outVals, outShape, outDtype } = prodImpl(permutedX.shape, permutedX.dtype, xVals, reductionAxes); + let resultShape = outShape; + if (keepDims) { + resultShape = backend_util_exports.expandShapeToKeepDim(outShape, axes); + } + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return backend2.makeTensorInfo(resultShape, outDtype, outVals); + } + var prodConfig = { + kernelName: Prod, + backendName: "cpu", + kernelFunc: prod2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Range_impl.js + init_define_BUILD_VERSION(); + function rangeImpl(start, stop, step5, dtype) { + const sameStartStop = start === stop; + const increasingRangeNegativeStep = start < stop && step5 < 0; + const decreasingRangePositiveStep = stop < start && step5 > 1; + if (sameStartStop || increasingRangeNegativeStep || decreasingRangePositiveStep) { + return util_exports.makeZerosTypedArray(0, dtype); + } + const numElements = Math.abs(Math.ceil((stop - start) / step5)); + const values = util_exports.makeZerosTypedArray(numElements, dtype); + if (stop < start && step5 === 1) { + step5 = -1; + } + values[0] = start; + for (let i = 1; i < values.length; i++) { + values[i] = values[i - 1] + step5; + } + return values; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Rsqrt.js + init_define_BUILD_VERSION(); + var rsqrtImpl = createSimpleUnaryImpl((xi) => 1 / Math.sqrt(xi)); + var rsqrt2 = unaryKernelFuncFromImpl(Rsqrt, rsqrtImpl); + var rsqrtConfig = { + kernelName: Rsqrt, + backendName: "cpu", + kernelFunc: rsqrt2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Scatter_impl.js + init_define_BUILD_VERSION(); + function scatterImpl(indices, updates, shape, outputSize, sliceSize, numUpdates, sliceRank, strides, defaultValue, sumDupeIndices) { + const flattenShape = [outputSize / sliceSize, sliceSize]; + const indicesData = indices.values; + const updatesData = updates.values; + if (outputSize === 0) { + return buffer(shape, updates.dtype); + } + const outBuf = buffer(flattenShape, updates.dtype); + if (typeof defaultValue === "string") { + outBuf.values.fill(defaultValue); + } else if (typeof defaultValue === "number") { + outBuf.values.fill(defaultValue); + } else if (typeof defaultValue === "boolean") { + outBuf.values.fill(+defaultValue); + } + for (let i = 0; i < numUpdates; i++) { + const index = []; + let flattenIndex = 0; + for (let j = 0; j < sliceRank; j++) { + const dim = indicesData[i * sliceRank + j]; + index.push(dim); + flattenIndex += dim * strides[j]; + } + if (flattenIndex < 0 || flattenIndex >= outputSize / sliceSize) { + throw new Error(`Invalid indices: ${index} does not index into ${shape}`); + } + for (let k = 0; k < sliceSize; k++) { + if (sumDupeIndices) { + outBuf.values[flattenIndex * sliceSize + k] += updatesData[i * sliceSize + k]; + } else { + outBuf.values[flattenIndex * sliceSize + k] = updates.rank === 0 ? updatesData[0] : updatesData[i * sliceSize + k]; + } + } + } + return outBuf; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sigmoid.js + init_define_BUILD_VERSION(); + var sigmoidImpl = createSimpleUnaryImpl((xi) => 1 / (1 + Math.exp(-xi))); + var sigmoid2 = unaryKernelFunc(Sigmoid, (xi) => 1 / (1 + Math.exp(-xi))); + var sigmoidConfig = { + kernelName: Sigmoid, + backendName: "cpu", + kernelFunc: sigmoid2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Slice.js + init_define_BUILD_VERSION(); + function sliceImpl(vals, begin, size, shape, dtype) { + const isContinous = slice_util_exports.isSliceContinous(shape, begin, size); + const length = util_exports.sizeFromShape(size); + const xStrides = util_exports.computeStrides(shape); + if (isContinous) { + const flatOffset = slice_util_exports.computeFlatOffset(begin, xStrides); + if (dtype === "string") { + return vals.slice(flatOffset, flatOffset + length); + } + return vals.subarray(flatOffset, flatOffset + length); + } + const decodedData = dtype === "string" ? backend_util_exports.fromUint8ToStringArray(vals) : vals; + const inBuf = buffer(shape, dtype, decodedData); + const outBuf = buffer(size, dtype); + for (let i = 0; i < outBuf.size; ++i) { + const outLoc = outBuf.indexToLoc(i); + const inLoc = outLoc.map((idx, j) => idx + begin[j]); + outBuf.set(inBuf.get(...inLoc), ...outLoc); + } + if (dtype === "string") { + return backend_util_exports.fromStringArrayToUint8(outBuf.values); + } + return outBuf.values; + } + function slice2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { begin, size } = attrs; + assertNotComplex(x, "slice"); + const [$begin, $size] = slice_util_exports.parseSliceParams(x, begin, size); + slice_util_exports.assertParamsValid(x, $begin, $size); + const vals = backend2.data.get(x.dataId).values; + const outVals = sliceImpl(vals, $begin, $size, x.shape, x.dtype); + return backend2.makeTensorInfo($size, x.dtype, outVals); + } + var sliceConfig = { + kernelName: Slice, + backendName: "cpu", + kernelFunc: slice2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseFillEmptyRows_impl.js + init_define_BUILD_VERSION(); + function sparseFillEmptyRowsImpl(indices, indicesShape, indicesDType, values, valuesDType, denseShape, defaultValue) { + const indicesCount = indicesShape[0]; + const denseRows = denseShape[0]; + const emptyRowIndicator = new Array(denseRows); + const reverseIndexMap = new Array(indicesCount); + const rank = indicesShape[1]; + if (denseRows === 0) { + if (indicesCount !== 0) { + throw new Error(backend_util_exports.getSparseFillEmptyRowsIndicesDenseShapeMismatch(indicesCount)); + } + const outputIndices = util_exports.getArrayFromDType(indicesDType, 0); + const outputValues = util_exports.getArrayFromDType(valuesDType, 0); + return [ + outputIndices, + [0, rank], + outputValues, + emptyRowIndicator, + reverseIndexMap + ]; + } + let rowsAreOrdered = true; + let lastIndicesRow = 0; + const csrOffset = new Array(denseRows).fill(0); + for (let i = 0; i < indicesCount; ++i) { + const row = indices[i * rank]; + if (row < 0) { + throw new Error(backend_util_exports.getSparseFillEmptyRowsNegativeIndexErrorMessage(i, row)); + } + if (row >= denseRows) { + throw new Error(backend_util_exports.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(i, row, denseRows)); + } + ++csrOffset[row]; + rowsAreOrdered = rowsAreOrdered && row >= lastIndicesRow; + lastIndicesRow = row; + } + let allRowsFull = true; + for (let row = 0; row < denseRows; ++row) { + const rowEmpty = csrOffset[row] === 0; + emptyRowIndicator[row] = rowEmpty; + allRowsFull = allRowsFull && !rowEmpty; + csrOffset[row] = Math.max(csrOffset[row], 1); + if (row > 0) { + csrOffset[row] += csrOffset[row - 1]; + } + } + if (allRowsFull && rowsAreOrdered) { + const outputIndices = indices; + const outputValues = values; + for (let i = 0; i < indicesCount; ++i) { + reverseIndexMap[i] = i; + } + return [ + outputIndices, + [indicesCount, rank], + outputValues, + emptyRowIndicator, + reverseIndexMap + ]; + } else { + const fullIndicesCount = csrOffset[denseRows - 1]; + const outputIndices = util_exports.getArrayFromDType(indicesDType, fullIndicesCount * rank); + const outputValues = util_exports.getArrayFromDType(valuesDType, fullIndicesCount); + const filledCount = new Array(denseRows).fill(0); + for (let i = 0; i < indicesCount; ++i) { + const row = indices[i * rank]; + const offset = filledCount[row]; + const outputI = (row === 0 ? 0 : csrOffset[row - 1]) + offset; + filledCount[row]++; + for (let j = 0; j < rank; ++j) { + outputIndices[outputI * rank + j] = indices[i * rank + j]; + } + outputValues[outputI] = values[i]; + reverseIndexMap[i] = outputI; + } + for (let row = 0; row < denseRows; ++row) { + const rowCount = filledCount[row]; + if (rowCount === 0) { + const startingIndex = row === 0 ? 0 : csrOffset[row - 1]; + outputIndices[startingIndex * rank + 0] = row; + for (let col = 1; col < rank; ++col) { + outputIndices[startingIndex * rank + col] = 0; + } + outputValues[startingIndex] = defaultValue; + } + } + return [ + outputIndices, + [fullIndicesCount, rank], + outputValues, + emptyRowIndicator, + reverseIndexMap + ]; + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseReshape_impl.js + init_define_BUILD_VERSION(); + function sparseReshapeImpl(inputIndices, inputIndicesShape, inputDType, inputShape, targetShape) { + const denseSize = util_exports.sizeFromShape(inputShape); + const nnz = inputIndicesShape[0]; + const outputRank = targetShape.length; + const outputShape = []; + let product = 1; + let unknownIndex = -1; + for (let d = 0; d < outputRank; ++d) { + const size = targetShape[d]; + if (size === -1) { + if (unknownIndex !== -1) { + throw new Error(backend_util_exports.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(unknownIndex, d)); + } + unknownIndex = d; + outputShape.push(1); + } else { + if (size < 0) { + throw new Error(backend_util_exports.getSparseReshapeNegativeOutputDimErrorMessage(d, size)); + } + product *= size; + outputShape.push(size); + } + } + if (unknownIndex !== -1) { + if (product <= 0) { + throw new Error(backend_util_exports.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage()); + } + const missing = Math.trunc(denseSize / product); + if (product * missing !== denseSize) { + throw new Error(backend_util_exports.getSparseReshapeInputOutputMultipleErrorMessage(inputShape, outputShape)); + } + outputShape[unknownIndex] = missing; + } + const outputSize = util_exports.sizeFromShape(outputShape); + if (outputSize !== denseSize) { + throw new Error(backend_util_exports.getSparseReshapeInputOutputMismatchErrorMessage(inputShape, outputShape)); + } + const inputRank = inputShape.length; + const inputStrides = []; + if (inputRank > 0) { + inputStrides[inputRank - 1] = 1; + for (let d = inputRank - 2; d >= 0; --d) { + inputStrides[d] = inputStrides[d + 1] * inputShape[d + 1]; + } + } + const outputStrides = []; + if (outputRank > 0) { + outputStrides[outputRank - 1] = 1; + for (let d = outputRank - 2; d >= 0; --d) { + outputStrides[d] = outputStrides[d + 1] * outputShape[d + 1]; + } + } + const newIndices = util_exports.getArrayFromDType(inputDType, nnz * outputRank); + for (let i = 0; i < nnz; ++i) { + let id = 0; + for (let j = 0; j < inputRank; ++j) { + id += inputIndices[i * inputRank + j] * inputStrides[j]; + } + for (let j = 0; j < outputRank; ++j) { + newIndices[i * outputRank + j] = Math.trunc(id / outputStrides[j]); + id %= outputStrides[j]; + } + } + return [newIndices, [nnz, outputRank], outputShape]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseSegmentReduction_impl.js + init_define_BUILD_VERSION(); + function sparseSegmentReductionImpl(input2, inputShape, inputDType, indices, segmentIds, isMean = false, defaultValue = 0) { + const numIndices = indices.length; + const inputFlat = [inputShape[0], input2.length / inputShape[0]]; + const numCol = inputFlat[1]; + const lastSegmentIdPlusOne = numIndices > 0 ? segmentIds[numIndices - 1] + 1 : 0; + const outputRows = lastSegmentIdPlusOne; + if (outputRows < 0) { + throw new Error(backend_util_exports.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + } + const outputShape = inputShape.slice(); + outputShape[0] = outputRows; + const outputLength = outputShape.reduce((product, value) => product * value, 1); + const output = util_exports.getArrayFromDType(inputDType, outputLength); + if (numIndices === 0) { + if (outputRows > 0) { + output.fill(defaultValue); + } + return [output, outputShape]; + } + if (outputRows <= 0) { + throw new Error(backend_util_exports.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + } + let start = 0, end = 1; + let uninitializedIndex = 0; + let outIndex = segmentIds[start]; + while (true) { + let nextIndex = 0; + if (end < numIndices) { + nextIndex = segmentIds[end]; + if (outIndex === nextIndex) { + ++end; + continue; + } + if (outIndex >= nextIndex) { + throw new Error(backend_util_exports.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage()); + } + } + if (outIndex < 0 || outIndex >= outputRows) { + throw new Error(backend_util_exports.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(outIndex, outputRows)); + } + if (outIndex > uninitializedIndex) { + output.fill(defaultValue, uninitializedIndex * numCol, outIndex * numCol); + } + for (let i = start; i < end; ++i) { + const index = indices[i]; + if (index < 0 || index >= inputFlat[0]) { + throw new Error(backend_util_exports.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(i, indices[i], inputFlat[0])); + } + for (let j = 0; j < numCol; j++) { + output[outIndex * numCol + j] += input2[index * numCol + j]; + } + } + if (isMean) { + for (let j = 0; j < numCol; j++) { + output[outIndex * numCol + j] /= end - start; + } + } + start = end; + ++end; + uninitializedIndex = outIndex + 1; + outIndex = nextIndex; + if (end > numIndices) { + break; + } + } + if (uninitializedIndex < outputRows) { + output.fill(defaultValue, uninitializedIndex * numCol, outputRows * numCol); + } + return [output, outputShape]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sqrt.js + init_define_BUILD_VERSION(); + var sqrtImpl = createSimpleUnaryImpl((xi) => Math.sqrt(xi)); + var sqrt2 = unaryKernelFunc(Sqrt, (xi) => Math.sqrt(xi)); + var sqrtConfig = { + kernelName: Sqrt, + backendName: "cpu", + kernelFunc: sqrt2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SquaredDifference.js + init_define_BUILD_VERSION(); + var squaredDifferenceImpl = createSimpleBinaryKernelImpl((a, b) => { + const diff = a - b; + return diff * diff; + }); + var squaredDifference2 = binaryKernelFunc(SquaredDifference, squaredDifferenceImpl); + var squaredDifferenceConfig = { + kernelName: SquaredDifference, + backendName: "cpu", + kernelFunc: squaredDifference2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StridedSlice_impl.js + init_define_BUILD_VERSION(); + function stridedSliceImpl(outShape, xBuf, strides, begin) { + const outBuf = buffer(outShape, xBuf.dtype); + for (let i = 0; i < outBuf.size; i++) { + const loc = outBuf.indexToLoc(i); + const newLoc = new Array(loc.length); + for (let j = 0; j < newLoc.length; j++) { + newLoc[j] = loc[j] * strides[j] + begin[j]; + } + outBuf.set(xBuf.get(...newLoc), ...loc); + } + return outBuf; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringNGrams_impl.js + init_define_BUILD_VERSION(); + var StringNGramsOp = class { + constructor(separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences) { + this.separator = util_exports.encodeString(separator); + this.nGramWidths = nGramWidths; + this.leftPad = util_exports.encodeString(leftPad); + this.rightPad = util_exports.encodeString(rightPad2); + this.padWidth = padWidth; + this.preserveShort = preserveShortSequences; + } + getPadWidth(nGramWidth) { + return Math.min(this.padWidth < 0 ? nGramWidth - 1 : this.padWidth, nGramWidth - 1); + } + getNumNGrams(length, nGramWidth) { + const padWidth = this.getPadWidth(nGramWidth); + return Math.max(0, length + 2 * padWidth - nGramWidth + 1); + } + createNGrams(data, splitIndex, output, outputStartIndex, numNGrams, nGramWidth) { + for (let nGramIndex = 0; nGramIndex < numNGrams; ++nGramIndex) { + const padWidth = this.getPadWidth(nGramWidth); + const leftPadding = Math.max(0, padWidth - nGramIndex); + const rightPadding = Math.max(0, padWidth - (numNGrams - (nGramIndex + 1))); + const numTokens = nGramWidth - (leftPadding + rightPadding); + const dataStartIndex = splitIndex + (leftPadding > 0 ? 0 : nGramIndex - padWidth); + let nGramSize = 0; + nGramSize += leftPadding * this.leftPad.length; + for (let n = 0; n < numTokens; ++n) { + nGramSize += data[dataStartIndex + n].length; + } + nGramSize += rightPadding * this.rightPad.length; + const numSeparators = leftPadding + rightPadding + numTokens - 1; + nGramSize += numSeparators * this.separator.length; + output[outputStartIndex + nGramIndex] = new Uint8Array(nGramSize); + const nGram = output[outputStartIndex + nGramIndex]; + let nextNGramIndex = 0; + const appendToNGram = (str) => str.forEach((value) => nGram[nextNGramIndex++] = value); + for (let n = 0; n < leftPadding; ++n) { + appendToNGram(this.leftPad); + appendToNGram(this.separator); + } + for (let n = 0; n < numTokens - 1; ++n) { + appendToNGram(data[dataStartIndex + n]); + appendToNGram(this.separator); + } + if (numTokens > 0) { + appendToNGram(data[dataStartIndex + numTokens - 1]); + for (let n = 0; n < rightPadding; ++n) { + appendToNGram(this.separator); + appendToNGram(this.rightPad); + } + } else { + for (let n = 0; n < rightPadding - 1; ++n) { + appendToNGram(this.rightPad); + appendToNGram(this.separator); + } + appendToNGram(this.rightPad); + } + } + } + compute(data, splits) { + const inputDataSize = data.length; + const splitsSize = splits.length; + if (splitsSize > 0) { + let prevSplit = splits[0]; + if (prevSplit !== 0) { + throw new Error(`First split value must be 0, got ${prevSplit}`); + } + for (let i = 1; i < splitsSize; ++i) { + let validSplits = splits[i] >= prevSplit; + validSplits = validSplits && splits[i] <= inputDataSize; + if (!validSplits) { + throw new Error(`Invalid split value ${splits[i]}, must be in [${prevSplit}, ${inputDataSize}]`); + } + prevSplit = splits[i]; + } + if (prevSplit !== inputDataSize) { + throw new Error(`Last split value must be data size. Expected ${inputDataSize}, got ${prevSplit}`); + } + } + const numBatchItems = splitsSize - 1; + const nGramsSplits = util_exports.getArrayFromDType("int32", splitsSize); + if (inputDataSize === 0 || splitsSize === 0) { + const empty = new Array(inputDataSize); + for (let i = 0; i <= numBatchItems; ++i) { + nGramsSplits[i] = 0; + } + return [empty, nGramsSplits]; + } + nGramsSplits[0] = 0; + for (let i = 1; i <= numBatchItems; ++i) { + const length = splits[i] - splits[i - 1]; + let numNGrams = 0; + this.nGramWidths.forEach((nGramWidth) => { + numNGrams += this.getNumNGrams(length, nGramWidth); + }); + if (this.preserveShort && length > 0 && numNGrams === 0) { + numNGrams = 1; + } + nGramsSplits[i] = nGramsSplits[i - 1] + numNGrams; + } + const nGrams = new Array(nGramsSplits[numBatchItems]); + for (let i = 0; i < numBatchItems; ++i) { + const splitIndex = splits[i]; + let outputStartIdx = nGramsSplits[i]; + this.nGramWidths.forEach((nGramWidth) => { + const length = splits[i + 1] - splits[i]; + const numNGrams = this.getNumNGrams(length, nGramWidth); + this.createNGrams(data, splitIndex, nGrams, outputStartIdx, numNGrams, nGramWidth); + outputStartIdx += numNGrams; + }); + if (this.preserveShort && outputStartIdx === nGramsSplits[i]) { + const dataLength = splits[i + 1] - splits[i]; + if (dataLength === 0) { + continue; + } + const nGramWidth = dataLength + 2 * this.padWidth; + const numNGrams = 1; + this.createNGrams(data, splitIndex, nGrams, outputStartIdx, numNGrams, nGramWidth); + } + } + return [nGrams, nGramsSplits]; + } + }; + function stringNGramsImpl(data, dataSplits, separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences) { + return new StringNGramsOp(separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences).compute(data, dataSplits); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringSplit_impl.js + init_define_BUILD_VERSION(); + function split3(str, delimiters, skipEmpty, result) { + if (!str.length) { + return; + } + if (delimiters.length === 0) { + for (let i = 0; i < str.length; ++i) { + result.push(str.subarray(i, i + 1)); + } + return; + } + if (delimiters.length === 1) { + const delimiter = delimiters[0]; + let f = str.indexOf(delimiter); + while (f !== -1) { + const token = str.subarray(0, f); + if (!skipEmpty || token.length !== 0) { + result.push(token); + } + str = str.subarray(f + 1); + f = str.indexOf(delimiter); + } + if (!skipEmpty || str.length !== 0) { + result.push(str); + } + return; + } + let tokenStart = 0; + for (let i = 0; i < str.length + 1; i++) { + if (i === str.length || delimiters.indexOf(str[i]) !== -1) { + const token = str.subarray(tokenStart, i); + if (!skipEmpty || token.length !== 0) { + result.push(token); + } + tokenStart = i + 1; + } + } + } + function stringSplitImpl(input2, delimiter, skipEmpty) { + const batchSize = input2.length; + const tokens = []; + let outputSize = 0; + let maxNumEntries = 0; + const numIndices = new Array(batchSize); + for (let i = 0; i < batchSize; ++i) { + const prevTokensLength = tokens.length; + split3(input2[i], delimiter, skipEmpty, tokens); + const nEntries = tokens.length - prevTokensLength; + numIndices[i] = nEntries; + outputSize += nEntries; + maxNumEntries = Math.max(maxNumEntries, nEntries); + } + const indices = util_exports.getArrayFromDType("int32", outputSize * 2); + const values = new Array(outputSize); + const shape = [batchSize, maxNumEntries]; + let c = 0; + for (let i = 0; i < batchSize; ++i) { + for (let j = 0; j < numIndices[i]; ++j) { + indices[c * 2] = i; + indices[c * 2 + 1] = j; + values[c] = tokens[c]; + ++c; + } + } + return [indices, values, shape]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringToHashBucketFast_impl.js + init_define_BUILD_VERSION(); + function stringToHashBucketFastImpl(input2, numBuckets) { + const output = util_exports.getArrayFromDType("int32", input2.length); + for (let i = 0; i < input2.length; ++i) { + output[i] = util_exports.fingerPrint64(input2[i]).modulo(numBuckets).getLowBitsUnsigned(); + } + return output; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sub.js + init_define_BUILD_VERSION(); + var subImpl = createSimpleBinaryKernelImpl((aValue, bValue) => aValue - bValue); + var subComplexImpl = createComplexBinaryKernelImpl((aReal, aImag, bReal, bImag) => { + return { real: aReal - bReal, imag: aImag - bImag }; + }); + var sub2 = binaryKernelFunc(Sub, subImpl, subComplexImpl); + var subConfig = { + kernelName: Sub, + backendName: "cpu", + kernelFunc: sub2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tile_impl.js + init_define_BUILD_VERSION(); + function tileImpl(xBuf, reps) { + const newShape = new Array(xBuf.rank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = xBuf.shape[i] * reps[i]; + } + const result = buffer(newShape, xBuf.dtype); + for (let i = 0; i < result.values.length; ++i) { + const newLoc = result.indexToLoc(i); + const originalLoc = new Array(xBuf.rank); + for (let j = 0; j < originalLoc.length; j++) { + originalLoc[j] = newLoc[j] % xBuf.shape[j]; + } + const originalIndex = xBuf.locToIndex(originalLoc); + result.values[i] = xBuf.values[originalIndex]; + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/TopK_impl.js + init_define_BUILD_VERSION(); + var comparePair = (a, b) => { + const valueDiff = b.value - a.value; + return valueDiff === 0 ? a.index - b.index : valueDiff; + }; + function select(array2, k, left = 0, right = array2.length - 1) { + while (right > left) { + if (right - left > 600) { + const n = right - left + 1; + const i2 = k - left + 1; + const z = Math.log(n); + const s = 0.5 * Math.exp(2 * z / 3); + const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * Math.sign(i2 - n / 2); + const newLeft = Math.max(left, Math.floor(k - i2 * s / n + sd)); + const newRight = Math.min(right, Math.floor(k + (n - i2) * s / n + sd)); + select(array2, k, newLeft, newRight); + } + const t = array2[k]; + let i = left; + let j = right; + util_exports.swap(array2, left, k); + if (comparePair(array2[right], t) > 0) { + util_exports.swap(array2, left, right); + } + while (i < j) { + util_exports.swap(array2, i, j); + i++; + j--; + while (comparePair(array2[i], t) < 0) { + i = i + 1; + } + while (comparePair(array2[j], t) > 0) { + j = j - 1; + } + } + if (comparePair(array2[left], t) === 0) { + util_exports.swap(array2, left, j); + } else { + j = j + 1; + util_exports.swap(array2, j, right); + } + if (j <= k) { + left = j + 1; + } + if (k <= j) { + right = j - 1; + } + } + } + function topKImpl(x, xShape, xDtype, k, sorted) { + const lastDim = xShape[xShape.length - 1]; + const [batch, size] = [x.length / lastDim, lastDim]; + const allTopKVals = util_exports.getTypedArrayFromDType(xDtype, batch * k); + const allTopKIndices = util_exports.getTypedArrayFromDType("int32", batch * k); + for (let b = 0; b < batch; b++) { + const offset = b * size; + const vals = x.subarray(offset, offset + size); + let valAndInd = new Array(vals.length); + vals.forEach((value, index) => valAndInd[index] = { value, index }); + if (k < valAndInd.length) { + select(valAndInd, k); + valAndInd = valAndInd.slice(0, k); + } + if (sorted) { + valAndInd.sort(comparePair); + } + const outOffset = b * k; + const topKVals = allTopKVals.subarray(outOffset, outOffset + k); + const topKIndices = allTopKIndices.subarray(outOffset, outOffset + k); + for (let i = 0; i < k; i++) { + topKVals[i] = valAndInd[i].value; + topKIndices[i] = valAndInd[i].index; + } + } + const outputShape = xShape.slice(); + outputShape[outputShape.length - 1] = k; + return [ + buffer(outputShape, xDtype, allTopKVals), + buffer(outputShape, "int32", allTopKIndices) + ]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unique_impl.js + init_define_BUILD_VERSION(); + function uniqueImpl(values, axis, shape, dtype) { + const $axis = util_exports.parseAxisParam(axis, shape)[0]; + const newShape = [1, shape[0], 1]; + for (let i = 0; i < $axis; i++) { + newShape[0] *= shape[i]; + } + newShape[1] = shape[$axis]; + for (let i = $axis + 1; i < shape.length; i++) { + newShape[2] *= shape[i]; + } + const uniqueElements = {}; + const indices = new Int32Array(shape[$axis]); + const inputBuffer = new TensorBuffer(newShape, dtype, values); + const uniqueIndices = []; + const is1DTensor = newShape[0] === 1 && newShape[2] === 1; + for (let i = 0; i < shape[$axis]; i++) { + let element; + if (is1DTensor) { + element = values[i].toString(); + } else { + const axisValues = []; + for (let m = 0; m < newShape[0]; m++) { + for (let n = 0; n < newShape[2]; n++) { + axisValues.push(inputBuffer.get(m, i, n)); + } + } + element = axisValues.join(","); + } + if (uniqueElements[element] !== void 0) { + indices[i] = uniqueElements[element]; + } else { + const uniqueIndex = Object.keys(uniqueElements).length; + uniqueElements[element] = uniqueIndex; + indices[i] = uniqueIndex; + uniqueIndices.push(i); + } + } + const outputTmpShape = newShape.slice(); + outputTmpShape[1] = Object.keys(uniqueElements).length; + const outputBuffer = new TensorBuffer(outputTmpShape, dtype); + uniqueIndices.forEach((uniqueElementIndex, i) => { + for (let m = 0; m < newShape[0]; m++) { + for (let n = 0; n < newShape[2]; n++) { + outputBuffer.set(inputBuffer.get(m, uniqueElementIndex, n), m, i, n); + } + } + }); + const outputShape = shape.slice(); + outputShape[$axis] = outputTmpShape[1]; + return { + outputValues: outputBuffer.values, + outputShape, + indices + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/base.js + registerBackend("cpu", () => new MathBackendCPU(), 1); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/register_all_kernels.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/_FusedMatMul.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fused_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Elu.js + init_define_BUILD_VERSION(); + var elu3 = unaryKernelFunc(Elu, (xi) => xi >= 0 ? xi : Math.exp(xi) - 1); + var eluConfig = { + kernelName: Elu, + backendName: "cpu", + kernelFunc: elu3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LeakyRelu.js + init_define_BUILD_VERSION(); + function leakyRelu2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { alpha } = attrs; + assertNotComplex([x], "leakyRelu"); + const xSize = util_exports.sizeFromShape(x.shape); + const xVals = backend2.data.get(x.dataId).values; + const outVals = util_exports.getTypedArrayFromDType("float32", xSize); + for (let i = 0; i < xVals.length; i++) { + outVals[i] = xVals[i] < 0 ? alpha * xVals[i] : xVals[i]; + } + return backend2.makeTensorInfo(x.shape, "float32", outVals); + } + var leakyReluConfig = { + kernelName: LeakyRelu, + backendName: "cpu", + kernelFunc: leakyRelu2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prelu.js + init_define_BUILD_VERSION(); + var preluImpl = createSimpleBinaryKernelImpl((xValue, aValue) => xValue < 0 ? aValue * xValue : xValue); + function prelu2(args) { + const { inputs, backend: backend2 } = args; + const { x, alpha } = inputs; + assertNotComplex([x, alpha], "prelu"); + const aVals = backend2.data.get(x.dataId).values; + const bVals = backend2.data.get(alpha.dataId).values; + const [resultData, resultShape] = preluImpl(x.shape, alpha.shape, aVals, bVals, "float32"); + return backend2.makeTensorInfo(resultShape, "float32", resultData); + } + var preluConfig = { + kernelName: Prelu, + backendName: "cpu", + kernelFunc: prelu2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Relu.js + init_define_BUILD_VERSION(); + var relu2 = unaryKernelFunc(Relu, (xi) => Math.max(0, xi)); + var reluConfig = { + kernelName: Relu, + backendName: "cpu", + kernelFunc: relu2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Relu6.js + init_define_BUILD_VERSION(); + var relu62 = unaryKernelFunc(Relu6, (xi) => Math.min(Math.max(0, xi), 6)); + var relu6Config = { + kernelName: Relu6, + backendName: "cpu", + kernelFunc: relu62 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fused_utils.js + function applyActivation2(backend2, x, activation, preluActivationWeights, leakyreluAlpha) { + if (activation === "linear") { + return identity({ inputs: { x }, backend: backend2 }); + } else if (activation === "relu") { + return relu2({ inputs: { x }, backend: backend2 }); + } else if (activation === "elu") { + return elu3({ inputs: { x }, backend: backend2 }); + } else if (activation === "relu6") { + return relu62({ inputs: { x }, backend: backend2 }); + } else if (activation === "prelu") { + return prelu2({ inputs: { x, alpha: preluActivationWeights }, backend: backend2 }); + } else if (activation === "leakyrelu") { + return leakyRelu2({ inputs: { x }, backend: backend2, attrs: { alpha: leakyreluAlpha } }); + } else if (activation === "sigmoid") { + return sigmoid2({ inputs: { x }, backend: backend2 }); + } + throw new Error(`Activation ${activation} has not been implemented for the CPU backend.`); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchMatMul.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reshape.js + init_define_BUILD_VERSION(); + function reshape2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { shape } = attrs; + const xSize = util_exports.sizeFromShape(x.shape); + const $shape = util_exports.inferFromImplicitShape(shape, xSize); + const $xSize = util_exports.sizeFromShape($shape); + util_exports.assert(xSize === $xSize, () => `The new shape (${$shape}) has ${$xSize} elements and the old shape (${x.shape}) has ${xSize} elements. The new shape and old shape must have the same number of elements.`); + backend2.incRef(x.dataId); + const xData = backend2.data.get(x.dataId); + if (xData.complexTensorInfos != null) { + const real4 = xData.complexTensorInfos.real; + const imag4 = xData.complexTensorInfos.imag; + real4.shape = $shape; + imag4.shape = $shape; + } + return { dataId: x.dataId, shape: $shape, dtype: x.dtype }; + } + var reshapeConfig = { + kernelName: Reshape, + backendName: "cpu", + kernelFunc: reshape2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchMatMul.js + function batchMatMul(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b } = inputs; + const { transposeA, transposeB } = attrs; + assertNotComplex([a, b], "matMul"); + const aRank = a.shape.length; + const bRank = b.shape.length; + const innerShapeA = transposeA ? a.shape[aRank - 2] : a.shape[aRank - 1]; + const innerShapeB = transposeB ? b.shape[bRank - 1] : b.shape[bRank - 2]; + const outerShapeA = transposeA ? a.shape[aRank - 1] : a.shape[aRank - 2]; + const outerShapeB = transposeB ? b.shape[bRank - 2] : b.shape[bRank - 1]; + const outerDimsA = a.shape.slice(0, -2); + const outerDimsB = b.shape.slice(0, -2); + const batchDimA = util_exports.sizeFromShape(outerDimsA); + const batchDimB = util_exports.sizeFromShape(outerDimsB); + const outShapeOuterDims = broadcast_util_exports.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2)); + const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]); + util_exports.assert(innerShapeA === innerShapeB, () => `Error in matMul: inner shapes (${innerShapeA}) and (${innerShapeB}) of Tensors with shapes ${a.shape} and ${b.shape} and transposeA=${transposeA} and transposeB=${transposeB} must match.`); + const a3dShape = transposeA ? [batchDimA, innerShapeA, outerShapeA] : [batchDimA, outerShapeA, innerShapeA]; + const b3dShape = transposeB ? [batchDimB, outerShapeB, innerShapeB] : [batchDimB, innerShapeB, outerShapeB]; + const a3d = reshape2({ inputs: { x: a }, backend: backend2, attrs: { shape: a3dShape } }); + const b3d = reshape2({ inputs: { x: b }, backend: backend2, attrs: { shape: b3dShape } }); + const sharedDim = transposeA ? a3d.shape[1] : a3d.shape[2]; + const leftDim = transposeA ? a3d.shape[2] : a3d.shape[1]; + const rightDim = transposeB ? b3d.shape[1] : b3d.shape[2]; + const batchDim = Math.max(batchDimA, batchDimB); + const a3dValues = backend2.data.get(a3d.dataId).values; + const b3dValues = backend2.data.get(b3d.dataId).values; + const a3dStrides = util_exports.computeStrides(a3d.shape); + const b3dStrides = util_exports.computeStrides(b3d.shape); + const [aBatch, aOuterStep, aInnerStep] = transposeA ? [a3dStrides[0], 1, a3dStrides[1]] : [a3dStrides[0], a3dStrides[1], 1]; + const [bInnerStep, bOuterStep, bBatch] = transposeB ? [1, b3dStrides[1], b3dStrides[0]] : [b3dStrides[1], 1, b3dStrides[0]]; + const size = leftDim * rightDim; + const result = buffer([batchDim, leftDim, rightDim], a3d.dtype); + const resVals = result.values; + const blockSize = backend2.blockSize; + for (let bi = 0; bi < batchDim; bi++) { + for (let i0 = 0; i0 < leftDim; i0 += blockSize) { + for (let j0 = 0; j0 < rightDim; j0 += blockSize) { + for (let k02 = 0; k02 < sharedDim; k02 += blockSize) { + const iBlock = Math.min(i0 + blockSize, leftDim); + const jBlock = Math.min(j0 + blockSize, rightDim); + const kBlock = Math.min(k02 + blockSize, sharedDim); + for (let i = i0; i < iBlock; i++) { + for (let j = j0; j < jBlock; j++) { + let sum6 = 0; + for (let k = k02; k < kBlock; k++) { + const batchOffsetA = Math.min(bi, batchDimA - 1) * aBatch; + const batchOffsetB = Math.min(bi, batchDimB - 1) * bBatch; + const aVal = a3dValues[batchOffsetA + i * aOuterStep + k * aInnerStep]; + const bVal = b3dValues[k * bInnerStep + j * bOuterStep + batchOffsetB]; + sum6 += aVal * bVal; + } + resVals[bi * size + (i * rightDim + j)] += sum6; + } + } + } + } + } + } + backend2.disposeIntermediateTensorInfo(a3d); + backend2.disposeIntermediateTensorInfo(b3d); + return backend2.makeTensorInfo(outShape, result.dtype, result.values); + } + var batchMatMulConfig = { + kernelName: BatchMatMul, + backendName: "cpu", + kernelFunc: batchMatMul + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/_FusedMatMul.js + function _fusedMatMul(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b, bias, preluActivationWeights } = inputs; + const { transposeA, transposeB, activation, leakyreluAlpha } = attrs; + let current; + let addRes; + let activationRes; + const intermediates = []; + const matMulRes = batchMatMul({ inputs: { a, b }, attrs: { transposeA, transposeB }, backend: backend2 }); + current = matMulRes; + if (bias) { + addRes = add3({ inputs: { a: current, b: bias }, backend: backend2 }); + intermediates.push(current); + current = addRes; + } + if (activation) { + activationRes = applyActivation2(backend2, current, activation, preluActivationWeights, leakyreluAlpha); + intermediates.push(current); + current = activationRes; + } + for (const i of intermediates) { + backend2.disposeIntermediateTensorInfo(i); + } + return current; + } + var _fusedMatMulConfig = { + kernelName: _FusedMatMul, + backendName: "cpu", + kernelFunc: _fusedMatMul + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Acos.js + init_define_BUILD_VERSION(); + var acos2 = unaryKernelFunc(Acos, (xi) => Math.acos(xi)); + var acosConfig = { + kernelName: Acos, + backendName: "cpu", + kernelFunc: acos2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Acosh.js + init_define_BUILD_VERSION(); + var acosh2 = unaryKernelFunc(Acosh, (xi) => Math.acosh(xi)); + var acoshConfig = { + kernelName: Acosh, + backendName: "cpu", + kernelFunc: acosh2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AddN.js + init_define_BUILD_VERSION(); + function addN(args) { + const { inputs, backend: backend2 } = args; + const tensors = inputs; + assertNotComplex(inputs, "addN"); + const vals = tensors.map((t) => backend2.data.get(t.dataId).values); + const outBuf = buffer(tensors[0].shape, tensors[0].dtype); + const outVals = outBuf.values; + for (let i = 0; i < tensors.length; i++) { + const currVals = vals[i]; + for (let j = 0; j < outVals.length; j++) { + outVals[j] += currVals[j]; + } + } + return backend2.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values); + } + var addNConfig = { + kernelName: AddN, + backendName: "cpu", + kernelFunc: addN + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/All.js + init_define_BUILD_VERSION(); + function all2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + assertNotComplex(x, "all"); + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + if (permutedAxes != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("all", axes, $x.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes($x.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const vals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(outShape), $x.dtype); + const aVals = backend2.data.get($x.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let all5 = aVals[offset]; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + all5 = all5 && value; + } + vals[i] = all5; + } + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo($x); + } + const result = backend2.makeTensorInfo(outShape, $x.dtype, vals); + if (keepDims) { + const expandedShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + const reshapedResult = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: expandedShape } }); + backend2.disposeIntermediateTensorInfo(result); + return reshapedResult; + } + return result; + } + var allConfig = { + kernelName: All, + backendName: "cpu", + kernelFunc: all2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Any.js + init_define_BUILD_VERSION(); + function any2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + assertNotComplex(x, "any"); + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + if (permutedAxes != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("any", axes, $x.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes($x.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const vals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(outShape), $x.dtype); + const aVals = backend2.data.get($x.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let anyVal = aVals[offset]; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + anyVal = anyVal || value; + } + vals[i] = anyVal; + } + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo($x); + } + const result = backend2.makeTensorInfo(outShape, $x.dtype, vals); + if (keepDims) { + const expandedShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + const reshapedResult = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: expandedShape } }); + backend2.disposeIntermediateTensorInfo(result); + return reshapedResult; + } + return result; + } + var anyConfig = { + kernelName: Any, + backendName: "cpu", + kernelFunc: any2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ArgMax.js + init_define_BUILD_VERSION(); + function argMax2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis } = attrs; + assertNotComplex(x, "argMax"); + let axes = util_exports.parseAxisParam(axis, x.shape); + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + const intermediateTensorInfos = []; + if (permutedAxes != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + intermediateTensorInfos.push($x); + axes = backend_util_exports.getInnerMostAxes(axes.length, $x.shape.length); + } + axes = [axes[0]]; + backend_util_exports.assertAxesAreInnerMostDims("argMax", axes, $x.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes($x.shape, axes); + const outSize = util_exports.sizeFromShape(outShape); + const vals = util_exports.makeZerosTypedArray(outSize, "int32"); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const aVals = backend2.data.get($x.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let max6 = aVals[offset]; + let maxIndex = 0; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + if (value > max6) { + max6 = value; + maxIndex = j; + } + } + vals[i] = maxIndex; + } + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return backend2.makeTensorInfo(outShape, "int32", vals); + } + var argMaxConfig = { + kernelName: ArgMax, + backendName: "cpu", + kernelFunc: argMax2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ArgMin.js + init_define_BUILD_VERSION(); + function argMin2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis } = attrs; + assertNotComplex(x, "argMin"); + let axes = util_exports.parseAxisParam(axis, x.shape); + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + const intermediateTensorInfos = []; + if (permutedAxes != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + intermediateTensorInfos.push($x); + axes = backend_util_exports.getInnerMostAxes(axes.length, $x.shape.length); + } + axes = [axes[0]]; + backend_util_exports.assertAxesAreInnerMostDims("argMin", axes, $x.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes($x.shape, axes); + const outSize = util_exports.sizeFromShape(outShape); + const vals = util_exports.makeZerosTypedArray(outSize, "int32"); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const aVals = backend2.data.get($x.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let min6 = aVals[offset]; + let minIndex = 0; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + if (value < min6) { + min6 = value; + minIndex = j; + } + } + vals[i] = minIndex; + } + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return backend2.makeTensorInfo(outShape, "int32", vals); + } + var argMinConfig = { + kernelName: ArgMin, + backendName: "cpu", + kernelFunc: argMin2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Asin.js + init_define_BUILD_VERSION(); + var asin2 = unaryKernelFunc(Asin, (xi) => Math.asin(xi)); + var asinConfig = { + kernelName: Asin, + backendName: "cpu", + kernelFunc: asin2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Asinh.js + init_define_BUILD_VERSION(); + var asinh2 = unaryKernelFunc(Asinh, (xi) => Math.asinh(xi)); + var asinhConfig = { + kernelName: Asinh, + backendName: "cpu", + kernelFunc: asinh2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atan.js + init_define_BUILD_VERSION(); + var atan3 = unaryKernelFunc(Atan, (xi) => Math.atan(xi)); + var atanConfig = { + kernelName: Atan, + backendName: "cpu", + kernelFunc: atan3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atan2.js + init_define_BUILD_VERSION(); + var atan2Impl = createSimpleBinaryKernelImpl((aValue, bValue) => Math.atan2(aValue, bValue)); + var atan22 = binaryKernelFunc(Atan2, atan2Impl); + var atan2Config = { + kernelName: Atan2, + backendName: "cpu", + kernelFunc: atan22 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atanh.js + init_define_BUILD_VERSION(); + var atanh2 = unaryKernelFunc(Atanh, (xi) => Math.atanh(xi)); + var atanhConfig = { + kernelName: Atanh, + backendName: "cpu", + kernelFunc: atanh2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/pool_utils.js + init_define_BUILD_VERSION(); + function pool2(xValues, xShape, dtype, strides, convInfo, poolType) { + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const initialValue = poolType === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY; + const output = buffer(convInfo.outShape, dtype); + const outputVals = output.values; + const outputBatchStrides = convInfo.outShape[1] * convInfo.outShape[2] * convInfo.outShape[3]; + const outputRowStrides = convInfo.outShape[2] * convInfo.outShape[3]; + const outputColStrides = convInfo.outShape[3]; + for (let b = 0; b < convInfo.batchSize; ++b) { + const outputBatchOffset = b * outputBatchStrides; + const inputBatchOffset = b * strides[0]; + for (let d = 0; d < convInfo.inChannels; ++d) { + for (let yR = 0; yR < convInfo.outHeight; ++yR) { + const xRCorner = yR * strideHeight - padTop; + const xRMin = Math.max(0, xRCorner); + const xRMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRCorner); + const outputRowOffset = outputBatchOffset + yR * outputRowStrides; + for (let yC = 0; yC < convInfo.outWidth; ++yC) { + const xCCorner = yC * strideWidth - padLeft; + const xCMin = Math.max(0, xCCorner); + const xCMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xCCorner); + let minMaxValue = initialValue; + let avgValue = 0; + let count2 = 0; + for (let xR = xRMin; xR < xRMax; xR += dilationHeight) { + const xROffset = inputBatchOffset + xR * strides[1]; + for (let xC = xCMin; xC < xCMax; xC += dilationWidth) { + const xCOffset = xROffset + xC * strides[2]; + const pixel = xValues[xCOffset + d]; + if (poolType === "max" && pixel > minMaxValue) { + minMaxValue = pixel; + } else if (poolType === "avg") { + avgValue += pixel; + count2++; + } + } + if (isNaN(minMaxValue)) { + break; + } + } + const outputOffset = outputRowOffset + yC * outputColStrides + d; + outputVals[outputOffset] = poolType === "avg" ? avgValue / count2 : minMaxValue; + } + } + } + } + return output; + } + function maxPoolPositions(xValues, xShape, dtype, convInfo, flattenPositions = false, includeBatchInIndex = false) { + const maxPositions = buffer(convInfo.outShape, "int32"); + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const xBuf = buffer(xShape, dtype, xValues); + for (let b = 0; b < convInfo.batchSize; ++b) { + for (let d = 0; d < convInfo.inChannels; ++d) { + for (let yR = 0; yR < convInfo.outHeight; ++yR) { + const xRCorner = yR * strideHeight - padTop; + let xRMin = xRCorner; + while (xRMin < 0) { + xRMin += dilationHeight; + } + const xRMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRCorner); + for (let yC = 0; yC < convInfo.outWidth; ++yC) { + const xCCorner = yC * strideWidth - padLeft; + let xCMin = xCCorner; + while (xCMin < 0) { + xCMin += dilationWidth; + } + const xCMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xCCorner); + let maxValue = Number.NEGATIVE_INFINITY; + let maxPosition = -1; + for (let xR = xRMin; xR < xRMax; xR += dilationHeight) { + const wR = xR - xRCorner; + for (let xC = xCMin; xC < xCMax; xC += dilationWidth) { + const wC = xC - xCCorner; + const pixel = xBuf.get(b, xR, xC, d); + if (pixel > maxValue) { + maxValue = pixel; + if (flattenPositions) { + maxPosition = includeBatchInIndex ? ((b * convInfo.inHeight + xR) * convInfo.inWidth + xC) * convInfo.inChannels + d : (xR * convInfo.inWidth + xC) * convInfo.inChannels + d; + } else { + maxPosition = wR * effectiveFilterWidth + wC; + } + } + } + } + maxPositions.set(maxPosition, b, yR, yC, d); + } + } + } + } + return maxPositions; + } + function pool3d2(xValues, xShape, dtype, strides, convInfo, poolType) { + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = convInfo.padInfo.front; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const initialValue = poolType === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY; + const output = buffer(convInfo.outShape, dtype); + const outputVals = output.values; + const outputBatchStrides = convInfo.outShape[1] * convInfo.outShape[2] * convInfo.outShape[3] * convInfo.outShape[4]; + const outputDepthStrides = convInfo.outShape[2] * convInfo.outShape[3] * convInfo.outShape[4]; + const outputRowStrides = convInfo.outShape[3] * convInfo.outShape[4]; + const outputColStrides = convInfo.outShape[4]; + for (let batch = 0; batch < convInfo.batchSize; ++batch) { + const outputBatchOffset = batch * outputBatchStrides; + const inputBatchOffset = batch * strides[0]; + for (let channel = 0; channel < convInfo.inChannels; ++channel) { + for (let yDepth = 0; yDepth < convInfo.outDepth; ++yDepth) { + const xDepthCorner = yDepth * strideDepth - padFront; + let xDepthMin = xDepthCorner; + while (xDepthMin < 0) { + xDepthMin += dilationDepth; + } + const xDepthMax = Math.min(convInfo.inDepth, effectiveFilterDepth + xDepthCorner); + const outputDepthOffset = outputBatchOffset + yDepth * outputDepthStrides; + for (let yRow = 0; yRow < convInfo.outHeight; ++yRow) { + const xRowCorner = yRow * strideHeight - padTop; + let xRowMin = xRowCorner; + while (xRowMin < 0) { + xRowMin += dilationHeight; + } + const xRowMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRowCorner); + const outputRowOffset = outputDepthOffset + yRow * outputRowStrides; + for (let yCol = 0; yCol < convInfo.outWidth; ++yCol) { + const xColCorner = yCol * strideWidth - padLeft; + let xColMin = xColCorner; + while (xColMin < 0) { + xColMin += dilationWidth; + } + const xColMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xColCorner); + const outputColOffset = outputRowOffset + yCol * outputColStrides; + let minMaxValue = initialValue; + let avgValue = 0; + let count2 = 0; + for (let xDepth = xDepthMin; xDepth < xDepthMax; xDepth += dilationDepth) { + const xDepthOffset = inputBatchOffset + xDepth * strides[1]; + for (let xRow = xRowMin; xRow < xRowMax; xRow += dilationHeight) { + const xRowOffset = xDepthOffset + xRow * strides[2]; + for (let xCol = xColMin; xCol < xColMax; xCol += dilationWidth) { + const xColOffset = xRowOffset + xCol * strides[3]; + const pixel = xValues[xColOffset + channel]; + if (poolType === "max" && pixel > minMaxValue) { + minMaxValue = pixel; + } else if (poolType === "avg") { + avgValue += pixel; + count2++; + } + if (isNaN(minMaxValue)) { + break; + } + } + if (isNaN(minMaxValue)) { + break; + } + } + if (isNaN(minMaxValue)) { + break; + } + } + const outputOffset = outputColOffset + channel; + outputVals[outputOffset] = poolType === "avg" ? avgValue / count2 : minMaxValue; + } + } + } + } + } + return output; + } + function maxPool3dPositions(xBuf, convInfo) { + const maxPositions = buffer(convInfo.outShape, "int32"); + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = convInfo.padInfo.front; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + for (let batch = 0; batch < convInfo.batchSize; ++batch) { + for (let channel = 0; channel < convInfo.inChannels; ++channel) { + for (let yDepth = 0; yDepth < convInfo.outDepth; ++yDepth) { + const xDepthCorner = yDepth * strideDepth - padFront; + let xDepthMin = xDepthCorner; + while (xDepthMin < 0) { + xDepthMin += dilationDepth; + } + const xDepthMax = Math.min(convInfo.inDepth, effectiveFilterDepth + xDepthCorner); + for (let yRow = 0; yRow < convInfo.outHeight; ++yRow) { + const xRowCorner = yRow * strideHeight - padTop; + let xRowMin = xRowCorner; + while (xRowMin < 0) { + xRowMin += dilationHeight; + } + const xRowMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRowCorner); + for (let yCol = 0; yCol < convInfo.outWidth; ++yCol) { + const xColCorner = yCol * strideWidth - padLeft; + let xColMin = xColCorner; + while (xColMin < 0) { + xColMin += dilationWidth; + } + const xColMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xColCorner); + let maxValue = Number.NEGATIVE_INFINITY; + let maxPosition = -1; + for (let xDepth = xDepthMin; xDepth < xDepthMax; xDepth += dilationDepth) { + const wDepth = xDepth - xDepthCorner; + for (let xRow = xRowMin; xRow < xRowMax; xRow += dilationHeight) { + const wRow = xRow - xRowCorner; + for (let xCol = xColMin; xCol < xColMax; xCol += dilationWidth) { + const wCol = xCol - xColCorner; + const pixel = xBuf.get(batch, xDepth, xRow, xCol, channel); + if (pixel >= maxValue) { + maxValue = pixel; + maxPosition = wDepth * effectiveFilterHeight * effectiveFilterWidth + wRow * effectiveFilterHeight + wCol; + } + } + } + } + maxPositions.set(maxPosition, batch, yDepth, yRow, yCol, channel); + } + } + } + } + } + return maxPositions; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool.js + function avgPool2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + assertNotComplex(x, "avgPool"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = 1; + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + let res; + if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 && util_exports.arraysEqual(convInfo.inShape, convInfo.outShape)) { + res = identity({ inputs: { x }, backend: backend2 }); + } else { + const xValues = backend2.data.get(x.dataId).values; + const strides2 = util_exports.computeStrides(x.shape); + const buffer2 = pool2(xValues, x.shape, x.dtype, strides2, convInfo, "avg"); + res = backend2.makeTensorInfo(convInfo.outShape, x.dtype, buffer2.values); + } + return res; + } + var avgPoolConfig = { + kernelName: AvgPool, + backendName: "cpu", + kernelFunc: avgPool2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool3D.js + init_define_BUILD_VERSION(); + function avgPool3D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { filterSize, strides, pad: pad3, dimRoundingMode, dataFormat } = attrs; + assertNotComplex(x, "avgPool3d"); + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode, dataFormat); + const xValues = backend2.data.get(x.dataId).values; + const outBuf = pool3d2(xValues, x.shape, x.dtype, util_exports.computeStrides(x.shape), convInfo, "avg"); + return backend2.makeTensorInfo(outBuf.shape, "float32", outBuf.values); + } + var avgPool3DConfig = { + kernelName: AvgPool3D, + backendName: "cpu", + kernelFunc: avgPool3D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool3DGrad.js + init_define_BUILD_VERSION(); + function avgPool3DGrad(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + assertNotComplex([dy, input2], "avgPool3DGrad"); + const convInfo = backend_util_exports.computePool3DInfo(input2.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const filterDepth = convInfo.filterDepth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const dx = buffer(input2.shape, "float32"); + const avgMultiplier = 1 / (filterDepth * filterHeight * filterWidth); + const dyBuf = backend2.bufferSync(dy); + for (let batch = 0; batch < convInfo.batchSize; ++batch) { + for (let channel = 0; channel < convInfo.inChannels; ++channel) { + for (let dxDepth = 0; dxDepth < convInfo.inDepth; ++dxDepth) { + for (let dxRow = 0; dxRow < convInfo.inHeight; ++dxRow) { + for (let dxCol = 0; dxCol < convInfo.inWidth; ++dxCol) { + const dyDepthCorner = dxDepth - padFront; + const dyRowCorner = dxRow - padTop; + const dyColCorner = dxCol - padLeft; + let dotProd = 0; + for (let wDepth = 0; wDepth < effectiveFilterDepth; wDepth += dilationDepth) { + const dyDepth = (dyDepthCorner + wDepth) / strideDepth; + if (dyDepth < 0 || dyDepth >= convInfo.outDepth || Math.floor(dyDepth) !== dyDepth) { + continue; + } + for (let wRow = 0; wRow < effectiveFilterHeight; wRow += dilationHeight) { + const dyRow = (dyRowCorner + wRow) / strideHeight; + if (dyRow < 0 || dyRow >= convInfo.outHeight || Math.floor(dyRow) !== dyRow) { + continue; + } + for (let wCol = 0; wCol < effectiveFilterWidth; wCol += dilationWidth) { + const dyCol = (dyColCorner + wCol) / strideWidth; + if (dyCol < 0 || dyCol >= convInfo.outWidth || Math.floor(dyCol) !== dyCol) { + continue; + } + const pixel = dyBuf.get(batch, dyDepth, dyRow, dyCol, channel); + dotProd += pixel; + } + } + } + dx.set(dotProd * avgMultiplier, batch, dxDepth, dxRow, dxCol, channel); + } + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var avgPool3DGradConfig2 = { + kernelName: AvgPool3DGrad, + backendName: "cpu", + kernelFunc: avgPool3DGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPoolGrad.js + init_define_BUILD_VERSION(); + function avgPoolGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const x = input2; + assertNotComplex([dy, input2], "avgPoolGrad"); + const { filterSize, strides, pad: pad3 } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3); + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const dx = buffer(x.shape, "float32"); + const avgMultiplier = 1 / (filterHeight * filterWidth); + const dyData = backend2.data.get(dy.dataId).values; + const dyBuf = buffer(dy.shape, "float32", dyData); + for (let b = 0; b < convInfo.batchSize; ++b) { + for (let d = 0; d < convInfo.inChannels; ++d) { + for (let dxR = 0; dxR < convInfo.inHeight; ++dxR) { + for (let dxC = 0; dxC < convInfo.inWidth; ++dxC) { + const dyRCorner = dxR - padTop; + const dyCCorner = dxC - padLeft; + let dotProd = 0; + for (let wR = 0; wR < effectiveFilterHeight; wR += dilationHeight) { + const dyR = (dyRCorner + wR) / strideHeight; + if (dyR < 0 || dyR >= convInfo.outHeight || Math.floor(dyR) !== dyR) { + continue; + } + for (let wC = 0; wC < effectiveFilterWidth; wC += dilationWidth) { + const dyC = (dyCCorner + wC) / strideWidth; + if (dyC < 0 || dyC >= convInfo.outWidth || Math.floor(dyC) !== dyC) { + continue; + } + const pixel = dyBuf.get(b, dyR, dyC, d); + dotProd += pixel; + } + } + dx.set(dotProd * avgMultiplier, b, dxR, dxC, d); + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var avgPoolGradConfig2 = { + kernelName: AvgPoolGrad, + backendName: "cpu", + kernelFunc: avgPoolGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchNorm.js + init_define_BUILD_VERSION(); + function batchNorm2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, scale: scale2, offset, mean: mean4, variance } = inputs; + util_exports.assert(mean4.shape.length === variance.shape.length, () => "Batch normalization gradient requires mean and variance to have equal ranks."); + util_exports.assert(offset == null || mean4.shape.length === offset.shape.length, () => "Batch normalization gradient requires mean and offset to have equal ranks."); + util_exports.assert(scale2 == null || mean4.shape.length === scale2.shape.length, () => "Batch normalization gradient requires mean and scale to have equal ranks."); + assertNotComplex([x, mean4, variance, scale2, offset], "batchNorm"); + let { varianceEpsilon } = attrs; + if (varianceEpsilon == null) { + varianceEpsilon = 1e-3; + } + const xVals = backend2.data.get(x.dataId).values; + const mVals = backend2.data.get(mean4.dataId).values; + const varVals = backend2.data.get(variance.dataId).values; + const sVals = scale2 ? backend2.data.get(scale2.dataId).values : new Float32Array([1]); + const offVals = offset ? backend2.data.get(offset.dataId).values : new Float32Array([0]); + const outVals = new Float32Array(xVals.length); + const offValsLength = offVals.length; + const sValsLength = sVals.length; + const varValsLength = varVals.length; + const mValsLength = mVals.length; + let offi = 0; + let mi = 0; + let si = 0; + let vi = 0; + for (let i = 0; i < xVals.length; ++i) { + outVals[i] = offVals[offi++] + (xVals[i] - mVals[mi++]) * sVals[si++] / Math.sqrt(varVals[vi++] + varianceEpsilon); + if (offi >= offValsLength) { + offi = 0; + } + if (mi >= mValsLength) { + mi = 0; + } + if (si >= sValsLength) { + si = 0; + } + if (vi >= varValsLength) { + vi = 0; + } + } + return backend2.makeTensorInfo(x.shape, x.dtype, outVals); + } + var batchNormConfig = { + kernelName: FusedBatchNorm, + backendName: "cpu", + kernelFunc: batchNorm2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchToSpaceND.js + init_define_BUILD_VERSION(); + function batchToSpaceND2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, crops } = attrs; + assertNotComplex([x], "batchToSpaceND"); + const prod5 = blockShape.reduce((a, b) => a * b); + const reshaped = backend_util_exports.getReshaped(x.shape, blockShape, prod5); + const permuted = backend_util_exports.getPermuted(reshaped.length, blockShape.length); + const reshapedPermuted = backend_util_exports.getReshapedPermuted(x.shape, blockShape, prod5); + const sliceBeginCoords = backend_util_exports.getSliceBeginCoords(crops, blockShape.length); + const sliceSize = backend_util_exports.getSliceSize(reshapedPermuted, crops, blockShape.length); + const xReshaped = reshape2({ inputs: { x }, backend: backend2, attrs: { shape: reshaped } }); + const xTransposed = transpose2({ inputs: { x: xReshaped }, backend: backend2, attrs: { perm: permuted } }); + const xTransposedReshaped = reshape2({ inputs: { x: xTransposed }, backend: backend2, attrs: { shape: reshapedPermuted } }); + const result = slice2({ + inputs: { x: xTransposedReshaped }, + backend: backend2, + attrs: { begin: sliceBeginCoords, size: sliceSize } + }); + backend2.disposeIntermediateTensorInfo(xReshaped); + backend2.disposeIntermediateTensorInfo(xTransposed); + backend2.disposeIntermediateTensorInfo(xTransposedReshaped); + return result; + } + var batchToSpaceNDConfig = { + kernelName: BatchToSpaceND, + backendName: "cpu", + kernelFunc: batchToSpaceND2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Bincount.js + init_define_BUILD_VERSION(); + function bincount2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, weights } = inputs; + const { size } = attrs; + const xVals = backend2.data.get(x.dataId).values; + const weightsVals = backend2.data.get(weights.dataId).values; + const outVals = bincountImpl(xVals, weightsVals, weights.dtype, weights.shape, size); + return backend2.makeTensorInfo([size], weights.dtype, outVals); + } + var bincountConfig = { + kernelName: Bincount, + backendName: "cpu", + kernelFunc: bincount2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BroadcastArgs.js + init_define_BUILD_VERSION(); + function broadcastArgs(args) { + const { inputs, backend: backend2 } = args; + const { s0, s1 } = inputs; + const s0Vals = backend2.data.get(s0.dataId).values; + const s1Vals = backend2.data.get(s1.dataId).values; + const broadcastShape = backend_util_exports.assertAndGetBroadcastShape(Array.from(s0Vals), Array.from(s1Vals)); + return backend2.makeTensorInfo([broadcastShape.length], "int32", Int32Array.from(broadcastShape)); + } + var broadcastArgsConfig = { + kernelName: BroadcastArgs, + backendName: "cpu", + kernelFunc: broadcastArgs + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ClipByValue.js + init_define_BUILD_VERSION(); + var clipByValue2 = unaryKernelFunc(ClipByValue, (xi, attrs) => { + const clipAttrs = attrs; + if (xi > clipAttrs.clipValueMax) { + return clipAttrs.clipValueMax; + } + return xi < clipAttrs.clipValueMin ? clipAttrs.clipValueMin : xi; + }); + var clipByValueConfig = { + kernelName: ClipByValue, + backendName: "cpu", + kernelFunc: clipByValue2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ComplexAbs.js + init_define_BUILD_VERSION(); + var complexAbs = (args) => { + const { x } = args.inputs; + const cpuBackend = args.backend; + const resultValues = new Float32Array(util_exports.sizeFromShape(x.shape)); + const complexVals = cpuBackend.data.get(x.dataId); + const real4 = complexVals.complexTensorInfos.real; + const imag4 = complexVals.complexTensorInfos.imag; + const realVals = cpuBackend.data.get(real4.dataId).values; + const imagVals = cpuBackend.data.get(imag4.dataId).values; + for (let i = 0; i < realVals.length; i++) { + const real5 = realVals[i]; + const imag5 = imagVals[i]; + resultValues[i] = Math.hypot(real5, imag5); + } + return cpuBackend.makeOutput(resultValues, x.shape, "float32"); + }; + var complexAbsConfig = { + kernelName: ComplexAbs, + backendName: "cpu", + kernelFunc: complexAbs + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Imag.js + init_define_BUILD_VERSION(); + function imag2(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const imag4 = backend2.data.get(input2.dataId).complexTensorInfos.imag; + const imagVal = backend2.data.get(imag4.dataId).values; + return backend2.makeTensorInfo(imag4.shape, imag4.dtype, imagVal); + } + var imagConfig = { + kernelName: Imag, + backendName: "cpu", + kernelFunc: imag2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat.js + function concat2(args) { + const { inputs, backend: backend2, attrs } = args; + const { axis } = attrs; + const $axis = util_exports.parseAxisParam(axis, inputs[0].shape)[0]; + let outShape = backend_util_exports.computeOutShape(inputs.map((t) => t.shape), $axis); + if (util_exports.sizeFromShape(outShape) === 0) { + return backend2.makeTensorInfo(outShape, inputs[0].dtype, []); + } + const $inputs = inputs.filter((t) => util_exports.sizeFromShape(t.shape) > 0); + if ($inputs.length === 1) { + return identity({ inputs: { x: $inputs[0] }, backend: backend2 }); + } + const shapes = $inputs.map((t) => t.shape); + backend_util_exports.assertParamsConsistent(shapes, $axis); + if ($inputs[0].dtype === "complex64") { + const reals = $inputs.map((t) => real2({ inputs: { input: t }, backend: backend2 })); + const imags = $inputs.map((t) => imag2({ inputs: { input: t }, backend: backend2 })); + const realConcated = concat2({ inputs: reals, backend: backend2, attrs: { axis: $axis } }); + const imagConcated = concat2({ inputs: imags, backend: backend2, attrs: { axis: $axis } }); + const result = complex2({ inputs: { real: realConcated, imag: imagConcated }, backend: backend2 }); + reals.forEach((r) => backend2.disposeIntermediateTensorInfo(r)); + imags.forEach((i) => backend2.disposeIntermediateTensorInfo(i)); + backend2.disposeIntermediateTensorInfo(realConcated); + backend2.disposeIntermediateTensorInfo(imagConcated); + return result; + } + const inputs2D = $inputs.map((t) => { + const innerSize = util_exports.sizeFromShape(t.shape.slice($axis)); + const shape = [-1, innerSize]; + return reshape2({ inputs: { x: t }, backend: backend2, attrs: { shape } }); + }); + const inputsValShapes = inputs2D.map((t) => { + return { vals: backend2.data.get(t.dataId).values, shape: t.shape }; + }); + outShape = backend_util_exports.computeOutShape(inputs2D.map((t) => t.shape), 1); + const simplyConcat = inputs2D[0].shape[0] === 1; + const outVals = concatImpl(inputsValShapes, outShape, inputs[0].dtype, simplyConcat); + const finalOutShape = backend_util_exports.computeOutShape($inputs.map((t) => t.shape), $axis); + const outInfo = backend2.makeTensorInfo(finalOutShape, inputs[0].dtype, outVals); + inputs2D.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return outInfo; + } + var concatConfig = { + kernelName: Concat, + backendName: "cpu", + kernelFunc: concat2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2D.js + init_define_BUILD_VERSION(); + function conv2D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dataFormat, dilations, dimRoundingMode } = attrs; + assertNotComplex([x, filter], "conv2d"); + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode, false, $dataFormat); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const padLeft = convInfo.padInfo.left; + const padTop = convInfo.padInfo.top; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const y = new TensorBuffer(convInfo.outShape, x.dtype); + const xStrides = util_exports.computeStrides(x.shape); + const filterStrides = util_exports.computeStrides(filter.shape); + const xBatchStride = xStrides[0]; + const xRowStride = isChannelsLast ? xStrides[1] : xStrides[2]; + const xColStride = isChannelsLast ? xStrides[2] : 1; + const xChannelStride = isChannelsLast ? 1 : xStrides[1]; + const yBatchStride = y.strides[0]; + const yRowStride = isChannelsLast ? y.strides[1] : y.strides[2]; + const yColStride = isChannelsLast ? y.strides[2] : 1; + const yChannelStride = isChannelsLast ? 1 : y.strides[1]; + const xVals = backend2.data.get(x.dataId).values; + const wVals = backend2.data.get(filter.dataId).values; + const yVals = y.values; + for (let b = 0; b < convInfo.batchSize; ++b) { + const xOffset1 = b * xBatchStride; + const yOffset1 = b * yBatchStride; + for (let yR = 0; yR < convInfo.outHeight; ++yR) { + const yOffset2 = yOffset1 + yR * yRowStride; + const xRCorner = yR * convInfo.strideHeight - padTop; + for (let wR = 0; wR < filterHeight; ++wR) { + const xR = xRCorner + wR * dilationHeight; + if (xR < 0 || xR >= convInfo.inHeight) { + continue; + } + const wOffset1 = wR * filterStrides[0]; + const xOffset2 = xOffset1 + xR * xRowStride; + for (let yC = 0; yC < convInfo.outWidth; ++yC) { + const yOffset3 = yOffset2 + yC * yColStride; + const xCCorner = yC * convInfo.strideWidth - padLeft; + for (let wC = 0; wC < filterWidth; ++wC) { + const xC = xCCorner + wC * dilationWidth; + if (xC < 0 || xC >= convInfo.inWidth) { + continue; + } + const wOffset2 = wOffset1 + wC * filterStrides[1]; + const xOffset3 = xOffset2 + xC * xColStride; + let wOffset3 = wOffset2; + for (let d1 = 0; d1 < convInfo.inChannels; ++d1) { + const xVal = xVals[xOffset3 + d1 * xChannelStride]; + for (let d2 = 0; d2 < convInfo.outChannels; ++d2) { + yVals[yOffset3 + d2 * yChannelStride] += xVal * wVals[wOffset3 + d2]; + } + wOffset3 += convInfo.outChannels; + } + } + } + } + } + } + return backend2.makeTensorInfo(y.shape, y.dtype, yVals); + } + var conv2DConfig = { + kernelName: Conv2D, + backendName: "cpu", + kernelFunc: conv2D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2DBackpropFilter.js + init_define_BUILD_VERSION(); + function conv2DBackpropFilter2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, pad: pad3, dataFormat, dimRoundingMode, filterShape } = attrs; + assertNotComplex([x, dy], "conv2dBackpropFilter"); + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filterShape, strides, 1, pad3, dimRoundingMode, false, $dataFormat); + const { strideHeight, strideWidth, filterHeight, filterWidth } = convInfo; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const dW = new TensorBuffer(convInfo.filterShape, "float32"); + const leftPad = convInfo.padInfo.left; + const topPad = convInfo.padInfo.top; + const xVals = backend2.data.get(x.dataId).values; + const dyVals = backend2.data.get(dy.dataId).values; + const xBuf = new TensorBuffer(x.shape, x.dtype, xVals); + const dyBuf = new TensorBuffer(dy.shape, dy.dtype, dyVals); + for (let wR = 0; wR < filterHeight; ++wR) { + const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight)); + const yRMax = Math.min(convInfo.outHeight, (convInfo.inHeight + topPad - wR) / strideHeight); + for (let wC = 0; wC < filterWidth; ++wC) { + const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth)); + const yCMax = Math.min(convInfo.outWidth, (convInfo.inWidth + leftPad - wC) / strideWidth); + for (let d1 = 0; d1 < convInfo.inChannels; ++d1) { + for (let d2 = 0; d2 < convInfo.outChannels; ++d2) { + let dotProd = 0; + for (let b = 0; b < convInfo.batchSize; ++b) { + for (let yR = yRMin; yR < yRMax; ++yR) { + const xR = wR + yR * strideHeight - topPad; + for (let yC = yCMin; yC < yCMax; ++yC) { + const xC = wC + yC * strideWidth - leftPad; + if (isChannelsLast) { + dotProd += xBuf.get(b, xR, xC, d1) * dyBuf.get(b, yR, yC, d2); + } else { + dotProd += xBuf.get(b, d1, xR, xC) * dyBuf.get(b, d2, yR, yC); + } + } + } + } + dW.set(dotProd, wR, wC, d1, d2); + } + } + } + } + return backend2.makeTensorInfo(dW.shape, dW.dtype, dW.values); + } + var conv2DBackpropFilterConfig = { + kernelName: Conv2DBackpropFilter, + backendName: "cpu", + kernelFunc: conv2DBackpropFilter2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2DBackpropInput.js + init_define_BUILD_VERSION(); + function conv2DBackpropInput2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { inputShape, strides, pad: pad3, dataFormat, dimRoundingMode } = attrs; + assertNotComplex([dy, filter], "conv2dBackpropInput"); + const filterStrides = util_exports.computeStrides(filter.shape); + const dyStrides = util_exports.computeStrides(dy.shape); + let $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(inputShape, filter.shape, strides, 1, pad3, dimRoundingMode, false, $dataFormat); + const dx = new TensorBuffer(convInfo.inShape, "float32"); + const dxValues = dx.values; + const dyValues = backend2.data.get(dy.dataId).values; + const fltValues = backend2.data.get(filter.dataId).values; + const [fltS0, fltS1, fltS2] = filterStrides; + const { batchSize, filterHeight, filterWidth, inChannels, inHeight, inWidth, outChannels, outHeight, outWidth, strideHeight, strideWidth } = convInfo; + $dataFormat = convInfo.dataFormat; + const topPad = filterHeight - 1 - convInfo.padInfo.top; + const leftPad = filterWidth - 1 - convInfo.padInfo.left; + const isChannelsLast = $dataFormat === "channelsLast"; + const xBatchStride = dx.strides[0]; + const xRowStride = isChannelsLast ? dx.strides[1] : dx.strides[2]; + const xColStride = isChannelsLast ? dx.strides[2] : 1; + const xChannelStride = isChannelsLast ? 1 : dx.strides[1]; + const yBatchStride = dyStrides[0]; + const yRowStride = isChannelsLast ? dyStrides[1] : dyStrides[2]; + const yColStride = isChannelsLast ? dyStrides[2] : 1; + const yChannelStride = isChannelsLast ? 1 : dyStrides[1]; + for (let b = 0; b < batchSize; ++b) { + for (let d1 = 0; d1 < inChannels; ++d1) { + for (let xR = 0; xR < inHeight; ++xR) { + const xRCorner = xR - topPad; + const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight)); + const yRMax = Math.min(outHeight, (filterHeight + xRCorner) / strideHeight); + for (let xC = 0; xC < inWidth; ++xC) { + const xCCorner = xC - leftPad; + const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth)); + const yCMax = Math.min(outWidth, (filterWidth + xCCorner) / strideWidth); + let dotProd = 0; + for (let yR = xRMin; yR < yRMax; ++yR) { + const wR = yR * strideHeight - xRCorner; + for (let yC = xCMin; yC < yCMax; ++yC) { + const wC = yC * strideWidth - xCCorner; + const dyOffset = yBatchStride * b + yRowStride * yR + yColStride * yC; + const fltOffset = fltS0 * (filterHeight - 1 - wR) + fltS1 * (filterWidth - 1 - wC) + fltS2 * d1; + for (let d2 = 0; d2 < outChannels; ++d2) { + const pixel = dyValues[dyOffset + yChannelStride * d2]; + const weight = fltValues[fltOffset + d2]; + dotProd += pixel * weight; + } + } + } + const dxOffset = xBatchStride * b + xRowStride * xR + xColStride * xC + xChannelStride * d1; + dxValues[dxOffset] = dotProd; + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var conv2DBackpropInputConfig = { + kernelName: Conv2DBackpropInput, + backendName: "cpu", + kernelFunc: conv2DBackpropInput2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3D.js + init_define_BUILD_VERSION(); + function conv3D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dilations } = attrs; + assertNotComplex([x, filter], "conv3d"); + const convInfo = backend_util_exports.computeConv3DInfo(x.shape, filter.shape, strides, dilations, pad3); + const { filterDepth, filterHeight, filterWidth, dilationDepth, dilationHeight, dilationWidth, padInfo } = convInfo; + const padFront = padInfo.front; + const padLeft = padInfo.left; + const padTop = padInfo.top; + const y = new TensorBuffer(convInfo.outShape, x.dtype); + const xVals = backend2.data.get(x.dataId).values; + const wVals = backend2.data.get(filter.dataId).values; + const yVals = y.values; + const xStrides = util_exports.computeStrides(x.shape); + const filterStrides = util_exports.computeStrides(filter.shape); + for (let b = 0; b < convInfo.batchSize; ++b) { + const xOffset1 = b * xStrides[0]; + const yOffset1 = b * y.strides[0]; + for (let yF = 0; yF < convInfo.outDepth; ++yF) { + const yOffset2 = yOffset1 + yF * y.strides[1]; + const xFCorner = yF * convInfo.strideDepth - padFront; + for (let wF = 0; wF < filterDepth; ++wF) { + const xF = xFCorner + wF * dilationDepth; + if (xF < 0 || xF >= convInfo.inDepth) { + continue; + } + const wOffset1 = wF * filterStrides[0]; + const xOffset2 = xOffset1 + xF * xStrides[1]; + for (let yR = 0; yR < convInfo.outHeight; ++yR) { + const yOffset3 = yOffset2 + yR * y.strides[2]; + const xRCorner = yR * convInfo.strideHeight - padTop; + for (let wR = 0; wR < filterHeight; ++wR) { + const xR = xRCorner + wR * dilationHeight; + if (xR < 0 || xR >= convInfo.inHeight) { + continue; + } + const wOffset2 = wOffset1 + wR * filterStrides[1]; + const xOffset3 = xOffset2 + xR * xStrides[2]; + for (let yC = 0; yC < convInfo.outWidth; ++yC) { + const yOffset4 = yOffset3 + yC * convInfo.outChannels; + const xCCorner = yC * convInfo.strideWidth - padLeft; + for (let wC = 0; wC < filterWidth; ++wC) { + const xC = xCCorner + wC * dilationWidth; + if (xC < 0 || xC >= convInfo.inWidth) { + continue; + } + const wOffset3 = wOffset2 + wC * filterStrides[2]; + const xOffset4 = xOffset3 + xC * convInfo.inChannels; + let wOffset4 = wOffset3; + for (let d1 = 0; d1 < convInfo.inChannels; ++d1) { + const xVal = xVals[xOffset4 + d1]; + for (let d2 = 0; d2 < convInfo.outChannels; ++d2) { + yVals[yOffset4 + d2] += xVal * wVals[wOffset4 + d2]; + } + wOffset4 += convInfo.outChannels; + } + } + } + } + } + } + } + } + return backend2.makeTensorInfo(y.shape, y.dtype, y.values); + } + var conv3DConfig = { + kernelName: Conv3D, + backendName: "cpu", + kernelFunc: conv3D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3DBackpropFilterV2.js + init_define_BUILD_VERSION(); + function conv3DBackpropFilterV2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, pad: pad3, filterShape } = attrs; + assertNotComplex([x, dy], "conv3dBackpropFilterV2"); + const xStrides = util_exports.computeStrides(x.shape); + const dyStrides = util_exports.computeStrides(dy.shape); + const convInfo = backend_util_exports.computeConv3DInfo(x.shape, filterShape, strides, 1, pad3); + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const filterDepth = convInfo.filterDepth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const dw = new TensorBuffer(convInfo.filterShape, "float32"); + const dwValues = dw.values; + const [dwS0, dwS1, dwS2, dwS3] = dw.strides; + const dyValues = backend2.data.get(dy.dataId).values; + const [dyS0, dyS1, dyS2, dyS3] = dyStrides; + const xValues = backend2.data.get(x.dataId).values; + const [xS0, xS1, xS2, xS3] = xStrides; + const frontPad = convInfo.padInfo.front; + const leftPad = convInfo.padInfo.left; + const topPad = convInfo.padInfo.top; + for (let wF = 0; wF < filterDepth; ++wF) { + const yFMin = Math.max(0, Math.ceil((frontPad - wF) / strideDepth)); + const yFMax = Math.min(convInfo.outDepth, (convInfo.inDepth + frontPad - wF) / strideDepth); + const wOffset1 = wF * dwS0; + for (let wR = 0; wR < filterHeight; ++wR) { + const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight)); + const yRMax = Math.min(convInfo.outHeight, (convInfo.inHeight + topPad - wR) / strideHeight); + const wOffset2 = wR * dwS1 + wOffset1; + for (let wC = 0; wC < filterWidth; ++wC) { + const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth)); + const yCMax = Math.min(convInfo.outWidth, (convInfo.inWidth + leftPad - wC) / strideWidth); + const wOffset3 = wC * dwS2 + wOffset2; + for (let d1 = 0; d1 < convInfo.inChannels; ++d1) { + const wOffset4 = d1 * dwS3 + wOffset3; + for (let d2 = 0; d2 < convInfo.outChannels; ++d2) { + let dotProd = 0; + for (let b = 0; b < convInfo.batchSize; ++b) { + const xOffset1 = b * xS0; + const yOffset1 = b * dyS0; + for (let yF = yFMin; yF < yFMax; ++yF) { + const xF = wF + yF * strideDepth - frontPad; + const xOffset2 = xF * xS1 + xOffset1; + const yOffset2 = yF * dyS1 + yOffset1; + for (let yR = yRMin; yR < yRMax; ++yR) { + const xR = wR + yR * strideHeight - topPad; + const xOffset3 = xR * xS2 + xOffset2; + const yOffset3 = yR * dyS2 + yOffset2; + for (let yC = yCMin; yC < yCMax; ++yC) { + const xC = wC + yC * strideWidth - leftPad; + const xOffset4 = xC * xS3 + xOffset3; + const yOffset4 = yC * dyS3 + yOffset3; + dotProd += xValues[xOffset4 + d1] * dyValues[yOffset4 + d2]; + } + } + } + } + dwValues[wOffset4 + d2] = dotProd; + } + } + } + } + } + return backend2.makeTensorInfo(dw.shape, dw.dtype, dw.values); + } + var conv3DBackpropFilterV2Config = { + kernelName: Conv3DBackpropFilterV2, + backendName: "cpu", + kernelFunc: conv3DBackpropFilterV2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3DBackpropInputV2.js + init_define_BUILD_VERSION(); + function conv3DBackpropInputV2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { pad: pad3, strides, inputShape } = attrs; + assertNotComplex([dy], "conv3dBackpropInputV2"); + const dyStrides = util_exports.computeStrides(dy.shape); + const filterStrides = util_exports.computeStrides(filter.shape); + const convInfo = backend_util_exports.computeConv3DInfo(inputShape, filter.shape, strides, 1, pad3); + const dx = new TensorBuffer(convInfo.inShape, "float32"); + const dxValues = dx.values; + const [dxS0, dxS1, dxS2, dxS3] = dx.strides; + const dyValues = backend2.data.get(dy.dataId).values; + const [dyS0, dyS1, dyS2, dyS3] = dyStrides; + const fltValues = backend2.data.get(filter.dataId).values; + const [fltS0, fltS1, fltS2, fltS3] = filterStrides; + const { batchSize, filterDepth, filterHeight, filterWidth, inChannels, inDepth, inHeight, inWidth, outChannels, outDepth, outHeight, outWidth, strideDepth, strideHeight, strideWidth } = convInfo; + const frontPad = filterDepth - 1 - convInfo.padInfo.front; + const topPad = filterHeight - 1 - convInfo.padInfo.top; + const leftPad = filterWidth - 1 - convInfo.padInfo.left; + for (let b = 0; b < batchSize; ++b) { + for (let d1 = 0; d1 < inChannels; ++d1) { + for (let xF = 0; xF < inDepth; ++xF) { + const xFCorner = xF - frontPad; + const xFMin = Math.max(0, Math.ceil(xFCorner / strideDepth)); + const yFMax = Math.min(outDepth, (filterDepth + xFCorner) / strideDepth); + for (let xR = 0; xR < inHeight; ++xR) { + const xRCorner = xR - topPad; + const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight)); + const yRMax = Math.min(outHeight, (filterHeight + xRCorner) / strideHeight); + for (let xC = 0; xC < inWidth; ++xC) { + const xCCorner = xC - leftPad; + const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth)); + const yCMax = Math.min(outWidth, (filterWidth + xCCorner) / strideWidth); + let dotProd = 0; + for (let yF = xFMin; yF < yFMax; ++yF) { + const wF = yF * strideDepth - xFCorner; + for (let yR = xRMin; yR < yRMax; ++yR) { + const wR = yR * strideHeight - xRCorner; + for (let yC = xCMin; yC < yCMax; ++yC) { + const wC = yC * strideWidth - xCCorner; + const dyOffset = dyS0 * b + dyS1 * yF + dyS2 * yR + dyS3 * yC; + const fltOffset = fltS0 * (filterDepth - 1 - wF) + fltS1 * (filterHeight - 1 - wR) + fltS2 * (filterWidth - 1 - wC) + fltS3 * d1; + for (let d2 = 0; d2 < outChannels; ++d2) { + const pixel = dyValues[dyOffset + d2]; + const weight = fltValues[fltOffset + d2]; + dotProd += pixel * weight; + } + } + } + } + dxValues[dxS0 * b + dxS1 * xF + dxS2 * xR + dxS3 * xC + d1] = dotProd; + } + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var conv3DBackpropInputV2Config = { + kernelName: Conv3DBackpropInputV2, + backendName: "cpu", + kernelFunc: conv3DBackpropInputV2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cos.js + init_define_BUILD_VERSION(); + var cos2 = unaryKernelFunc(Cos, (xi) => Math.cos(xi)); + var cosConfig = { + kernelName: Cos, + backendName: "cpu", + kernelFunc: cos2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cosh.js + init_define_BUILD_VERSION(); + var cosh2 = unaryKernelFunc(Cosh, (xi) => Math.cosh(xi)); + var coshConfig = { + kernelName: Cosh, + backendName: "cpu", + kernelFunc: cosh2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/CropAndResize.js + init_define_BUILD_VERSION(); + function cropAndResize2(args) { + const { inputs, backend: backend2, attrs } = args; + const { image: image2, boxes, boxInd } = inputs; + const { cropSize, method, extrapolationValue } = attrs; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const numBoxes = boxes.shape[0]; + const [cropHeight, cropWidth] = cropSize; + const output = buffer([numBoxes, cropHeight, cropWidth, numChannels], "float32"); + const boxVals = backend2.data.get(boxes.dataId).values; + const boxIndVals = backend2.data.get(boxInd.dataId).values; + const imageVals = backend2.data.get(image2.dataId).values; + const inStride = util_exports.computeStrides(image2.shape); + const outStride = util_exports.computeStrides(output.shape); + for (let b = 0; b < numBoxes; b++) { + const startInd = b * 4; + const y1 = boxVals[startInd]; + const x1 = boxVals[startInd + 1]; + const y2 = boxVals[startInd + 2]; + const x2 = boxVals[startInd + 3]; + const bInd = boxIndVals[b]; + if (bInd >= batch) { + continue; + } + const heightScale = cropHeight > 1 ? (y2 - y1) * (imageHeight - 1) / (cropHeight - 1) : 0; + const widthScale = cropWidth > 1 ? (x2 - x1) * (imageWidth - 1) / (cropWidth - 1) : 0; + for (let y = 0; y < cropHeight; y++) { + const yInd = cropHeight > 1 ? y1 * (imageHeight - 1) + y * heightScale : 0.5 * (y1 + y2) * (imageHeight - 1); + if (yInd < 0 || yInd > imageHeight - 1) { + for (let x = 0; x < cropWidth; x++) { + for (let c = 0; c < numChannels; c++) { + const ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0]; + output.values[ind] = extrapolationValue; + } + } + continue; + } + if (method === "bilinear") { + const topInd = Math.floor(yInd); + const bottomInd = Math.ceil(yInd); + const yLerp = yInd - topInd; + for (let x = 0; x < cropWidth; x++) { + const xInd = cropWidth > 1 ? x1 * (imageWidth - 1) + x * widthScale : 0.5 * (x1 + x2) * (imageWidth - 1); + if (xInd < 0 || xInd > imageWidth - 1) { + for (let c = 0; c < numChannels; c++) { + const ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0]; + output.values[ind] = extrapolationValue; + } + continue; + } + const leftInd = Math.floor(xInd); + const rightInd = Math.ceil(xInd); + const xLerp = xInd - leftInd; + for (let c = 0; c < numChannels; c++) { + let ind = c + leftInd * inStride[2] + topInd * inStride[1] + bInd * inStride[0]; + const topLeft = imageVals[ind]; + ind = c + rightInd * inStride[2] + topInd * inStride[1] + bInd * inStride[0]; + const topRight = imageVals[ind]; + ind = c + leftInd * inStride[2] + bottomInd * inStride[1] + bInd * inStride[0]; + const bottomLeft = imageVals[ind]; + ind = c + rightInd * inStride[2] + bottomInd * inStride[1] + bInd * inStride[0]; + const bottomRight = imageVals[ind]; + const top = topLeft + (topRight - topLeft) * xLerp; + const bottom = bottomLeft + (bottomRight - bottomLeft) * xLerp; + ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0]; + output.values[ind] = top + (bottom - top) * yLerp; + } + } + } else { + for (let x = 0; x < cropWidth; ++x) { + const xInd = cropWidth > 1 ? x1 * (imageWidth - 1) + x * widthScale : 0.5 * (x1 + x2) * (imageWidth - 1); + if (xInd < 0 || xInd > imageWidth - 1) { + for (let c = 0; c < numChannels; c++) { + const ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0]; + output.values[ind] = extrapolationValue; + } + continue; + } + const closestX = Math.round(xInd); + const closestY = Math.round(yInd); + for (let c = 0; c < numChannels; c++) { + const inInd = c + closestX * inStride[2] + closestY * inStride[1] + bInd * inStride[0]; + const outInd = c + x * outStride[2] + y * outStride[1] + b * outStride[0]; + output.values[outInd] = imageVals[inInd]; + } + } + } + } + } + return backend2.makeTensorInfo(output.shape, output.dtype, output.values); + } + var cropAndResizeConfig = { + kernelName: CropAndResize, + backendName: "cpu", + kernelFunc: cropAndResize2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cumprod.js + init_define_BUILD_VERSION(); + function cumprod2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + assertNotComplex(x, "cumprod"); + const permutation = backend_util_exports.getAxesPermutation([axis], x.shape.length); + let $x = x; + if (permutation != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutation } }); + } + const permutedAxis = backend_util_exports.getInnerMostAxes(1, x.shape.length)[0]; + if (permutedAxis !== $x.shape.length - 1) { + throw new Error(`backend.cumprod in CPU expects an inner-most axis=${$x.shape.length - 1} but got axis=${permutedAxis}`); + } + const resultDtype = upcastType($x.dtype, "int32"); + const vals = util_exports.makeOnesTypedArray(util_exports.sizeFromShape($x.shape), resultDtype); + const aVals = backend2.data.get($x.dataId).values; + const finalDim = $x.shape[$x.shape.length - 1]; + const indexAdjuster = reverse5 ? (i, j) => i + finalDim - j - 1 : (i, j) => i + j; + for (let i = 0; i < aVals.length; i += finalDim) { + for (let j = 0; j < finalDim; j++) { + const idx = indexAdjuster(i, j); + if (j === 0) { + vals[idx] = exclusive ? 1 : aVals[idx]; + } else { + const prevIdx = indexAdjuster(i, j - 1); + vals[idx] = exclusive ? aVals[prevIdx] * vals[prevIdx] : aVals[idx] * vals[prevIdx]; + } + } + } + const result = backend2.makeTensorInfo($x.shape, resultDtype, vals); + if (permutation != null) { + const reversePermutation = backend_util_exports.getUndoAxesPermutation(permutation); + const reverseTransposedResult = transpose2({ inputs: { x: result }, backend: backend2, attrs: { perm: reversePermutation } }); + backend2.disposeIntermediateTensorInfo(result); + backend2.disposeIntermediateTensorInfo($x); + return reverseTransposedResult; + } + return result; + } + var cumprodConfig = { + kernelName: Cumprod, + backendName: "cpu", + kernelFunc: cumprod2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cumsum.js + init_define_BUILD_VERSION(); + function cumsum2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + assertNotComplex(x, "cumsum"); + const permutation = backend_util_exports.getAxesPermutation([axis], x.shape.length); + let $x = x; + if (permutation != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutation } }); + } + const permutedAxis = backend_util_exports.getInnerMostAxes(1, x.shape.length)[0]; + if (permutedAxis !== $x.shape.length - 1) { + throw new Error(`backend.cumsum in CPU expects an inner-most axis=${$x.shape.length - 1} but got axis=${permutedAxis}`); + } + const resultDtype = upcastType($x.dtype, "int32"); + const vals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape($x.shape), resultDtype); + const aVals = backend2.data.get($x.dataId).values; + const finalDim = $x.shape[$x.shape.length - 1]; + const indexAdjuster = reverse5 ? (i, j) => i + finalDim - j - 1 : (i, j) => i + j; + for (let i = 0; i < aVals.length; i += finalDim) { + for (let j = 0; j < finalDim; j++) { + const idx = indexAdjuster(i, j); + if (j === 0) { + vals[idx] = exclusive ? 0 : aVals[idx]; + } else { + const prevIdx = indexAdjuster(i, j - 1); + vals[idx] = exclusive ? aVals[prevIdx] + vals[prevIdx] : aVals[idx] + vals[prevIdx]; + } + } + } + const result = backend2.makeTensorInfo($x.shape, resultDtype, vals); + if (permutation != null) { + const reversePermutation = backend_util_exports.getUndoAxesPermutation(permutation); + const reverseTransposedResult = transpose2({ inputs: { x: result }, backend: backend2, attrs: { perm: reversePermutation } }); + backend2.disposeIntermediateTensorInfo(result); + backend2.disposeIntermediateTensorInfo($x); + return reverseTransposedResult; + } + return result; + } + var cumsumConfig = { + kernelName: Cumsum, + backendName: "cpu", + kernelFunc: cumsum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DenseBincount.js + init_define_BUILD_VERSION(); + function denseBincount(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, weights } = inputs; + const { size, binaryOutput } = attrs; + if (x.shape.length === 1) { + const xVals = backend2.data.get(x.dataId).values; + const weightsVals = backend2.data.get(weights.dataId).values; + const outVals = bincountImpl(xVals, weightsVals, weights.dtype, weights.shape, size); + return backend2.makeTensorInfo([size], weights.dtype, outVals); + } else if (x.shape.length === 2) { + const xBuf = backend2.bufferSync(x); + const weightsBuf = backend2.bufferSync(weights); + const outBuf = bincountReduceImpl(xBuf, weightsBuf, size, binaryOutput); + return backend2.makeTensorInfo(outBuf.shape, weights.dtype, outBuf.values); + } + throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${x.shape.length}.`); + } + var denseBincountConfig = { + kernelName: DenseBincount, + backendName: "cpu", + kernelFunc: denseBincount + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthToSpace.js + init_define_BUILD_VERSION(); + function depthToSpace2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockSize, dataFormat } = attrs; + util_exports.assert(dataFormat === "NHWC", () => `Only NHWC dataFormat supported on CPU for depthToSpace. Got ${dataFormat}`); + const batchSize = x.shape[0]; + const inputHeight = x.shape[1]; + const inputWidth = x.shape[2]; + const inputDepth = x.shape[3]; + const outputHeight = inputHeight * blockSize; + const outputWidth = inputWidth * blockSize; + const outputDepth = inputDepth / (blockSize * blockSize); + const xValues = backend2.data.get(x.dataId).values; + const result = new Float32Array(batchSize * outputHeight * outputWidth * outputDepth); + let outputIdx = 0; + for (let b = 0; b < batchSize; ++b) { + for (let h = 0; h < outputHeight; ++h) { + const inH = Math.floor(h / blockSize); + const offsetH = h % blockSize; + for (let w = 0; w < outputWidth; ++w) { + const inW = Math.floor(w / blockSize); + const offsetW = w % blockSize; + const offsetD = (offsetH * blockSize + offsetW) * outputDepth; + for (let d = 0; d < outputDepth; ++d) { + const inD = d + offsetD; + const inputIdx = inD + inputDepth * (inW + inputWidth * (inH + inputHeight * b)); + result[outputIdx++] = xValues[inputIdx]; + } + } + } + } + return backend2.makeTensorInfo([batchSize, outputHeight, outputWidth, outputDepth], x.dtype, result); + } + var depthToSpaceConfig = { + kernelName: DepthToSpace, + backendName: "cpu", + kernelFunc: depthToSpace2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNative.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNative(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dilations, dimRoundingMode } = attrs; + assertNotComplex([x, filter], "depthwiseConv2DNative"); + const xStrides = util_exports.computeStrides(x.shape); + const filterStrides = util_exports.computeStrides(filter.shape); + let $dilations = dilations; + if ($dilations == null) { + $dilations = [1, 1]; + } + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, $dilations), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${strides} and dilations '${$dilations}'`); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad3, dimRoundingMode, true); + const { filterHeight, filterWidth, dilationHeight, dilationWidth, padInfo } = convInfo; + const padLeft = padInfo.left; + const padTop = padInfo.top; + const chMul = convInfo.outChannels / convInfo.inChannels; + const y = new TensorBuffer(convInfo.outShape, x.dtype); + const xVals = backend2.data.get(x.dataId).values; + const wVals = backend2.data.get(filter.dataId).values; + const yVals = y.values; + for (let b = 0; b < convInfo.batchSize; ++b) { + const xOffset1 = b * xStrides[0]; + const yOffset1 = b * y.strides[0]; + for (let yR = 0; yR < convInfo.outHeight; ++yR) { + const yOffset2 = yOffset1 + yR * y.strides[1]; + const xRCorner = yR * convInfo.strideHeight - padTop; + for (let wR = 0; wR < filterHeight; ++wR) { + const xR = xRCorner + wR * dilationHeight; + if (xR < 0 || xR >= convInfo.inHeight) { + continue; + } + const wOffset1 = wR * filterStrides[0]; + const xOffset2 = xOffset1 + xR * xStrides[1]; + for (let yC = 0; yC < convInfo.outWidth; ++yC) { + const yOffset3 = yOffset2 + yC * y.strides[2]; + const xCCorner = yC * convInfo.strideWidth - padLeft; + for (let wC = 0; wC < filterWidth; ++wC) { + const xC = xCCorner + wC * dilationWidth; + if (xC < 0 || xC >= convInfo.inWidth) { + continue; + } + const wOffset2 = wOffset1 + wC * filterStrides[1]; + const xOffset3 = xOffset2 + xC * convInfo.inChannels; + let yOffset4 = yOffset3; + let wOffset3 = wOffset2; + for (let d1 = 0; d1 < convInfo.inChannels; ++d1) { + const xVal = xVals[xOffset3 + d1]; + for (let q = 0; q < chMul; ++q) { + yVals[yOffset4 + q] += xVal * wVals[wOffset3 + q]; + } + yOffset4 += chMul; + wOffset3 += chMul; + } + } + } + } + } + } + return backend2.makeTensorInfo(y.shape, y.dtype, y.values); + } + var depthwiseConv2dNativeConfig = { + kernelName: DepthwiseConv2dNative, + backendName: "cpu", + kernelFunc: depthwiseConv2dNative + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNativeBackpropFilter2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, dilations, pad: pad3, dimRoundingMode, filterShape } = attrs; + assertNotComplex([x, dy], "depthwiseConv2dNativeBackpropFilter"); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filterShape, strides, dilations, pad3, dimRoundingMode, true); + const { strideHeight, strideWidth, filterHeight, filterWidth } = convInfo; + const dW = new TensorBuffer(convInfo.filterShape, "float32"); + const leftPad = convInfo.padInfo.left; + const topPad = convInfo.padInfo.top; + const chMul = convInfo.outChannels / convInfo.inChannels; + const xVals = backend2.data.get(x.dataId).values; + const xBuf = new TensorBuffer(x.shape, x.dtype, xVals); + const dyVals = backend2.data.get(dy.dataId).values; + const dyBuf = new TensorBuffer(dy.shape, dy.dtype, dyVals); + for (let wR = 0; wR < filterHeight; ++wR) { + const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight)); + const yRMax = Math.min(convInfo.outHeight, (convInfo.inHeight + topPad - wR) / strideHeight); + for (let wC = 0; wC < filterWidth; ++wC) { + const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth)); + const yCMax = Math.min(convInfo.outWidth, (convInfo.inWidth + leftPad - wC) / strideWidth); + for (let d2 = 0; d2 < convInfo.outChannels; ++d2) { + const d1 = Math.trunc(d2 / chMul); + const dm = d2 % chMul; + let dotProd = 0; + for (let b = 0; b < convInfo.batchSize; ++b) { + for (let yR = yRMin; yR < yRMax; ++yR) { + const xR = wR + yR * strideHeight - topPad; + for (let yC = yCMin; yC < yCMax; ++yC) { + const xC = wC + yC * strideWidth - leftPad; + dotProd += xBuf.get(b, xR, xC, d1) * dyBuf.get(b, yR, yC, d2); + } + } + } + dW.set(dotProd, wR, wC, d1, dm); + } + } + } + return backend2.makeTensorInfo(dW.shape, dW.dtype, dW.values); + } + var depthwiseConv2dNativeBackpropFilterConfig = { + kernelName: DepthwiseConv2dNativeBackpropFilter, + backendName: "cpu", + kernelFunc: depthwiseConv2dNativeBackpropFilter2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNativeBackpropInput.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNativeBackpropInput2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { strides, dilations, pad: pad3, dimRoundingMode, inputShape } = attrs; + assertNotComplex([dy, filter], "depthwiseConv2DNativeBackpropInput"); + const dyStrides = util_exports.computeStrides(dy.shape); + const filterStrides = util_exports.computeStrides(filter.shape); + const convInfo = backend_util_exports.computeConv2DInfo(inputShape, filter.shape, strides, dilations, pad3, dimRoundingMode, true); + const dx = new TensorBuffer(convInfo.inShape, "float32"); + const dxValues = dx.values; + const [dxS0, dxS1, dxS2] = dx.strides; + const dyValues = backend2.data.get(dy.dataId).values; + const [dyS0, dyS1, dyS2] = dyStrides; + const fltValues = backend2.data.get(filter.dataId).values; + const [fltS0, fltS1, fltS2] = filterStrides; + const { batchSize, filterHeight, filterWidth, inChannels, inHeight, inWidth, outChannels, outHeight, outWidth, strideHeight, strideWidth } = convInfo; + const topPad = filterHeight - 1 - convInfo.padInfo.top; + const leftPad = filterWidth - 1 - convInfo.padInfo.left; + const chMul = outChannels / inChannels; + for (let b = 0; b < batchSize; ++b) { + for (let d1 = 0; d1 < inChannels; ++d1) { + for (let xR = 0; xR < inHeight; ++xR) { + const xRCorner = xR - topPad; + const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight)); + const yRMax = Math.min(outHeight, (filterHeight + xRCorner) / strideHeight); + for (let xC = 0; xC < inWidth; ++xC) { + const xCCorner = xC - leftPad; + const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth)); + const yCMax = Math.min(outWidth, (filterWidth + xCCorner) / strideWidth); + let dotProd = 0; + for (let yR = xRMin; yR < yRMax; ++yR) { + const wR = yR * strideHeight - xRCorner; + for (let yC = xCMin; yC < yCMax; ++yC) { + const wC = yC * strideWidth - xCCorner; + const dyOffset = dyS0 * b + dyS1 * yR + dyS2 * yC; + const fltOffset = fltS0 * (filterHeight - 1 - wR) + fltS1 * (filterWidth - 1 - wC) + fltS2 * d1; + for (let dm = 0; dm < chMul; ++dm) { + const d2 = d1 * chMul + dm; + const pixel = dyValues[dyOffset + d2]; + const weight = fltValues[fltOffset + dm]; + dotProd += pixel * weight; + } + } + } + dxValues[dxS0 * b + dxS1 * xR + dxS2 * xC + d1] = dotProd; + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var depthwiseConv2dNativeBackpropInputConfig = { + kernelName: DepthwiseConv2dNativeBackpropInput, + backendName: "cpu", + kernelFunc: depthwiseConv2dNativeBackpropInput2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Diag.js + init_define_BUILD_VERSION(); + function diag(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + const xSize = util_exports.sizeFromShape(x.shape); + const xVals = backend2.data.get(x.dataId).values; + const outBuf = buffer([xSize, xSize], x.dtype); + const vals = outBuf.values; + for (let i = 0; i < xVals.length; i++) { + vals[i * xSize + i] = xVals[i]; + } + const outShape = [...x.shape, ...x.shape]; + return backend2.makeTensorInfo(outShape, outBuf.dtype, outBuf.values); + } + var diagConfig = { + kernelName: Diag, + backendName: "cpu", + kernelFunc: diag + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2D.js + init_define_BUILD_VERSION(); + var dilation2DConfig = { + kernelName: Dilation2D, + backendName: "cpu", + kernelFunc: ({ inputs, backend: backend2, attrs }) => { + const { x, filter } = inputs; + const { strides, pad: pad3, dilations } = attrs; + const cpuBackend = backend2; + const xVals = cpuBackend.data.get(x.dataId).values; + const xRank = x.shape.length; + const filterVals = cpuBackend.data.get(filter.dataId).values; + const filterRank = filter.shape.length; + const { batchSize, inHeight, inWidth, inChannels, outHeight, outWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth, outShape } = backend_util_exports.computeDilation2DInfo(x.shape, filter.shape, strides, pad3, "NHWC", dilations); + const outSize = util_exports.sizeFromShape(outShape); + const outRank = outShape.length; + const outputVals = util_exports.getArrayFromDType(x.dtype, outSize); + for (let b = 0; b < batchSize; ++b) { + for (let hOut = 0; hOut < outHeight; ++hOut) { + const hBeg = hOut * strideHeight - padInfo.top; + for (let wOut = 0; wOut < outWidth; ++wOut) { + const wBeg = wOut * strideWidth - padInfo.left; + for (let d = 0; d < inChannels; ++d) { + let curVal = Number.MIN_SAFE_INTEGER; + for (let h = 0; h < filterHeight; ++h) { + const hIn = hBeg + h * dilationHeight; + if (hIn >= 0 && hIn < inHeight) { + for (let w = 0; w < filterWidth; ++w) { + const wIn = wBeg + w * dilationWidth; + if (wIn >= 0 && wIn < inWidth) { + const xIndex = util_exports.locToIndex([b, hIn, wIn, d], xRank, util_exports.computeStrides(x.shape)); + const filterIndex = util_exports.locToIndex([h, w, d], filterRank, util_exports.computeStrides(filter.shape)); + const val = xVals[xIndex] + filterVals[filterIndex]; + if (val > curVal) { + curVal = val; + } + } + } + } + } + const outputIndex = util_exports.locToIndex([b, hOut, wOut, d], outRank, util_exports.computeStrides(outShape)); + outputVals[outputIndex] = curVal; + } + } + } + } + const dataId = cpuBackend.write(util_exports.toTypedArray(outputVals, x.dtype), outShape, x.dtype); + return { dataId, shape: outShape, dtype: x.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2DBackpropFilter.js + init_define_BUILD_VERSION(); + var dilation2DBackpropFilterConfig = { + kernelName: Dilation2DBackpropFilter, + backendName: "cpu", + kernelFunc: ({ inputs, backend: backend2, attrs }) => { + const { x, filter, dy } = inputs; + const { strides, pad: pad3, dilations } = attrs; + const cpuBackend = backend2; + const $x = util_exports.toNestedArray(x.shape, cpuBackend.data.get(x.dataId).values); + const $filter = util_exports.toNestedArray(filter.shape, cpuBackend.data.get(filter.dataId).values); + const { batchSize, inHeight, inWidth, inChannels, outHeight, outWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth, outShape } = backend_util_exports.computeDilation2DInfo(x.shape, filter.shape, strides, pad3, "NHWC", dilations); + util_exports.assert(dy.rank === outShape.length, () => `Error in ${Dilation2DBackpropFilter}, dy must have the same rank as output ${outShape.length}, but got ${dy.rank}`); + const $dy = util_exports.toNestedArray(outShape, cpuBackend.data.get(dy.dataId).values); + const gradients = util_exports.makeZerosNestedTypedArray(filter.shape, filter.dtype); + for (let b = 0; b < batchSize; ++b) { + for (let hOut = 0; hOut < outHeight; ++hOut) { + const hBeg = hOut * strideHeight - padInfo.top; + for (let wOut = 0; wOut < outWidth; ++wOut) { + const wBeg = wOut * strideWidth - padInfo.left; + for (let d = 0; d < inChannels; ++d) { + let curVal = Number.MIN_SAFE_INTEGER; + let hMax = 0; + let wMax = 0; + for (let h = 0; h < filterHeight; ++h) { + const hIn = hBeg + h * dilationHeight; + if (hIn >= 0 && hIn < inHeight) { + for (let w = 0; w < filterWidth; ++w) { + const wIn = wBeg + w * dilationWidth; + if (wIn >= 0 && wIn < inWidth) { + const val = $x[b][hIn][wIn][d] + $filter[h][w][d]; + if (val > curVal) { + curVal = val; + hMax = h; + wMax = w; + } + } + } + } + } + gradients[hMax][wMax][d] += $dy[b][hOut][wOut][d]; + } + } + } + } + const dataId = cpuBackend.write(util_exports.toTypedArray(gradients, x.dtype), filter.shape, filter.dtype); + return { dataId, shape: filter.shape, dtype: filter.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2DBackpropInput.js + init_define_BUILD_VERSION(); + var dilation2DBackpropInputConfig = { + kernelName: Dilation2DBackpropInput, + backendName: "cpu", + kernelFunc: ({ inputs, backend: backend2, attrs }) => { + const { x, filter, dy } = inputs; + const { strides, pad: pad3, dilations } = attrs; + const cpuBackend = backend2; + const $x = util_exports.toNestedArray(x.shape, cpuBackend.data.get(x.dataId).values); + const $filter = util_exports.toNestedArray(filter.shape, cpuBackend.data.get(filter.dataId).values); + const { batchSize, inHeight, inWidth, inChannels, outHeight, outWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth, outShape } = backend_util_exports.computeDilation2DInfo(x.shape, filter.shape, strides, pad3, "NHWC", dilations); + util_exports.assert(dy.rank === outShape.length, () => `Error in ${Dilation2DBackpropInput}, dy must have the same rank as output ${outShape.length}, but got ${dy.rank}`); + const $dy = util_exports.toNestedArray(outShape, cpuBackend.data.get(dy.dataId).values); + const gradients = util_exports.makeZerosNestedTypedArray(x.shape, x.dtype); + for (let b = 0; b < batchSize; ++b) { + for (let hOut = 0; hOut < outHeight; ++hOut) { + const hBeg = hOut * strideHeight - padInfo.top; + for (let wOut = 0; wOut < outWidth; ++wOut) { + const wBeg = wOut * strideWidth - padInfo.left; + for (let d = 0; d < inChannels; ++d) { + let curVal = Number.MIN_SAFE_INTEGER; + let hInMax = hBeg < 0 ? 0 : hBeg; + let wInMax = wBeg < 0 ? 0 : wBeg; + for (let h = 0; h < filterHeight; ++h) { + const hIn = hBeg + h * dilationHeight; + if (hIn >= 0 && hIn < inHeight) { + for (let w = 0; w < filterWidth; ++w) { + const wIn = wBeg + w * dilationWidth; + if (wIn >= 0 && wIn < inWidth) { + const val = $x[b][hIn][wIn][d] + $filter[h][w][d]; + if (val > curVal) { + curVal = val; + hInMax = hIn; + wInMax = wIn; + } + } + } + } + } + gradients[b][hInMax][wInMax][d] += $dy[b][hOut][wOut][d]; + } + } + } + } + const dataId = cpuBackend.write(util_exports.toTypedArray(gradients, x.dtype), x.shape, x.dtype); + return { dataId, shape: x.shape, dtype: x.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Einsum.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sum.js + init_define_BUILD_VERSION(); + function sum3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + assertNotComplex(x, "sum"); + let $x; + if (x.dtype === "bool") { + $x = cast3({ inputs: { x }, backend: backend2, attrs: { dtype: "int32" } }); + } else { + $x = identity({ inputs: { x }, backend: backend2 }); + } + const xRank = $x.shape.length; + const axes = util_exports.parseAxisParam(axis, $x.shape); + const permutation = backend_util_exports.getAxesPermutation(axes, xRank); + let reductionAxes = axes; + let permutedX = $x; + if (permutation != null) { + permutedX = transpose2({ inputs: { x: $x }, backend: backend2, attrs: { perm: permutation } }); + reductionAxes = backend_util_exports.getInnerMostAxes(reductionAxes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("sum", reductionAxes, permutedX.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(permutedX.shape, reductionAxes); + const resultDtype = backend_util_exports.upcastType(permutedX.dtype, "int32"); + let result = zeros2(backend2, outShape, resultDtype); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const vals = backend2.data.get(result.dataId).values; + const aVals = backend2.data.get(permutedX.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let sum6 = 0; + for (let j = 0; j < reduceSize; ++j) { + sum6 += aVals[offset + j]; + } + vals[i] = sum6; + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(result.shape, axes); + const oldResult = result; + result = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: newShape } }); + backend2.disposeIntermediateTensorInfo(oldResult); + } + backend2.disposeIntermediateTensorInfo($x); + if (permutation != null) { + backend2.disposeIntermediateTensorInfo(permutedX); + } + return result; + } + var sumConfig = { + kernelName: Sum, + backendName: "cpu", + kernelFunc: sum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Einsum.js + function einsum(args) { + const { inputs, backend: backend2, attrs } = args; + const { equation } = attrs; + const tensors = inputs; + const { allDims, summedDims, idDims } = backend_util_exports.decodeEinsumEquation(equation, tensors.length); + backend_util_exports.checkEinsumDimSizes(allDims.length, idDims, tensors); + const { path, steps } = backend_util_exports.getEinsumComputePath(summedDims, idDims); + const nSteps = steps.length; + let out = null; + let numDimsRemaining = allDims.length; + const tensorsToDispose = []; + for (let i = 0; i < nSteps; ++i) { + for (const idTerm of steps[i]) { + const { permutationIndices: perm, expandDims: dimsToExpand } = backend_util_exports.getEinsumPermutation(numDimsRemaining, idDims[idTerm]); + let x; + if (backend_util_exports.isIdentityPermutation(perm)) { + x = tensors[idTerm]; + } else { + x = transpose2({ inputs: { x: tensors[idTerm] }, backend: backend2, attrs: { perm } }); + tensorsToDispose.push(x); + } + const targetShape = x.shape.slice(); + for (let k = 0; k < dimsToExpand.length; ++k) { + targetShape.splice(dimsToExpand[k], 0, 1); + } + if (!util_exports.arraysEqual(x.shape, targetShape)) { + x = reshape2({ inputs: { x }, backend: backend2, attrs: { shape: targetShape } }); + tensorsToDispose.push(x); + } + if (out === null) { + out = x; + } else { + out = multiply({ inputs: { a: x, b: out }, backend: backend2 }); + tensorsToDispose.push(out); + } + } + if (i < nSteps - 1) { + if (path[i] >= 0) { + out = sum3({ + inputs: { x: out }, + backend: backend2, + attrs: { + axis: path[i] - (allDims.length - numDimsRemaining), + keepDims: false + } + }); + tensorsToDispose.push(out); + } + numDimsRemaining--; + } + } + for (const tensorInfo of tensorsToDispose) { + if (tensorInfo === out) { + continue; + } + backend2.disposeIntermediateTensorInfo(tensorInfo); + } + return out; + } + var einsumConfig = { + kernelName: Einsum, + backendName: "cpu", + kernelFunc: einsum + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/EluGrad.js + init_define_BUILD_VERSION(); + function eluGrad(args) { + const { inputs, backend: backend2 } = args; + const { dy, y } = inputs; + assertNotComplex([dy, y], "eluGrad"); + const resultValues = new Float32Array(util_exports.sizeFromShape(y.shape)); + const values = backend2.data.get(y.dataId).values; + const dyValues = backend2.data.get(dy.dataId).values; + for (let i = 0; i < values.length; ++i) { + const v = values[i]; + if (v >= 1) { + resultValues[i] = dyValues[i]; + } else { + resultValues[i] = dyValues[i] * (v + 1); + } + } + return backend2.makeTensorInfo(y.shape, "float32", resultValues); + } + var eluGradConfig2 = { + kernelName: EluGrad, + backendName: "cpu", + kernelFunc: eluGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Erf.js + init_define_BUILD_VERSION(); + var p = backend_util_exports.ERF_P; + var a1 = backend_util_exports.ERF_A1; + var a2 = backend_util_exports.ERF_A2; + var a3 = backend_util_exports.ERF_A3; + var a4 = backend_util_exports.ERF_A4; + var a5 = backend_util_exports.ERF_A5; + var erf2 = unaryKernelFunc(Erf, (xi) => { + const sign4 = Math.sign(xi); + const v = Math.abs(xi); + const t = 1 / (1 + p * v); + return sign4 * (1 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(-v * v)); + }); + var erfConfig = { + kernelName: Erf, + backendName: "cpu", + kernelFunc: erf2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ExpandDims.js + init_define_BUILD_VERSION(); + function expandDims3(args) { + const { inputs, backend: backend2, attrs } = args; + const { input: input2 } = inputs; + const { dim } = attrs; + const inputRank = input2.shape.length; + const newShape = input2.shape.slice(); + let $dim = dim; + if (dim < 0) { + util_exports.assert(-(inputRank + 1) <= dim, () => `Axis must be in the interval [${-(inputRank + 1)}, ${inputRank}]`); + $dim = inputRank + dim + 1; + } + newShape.splice($dim, 0, 1); + return reshape2({ inputs: { x: input2 }, backend: backend2, attrs: { shape: newShape } }); + } + var expandDimsConfig = { + kernelName: ExpandDims, + backendName: "cpu", + kernelFunc: expandDims3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FFT.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fft_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RealDiv.js + init_define_BUILD_VERSION(); + var realDivImpl = createSimpleBinaryKernelImpl((a, b) => a / b); + var div2 = binaryKernelFunc(RealDiv, realDivImpl); + var realDivConfig = { + kernelName: RealDiv, + backendName: "cpu", + kernelFunc: div2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fft_utils.js + function fftBatch(input2, inverse, cpuBackend) { + const inputShape = input2.shape; + const batch = inputShape[0]; + const innerDim = inputShape[1]; + const inputVals = cpuBackend.data.get(input2.dataId); + const real2D = inputVals.complexTensorInfos.real; + const imag2D = inputVals.complexTensorInfos.imag; + const resultShape = [batch, innerDim]; + const resultSize = util_exports.sizeFromShape(resultShape); + const resultReal = util_exports.getTypedArrayFromDType("float32", resultSize); + const resultImag = util_exports.getTypedArrayFromDType("float32", resultSize); + for (let b = 0; b < batch; b++) { + const r = slice2({ + inputs: { x: real2D }, + backend: cpuBackend, + attrs: { begin: [b, 0], size: [1, innerDim] } + }); + const i = slice2({ + inputs: { x: imag2D }, + backend: cpuBackend, + attrs: { begin: [b, 0], size: [1, innerDim] } + }); + const input3 = complex2({ inputs: { real: r, imag: i }, backend: cpuBackend }); + const { real: real4, imag: imag4 } = fftImpl(input3, inverse, cpuBackend); + const res = backend_util_exports.mergeRealAndImagArrays(real4, imag4); + for (let d = 0; d < innerDim; d++) { + const c = backend_util_exports.getComplexWithIndex(res, d); + resultReal[b * innerDim + d] = c.real; + resultImag[b * innerDim + d] = c.imag; + } + cpuBackend.disposeIntermediateTensorInfo(r); + cpuBackend.disposeIntermediateTensorInfo(i); + cpuBackend.disposeIntermediateTensorInfo(input3); + } + const $realInfo = cpuBackend.makeTensorInfo(resultShape, "float32", resultReal); + const $imagInfo = cpuBackend.makeTensorInfo(resultShape, "float32", resultImag); + const result = complex2({ inputs: { real: $realInfo, imag: $imagInfo }, backend: cpuBackend }); + cpuBackend.disposeIntermediateTensorInfo($realInfo); + cpuBackend.disposeIntermediateTensorInfo($imagInfo); + return result; + } + function fftImpl(input2, inverse, cpuBackend) { + const inputSize = util_exports.sizeFromShape(input2.shape); + const inputVals = cpuBackend.data.get(input2.dataId); + const realVals = cpuBackend.data.get(inputVals.complexTensorInfos.real.dataId).values; + const imagVals = cpuBackend.data.get(inputVals.complexTensorInfos.imag.dataId).values; + if (isExponentOf2(inputSize)) { + const result = fftRadix2(realVals, imagVals, inputSize, inverse, cpuBackend); + const resultShape = [input2.shape[0], input2.shape[1]]; + if (inverse) { + const realInfo = cpuBackend.makeTensorInfo(resultShape, "float32", result.real); + const imagInfo = cpuBackend.makeTensorInfo(resultShape, "float32", result.imag); + const sizeInfo = cpuBackend.makeTensorInfo([], "float32", util_exports.createScalarValue(inputSize, "float32")); + const sizeInfoCopy = identity({ inputs: { x: sizeInfo }, backend: cpuBackend }); + const divRealInfo = realDivConfig.kernelFunc({ inputs: { a: realInfo, b: sizeInfo }, backend: cpuBackend }); + const divImagInfo = realDivConfig.kernelFunc({ inputs: { a: imagInfo, b: sizeInfoCopy }, backend: cpuBackend }); + const divRealVals = cpuBackend.data.get(divRealInfo.dataId).values; + const divImagVals = cpuBackend.data.get(divImagInfo.dataId).values; + cpuBackend.disposeIntermediateTensorInfo(realInfo); + cpuBackend.disposeIntermediateTensorInfo(imagInfo); + cpuBackend.disposeIntermediateTensorInfo(sizeInfo); + cpuBackend.disposeIntermediateTensorInfo(sizeInfoCopy); + cpuBackend.disposeIntermediateTensorInfo(divRealInfo); + cpuBackend.disposeIntermediateTensorInfo(divImagInfo); + return { real: divRealVals, imag: divImagVals }; + } + return result; + } else { + const data = backend_util_exports.mergeRealAndImagArrays(realVals, imagVals); + const rawOutput = fourierTransformByMatmul(data, inputSize, inverse); + return backend_util_exports.splitRealAndImagArrays(rawOutput); + } + } + function isExponentOf2(size) { + return (size & size - 1) === 0; + } + function fftRadix2(realVals, imagVals, size, inverse, cpuBackend) { + if (size === 1) { + return { real: realVals, imag: imagVals }; + } + const data = backend_util_exports.mergeRealAndImagArrays(realVals, imagVals); + const half = size / 2; + const evenComplex = backend_util_exports.complexWithEvenIndex(data); + const evenRealVals = evenComplex.real; + const evenImagVals = evenComplex.imag; + const evenShape = [evenRealVals.length]; + const evenRealInfo = cpuBackend.makeTensorInfo(evenShape, "float32", evenRealVals); + const evenImagInfo = cpuBackend.makeTensorInfo(evenShape, "float32", evenImagVals); + const evenTensorInfo = complex2({ inputs: { real: evenRealInfo, imag: evenImagInfo }, backend: cpuBackend }); + const oddComplex = backend_util_exports.complexWithOddIndex(data); + const oddRealVals = oddComplex.real; + const oddImagVals = oddComplex.imag; + const oddShape = [oddRealVals.length]; + const oddRealInfo = cpuBackend.makeTensorInfo(oddShape, "float32", oddRealVals); + const oddImagInfo = cpuBackend.makeTensorInfo(oddShape, "float32", oddImagVals); + const oddTensorInfo = complex2({ inputs: { real: oddRealInfo, imag: oddImagInfo }, backend: cpuBackend }); + const $evenComplex = fftRadix2(evenRealVals, evenImagVals, half, inverse, cpuBackend); + const $evenRealVals = $evenComplex.real; + const $evenImagVals = $evenComplex.imag; + const $evenShape = [$evenRealVals.length]; + const $evenRealInfo = cpuBackend.makeTensorInfo($evenShape, "float32", $evenRealVals); + const $evenImagInfo = cpuBackend.makeTensorInfo($evenShape, "float32", $evenImagVals); + const $evenTensorInfo = complex2({ + inputs: { real: $evenRealInfo, imag: $evenImagInfo }, + backend: cpuBackend + }); + const $oddComplex = fftRadix2(oddRealVals, oddImagVals, half, inverse, cpuBackend); + const $oddRealVals = $oddComplex.real; + const $oddImagVals = $oddComplex.imag; + const $oddShape = [$oddRealVals.length]; + const $oddRealInfo = cpuBackend.makeTensorInfo($oddShape, "float32", $oddRealVals); + const $oddImagInfo = cpuBackend.makeTensorInfo($oddShape, "float32", $oddImagVals); + const $oddTensorInfo = complex2({ inputs: { real: $oddRealInfo, imag: $oddImagInfo }, backend: cpuBackend }); + const e = backend_util_exports.exponents(size, inverse); + const eShape = [e.real.length]; + const eRealInfo = cpuBackend.makeTensorInfo(eShape, "float32", e.real); + const eImagInfo = cpuBackend.makeTensorInfo(eShape, "float32", e.imag); + const complexInfo = complex2({ inputs: { real: eRealInfo, imag: eImagInfo }, backend: cpuBackend }); + const exponentInfo = multiply({ inputs: { a: complexInfo, b: $oddTensorInfo }, backend: cpuBackend }); + const addPart = add3({ + inputs: { a: $evenTensorInfo, b: exponentInfo }, + backend: cpuBackend + }); + const subPart = sub2({ + inputs: { a: $evenTensorInfo, b: exponentInfo }, + backend: cpuBackend + }); + const addPartReal = real2({ inputs: { input: addPart }, backend: cpuBackend }); + const subPartReal = real2({ inputs: { input: subPart }, backend: cpuBackend }); + const addPartImag = imag2({ inputs: { input: addPart }, backend: cpuBackend }); + const subPartImag = imag2({ inputs: { input: subPart }, backend: cpuBackend }); + const $real = concat2({ + inputs: [addPartReal, subPartReal], + backend: cpuBackend, + attrs: { axis: 0 } + }); + const $imag = concat2({ + inputs: [addPartImag, subPartImag], + backend: cpuBackend, + attrs: { axis: 0 } + }); + const $realVals = cpuBackend.data.get($real.dataId).values; + const $imagVals = cpuBackend.data.get($imag.dataId).values; + cpuBackend.disposeIntermediateTensorInfo(evenRealInfo); + cpuBackend.disposeIntermediateTensorInfo(evenImagInfo); + cpuBackend.disposeIntermediateTensorInfo(evenTensorInfo); + cpuBackend.disposeIntermediateTensorInfo(oddRealInfo); + cpuBackend.disposeIntermediateTensorInfo(oddImagInfo); + cpuBackend.disposeIntermediateTensorInfo(oddTensorInfo); + cpuBackend.disposeIntermediateTensorInfo($evenRealInfo); + cpuBackend.disposeIntermediateTensorInfo($evenImagInfo); + cpuBackend.disposeIntermediateTensorInfo($evenTensorInfo); + cpuBackend.disposeIntermediateTensorInfo($oddRealInfo); + cpuBackend.disposeIntermediateTensorInfo($oddImagInfo); + cpuBackend.disposeIntermediateTensorInfo($oddTensorInfo); + cpuBackend.disposeIntermediateTensorInfo(eRealInfo); + cpuBackend.disposeIntermediateTensorInfo(eImagInfo); + cpuBackend.disposeIntermediateTensorInfo(complexInfo); + cpuBackend.disposeIntermediateTensorInfo(exponentInfo); + cpuBackend.disposeIntermediateTensorInfo(addPart); + cpuBackend.disposeIntermediateTensorInfo(subPart); + cpuBackend.disposeIntermediateTensorInfo(addPartReal); + cpuBackend.disposeIntermediateTensorInfo(addPartImag); + cpuBackend.disposeIntermediateTensorInfo(subPartReal); + cpuBackend.disposeIntermediateTensorInfo(subPartImag); + cpuBackend.disposeIntermediateTensorInfo($real); + cpuBackend.disposeIntermediateTensorInfo($imag); + return { real: $realVals, imag: $imagVals }; + } + function fourierTransformByMatmul(data, size, inverse) { + const ret = new Float32Array(size * 2); + for (let r = 0; r < size; r++) { + let real4 = 0; + let imag4 = 0; + for (let c = 0; c < size; c++) { + const e = backend_util_exports.exponent(r * c, size, inverse); + const term = backend_util_exports.getComplexWithIndex(data, c); + real4 += term.real * e.real - term.imag * e.imag; + imag4 += term.real * e.imag + term.imag * e.real; + } + if (inverse) { + real4 /= size; + imag4 /= size; + } + backend_util_exports.assignToTypedArray(ret, real4, imag4, r); + } + return ret; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FFT.js + function fft2(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const inputSize = util_exports.sizeFromShape(input2.shape); + const innerDimensionSize = input2.shape[input2.shape.length - 1]; + const batch = inputSize / innerDimensionSize; + const input2D = reshape2({ + inputs: { x: input2 }, + backend: backend2, + attrs: { shape: [batch, innerDimensionSize] } + }); + const result = fftBatch(input2D, false, backend2); + const resultReshaped = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: input2.shape } }); + backend2.disposeIntermediateTensorInfo(input2D); + backend2.disposeIntermediateTensorInfo(result); + return resultReshaped; + } + var fftConfig = { + kernelName: FFT, + backendName: "cpu", + kernelFunc: fft2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Fill.js + init_define_BUILD_VERSION(); + function fill2(args) { + const { backend: backend2, attrs } = args; + const { shape, value, dtype } = attrs; + const $dtype = dtype || util_exports.inferDtype(value); + const values = util_exports.getArrayFromDType($dtype, util_exports.sizeFromShape(shape)); + fillValues(values, value, $dtype); + return backend2.makeTensorInfo(shape, $dtype, values); + } + var fillConfig = { + kernelName: Fill, + backendName: "cpu", + kernelFunc: fill2 + }; + function fillValues(values, value, dtype) { + if (dtype === "string") { + values.fill(value); + } else { + values.fill(value); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FlipLeftRight.js + init_define_BUILD_VERSION(); + var flipLeftRightConfig = { + kernelName: FlipLeftRight, + backendName: "cpu", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { image: image2 } = inputs; + const cpuBackend = backend2; + const output = util_exports.getTypedArrayFromDType(image2.dtype, util_exports.sizeFromShape(image2.shape)); + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const imageVals = cpuBackend.data.get(image2.dataId).values; + for (let batchIdx = 0; batchIdx < batch; batchIdx++) { + const batchOffset = batchIdx * imageWidth * imageHeight * numChannels; + for (let row = 0; row < imageHeight; row++) { + const rowOffset = row * (imageWidth * numChannels); + for (let col = 0; col < imageWidth; col++) { + const colOffset = col * numChannels; + for (let channel = 0; channel < numChannels; channel++) { + const coordX = Math.round(imageWidth - col - 1); + const outIdx = batchOffset + rowOffset + colOffset + channel; + let outputValue = imageVals[outIdx]; + if (coordX >= 0 && coordX < imageWidth) { + const rotatedColOffset = coordX * numChannels; + const imageIdx = batchOffset + rowOffset + rotatedColOffset + channel; + outputValue = imageVals[imageIdx]; + } + output[outIdx] = outputValue; + } + } + } + } + const dataId = cpuBackend.write(output, image2.shape, image2.dtype); + return { dataId, shape: image2.shape, dtype: image2.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FloorDiv.js + init_define_BUILD_VERSION(); + var floorDivImpl = createSimpleBinaryKernelImpl((a, b) => Math.floor(a / b)); + var floorDiv2 = binaryKernelFunc(FloorDiv, floorDivImpl, null, "int32"); + var floorDivConfig = { + kernelName: FloorDiv, + backendName: "cpu", + kernelFunc: floorDiv2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FusedConv2D.js + init_define_BUILD_VERSION(); + function fusedConv2D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dataFormat, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs; + let result = conv2D({ + inputs: { x, filter }, + backend: backend2, + attrs: { strides, pad: pad3, dataFormat, dilations, dimRoundingMode } + }); + if (bias) { + const resultOld = result; + if (dataFormat === "NCHW" && bias.shape.length === 1 && bias.shape[0] !== 1) { + const reshapedBias = reshape2({ inputs: { x: bias }, backend: backend2, attrs: { shape: [bias.shape[0], 1, 1] } }); + result = add3({ inputs: { a: result, b: reshapedBias }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(reshapedBias); + } else { + result = add3({ inputs: { a: result, b: bias }, backend: backend2 }); + } + backend2.disposeIntermediateTensorInfo(resultOld); + } + if (activation) { + const resultOld = result; + if (dataFormat === "NCHW" && activation === "prelu" && preluActivationWeights.shape.length === 1 && preluActivationWeights.shape[0] !== 1) { + const reshapedAlpha = reshape2({ + inputs: { x: preluActivationWeights }, + backend: backend2, + attrs: { shape: [preluActivationWeights.shape[0], 1, 1] } + }); + result = applyActivation2(backend2, result, activation, reshapedAlpha, leakyreluAlpha); + backend2.disposeIntermediateTensorInfo(reshapedAlpha); + } else { + result = applyActivation2(backend2, result, activation, preluActivationWeights, leakyreluAlpha); + } + backend2.disposeIntermediateTensorInfo(resultOld); + } + return result; + } + var fusedConv2DConfig = { + kernelName: FusedConv2D, + backendName: "cpu", + kernelFunc: fusedConv2D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FusedDepthwiseConv2D.js + init_define_BUILD_VERSION(); + function fusedDepthwiseConv2D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dataFormat, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs; + let result = depthwiseConv2dNative({ + inputs: { x, filter }, + backend: backend2, + attrs: { strides, pad: pad3, dataFormat, dilations, dimRoundingMode } + }); + if (bias) { + const oldResult = result; + result = add3({ inputs: { a: result, b: bias }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(oldResult); + } + if (activation) { + const oldResult = result; + result = applyActivation2(backend2, result, activation, preluActivationWeights, leakyreluAlpha); + backend2.disposeIntermediateTensorInfo(oldResult); + } + return result; + } + var fusedDepthwiseConv2DConfig = { + kernelName: FusedDepthwiseConv2D, + backendName: "cpu", + kernelFunc: fusedDepthwiseConv2D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherNd.js + init_define_BUILD_VERSION(); + function gatherNd(args) { + const { inputs, backend: backend2 } = args; + const { params, indices } = inputs; + const paramsSize = util_exports.sizeFromShape(params.shape); + const indicesShape = indices.shape; + const sliceRank = indicesShape[indicesShape.length - 1]; + const [resultShape, numSlices, sliceSize, strides] = backend_util_exports.prepareAndValidate(params, indices); + if (numSlices === 0) { + return backend2.makeTensorInfo(resultShape, params.dtype, []); + } + const indicesData = backend2.data.get(indices.dataId).values; + const paramsBuf = backend2.bufferSync(params); + const outBuf = gatherNdImpl(indicesData, paramsBuf, params.dtype, numSlices, sliceRank, sliceSize, strides, params.shape, paramsSize); + return backend2.makeTensorInfo(resultShape, params.dtype, outBuf.values); + } + var gatherNdConfig = { + kernelName: GatherNd, + backendName: "cpu", + kernelFunc: gatherNd + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherV2.js + init_define_BUILD_VERSION(); + function gatherV2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, indices } = inputs; + const { axis, batchDims } = attrs; + assertNotComplex([x, indices], "gatherV2"); + const parsedAxis = util_exports.parseAxisParam(axis, x.shape)[0]; + const indicesVals = backend2.data.get(indices.dataId).values; + const axisDim = x.shape[parsedAxis]; + for (let i = 0; i < indicesVals.length; ++i) { + const index = indicesVals[i]; + util_exports.assert(index <= axisDim - 1 && index >= 0, () => `GatherV2: the index value ${index} is not in [0, ${axisDim - 1}]`); + } + let $batchDims = batchDims; + if (batchDims == null) { + $batchDims = 0; + } + const indicesSize = util_exports.sizeFromShape(indices.shape); + const shapeInfo = backend_util_exports.segment_util.collectGatherOpShapeInfo(x, indices, parsedAxis, $batchDims); + const flattenX = reshape2({ + inputs: { x }, + backend: backend2, + attrs: { + shape: [ + shapeInfo.batchSize, + shapeInfo.outerSize, + shapeInfo.dimSize, + shapeInfo.sliceSize + ] + } + }); + const flattenIndex = reshape2({ + inputs: { x: indices }, + backend: backend2, + attrs: { shape: [shapeInfo.batchSize, indicesSize / shapeInfo.batchSize] } + }); + const flattenOutputShape = [ + shapeInfo.batchSize, + shapeInfo.outerSize, + indicesSize / shapeInfo.batchSize, + shapeInfo.sliceSize + ]; + const indicesBuf = backend2.bufferSync(flattenIndex); + const xBuf = backend2.bufferSync(flattenX); + const outBuf = gatherV2Impl(xBuf, indicesBuf, flattenOutputShape); + backend2.disposeIntermediateTensorInfo(flattenX); + backend2.disposeIntermediateTensorInfo(flattenIndex); + return backend2.makeTensorInfo(shapeInfo.outputShape, outBuf.dtype, outBuf.values); + } + var gatherV2Config = { + kernelName: GatherV2, + backendName: "cpu", + kernelFunc: gatherV2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IFFT.js + init_define_BUILD_VERSION(); + function ifft2(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const inputSize = util_exports.sizeFromShape(input2.shape); + const innerDimensionSize = input2.shape[input2.shape.length - 1]; + const batch = inputSize / innerDimensionSize; + const input2D = reshape2({ + inputs: { x: input2 }, + backend: backend2, + attrs: { shape: [batch, innerDimensionSize] } + }); + const result = fftBatch(input2D, true, backend2); + const resultReshaped = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: input2.shape } }); + backend2.disposeIntermediateTensorInfo(input2D); + backend2.disposeIntermediateTensorInfo(result); + return resultReshaped; + } + var ifftConfig = { + kernelName: IFFT, + backendName: "cpu", + kernelFunc: ifft2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsFinite.js + init_define_BUILD_VERSION(); + var isFinite3 = unaryKernelFunc(IsFinite, (xi) => Number.isFinite(xi) ? 1 : 0, "bool"); + var isFiniteConfig = { + kernelName: IsFinite, + backendName: "cpu", + kernelFunc: isFinite3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsInf.js + init_define_BUILD_VERSION(); + var isInf2 = unaryKernelFunc(IsInf, (xi) => Math.abs(xi) === Infinity ? 1 : 0, "bool"); + var isInfConfig = { + kernelName: IsInf, + backendName: "cpu", + kernelFunc: isInf2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsNaN.js + init_define_BUILD_VERSION(); + var isNaN3 = unaryKernelFunc(IsNan, (xi) => Number.isNaN(xi) ? 1 : 0, "bool"); + var isNaNConfig = { + kernelName: IsNan, + backendName: "cpu", + kernelFunc: isNaN3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LinSpace.js + init_define_BUILD_VERSION(); + function linSpace(args) { + const { backend: backend2, attrs } = args; + const { start, stop, num } = attrs; + const outVals = linSpaceImpl(start, stop, num); + return backend2.makeTensorInfo([outVals.length], "float32", outVals); + } + var linSpaceConfig = { + kernelName: LinSpace, + backendName: "cpu", + kernelFunc: linSpace + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Log1p.js + init_define_BUILD_VERSION(); + var log1p2 = unaryKernelFunc(Log1p, (xi) => Math.log1p(xi)); + var log1pConfig = { + kernelName: Log1p, + backendName: "cpu", + kernelFunc: log1p2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalAnd.js + init_define_BUILD_VERSION(); + var logicalAndImpl = createSimpleBinaryKernelImpl((a, b) => a && b); + var logicalAnd2 = binaryKernelFunc(LogicalAnd, logicalAndImpl, null, "bool"); + var logicalAndConfig = { + kernelName: LogicalAnd, + backendName: "cpu", + kernelFunc: logicalAnd2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalNot.js + init_define_BUILD_VERSION(); + var logicalNot2 = unaryKernelFunc(LogicalNot, (xi) => xi ? 0 : 1, "bool"); + var logicalNotConfig = { + kernelName: LogicalNot, + backendName: "cpu", + kernelFunc: logicalNot2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalOr.js + init_define_BUILD_VERSION(); + var logicalOrImpl = createSimpleBinaryKernelImpl((a, b) => a || b); + var logicalOr2 = binaryKernelFunc(LogicalOr, logicalOrImpl, null, "bool"); + var logicalOrConfig = { + kernelName: LogicalOr, + backendName: "cpu", + kernelFunc: logicalOr2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LRN.js + init_define_BUILD_VERSION(); + function lRN(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { depthRadius, bias, alpha, beta } = attrs; + assertNotComplex(x, "LRN"); + const channels = x.shape[3]; + const maxD = channels - 1; + const xValues = backend2.data.get(x.dataId).values; + const size = util_exports.sizeFromShape(x.shape); + const result = new Float32Array(size); + function sumAcrossChannels(offset) { + const currentChannel = offset % channels; + let beginSumOffset = offset - currentChannel + Math.max(0, currentChannel - depthRadius); + const endSumOffset = offset - currentChannel + Math.min(currentChannel + depthRadius, maxD); + let sum6 = 0; + for (; beginSumOffset <= endSumOffset; beginSumOffset++) { + const z = xValues[beginSumOffset]; + sum6 += z * z; + } + return sum6; + } + for (let offset = 0; offset < size; offset++) { + const sum6 = sumAcrossChannels(offset); + const val = xValues[offset] * Math.pow(bias + alpha * sum6, -beta); + result[offset] = val; + } + return backend2.makeTensorInfo(x.shape, x.dtype, result); + } + var LRNConfig = { + kernelName: LRN, + backendName: "cpu", + kernelFunc: lRN + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LRNGrad.js + init_define_BUILD_VERSION(); + function lRNGrad(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, y, dy } = inputs; + const { depthRadius, bias, alpha, beta } = attrs; + assertNotComplex(dy, "LRNGrad"); + const dySize = util_exports.sizeFromShape(dy.shape); + const channels = dy.shape[3]; + const dyValues = backend2.data.get(dy.dataId).values; + const xValues = backend2.data.get(x.dataId).values; + const yValues = backend2.data.get(y.dataId).values; + const result = new Float32Array(dySize); + const size = dySize; + for (let offset = 0; offset < size; offset++) { + const currentChannel = offset % channels; + const depthBegin = offset - currentChannel + Math.max(0, currentChannel - depthRadius); + const depthEnd = offset - currentChannel + Math.min(channels, currentChannel + depthRadius + 1); + let norm2 = 0; + for (let k = depthBegin; k < depthEnd; k++) { + norm2 += Math.pow(xValues[k], 2); + } + norm2 = alpha * norm2 + bias; + for (let k = depthBegin; k < depthEnd; k++) { + let dyi = -2 * alpha * beta * xValues[k] * yValues[offset] / norm2; + if (offset === k) { + dyi += Math.pow(norm2, -beta); + } + dyi *= dyValues[offset]; + result[k] += dyi; + } + } + return backend2.makeTensorInfo(dy.shape, x.dtype, result); + } + var LRNGradConfig = { + kernelName: LRNGrad, + backendName: "cpu", + kernelFunc: lRNGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Max.js + init_define_BUILD_VERSION(); + function max3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { reductionIndices, keepDims } = attrs; + const cpuBackend = backend2; + let xShape = x.shape; + const xRank = xShape.length; + const origAxes = util_exports.parseAxisParam(reductionIndices, xShape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let xVals = cpuBackend.data.get(x.dataId).values; + if (permutedAxes != null) { + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = xShape[permutedAxes[i]]; + } + xVals = transposeImpl(xVals, xShape, x.dtype, permutedAxes, newShape); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + xShape = newShape; + } + assertNotComplex(x, "max"); + backend_util_exports.assertAxesAreInnerMostDims("max", axes, xRank); + const [maxOutShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(xShape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const result = maxImpl(xVals, reduceSize, maxOutShape, x.dtype); + const dataId = cpuBackend.write(result, maxOutShape, x.dtype); + let outShape = maxOutShape; + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(maxOutShape, origAxes); + outShape = newShape; + } + return { dataId, shape: outShape, dtype: x.dtype }; + } + var maxConfig = { + kernelName: Max, + backendName: "cpu", + kernelFunc: max3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool.js + init_define_BUILD_VERSION(); + function maxPool2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + assertNotComplex(x, "maxPool"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = 1; + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + let res; + if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 && util_exports.arraysEqual(convInfo.inShape, convInfo.outShape)) { + res = identity({ inputs: { x }, backend: backend2 }); + } else { + const xValues = backend2.data.get(x.dataId).values; + const strides2 = util_exports.computeStrides(x.shape); + const buffer2 = pool2(xValues, x.shape, x.dtype, strides2, convInfo, "max"); + res = backend2.makeTensorInfo(convInfo.outShape, x.dtype, buffer2.values); + } + return res; + } + var maxPoolConfig = { + kernelName: MaxPool, + backendName: "cpu", + kernelFunc: maxPool2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool3D.js + init_define_BUILD_VERSION(); + function maxPool3D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { filterSize, strides, pad: pad3, dimRoundingMode, dataFormat } = attrs; + assertNotComplex(x, "maxPool3d"); + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode, dataFormat); + const xValues = backend2.data.get(x.dataId).values; + const outBuf = pool3d2(xValues, x.shape, x.dtype, util_exports.computeStrides(x.shape), convInfo, "max"); + return backend2.makeTensorInfo(outBuf.shape, "float32", outBuf.values); + } + var maxPool3DConfig = { + kernelName: MaxPool3D, + backendName: "cpu", + kernelFunc: maxPool3D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool3DGrad.js + init_define_BUILD_VERSION(); + function maxPool3DGrad(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + assertNotComplex([dy, input2], "maxPool3DGrad"); + const convInfo = backend_util_exports.computePool3DInfo(input2.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const inputBuf = backend2.bufferSync(input2); + const maxPosBuf = maxPool3dPositions(inputBuf, convInfo); + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const dx = buffer(input2.shape, "float32"); + const dyBuf = backend2.bufferSync(dy); + for (let batch = 0; batch < convInfo.batchSize; ++batch) { + for (let channel = 0; channel < convInfo.inChannels; ++channel) { + for (let dxDepth = 0; dxDepth < convInfo.inDepth; ++dxDepth) { + for (let dxRow = 0; dxRow < convInfo.inHeight; ++dxRow) { + for (let dxCol = 0; dxCol < convInfo.inWidth; ++dxCol) { + const dyDepthCorner = dxDepth - padFront; + const dyRowCorner = dxRow - padTop; + const dyColCorner = dxCol - padLeft; + let dotProd = 0; + for (let wDepth = 0; wDepth < effectiveFilterDepth; wDepth += dilationDepth) { + const dyDepth = (dyDepthCorner + wDepth) / strideDepth; + if (dyDepth < 0 || dyDepth >= convInfo.outDepth || Math.floor(dyDepth) !== dyDepth) { + continue; + } + for (let wRow = 0; wRow < effectiveFilterHeight; wRow += dilationHeight) { + const dyRow = (dyRowCorner + wRow) / strideHeight; + if (dyRow < 0 || dyRow >= convInfo.outHeight || Math.floor(dyRow) !== dyRow) { + continue; + } + for (let wCol = 0; wCol < effectiveFilterWidth; wCol += dilationWidth) { + const dyCol = (dyColCorner + wCol) / strideWidth; + if (dyCol < 0 || dyCol >= convInfo.outWidth || Math.floor(dyCol) !== dyCol) { + continue; + } + const maxPos = effectiveFilterDepth * effectiveFilterHeight * effectiveFilterWidth - 1 - maxPosBuf.get(batch, dyDepth, dyRow, dyCol, channel); + const curPos = wDepth * effectiveFilterHeight * effectiveFilterWidth + wRow * effectiveFilterWidth + wCol; + const mask = maxPos === curPos ? 1 : 0; + if (mask === 0) { + continue; + } + const pixel = dyBuf.get(batch, dyDepth, dyRow, dyCol, channel); + dotProd += pixel * mask; + } + } + } + dx.set(dotProd, batch, dxDepth, dxRow, dxCol, channel); + } + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var maxPool3DGradConfig2 = { + kernelName: MaxPool3DGrad, + backendName: "cpu", + kernelFunc: maxPool3DGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolGrad.js + init_define_BUILD_VERSION(); + function maxPoolGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2, output } = inputs; + const x = input2; + assertNotComplex([input2, output], "maxPoolGrad"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const xValues = backend2.data.get(x.dataId).values; + const maxPosBuf = buffer(convInfo.outShape, x.dtype, maxPoolPositions(xValues, x.shape, x.dtype, convInfo).values); + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const dx = buffer(x.shape, "float32"); + const dyData = backend2.data.get(dy.dataId).values; + const dyBuf = buffer(dy.shape, "float32", dyData); + for (let b = 0; b < convInfo.batchSize; ++b) { + for (let d = 0; d < convInfo.inChannels; ++d) { + for (let dxR = 0; dxR < convInfo.inHeight; ++dxR) { + for (let dxC = 0; dxC < convInfo.inWidth; ++dxC) { + const dyRCorner = dxR - padTop; + const dyCCorner = dxC - padLeft; + let dotProd = 0; + for (let wR = 0; wR < effectiveFilterHeight; wR += dilationHeight) { + const dyR = (dyRCorner + wR) / strideHeight; + if (dyR < 0 || dyR >= convInfo.outHeight || Math.floor(dyR) !== dyR) { + continue; + } + for (let wC = 0; wC < effectiveFilterWidth; wC += dilationWidth) { + const dyC = (dyCCorner + wC) / strideWidth; + if (dyC < 0 || dyC >= convInfo.outWidth || Math.floor(dyC) !== dyC) { + continue; + } + const maxPos = effectiveFilterHeight * effectiveFilterWidth - 1 - maxPosBuf.get(b, dyR, dyC, d); + const curPos = wR * effectiveFilterWidth + wC; + const mask = maxPos === curPos ? 1 : 0; + if (mask === 0) { + continue; + } + const pixel = dyBuf.get(b, dyR, dyC, d); + dotProd += pixel * mask; + } + } + dx.set(dotProd, b, dxR, dxC, d); + } + } + } + } + return backend2.makeTensorInfo(dx.shape, dx.dtype, dx.values); + } + var maxPoolGradConfig2 = { + kernelName: MaxPoolGrad, + backendName: "cpu", + kernelFunc: maxPoolGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax_impl.js + init_define_BUILD_VERSION(); + function maxPoolWithArgmaxImpl(xValues, xShape, dtype, includeBatchInIndex, convInfo) { + const strides = util_exports.computeStrides(xShape); + const maxPools = pool2(xValues, xShape, dtype, strides, convInfo, "max"); + const maxPositions = maxPoolPositions(xValues, xShape, dtype, convInfo, true, includeBatchInIndex); + return [maxPools.values, maxPositions.values]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax.js + var maxPoolWithArgmaxConfig = { + kernelName: MaxPoolWithArgmax, + backendName: "cpu", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { x } = inputs; + const { filterSize, strides, pad: pad3, includeBatchInIndex } = attrs; + const cpuBackend = backend2; + assertNotComplex(x, "MaxPoolWithArgmax"); + const values = cpuBackend.data.get(x.dataId).values; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, [1, 1], pad3); + const [pooled, indexes] = maxPoolWithArgmaxImpl(values, x.shape, x.dtype, includeBatchInIndex, convInfo); + const pooledDataId = cpuBackend.write(pooled, convInfo.outShape, x.dtype); + const indexesDataId = cpuBackend.write(indexes, convInfo.outShape, x.dtype); + return [ + { dataId: pooledDataId, shape: convInfo.outShape, dtype: x.dtype }, + { dataId: indexesDataId, shape: convInfo.outShape, dtype: "int32" } + ]; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Mean.js + init_define_BUILD_VERSION(); + function mean2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + const axes = util_exports.parseAxisParam(axis, x.shape); + const shapes = backend_util_exports.computeOutAndReduceShapes(x.shape, axes); + const reduceShape = shapes[1]; + const reduceSize = util_exports.sizeFromShape(reduceShape); + const toDispose = []; + const reduceSizeScalar = backend2.makeTensorInfo([], "float32", new Float32Array([reduceSize])); + toDispose.push(reduceSizeScalar); + const $x = cast3({ inputs: { x }, backend: backend2, attrs: { dtype: "float32" } }); + toDispose.push($x); + const res = div2({ inputs: { a: $x, b: reduceSizeScalar }, backend: backend2 }); + toDispose.push(res); + const result = sum3({ inputs: { x: res }, backend: backend2, attrs: { axis, keepDims } }); + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var meanConfig = { + kernelName: Mean, + backendName: "cpu", + kernelFunc: mean2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Min.js + init_define_BUILD_VERSION(); + function min3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + assertNotComplex(x, "min"); + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + if (permutedAxes != null) { + $x = transpose2({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("min", axes, $x.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes($x.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const vals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(outShape), $x.dtype); + const aVals = backend2.data.get($x.dataId).values; + for (let i = 0; i < vals.length; ++i) { + const offset = i * reduceSize; + let min6 = aVals[offset]; + for (let j = 0; j < reduceSize; ++j) { + const value = aVals[offset + j]; + if (Number.isNaN(value) || value < min6) { + min6 = value; + } + } + vals[i] = min6; + } + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo($x); + } + const result = backend2.makeTensorInfo(outShape, $x.dtype, vals); + if (keepDims) { + const expandedShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + const reshapedResult = reshape2({ inputs: { x: result }, backend: backend2, attrs: { shape: expandedShape } }); + backend2.disposeIntermediateTensorInfo(result); + return reshapedResult; + } + return result; + } + var minConfig = { + kernelName: Min, + backendName: "cpu", + kernelFunc: min3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MirrorPad.js + init_define_BUILD_VERSION(); + function mirrorPad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { paddings, mode } = attrs; + assertNotComplex(x, "mirrorPad"); + const outShape = paddings.map((p2, i) => p2[0] + x.shape[i] + p2[1]); + const start = paddings.map((p2) => p2[0]); + const end = paddings.map((p2, i) => p2[0] + x.shape[i]); + const offset = mode === "reflect" ? 0 : 1; + const xVals = backend2.data.get(x.dataId).values; + const xRank = x.shape.length; + const xStrides = util_exports.computeStrides(x.shape); + const resultSize = util_exports.sizeFromShape(outShape); + const resultRank = outShape.length; + const resultStrides = util_exports.computeStrides(outShape); + const resVals = util_exports.getTypedArrayFromDType(x.dtype, resultSize); + for (let i = 0; i < resultSize; i++) { + let coords2 = util_exports.indexToLoc(i, resultRank, resultStrides); + for (let i2 = 0; i2 < resultRank; i2++) { + if (coords2[i2] < start[i2]) { + coords2[i2] = start[i2] * 2 - coords2[i2] - offset; + } else if (coords2[i2] >= end[i2]) { + coords2[i2] = (end[i2] - 1) * 2 - coords2[i2] + offset; + } + } + coords2 = coords2.map((c, i2) => c - start[i2]); + const inIndex = util_exports.locToIndex(coords2, xRank, xStrides); + resVals[i] = xVals[inIndex]; + } + const outId = backend2.write(resVals, outShape, x.dtype); + return { dataId: outId, shape: outShape, dtype: x.dtype }; + } + var mirrorPadConfig = { + kernelName: MirrorPad, + backendName: "cpu", + kernelFunc: mirrorPad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Mod.js + init_define_BUILD_VERSION(); + var modImpl = createSimpleBinaryKernelImpl((aValue, bValue) => { + const rem = aValue % bValue; + if (aValue < 0 && bValue < 0 || aValue >= 0 && bValue >= 0) { + return rem; + } else { + return (rem + bValue) % bValue; + } + }); + var mod2 = binaryKernelFunc(Mod, modImpl); + var modConfig = { + kernelName: Mod, + backendName: "cpu", + kernelFunc: mod2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multinomial.js + init_define_BUILD_VERSION(); + var seedrandom4 = __toESM(require_seedrandom2()); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Softmax.js + init_define_BUILD_VERSION(); + function softmax2(args) { + const { inputs, backend: backend2, attrs } = args; + const { logits } = inputs; + const { dim } = attrs; + const logitsRank = logits.shape.length; + let $dim = dim; + if ($dim === -1) { + $dim = logitsRank - 1; + } + if ($dim !== logitsRank - 1) { + throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${logitsRank} and dim was ${$dim}`); + } + const axes = util_exports.parseAxisParam([$dim], logits.shape); + const maxLogit = max3({ + inputs: { x: logits }, + backend: backend2, + attrs: { reductionIndices: axes, keepDims: false } + }); + const expandedShape = backend_util_exports.expandShapeToKeepDim(maxLogit.shape, axes); + const maxLogitReshaped = reshape2({ inputs: { x: maxLogit }, backend: backend2, attrs: { shape: expandedShape } }); + const a = sub2({ inputs: { a: logits, b: maxLogitReshaped }, backend: backend2 }); + const b = exp2({ inputs: { x: a }, backend: backend2 }); + const sumExp = sum3({ inputs: { x: b }, backend: backend2, attrs: { axis: axes, keepDims: false } }); + const sumReshaped = reshape2({ inputs: { x: sumExp }, backend: backend2, attrs: { shape: expandedShape } }); + const result = div2({ inputs: { a: b, b: sumReshaped }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(maxLogit); + backend2.disposeIntermediateTensorInfo(maxLogitReshaped); + backend2.disposeIntermediateTensorInfo(a); + backend2.disposeIntermediateTensorInfo(b); + backend2.disposeIntermediateTensorInfo(sumExp); + backend2.disposeIntermediateTensorInfo(sumReshaped); + return result; + } + var softmaxConfig = { + kernelName: Softmax, + backendName: "cpu", + kernelFunc: softmax2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multinomial.js + function multinomial(args) { + const { inputs, backend: backend2, attrs } = args; + const { logits } = inputs; + const { numSamples, seed, normalized } = attrs; + assertNotComplex(logits, "multinomial"); + const probabilities = normalized ? logits : softmax2({ inputs: { logits }, backend: backend2, attrs: { dim: -1 } }); + const batchSize = probabilities.shape[0]; + const numEvents = probabilities.shape[1]; + const probVals = backend2.data.get(probabilities.dataId).values; + const resShape = [batchSize, numSamples]; + const resVals = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(resShape), "int32"); + for (let b = 0; b < batchSize; ++b) { + const offset = b * numEvents; + const cdf = new Float32Array(numEvents - 1); + cdf[0] = probVals[offset]; + for (let event = 1; event < cdf.length; ++event) { + cdf[event] = cdf[event - 1] + probVals[offset + event]; + } + const random = seedrandom4.alea(seed.toString()); + const outOffset = b * numSamples; + for (let sampleId = 0; sampleId < numSamples; ++sampleId) { + const r = random(); + resVals[outOffset + sampleId] = cdf.length; + for (let event = 0; event < cdf.length; event++) { + if (r < cdf[event]) { + resVals[outOffset + sampleId] = event; + break; + } + } + } + } + if (!normalized) { + backend2.disposeIntermediateTensorInfo(probabilities); + } + return backend2.makeTensorInfo(resShape, "int32", resVals); + } + var multinomialConfig = { + kernelName: Multinomial, + backendName: "cpu", + kernelFunc: multinomial + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV3.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV3Impl2 = kernel_impls_exports.nonMaxSuppressionV3Impl; + function nonMaxSuppressionV3(args) { + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold } = attrs; + assertNotComplex(boxes, "NonMaxSuppression"); + const boxesVals = backend2.data.get(boxes.dataId).values; + const scoresVals = backend2.data.get(scores.dataId).values; + const { selectedIndices } = nonMaxSuppressionV3Impl2(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold); + return backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)); + } + var nonMaxSuppressionV3Config = { + kernelName: NonMaxSuppressionV3, + backendName: "cpu", + kernelFunc: nonMaxSuppressionV3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV4.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV4Impl2 = kernel_impls_exports.nonMaxSuppressionV4Impl; + function nonMaxSuppressionV4(args) { + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize } = attrs; + assertNotComplex(boxes, "NonMaxSuppressionPadded"); + const boxesVals = backend2.data.get(boxes.dataId).values; + const scoresVals = backend2.data.get(scores.dataId).values; + const { selectedIndices, validOutputs } = nonMaxSuppressionV4Impl2(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize); + return [ + backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)), + backend2.makeTensorInfo([], "int32", new Int32Array([validOutputs])) + ]; + } + var nonMaxSuppressionV4Config = { + kernelName: NonMaxSuppressionV4, + backendName: "cpu", + kernelFunc: nonMaxSuppressionV4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV5.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV5Impl2 = kernel_impls_exports.nonMaxSuppressionV5Impl; + function nonMaxSuppressionV5(args) { + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma } = attrs; + assertNotComplex(boxes, "NonMaxSuppressionWithScore"); + const boxesVals = backend2.data.get(boxes.dataId).values; + const scoresVals = backend2.data.get(scores.dataId).values; + const maxOutputSizeVal = maxOutputSize; + const iouThresholdVal = iouThreshold; + const scoreThresholdVal = scoreThreshold; + const softNmsSigmaVal = softNmsSigma; + const { selectedIndices, selectedScores } = nonMaxSuppressionV5Impl2(boxesVals, scoresVals, maxOutputSizeVal, iouThresholdVal, scoreThresholdVal, softNmsSigmaVal); + return [ + backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)), + backend2.makeTensorInfo([selectedScores.length], "float32", new Float32Array(selectedScores)) + ]; + } + var nonMaxSuppressionV5Config = { + kernelName: NonMaxSuppressionV5, + backendName: "cpu", + kernelFunc: nonMaxSuppressionV5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/OneHot.js + init_define_BUILD_VERSION(); + function oneHot2(args) { + const { inputs, backend: backend2, attrs } = args; + const { indices } = inputs; + const { depth, onValue, offValue } = attrs; + assertNotComplex(indices, "oneHot"); + const indicesSize = util_exports.sizeFromShape(indices.shape); + const res = new Float32Array(indicesSize * depth); + res.fill(offValue); + const indicesVal = backend2.data.get(indices.dataId).values; + for (let event = 0; event < indicesSize; ++event) { + if (indicesVal[event] >= 0 && indicesVal[event] < depth) { + res[event * depth + indicesVal[event]] = onValue; + } + } + return backend2.makeTensorInfo([...indices.shape, depth], "int32", res); + } + var oneHotConfig = { + kernelName: OneHot, + backendName: "cpu", + kernelFunc: oneHot2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/OnesLike.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ZerosLike.js + init_define_BUILD_VERSION(); + function zerosLike2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (x.dtype === "string") { + throw new Error("zerosLike is not supported for string tensors"); + } else if (x.dtype === "complex64") { + const realPart = real2({ inputs: { input: x }, backend: backend2 }); + const r = zerosLike2({ inputs: { x: realPart }, backend: backend2 }); + const imagPart = imag2({ inputs: { input: x }, backend: backend2 }); + const i = zerosLike2({ inputs: { x: imagPart }, backend: backend2 }); + const result = complex2({ inputs: { real: r, imag: i }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(r); + backend2.disposeIntermediateTensorInfo(imagPart); + backend2.disposeIntermediateTensorInfo(i); + return result; + } else { + return fill2({ backend: backend2, attrs: { shape: x.shape, value: 0, dtype: x.dtype } }); + } + } + var zerosLikeConfig = { + kernelName: ZerosLike, + backendName: "cpu", + kernelFunc: zerosLike2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/OnesLike.js + function onesLike2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (x.dtype === "string") { + throw new Error("onesLike is not supported for string tensors"); + } else if (x.dtype === "complex64") { + const realPart = real2({ inputs: { input: x }, backend: backend2 }); + const r = onesLike2({ inputs: { x: realPart }, backend: backend2 }); + const imagPart = imag2({ inputs: { input: x }, backend: backend2 }); + const i = zerosLike2({ inputs: { x: imagPart }, backend: backend2 }); + const result = complex2({ inputs: { real: r, imag: i }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(r); + backend2.disposeIntermediateTensorInfo(imagPart); + backend2.disposeIntermediateTensorInfo(i); + return result; + } else { + return fill2({ backend: backend2, attrs: { shape: x.shape, value: 1, dtype: x.dtype } }); + } + } + var onesLikeConfig = { + kernelName: OnesLike, + backendName: "cpu", + kernelFunc: onesLike2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Pack.js + init_define_BUILD_VERSION(); + function pack(args) { + const { inputs, backend: backend2, attrs } = args; + const { axis } = attrs; + if (inputs.length === 1) { + return expandDims3({ inputs: { input: inputs[0] }, backend: backend2, attrs: { dim: axis } }); + } + const shape = inputs[0].shape; + const dtype = inputs[0].dtype; + inputs.forEach((t) => { + util_exports.assertShapesMatch(shape, t.shape, "All tensors passed to stack must have matching shapes"); + util_exports.assert(dtype === t.dtype, () => "All tensors passed to stack must have matching dtypes"); + }); + const intermediateTensorInfos = []; + const expandedTensors = inputs.map((t) => { + const expandedT = expandDims3({ inputs: { input: t }, backend: backend2, attrs: { dim: axis } }); + intermediateTensorInfos.push(expandedT); + return expandedT; + }); + const result = concat2({ inputs: expandedTensors, backend: backend2, attrs: { axis } }); + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var packConfig = { + kernelName: Pack, + backendName: "cpu", + kernelFunc: pack + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/PadV2.js + init_define_BUILD_VERSION(); + function padV2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { paddings, constantValue } = attrs; + assertNotComplex(x, "pad"); + const outShape = paddings.map((p2, i) => p2[0] + x.shape[i] + p2[1]); + const start = paddings.map((p2) => p2[0]); + const xVals = backend2.data.get(x.dataId).values; + const xSize = util_exports.sizeFromShape(x.shape); + const xRank = x.shape.length; + const xStrides = util_exports.computeStrides(x.shape); + const resultSize = util_exports.sizeFromShape(outShape); + const resultRank = outShape.length; + const resultStrides = util_exports.computeStrides(outShape); + const resVals = util_exports.getTypedArrayFromDType(x.dtype, resultSize); + if (constantValue !== 0) { + resVals.fill(constantValue); + } + for (let i = 0; i < xSize; i++) { + const coords2 = util_exports.indexToLoc(i, xRank, xStrides); + const outCoords = coords2.map((c, i2) => c + start[i2]); + const outIndex = util_exports.locToIndex(outCoords, resultRank, resultStrides); + resVals[outIndex] = xVals[i]; + } + const outId = backend2.write(resVals, outShape, x.dtype); + return { dataId: outId, shape: outShape, dtype: x.dtype }; + } + var padV2Config = { + kernelName: PadV2, + backendName: "cpu", + kernelFunc: padV2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Pow.js + init_define_BUILD_VERSION(); + var powImpl = createSimpleBinaryKernelImpl((a, b) => Math.pow(a, b)); + var pow2 = binaryKernelFunc(Pow, powImpl); + var powConfig = { + kernelName: Pow, + backendName: "cpu", + kernelFunc: pow2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Range.js + init_define_BUILD_VERSION(); + function range3(args) { + const { backend: backend2, attrs } = args; + const { start, stop, dtype, step: step5 } = attrs; + const values = rangeImpl(start, stop, step5, dtype); + return backend2.makeTensorInfo([values.length], dtype, values); + } + var rangeConfig = { + kernelName: Range, + backendName: "cpu", + kernelFunc: range3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reciprocal.js + init_define_BUILD_VERSION(); + var reciprocal2 = unaryKernelFunc(Reciprocal, (xi) => 1 / xi); + var reciprocalConfig = { + kernelName: Reciprocal, + backendName: "cpu", + kernelFunc: reciprocal2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeBilinear.js + init_define_BUILD_VERSION(); + function resizeBilinear2(args) { + const { inputs, backend: backend2, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + assertNotComplex(images, "resizeBilinear"); + const imagesStrides = util_exports.computeStrides(images.shape); + const [newHeight, newWidth] = size; + const [batch, oldHeight, oldWidth, numChannels] = images.shape; + const xValues = backend2.data.get(images.dataId).values; + const result = new Float32Array(util_exports.sizeFromShape([batch, newHeight, newWidth, numChannels])); + const effectiveInputSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutputSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + let outputIdx = 0; + const effectiveRowSizeRatio = effectiveInputSize[0] / effectiveOutputSize[0]; + const effectiveColSizeRatio = effectiveInputSize[1] / effectiveOutputSize[1]; + for (let b = 0; b < batch; b++) { + for (let r = 0; r < newHeight; r++) { + let sourceFracRow; + if (halfPixelCenters) { + sourceFracRow = effectiveRowSizeRatio * (r + 0.5) - 0.5; + } else { + sourceFracRow = effectiveRowSizeRatio * r; + } + const sourceRowFloor = Math.max(0, Math.floor(sourceFracRow)); + const rowFrac = sourceFracRow - sourceRowFloor; + const sourceRowCeil = Math.min(oldHeight - 1, Math.ceil(sourceFracRow)); + const topRowOffset = b * imagesStrides[0] + sourceRowFloor * imagesStrides[1]; + const botRowOffset = b * imagesStrides[0] + sourceRowCeil * imagesStrides[1]; + for (let c = 0; c < newWidth; c++) { + let sourceFracCol; + if (halfPixelCenters) { + sourceFracCol = effectiveColSizeRatio * (c + 0.5) - 0.5; + } else { + sourceFracCol = effectiveColSizeRatio * c; + } + const sourceColFloor = Math.max(0, Math.floor(sourceFracCol)); + const colFrac = sourceFracCol - sourceColFloor; + const sourceColCeil = Math.min(oldWidth - 1, Math.ceil(sourceFracCol)); + const topLeftOffest = topRowOffset + sourceColFloor * imagesStrides[2]; + const botLeftOffset = botRowOffset + sourceColFloor * imagesStrides[2]; + const topRightOffset = topRowOffset + sourceColCeil * imagesStrides[2]; + const botRightOffest = botRowOffset + sourceColCeil * imagesStrides[2]; + for (let d = 0; d < numChannels; d++) { + const topLeft = xValues[topLeftOffest + d]; + const bottomLeft = xValues[botLeftOffset + d]; + const topRight = xValues[topRightOffset + d]; + const bottomRight = xValues[botRightOffest + d]; + const top = topLeft + (topRight - topLeft) * colFrac; + const bottom = bottomLeft + (bottomRight - bottomLeft) * colFrac; + const newValue = top + (bottom - top) * rowFrac; + result[outputIdx++] = newValue; + } + } + } + } + return backend2.makeTensorInfo([batch, newHeight, newWidth, numChannels], "float32", result); + } + var resizeBilinearConfig = { + kernelName: ResizeBilinear, + backendName: "cpu", + kernelFunc: resizeBilinear2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeBilinearGrad.js + init_define_BUILD_VERSION(); + function resizeBilinearGrad(args) { + const { inputs, backend: backend2, attrs } = args; + const { images, dy } = inputs; + const { alignCorners } = attrs; + assertNotComplex([dy, images], "resizeBilinearGrad"); + const imagesStrides = util_exports.computeStrides(images.shape); + const [batch, xHeight, xWidth, depth] = images.shape; + const [, yHeight, yWidth] = dy.shape; + const output = new Float32Array(batch * xHeight * xWidth * depth); + const effectiveXSize = [ + alignCorners && yHeight > 1 ? xHeight - 1 : xHeight, + alignCorners && yWidth > 1 ? xWidth - 1 : xWidth + ]; + const effectiveYSize = [ + alignCorners && yHeight > 1 ? yHeight - 1 : yHeight, + alignCorners && yWidth > 1 ? yWidth - 1 : yWidth + ]; + const heightScale = effectiveXSize[0] / effectiveYSize[0]; + const widthScale = effectiveXSize[1] / effectiveYSize[1]; + const dyValues = backend2.data.get(dy.dataId).values; + let offset = 0; + for (let b = 0; b < batch; b++) { + const bOffset = b * imagesStrides[0]; + for (let r = 0; r < yHeight; r++) { + const dxR = r * heightScale; + const topDxRIndex = Math.floor(dxR); + const bottomDxRIndex = Math.min(Math.ceil(dxR), xHeight - 1); + const topDxROffset = bOffset + topDxRIndex * imagesStrides[1]; + const bottomDxROffset = bOffset + bottomDxRIndex * imagesStrides[1]; + const dxRLerp = dxR - topDxRIndex; + const inverseDxRLerp = 1 - dxRLerp; + for (let c = 0; c < yWidth; c++) { + const dxC = c * widthScale; + const leftDxCIndex = Math.floor(dxC); + const rightDxCIndex = Math.min(Math.ceil(dxC), xWidth - 1); + const dxCLerp = dxC - leftDxCIndex; + const inverseDxCLerp = 1 - dxCLerp; + const topLeftRCOffset = topDxROffset + leftDxCIndex * imagesStrides[2]; + const topRightRCOffset = topDxROffset + rightDxCIndex * imagesStrides[2]; + const bottomLeftRCOffset = bottomDxROffset + leftDxCIndex * imagesStrides[2]; + const bottomRightRCOffset = bottomDxROffset + rightDxCIndex * imagesStrides[2]; + const inverseDxRLerpTimesInverseDxCLerp = inverseDxRLerp * inverseDxCLerp; + const inverseDxRLerpTimesDxCLerp = inverseDxRLerp * dxCLerp; + const dxRLerpTimesInverseDxCLerp = dxRLerp * inverseDxCLerp; + const dxRLerpTimesDxCLerp = dxRLerp * dxCLerp; + for (let d = 0; d < depth; d++) { + const dyVal = dyValues[offset++]; + output[topLeftRCOffset + d] += dyVal * inverseDxRLerpTimesInverseDxCLerp; + output[topRightRCOffset + d] += dyVal * inverseDxRLerpTimesDxCLerp; + output[bottomLeftRCOffset + d] += dyVal * dxRLerpTimesInverseDxCLerp; + output[bottomRightRCOffset + d] += dyVal * dxRLerpTimesDxCLerp; + } + } + } + } + return backend2.makeTensorInfo([batch, xWidth, xHeight, depth], "float32", output); + } + var resizeBilinearGradConfig2 = { + kernelName: ResizeBilinearGrad, + backendName: "cpu", + kernelFunc: resizeBilinearGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeNearestNeighbor.js + init_define_BUILD_VERSION(); + function resizeNearestNeighbor2(args) { + const { inputs, backend: backend2, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + assertNotComplex(images, "resizeNearestNeighbor"); + const imagesStrides = util_exports.computeStrides(images.shape); + const [newHeight, newWidth] = size; + const [batch, oldHeight, oldWidth, numChannels] = images.shape; + const xValues = backend2.data.get(images.dataId).values; + const output = new Float32Array(batch * newHeight * newWidth * numChannels); + const effectiveInputSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutputSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + const effectiveRowSizeRatio = effectiveInputSize[0] / effectiveOutputSize[0]; + const effectiveColSizeRatio = effectiveInputSize[1] / effectiveOutputSize[1]; + let outputOffset = 0; + for (let b = 0; b < batch; b++) { + const batchOffset = b * imagesStrides[0]; + for (let r = 0; r < newHeight; r++) { + const sourceFracRow = halfPixelCenters ? effectiveRowSizeRatio * (r + 0.5) : effectiveRowSizeRatio * r; + let sourceNearestRow = Math.min(oldHeight - 1, alignCorners ? Math.round(sourceFracRow) : Math.floor(sourceFracRow)); + if (halfPixelCenters) { + sourceNearestRow = Math.max(0, sourceNearestRow); + } + const rowOffset = batchOffset + sourceNearestRow * imagesStrides[1]; + for (let c = 0; c < newWidth; c++) { + const sourceFracCol = halfPixelCenters ? effectiveColSizeRatio * (c + 0.5) : effectiveColSizeRatio * c; + let sourceNearestCol = Math.min(oldWidth - 1, alignCorners ? Math.round(sourceFracCol) : Math.floor(sourceFracCol)); + if (halfPixelCenters) { + sourceNearestCol = Math.max(0, sourceNearestCol); + } + const colOffset = rowOffset + sourceNearestCol * imagesStrides[2]; + for (let d = 0; d < numChannels; d++) { + const newVal = xValues[colOffset + d]; + output[outputOffset++] = newVal; + } + } + } + } + return backend2.makeTensorInfo([batch, newHeight, newWidth, numChannels], images.dtype, output); + } + var resizeNearestNeighborConfig = { + kernelName: ResizeNearestNeighbor, + backendName: "cpu", + kernelFunc: resizeNearestNeighbor2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeNearestNeighborGrad.js + init_define_BUILD_VERSION(); + function resizeNearestNeighborGrad(args) { + const { inputs, backend: backend2, attrs } = args; + const { images, dy } = inputs; + const { alignCorners } = attrs; + assertNotComplex([dy, images], "resizeNearestNeighborGrad"); + const imagesStrides = util_exports.computeStrides(images.shape); + const dyStrides = util_exports.computeStrides(dy.shape); + const [batch, xHeight, xWidth, depth] = images.shape; + const [, yHeight, yWidth] = dy.shape; + const output = new Float32Array(batch * xHeight * xWidth * depth); + const dyValues = backend2.data.get(dy.dataId).values; + const effectiveXSize = [ + alignCorners && yHeight > 1 ? xHeight - 1 : xHeight, + alignCorners && yWidth > 1 ? xWidth - 1 : xWidth + ]; + const effectiveYSize = [ + alignCorners && yHeight > 1 ? yHeight - 1 : yHeight, + alignCorners && yWidth > 1 ? yWidth - 1 : yWidth + ]; + const heightScale = effectiveXSize[0] / effectiveYSize[0]; + const widthScale = effectiveXSize[1] / effectiveYSize[1]; + const invHeightScale = 1 / heightScale; + const invWidthScale = 1 / widthScale; + const winHeight = Math.ceil(invHeightScale) * 2 + 2; + const winWidth = Math.ceil(invWidthScale) * 2 + 2; + for (let b = 0; b < batch; b++) { + const batchOffset = b * imagesStrides[0]; + for (let r = 0; r < xHeight; r++) { + const rowOffset = batchOffset + r * imagesStrides[1]; + const startRLerp = Math.floor(r * invHeightScale); + const startDyR = Math.floor(startRLerp - winHeight / 2); + for (let c = 0; c < xWidth; c++) { + const colOffset = rowOffset + c * imagesStrides[2]; + const startCLerp = Math.floor(c * invWidthScale); + const startDyC = Math.floor(startCLerp - winWidth / 2); + for (let d = 0; d < depth; d++) { + let accum = 0; + for (let dyRIndex = 0; dyRIndex < winHeight; dyRIndex++) { + const dyR = dyRIndex + startDyR; + if (dyR < 0 || dyR >= yHeight) { + continue; + } + const dyROffset = batchOffset + dyR * dyStrides[1]; + const sourceFracRow = dyR * heightScale; + const sourceNearestRow = Math.min(xHeight - 1, alignCorners ? Math.round(sourceFracRow) : Math.floor(sourceFracRow)); + if (r !== sourceNearestRow) { + continue; + } + for (let dyCIndex = 0; dyCIndex < winWidth; dyCIndex++) { + const dyC = dyCIndex + startDyC; + if (dyC < 0 || dyC >= yWidth) { + continue; + } + const dyCOffset = dyROffset + dyC * dyStrides[2]; + const sourceFracCol = dyC * widthScale; + const sourceNearestCol = Math.min(xWidth - 1, alignCorners ? Math.round(sourceFracCol) : Math.floor(sourceFracCol)); + if (c === sourceNearestCol) { + accum += dyValues[dyCOffset + d]; + } + } + } + output[colOffset + d] = accum; + } + } + } + } + return backend2.makeTensorInfo(images.shape, images.dtype, output); + } + var resizeNearestNeighborGradConfig2 = { + kernelName: ResizeNearestNeighborGrad, + backendName: "cpu", + kernelFunc: resizeNearestNeighborGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reverse.js + init_define_BUILD_VERSION(); + function reverse2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { dims } = attrs; + assertNotComplex(x, "reverse"); + const xRank = x.shape.length; + const $dims = util_exports.parseAxisParam(dims, x.shape); + if (xRank === 0) { + return identity({ inputs: { x }, backend: backend2 }); + } + const outBuf = new TensorBuffer(x.shape, x.dtype); + const xBuf = backend2.bufferSync(x); + for (let i = 0; i < outBuf.size; i++) { + const outLoc = outBuf.indexToLoc(i); + const inLoc = outLoc.slice(); + $dims.forEach((d) => inLoc[d] = x.shape[d] - 1 - inLoc[d]); + outBuf.set(xBuf.get(...inLoc), ...outLoc); + } + return backend2.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values); + } + var reverseConfig = { + kernelName: Reverse, + backendName: "cpu", + kernelFunc: reverse2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RotateWithOffset.js + init_define_BUILD_VERSION(); + var rotateWithOffsetConfig = { + kernelName: RotateWithOffset, + backendName: "cpu", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { image: image2 } = inputs; + const { radians, fillValue, center } = attrs; + const cpuBackend = backend2; + const output = util_exports.getTypedArrayFromDType(image2.dtype, util_exports.sizeFromShape(image2.shape)); + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const [centerX, centerY] = backend_util_exports.getImageCenter(center, imageHeight, imageWidth); + const fullOpacityValue = 255; + const sinFactor = Math.sin(radians); + const cosFactor = Math.cos(radians); + const imageVals = cpuBackend.data.get(image2.dataId).values; + for (let batchIdx = 0; batchIdx < batch; batchIdx++) { + const batchOffset = batchIdx * imageWidth * imageHeight * numChannels; + for (let row = 0; row < imageHeight; row++) { + const rowOffset = row * (imageWidth * numChannels); + for (let col = 0; col < imageWidth; col++) { + const colOffset = col * numChannels; + for (let channel = 0; channel < numChannels; channel++) { + const coords2 = [batch, row, col, channel]; + const x = coords2[2]; + const y = coords2[1]; + let coordX = (x - centerX) * cosFactor - (y - centerY) * sinFactor; + let coordY = (x - centerX) * sinFactor + (y - centerY) * cosFactor; + coordX = Math.round(coordX + centerX); + coordY = Math.round(coordY + centerY); + let outputValue = fillValue; + if (typeof fillValue !== "number") { + if (channel === 3) { + outputValue = fullOpacityValue; + } else { + outputValue = fillValue[channel]; + } + } + if (coordX >= 0 && coordX < imageWidth && coordY >= 0 && coordY < imageHeight) { + const rotatedRowOffset = coordY * (imageWidth * numChannels); + const rotatedColOffset = coordX * numChannels; + const imageIdx = batchOffset + rotatedRowOffset + rotatedColOffset + channel; + outputValue = imageVals[imageIdx]; + } + const outIdx = batchOffset + rowOffset + colOffset + channel; + output[outIdx] = outputValue; + } + } + } + } + const dataId = cpuBackend.write(output, image2.shape, image2.dtype); + return { dataId, shape: image2.shape, dtype: image2.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Round.js + init_define_BUILD_VERSION(); + var round3 = unaryKernelFunc(Round, (xi) => { + const base = Math.floor(xi); + if (xi - base < 0.5) { + return Math.floor(xi); + } else if (xi - base > 0.5) { + return Math.ceil(xi); + } else { + if (base % 2 === 0) { + return base; + } else { + return base + 1; + } + } + }); + var roundConfig = { + kernelName: Round, + backendName: "cpu", + kernelFunc: round3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ScatterNd.js + init_define_BUILD_VERSION(); + function scatterNd(args) { + const { inputs, backend: backend2, attrs } = args; + const { indices, updates } = inputs; + const { shape } = attrs; + const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util_exports.calculateShapes(updates, indices, shape); + const sumDupeIndices = true; + const indicesBuf = backend2.bufferSync(indices); + const updatesBuf = backend2.bufferSync(updates); + const outBuf = scatterImpl(indicesBuf, updatesBuf, shape, outputSize, sliceSize, numUpdates, sliceRank, strides, 0, sumDupeIndices); + return backend2.makeTensorInfo(shape, outBuf.dtype, outBuf.values); + } + var scatterNdConfig = { + kernelName: ScatterNd, + backendName: "cpu", + kernelFunc: scatterNd + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SearchSorted.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SearchSorted_impl.js + init_define_BUILD_VERSION(); + function lowerBound(array2, value) { + let left = 0; + let right = array2.length; + let mid = 0; + while (left < right) { + mid = Math.floor((left + right) / 2); + if (array2[mid] < value) { + left = mid + 1; + } else { + right = mid; + } + } + return right; + } + function upperBound(array2, value) { + let left = 0; + let right = array2.length; + let mid = 0; + while (left < right) { + mid = Math.floor((left + right) / 2); + if (array2[mid] <= value) { + left = mid + 1; + } else { + right = mid; + } + } + return right; + } + function searchSortedImpl(sortedInputs, values, batchSize, numInputs, numValues, side) { + const output = util_exports.getArrayFromDType("int32", batchSize * numValues); + for (let b = 0; b < batchSize; ++b) { + const sortedInputsSlice = sortedInputs.slice(b * numInputs, (b + 1) * numInputs); + const outputOffset = b * numValues; + for (let i = 0; i < numValues; ++i) { + output[outputOffset + i] = side === "left" ? lowerBound(sortedInputsSlice, values[i + outputOffset]) : upperBound(sortedInputsSlice, values[i + outputOffset]); + } + } + return output; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SearchSorted.js + function searchSorted(args) { + const { inputs, backend: backend2, attrs } = args; + const { sortedSequence, values } = inputs; + const { side } = attrs; + const $sortedSequence = backend2.data.get(sortedSequence.dataId).values; + const $values = backend2.data.get(values.dataId).values; + const output = searchSortedImpl($sortedSequence, $values, sortedSequence.shape[0], sortedSequence.shape[1], values.shape[1], side); + return backend2.makeTensorInfo(values.shape, "int32", output); + } + var searchSortedConfig = { + kernelName: SearchSorted, + backendName: "cpu", + kernelFunc: searchSorted + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Select.js + init_define_BUILD_VERSION(); + function select2(args) { + const { inputs, backend: backend2 } = args; + const { condition, t, e } = inputs; + assertNotComplex([condition, t, e], "select"); + const conditionRank = condition.shape.length; + const values = backend2.data.get(condition.dataId).values; + const tValues = backend2.data.get(t.dataId).values; + const eValues = backend2.data.get(e.dataId).values; + const resultDtype = upcastType(t.dtype, e.dtype); + const newValues = util_exports.makeZerosTypedArray(util_exports.sizeFromShape(t.shape), resultDtype); + let index = 0; + const offset = conditionRank === 0 || conditionRank > 1 || t.shape.length === 1 ? 1 : util_exports.sizeFromShape(t.shape.slice(1)); + for (let i = 0; i < values.length; i++) { + for (let j = 0; j < offset; j++) { + if (values[i] === 1) { + newValues[index++] = tValues[i]; + } else { + newValues[index++] = eValues[i]; + } + } + } + return backend2.makeTensorInfo(t.shape, resultDtype, newValues); + } + var selectConfig = { + kernelName: Select, + backendName: "cpu", + kernelFunc: select2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Selu.js + init_define_BUILD_VERSION(); + var scaleAlpha = backend_util_exports.SELU_SCALEALPHA; + var scale = backend_util_exports.SELU_SCALE; + var selu2 = unaryKernelFunc(Selu, (xi) => { + if (xi >= 0) { + return scale * xi; + } else { + return scaleAlpha * (Math.exp(xi) - 1); + } + }); + var seluConfig = { + kernelName: Selu, + backendName: "cpu", + kernelFunc: selu2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sign.js + init_define_BUILD_VERSION(); + var sign2 = unaryKernelFunc(Sign, (xi) => { + if (xi < 0) { + return -1; + } else if (xi > 0) { + return 1; + } else { + return 0; + } + }); + var signConfig = { + kernelName: Sign, + backendName: "cpu", + kernelFunc: sign2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sin.js + init_define_BUILD_VERSION(); + var sin2 = unaryKernelFunc(Sin, (xi) => Math.sin(xi)); + var sinConfig = { + kernelName: Sin, + backendName: "cpu", + kernelFunc: sin2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sinh.js + init_define_BUILD_VERSION(); + var sinh2 = unaryKernelFunc(Sinh, (xi) => Math.sinh(xi)); + var sinhConfig = { + kernelName: Sinh, + backendName: "cpu", + kernelFunc: sinh2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Softplus.js + init_define_BUILD_VERSION(); + var epsilon2 = 11920928955078125e-23; + var threshold2 = Math.log(epsilon2) + 2; + var softplus2 = unaryKernelFunc(Softplus, (xi) => { + const tooLarge = xi > -threshold2; + const tooSmall = xi < threshold2; + const expX = Math.exp(xi); + let result; + if (tooSmall) { + result = expX; + } else if (tooLarge) { + result = xi; + } else { + result = Math.log(1 + expX); + } + return result; + }); + var softplusConfig = { + kernelName: Softplus, + backendName: "cpu", + kernelFunc: softplus2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SpaceToBatchND.js + init_define_BUILD_VERSION(); + function spaceToBatchND2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, paddings } = attrs; + assertNotComplex([x], "spaceToBatchND"); + const prod5 = util_exports.sizeFromShape(blockShape); + const completePaddings = [[0, 0]]; + completePaddings.push(...paddings); + for (let i = 1 + blockShape.length; i < x.shape.length; ++i) { + completePaddings.push([0, 0]); + } + const paddedX = padV2Config.kernelFunc({ + inputs: { x }, + backend: backend2, + attrs: { paddings: completePaddings, constantValue: 0 } + }); + const reshapedPaddedShape = backend_util_exports.getReshaped(paddedX.shape, blockShape, prod5, false); + const permutedReshapedPaddedPermutation = backend_util_exports.getPermuted(reshapedPaddedShape.length, blockShape.length, false); + const flattenShape = backend_util_exports.getReshapedPermuted(paddedX.shape, blockShape, prod5, false); + const reshapeInputs = { x: paddedX }; + const reshapeAttrs = { shape: reshapedPaddedShape }; + const paddedXReshaped = reshape2({ inputs: reshapeInputs, backend: backend2, attrs: reshapeAttrs }); + const transposeInputs = { x: paddedXReshaped }; + const transposeAttrs = { perm: permutedReshapedPaddedPermutation }; + const paddedXT = transpose2({ inputs: transposeInputs, backend: backend2, attrs: transposeAttrs }); + const resultReshapeInputs = { x: paddedXT }; + const resultReshapeAttrs = { shape: flattenShape }; + const result = reshape2({ inputs: resultReshapeInputs, backend: backend2, attrs: resultReshapeAttrs }); + backend2.disposeIntermediateTensorInfo(paddedX); + backend2.disposeIntermediateTensorInfo(paddedXReshaped); + backend2.disposeIntermediateTensorInfo(paddedXT); + return result; + } + var spaceToBatchNDConfig = { + kernelName: SpaceToBatchND, + backendName: "cpu", + kernelFunc: spaceToBatchND2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseFillEmptyRows.js + init_define_BUILD_VERSION(); + function sparseFillEmptyRows(args) { + const { inputs, backend: backend2 } = args; + const { indices, values, denseShape, defaultValue } = inputs; + if (denseShape.shape.length !== 1) { + throw new Error(`Dense shape must be a vector, saw: + ${denseShape.shape}`); + } + if (indices.shape.length !== 2) { + throw new Error(`Indices must be a matrix, saw: + ${indices.shape}`); + } + if (values.shape.length !== 1) { + throw new Error(`Values must be a vector, saw: + ${values.shape}`); + } + if (defaultValue.shape.length !== 0) { + throw new Error(`Default value must be a scalar, saw: + ${defaultValue.shape}`); + } + const $indices = backend2.data.get(indices.dataId).values; + const $values = backend2.data.get(values.dataId).values; + const $denseShape = backend2.data.get(denseShape.dataId).values; + const $defaultValue = backend2.data.get(defaultValue.dataId).values[0]; + const [outputIndices, outputIndicesShape, outputValues, emptyRowIndicator, reverseIndexMap] = sparseFillEmptyRowsImpl($indices, indices.shape, indices.dtype, $values, values.dtype, $denseShape, $defaultValue); + return [ + backend2.makeTensorInfo(outputIndicesShape, indices.dtype, outputIndices), + backend2.makeTensorInfo([outputIndicesShape[0]], values.dtype, outputValues), + backend2.makeTensorInfo([emptyRowIndicator.length], "bool", new Uint8Array(emptyRowIndicator.map((value) => Number(value)))), + backend2.makeTensorInfo([reverseIndexMap.length], indices.dtype, new Int32Array(reverseIndexMap)) + ]; + } + var sparseFillEmptyRowsConfig = { + kernelName: SparseFillEmptyRows, + backendName: "cpu", + kernelFunc: sparseFillEmptyRows + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseReshape.js + init_define_BUILD_VERSION(); + function sparseReshape(args) { + const { inputs, backend: backend2 } = args; + const { inputIndices, inputShape, newShape } = inputs; + if (inputIndices.shape.length !== 2) { + throw new Error(`Input indices should be a matrix but received shape + ${inputIndices.shape}`); + } + if (inputShape.shape.length !== 1) { + throw new Error(`Input shape should be a vector but received shape + ${inputShape.shape}`); + } + if (newShape.shape.length !== 1) { + throw new Error(`Target shape should be a vector but received shape ${newShape.shape}`); + } + const $inputShape = Array.from(backend2.data.get(inputShape.dataId).values); + const $inputIndices = backend2.data.get(inputIndices.dataId).values; + const targetShape = Array.from(backend2.data.get(newShape.dataId).values); + const [newIndices, indicesShape, outputShape] = sparseReshapeImpl($inputIndices, inputIndices.shape, inputIndices.dtype, $inputShape, targetShape); + return [ + backend2.makeTensorInfo(indicesShape, inputIndices.dtype, newIndices), + backend2.makeTensorInfo([outputShape.length], newShape.dtype, new Int32Array(outputShape)) + ]; + } + var sparseReshapeConfig = { + kernelName: SparseReshape, + backendName: "cpu", + kernelFunc: sparseReshape + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseSegmentMean.js + init_define_BUILD_VERSION(); + function sparseSegmentMean(args) { + const { inputs, backend: backend2 } = args; + const { data, indices, segmentIds } = inputs; + if (data.shape.length < 1) { + throw new Error(`Data should be at least 1 dimensional but received scalar`); + } + if (indices.shape.length !== 1) { + throw new Error(`Indices should be a vector but received shape + ${indices.shape}`); + } + if (segmentIds.shape.length !== 1) { + throw new Error(`Segment ids should be a vector but received shape + ${segmentIds.shape}`); + } + if (indices.shape[0] !== segmentIds.shape[0]) { + throw new Error(`segmentIds and indices should have same size.`); + } + const $data = backend2.data.get(data.dataId).values; + const $indices = backend2.data.get(indices.dataId).values; + const $segmentIds = backend2.data.get(segmentIds.dataId).values; + const [outputData, outputDataShape] = sparseSegmentReductionImpl($data, data.shape, data.dtype, $indices, $segmentIds, true); + return backend2.makeTensorInfo(outputDataShape, data.dtype, outputData); + } + var sparseSegmentMeanConfig = { + kernelName: SparseSegmentMean, + backendName: "cpu", + kernelFunc: sparseSegmentMean + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseSegmentSum.js + init_define_BUILD_VERSION(); + function sparseSegmentSum(args) { + const { inputs, backend: backend2 } = args; + const { data, indices, segmentIds } = inputs; + if (data.shape.length < 1) { + throw new Error(`Data should be at least 1 dimensional but received scalar`); + } + if (indices.shape.length !== 1) { + throw new Error(`Indices should be a vector but received shape + ${indices.shape}`); + } + if (segmentIds.shape.length !== 1) { + throw new Error(`Segment ids should be a vector but received shape + ${segmentIds.shape}`); + } + if (indices.shape[0] !== segmentIds.shape[0]) { + throw new Error(`segmentIds and indices should have same size.`); + } + const $data = backend2.data.get(data.dataId).values; + const $indices = backend2.data.get(indices.dataId).values; + const $segmentIds = backend2.data.get(segmentIds.dataId).values; + const [outputData, outputDataShape] = sparseSegmentReductionImpl($data, data.shape, data.dtype, $indices, $segmentIds); + return backend2.makeTensorInfo(outputDataShape, data.dtype, outputData); + } + var sparseSegmentSumConfig = { + kernelName: SparseSegmentSum, + backendName: "cpu", + kernelFunc: sparseSegmentSum + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseToDense.js + init_define_BUILD_VERSION(); + function sparseToDense(args) { + const { inputs, backend: backend2, attrs } = args; + const { sparseIndices, sparseValues, defaultValue } = inputs; + const { outputShape } = attrs; + const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util_exports.calculateShapes(sparseValues, sparseIndices, outputShape); + const sumDupeIndices = false; + const indicesBuf = backend2.bufferSync(sparseIndices); + let outBuf; + switch (sparseValues.dtype) { + case "bool": { + const updatesBuf = backend2.bufferSync(sparseValues); + const $defaultValue = Boolean(backend2.data.get(defaultValue.dataId).values[0]); + outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices); + break; + } + case "float32": { + const updatesBuf = backend2.bufferSync(sparseValues); + const $defaultValue = backend2.data.get(defaultValue.dataId).values[0]; + outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices); + break; + } + case "int32": { + const updatesBuf = backend2.bufferSync(sparseValues); + const $defaultValue = backend2.data.get(defaultValue.dataId).values[0]; + outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices); + break; + } + case "string": { + const updatesBuf = backend2.bufferSync(sparseValues); + const $defaultValue = util_exports.decodeString(backend2.data.get(defaultValue.dataId).values[0]); + outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices); + break; + } + default: + throw new Error(`Unsupported type ${sparseValues.dtype}`); + } + return backend2.makeTensorInfo(outputShape, outBuf.dtype, outBuf.values); + } + var sparseToDenseConfig = { + kernelName: SparseToDense, + backendName: "cpu", + kernelFunc: sparseToDense + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SplitV.js + init_define_BUILD_VERSION(); + function splitV(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { numOrSizeSplits, axis } = attrs; + const $axis = util_exports.parseAxisParam(axis, x.shape)[0]; + const splitSizes = backend_util_exports.prepareSplitSize(x, numOrSizeSplits, $axis); + const begin = new Array(x.shape.length).fill(0); + const size = x.shape.slice(); + return splitSizes.map((s) => { + const sliceSize = [...size]; + sliceSize[$axis] = s; + const sliceT = slice2({ inputs: { x }, backend: backend2, attrs: { begin, size: sliceSize } }); + begin[$axis] += s; + return sliceT; + }); + } + var splitVConfig = { + kernelName: SplitV, + backendName: "cpu", + kernelFunc: splitV + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Square.js + init_define_BUILD_VERSION(); + var squareConfig = { + kernelName: Square, + backendName: "cpu", + kernelFunc: ({ inputs, backend: backend2 }) => { + const { x } = inputs; + const cpuBackend = backend2; + assertNotComplex(x, "square"); + const values = cpuBackend.data.get(x.dataId).values; + const newValues = new Float32Array(values.length); + for (let i = 0; i < values.length; ++i) { + const value = values[i]; + newValues[i] = value * value; + } + const dataId = cpuBackend.write(newValues, x.shape, x.dtype); + return { dataId, shape: x.shape, dtype: x.dtype }; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Step.js + init_define_BUILD_VERSION(); + var step2 = unaryKernelFunc(Step, (xi, attrs) => { + const stepAttrs = attrs; + if (isNaN(xi)) { + return NaN; + } else { + return xi > 0 ? 1 : stepAttrs.alpha; + } + }); + var stepConfig = { + kernelName: Step, + backendName: "cpu", + kernelFunc: step2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StridedSlice.js + init_define_BUILD_VERSION(); + function stridedSlice2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask } = attrs; + assertNotComplex(x, "stridedSlice"); + const { finalShapeSparse, finalShape, isIdentity, sliceDim0, isSimpleSlice, begin: $begin, end: $end, strides: $strides } = slice_util_exports.sliceInfo(x.shape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask); + let result; + if (isIdentity) { + result = reshape2({ inputs: { x }, backend: backend2, attrs: { shape: finalShape } }); + } else if (sliceDim0 || isSimpleSlice) { + util_exports.assert(x.shape.length >= 1, () => `Input must have rank at least 1, got: ${x.shape.length}`); + const size = slice_util_exports.computeOutShape($begin, $end, $strides); + const sliced = slice2({ inputs: { x }, backend: backend2, attrs: { begin: $begin, size } }); + result = reshape2({ inputs: { x: sliced }, backend: backend2, attrs: { shape: finalShape } }); + backend2.disposeIntermediateTensorInfo(sliced); + } else { + const xBuf = backend2.bufferSync(x); + const outBuf = stridedSliceImpl(finalShapeSparse, xBuf, $strides, $begin); + result = backend2.makeTensorInfo(finalShape, outBuf.dtype, outBuf.values); + } + return result; + } + var stridedSliceConfig = { + kernelName: StridedSlice, + backendName: "cpu", + kernelFunc: stridedSlice2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringNGrams.js + init_define_BUILD_VERSION(); + function stringNGrams(args) { + const { inputs, backend: backend2, attrs } = args; + const { separator, nGramWidths, leftPad, rightPad: rightPad2, padWidth, preserveShortSequences } = attrs; + const { data, dataSplits } = inputs; + const $data = backend2.data.get(data.dataId).values; + const $dataSplits = backend2.data.get(dataSplits.dataId).values; + const [nGrams, nGramsSplits] = stringNGramsImpl($data, $dataSplits, separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences); + return [ + backend2.makeTensorInfo([nGrams.length], "string", nGrams), + backend2.makeTensorInfo(dataSplits.shape, "int32", nGramsSplits) + ]; + } + var stringNGramsConfig = { + kernelName: StringNGrams, + backendName: "cpu", + kernelFunc: stringNGrams + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringSplit.js + init_define_BUILD_VERSION(); + function stringSplit(args) { + const { inputs, backend: backend2, attrs } = args; + const { skipEmpty } = attrs; + const { input: input2, delimiter } = inputs; + if (input2.dtype !== "string") { + throw new Error("Input must be of datatype string"); + } + if (input2.shape.length !== 1) { + throw new Error(`Input must be a vector, got shape: ${input2.shape}`); + } + if (delimiter.shape.length !== 0) { + throw new Error(`Delimiter must be a scalar, got shape: ${delimiter.shape}`); + } + const $input = backend2.data.get(input2.dataId).values; + const $delimiter = backend2.data.get(delimiter.dataId).values[0]; + const [indices, values, shape] = stringSplitImpl($input, $delimiter, skipEmpty); + const outputSize = values.length; + return [ + backend2.makeTensorInfo([outputSize, 2], "int32", indices), + backend2.makeTensorInfo([outputSize], "string", values), + backend2.makeTensorInfo([2], "int32", new Int32Array(shape)) + ]; + } + var stringSplitConfig = { + kernelName: StringSplit, + backendName: "cpu", + kernelFunc: stringSplit + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringToHashBucketFast.js + init_define_BUILD_VERSION(); + function stringToHashBucketFast(args) { + const { inputs, backend: backend2, attrs } = args; + const { numBuckets } = attrs; + const { input: input2 } = inputs; + if (input2.dtype !== "string") { + throw new Error("Input must be of datatype string"); + } + if (numBuckets <= 0) { + throw new Error(`Number of buckets must be at least 1`); + } + const $input = backend2.data.get(input2.dataId).values; + const output = stringToHashBucketFastImpl($input, numBuckets); + return backend2.makeTensorInfo(input2.shape, "int32", output); + } + var stringToHashBucketFastConfig = { + kernelName: StringToHashBucketFast, + backendName: "cpu", + kernelFunc: stringToHashBucketFast + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tan.js + init_define_BUILD_VERSION(); + var tan2 = unaryKernelFunc(Tan, (xi) => Math.tan(xi)); + var tanConfig = { + kernelName: Tan, + backendName: "cpu", + kernelFunc: tan2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tanh.js + init_define_BUILD_VERSION(); + var tanh3 = unaryKernelFunc(Tanh, (xi) => Math.tanh(xi)); + var tanhConfig = { + kernelName: Tanh, + backendName: "cpu", + kernelFunc: tanh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tile.js + init_define_BUILD_VERSION(); + function tile3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { reps } = attrs; + assertNotComplex(x, "tile"); + const outBuf = tileImpl(backend2.bufferSync(x), reps); + return backend2.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values); + } + var tileConfig = { + kernelName: Tile, + backendName: "cpu", + kernelFunc: tile3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/TopK.js + init_define_BUILD_VERSION(); + function topK(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { k, sorted } = attrs; + assertNotComplex(x, "topk"); + const xVals = backend2.data.get(x.dataId).values; + const [allTopKVals, allTopKIndices] = topKImpl(xVals, x.shape, x.dtype, k, sorted); + return [ + backend2.makeTensorInfo(allTopKVals.shape, allTopKVals.dtype, allTopKVals.values), + backend2.makeTensorInfo(allTopKIndices.shape, allTopKIndices.dtype, allTopKIndices.values) + ]; + } + var topKConfig = { + kernelName: TopK, + backendName: "cpu", + kernelFunc: topK + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transform.js + init_define_BUILD_VERSION(); + function transform2(args) { + const { inputs, attrs, backend: backend2 } = args; + const { image: image2, transforms } = inputs; + const { interpolation, fillMode, fillValue, outputShape } = attrs; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const [outHeight, outWidth] = outputShape != null ? outputShape : [imageHeight, imageWidth]; + const outShape = [batch, outHeight, outWidth, numChannels]; + const strides = util_exports.computeStrides(image2.shape); + const batchStride = strides[0]; + const rowStride = strides[1]; + const colStride = strides[2]; + const outVals = util_exports.getTypedArrayFromDType(image2.dtype, util_exports.sizeFromShape(outShape)); + outVals.fill(fillValue); + const imageVals = backend2.data.get(image2.dataId).values; + const transformVals = backend2.data.get(transforms.dataId).values; + for (let b = 0; b < batch; ++b) { + const transform5 = transforms.shape[0] === 1 ? transformVals : transformVals.subarray(b * 8, b * 8 + 8); + for (let outY = 0; outY < outHeight; ++outY) { + for (let outX = 0; outX < outWidth; ++outX) { + for (let channel = 0; channel < numChannels; ++channel) { + let val; + const projection = transform5[6] * outX + transform5[7] * outY + 1; + if (projection === 0) { + continue; + } + const inX = (transform5[0] * outX + transform5[1] * outY + transform5[2]) / projection; + const inY = (transform5[3] * outX + transform5[4] * outY + transform5[5]) / projection; + const x = mapCoord(inX, imageWidth, fillMode); + const y = mapCoord(inY, imageHeight, fillMode); + switch (interpolation) { + case "nearest": + val = nearestInterpolation(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, b, y, x, channel, fillValue); + break; + case "bilinear": + val = bilinearInterpolation(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, b, y, x, channel, fillValue); + break; + default: + throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${interpolation}`); + } + const ind = b * batchStride + outY * rowStride + outX * colStride + channel; + outVals[ind] = val; + } + } + } + return backend2.makeTensorInfo(outShape, image2.dtype, outVals); + } + const dataId = backend2.write(outVals, outShape, image2.dtype); + return { dataId, shape: image2.shape, dtype: image2.dtype }; + } + var transformConfig = { + kernelName: Transform, + backendName: "cpu", + kernelFunc: transform2 + }; + function mapCoord(outCoord, len, mode) { + switch (mode) { + case "reflect": + return mapCoordReflect(outCoord, len); + case "wrap": + return mapCoordWrap(outCoord, len); + case "nearest": + return mapCoordNearest(outCoord, len); + case "constant": + default: + return mapCoordConstant(outCoord, len); + } + } + function mapCoordReflect(outCoord, len) { + let inCoord = outCoord; + if (inCoord < 0) { + if (len <= 1) { + inCoord = 0; + } else { + const sz2 = 2 * len; + if (inCoord < sz2) { + inCoord = sz2 * Math.trunc(-inCoord / sz2) + inCoord; + } + inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1; + } + } else if (inCoord > len - 1) { + if (len <= 1) { + inCoord = 0; + } else { + const sz2 = 2 * len; + inCoord -= sz2 * Math.trunc(inCoord / sz2); + if (inCoord >= len) { + inCoord = sz2 - inCoord - 1; + } + } + } + return util_exports.clamp(0, inCoord, len - 1); + } + function mapCoordWrap(outCoord, len) { + let inCoord = outCoord; + if (inCoord < 0) { + if (len <= 1) { + inCoord = 0; + } else { + const sz = len - 1; + inCoord += len * (Math.trunc(-inCoord / sz) + 1); + } + } else if (inCoord > len - 1) { + if (len <= 1) { + inCoord = 0; + } else { + const sz = len - 1; + inCoord -= len * Math.trunc(inCoord / sz); + } + } + return util_exports.clamp(0, inCoord, len - 1); + } + function mapCoordConstant(outCoord, len) { + return outCoord; + } + function mapCoordNearest(outCoord, len) { + return util_exports.clamp(0, outCoord, len - 1); + } + function readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, y, x, channel, fillValue) { + const ind = batch * batchStride + y * rowStride + x * colStride + channel; + if (0 <= y && y < imageHeight && 0 <= x && x < imageWidth) { + return imageVals[ind]; + } else { + return fillValue; + } + } + function nearestInterpolation(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, y, x, channel, fillValue) { + const $y = Math.round(y); + const $x = Math.round(x); + return readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, $y, $x, channel, fillValue); + } + function bilinearInterpolation(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, y, x, channel, fillValue) { + const yFloor = Math.floor(y); + const xFloor = Math.floor(x); + const yCeil = yFloor + 1; + const xCeil = xFloor + 1; + const valueYFloor = (xCeil - x) * readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yFloor, xFloor, channel, fillValue) + (x - xFloor) * readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yFloor, xCeil, channel, fillValue); + const valueYCeil = (xCeil - x) * readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yCeil, xFloor, channel, fillValue) + (x - xFloor) * readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yCeil, xCeil, channel, fillValue); + return (yCeil - y) * valueYFloor + (y - yFloor) * valueYCeil; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unique.js + init_define_BUILD_VERSION(); + function unique3(args) { + const { inputs, attrs, backend: backend2 } = args; + const { axis } = attrs; + const { x } = inputs; + assertNotComplex(x, "unique"); + const values = backend2.data.get(x.dataId).values; + const { outputValues, outputShape, indices } = uniqueImpl(values, axis, x.shape, x.dtype); + return [ + backend2.makeTensorInfo(outputShape, x.dtype, outputValues), + backend2.makeTensorInfo([indices.length], "int32", indices) + ]; + } + var uniqueConfig = { + kernelName: Unique, + backendName: "cpu", + kernelFunc: unique3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unpack.js + init_define_BUILD_VERSION(); + function unpack(args) { + const { inputs, backend: backend2, attrs } = args; + const { value } = inputs; + let { axis } = attrs; + if (axis < 0) { + axis += value.shape.length; + } + const valueRank = value.shape.length; + const num = value.shape[axis]; + const outShape = new Array(valueRank - 1); + let outIndex = 0; + for (let i = 0; i < valueRank; i++) { + if (i !== axis) { + outShape[outIndex++] = value.shape[i]; + } + } + const begin = new Array(valueRank).fill(0); + const size = value.shape.slice(); + size[axis] = 1; + const res = new Array(num); + for (let i = 0; i < res.length; i++) { + begin[axis] = i; + const tempRes = slice2({ inputs: { x: value }, backend: backend2, attrs: { begin, size } }); + res[i] = reshape2({ inputs: { x: tempRes }, backend: backend2, attrs: { shape: outShape } }); + backend2.disposeIntermediateTensorInfo(tempRes); + } + return res; + } + var unpackConfig = { + kernelName: Unpack, + backendName: "cpu", + kernelFunc: unpack + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/UnsortedSegmentSum.js + init_define_BUILD_VERSION(); + function unsortedSegmentSum2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, segmentIds } = inputs; + const { numSegments } = attrs; + assertNotComplex(x, "unsortedSegmentSum"); + const xRank = x.shape.length; + const segmentIdsRank = segmentIds.shape.length; + const res = []; + const intermediates = []; + const numIters = xRank - segmentIdsRank; + let $segmentIds = segmentIds; + for (let i = 0; i < numIters; ++i) { + const expanded = expandDims3({ inputs: { input: $segmentIds }, backend: backend2, attrs: { dim: i + 1 } }); + $segmentIds = expanded; + intermediates.push(expanded); + } + for (let i = 0; i < numSegments; ++i) { + const scalarValue = util_exports.createScalarValue(i, "int32"); + const segmentId = backend2.makeTensorInfo([], "int32", scalarValue); + const mask = equal2({ inputs: { a: segmentId, b: $segmentIds }, backend: backend2 }); + const maskCasted = cast3({ inputs: { x: mask }, backend: backend2, attrs: { dtype: "float32" } }); + const mul2 = multiply({ inputs: { a: maskCasted, b: x }, backend: backend2 }); + const sumTensorInfo = sum3({ inputs: { x: mul2 }, backend: backend2, attrs: { axis: 0, keepDims: false } }); + res.push(sumTensorInfo); + intermediates.push(segmentId); + intermediates.push(mask); + intermediates.push(maskCasted); + intermediates.push(mul2); + intermediates.push(sumTensorInfo); + } + const result = pack({ inputs: res, backend: backend2, attrs: { axis: 0 } }); + intermediates.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var unsortedSegmentSumConfig = { + kernelName: UnsortedSegmentSum, + backendName: "cpu", + kernelFunc: unsortedSegmentSum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-cpu@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/register_all_kernels.js + var kernelConfigs = [ + _fusedMatMulConfig, + absConfig, + acosConfig, + acoshConfig, + addConfig, + addNConfig, + allConfig, + anyConfig, + argMaxConfig, + argMinConfig, + asinConfig, + asinhConfig, + atanConfig, + atan2Config, + atanhConfig, + avgPoolConfig, + avgPool3DConfig, + avgPool3DGradConfig2, + avgPoolGradConfig2, + batchMatMulConfig, + batchNormConfig, + batchToSpaceNDConfig, + bincountConfig, + broadcastArgsConfig, + castConfig, + ceilConfig, + clipByValueConfig, + complexConfig, + complexAbsConfig, + concatConfig, + conv2DConfig, + conv2DBackpropFilterConfig, + conv2DBackpropInputConfig, + conv3DConfig, + conv3DBackpropFilterV2Config, + conv3DBackpropInputV2Config, + cosConfig, + coshConfig, + cropAndResizeConfig, + cumprodConfig, + cumsumConfig, + denseBincountConfig, + depthToSpaceConfig, + depthwiseConv2dNativeConfig, + depthwiseConv2dNativeBackpropFilterConfig, + depthwiseConv2dNativeBackpropInputConfig, + diagConfig, + dilation2DConfig, + dilation2DBackpropFilterConfig, + dilation2DBackpropInputConfig, + einsumConfig, + eluConfig, + eluGradConfig2, + equalConfig, + erfConfig, + expConfig, + expandDimsConfig, + expm1Config, + fftConfig, + fillConfig, + flipLeftRightConfig, + floorConfig, + floorDivConfig, + fusedConv2DConfig, + fusedDepthwiseConv2DConfig, + gatherNdConfig, + gatherV2Config, + greaterConfig, + greaterEqualConfig, + identityConfig, + ifftConfig, + imagConfig, + isFiniteConfig, + isInfConfig, + isNaNConfig, + leakyReluConfig, + lessConfig, + lessEqualConfig, + linSpaceConfig, + logConfig, + log1pConfig, + logicalAndConfig, + logicalNotConfig, + logicalOrConfig, + LRNConfig, + LRNGradConfig, + maxConfig, + maximumConfig, + maxPoolConfig, + maxPool3DConfig, + maxPool3DGradConfig2, + maxPoolGradConfig2, + maxPoolWithArgmaxConfig, + meanConfig, + minConfig, + minimumConfig, + mirrorPadConfig, + modConfig, + multinomialConfig, + multiplyConfig, + negConfig, + nonMaxSuppressionV3Config, + nonMaxSuppressionV4Config, + nonMaxSuppressionV5Config, + notEqualConfig, + oneHotConfig, + onesLikeConfig, + packConfig, + padV2Config, + powConfig, + preluConfig, + prodConfig, + rangeConfig, + realConfig, + realDivConfig, + reciprocalConfig, + reluConfig, + relu6Config, + reshapeConfig, + resizeBilinearConfig, + resizeBilinearGradConfig2, + resizeNearestNeighborConfig, + resizeNearestNeighborGradConfig2, + reverseConfig, + rotateWithOffsetConfig, + roundConfig, + rsqrtConfig, + scatterNdConfig, + searchSortedConfig, + selectConfig, + seluConfig, + sigmoidConfig, + signConfig, + sinConfig, + sinhConfig, + sliceConfig, + softmaxConfig, + softplusConfig, + spaceToBatchNDConfig, + sparseFillEmptyRowsConfig, + sparseReshapeConfig, + sparseSegmentMeanConfig, + sparseSegmentSumConfig, + sparseToDenseConfig, + splitVConfig, + sqrtConfig, + squareConfig, + squaredDifferenceConfig, + stepConfig, + stridedSliceConfig, + stringNGramsConfig, + stringSplitConfig, + stringToHashBucketFastConfig, + subConfig, + sumConfig, + tanConfig, + tanhConfig, + tileConfig, + topKConfig, + transformConfig, + transposeConfig, + uniqueConfig, + unpackConfig, + unsortedSegmentSumConfig, + zerosLikeConfig + ]; + for (const kernelConfig of kernelConfigs) { + registerKernel(kernelConfig); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/base.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/backend_webgl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/flags_webgl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/webgl_util.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/canvas_util.js + init_define_BUILD_VERSION(); + var contexts = {}; + var WEBGL_ATTRIBUTES = { + alpha: false, + antialias: false, + premultipliedAlpha: false, + preserveDrawingBuffer: false, + depth: false, + stencil: false, + failIfMajorPerformanceCaveat: true + }; + function setWebGLContext(webGLVersion, gl) { + contexts[webGLVersion] = gl; + } + function getWebGLContext(webGLVersion, customCanvas) { + if (!(webGLVersion in contexts) || customCanvas != null) { + const newCtx = getWebGLRenderingContext(webGLVersion, customCanvas); + if (newCtx !== null) { + contexts[webGLVersion] = newCtx; + } else { + console.log("Could not get context for WebGL version", webGLVersion); + return null; + } + } + const gl = contexts[webGLVersion]; + if (gl == null || gl.isContextLost()) { + delete contexts[webGLVersion]; + return getWebGLContext(webGLVersion); + } + gl.disable(gl.DEPTH_TEST); + gl.disable(gl.STENCIL_TEST); + gl.disable(gl.BLEND); + gl.disable(gl.DITHER); + gl.disable(gl.POLYGON_OFFSET_FILL); + gl.disable(gl.SAMPLE_COVERAGE); + gl.enable(gl.SCISSOR_TEST); + gl.enable(gl.CULL_FACE); + gl.cullFace(gl.BACK); + return contexts[webGLVersion]; + } + function createCanvas(webGLVersion) { + if (typeof OffscreenCanvas !== "undefined" && webGLVersion === 2) { + return new OffscreenCanvas(300, 150); + } else if (typeof document !== "undefined") { + return document.createElement("canvas"); + } else { + throw new Error("Cannot create a canvas in this context"); + } + } + function getWebGLRenderingContext(webGLVersion, customCanvas) { + if (webGLVersion !== 1 && webGLVersion !== 2) { + throw new Error("Cannot get WebGL rendering context, WebGL is disabled."); + } + const canvas = customCanvas == null ? createCanvas(webGLVersion) : customCanvas; + canvas.addEventListener("webglcontextlost", (ev) => { + ev.preventDefault(); + delete contexts[webGLVersion]; + }, false); + if (webGLVersion === 1) { + return canvas.getContext("webgl", WEBGL_ATTRIBUTES) || canvas.getContext("experimental-webgl", WEBGL_ATTRIBUTES); + } + return canvas.getContext("webgl2", WEBGL_ATTRIBUTES); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/tex_util.js + init_define_BUILD_VERSION(); + var PackingScheme; + (function(PackingScheme2) { + PackingScheme2[PackingScheme2["DENSE"] = 0] = "DENSE"; + PackingScheme2[PackingScheme2["SHARED_BATCH"] = 1] = "SHARED_BATCH"; + })(PackingScheme || (PackingScheme = {})); + var TextureUsage; + (function(TextureUsage2) { + TextureUsage2[TextureUsage2["RENDER"] = 0] = "RENDER"; + TextureUsage2[TextureUsage2["UPLOAD"] = 1] = "UPLOAD"; + TextureUsage2[TextureUsage2["PIXELS"] = 2] = "PIXELS"; + TextureUsage2[TextureUsage2["DOWNLOAD"] = 3] = "DOWNLOAD"; + })(TextureUsage || (TextureUsage = {})); + var PhysicalTextureType; + (function(PhysicalTextureType2) { + PhysicalTextureType2[PhysicalTextureType2["UNPACKED_FLOAT16"] = 0] = "UNPACKED_FLOAT16"; + PhysicalTextureType2[PhysicalTextureType2["UNPACKED_FLOAT32"] = 1] = "UNPACKED_FLOAT32"; + PhysicalTextureType2[PhysicalTextureType2["PACKED_4X1_UNSIGNED_BYTE"] = 2] = "PACKED_4X1_UNSIGNED_BYTE"; + PhysicalTextureType2[PhysicalTextureType2["PACKED_2X2_FLOAT32"] = 3] = "PACKED_2X2_FLOAT32"; + PhysicalTextureType2[PhysicalTextureType2["PACKED_2X2_FLOAT16"] = 4] = "PACKED_2X2_FLOAT16"; + })(PhysicalTextureType || (PhysicalTextureType = {})); + function getUnpackedMatrixTextureShapeWidthHeight(rows, columns) { + return [columns, rows]; + } + function getUnpackedArraySizeFromMatrixSize(matrixSize, channelsPerTexture) { + return matrixSize * channelsPerTexture; + } + function getDenseTexShape(shape) { + const size = util_exports.sizeFromShape(shape); + const texelsNeeded = Math.ceil(size / 4); + return util_exports.sizeToSquarishShape(texelsNeeded); + } + function getPackedMatrixTextureShapeWidthHeight(rows, columns) { + return [ + Math.max(1, Math.ceil(columns / 2)), + Math.max(1, Math.ceil(rows / 2)) + ]; + } + function getPackedRGBAArraySizeFromMatrixShape(rows, columns) { + const [w, h] = getPackedMatrixTextureShapeWidthHeight(rows, columns); + return w * h * 4; + } + function getTextureConfig(gl, textureHalfFloatExtension) { + const glany = gl; + let internalFormatFloat; + let internalFormatHalfFloat; + let internalFormatPackedHalfFloat; + let internalFormatPackedFloat; + let textureFormatFloat; + let downloadTextureFormat; + let downloadUnpackNumChannels; + let defaultNumChannels; + let textureTypeHalfFloat; + let textureTypeFloat; + if (env().getNumber("WEBGL_VERSION") === 2) { + internalFormatFloat = glany.R32F; + internalFormatHalfFloat = glany.R16F; + internalFormatPackedHalfFloat = glany.RGBA16F; + internalFormatPackedFloat = glany.RGBA32F; + textureFormatFloat = glany.RED; + downloadUnpackNumChannels = 4; + defaultNumChannels = 1; + textureTypeHalfFloat = glany.HALF_FLOAT; + textureTypeFloat = glany.FLOAT; + downloadTextureFormat = glany.RGBA8; + } else { + internalFormatFloat = gl.RGBA; + internalFormatHalfFloat = gl.RGBA; + internalFormatPackedHalfFloat = gl.RGBA; + internalFormatPackedFloat = glany.RGBA; + textureFormatFloat = gl.RGBA; + downloadUnpackNumChannels = 4; + defaultNumChannels = 4; + textureTypeHalfFloat = textureHalfFloatExtension != null ? textureHalfFloatExtension.HALF_FLOAT_OES : null; + textureTypeFloat = gl.FLOAT; + downloadTextureFormat = gl.RGBA; + } + return { + internalFormatFloat, + internalFormatHalfFloat, + internalFormatPackedHalfFloat, + internalFormatPackedFloat, + textureFormatFloat, + downloadTextureFormat, + downloadUnpackNumChannels, + defaultNumChannels, + textureTypeHalfFloat, + textureTypeFloat + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/webgl_util.js + function callAndCheck(gl, func2) { + const returnValue = func2(); + if (env().getBool("DEBUG")) { + checkWebGLError(gl); + } + return returnValue; + } + function checkWebGLError(gl) { + const error = gl.getError(); + if (error !== gl.NO_ERROR) { + throw new Error("WebGL Error: " + getWebGLErrorMessage(gl, error)); + } + } + var MIN_FLOAT16 = 596e-10; + var MAX_FLOAT16 = 65504; + function canBeRepresented(num) { + if (env().getBool("WEBGL_RENDER_FLOAT32_ENABLED") || num === 0 || MIN_FLOAT16 < Math.abs(num) && Math.abs(num) < MAX_FLOAT16) { + return true; + } + return false; + } + function getWebGLErrorMessage(gl, status) { + switch (status) { + case gl.NO_ERROR: + return "NO_ERROR"; + case gl.INVALID_ENUM: + return "INVALID_ENUM"; + case gl.INVALID_VALUE: + return "INVALID_VALUE"; + case gl.INVALID_OPERATION: + return "INVALID_OPERATION"; + case gl.INVALID_FRAMEBUFFER_OPERATION: + return "INVALID_FRAMEBUFFER_OPERATION"; + case gl.OUT_OF_MEMORY: + return "OUT_OF_MEMORY"; + case gl.CONTEXT_LOST_WEBGL: + return "CONTEXT_LOST_WEBGL"; + default: + return `Unknown error code ${status}`; + } + } + function getExtensionOrThrow(gl, extensionName) { + return throwIfNull(gl, () => gl.getExtension(extensionName), 'Extension "' + extensionName + '" not supported on this browser.'); + } + function createVertexShader(gl, vertexShaderSource) { + const vertexShader = throwIfNull(gl, () => gl.createShader(gl.VERTEX_SHADER), "Unable to create vertex WebGLShader."); + callAndCheck(gl, () => gl.shaderSource(vertexShader, vertexShaderSource)); + callAndCheck(gl, () => gl.compileShader(vertexShader)); + if (gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS) === false) { + console.log(gl.getShaderInfoLog(vertexShader)); + throw new Error("Failed to compile vertex shader."); + } + return vertexShader; + } + function createFragmentShader(gl, fragmentShaderSource) { + const fragmentShader = throwIfNull(gl, () => gl.createShader(gl.FRAGMENT_SHADER), "Unable to create fragment WebGLShader."); + callAndCheck(gl, () => gl.shaderSource(fragmentShader, fragmentShaderSource)); + callAndCheck(gl, () => gl.compileShader(fragmentShader)); + if (env().get("ENGINE_COMPILE_ONLY")) { + return fragmentShader; + } + if (gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS) === false) { + logShaderSourceAndInfoLog(fragmentShaderSource, gl.getShaderInfoLog(fragmentShader)); + throw new Error("Failed to compile fragment shader."); + } + return fragmentShader; + } + var lineNumberRegex = /ERROR: [0-9]+:([0-9]+):/g; + function logShaderSourceAndInfoLog(shaderSource, shaderInfoLog) { + const lineNumberRegexResult = lineNumberRegex.exec(shaderInfoLog); + if (lineNumberRegexResult == null) { + console.log(`Couldn't parse line number in error: ${shaderInfoLog}`); + console.log(shaderSource); + return; + } + const lineNumber = +lineNumberRegexResult[1]; + const shaderLines = shaderSource.split("\n"); + const pad3 = shaderLines.length.toString().length + 2; + const linesWithLineNumbers = shaderLines.map((line, lineNumber2) => util_exports.rightPad((lineNumber2 + 1).toString(), pad3) + line); + let maxLineLength = 0; + for (let i = 0; i < linesWithLineNumbers.length; i++) { + maxLineLength = Math.max(linesWithLineNumbers[i].length, maxLineLength); + } + const beforeErrorLines = linesWithLineNumbers.slice(0, lineNumber - 1); + const errorLine = linesWithLineNumbers.slice(lineNumber - 1, lineNumber); + const afterErrorLines = linesWithLineNumbers.slice(lineNumber); + console.log(beforeErrorLines.join("\n")); + console.log(shaderInfoLog.split("\n")[0]); + console.log(`%c ${util_exports.rightPad(errorLine[0], maxLineLength)}`, "border:1px solid red; background-color:#e3d2d2; color:#a61717"); + console.log(afterErrorLines.join("\n")); + } + function createProgram(gl) { + return throwIfNull(gl, () => gl.createProgram(), "Unable to create WebGLProgram."); + } + function linkProgram(gl, program) { + callAndCheck(gl, () => gl.linkProgram(program)); + if (env().get("ENGINE_COMPILE_ONLY")) { + return; + } + if (gl.getProgramParameter(program, gl.LINK_STATUS) === false) { + console.log(gl.getProgramInfoLog(program)); + throw new Error("Failed to link vertex and fragment shaders."); + } + } + function validateProgram(gl, program) { + callAndCheck(gl, () => gl.validateProgram(program)); + if (gl.getProgramParameter(program, gl.VALIDATE_STATUS) === false) { + console.log(gl.getProgramInfoLog(program)); + throw new Error("Shader program validation failed."); + } + } + function createStaticVertexBuffer(gl, data) { + const buffer2 = throwIfNull(gl, () => gl.createBuffer(), "Unable to create WebGLBuffer"); + callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, buffer2)); + callAndCheck(gl, () => gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW)); + return buffer2; + } + function createStaticIndexBuffer(gl, data) { + const buffer2 = throwIfNull(gl, () => gl.createBuffer(), "Unable to create WebGLBuffer"); + callAndCheck(gl, () => gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer2)); + callAndCheck(gl, () => gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, gl.STATIC_DRAW)); + return buffer2; + } + function createTexture(gl) { + return throwIfNull(gl, () => gl.createTexture(), "Unable to create WebGLTexture."); + } + function validateTextureSize(width, height) { + const maxTextureSize = env().getNumber("WEBGL_MAX_TEXTURE_SIZE"); + if (width <= 0 || height <= 0) { + const requested = `[${width}x${height}]`; + throw new Error("Requested texture size " + requested + " is invalid."); + } + if (width > maxTextureSize || height > maxTextureSize) { + const requested = `[${width}x${height}]`; + const max6 = `[${maxTextureSize}x${maxTextureSize}]`; + throw new Error("Requested texture size " + requested + " greater than WebGL maximum on this browser / GPU " + max6 + "."); + } + } + function createFramebuffer(gl) { + return throwIfNull(gl, () => gl.createFramebuffer(), "Unable to create WebGLFramebuffer."); + } + function bindVertexBufferToProgramAttribute(gl, program, attribute, buffer2, arrayEntriesPerItem, itemStrideInBytes, itemOffsetInBytes) { + const loc = gl.getAttribLocation(program, attribute); + if (loc === -1) { + return false; + } + callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, buffer2)); + callAndCheck(gl, () => gl.vertexAttribPointer(loc, arrayEntriesPerItem, gl.FLOAT, false, itemStrideInBytes, itemOffsetInBytes)); + callAndCheck(gl, () => gl.enableVertexAttribArray(loc)); + return true; + } + function bindTextureUnit(gl, texture, textureUnit) { + validateTextureUnit(gl, textureUnit); + callAndCheck(gl, () => gl.activeTexture(gl.TEXTURE0 + textureUnit)); + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, texture)); + } + function getProgramUniformLocationOrThrow(gl, program, uniformName) { + return throwIfNull(gl, () => gl.getUniformLocation(program, uniformName), 'uniform "' + uniformName + '" not present in program.'); + } + function getProgramUniformLocation(gl, program, uniformName) { + return gl.getUniformLocation(program, uniformName); + } + function bindTextureToProgramUniformSampler(gl, texture, uniformSamplerLocation, textureUnit) { + callAndCheck(gl, () => bindTextureUnit(gl, texture, textureUnit)); + callAndCheck(gl, () => gl.uniform1i(uniformSamplerLocation, textureUnit)); + } + function bindColorTextureToFramebuffer(gl, texture, framebuffer) { + callAndCheck(gl, () => gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer)); + callAndCheck(gl, () => gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)); + } + function unbindColorTextureFromFramebuffer(gl, framebuffer) { + callAndCheck(gl, () => gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer)); + callAndCheck(gl, () => gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0)); + } + function validateFramebuffer(gl) { + const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER); + if (status !== gl.FRAMEBUFFER_COMPLETE) { + throw new Error("Error binding framebuffer: " + getFramebufferErrorMessage(gl, status)); + } + } + function getFramebufferErrorMessage(gl, status) { + switch (status) { + case gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT: + return "FRAMEBUFFER_INCOMPLETE_ATTACHMENT"; + case gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: + return "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"; + case gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS: + return "FRAMEBUFFER_INCOMPLETE_DIMENSIONS"; + case gl.FRAMEBUFFER_UNSUPPORTED: + return "FRAMEBUFFER_UNSUPPORTED"; + default: + return `unknown error ${status}`; + } + } + function throwIfNull(gl, returnTOrNull, failureMessage) { + const tOrNull = callAndCheck(gl, () => returnTOrNull()); + if (tOrNull == null) { + throw new Error(failureMessage); + } + return tOrNull; + } + function validateTextureUnit(gl, textureUnit) { + const maxTextureUnit = gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1; + const glTextureUnit = textureUnit + gl.TEXTURE0; + if (glTextureUnit < gl.TEXTURE0 || glTextureUnit > maxTextureUnit) { + const textureUnitRange = `[gl.TEXTURE0, gl.TEXTURE${maxTextureUnit}]`; + throw new Error(`textureUnit must be in ${textureUnitRange}.`); + } + } + function getBatchDim(shape, dimsToSkip = 2) { + return util_exports.sizeFromShape(shape.slice(0, shape.length - dimsToSkip)); + } + function getRowsCols(shape) { + if (shape.length === 0) { + throw Error("Cannot get rows and columns of an empty shape array."); + } + return [ + shape.length > 1 ? shape[shape.length - 2] : 1, + shape[shape.length - 1] + ]; + } + function getShapeAs3D(shape) { + let shapeAs3D = [1, 1, 1]; + const isScalar = shape.length === 0 || shape.length === 1 && shape[0] === 1; + if (!isScalar) { + shapeAs3D = [getBatchDim(shape), ...getRowsCols(shape)]; + } + return shapeAs3D; + } + function getTextureShapeFromLogicalShape(logShape, isPacked = false) { + let maxTexSize = env().getNumber("WEBGL_MAX_TEXTURE_SIZE"); + if (isPacked) { + maxTexSize = maxTexSize * 2; + logShape = logShape.map((d, i) => i >= logShape.length - 2 ? util_exports.nearestLargerEven(logShape[i]) : logShape[i]); + if (logShape.length === 1) { + logShape = [2, logShape[0]]; + } + } + if (logShape.length !== 2) { + const squeezeResult = util_exports.squeezeShape(logShape); + logShape = squeezeResult.newShape; + } + let size = util_exports.sizeFromShape(logShape); + if (logShape.length <= 1 && size <= maxTexSize) { + return [1, size]; + } else if (logShape.length === 2 && logShape[0] <= maxTexSize && logShape[1] <= maxTexSize) { + return logShape; + } else if (logShape.length === 3 && logShape[0] * logShape[1] <= maxTexSize && logShape[2] <= maxTexSize) { + return [logShape[0] * logShape[1], logShape[2]]; + } else if (logShape.length === 3 && logShape[0] <= maxTexSize && logShape[1] * logShape[2] <= maxTexSize) { + return [logShape[0], logShape[1] * logShape[2]]; + } else if (logShape.length === 4 && logShape[0] * logShape[1] * logShape[2] <= maxTexSize && logShape[3] <= maxTexSize) { + return [logShape[0] * logShape[1] * logShape[2], logShape[3]]; + } else if (logShape.length === 4 && logShape[0] <= maxTexSize && logShape[1] * logShape[2] * logShape[3] <= maxTexSize) { + return [logShape[0], logShape[1] * logShape[2] * logShape[3]]; + } else { + if (isPacked) { + const batchDim = getBatchDim(logShape); + let rows = 2, cols = 2; + if (logShape.length) { + [rows, cols] = getRowsCols(logShape); + } + size = batchDim * (rows / 2) * (cols / 2); + return util_exports.sizeToSquarishShape(size).map((d) => d * 2); + } + return util_exports.sizeToSquarishShape(size); + } + } + function isEven(n) { + return n % 2 === 0; + } + function isReshapeFree(shape1, shape2) { + shape1 = shape1.slice(-2); + shape2 = shape2.slice(-2); + if (util_exports.arraysEqual(shape1, shape2)) { + return true; + } + if (!shape1.length || !shape2.length) { + return true; + } + if (shape1[0] === 0 || shape1[1] === 0 || shape2[0] === 0 || shape2[1] === 0) { + return true; + } + if (shape1.length !== shape2.length) { + const shape1Cols = shape1.slice(-1)[0]; + const shape2Cols = shape2.slice(-1)[0]; + if (shape1Cols === shape2Cols) { + return true; + } + if (isEven(shape1Cols) && isEven(shape2Cols) && (shape1[0] === 1 || shape2[0] === 1)) { + return true; + } + } + return shape1[1] === shape2[1] && isEven(shape1[0]) && isEven(shape2[0]); + } + var MAX_TEXTURE_SIZE; + var MAX_TEXTURES_IN_SHADER; + function getWebGLMaxTextureSize(webGLVersion) { + if (MAX_TEXTURE_SIZE == null) { + const gl = getWebGLContext(webGLVersion); + MAX_TEXTURE_SIZE = gl.getParameter(gl.MAX_TEXTURE_SIZE); + } + return MAX_TEXTURE_SIZE; + } + function getMaxTexturesInShader(webGLVersion) { + if (MAX_TEXTURES_IN_SHADER == null) { + const gl = getWebGLContext(webGLVersion); + MAX_TEXTURES_IN_SHADER = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); + } + return Math.min(16, MAX_TEXTURES_IN_SHADER); + } + function getWebGLDisjointQueryTimerVersion(webGLVersion) { + if (webGLVersion === 0) { + return 0; + } + let queryTimerVersion; + const gl = getWebGLContext(webGLVersion); + if (hasExtension(gl, "EXT_disjoint_timer_query_webgl2") && webGLVersion === 2) { + queryTimerVersion = 2; + } else if (hasExtension(gl, "EXT_disjoint_timer_query")) { + queryTimerVersion = 1; + } else { + queryTimerVersion = 0; + } + return queryTimerVersion; + } + function hasExtension(gl, extensionName) { + const ext = gl.getExtension(extensionName); + return ext != null; + } + function isWebGLVersionEnabled(webGLVersion) { + try { + const gl = getWebGLContext(webGLVersion); + if (gl != null) { + return true; + } + } catch (e) { + console.log("Error when getting WebGL context: ", e); + return false; + } + return false; + } + function isCapableOfRenderingToFloatTexture(webGLVersion) { + if (webGLVersion === 0) { + return false; + } + const gl = getWebGLContext(webGLVersion); + if (webGLVersion === 1) { + if (!hasExtension(gl, "OES_texture_float")) { + return false; + } + } else { + if (!hasExtension(gl, "EXT_color_buffer_float")) { + return false; + } + } + const isFrameBufferComplete = createFloatTextureAndBindToFramebuffer(gl); + return isFrameBufferComplete; + } + function isDownloadFloatTextureEnabled(webGLVersion) { + if (webGLVersion === 0) { + return false; + } + const gl = getWebGLContext(webGLVersion); + if (webGLVersion === 1) { + if (!hasExtension(gl, "OES_texture_float")) { + return false; + } + if (!hasExtension(gl, "WEBGL_color_buffer_float")) { + return false; + } + } else { + if (hasExtension(gl, "EXT_color_buffer_float")) { + return createFloatTextureAndBindToFramebuffer(gl); + } + const COLOR_BUFFER_HALF_FLOAT = "EXT_color_buffer_half_float"; + if (hasExtension(gl, COLOR_BUFFER_HALF_FLOAT)) { + const textureHalfFloatExtension = gl.getExtension(COLOR_BUFFER_HALF_FLOAT); + return createHalfFloatTextureAndBindToFramebuffer(gl, textureHalfFloatExtension); + } + return false; + } + const isFrameBufferComplete = createFloatTextureAndBindToFramebuffer(gl); + return isFrameBufferComplete; + } + function createFloatTextureAndBindToFramebuffer(gl) { + const texConfig = getTextureConfig(gl); + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + const width = 1; + const height = 1; + gl.texImage2D(gl.TEXTURE_2D, 0, texConfig.internalFormatFloat, width, height, 0, texConfig.textureFormatFloat, texConfig.textureTypeFloat, null); + const frameBuffer = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); + const isFrameBufferComplete = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE; + gl.bindTexture(gl.TEXTURE_2D, null); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + gl.deleteTexture(texture); + gl.deleteFramebuffer(frameBuffer); + return isFrameBufferComplete; + } + function createHalfFloatTextureAndBindToFramebuffer(gl, textureHalfFloatExtension) { + const texConfig = getTextureConfig(gl, textureHalfFloatExtension); + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + const width = 1; + const height = 1; + gl.texImage2D(gl.TEXTURE_2D, 0, texConfig.internalFormatHalfFloat, width, height, 0, texConfig.textureFormatFloat, texConfig.textureTypeHalfFloat, null); + const frameBuffer = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); + const isFrameBufferComplete = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE; + gl.bindTexture(gl.TEXTURE_2D, null); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + gl.deleteTexture(texture); + gl.deleteFramebuffer(frameBuffer); + return isFrameBufferComplete; + } + function isWebGLFenceEnabled(webGLVersion) { + if (webGLVersion !== 2) { + return false; + } + const gl = getWebGLContext(webGLVersion); + const isEnabled = gl.fenceSync != null; + return isEnabled; + } + function assertNotComplex2(tensor2, opName) { + if (!Array.isArray(tensor2)) { + tensor2 = [tensor2]; + } + tensor2.forEach((t) => { + if (t != null) { + util_exports.assert(t.dtype !== "complex64", () => `${opName} does not support complex64 tensors in the WebGL backend.`); + } + }); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/flags_webgl.js + var ENV5 = env(); + ENV5.registerFlag("HAS_WEBGL", () => ENV5.getNumber("WEBGL_VERSION") > 0); + ENV5.registerFlag("WEBGL_VERSION", () => { + if (isWebGLVersionEnabled(2)) { + return 2; + } else if (isWebGLVersionEnabled(1)) { + return 1; + } + return 0; + }); + ENV5.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS", () => false); + ENV5.registerFlag("WEBGL_BUFFER_SUPPORTED", () => ENV5.get("WEBGL_VERSION") === 2); + ENV5.registerFlag("WEBGL_CPU_FORWARD", () => true); + ENV5.registerFlag("WEBGL_FORCE_F16_TEXTURES", () => false); + ENV5.registerFlag("WEBGL_PACK", () => ENV5.getBool("HAS_WEBGL")); + ENV5.registerFlag("WEBGL_PACK_NORMALIZATION", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_CLIP", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_DEPTHWISECONV", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_BINARY_OPERATIONS", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_UNARY_OPERATIONS", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_PACK_REDUCE", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_LAZILY_UNPACK", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_CONV_IM2COL", () => ENV5.getBool("WEBGL_PACK")); + ENV5.registerFlag("WEBGL_MAX_TEXTURE_SIZE", () => getWebGLMaxTextureSize(ENV5.getNumber("WEBGL_VERSION"))); + ENV5.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER", () => getMaxTexturesInShader(ENV5.getNumber("WEBGL_VERSION"))); + ENV5.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION", () => { + const webGLVersion = ENV5.getNumber("WEBGL_VERSION"); + if (webGLVersion === 0) { + return 0; + } + return getWebGLDisjointQueryTimerVersion(webGLVersion); + }); + ENV5.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE", () => ENV5.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 && !device_util_exports.isMobile()); + ENV5.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE", () => isCapableOfRenderingToFloatTexture(ENV5.getNumber("WEBGL_VERSION"))); + ENV5.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED", () => { + return ENV5.getBool("WEBGL_FORCE_F16_TEXTURES") ? false : ENV5.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"); + }); + ENV5.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED", () => isDownloadFloatTextureEnabled(ENV5.getNumber("WEBGL_VERSION"))); + ENV5.registerFlag("WEBGL_FENCE_API_ENABLED", () => isWebGLFenceEnabled(ENV5.getNumber("WEBGL_VERSION"))); + ENV5.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM", () => { + const useUniforms = ENV5.getBool("WEBGL_RENDER_FLOAT32_ENABLED"); + return useUniforms ? 4 : 0; + }); + ENV5.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD", () => { + return -1; + }, (threshold3) => { + if (threshold3 < 0 && threshold3 !== -1) { + throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${threshold3}.`); + } + }); + ENV5.registerFlag("WEBGL_FLUSH_THRESHOLD", () => { + return device_util_exports.isMobile() ? 1 : -1; + }, (threshold3) => { + if (threshold3 < 0 && threshold3 !== -1) { + throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${threshold3}.`); + } + }); + ENV5.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD", () => 128); + ENV5.registerFlag("WEBGL_USE_SHAPES_UNIFORMS", () => false); + ENV5.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD", () => 1e5); + ENV5.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD", () => 128); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/decode_matrix_gpu.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/glsl_version.js + init_define_BUILD_VERSION(); + function getGlslDifferences() { + let version9; + let attribute; + let varyingVs; + let varyingFs; + let texture2D; + let output; + let defineOutput; + let defineSpecialNaN; + let defineSpecialInf; + let defineRound; + if (env().getNumber("WEBGL_VERSION") === 2) { + version9 = "#version 300 es"; + attribute = "in"; + varyingVs = "out"; + varyingFs = "in"; + texture2D = "texture"; + output = "outputColor"; + defineOutput = "out vec4 outputColor;"; + defineSpecialNaN = ` + bool isnan_custom(float val) { + uint floatToUint = floatBitsToUint(val); + return (floatToUint & 0x7fffffffu) > 0x7f800000u; + } + + bvec4 isnan_custom(vec4 val) { + return bvec4(isnan_custom(val.x), + isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w)); + } + + #define isnan(value) isnan_custom(value) + `; + defineSpecialInf = ``; + defineRound = ` + #define round(value) newRound(value) + int newRound(float value) { + return int(floor(value + 0.5)); + } + + ivec4 newRound(vec4 value) { + return ivec4(floor(value + vec4(0.5))); + } + `; + } else { + version9 = ""; + attribute = "attribute"; + varyingVs = "varying"; + varyingFs = "varying"; + texture2D = "texture2D"; + output = "gl_FragColor"; + defineOutput = ""; + defineSpecialNaN = ` + #define isnan(value) isnan_custom(value) + bool isnan_custom(float val) { + return (val > 0. || val < 1. || val == 0.) ? false : true; + } + bvec4 isnan_custom(vec4 val) { + return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w)); + } + `; + defineSpecialInf = ` + uniform float INFINITY; + + bool isinf(float val) { + return abs(val) == INFINITY; + } + bvec4 isinf(vec4 val) { + return equal(abs(val), vec4(INFINITY)); + } + `; + defineRound = ` + int round(float value) { + return int(floor(value + 0.5)); + } + + ivec4 round(vec4 value) { + return ivec4(floor(value + vec4(0.5))); + } + `; + } + return { + version: version9, + attribute, + varyingVs, + varyingFs, + texture2D, + output, + defineOutput, + defineSpecialNaN, + defineSpecialInf, + defineRound + }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_math.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler_util.js + init_define_BUILD_VERSION(); + function getLogicalCoordinatesFromFlatIndex(coords2, shape, index = "index") { + const strides = util_exports.computeStrides(shape); + return strides.map((stride, i) => { + const line1 = `int ${coords2[i]} = ${index} / ${stride}`; + const line2 = i === strides.length - 1 ? `int ${coords2[i + 1]} = ${index} - ${coords2[i]} * ${stride}` : `index -= ${coords2[i]} * ${stride}`; + return `${line1}; ${line2};`; + }).join(""); + } + function getOutputLogicalCoordinatesFromFlatIndexByUniform(coords2, shape, index = "index") { + const strides = util_exports.computeStrides(shape); + return strides.map((_, i) => { + const line1 = `int ${coords2[i]} = ${index} / outShapeStrides[${i}]`; + const line2 = i === strides.length - 1 ? `int ${coords2[i + 1]} = ${index} - ${coords2[i]} * outShapeStrides[${i}]` : `index -= ${coords2[i]} * outShapeStrides[${i}]`; + return `${line1}; ${line2};`; + }).join(""); + } + function symbolicallyComputeStrides(indicesArr, variableName) { + const numCoords = indicesArr.length; + const shape = indicesArr.map((d) => `${variableName}[${d}]`); + const strides = new Array(numCoords - 1); + strides[numCoords - 2] = shape[numCoords - 1]; + for (let i = numCoords - 3; i >= 0; --i) { + strides[i] = `(${strides[i + 1]} * ${shape[i + 1]})`; + } + return strides; + } + function getLogicalCoordinatesFromFlatIndexByUniform(coords2, variableName, index = "index") { + const indicesArray = coords2.map((_, i) => i); + const strides = symbolicallyComputeStrides(indicesArray, variableName); + return strides.map((_, i) => { + const line1 = `int ${coords2[i]} = ${index} / ${strides[i]}`; + const line2 = i === strides.length - 1 ? `int ${coords2[i + 1]} = ${index} - ${coords2[i]} * ${strides[i]}` : `index -= ${coords2[i]} * ${strides[i]}`; + return `${line1}; ${line2};`; + }).join(""); + } + function getFlatIndexFrom3D(shape) { + const strides = util_exports.computeStrides(shape).map((d) => d.toString()); + return ` + int getFlatIndex(ivec3 coords) { + return coords.x * ${strides[0]} + coords.y * ${strides[1]} + coords.z; + } +`; + } + function getFlatIndexFrom3DOutput() { + return ` + int getFlatIndex(ivec3 coords) { + return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; + } +`; + } + var ENCODE_FLOAT_SNIPPET = ` + const float FLOAT_MAX = 1.70141184e38; + const float FLOAT_MIN = 1.17549435e-38; + + lowp vec4 encode_float(highp float v) { + if (isnan(v)) { + return vec4(255, 255, 255, 255); + } + + highp float av = abs(v); + + if(av < FLOAT_MIN) { + return vec4(0.0, 0.0, 0.0, 0.0); + } else if(v > FLOAT_MAX) { + return vec4(0.0, 0.0, 128.0, 127.0) / 255.0; + } else if(v < -FLOAT_MAX) { + return vec4(0.0, 0.0, 128.0, 255.0) / 255.0; + } + + highp vec4 c = vec4(0,0,0,0); + + highp float e = floor(log2(av)); + highp float m = exp2(fract(log2(av))) - 1.0; + + c[2] = floor(128.0 * m); + m -= c[2] / 128.0; + c[1] = floor(32768.0 * m); + m -= c[1] / 32768.0; + c[0] = floor(8388608.0 * m); + + highp float ebias = e + 127.0; + c[3] = floor(ebias / 2.0); + ebias -= c[3] * 2.0; + c[2] += floor(ebias) * 128.0; + + c[3] += 128.0 * step(0.0, -v); + + return c / 255.0; + } +`; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler.js + var { getBroadcastDims: getBroadcastDims2 } = backend_util_exports; + function makeShader(inputsInfo, outputShape, program) { + const prefixSnippets = []; + inputsInfo.forEach((x) => { + const size = util_exports.sizeFromShape(x.shapeInfo.logicalShape); + if (x.shapeInfo.isUniform) { + prefixSnippets.push(`uniform float ${x.name}${size > 1 ? `[${size}]` : ""};`); + } else { + prefixSnippets.push(`uniform sampler2D ${x.name};`); + prefixSnippets.push(`uniform int offset${x.name};`); + } + if (program.enableShapeUniforms) { + const { uniformShape } = getUniformInfoFromShape(program.packedInputs, x.shapeInfo.logicalShape, x.shapeInfo.texShape); + switch (uniformShape.length) { + case 1: + prefixSnippets.push(`uniform int ${x.name}Shape;`); + break; + case 2: + prefixSnippets.push(`uniform ivec2 ${x.name}Shape;`); + break; + case 3: + prefixSnippets.push(`uniform ivec3 ${x.name}Shape;`); + break; + case 4: + prefixSnippets.push(`uniform ivec4 ${x.name}Shape;`); + break; + default: + break; + } + prefixSnippets.push(`uniform ivec2 ${x.name}TexShape;`); + } + }); + if (program.enableShapeUniforms) { + switch (outputShape.logicalShape.length) { + case 1: + prefixSnippets.push(`uniform int outShape;`); + break; + case 2: + prefixSnippets.push(`uniform ivec2 outShape;`); + prefixSnippets.push(`uniform int outShapeStrides;`); + break; + case 3: + prefixSnippets.push(`uniform ivec3 outShape;`); + prefixSnippets.push(`uniform ivec2 outShapeStrides;`); + break; + case 4: + prefixSnippets.push(`uniform ivec4 outShape;`); + prefixSnippets.push(`uniform ivec3 outShapeStrides;`); + break; + default: + break; + } + prefixSnippets.push(`uniform ivec2 outTexShape;`); + } + if (program.customUniforms) { + program.customUniforms.forEach((d) => { + prefixSnippets.push(`uniform ${d.type} ${d.name}${d.arrayIndex ? `[${d.arrayIndex}]` : ""};`); + }); + } + const inputPrefixSnippet = prefixSnippets.join("\n"); + const inputSamplingSnippet = inputsInfo.map((x) => getInputSamplingSnippet(x, outputShape, program.packedInputs, program.enableShapeUniforms)).join("\n"); + const outTexShape = outputShape.texShape; + const glsl = getGlslDifferences(); + const floatTextureSampleSnippet = getFloatTextureSampleSnippet(glsl); + let outputSamplingSnippet; + let floatTextureSetOutputSnippet; + let shaderPrefix = getShaderPrefix(glsl); + if (outputShape.isPacked) { + outputSamplingSnippet = getPackedOutputSamplingSnippet(outputShape.logicalShape, outTexShape, program.enableShapeUniforms); + floatTextureSetOutputSnippet = getFloatTextureSetRGBASnippet(glsl); + } else { + outputSamplingSnippet = getOutputSamplingSnippet(outputShape.logicalShape, outTexShape, program.enableShapeUniforms); + floatTextureSetOutputSnippet = getFloatTextureSetRSnippet(glsl); + } + if (program.packedInputs) { + shaderPrefix += SHADER_PACKED_PREFIX; + } + const source = [ + shaderPrefix, + floatTextureSampleSnippet, + floatTextureSetOutputSnippet, + inputPrefixSnippet, + outputSamplingSnippet, + inputSamplingSnippet, + program.userCode + ].join("\n"); + return source; + } + function getSamplerFromInInfo(inInfo, enableShapeUniforms = false) { + const shape = inInfo.shapeInfo.logicalShape; + switch (shape.length) { + case 0: + return getSamplerScalar(inInfo, enableShapeUniforms); + case 1: + return getSampler1D(inInfo, enableShapeUniforms); + case 2: + return getSampler2D(inInfo, enableShapeUniforms); + case 3: + return getSampler3D(inInfo, enableShapeUniforms); + case 4: + return getSampler4D(inInfo, enableShapeUniforms); + case 5: + return getSampler5D(inInfo); + case 6: + return getSampler6D(inInfo); + default: + throw new Error(`${shape.length}-D input sampling is not yet supported`); + } + } + function getPackedSamplerFromInInfo(inInfo, enableShapeUniforms) { + const shape = inInfo.shapeInfo.logicalShape; + switch (shape.length) { + case 0: + return getPackedSamplerScalar(inInfo); + case 1: + return getPackedSampler1D(inInfo, enableShapeUniforms); + case 2: + return getPackedSampler2D(inInfo, enableShapeUniforms); + case 3: + return getPackedSampler3D(inInfo, enableShapeUniforms); + default: + return getPackedSamplerND(inInfo, enableShapeUniforms); + } + } + function getInputSamplingSnippet(inInfo, outShapeInfo, usesPackedTextures = false, enableShapeUniforms) { + let res = ""; + if (usesPackedTextures) { + res += getPackedSamplerFromInInfo(inInfo, enableShapeUniforms); + } else { + res += getSamplerFromInInfo(inInfo, enableShapeUniforms); + } + const inShape = inInfo.shapeInfo.logicalShape; + const outShape = outShapeInfo.logicalShape; + if (inShape.length <= outShape.length) { + if (usesPackedTextures) { + res += getPackedSamplerAtOutputCoords(inInfo, outShapeInfo); + } else { + res += getSamplerAtOutputCoords(inInfo, outShapeInfo); + } + } + return res; + } + function getPackedOutputSamplingSnippet(outShape, outTexShape, enableShapeUniforms) { + switch (outShape.length) { + case 0: + return getOutputScalarCoords(); + case 1: + return getOutputPacked1DCoords(outShape, outTexShape, enableShapeUniforms); + case 2: + return getOutputPacked2DCoords(outShape, outTexShape, enableShapeUniforms); + case 3: + return getOutputPacked3DCoords(outShape, outTexShape, enableShapeUniforms); + default: + return getOutputPackedNDCoords(outShape, outTexShape, enableShapeUniforms); + } + } + function getOutputSamplingSnippet(outShape, outTexShape, enableShapeUniforms) { + switch (outShape.length) { + case 0: + return getOutputScalarCoords(); + case 1: + return getOutput1DCoords(outShape, outTexShape, enableShapeUniforms); + case 2: + return getOutput2DCoords(outShape, outTexShape, enableShapeUniforms); + case 3: + return getOutput3DCoords(outShape, outTexShape, enableShapeUniforms); + case 4: + return getOutput4DCoords(outShape, outTexShape, enableShapeUniforms); + case 5: + return getOutput5DCoords(outShape, outTexShape); + case 6: + return getOutput6DCoords(outShape, outTexShape); + default: + throw new Error(`${outShape.length}-D output sampling is not yet supported`); + } + } + function getFloatTextureSampleSnippet(glsl) { + return ` + float sampleTexture(sampler2D textureSampler, vec2 uv) { + return ${glsl.texture2D}(textureSampler, uv).r; + } + `; + } + function getFloatTextureSetRSnippet(glsl) { + return ` + void setOutput(float val) { + ${glsl.output} = vec4(val, 0, 0, 0); + } + `; + } + function getFloatTextureSetRGBASnippet(glsl) { + return ` + void setOutput(vec4 val) { + ${glsl.output} = val; + } + `; + } + function getShaderPrefix(glsl) { + const SHADER_PREFIX = `${glsl.version} + precision highp float; + precision highp int; + precision highp sampler2D; + ${glsl.varyingFs} vec2 resultUV; + ${glsl.defineOutput} + const vec2 halfCR = vec2(0.5, 0.5); + + struct ivec5 + { + int x; + int y; + int z; + int w; + int u; + }; + + struct ivec6 + { + int x; + int y; + int z; + int w; + int u; + int v; + }; + + uniform float NAN; + ${glsl.defineSpecialNaN} + ${glsl.defineSpecialInf} + ${glsl.defineRound} + + int imod(int x, int y) { + return x - y * (x / y); + } + + int idiv(int a, int b, float sign) { + int res = a / b; + int mod = imod(a, b); + if (sign < 0. && mod != 0) { + res -= 1; + } + return res; + } + + //Based on the work of Dave Hoskins + //https://www.shadertoy.com/view/4djSRW + #define HASHSCALE1 443.8975 + float random(float seed){ + vec2 p = resultUV * seed; + vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1); + p3 += dot(p3, p3.yzx + 19.19); + return fract((p3.x + p3.y) * p3.z); + } + + ${SAMPLE_1D_SNIPPET} + ${SAMPLE_2D_SNIPPET} + ${SAMPLE_3D_SNIPPET} + `; + return SHADER_PREFIX; + } + var SAMPLE_1D_SNIPPET = ` +vec2 uvFromFlat(int texNumR, int texNumC, int index) { + int texR = index / texNumC; + int texC = index - texR * texNumC; + return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); +} +vec2 packedUVfrom1D(int texNumR, int texNumC, int index) { + int texelIndex = index / 2; + int texR = texelIndex / texNumC; + int texC = texelIndex - texR * texNumC; + return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); +} +`; + var SAMPLE_2D_SNIPPET = ` +vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, + int texNumC, int row, int col) { + int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2); + int texR = texelIndex / texNumC; + int texC = texelIndex - texR * texNumC; + return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); +} +`; + var SAMPLE_3D_SNIPPET = ` +vec2 packedUVfrom3D(int texNumR, int texNumC, + int texelsInBatch, int texelsInLogicalRow, int b, + int row, int col) { + int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2); + int texR = index / texNumC; + int texC = index - texR * texNumC; + return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); +} +`; + var SHADER_PACKED_PREFIX = ` + float getChannel(vec4 frag, vec2 innerDims) { + vec2 modCoord = mod(innerDims, 2.); + return modCoord.x == 0. ? + (modCoord.y == 0. ? frag.r : frag.g) : + (modCoord.y == 0. ? frag.b : frag.a); + } + float getChannel(vec4 frag, int dim) { + float modCoord = mod(float(dim), 2.); + return modCoord == 0. ? frag.r : frag.g; + } +`; + function getOutputScalarCoords() { + return ` + int getOutputCoords() { + return 0; + } + `; + } + function getOutputPacked1DCoords(shape, texShape, enableShapeUniforms) { + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + if (packedTexShape[0] === 1) { + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0)); + } + `; + } + return ` + int getOutputCoords() { + return 2 * int(resultUV.x * ${packedTexShape[1]}.0); + } + `; + } + if (packedTexShape[1] === 1) { + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0)); + } + `; + } + return ` + int getOutputCoords() { + return 2 * int(resultUV.y * ${packedTexShape[0]}.0); + } + `; + } + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(packedTexShape[0], packedTexShape[1])); + return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y); + } + `; + } + return ` + int getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${packedTexShape[0]}, ${packedTexShape[1]})); + return 2 * (resTexRC.x * ${packedTexShape[1]} + resTexRC.y); + } + `; + } + function getOutput1DCoords(shape, texShape, enableShapeUniforms) { + if (texShape[0] === 1) { + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + return int(resultUV.x * float(outTexShape[1])); + } + `; + } + return ` + int getOutputCoords() { + return int(resultUV.x * ${texShape[1]}.0); + } + `; + } + if (texShape[1] === 1) { + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + return int(resultUV.y * float(outTexShape[0])); + } + `; + } + return ` + int getOutputCoords() { + return int(resultUV.y * ${texShape[0]}.0); + } + `; + } + if (enableShapeUniforms) { + return ` + int getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + return resTexRC.x * outTexShape[1] + resTexRC.y; + } + `; + } + return ` + int getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + return resTexRC.x * ${texShape[1]} + resTexRC.y; + } + `; + } + function getOutputPacked3DCoords(shape, texShape, enableShapeUniforms) { + if (enableShapeUniforms) { + return ` + ivec3 getOutputCoords() { + ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); + int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0)); + int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0)); + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(packedTexShape[0], packedTexShape[1])); + int index = resTexRC.x * packedTexShape[1] + resTexRC.y; + + int b = index / texelsInBatch; + index -= b * texelsInBatch; + + int r = 2 * (index / texelsInLogicalRow); + int c = imod(index, texelsInLogicalRow) * 2; + + return ivec3(b, r, c); + } + `; + } + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + const texelsInLogicalRow = Math.ceil(shape[2] / 2); + const texelsInBatch = texelsInLogicalRow * Math.ceil(shape[1] / 2); + return ` + ivec3 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${packedTexShape[0]}, ${packedTexShape[1]})); + int index = resTexRC.x * ${packedTexShape[1]} + resTexRC.y; + + int b = index / ${texelsInBatch}; + index -= b * ${texelsInBatch}; + + int r = 2 * (index / ${texelsInLogicalRow}); + int c = imod(index, ${texelsInLogicalRow}) * 2; + + return ivec3(b, r, c); + } + `; + } + function getOutput3DCoords(shape, texShape, enableShapeUniforms) { + if (enableShapeUniforms) { + const coordsFromIndexSnippet2 = getOutputLogicalCoordinatesFromFlatIndexByUniform(["r", "c", "d"], shape); + return ` + ivec3 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + int index = resTexRC.x * outTexShape[1] + resTexRC.y; + ${coordsFromIndexSnippet2} + return ivec3(r, c, d); + } +`; + } + const coordsFromIndexSnippet = getLogicalCoordinatesFromFlatIndex(["r", "c", "d"], shape); + return ` + ivec3 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + ${coordsFromIndexSnippet} + return ivec3(r, c, d); + } + `; + } + function getOutputPackedNDCoords(shape, texShape, enableShapeUniforms) { + if (enableShapeUniforms) { + return ` + ivec4 getOutputCoords() { + ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(packedTexShape[0], packedTexShape[1])); + int index = resTexRC.x * packedTexShape[1] + resTexRC.y; + + int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0)); + int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0)); + int texelsInBatchN = texelsInBatch * outShape[1]; + + int b2 = index / texelsInBatchN; + index -= b2 * texelsInBatchN; + + int b = index / texelsInBatch; + index -= b * texelsInBatch; + + int r = 2 * (index / texelsInLogicalRow); + int c = imod(index, texelsInLogicalRow) * 2; + + return ivec4(b2, b, r, c); + } + `; + } + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + const texelsInLogicalRow = Math.ceil(shape[shape.length - 1] / 2); + const texelsInBatch = texelsInLogicalRow * Math.ceil(shape[shape.length - 2] / 2); + let texelsInBatchN = texelsInBatch; + let batches = ``; + let coords2 = "b, r, c"; + for (let b = 2; b < shape.length - 1; b++) { + texelsInBatchN *= shape[shape.length - b - 1]; + batches = ` + int b${b} = index / ${texelsInBatchN}; + index -= b${b} * ${texelsInBatchN}; + ` + batches; + coords2 = `b${b}, ` + coords2; + } + return ` + ivec${shape.length} getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${packedTexShape[0]}, ${packedTexShape[1]})); + int index = resTexRC.x * ${packedTexShape[1]} + resTexRC.y; + + ${batches} + + int b = index / ${texelsInBatch}; + index -= b * ${texelsInBatch}; + + int r = 2 * (index / ${texelsInLogicalRow}); + int c = imod(index, ${texelsInLogicalRow}) * 2; + + return ivec${shape.length}(${coords2}); + } + `; + } + function getOutput4DCoords(shape, texShape, enableShapeUniforms) { + if (enableShapeUniforms) { + const coordsFromIndexSnippet2 = getOutputLogicalCoordinatesFromFlatIndexByUniform(["r", "c", "d", "d2"], shape); + return ` + ivec4 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + int index = resTexRC.x * outTexShape[1] + resTexRC.y; + ${coordsFromIndexSnippet2} + return ivec4(r, c, d, d2); + } + `; + } + const coordsFromIndexSnippet = getLogicalCoordinatesFromFlatIndex(["r", "c", "d", "d2"], shape); + return ` + ivec4 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + ${coordsFromIndexSnippet} + return ivec4(r, c, d, d2); + } + `; + } + function getOutput5DCoords(shape, texShape) { + const coordsFromIndexSnippet = getLogicalCoordinatesFromFlatIndex(["r", "c", "d", "d2", "d3"], shape); + return ` + ivec5 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * vec2(${texShape[0]}, + ${texShape[1]})); + + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + + ${coordsFromIndexSnippet} + + ivec5 outShape = ivec5(r, c, d, d2, d3); + return outShape; + } + `; + } + function getOutput6DCoords(shape, texShape) { + const coordsFromIndexSnippet = getLogicalCoordinatesFromFlatIndex(["r", "c", "d", "d2", "d3", "d4"], shape); + return ` + ivec6 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + + ${coordsFromIndexSnippet} + + ivec6 result = ivec6(r, c, d, d2, d3, d4); + return result; + } + `; + } + function getOutputPacked2DCoords(shape, texShape, enableShapeUniforms) { + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + if (util_exports.arraysEqual(shape, texShape)) { + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); + return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); + } + `; + } + return ` + ivec2 getOutputCoords() { + return 2 * ivec2(resultUV.yx * vec2(${packedTexShape[0]}, ${packedTexShape[1]})); + } + `; + } + const texelsInLogicalRow = Math.ceil(shape[1] / 2); + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); + int texelsInLogicalRow = int(ceil(float(outShape[1]) / 2.0)); + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(packedTexShape[0], packedTexShape[1])); + + int index = resTexRC.x * packedTexShape[1] + resTexRC.y; + int r = 2 * (index / texelsInLogicalRow); + int c = imod(index, texelsInLogicalRow) * 2; + + return ivec2(r, c); + } + `; + } + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${packedTexShape[0]}, ${packedTexShape[1]})); + + int index = resTexRC.x * ${packedTexShape[1]} + resTexRC.y; + int r = 2 * (index / ${texelsInLogicalRow}); + int c = imod(index, ${texelsInLogicalRow}) * 2; + + return ivec2(r, c); + } + `; + } + function getOutput2DCoords(shape, texShape, enableShapeUniforms) { + if (util_exports.arraysEqual(shape, texShape)) { + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); + } + `; + } + return ` + ivec2 getOutputCoords() { + return ivec2(resultUV.yx * vec2(${texShape[0]}, ${texShape[1]})); + } + `; + } + if (shape[1] === 1) { + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + int index = resTexRC.x * outTexShape[1] + resTexRC.y; + return ivec2(index, 0); + } + `; + } + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + return ivec2(index, 0); + } + `; + } + if (shape[0] === 1) { + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + int index = resTexRC.x * outTexShape[1] + resTexRC.y; + return ivec2(0, index); + } + `; + } + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + return ivec2(0, index); + } + `; + } + if (enableShapeUniforms) { + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(outTexShape[0], outTexShape[1])); + int index = resTexRC.x * outTexShape[1] + resTexRC.y; + int r = index / outShape[1]; + int c = index - r * outShape[1]; + return ivec2(r, c); + } + `; + } + return ` + ivec2 getOutputCoords() { + ivec2 resTexRC = ivec2(resultUV.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.x * ${texShape[1]} + resTexRC.y; + int r = index / ${shape[1]}; + int c = index - r * ${shape[1]}; + return ivec2(r, c); + } + `; + } + function getFlatOffsetUniformName(texName) { + return `offset${texName}`; + } + function getPackedSamplerScalar(inputInfo) { + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const glsl = getGlslDifferences(); + return ` + vec4 ${funcName}() { + return ${glsl.texture2D}(${texName}, halfCR); + } + `; + } + function getSamplerScalar(inputInfo, enableShapeUniforms) { + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + if (inputInfo.shapeInfo.isUniform) { + return `float ${funcName}() {return ${texName};}`; + } + const [texNumR, texNumC] = inputInfo.shapeInfo.texShape; + if (texNumR === 1 && texNumC === 1) { + return ` + float ${funcName}() { + return sampleTexture(${texName}, halfCR); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + if (enableShapeUniforms) { + return ` + float ${funcName}() { + vec2 uv = uvFromFlat(${texName}TexShape[0], ${texName}TexShape[1], ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + const [tNumR, tNumC] = inputInfo.shapeInfo.texShape; + return ` + float ${funcName}() { + vec2 uv = uvFromFlat(${tNumR}, ${tNumC}, ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + function getPackedSampler1D(inputInfo, enableShapeUniforms) { + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const texShape = inputInfo.shapeInfo.texShape; + const glsl = getGlslDifferences(); + if (enableShapeUniforms) { + return ` + vec4 ${funcName}(int index) { + ivec2 packedTexShape = ivec2(ceil(float(${texName}TexShape[0]) / 2.0), ceil(float(${texName}TexShape[1]) / 2.0)); + vec2 uv = packedUVfrom1D( + packedTexShape[0], packedTexShape[1], index); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + return ` + vec4 ${funcName}(int index) { + vec2 uv = packedUVfrom1D( + ${packedTexShape[0]}, ${packedTexShape[1]}, index); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + function getSampler1D(inputInfo, enableShapeUniforms) { + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int index) { + ${getUniformSampler(inputInfo)} + } + `; + } + const texShape = inputInfo.shapeInfo.texShape; + const tNumR = texShape[0]; + const tNumC = texShape[1]; + if (tNumC === 1 && tNumR === 1) { + return ` + float ${funcName}(int index) { + return sampleTexture(${texName}, halfCR); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + if (tNumC === 1) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int index) { + vec2 uv = vec2(0.5, (float(index + ${offset}) + 0.5) / float(${texName}TexShape[0])); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int index) { + vec2 uv = vec2(0.5, (float(index + ${offset}) + 0.5) / ${tNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (tNumR === 1) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int index) { + vec2 uv = vec2((float(index + ${offset}) + 0.5) / float(${texName}TexShape[1]), 0.5); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int index) { + vec2 uv = vec2((float(index + ${offset}) + 0.5) / ${tNumC}.0, 0.5); + return sampleTexture(${texName}, uv); + } + `; + } + if (enableShapeUniforms) { + return ` + float ${funcName}(int index) { + vec2 uv = uvFromFlat(${texName}TexShape[0], ${texName}TexShape[1], index + ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int index) { + vec2 uv = uvFromFlat(${tNumR}, ${tNumC}, index + ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + function getPackedSampler2D(inputInfo, enableShapeUniforms) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const texShape = inputInfo.shapeInfo.texShape; + const texNumR = texShape[0]; + const texNumC = texShape[1]; + const glsl = getGlslDifferences(); + if (texShape != null && util_exports.arraysEqual(shape, texShape)) { + if (enableShapeUniforms) { + return ` + vec4 ${funcName}(int row, int col) { + vec2 uv = (vec2(col, row) + halfCR) / vec2(${texName}TexShape[1], ${texName}TexShape[0]); + + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + return ` + vec4 ${funcName}(int row, int col) { + vec2 uv = (vec2(col, row) + halfCR) / vec2(${texNumC}.0, ${texNumR}.0); + + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + if (enableShapeUniforms) { + return ` + vec4 ${funcName}(int row, int col) { + ivec2 packedTexShape = ivec2(ceil(float(${texName}TexShape[0]) / 2.0), ceil(float(${texName}TexShape[1]) / 2.0)); + int valuesPerRow = int(ceil(float(${texName}Shape[1]) / 2.0)); + vec2 uv = packedUVfrom2D(valuesPerRow, packedTexShape[0], packedTexShape[1], row, col); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + const valuesPerRow = Math.ceil(shape[1] / 2); + return ` + vec4 ${funcName}(int row, int col) { + vec2 uv = packedUVfrom2D(${valuesPerRow}, ${packedTexShape[0]}, ${packedTexShape[1]}, row, col); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + function getSampler2D(inputInfo, enableShapeUniforms) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const texShape = inputInfo.shapeInfo.texShape; + if (texShape != null && util_exports.arraysEqual(shape, texShape)) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col) { + vec2 uv = (vec2(col, row) + halfCR) / vec2(${texName}TexShape[1], ${texName}TexShape[0]); + return sampleTexture(${texName}, uv); + } + `; + } + const texNumR2 = texShape[0]; + const texNumC2 = texShape[1]; + return ` + float ${funcName}(int row, int col) { + vec2 uv = (vec2(col, row) + halfCR) / vec2(${texNumC2}.0, ${texNumR2}.0); + return sampleTexture(${texName}, uv); + } + `; + } + const { newShape, keptDims } = util_exports.squeezeShape(shape); + const squeezedShape = newShape; + if (squeezedShape.length < shape.length) { + const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape); + const params = ["row", "col"]; + return ` + ${getSamplerFromInInfo(newInputInfo, enableShapeUniforms)} + float ${funcName}(int row, int col) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int row, int col) { + int index = round(dot(vec2(row, col), vec2(${shape[1]}, 1))); + ${getUniformSampler(inputInfo)} + } + `; + } + const texNumR = texShape[0]; + const texNumC = texShape[1]; + const offset = getFlatOffsetUniformName(texName); + if (texNumC === 1) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col) { + float index = dot(vec3(row, col, ${offset}), vec3(${texName}Shape[1], 1, 1)); + vec2 uv = vec2(0.5, (index + 0.5) / float(${texName}TexShape[0])); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col) { + float index = dot(vec3(row, col, ${offset}), vec3(${shape[1]}, 1, 1)); + vec2 uv = vec2(0.5, (index + 0.5) / ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (texNumR === 1) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col) { + float index = dot(vec3(row, col, ${offset}), vec3(${texName}Shape[1], 1, 1)); + vec2 uv = vec2((index + 0.5) / float(${texName}TexShape[1]), 0.5); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col) { + float index = dot(vec3(row, col, ${offset}), vec3(${shape[1]}, 1, 1)); + vec2 uv = vec2((index + 0.5) / ${texNumC}.0, 0.5); + return sampleTexture(${texName}, uv); + } + `; + } + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${texName}Shape[1] + col + ${offset}; + vec2 uv = uvFromFlat(${texName}TexShape[0], ${texName}TexShape[1], index); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${shape[1]} + col + ${offset}; + vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index); + return sampleTexture(${texName}, uv); + } +`; + } + function getPackedSampler3D(inputInfo, enableShapeUniforms) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const texShape = inputInfo.shapeInfo.texShape; + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + if (shape[0] === 1) { + const squeezedShape = shape.slice(1); + const keptDims = [1, 2]; + const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape); + const params = ["b", "row", "col"]; + return ` + ${getPackedSamplerFromInInfo(newInputInfo, enableShapeUniforms)} + vec4 ${funcName}(int b, int row, int col) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + const glsl = getGlslDifferences(); + if (enableShapeUniforms) { + return ` + vec4 ${funcName}(int b, int row, int col) { + ivec2 packedTexShape = ivec2(ceil(float(${texName}TexShape[0]) / 2.0), ceil(float(${texName}TexShape[1]) / 2.0)); + int valuesPerRow = int(ceil(float(${texName}Shape[2]) / 2.0)); + int texelsInBatch = valuesPerRow * int(ceil(float(${texName}Shape[1]) / 2.0)); + vec2 uv = packedUVfrom3D( + packedTexShape[0], packedTexShape[1], texelsInBatch, valuesPerRow, b, row, col); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + const texNumR = packedTexShape[0]; + const texNumC = packedTexShape[1]; + const valuesPerRow = Math.ceil(shape[2] / 2); + const texelsInBatch = valuesPerRow * Math.ceil(shape[1] / 2); + return ` + vec4 ${funcName}(int b, int row, int col) { + vec2 uv = packedUVfrom3D( + ${texNumR}, ${texNumC}, ${texelsInBatch}, ${valuesPerRow}, b, row, col); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + function getSampler3D(inputInfo, enableShapeUniforms) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const stride0 = shape[1] * shape[2]; + const stride1 = shape[2]; + const { newShape, keptDims } = util_exports.squeezeShape(shape); + const squeezedShape = newShape; + if (squeezedShape.length < shape.length) { + const newInputInfo = squeezeInputInfo(inputInfo, squeezedShape); + const params = ["row", "col", "depth"]; + return ` + ${getSamplerFromInInfo(newInputInfo, enableShapeUniforms)} + float ${funcName}(int row, int col, int depth) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int row, int col, int depth) { + int index = round(dot(vec3(row, col, depth), + vec3(${stride0}, ${stride1}, 1))); + ${getUniformSampler(inputInfo)} + } + `; + } + const texShape = inputInfo.shapeInfo.texShape; + const texNumR = texShape[0]; + const texNumC = texShape[1]; + const flatOffset = inputInfo.shapeInfo.flatOffset; + if (texNumC === stride0 && flatOffset == null) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth) { + int stride1 = ${texName}Shape[2]; + float texR = float(row); + float texC = dot(vec2(col, depth), vec2(stride1, 1)); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texName}TexShape[1], ${texName}TexShape[0]); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth) { + float texR = float(row); + float texC = dot(vec2(col, depth), vec2(${stride1}, 1)); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (texNumC === stride1 && flatOffset == null) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth) { + float texR = dot(vec2(row, col), vec2(${texName}Shape[1], 1)); + float texC = float(depth); + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${texName}TexShape[1], ${texName}TexShape[0]); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth) { + float texR = dot(vec2(row, col), vec2(${shape[1]}, 1)); + float texC = float(depth); + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth) { + // Explicitly use integer operations as dot() only works on floats. + int stride0 = ${texName}Shape[1] * ${texName}Shape[2]; + int stride1 = ${texName}Shape[2]; + int index = row * ${stride0} + col * ${stride1} + depth + ${offset}; + vec2 uv = uvFromFlat(${texName}TexShape[0], ${texName}TexShape[1], index); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${stride0} + col * ${stride1} + depth + ${offset}; + vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index); + return sampleTexture(${texName}, uv); + } + `; + } + function getPackedSamplerND(inputInfo, enableShapeUniforms) { + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const glsl = getGlslDifferences(); + if (enableShapeUniforms) { + return ` + vec4 ${funcName}(int b2, int b, int row, int col) { + int valuesPerRow = int(ceil(float(${texName}Shape[3]) / 2.0)); + int texelsInBatch = valuesPerRow * int(ceil(float(${texName}Shape[2]) / 2.0)); + int index = b * texelsInBatch + (row / 2) * valuesPerRow + (col / 2); + texelsInBatch *= ${texName}Shape[1]; + index = b2 * texelsInBatch + index; + ivec2 packedTexShape = ivec2(ceil(float(${texName}TexShape[0]) / 2.0), ceil(float(${texName}TexShape[1]) / 2.0)); + int texR = index / packedTexShape[1]; + int texC = index - texR * packedTexShape[1]; + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return ${glsl.texture2D}(${texName}, uv); + } + `; + } + const shape = inputInfo.shapeInfo.logicalShape; + const rank = shape.length; + const texShape = inputInfo.shapeInfo.texShape; + const packedTexShape = [Math.ceil(texShape[0] / 2), Math.ceil(texShape[1] / 2)]; + const texNumR = packedTexShape[0]; + const texNumC = packedTexShape[1]; + const valuesPerRow = Math.ceil(shape[rank - 1] / 2); + let texelsInBatch = valuesPerRow * Math.ceil(shape[rank - 2] / 2); + let params = `int b, int row, int col`; + let index = `b * ${texelsInBatch} + (row / 2) * ${valuesPerRow} + (col / 2)`; + for (let b = 2; b < rank - 1; b++) { + params = `int b${b}, ` + params; + texelsInBatch *= shape[rank - b - 1]; + index = `b${b} * ${texelsInBatch} + ` + index; + } + return ` + vec4 ${funcName}(${params}) { + int index = ${index}; + int texR = index / ${texNumC}; + int texC = index - texR * ${texNumC}; + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${texNumC}, ${texNumR}); + return ${glsl.texture2D}(${texName}, uv); + } + `; + } + function getSampler4D(inputInfo, enableShapeUniforms) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const stride2 = shape[3]; + const stride1 = shape[2] * stride2; + const stride0 = shape[1] * stride1; + const { newShape, keptDims } = util_exports.squeezeShape(shape); + if (newShape.length < shape.length) { + const newInputInfo = squeezeInputInfo(inputInfo, newShape); + const params = ["row", "col", "depth", "depth2"]; + return ` + ${getSamplerFromInInfo(newInputInfo, enableShapeUniforms)} + float ${funcName}(int row, int col, int depth, int depth2) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + int index = round(dot(vec4(row, col, depth, depth2), + vec4(${stride0}, ${stride1}, ${stride2}, 1))); + ${getUniformSampler(inputInfo)} + } + `; + } + const flatOffset = inputInfo.shapeInfo.flatOffset; + const texShape = inputInfo.shapeInfo.texShape; + const texNumR = texShape[0]; + const texNumC = texShape[1]; + const stride2Str = `int stride2 = ${texName}Shape[3];`; + const stride1Str = `int stride1 = ${texName}Shape[2] * stride2;`; + const stride0Str = `int stride0 = ${texName}Shape[1] * stride1;`; + if (texNumC === stride0 && flatOffset == null) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + ${stride2Str} + ${stride1Str} + float texR = float(row); + float texC = + dot(vec3(col, depth, depth2), + vec3(stride1, stride2, 1)); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texName}TexShape[1], ${texName}TexShape[0]); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + float texR = float(row); + float texC = + dot(vec3(col, depth, depth2), + vec3(${stride1}, ${stride2}, 1)); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (texNumC === stride2 && flatOffset == null) { + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + float texR = dot(vec3(row, col, depth), + vec3(${texName}Shape[1] * ${texName}Shape[2], ${texName}Shape[2], 1)); + float texC = float(depth2); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texName}TexShape[1], ${texName}TexShape[0]); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + float texR = dot(vec3(row, col, depth), + vec3(${shape[1] * shape[2]}, ${shape[2]}, 1)); + float texC = float(depth2); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + if (enableShapeUniforms) { + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + // Explicitly use integer operations as dot() only works on floats. + ${stride2Str} + ${stride1Str} + ${stride0Str} + int index = row * stride0 + col * stride1 + + depth * stride2 + depth2; + vec2 uv = uvFromFlat(${texName}TexShape[0], ${texName}TexShape[1], index + ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + return ` + float ${funcName}(int row, int col, int depth, int depth2) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${stride0} + col * ${stride1} + + depth * ${stride2} + depth2; + vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index + ${offset}); + return sampleTexture(${texName}, uv); + } + `; + } + function getSampler5D(inputInfo) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const stride3 = shape[4]; + const stride2 = shape[3] * stride3; + const stride1 = shape[2] * stride2; + const stride0 = shape[1] * stride1; + const { newShape, keptDims } = util_exports.squeezeShape(shape); + if (newShape.length < shape.length) { + const newInputInfo = squeezeInputInfo(inputInfo, newShape); + const params = ["row", "col", "depth", "depth2", "depth3"]; + return ` + ${getSamplerFromInInfo(newInputInfo)} + float ${funcName}(int row, int col, int depth, int depth2, int depth3) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int row, int col, int depth, int depth2, int depth3) { + float index = dot( + vec4(row, col, depth, depth2), + vec4(${stride0}, ${stride1}, ${stride2}, ${stride3})) + + depth3; + ${getUniformSampler(inputInfo)} + } + `; + } + const flatOffset = inputInfo.shapeInfo.flatOffset; + const texShape = inputInfo.shapeInfo.texShape; + const texNumR = texShape[0]; + const texNumC = texShape[1]; + if (texNumC === stride0 && flatOffset == null) { + return ` + float ${funcName}(int row, int col, int depth, int depth2, int depth3) { + int texR = row; + float texC = dot(vec4(col, depth, depth2, depth3), + vec4(${stride1}, ${stride2}, ${stride3}, 1)); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (texNumC === stride3 && flatOffset == null) { + return ` + float ${funcName}(int row, int col, int depth, int depth2, int depth3) { + float texR = dot( + vec4(row, col, depth, depth2), + vec4(${shape[1] * shape[2] * shape[3]}, + ${shape[2] * shape[3]}, ${shape[3]}, 1)); + int texC = depth3; + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + return ` + float ${funcName}(int row, int col, int depth, int depth2, int depth3) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${stride0} + col * ${stride1} + depth * ${stride2} + + depth2 * ${stride3} + depth3 + ${offset}; + vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index); + return sampleTexture(${texName}, uv); + } + `; + } + function getSampler6D(inputInfo) { + const shape = inputInfo.shapeInfo.logicalShape; + const texName = inputInfo.name; + const funcName = "get" + texName.charAt(0).toUpperCase() + texName.slice(1); + const { newShape, keptDims } = util_exports.squeezeShape(shape); + if (newShape.length < shape.length) { + const newInputInfo = squeezeInputInfo(inputInfo, newShape); + const params = ["row", "col", "depth", "depth2", "depth3", "depth4"]; + return ` + ${getSamplerFromInInfo(newInputInfo)} + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + } + const stride4 = shape[5]; + const stride3 = shape[4] * stride4; + const stride2 = shape[3] * stride3; + const stride1 = shape[2] * stride2; + const stride0 = shape[1] * stride1; + if (inputInfo.shapeInfo.isUniform) { + return ` + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + int index = round(dot( + vec4(row, col, depth, depth2), + vec4(${stride0}, ${stride1}, ${stride2}, ${stride3})) + + dot( + vec2(depth3, depth4), + vec2(${stride4}, 1))); + ${getUniformSampler(inputInfo)} + } + `; + } + const flatOffset = inputInfo.shapeInfo.flatOffset; + const texShape = inputInfo.shapeInfo.texShape; + const texNumR = texShape[0]; + const texNumC = texShape[1]; + if (texNumC === stride0 && flatOffset == null) { + return ` + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + int texR = row; + float texC = dot(vec4(col, depth, depth2, depth3), + vec4(${stride1}, ${stride2}, ${stride3}, ${stride4})) + + float(depth4); + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + if (texNumC === stride4 && flatOffset == null) { + return ` + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + float texR = dot(vec4(row, col, depth, depth2), + vec4(${shape[1] * shape[2] * shape[3] * shape[4]}, + ${shape[2] * shape[3] * shape[4]}, + ${shape[3] * shape[4]}, + ${shape[4]})) + float(depth3); + int texC = depth4; + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${texNumC}.0, ${texNumR}.0); + return sampleTexture(${texName}, uv); + } + `; + } + const offset = getFlatOffsetUniformName(texName); + return ` + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + // Explicitly use integer operations as dot() only works on floats. + int index = row * ${stride0} + col * ${stride1} + depth * ${stride2} + + depth2 * ${stride3} + depth3 * ${stride4} + depth4 + ${offset}; + vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index); + return sampleTexture(${texName}, uv); + } + `; + } + function getUniformSampler(inputInfo) { + const texName = inputInfo.name; + const inSize = util_exports.sizeFromShape(inputInfo.shapeInfo.logicalShape); + if (inSize < 2) { + return `return ${texName};`; + } + return ` + for (int i = 0; i < ${inSize}; i++) { + if (i == index) { + return ${texName}[i]; + } + } + `; + } + function getPackedSamplerAtOutputCoords(inputInfo, outShapeInfo) { + const texName = inputInfo.name; + const texFuncSnippet = texName.charAt(0).toUpperCase() + texName.slice(1); + const funcName = "get" + texFuncSnippet + "AtOutCoords"; + const inRank = inputInfo.shapeInfo.logicalShape.length; + const outRank = outShapeInfo.logicalShape.length; + const broadcastDims = getBroadcastDims2(inputInfo.shapeInfo.logicalShape, outShapeInfo.logicalShape); + const type = getCoordsDataType(outRank); + const rankDiff = outRank - inRank; + let coordsSnippet; + const fields = ["x", "y", "z", "w", "u", "v"]; + if (inRank === 0) { + coordsSnippet = ""; + } else if (outRank < 2 && broadcastDims.length >= 1) { + coordsSnippet = "coords = 0;"; + } else { + coordsSnippet = broadcastDims.map((d) => `coords.${fields[d + rankDiff]} = 0;`).join("\n"); + } + let unpackedCoordsSnippet = ""; + if (outRank < 2 && inRank > 0) { + unpackedCoordsSnippet = "coords"; + } else { + unpackedCoordsSnippet = inputInfo.shapeInfo.logicalShape.map((s, i) => `coords.${fields[i + rankDiff]}`).join(", "); + } + let output = `return outputValue;`; + const inSize = util_exports.sizeFromShape(inputInfo.shapeInfo.logicalShape); + const isInputScalar = inSize === 1; + const outSize = util_exports.sizeFromShape(outShapeInfo.logicalShape); + const isOutputScalar = outSize === 1; + if (inRank === 1 && !isInputScalar && !isOutputScalar) { + output = ` + return vec4(outputValue.xy, outputValue.xy); + `; + } else if (isInputScalar && !isOutputScalar) { + if (outRank === 1) { + output = ` + return vec4(outputValue.x, outputValue.x, 0., 0.); + `; + } else { + output = ` + return vec4(outputValue.x); + `; + } + } else if (broadcastDims.length) { + const rows = inRank - 2; + const cols = inRank - 1; + if (broadcastDims.indexOf(rows) > -1 && broadcastDims.indexOf(cols) > -1) { + output = `return vec4(outputValue.x);`; + } else if (broadcastDims.indexOf(rows) > -1) { + output = `return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);`; + } else if (broadcastDims.indexOf(cols) > -1) { + output = `return vec4(outputValue.xx, outputValue.zz);`; + } + } + return ` + vec4 ${funcName}() { + ${type} coords = getOutputCoords(); + ${coordsSnippet} + vec4 outputValue = get${texFuncSnippet}(${unpackedCoordsSnippet}); + ${output} + } + `; + } + function getSamplerAtOutputCoords(inputInfo, outShapeInfo) { + const texName = inputInfo.name; + const texFuncSnippet = texName.charAt(0).toUpperCase() + texName.slice(1); + const funcName = "get" + texFuncSnippet + "AtOutCoords"; + const outTexShape = outShapeInfo.texShape; + const inTexShape = inputInfo.shapeInfo.texShape; + const inRank = inputInfo.shapeInfo.logicalShape.length; + const outRank = outShapeInfo.logicalShape.length; + if (!inputInfo.shapeInfo.isUniform && inRank === outRank && inputInfo.shapeInfo.flatOffset == null && util_exports.arraysEqual(inTexShape, outTexShape)) { + return ` + float ${funcName}() { + return sampleTexture(${texName}, resultUV); + } + `; + } + const type = getCoordsDataType(outRank); + const broadcastDims = getBroadcastDims2(inputInfo.shapeInfo.logicalShape, outShapeInfo.logicalShape); + const rankDiff = outRank - inRank; + let coordsSnippet; + const fields = ["x", "y", "z", "w", "u", "v"]; + if (inRank === 0) { + coordsSnippet = ""; + } else if (outRank < 2 && broadcastDims.length >= 1) { + coordsSnippet = "coords = 0;"; + } else { + coordsSnippet = broadcastDims.map((d) => `coords.${fields[d + rankDiff]} = 0;`).join("\n"); + } + let unpackedCoordsSnippet = ""; + if (outRank < 2 && inRank > 0) { + unpackedCoordsSnippet = "coords"; + } else { + unpackedCoordsSnippet = inputInfo.shapeInfo.logicalShape.map((s, i) => `coords.${fields[i + rankDiff]}`).join(", "); + } + return ` + float ${funcName}() { + ${type} coords = getOutputCoords(); + ${coordsSnippet} + return get${texFuncSnippet}(${unpackedCoordsSnippet}); + } + `; + } + function getCoordsDataType(rank) { + if (rank <= 1) { + return "int"; + } else if (rank === 2) { + return "ivec2"; + } else if (rank === 3) { + return "ivec3"; + } else if (rank === 4) { + return "ivec4"; + } else if (rank === 5) { + return "ivec5"; + } else if (rank === 6) { + return "ivec6"; + } else { + throw Error(`GPU for rank ${rank} is not yet supported`); + } + } + function getUniformInfoFromShape(isPacked, shape, texShape) { + const { newShape, keptDims } = util_exports.squeezeShape(shape); + const rank = shape.length; + const useSqueezePackedShape = isPacked && rank === 3 && shape[0] === 1; + const squeezeShape2 = useSqueezePackedShape ? shape.slice(1) : newShape; + const useSqueezeShape = !isPacked && rank > 1 && !util_exports.arraysEqual(shape, texShape) && newShape.length < rank || useSqueezePackedShape; + const uniformShape = useSqueezeShape ? squeezeShape2 : shape; + return { useSqueezeShape, uniformShape, keptDims }; + } + function squeezeInputInfo(inInfo, squeezedShape) { + const newInputInfo = JSON.parse(JSON.stringify(inInfo)); + newInputInfo.shapeInfo.logicalShape = squeezedShape; + return newInputInfo; + } + function getSqueezedParams(params, keptDims) { + return keptDims.map((d) => params[d]).join(", "); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_math.js + function compileProgram(gpgpu, program, inputs, output) { + const inputInfos = inputs.map((input2, i) => { + const shapeInfo = { + logicalShape: input2.shape, + texShape: input2.isUniform ? null : input2.texData.texShape, + isUniform: input2.isUniform, + isPacked: input2.isUniform ? false : input2.texData.isPacked, + flatOffset: null + }; + if (input2.texData != null && input2.texData.slice != null && input2.texData.slice.flatOffset > 0) { + shapeInfo.flatOffset = input2.texData.slice.flatOffset; + } + return { name: program.variableNames[i], shapeInfo }; + }); + const inShapeInfos = inputInfos.map((x) => x.shapeInfo); + const outShapeInfo = { + logicalShape: output.shape, + texShape: output.texData.texShape, + isUniform: false, + isPacked: output.texData.isPacked, + flatOffset: null + }; + const source = makeShader(inputInfos, outShapeInfo, program); + const fragmentShader = createFragmentShader(gpgpu.gl, source); + const webGLProgram = gpgpu.createProgram(fragmentShader); + if (!env().get("ENGINE_COMPILE_ONLY")) { + return Object.assign({ + program, + fragmentShader, + source, + webGLProgram, + inShapeInfos, + outShapeInfo + }, getUniformLocations(gpgpu, program, webGLProgram)); + } else { + return { + program, + fragmentShader, + source, + webGLProgram, + inShapeInfos, + outShapeInfo, + uniformLocations: null, + customUniformLocations: null, + infLoc: null, + nanLoc: null, + inShapesLocations: null, + inTexShapesLocations: null, + outShapeLocation: null, + outShapeStridesLocation: null, + outTexShapeLocation: null + }; + } + } + function getUniformLocations(gpgpu, program, webGLProgram) { + const uniformLocations = {}; + const inShapesLocations = {}; + const inTexShapesLocations = {}; + const customUniformLocations = []; + let outShapeLocation; + let outTexShapeLocation; + let outShapeStridesLocation; + let infLoc = null; + let nanLoc = null; + nanLoc = gpgpu.getUniformLocation(webGLProgram, "NAN", false); + if (env().getNumber("WEBGL_VERSION") === 1) { + infLoc = gpgpu.getUniformLocation(webGLProgram, "INFINITY", false); + } + const shouldThrow = false; + for (let i = 0; i < program.variableNames.length; i++) { + const varName = program.variableNames[i]; + uniformLocations[varName] = gpgpu.getUniformLocation(webGLProgram, varName, shouldThrow); + uniformLocations[`offset${varName}`] = gpgpu.getUniformLocation(webGLProgram, `offset${varName}`, shouldThrow); + if (program.enableShapeUniforms) { + inShapesLocations[`${varName}Shape`] = gpgpu.getUniformLocation(webGLProgram, `${varName}Shape`, shouldThrow); + inTexShapesLocations[`${varName}TexShape`] = gpgpu.getUniformLocation(webGLProgram, `${varName}TexShape`, shouldThrow); + } + } + if (program.enableShapeUniforms) { + outShapeLocation = gpgpu.getUniformLocation(webGLProgram, "outShape", shouldThrow); + outShapeStridesLocation = gpgpu.getUniformLocation(webGLProgram, "outShapeStrides", shouldThrow); + outTexShapeLocation = gpgpu.getUniformLocation(webGLProgram, "outTexShape", shouldThrow); + } + if (program.customUniforms) { + program.customUniforms.forEach((d, i) => { + customUniformLocations[i] = gpgpu.getUniformLocation(webGLProgram, d.name, shouldThrow); + }); + } + return { + uniformLocations, + customUniformLocations, + infLoc, + nanLoc, + inShapesLocations, + inTexShapesLocations, + outShapeLocation, + outShapeStridesLocation, + outTexShapeLocation + }; + } + function validateBinaryAndProgram(shapeInfos, inputs) { + if (shapeInfos.length !== inputs.length) { + throw Error(`Binary was compiled with ${shapeInfos.length} inputs, but was executed with ${inputs.length} inputs`); + } + shapeInfos.forEach((s, i) => { + const shapeA = s.logicalShape; + const input2 = inputs[i]; + const shapeB = input2.shape; + if (!util_exports.arraysEqual(shapeA, shapeB)) { + throw Error(`Binary was compiled with different shapes than the current args. Shapes ${shapeA} and ${shapeB} must match`); + } + if (s.isUniform && input2.isUniform) { + return; + } + const texShapeA = s.texShape; + const texShapeB = input2.isUniform ? null : input2.texData.texShape; + if (!util_exports.arraysEqual(texShapeA, texShapeB)) { + throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${texShapeA} and ${texShapeB} must match`); + } + }); + } + function runProgram(gpgpu, binary, inputs, output, customUniformValues) { + if (!binary.program.enableShapeUniforms) { + validateBinaryAndProgram(binary.inShapeInfos, inputs); + validateBinaryAndProgram([binary.outShapeInfo], [output]); + } + const outTex = output.texData.texture; + const outTexShape = output.texData.texShape; + if (output.texData.isPacked) { + gpgpu.setOutputPackedMatrixTexture(outTex.texture, outTexShape[0], outTexShape[1]); + } else { + gpgpu.setOutputMatrixTexture(outTex.texture, outTexShape[0], outTexShape[1]); + } + gpgpu.setProgram(binary.webGLProgram); + if (env().getNumber("WEBGL_VERSION") === 1) { + if (binary.infLoc !== null) { + gpgpu.gl.uniform1f(binary.infLoc, Infinity); + } + } + if (binary.nanLoc !== null) { + gpgpu.gl.uniform1f(binary.nanLoc, NaN); + } + inputs.forEach((input2, i) => { + const varName = binary.program.variableNames[i]; + const varLoc = binary.uniformLocations[varName]; + const varOffsetLoc = binary.uniformLocations[`offset${varName}`]; + const varShapeLoc = binary.inShapesLocations[`${varName}Shape`]; + const varTexShapeLoc = binary.inTexShapesLocations[`${varName}TexShape`]; + if (varShapeLoc) { + const { uniformShape } = getUniformInfoFromShape(binary.program.packedInputs, input2.shape, input2.texData.texShape); + switch (uniformShape.length) { + case 1: + gpgpu.gl.uniform1iv(varShapeLoc, new Int32Array(uniformShape)); + break; + case 2: + gpgpu.gl.uniform2iv(varShapeLoc, new Int32Array(uniformShape)); + break; + case 3: + gpgpu.gl.uniform3iv(varShapeLoc, new Int32Array(uniformShape)); + break; + case 4: + gpgpu.gl.uniform4iv(varShapeLoc, new Int32Array(uniformShape)); + break; + default: + break; + } + } + if (varTexShapeLoc) { + gpgpu.gl.uniform2i(varTexShapeLoc, input2.texData.texShape[0], input2.texData.texShape[1]); + } + if (varLoc == null) { + return; + } + if (input2.isUniform) { + if (util_exports.sizeFromShape(input2.shape) < 2) { + gpgpu.gl.uniform1f(varLoc, input2.uniformValues[0]); + } else { + let vals = input2.uniformValues; + if (!(vals instanceof Float32Array)) { + vals = new Float32Array(vals); + } + gpgpu.gl.uniform1fv(varLoc, vals); + } + return; + } + if (input2.texData.slice != null && varOffsetLoc != null) { + gpgpu.gl.uniform1i(varOffsetLoc, input2.texData.slice.flatOffset); + } + gpgpu.setInputMatrixTexture(input2.texData.texture.texture, varLoc, i); + }); + const outShapeLoc = binary.outShapeLocation; + if (outShapeLoc) { + switch (output.shape.length) { + case 1: + gpgpu.gl.uniform1iv(outShapeLoc, new Int32Array(output.shape)); + break; + case 2: + gpgpu.gl.uniform2iv(outShapeLoc, new Int32Array(output.shape)); + break; + case 3: + gpgpu.gl.uniform3iv(outShapeLoc, new Int32Array(output.shape)); + break; + case 4: + gpgpu.gl.uniform4iv(outShapeLoc, new Int32Array(output.shape)); + break; + default: + break; + } + } + if (binary.outShapeStridesLocation) { + const strides = util_exports.computeStrides(output.shape); + switch (output.shape.length) { + case 2: + gpgpu.gl.uniform1iv(binary.outShapeStridesLocation, new Int32Array(strides)); + break; + case 3: + gpgpu.gl.uniform2iv(binary.outShapeStridesLocation, new Int32Array(strides)); + break; + case 4: + gpgpu.gl.uniform3iv(binary.outShapeStridesLocation, new Int32Array(strides)); + break; + default: + break; + } + } + if (binary.outTexShapeLocation) { + gpgpu.gl.uniform2i(binary.outTexShapeLocation, output.texData.texShape[0], output.texData.texShape[1]); + } + if (binary.program.customUniforms && customUniformValues) { + binary.program.customUniforms.forEach((d, i) => { + const customLoc = binary.customUniformLocations[i]; + const customValue = customUniformValues[i]; + if (d.type === "float") { + gpgpu.gl.uniform1fv(customLoc, customValue); + } else if (d.type === "vec2") { + gpgpu.gl.uniform2fv(customLoc, customValue); + } else if (d.type === "vec3") { + gpgpu.gl.uniform3fv(customLoc, customValue); + } else if (d.type === "vec4") { + gpgpu.gl.uniform4fv(customLoc, customValue); + } else if (d.type === "int") { + gpgpu.gl.uniform1iv(customLoc, customValue); + } else if (d.type === "ivec2") { + gpgpu.gl.uniform2iv(customLoc, customValue); + } else if (d.type === "ivec3") { + gpgpu.gl.uniform3iv(customLoc, customValue); + } else if (d.type === "ivec4") { + gpgpu.gl.uniform4iv(customLoc, customValue); + } else { + throw Error(`uniform type ${d.type} is not supported yet.`); + } + }); + } + gpgpu.executeProgram(); + } + function makeShaderKey(program, inputs, output) { + let keyInputs = ""; + inputs.concat(output).forEach((x) => { + const hasOffset = x.texData != null && x.texData.slice != null && x.texData.slice.flatOffset > 0; + if (program.enableShapeUniforms && !x.isUniform) { + const xTexShape = x.texData.texShape; + const { useSqueezeShape, uniformShape, keptDims } = getUniformInfoFromShape(program.packedInputs, x.shape, xTexShape); + let rank1 = "", rank2 = "", rank34 = ""; + if (uniformShape.length === 1 && program.packedInputs) { + const packedTexShape = [Math.ceil(xTexShape[0] / 2), Math.ceil(xTexShape[1] / 2)]; + rank1 = `${packedTexShape[0] > 1}_${packedTexShape[1] > 1}`; + } else if (uniformShape.length === 2 && !program.packedInputs) { + rank2 = `${uniformShape[0] > 1}_${uniformShape[1] > 1}`; + } else if (uniformShape.length > 2 && !program.packedInputs) { + const strides = util_exports.computeStrides(uniformShape); + rank34 = `${strides[0] === xTexShape[1]}_${strides[strides.length - 1] === xTexShape[1]}`; + } + const xRank = x.shape.length; + const isLogicalShapTexShapeEqual = uniformShape.length === 2 && util_exports.arraysEqual(x.shape, xTexShape); + const isScalar = util_exports.sizeFromShape(x.shape) === 1; + const broadcastDims = backend_util_exports.getBroadcastDims(x.shape, output.shape); + const isInOutTexShapeEqual = !program.packedInputs && xRank === output.shape.length && util_exports.arraysEqual(xTexShape, output.texData.texShape); + const isTexShapeGreaterThanOne = program.packedInputs || uniformShape.length > 2 ? "" : `${xTexShape[0] > 1}_${xTexShape[1] > 1}`; + keyInputs += `${xRank}_${isInOutTexShapeEqual}_${useSqueezeShape ? keptDims : ""}_${uniformShape.length}_${isScalar}_${broadcastDims}_${isLogicalShapTexShapeEqual}_${rank1}_${rank2}_${rank34}_${isTexShapeGreaterThanOne}_${hasOffset}`; + } else { + const texShape = x.isUniform ? "uniform" : x.texData.texShape; + keyInputs += `${x.shape}_${texShape}_${hasOffset}`; + } + }); + const keyUserCode = program.userCode; + let key = program.constructor.name; + key += "_" + keyInputs + "_" + keyUserCode + `${env().getNumber("WEBGL_VERSION")}`; + return key; + } + function useShapeUniforms(rank) { + return env().getBool("WEBGL_USE_SHAPES_UNIFORMS") && rank <= 4; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/decode_matrix_gpu.js + var DecodeMatrixProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = false; + this.packedOutput = true; + this.outPackingScheme = PackingScheme.DENSE; + this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + this.userCode = ` + ivec3 outCoordsFromFlatIndex(int index) { + ${this.enableShapeUniforms ? getOutputLogicalCoordinatesFromFlatIndexByUniform(["r", "c", "d"], outputShape) : getLogicalCoordinatesFromFlatIndex(["r", "c", "d"], outputShape)} + return ivec3(r, c, d); + } + + void main() { + ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1])); + int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y); + + vec4 result = vec4(0.); + + for (int i=0; i<4; i++) { + int flatIndex = index + i; + ivec3 rc = outCoordsFromFlatIndex(flatIndex); + result[i] = getA(rc.x, rc.y, rc.z); + } + + ${glsl.output} = result; + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/decode_matrix_packed_gpu.js + init_define_BUILD_VERSION(); + var DecodeMatrixPackedProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.outPackingScheme = PackingScheme.DENSE; + this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + this.userCode = ` + ivec3 outCoordsFromFlatIndex(int index) { + ${this.enableShapeUniforms ? getOutputLogicalCoordinatesFromFlatIndexByUniform(["r", "c", "d"], outputShape) : getLogicalCoordinatesFromFlatIndex(["r", "c", "d"], outputShape)} + return ivec3(r, c, d); + } + + void main() { + ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1])); + int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y); + + vec4 result = vec4(0.); + + for (int i=0; i<4; i++) { + int flatIndex = index + i; + ivec3 rc = outCoordsFromFlatIndex(flatIndex); + result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z)); + } + + ${glsl.output} = result; + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_float_gpu.js + init_define_BUILD_VERSION(); + var EncodeFloatProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.outTexUsage = TextureUsage.DOWNLOAD; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.userCode = ` + ${ENCODE_FLOAT_SNIPPET} + + void main() { + float x = getAAtOutCoords(); + ${glsl.output} = encode_float(x); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_float_packed_gpu.js + init_define_BUILD_VERSION(); + var EncodeFloatPackedProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = false; + this.outTexUsage = TextureUsage.DOWNLOAD; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.userCode = ` + ${ENCODE_FLOAT_SNIPPET} + + void main() { + ivec3 coords = getOutputCoords(); + float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); + ${glsl.output} = encode_float(x); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_matrix_gpu.js + init_define_BUILD_VERSION(); + var EncodeMatrixProgram = class { + constructor(outputShape, inputIsUnsignedByte = false) { + this.variableNames = ["A"]; + this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + let output = `result`; + if (inputIsUnsignedByte) { + output = `floor(result * 255. + 0.5)`; + } + this.userCode = ` + ${this.enableShapeUniforms ? getFlatIndexFrom3DOutput() : getFlatIndexFrom3D(outputShape)} + + void main() { + ivec3 coords = getOutputCoords(); + + int flatIndex = getFlatIndex(coords); + int offset = imod(flatIndex, 4); + + flatIndex = idiv(flatIndex, 4, 1.); + + int r = flatIndex / texShape[1]; + int c = imod(flatIndex, texShape[1]); + vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]); + vec4 values = ${glsl.texture2D}(A, uv); + + float result; + + if(offset == 0) { + result = values[0]; + } else if(offset == 1) { + result = values[1]; + } else if(offset == 2) { + result = values[2]; + } else { + result = values[3]; + } + + ${glsl.output} = vec4(${output}, 0., 0., 0.); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_matrix_packed_gpu.js + init_define_BUILD_VERSION(); + var EncodeMatrixPackedProgram = class { + constructor(outputShape, inputIsUnsignedByte = false) { + this.variableNames = ["A"]; + this.packedInputs = false; + this.packedOutput = true; + this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + const glsl = getGlslDifferences(); + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + let mainLoop = ""; + let output = "result"; + if (inputIsUnsignedByte) { + output = "floor(result * 255. + 0.5)"; + } + for (let row = 0; row <= 1; row++) { + for (let col = 0; col <= 1; col++) { + const channel = row * 2 + col; + mainLoop += ` + localCoords = coords; + if(localCoords[2] + ${col} < ${this.enableShapeUniforms ? "outShape[2]" : `${outputShape[2]}`}) { + localCoords[2] += ${col}; + if (localCoords[1] + ${row} < ${this.enableShapeUniforms ? "outShape[1]" : `${outputShape[1]}`}) { + localCoords[1] += ${row}; + + flatIndex = getFlatIndex(localCoords); + offset = imod(flatIndex, 4); + + flatIndex = idiv(flatIndex, 4, 1.); + + int r = flatIndex / texShape[1]; + int c = imod(flatIndex, texShape[1]); + vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]); + values = ${glsl.texture2D}(A, uv); + + if (offset == 0) { + result[${channel}] = values[0]; + } else if (offset == 1) { + result[${channel}] = values[1]; + } else if (offset == 2) { + result[${channel}] = values[2]; + } else { + result[${channel}] = values[3]; + } + } + } + `; + } + } + this.userCode = ` + ${this.enableShapeUniforms ? getFlatIndexFrom3DOutput() : getFlatIndexFrom3D(outputShape)} + + void main() { + ivec3 coords = getOutputCoords(); + + vec4 result = vec4(0.); + int flatIndex, r, c, offset; + ivec3 localCoords; + vec2 uv; + vec4 values; + + ${mainLoop} + + ${glsl.output} = ${output}; + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_context.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_util.js + init_define_BUILD_VERSION(); + function createVertexShader2(gl) { + const glsl = getGlslDifferences(); + const vertexShaderSource = `${glsl.version} + precision highp float; + ${glsl.attribute} vec3 clipSpacePos; + ${glsl.attribute} vec2 uv; + ${glsl.varyingVs} vec2 resultUV; + + void main() { + gl_Position = vec4(clipSpacePos, 1); + resultUV = uv; + }`; + return createVertexShader(gl, vertexShaderSource); + } + function createVertexBuffer(gl) { + const vertexArray = new Float32Array([-1, 1, 0, 0, 1, -1, -1, 0, 0, 0, 1, 1, 0, 1, 1, 1, -1, 0, 1, 0]); + return createStaticVertexBuffer(gl, vertexArray); + } + function createIndexBuffer(gl) { + const triangleVertexIndices = new Uint16Array([0, 1, 2, 2, 1, 3]); + return createStaticIndexBuffer(gl, triangleVertexIndices); + } + function createAndConfigureTexture(gl, width, height, internalFormat, textureFormat, textureType) { + validateTextureSize(width, height); + const texture = createTexture(gl); + const tex2d = gl.TEXTURE_2D; + callAndCheck(gl, () => gl.bindTexture(tex2d, texture)); + callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)); + callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)); + callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_MIN_FILTER, gl.NEAREST)); + callAndCheck(gl, () => gl.texParameteri(tex2d, gl.TEXTURE_MAG_FILTER, gl.NEAREST)); + if (env().getNumber("WEBGL_VERSION") === 1) { + callAndCheck(gl, () => gl.texImage2D(tex2d, 0, internalFormat, width, height, 0, textureFormat, textureType, null)); + } else { + callAndCheck(gl, () => gl.texStorage2D(tex2d, 1, internalFormat, width, height)); + } + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, null)); + return { texture, texShape: [height, width] }; + } + function getInternalFormatForFloat32MatrixTexture(textureConfig) { + return textureConfig.internalFormatFloat; + } + function createFloat32MatrixTexture(gl, rows, columns, textureConfig) { + const [width, height] = getUnpackedMatrixTextureShapeWidthHeight(rows, columns); + return createAndConfigureTexture(gl, width, height, getInternalFormatForFloat32MatrixTexture(textureConfig), textureConfig.textureFormatFloat, gl.FLOAT); + } + function getInternalFormatForFloat16MatrixTexture(textureConfig) { + return textureConfig.internalFormatHalfFloat; + } + function createFloat16MatrixTexture(gl, rows, columns, textureConfig) { + const [width, height] = getUnpackedMatrixTextureShapeWidthHeight(rows, columns); + return createAndConfigureTexture(gl, width, height, getInternalFormatForFloat16MatrixTexture(textureConfig), textureConfig.textureFormatFloat, textureConfig.textureTypeHalfFloat); + } + function getInternalFormatForUnsignedBytesMatrixTexture(textureConfig) { + return textureConfig.downloadTextureFormat; + } + function createUnsignedBytesMatrixTexture(gl, rows, columns, textureConfig) { + const [width, height] = getUnpackedMatrixTextureShapeWidthHeight(rows, columns); + return createAndConfigureTexture(gl, width, height, getInternalFormatForUnsignedBytesMatrixTexture(textureConfig), gl.RGBA, gl.UNSIGNED_BYTE); + } + function getInternalFormatForPackedMatrixTexture(textureConfig) { + return textureConfig.internalFormatPackedFloat; + } + function createPackedMatrixTexture(gl, rows, columns, textureConfig) { + const [width, height] = getPackedMatrixTextureShapeWidthHeight(rows, columns); + return createAndConfigureTexture(gl, width, height, getInternalFormatForPackedMatrixTexture(textureConfig), gl.RGBA, gl.FLOAT); + } + function getInternalFormatForFloat16PackedMatrixTexture(textureConfig) { + return textureConfig.internalFormatPackedHalfFloat; + } + function createFloat16PackedMatrixTexture(gl, rows, columns, textureConfig) { + const [width, height] = getPackedMatrixTextureShapeWidthHeight(rows, columns); + return createAndConfigureTexture(gl, width, height, getInternalFormatForFloat16PackedMatrixTexture(textureConfig), gl.RGBA, textureConfig.textureTypeHalfFloat); + } + function bindVertexProgramAttributeStreams(gl, program, vertexBuffer) { + const posOffset = 0; + const uvOffset = 3 * 4; + const stride = 3 * 4 + 2 * 4; + callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer)); + const success = bindVertexBufferToProgramAttribute(gl, program, "clipSpacePos", vertexBuffer, 3, stride, posOffset); + return success && bindVertexBufferToProgramAttribute(gl, program, "uv", vertexBuffer, 2, stride, uvOffset); + } + function uploadDenseMatrixToTexture(gl, texture, width, height, data, textureConfig) { + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, texture)); + let dataForUpload, texelDataType, internalFormat; + if (data instanceof Uint8Array) { + dataForUpload = new Uint8Array(width * height * 4); + texelDataType = gl.UNSIGNED_BYTE; + internalFormat = gl.RGBA; + } else { + dataForUpload = new Float32Array(width * height * 4); + texelDataType = gl.FLOAT; + internalFormat = textureConfig.internalFormatPackedFloat; + } + dataForUpload.set(data); + if (env().getNumber("WEBGL_VERSION") === 2) { + callAndCheck(gl, () => gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height, gl.RGBA, texelDataType, dataForUpload)); + } else { + callAndCheck(gl, () => gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, width, height, 0, gl.RGBA, texelDataType, dataForUpload)); + } + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, null)); + } + function uploadPixelDataToTexture(gl, texture, pixels) { + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, texture)); + if (pixels.data instanceof Uint8Array) { + if (env().getNumber("WEBGL_VERSION") === 2) { + callAndCheck(gl, () => gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, pixels.width, pixels.height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.data)); + } else { + callAndCheck(gl, () => gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, pixels.width, pixels.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels.data)); + } + } else { + if (env().getNumber("WEBGL_VERSION") === 2) { + callAndCheck(gl, () => gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels)); + } else { + callAndCheck(gl, () => gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, pixels)); + } + } + callAndCheck(gl, () => gl.bindTexture(gl.TEXTURE_2D, null)); + } + function createBufferFromOutputTexture(gl2, rows, columns, textureConfig) { + const buffer2 = gl2.createBuffer(); + callAndCheck(gl2, () => gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer2)); + const bytesPerFloat = 4; + const valuesPerTexel = 4; + const bufferSizeBytes = bytesPerFloat * valuesPerTexel * rows * columns; + callAndCheck(gl2, () => gl2.bufferData(gl2.PIXEL_PACK_BUFFER, bufferSizeBytes, gl2.STREAM_READ)); + callAndCheck(gl2, () => gl2.readPixels(0, 0, columns, rows, gl2.RGBA, gl2.FLOAT, 0)); + callAndCheck(gl2, () => gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null)); + return buffer2; + } + function downloadFloat32MatrixFromBuffer(gl, buffer2, size) { + const gl2 = gl; + const downloadTarget = new Float32Array(size); + gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer2); + gl2.getBufferSubData(gl2.PIXEL_PACK_BUFFER, 0, downloadTarget); + gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null); + return downloadTarget; + } + function downloadByteEncodedFloatMatrixFromOutputTexture(gl, rows, columns, textureConfig) { + const [w, h] = getUnpackedMatrixTextureShapeWidthHeight(rows, columns); + const numChannels = 4; + const downloadTarget = new Uint8Array(getUnpackedArraySizeFromMatrixSize(rows * columns, numChannels)); + callAndCheck(gl, () => gl.readPixels(0, 0, w, h, textureConfig.downloadTextureFormat, gl.UNSIGNED_BYTE, downloadTarget)); + return new Float32Array(downloadTarget.buffer); + } + function downloadPackedMatrixFromBuffer(gl, buffer2, batch, rows, cols, physicalRows, physicalCols, textureConfig) { + const gl2 = gl; + const downloadTarget = new Float32Array(getPackedRGBAArraySizeFromMatrixShape(physicalRows, physicalCols)); + gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, buffer2); + gl2.getBufferSubData(gl2.PIXEL_PACK_BUFFER, 0, downloadTarget); + gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER, null); + return downloadTarget; + } + function downloadMatrixFromPackedOutputTexture(gl, physicalRows, physicalCols) { + const packedRGBA = new Float32Array(physicalRows * physicalCols * 4); + callAndCheck(gl, () => gl.readPixels(0, 0, physicalCols, physicalRows, gl.RGBA, gl.FLOAT, packedRGBA)); + return packedRGBA; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_context.js + var GPGPUContext = class { + constructor(gl) { + this.outputTexture = null; + this.program = null; + this.disposed = false; + this.vertexAttrsAreBound = false; + this.itemsToPoll = []; + const glVersion = env().getNumber("WEBGL_VERSION"); + if (gl != null) { + this.gl = gl; + setWebGLContext(glVersion, gl); + } else { + this.gl = getWebGLContext(glVersion); + } + let COLOR_BUFFER_FLOAT = "WEBGL_color_buffer_float"; + const COLOR_BUFFER_HALF_FLOAT = "EXT_color_buffer_half_float"; + this.parallelCompilationExtension = this.gl.getExtension("KHR_parallel_shader_compile"); + if (env().getNumber("WEBGL_VERSION") === 1) { + const TEXTURE_FLOAT = "OES_texture_float"; + const TEXTURE_HALF_FLOAT = "OES_texture_half_float"; + this.textureFloatExtension = getExtensionOrThrow(this.gl, TEXTURE_FLOAT); + if (hasExtension(this.gl, TEXTURE_HALF_FLOAT)) { + this.textureHalfFloatExtension = getExtensionOrThrow(this.gl, TEXTURE_HALF_FLOAT); + } else if (env().get("WEBGL_FORCE_F16_TEXTURES")) { + throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true."); + } + this.colorBufferFloatExtension = this.gl.getExtension(COLOR_BUFFER_FLOAT); + if (hasExtension(this.gl, COLOR_BUFFER_HALF_FLOAT)) { + this.colorBufferHalfFloatExtension = getExtensionOrThrow(this.gl, COLOR_BUFFER_HALF_FLOAT); + } else if (env().get("WEBGL_FORCE_F16_TEXTURES")) { + throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true."); + } + } else { + COLOR_BUFFER_FLOAT = "EXT_color_buffer_float"; + if (hasExtension(this.gl, COLOR_BUFFER_FLOAT)) { + this.colorBufferFloatExtension = this.gl.getExtension(COLOR_BUFFER_FLOAT); + } else if (hasExtension(this.gl, COLOR_BUFFER_HALF_FLOAT)) { + this.colorBufferHalfFloatExtension = this.gl.getExtension(COLOR_BUFFER_HALF_FLOAT); + } else { + throw new Error("GL context does not support color renderable floats"); + } + } + this.vertexBuffer = createVertexBuffer(this.gl); + this.indexBuffer = createIndexBuffer(this.gl); + this.framebuffer = createFramebuffer(this.gl); + this.textureConfig = getTextureConfig(this.gl, this.textureHalfFloatExtension); + } + get debug() { + return env().getBool("DEBUG"); + } + dispose() { + if (this.disposed) { + return; + } + if (this.program != null) { + console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."); + } + if (this.outputTexture != null) { + console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing."); + } + const gl = this.gl; + callAndCheck(gl, () => gl.finish()); + callAndCheck(gl, () => gl.bindFramebuffer(gl.FRAMEBUFFER, null)); + callAndCheck(gl, () => gl.deleteFramebuffer(this.framebuffer)); + callAndCheck(gl, () => gl.bindBuffer(gl.ARRAY_BUFFER, null)); + callAndCheck(gl, () => gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null)); + callAndCheck(gl, () => gl.deleteBuffer(this.indexBuffer)); + this.disposed = true; + } + createFloat32MatrixTexture(rows, columns) { + this.throwIfDisposed(); + return createFloat32MatrixTexture(this.gl, rows, columns, this.textureConfig); + } + createFloat16MatrixTexture(rows, columns) { + this.throwIfDisposed(); + return createFloat16MatrixTexture(this.gl, rows, columns, this.textureConfig); + } + createUnsignedBytesMatrixTexture(rows, columns) { + this.throwIfDisposed(); + return createUnsignedBytesMatrixTexture(this.gl, rows, columns, this.textureConfig); + } + uploadPixelDataToTexture(texture, pixels) { + this.throwIfDisposed(); + uploadPixelDataToTexture(this.gl, texture, pixels); + } + uploadDenseMatrixToTexture(texture, width, height, data) { + this.throwIfDisposed(); + uploadDenseMatrixToTexture(this.gl, texture, width, height, data, this.textureConfig); + } + createFloat16PackedMatrixTexture(rows, columns) { + this.throwIfDisposed(); + return createFloat16PackedMatrixTexture(this.gl, rows, columns, this.textureConfig); + } + createPackedMatrixTexture(rows, columns) { + this.throwIfDisposed(); + return createPackedMatrixTexture(this.gl, rows, columns, this.textureConfig); + } + deleteMatrixTexture(texture) { + this.throwIfDisposed(); + if (this.outputTexture === texture) { + unbindColorTextureFromFramebuffer(this.gl, this.framebuffer); + this.outputTexture = null; + } + callAndCheck(this.gl, () => this.gl.deleteTexture(texture)); + } + downloadByteEncodedFloatMatrixFromOutputTexture(texture, rows, columns) { + return this.downloadMatrixDriver(texture, () => downloadByteEncodedFloatMatrixFromOutputTexture(this.gl, rows, columns, this.textureConfig)); + } + downloadPackedMatrixFromBuffer(buffer2, batch, rows, columns, physicalRows, physicalCols) { + return downloadPackedMatrixFromBuffer(this.gl, buffer2, batch, rows, columns, physicalRows, physicalCols, this.textureConfig); + } + downloadFloat32MatrixFromBuffer(buffer2, size) { + return downloadFloat32MatrixFromBuffer(this.gl, buffer2, size); + } + createBufferFromTexture(texture, rows, columns) { + this.bindTextureToFrameBuffer(texture); + const result = createBufferFromOutputTexture(this.gl, rows, columns, this.textureConfig); + this.unbindTextureToFrameBuffer(); + return result; + } + createAndWaitForFence() { + const fenceContext = this.createFence(this.gl); + return this.pollFence(fenceContext); + } + createFence(gl) { + let query; + let isFencePassed; + if (env().getBool("WEBGL_FENCE_API_ENABLED")) { + const gl2 = gl; + const sync = gl2.fenceSync(gl2.SYNC_GPU_COMMANDS_COMPLETE, 0); + gl.flush(); + isFencePassed = () => { + const status = gl2.clientWaitSync(sync, 0, 0); + return status === gl2.ALREADY_SIGNALED || status === gl2.CONDITION_SATISFIED; + }; + query = sync; + } else if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0) { + query = this.beginQuery(); + this.endQuery(); + isFencePassed = () => this.isQueryAvailable(query, env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")); + } else { + isFencePassed = () => true; + } + return { query, isFencePassed }; + } + downloadMatrixFromPackedTexture(texture, physicalRows, physicalCols) { + return this.downloadMatrixDriver(texture, () => downloadMatrixFromPackedOutputTexture(this.gl, physicalRows, physicalCols)); + } + createProgram(fragmentShader) { + this.throwIfDisposed(); + const gl = this.gl; + if (this.vertexShader == null) { + this.vertexShader = createVertexShader2(gl); + } + const program = createProgram(gl); + callAndCheck(gl, () => gl.attachShader(program, this.vertexShader)); + callAndCheck(gl, () => gl.attachShader(program, fragmentShader)); + linkProgram(gl, program); + if (this.debug) { + validateProgram(gl, program); + } + if (!this.vertexAttrsAreBound) { + this.setProgram(program); + this.vertexAttrsAreBound = bindVertexProgramAttributeStreams(gl, this.program, this.vertexBuffer); + } + return program; + } + deleteProgram(program) { + this.throwIfDisposed(); + if (program === this.program) { + this.program = null; + } + if (program != null) { + callAndCheck(this.gl, () => this.gl.deleteProgram(program)); + } + } + setProgram(program) { + this.throwIfDisposed(); + this.program = program; + if (this.program != null && this.debug) { + validateProgram(this.gl, this.program); + } + callAndCheck(this.gl, () => this.gl.useProgram(program)); + } + getUniformLocation(program, uniformName, shouldThrow = true) { + this.throwIfDisposed(); + if (shouldThrow) { + return getProgramUniformLocationOrThrow(this.gl, program, uniformName); + } else { + return getProgramUniformLocation(this.gl, program, uniformName); + } + } + getAttributeLocation(program, attribute) { + this.throwIfDisposed(); + return callAndCheck(this.gl, () => this.gl.getAttribLocation(program, attribute)); + } + getUniformLocationNoThrow(program, uniformName) { + this.throwIfDisposed(); + return this.gl.getUniformLocation(program, uniformName); + } + setInputMatrixTexture(inputMatrixTexture, uniformLocation, textureUnit) { + this.throwIfDisposed(); + this.throwIfNoProgram(); + bindTextureToProgramUniformSampler(this.gl, inputMatrixTexture, uniformLocation, textureUnit); + } + setOutputMatrixTexture(outputMatrixTexture, rows, columns) { + this.setOutputMatrixTextureDriver(outputMatrixTexture, columns, rows); + } + setOutputPackedMatrixTexture(outputPackedMatrixTexture, rows, columns) { + this.throwIfDisposed(); + const [width, height] = getPackedMatrixTextureShapeWidthHeight(rows, columns); + this.setOutputMatrixTextureDriver(outputPackedMatrixTexture, width, height); + } + setOutputMatrixWriteRegion(startRow, numRows, startColumn, numColumns) { + this.setOutputMatrixWriteRegionDriver(startColumn, startRow, numColumns, numRows); + } + setOutputPackedMatrixWriteRegion(startRow, numRows, startColumn, numColumns) { + throw new Error("setOutputPackedMatrixWriteRegion not implemented."); + } + debugValidate() { + if (this.program != null) { + validateProgram(this.gl, this.program); + } + validateFramebuffer(this.gl); + } + executeProgram() { + this.throwIfDisposed(); + this.throwIfNoProgram(); + const gl = this.gl; + if (this.debug) { + this.debugValidate(); + } + callAndCheck(gl, () => gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0)); + } + blockUntilAllProgramsCompleted() { + this.throwIfDisposed(); + callAndCheck(this.gl, () => this.gl.finish()); + } + getQueryTimerExtension() { + if (this.disjointQueryTimerExtension == null) { + this.disjointQueryTimerExtension = getExtensionOrThrow(this.gl, env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2 ? "EXT_disjoint_timer_query_webgl2" : "EXT_disjoint_timer_query"); + } + return this.disjointQueryTimerExtension; + } + getQueryTimerExtensionWebGL2() { + return this.getQueryTimerExtension(); + } + getQueryTimerExtensionWebGL1() { + return this.getQueryTimerExtension(); + } + beginQuery() { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2) { + const gl2 = this.gl; + const ext2 = this.getQueryTimerExtensionWebGL2(); + const query2 = gl2.createQuery(); + gl2.beginQuery(ext2.TIME_ELAPSED_EXT, query2); + return query2; + } + const ext = this.getQueryTimerExtensionWebGL1(); + const query = ext.createQueryEXT(); + ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query); + return query; + } + endQuery() { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2) { + const gl2 = this.gl; + const ext2 = this.getQueryTimerExtensionWebGL2(); + gl2.endQuery(ext2.TIME_ELAPSED_EXT); + return; + } + const ext = this.getQueryTimerExtensionWebGL1(); + ext.endQueryEXT(ext.TIME_ELAPSED_EXT); + } + async waitForQueryAndGetTime(query) { + await util_exports.repeatedTry(() => this.disposed || this.isQueryAvailable(query, env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))); + return this.getQueryTime(query, env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")); + } + getQueryTime(query, queryTimerVersion) { + if (queryTimerVersion === 0) { + return null; + } + if (queryTimerVersion === 2) { + const gl2 = this.gl; + const timeElapsedNanos = gl2.getQueryParameter(query, gl2.QUERY_RESULT); + return timeElapsedNanos / 1e6; + } else { + const ext = this.getQueryTimerExtensionWebGL1(); + const timeElapsedNanos = ext.getQueryObjectEXT(query, ext.QUERY_RESULT_EXT); + return timeElapsedNanos / 1e6; + } + } + isQueryAvailable(query, queryTimerVersion) { + if (queryTimerVersion === 0) { + return true; + } + if (queryTimerVersion === 2) { + const gl2 = this.gl; + const ext = this.getQueryTimerExtensionWebGL2(); + const available = gl2.getQueryParameter(query, gl2.QUERY_RESULT_AVAILABLE); + if (this.disjoint == null) { + this.disjoint = this.gl.getParameter(ext.GPU_DISJOINT_EXT); + } + return available && !this.disjoint; + } else { + const ext = this.getQueryTimerExtensionWebGL1(); + const available = ext.getQueryObjectEXT(query, ext.QUERY_RESULT_AVAILABLE_EXT); + if (this.disjoint == null) { + this.disjoint = this.gl.getParameter(ext.GPU_DISJOINT_EXT); + } + return available && !this.disjoint; + } + } + pollFence(fenceContext) { + return new Promise((resolve) => { + this.addItemToPoll(() => fenceContext.isFencePassed(), () => resolve()); + }); + } + pollItems() { + const index = linearSearchLastTrue(this.itemsToPoll.map((x) => x.isDoneFn)); + for (let i = 0; i <= index; ++i) { + const { resolveFn } = this.itemsToPoll[i]; + resolveFn(); + } + this.itemsToPoll = this.itemsToPoll.slice(index + 1); + } + addItemToPoll(isDoneFn, resolveFn) { + this.itemsToPoll.push({ isDoneFn, resolveFn }); + if (this.itemsToPoll.length > 1) { + return; + } + util_exports.repeatedTry(() => { + this.pollItems(); + return this.itemsToPoll.length === 0; + }); + } + bindTextureToFrameBuffer(texture) { + this.throwIfDisposed(); + bindColorTextureToFramebuffer(this.gl, texture, this.framebuffer); + if (this.debug) { + validateFramebuffer(this.gl); + } + } + unbindTextureToFrameBuffer() { + if (this.outputTexture != null) { + bindColorTextureToFramebuffer(this.gl, this.outputTexture, this.framebuffer); + if (this.debug) { + validateFramebuffer(this.gl); + } + } else { + unbindColorTextureFromFramebuffer(this.gl, this.framebuffer); + } + } + downloadMatrixDriver(texture, downloadAndDecode) { + this.bindTextureToFrameBuffer(texture); + const result = downloadAndDecode(); + this.unbindTextureToFrameBuffer(); + return result; + } + setOutputMatrixTextureDriver(outputMatrixTextureMaybePacked, width, height) { + this.throwIfDisposed(); + const gl = this.gl; + bindColorTextureToFramebuffer(gl, outputMatrixTextureMaybePacked, this.framebuffer); + if (this.debug) { + validateFramebuffer(gl); + } + this.outputTexture = outputMatrixTextureMaybePacked; + callAndCheck(gl, () => gl.viewport(0, 0, width, height)); + callAndCheck(gl, () => gl.scissor(0, 0, width, height)); + } + setOutputMatrixWriteRegionDriver(x, y, width, height) { + this.throwIfDisposed(); + callAndCheck(this.gl, () => this.gl.scissor(x, y, width, height)); + } + throwIfDisposed() { + if (this.disposed) { + throw new Error("Attempted to use disposed GPGPUContext."); + } + } + throwIfNoProgram() { + if (this.program == null) { + throw new Error("No GPU program is currently set."); + } + } + }; + function linearSearchLastTrue(arr) { + let i = 0; + for (; i < arr.length; ++i) { + const isDone = arr[i](); + if (!isDone) { + break; + } + } + return i - 1; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/shared.js + init_define_BUILD_VERSION(); + var { addImpl: addImplCPU, bincountImpl: bincountImplCPU, bincountReduceImpl: bincountReduceImplCPU, ceilImpl: ceilImplCPU, concatImpl: concatImplCPU, equalImpl: equalImplCPU, expImpl: expImplCPU, expm1Impl: expm1ImplCPU, floorImpl: floorImplCPU, gatherNdImpl: gatherNdImplCPU, gatherV2Impl: gatherV2ImplCPU, greaterImpl: greaterImplCPU, greaterEqualImpl: greaterEqualImplCPU, lessImpl: lessImplCPU, lessEqualImpl: lessEqualImplCPU, linSpaceImpl: linSpaceImplCPU, logImpl: logImplCPU, maxImpl: maxImplCPU, maximumImpl: maximumImplCPU, minimumImpl: minimumImplCPU, multiplyImpl: multiplyImplCPU, negImpl: negImplCPU, notEqualImpl: notEqualImplCPU, prodImpl: prodImplCPU, rangeImpl: rangeImplCPU, rsqrtImpl: rsqrtImplCPU, scatterImpl: scatterImplCPU, sigmoidImpl: sigmoidImplCPU, simpleAbsImpl: simpleAbsImplCPU, sliceImpl: sliceImplCPU, sparseFillEmptyRowsImpl: sparseFillEmptyRowsImplCPU, sparseReshapeImpl: sparseReshapeImplCPU, sparseSegmentReductionImpl: sparseSegmentReductionImplCPU, sqrtImpl: sqrtImplCPU, stridedSliceImpl: stridedSliceImplCPU, stringNGramsImpl: stringNGramsImplCPU, stringSplitImpl: stringSplitImplCPU, stringToHashBucketFastImpl: stringToHashBucketFastImplCPU, subImpl: subImplCPU, tileImpl: tileImplCPU, topKImpl: topKImplCPU, transposeImpl: transposeImplCPU, uniqueImpl: uniqueImplCPU } = shared_exports; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/pack_gpu.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/packing_util.js + init_define_BUILD_VERSION(); + function getVecChannels(name, rank) { + return ["x", "y", "z", "w", "u", "v"].slice(0, rank).map((d) => `${name}.${d}`); + } + function getChannels(name, rank) { + if (rank === 1) { + return [name]; + } + return getVecChannels(name, rank); + } + function getSourceCoords(rank, dims) { + if (rank === 1) { + return "rc"; + } + let coords2 = ""; + for (let i = 0; i < rank; i++) { + coords2 += dims[i]; + if (i < rank - 1) { + coords2 += ","; + } + } + return coords2; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/pack_gpu.js + var PackProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = false; + this.packedOutput = true; + this.outputShape = outputShape; + this.rank = outputShape.length; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + if (this.rank === 0) { + this.userCode = ` + void main() { + setOutput(vec4(getA(), 0., 0., 0.)); + } + `; + } else { + const channels = getChannels("rc", this.rank); + const dtype = getCoordsDataType(this.rank); + const outOfBoundsCondition = this.getOutOfBoundsCondition(channels); + const setup51 = this.getSetup(channels); + const output = this.getOutput(channels); + this.userCode = ` + void main() { + ${dtype} rc = getOutputCoords(); + + if(${outOfBoundsCondition}) { + setOutput(vec4(0)); + } else { + ${setup51} + + setOutput(vec4(${output})); + } + } + `; + } + } + getSourceCoordsArr(dims) { + const coords2 = []; + for (let row = 0; row <= 1; row++) { + for (let col = 0; col <= 1; col++) { + let coord = `${row === 0 ? "r" : "rp1"}, ${col === 0 ? "c" : "cp1"}`; + for (let d = 2; d < this.rank; d++) { + coord = `${dims[dims.length - 1 - d]},` + coord; + } + coords2.push(coord); + } + } + return coords2; + } + getOutOfBoundsCondition(dims) { + if (this.rank === 1) { + return `rc > ${this.enableShapeUniforms ? "outShape" : this.outputShape[0]}`; + } + let cond = ""; + for (let i = this.rank - 2; i < this.rank; i++) { + cond += `${dims[i]} >= ${this.enableShapeUniforms ? `outShape[${i}]` : this.outputShape[i]}`; + if (i < this.rank - 1) { + cond += "||"; + } + } + return cond; + } + getSetup(dims) { + if (this.rank === 1) { + return ""; + } + const innerDims = dims.slice(-2); + const col = this.enableShapeUniforms ? `outShape[${this.rank} - 1]` : this.outputShape[this.rank - 1]; + const row = this.enableShapeUniforms ? `outShape[${this.rank} - 2]` : this.outputShape[this.rank - 2]; + return ` + int r = ${innerDims[0]}; + int c = ${innerDims[1]}; + int rp1 = r + 1; + int cp1 = c + 1; + + bool cEdge = cp1 >= ${col}; + bool rEdge = rp1 >= ${row}; + `; + } + getOutput(dims) { + const sourceCoords = this.getSourceCoordsArr(dims); + if (this.rank === 1) { + const outShape = this.enableShapeUniforms ? "outShape" : this.outputShape[0]; + return `getA(rc), (rc + 1 >= ${outShape} ? 0. : getA(rc + 1)), 0, 0`; + } + return `getA(${sourceCoords[0]}), + cEdge ? 0. : getA(${sourceCoords[1]}), + rEdge ? 0. : getA(${sourceCoords[2]}), + rEdge || cEdge ? 0. : getA(${sourceCoords[3]})`; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/reshape_packed_gpu.js + init_define_BUILD_VERSION(); + var ReshapePackedProgram = class { + constructor(outputShape, inputShape) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.customUniforms = [{ name: "inputShape", type: "ivec3" }]; + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + let mainLoop = ``; + for (let i = 0; i < 4; i++) { + let thisRC = `thisRC = rc;`; + if (i % 2 === 1) { + thisRC += `thisRC.z += 1;`; + } + if (i > 1) { + thisRC += `thisRC.y += 1;`; + } + mainLoop += ` + ${thisRC} + ${i > 0 ? `if(thisRC.y < rows && thisRC.z < cols){` : ""} + int flatIndex = getFlatIndex(thisRC); + + ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex); + vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z)); + + result[${i}] = + getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); + ${i > 0 ? "}" : ""} + `; + } + this.userCode = ` + ${getReshapedInputCoords(inputShape, this.enableShapeUniforms)} + ${this.enableShapeUniforms ? getFlatIndexFrom3DOutput() : getFlatIndexFrom3D(outputShape)} + + void main() { + ivec3 rc = getOutputCoords(); + + vec4 result = vec4(0.); + + ivec3 thisRC; + int rows = ${this.enableShapeUniforms ? "outShape[1]" : outputShape[1]}; + int cols = ${this.enableShapeUniforms ? "outShape[2]" : outputShape[2]}; + + ${mainLoop} + + setOutput(result); + } + `; + } + }; + function getReshapedInputCoords(shape, enableShapeUniforms) { + const coordsFromIndexSnippet = enableShapeUniforms ? getLogicalCoordinatesFromFlatIndexByUniform(["r", "c", "d"], "inputShape") : getLogicalCoordinatesFromFlatIndex(["r", "c", "d"], shape); + return ` + ivec3 inputCoordsFromReshapedOutCoords(int index) { + ${coordsFromIndexSnippet} + return ivec3(r, c, d); + } + `; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/texture_manager.js + init_define_BUILD_VERSION(); + var TextureManager = class { + constructor(gpgpu) { + this.gpgpu = gpgpu; + this.numUsedTextures = 0; + this.numFreeTextures = 0; + this._numBytesAllocated = 0; + this._numBytesFree = 0; + this.freeTextures = {}; + this.logEnabled = false; + this.usedTextures = {}; + } + acquireTexture(shapeRC, usage, isPacked) { + const physicalTexType = getPhysicalFromLogicalTextureType(usage, isPacked); + const shapeKey = getKeyFromTextureShape(shapeRC, physicalTexType, isPacked); + if (!(shapeKey in this.freeTextures)) { + this.freeTextures[shapeKey] = []; + } + if (!(shapeKey in this.usedTextures)) { + this.usedTextures[shapeKey] = []; + } + const texBytes = computeBytes(shapeRC, physicalTexType, this.gpgpu.gl, this.gpgpu.textureConfig, isPacked); + if (this.freeTextures[shapeKey].length > 0) { + this.numFreeTextures--; + this.numUsedTextures++; + this._numBytesFree -= texBytes; + this.log(); + const newTexture2 = this.freeTextures[shapeKey].shift(); + this.usedTextures[shapeKey].push(newTexture2); + return newTexture2; + } + let newTexture; + if (physicalTexType === PhysicalTextureType.PACKED_2X2_FLOAT32) { + newTexture = this.gpgpu.createPackedMatrixTexture(shapeRC[0], shapeRC[1]); + } else if (physicalTexType === PhysicalTextureType.PACKED_2X2_FLOAT16) { + newTexture = this.gpgpu.createFloat16PackedMatrixTexture(shapeRC[0], shapeRC[1]); + } else if (physicalTexType === PhysicalTextureType.UNPACKED_FLOAT32) { + newTexture = this.gpgpu.createFloat32MatrixTexture(shapeRC[0], shapeRC[1]); + } else if (physicalTexType === PhysicalTextureType.UNPACKED_FLOAT16) { + newTexture = this.gpgpu.createFloat16MatrixTexture(shapeRC[0], shapeRC[1]); + } else if (physicalTexType === PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE) { + newTexture = this.gpgpu.createUnsignedBytesMatrixTexture(shapeRC[0], shapeRC[1]); + } + this.usedTextures[shapeKey].push(newTexture); + this.numUsedTextures++; + this._numBytesAllocated += texBytes; + this.log(); + return newTexture; + } + releaseTexture(texture, shape, logicalTexType, isPacked) { + if (this.freeTextures == null) { + return; + } + const physicalTexType = getPhysicalFromLogicalTextureType(logicalTexType, isPacked); + const shapeKey = getKeyFromTextureShape(shape, physicalTexType, isPacked); + if (!(shapeKey in this.freeTextures)) { + this.freeTextures[shapeKey] = []; + } + const texBytes = computeBytes(shape, physicalTexType, this.gpgpu.gl, this.gpgpu.textureConfig, isPacked); + const deleteTexThreshold = env().get("WEBGL_DELETE_TEXTURE_THRESHOLD"); + if (deleteTexThreshold !== -1 && this._numBytesAllocated > deleteTexThreshold) { + this.gpgpu.deleteMatrixTexture(texture.texture); + this._numBytesAllocated -= texBytes; + } else { + this.freeTextures[shapeKey].push(texture); + this.numFreeTextures++; + this._numBytesFree += texBytes; + } + this.numUsedTextures--; + const texList = this.usedTextures[shapeKey]; + const texIndex = texList.indexOf(texture); + if (texIndex < 0) { + throw new Error("Cannot release a texture that was never provided by this texture manager"); + } + texList.splice(texIndex, 1); + this.log(); + } + log() { + if (!this.logEnabled) { + return; + } + const total = this.numFreeTextures + this.numUsedTextures; + console.log("Free/Used", `${this.numFreeTextures} / ${this.numUsedTextures}`, `(${total})`); + const freeRatio = this._numBytesFree / this._numBytesAllocated; + console.log(`Bytes allocated: ${this._numBytesAllocated}`); + console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100 * freeRatio)}%)`); + } + get numBytesAllocated() { + return this._numBytesAllocated; + } + get numBytesFree() { + return this._numBytesFree; + } + getNumUsedTextures() { + return this.numUsedTextures; + } + getNumFreeTextures() { + return this.numFreeTextures; + } + dispose() { + if (this.freeTextures == null) { + return; + } + for (const texShape in this.freeTextures) { + this.freeTextures[texShape].forEach((tex) => { + this.gpgpu.deleteMatrixTexture(tex.texture); + }); + } + for (const texShape in this.usedTextures) { + this.usedTextures[texShape].forEach((tex) => { + this.gpgpu.deleteMatrixTexture(tex.texture); + }); + } + this.freeTextures = null; + this.usedTextures = null; + this.numUsedTextures = 0; + this.numFreeTextures = 0; + this._numBytesAllocated = 0; + this._numBytesFree = 0; + } + }; + function numBytesForInternalFormat(gl, internalFormat) { + const glany = gl; + if (internalFormat === glany.R32F) { + return 4; + } else if (internalFormat === glany.R16F) { + return 2; + } else if (internalFormat === glany.RGBA32F) { + return 16; + } else if (internalFormat === gl.RGBA) { + return 16; + } else if (internalFormat === glany.RGBA16F) { + return 8; + } else if (internalFormat === glany.RGBA8) { + return 4; + } + throw new Error(`Unknown internal format ${internalFormat}`); + } + function computeBytes(shape, physicalTexType, gl, textureConfig, isPacked) { + const internalFormat = internalFormatForPhysicalTexType(physicalTexType, textureConfig); + let numElements; + if (isPacked) { + const [packedWidth, packedHeight] = getPackedMatrixTextureShapeWidthHeight(shape[0], shape[1]); + numElements = packedWidth * packedHeight; + } else { + const [width, height] = getUnpackedMatrixTextureShapeWidthHeight(shape[0], shape[1]); + numElements = width * height; + } + const bytesPerElement2 = numBytesForInternalFormat(gl, internalFormat); + return numElements * bytesPerElement2; + } + function internalFormatForPhysicalTexType(physicalTexType, textureConfig) { + switch (physicalTexType) { + case PhysicalTextureType.PACKED_2X2_FLOAT32: + return getInternalFormatForPackedMatrixTexture(textureConfig); + case PhysicalTextureType.PACKED_2X2_FLOAT16: + return getInternalFormatForFloat16PackedMatrixTexture(textureConfig); + case PhysicalTextureType.UNPACKED_FLOAT32: + return getInternalFormatForFloat32MatrixTexture(textureConfig); + case PhysicalTextureType.UNPACKED_FLOAT16: + return getInternalFormatForFloat16MatrixTexture(textureConfig); + case PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE: + return getInternalFormatForUnsignedBytesMatrixTexture(textureConfig); + default: + throw new Error(`Unknown physical texture type ${physicalTexType}`); + } + } + function getPhysicalTextureForRendering(isPacked) { + if (env().getBool("WEBGL_RENDER_FLOAT32_ENABLED")) { + if (isPacked) { + return PhysicalTextureType.PACKED_2X2_FLOAT32; + } + return PhysicalTextureType.UNPACKED_FLOAT32; + } + if (isPacked) { + return PhysicalTextureType.PACKED_2X2_FLOAT16; + } + return PhysicalTextureType.UNPACKED_FLOAT16; + } + function getPhysicalFromLogicalTextureType(logicalTexType, isPacked) { + if (logicalTexType === TextureUsage.UPLOAD) { + return PhysicalTextureType.PACKED_2X2_FLOAT32; + } else if (logicalTexType === TextureUsage.RENDER || logicalTexType == null) { + return getPhysicalTextureForRendering(isPacked); + } else if (logicalTexType === TextureUsage.DOWNLOAD || logicalTexType === TextureUsage.PIXELS) { + return PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE; + } + throw new Error(`Unknown logical texture type ${logicalTexType}`); + } + function getKeyFromTextureShape(shapeRowsCol, physicalTexType, isPacked) { + return `${shapeRowsCol[0]}_${shapeRowsCol[1]}_${physicalTexType}_${isPacked}`; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_gpu.js + init_define_BUILD_VERSION(); + var UnaryOpProgram = class { + constructor(aShape, opSnippet) { + this.variableNames = ["A"]; + this.outputShape = aShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + this.userCode = ` + float unaryOperation(float x) { + ${opSnippet} + } + + void main() { + float x = getAAtOutCoords(); + float y = unaryOperation(x); + + setOutput(y); + } + `; + } + }; + var CHECK_NAN_SNIPPET = `if (isnan(x)) return x;`; + var LINEAR = `return x;`; + var ABS = `return abs(x);`; + var ELU2 = `return (x >= 0.0) ? x : (exp(x) - 1.0);`; + var RELU = CHECK_NAN_SNIPPET + ` + return (x < 0.0) ? 0.0 : x; +`; + var RELU6 = CHECK_NAN_SNIPPET + ` + return (x < 0.0) ? 0.0 : min(6.0, x); +`; + var CLONE = "return x;"; + var SIGMOID = `return 1.0 / (1.0 + exp(-1.0 * x));`; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_packed_gpu.js + init_define_BUILD_VERSION(); + var LINEAR2 = `return x;`; + var ELU3 = ` + vec4 result; + + result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); + result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0); + result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0); + result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); + + return result; +`; + var RELU2 = ` + vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var RELU62 = ` + vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var SIGMOID2 = `return 1.0 / (1.0 + exp(-1.0 * x));`; + var UnaryOpPackedProgram = class { + constructor(aShape, opSnippet) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = aShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + this.userCode = ` + vec4 unaryOperation(vec4 x) { + ${opSnippet} + } + + void main() { + vec4 x = getAAtOutCoords(); + vec4 y = unaryOperation(x); + + setOutput(y); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/unpack_gpu.js + init_define_BUILD_VERSION(); + var UnpackProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = false; + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + const rank = outputShape.length; + const channels = getChannels("rc", rank); + const dtype = getCoordsDataType(rank); + const sourceCoords = getSourceCoords(rank, channels); + const innerDims = channels.slice(-2); + const coords2 = rank <= 1 ? "rc" : `vec2(${innerDims.join(",")})`; + this.userCode = ` + void main() { + ${dtype} rc = getOutputCoords(); + vec4 packedInput = getA(${sourceCoords}); + + setOutput(getChannel(packedInput, ${coords2})); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/backend_webgl.js + var whereImpl3 = kernel_impls_exports.whereImpl; + var EPSILON_FLOAT322 = 1e-7; + var EPSILON_FLOAT162 = 1e-4; + var binaryCaches = {}; + function getBinaryCache(webGLVersion) { + if (webGLVersion in binaryCaches) { + return binaryCaches[webGLVersion]; + } + binaryCaches[webGLVersion] = {}; + return binaryCaches[webGLVersion]; + } + var CPU_HANDOFF_SIZE_THRESHOLD = env().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"); + var BEFORE_PAGING_CONSTANT = 600; + function numMBBeforeWarning() { + if (env().global.screen == null) { + return 1024; + } + return env().global.screen.height * env().global.screen.width * window.devicePixelRatio * BEFORE_PAGING_CONSTANT / 1024 / 1024; + } + var MathBackendWebGL = class extends KernelBackend { + constructor(gpuResource) { + super(); + this.pendingRead = /* @__PURE__ */ new WeakMap(); + this.pendingDisposal = /* @__PURE__ */ new WeakSet(); + this.dataRefCount = /* @__PURE__ */ new WeakMap(); + this.numBytesInGPU = 0; + this.uploadWaitMs = 0; + this.downloadWaitMs = 0; + this.lastGlFlushTime = 0; + this.warnedAboutMemory = false; + this.pendingDeletes = 0; + this.disposed = false; + if (!env().getBool("HAS_WEBGL")) { + throw new Error("WebGL is not supported on this device"); + } + let newGPGPU; + if (gpuResource != null) { + if (gpuResource instanceof GPGPUContext) { + newGPGPU = gpuResource; + } else { + const gl = getWebGLContext(env().getNumber("WEBGL_VERSION"), gpuResource); + newGPGPU = new GPGPUContext(gl); + } + this.binaryCache = {}; + this.gpgpuCreatedLocally = false; + } else { + const gl = getWebGLContext(env().getNumber("WEBGL_VERSION")); + newGPGPU = new GPGPUContext(gl); + this.binaryCache = getBinaryCache(env().getNumber("WEBGL_VERSION")); + this.gpgpuCreatedLocally = true; + } + this.gpgpu = newGPGPU; + this.canvas = this.gpgpu.gl.canvas; + this.textureManager = new TextureManager(this.gpgpu); + this.numMBBeforeWarning = numMBBeforeWarning(); + this.texData = new DataStorage(this, engine()); + } + nextDataId() { + return MathBackendWebGL.nextDataId++; + } + numDataIds() { + return this.texData.numDataIds() - this.pendingDeletes; + } + write(values, shape, dtype) { + if (env().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS") || env().getBool("DEBUG")) { + this.checkNumericalProblems(values); + } + if (dtype === "complex64" && values != null) { + throw new Error(`Cannot write to a complex64 dtype. Please use tf.complex(real, imag).`); + } + const dataId = { id: this.nextDataId() }; + this.texData.set(dataId, { shape, dtype, values, usage: TextureUsage.UPLOAD, refCount: 1 }); + return dataId; + } + refCount(dataId) { + if (this.texData.has(dataId)) { + const tensorData = this.texData.get(dataId); + return tensorData.refCount; + } + return 0; + } + incRef(dataId) { + const texData = this.texData.get(dataId); + texData.refCount++; + } + decRef(dataId) { + if (this.texData.has(dataId)) { + const texData = this.texData.get(dataId); + texData.refCount--; + } + } + move(dataId, values, shape, dtype, refCount) { + if (env().getBool("DEBUG")) { + this.checkNumericalProblems(values); + } + if (dtype === "complex64") { + throw new Error(`Cannot write to a complex64 dtype. Please use tf.complex(real, imag).`); + } + this.texData.set(dataId, { shape, dtype, values, usage: TextureUsage.UPLOAD, refCount }); + } + disposeIntermediateTensorInfo(tensorInfo) { + this.disposeData(tensorInfo.dataId); + } + readSync(dataId) { + const texData = this.texData.get(dataId); + const { values, dtype, complexTensorInfos, slice: slice5, shape, isPacked } = texData; + if (slice5 != null) { + let program; + if (isPacked) { + program = new UnaryOpPackedProgram(shape, CLONE); + } else { + program = new UnaryOpProgram(shape, CLONE); + } + const res = this.runWebGLProgram(program, [{ dataId, shape, dtype }], dtype); + const data = this.readSync(res.dataId); + this.disposeIntermediateTensorInfo(res); + return data; + } + if (values != null) { + return this.convertAndCacheOnCPU(dataId); + } + if (dtype === "string") { + return values; + } + const shouldTimeProgram = this.activeTimers != null; + let start; + if (shouldTimeProgram) { + start = util_exports.now(); + } + let result; + if (dtype === "complex64") { + const realValues = this.readSync(complexTensorInfos.real.dataId); + const imagValues = this.readSync(complexTensorInfos.imag.dataId); + result = backend_util_exports.mergeRealAndImagArrays(realValues, imagValues); + } else { + result = this.getValuesFromTexture(dataId); + } + if (shouldTimeProgram) { + this.downloadWaitMs += util_exports.now() - start; + } + return this.convertAndCacheOnCPU(dataId, result); + } + async read(dataId) { + if (this.pendingRead.has(dataId)) { + const subscribers2 = this.pendingRead.get(dataId); + return new Promise((resolve) => subscribers2.push(resolve)); + } + const texData = this.texData.get(dataId); + const { values, shape, slice: slice5, dtype, complexTensorInfos, isPacked } = texData; + if (slice5 != null) { + let program; + if (isPacked) { + program = new UnaryOpPackedProgram(shape, CLONE); + } else { + program = new UnaryOpProgram(shape, CLONE); + } + const res = this.runWebGLProgram(program, [{ dataId, shape, dtype }], dtype); + const data = this.read(res.dataId); + this.disposeIntermediateTensorInfo(res); + return data; + } + if (values != null) { + return this.convertAndCacheOnCPU(dataId); + } + if (env().getBool("DEBUG")) { + if (!env().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED") && env().getNumber("WEBGL_VERSION") === 2) { + throw new Error(`tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.`); + } + } + let buffer2 = null; + let tmpDownloadTarget; + if (dtype !== "complex64" && env().get("WEBGL_BUFFER_SUPPORTED")) { + tmpDownloadTarget = this.decode(dataId); + const tmpData = this.texData.get(tmpDownloadTarget.dataId); + buffer2 = this.gpgpu.createBufferFromTexture(tmpData.texture.texture, ...getDenseTexShape(shape)); + } + this.pendingRead.set(dataId, []); + if (dtype !== "complex64") { + await this.gpgpu.createAndWaitForFence(); + } + let vals; + if (dtype === "complex64") { + const ps = await Promise.all([ + this.read(complexTensorInfos.real.dataId), + this.read(complexTensorInfos.imag.dataId) + ]); + const realValues = ps[0]; + const imagValues = ps[1]; + vals = backend_util_exports.mergeRealAndImagArrays(realValues, imagValues); + } else if (buffer2 == null) { + vals = this.getValuesFromTexture(dataId); + } else { + const size = util_exports.sizeFromShape(shape); + vals = this.gpgpu.downloadFloat32MatrixFromBuffer(buffer2, size); + } + if (tmpDownloadTarget != null) { + this.disposeIntermediateTensorInfo(tmpDownloadTarget); + } + if (buffer2 != null) { + const gl = this.gpgpu.gl; + callAndCheck(gl, () => gl.deleteBuffer(buffer2)); + } + const dTypeVals = this.convertAndCacheOnCPU(dataId, vals); + const subscribers = this.pendingRead.get(dataId); + this.pendingRead.delete(dataId); + subscribers.forEach((resolve) => resolve(dTypeVals)); + if (this.pendingDisposal.has(dataId)) { + this.pendingDisposal.delete(dataId); + if (this.disposeData(dataId)) { + engine().removeDataId(dataId, this); + } + this.pendingDeletes--; + } + return dTypeVals; + } + readToGPU(dataId, options = {}) { + const texData = this.texData.get(dataId); + const { values, shape, slice: slice5, dtype, isPacked, texture } = texData; + if (dtype === "complex64") { + throw new Error("Does not support reading texture for complex64 dtype."); + } + if (slice5 != null) { + let program; + if (isPacked) { + program = new UnaryOpPackedProgram(shape, CLONE); + } else { + program = new UnaryOpProgram(shape, CLONE); + } + const res = this.runWebGLProgram(program, [{ dataId, shape, dtype }], dtype); + const gpuResouorce = this.readToGPU(res, options); + this.disposeIntermediateTensorInfo(res); + return gpuResouorce; + } + if (texture == null) { + if (values != null) { + throw new Error("Data is not on GPU but on CPU."); + } else { + throw new Error("There is no data on GPU or CPU."); + } + } + const tmpTarget = this.decode(dataId, options.customTexShape); + const tensorRef = engine().makeTensorFromTensorInfo(tmpTarget); + const tmpData = this.texData.get(tmpTarget.dataId); + return Object.assign({ tensorRef }, tmpData.texture); + } + bufferSync(t) { + const data = this.readSync(t.dataId); + if (t.dtype === "string") { + try { + const strings = data.map((d) => util_exports.decodeString(d)); + return buffer(t.shape, t.dtype, strings); + } catch (_a) { + throw new Error("Failed to decode encoded string bytes into utf-8"); + } + } + return buffer(t.shape, t.dtype, data); + } + checkNumericalProblems(values) { + if (values == null) { + return; + } + for (let i = 0; i < values.length; i++) { + const num = values[i]; + if (!canBeRepresented(num)) { + if (env().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")) { + throw Error(`The value ${num} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`); + } + throw Error(`The value ${num} cannot be represented on this device.`); + } + } + } + getValuesFromTexture(dataId) { + const { shape, dtype, isPacked } = this.texData.get(dataId); + const size = util_exports.sizeFromShape(shape); + if (env().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")) { + const tmpTarget = this.decode(dataId); + const tmpData2 = this.texData.get(tmpTarget.dataId); + const vals2 = this.gpgpu.downloadMatrixFromPackedTexture(tmpData2.texture.texture, ...getDenseTexShape(shape)).subarray(0, size); + this.disposeIntermediateTensorInfo(tmpTarget); + return vals2; + } + const shouldUsePackedProgram = env().getBool("WEBGL_PACK") && isPacked === true; + const outputShape = shouldUsePackedProgram ? getShapeAs3D(shape) : shape; + const program = shouldUsePackedProgram ? new EncodeFloatPackedProgram(outputShape) : new EncodeFloatProgram(outputShape); + const output = this.runWebGLProgram(program, [{ shape: outputShape, dtype, dataId }], "float32"); + const tmpData = this.texData.get(output.dataId); + const vals = this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(tmpData.texture.texture, tmpData.texShape[0], tmpData.texShape[1]).subarray(0, size); + this.disposeIntermediateTensorInfo(output); + return vals; + } + timerAvailable() { + return env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0; + } + time(f) { + const oldActiveTimers = this.activeTimers; + const newActiveTimers = []; + let outerMostTime = false; + if (this.programTimersStack == null) { + this.programTimersStack = newActiveTimers; + outerMostTime = true; + } else { + this.activeTimers.push(newActiveTimers); + } + this.activeTimers = newActiveTimers; + f(); + const flattenedActiveTimerQueries = util_exports.flatten(this.activeTimers.map((d) => d.query)).filter((d) => d != null); + const flattenedActiveTimerNames = util_exports.flatten(this.activeTimers.map((d) => d.name)).filter((d) => d != null); + this.activeTimers = oldActiveTimers; + if (outerMostTime) { + this.programTimersStack = null; + } + const res = { + uploadWaitMs: this.uploadWaitMs, + downloadWaitMs: this.downloadWaitMs, + kernelMs: null, + wallMs: null + }; + return (async () => { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) { + const kernelMs = await Promise.all(flattenedActiveTimerQueries); + res["kernelMs"] = util_exports.sum(kernelMs); + res["getExtraProfileInfo"] = () => kernelMs.map((d, i) => ({ name: flattenedActiveTimerNames[i], ms: d })).map((d) => `${d.name}: ${d.ms}`).join(", "); + } else { + res["kernelMs"] = { + error: "WebGL query timers are not supported in this environment." + }; + } + this.uploadWaitMs = 0; + this.downloadWaitMs = 0; + return res; + })(); + } + memory() { + return { + unreliable: false, + numBytesInGPU: this.numBytesInGPU, + numBytesInGPUAllocated: this.textureManager.numBytesAllocated, + numBytesInGPUFree: this.textureManager.numBytesFree + }; + } + startTimer() { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) { + return this.gpgpu.beginQuery(); + } + return { startMs: util_exports.now(), endMs: null }; + } + endTimer(query) { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) { + this.gpgpu.endQuery(); + return query; + } + query.endMs = util_exports.now(); + return query; + } + async getQueryTime(query) { + if (env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) { + return this.gpgpu.waitForQueryAndGetTime(query); + } + const timerQuery = query; + return timerQuery.endMs - timerQuery.startMs; + } + disposeData(dataId, force = false) { + if (this.pendingDisposal.has(dataId)) { + return false; + } + if (!this.texData.has(dataId)) { + return true; + } + if (force) { + this.texData.get(dataId).refCount = 0; + } else { + this.texData.get(dataId).refCount--; + } + if (!force && this.texData.get(dataId).refCount > 0) { + return false; + } + if (this.pendingRead.has(dataId)) { + this.pendingDisposal.add(dataId); + this.pendingDeletes++; + return false; + } + this.releaseGPUData(dataId); + const { complexTensorInfos } = this.texData.get(dataId); + if (complexTensorInfos != null) { + this.disposeData(complexTensorInfos.real.dataId, force); + this.disposeData(complexTensorInfos.imag.dataId, force); + } + this.texData.delete(dataId); + return true; + } + releaseGPUData(dataId) { + const { texture, dtype, texShape, usage, isPacked, slice: slice5 } = this.texData.get(dataId); + const key = slice5 && slice5.origDataId || dataId; + const refCount = this.dataRefCount.get(key); + if (refCount > 1) { + this.dataRefCount.set(key, refCount - 1); + } else { + this.dataRefCount.delete(key); + if (texture != null) { + this.numBytesInGPU -= this.computeBytes(texShape, dtype); + this.textureManager.releaseTexture(texture, texShape, usage, isPacked); + } + } + const texData = this.texData.get(dataId); + texData.texture = null; + texData.texShape = null; + texData.isPacked = false; + texData.slice = null; + } + getTexture(dataId) { + this.uploadToGPU(dataId); + return this.texData.get(dataId).texture.texture; + } + getDataInfo(dataId) { + return this.texData.get(dataId); + } + shouldExecuteOnCPU(inputs, sizeThreshold = CPU_HANDOFF_SIZE_THRESHOLD) { + return env().getBool("WEBGL_CPU_FORWARD") && inputs.every((input2) => this.texData.get(input2.dataId).texture == null && util_exports.sizeFromShape(input2.shape) < sizeThreshold); + } + getGPGPUContext() { + return this.gpgpu; + } + where(condition) { + backend_util_exports.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead"); + const condVals = condition.dataSync(); + return whereImpl3(condition.shape, condVals); + } + packedUnaryOp(x, op2, dtype) { + const program = new UnaryOpPackedProgram(x.shape, op2); + const outInfo = this.compileAndRun(program, [x], dtype); + return engine().makeTensorFromTensorInfo(outInfo); + } + abs(x) { + if (this.shouldExecuteOnCPU([x]) && x.dtype !== "complex64") { + const outValues = simpleAbsImplCPU(this.texData.get(x.dataId).values); + return this.makeOutput(x.shape, x.dtype, outValues); + } + if (env().getBool("WEBGL_PACK_UNARY_OPERATIONS")) { + return this.packedUnaryOp(x, ABS, x.dtype); + } + const program = new UnaryOpProgram(x.shape, ABS); + const outInfo = this.compileAndRun(program, [x]); + return engine().makeTensorFromTensorInfo(outInfo); + } + makeTensorInfo(shape, dtype, values) { + let dataId; + if (dtype === "string" && values != null && values.length > 0 && util_exports.isString(values[0])) { + const encodedValues = values.map((d) => util_exports.encodeString(d)); + dataId = this.write(encodedValues, shape, dtype); + } else { + dataId = this.write(values, shape, dtype); + } + this.texData.get(dataId).usage = null; + return { dataId, shape, dtype }; + } + makeOutput(shape, dtype, values) { + return engine().makeTensorFromTensorInfo(this.makeTensorInfo(shape, dtype, values), this); + } + unpackTensor(input2) { + const program = new UnpackProgram(input2.shape); + return this.runWebGLProgram(program, [input2], input2.dtype); + } + packTensor(input2) { + const program = new PackProgram(input2.shape); + const preventEagerUnpackingOutput = true; + return this.runWebGLProgram(program, [input2], input2.dtype, null, preventEagerUnpackingOutput); + } + packedReshape(input2, afterShape) { + const input3DShape = [ + getBatchDim(input2.shape), + ...getRowsCols(input2.shape) + ]; + const input3D = { + dtype: input2.dtype, + shape: input3DShape, + dataId: input2.dataId + }; + const afterShapeAs3D = [ + getBatchDim(afterShape), + ...getRowsCols(afterShape) + ]; + const program = new ReshapePackedProgram(afterShapeAs3D, input3DShape); + const preventEagerUnpackingOfOutput = true; + const customValues = [input3DShape]; + const output = this.runWebGLProgram(program, [input3D], input2.dtype, customValues, preventEagerUnpackingOfOutput); + return { dataId: output.dataId, shape: afterShape, dtype: output.dtype }; + } + decode(dataId, customTexShape) { + const texData = this.texData.get(dataId); + const { isPacked, shape, dtype } = texData; + if (customTexShape != null) { + const size = util_exports.sizeFromShape(shape); + const texSize = customTexShape[0] * customTexShape[1] * 4; + util_exports.assert(size <= texSize, () => "customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data."); + } + const shapeAs3D = getShapeAs3D(shape); + let program; + if (isPacked) { + program = new DecodeMatrixPackedProgram(shapeAs3D); + } else { + program = new DecodeMatrixProgram(shapeAs3D); + } + const preventEagerUnpackingOfOutput = true; + const customValues = [customTexShape != null ? customTexShape : getDenseTexShape(shapeAs3D)]; + const out = this.runWebGLProgram(program, [{ shape: shapeAs3D, dtype, dataId }], dtype, customValues, preventEagerUnpackingOfOutput, customTexShape); + return { dtype, shape, dataId: out.dataId }; + } + runWebGLProgram(program, inputs, outputDtype, customUniformValues, preventEagerUnpackingOfOutput = false, customTexShape) { + const output = this.makeTensorInfo(program.outputShape, outputDtype); + const outData = this.texData.get(output.dataId); + if (program.packedOutput) { + outData.isPacked = true; + } + if (program.outPackingScheme === PackingScheme.DENSE) { + const texelShape = customTexShape != null ? customTexShape : getDenseTexShape(program.outputShape); + outData.texShape = texelShape.map((d) => d * 2); + } + if (program.outTexUsage != null) { + outData.usage = program.outTexUsage; + } + if (util_exports.sizeFromShape(output.shape) === 0) { + outData.values = util_exports.getTypedArrayFromDType(output.dtype, 0); + return output; + } + const dataToDispose = []; + const inputsData = inputs.map((input2) => { + if (input2.dtype === "complex64") { + throw new Error(`GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.`); + } + let texData = this.texData.get(input2.dataId); + if (texData.texture == null) { + if (!program.packedInputs && util_exports.sizeFromShape(input2.shape) <= env().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM")) { + return { + shape: input2.shape, + texData: null, + isUniform: true, + uniformValues: texData.values + }; + } + if (program.packedInputs) { + texData.isPacked = true; + texData.shape = input2.shape; + } + } + this.uploadToGPU(input2.dataId); + if (!!texData.isPacked !== !!program.packedInputs) { + input2 = texData.isPacked ? this.unpackTensor(input2) : this.packTensor(input2); + dataToDispose.push(input2); + texData = this.texData.get(input2.dataId); + } else if (texData.isPacked && !isReshapeFree(texData.shape, input2.shape)) { + const savedInput = input2; + const targetShape = input2.shape; + input2.shape = texData.shape; + input2 = this.packedReshape(input2, targetShape); + dataToDispose.push(input2); + texData = this.texData.get(input2.dataId); + savedInput.shape = targetShape; + } + return { shape: input2.shape, texData, isUniform: false }; + }); + this.uploadToGPU(output.dataId); + const outputData = { shape: output.shape, texData: outData, isUniform: false }; + const key = makeShaderKey(program, inputsData, outputData); + const binary = this.getAndSaveBinary(key, () => { + return compileProgram(this.gpgpu, program, inputsData, outputData); + }); + const shouldTimeProgram = this.activeTimers != null; + let query; + if (shouldTimeProgram) { + query = this.startTimer(); + } + if (!env().get("ENGINE_COMPILE_ONLY")) { + runProgram(this.gpgpu, binary, inputsData, outputData, customUniformValues); + } + dataToDispose.forEach((info) => this.disposeIntermediateTensorInfo(info)); + if (shouldTimeProgram) { + query = this.endTimer(query); + this.activeTimers.push({ name: program.constructor.name, query: this.getQueryTime(query) }); + } + const glFlushThreshold = env().get("WEBGL_FLUSH_THRESHOLD"); + if (glFlushThreshold > 0) { + const time = util_exports.now(); + if (time - this.lastGlFlushTime > glFlushThreshold) { + this.gpgpu.gl.flush(); + this.lastGlFlushTime = time; + } + } + if (!env().getBool("WEBGL_LAZILY_UNPACK") && outData.isPacked && preventEagerUnpackingOfOutput === false) { + const unpacked = this.unpackTensor(output); + this.disposeIntermediateTensorInfo(output); + return unpacked; + } + return output; + } + compileAndRun(program, inputs, outputDtype, customUniformValues, preventEagerUnpackingOfOutput = false) { + outputDtype = outputDtype || inputs[0].dtype; + const outInfo = this.runWebGLProgram(program, inputs, outputDtype, customUniformValues, preventEagerUnpackingOfOutput); + return outInfo; + } + getAndSaveBinary(key, getBinary) { + if (!(key in this.binaryCache)) { + this.binaryCache[key] = getBinary(); + } + return this.binaryCache[key]; + } + getTextureManager() { + return this.textureManager; + } + dispose() { + if (this.disposed) { + return; + } + if (!env().getBool("IS_TEST")) { + const allKeys = Object.keys(this.binaryCache); + allKeys.forEach((key) => { + this.gpgpu.deleteProgram(this.binaryCache[key].webGLProgram); + delete this.binaryCache[key]; + }); + } + this.textureManager.dispose(); + if (this.canvas != null && (typeof HTMLCanvasElement !== "undefined" && this.canvas instanceof HTMLCanvasElement)) { + this.canvas.remove(); + } else { + this.canvas = null; + } + if (this.gpgpuCreatedLocally) { + this.gpgpu.program = null; + this.gpgpu.dispose(); + } + this.disposed = true; + } + floatPrecision() { + if (this.floatPrecisionValue == null) { + this.floatPrecisionValue = tidy(() => { + if (!env().get("WEBGL_RENDER_FLOAT32_ENABLED")) { + const debugFlag = env().getBool("DEBUG"); + env().set("DEBUG", false); + const underflowCheckValue = this.abs(scalar(1e-8)).dataSync()[0]; + env().set("DEBUG", debugFlag); + if (underflowCheckValue > 0) { + return 32; + } + } + return 16; + }); + } + return this.floatPrecisionValue; + } + epsilon() { + return this.floatPrecision() === 32 ? EPSILON_FLOAT322 : EPSILON_FLOAT162; + } + uploadToGPU(dataId) { + const texData = this.texData.get(dataId); + const { shape, dtype, values, texture, usage, isPacked } = texData; + if (texture != null) { + return; + } + const shouldTimeProgram = this.activeTimers != null; + let start; + if (shouldTimeProgram) { + start = util_exports.now(); + } + let texShape = texData.texShape; + if (texShape == null) { + texShape = getTextureShapeFromLogicalShape(shape, isPacked); + texData.texShape = texShape; + } + if (values != null) { + const shapeAs3D = getShapeAs3D(shape); + let program; + let width = texShape[1], height = texShape[0]; + const isByteArray = values instanceof Uint8Array || values instanceof Uint8ClampedArray; + if (isPacked || !isByteArray) { + [width, height] = getPackedMatrixTextureShapeWidthHeight(texShape[0], texShape[1]); + } + if (isPacked) { + program = new EncodeMatrixPackedProgram(shapeAs3D, isByteArray); + } else { + program = new EncodeMatrixProgram(shapeAs3D, isByteArray); + } + const tempDenseInputTexShape = isByteArray ? [height, width] : texShape; + const tempDenseInputHandle = this.makeTensorInfo(tempDenseInputTexShape, dtype); + const tempDenseInputTexData = this.texData.get(tempDenseInputHandle.dataId); + if (isByteArray) { + tempDenseInputTexData.usage = TextureUsage.PIXELS; + } else { + tempDenseInputTexData.usage = TextureUsage.UPLOAD; + } + tempDenseInputTexData.texShape = tempDenseInputTexShape; + this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(tempDenseInputHandle.dataId), width, height, values); + const customValues = [[height, width]]; + const preventEagerUnpacking = true; + const encodedOutputTarget = this.runWebGLProgram(program, [tempDenseInputHandle], dtype, customValues, preventEagerUnpacking); + const outputTexData = this.texData.get(encodedOutputTarget.dataId); + texData.texShape = outputTexData.texShape; + texData.isPacked = outputTexData.isPacked; + texData.usage = outputTexData.usage; + if (!env().get("ENGINE_COMPILE_ONLY")) { + texData.texture = outputTexData.texture; + texData.values = null; + this.texData.delete(encodedOutputTarget.dataId); + } else { + this.disposeData(encodedOutputTarget.dataId); + } + this.disposeIntermediateTensorInfo(tempDenseInputHandle); + if (shouldTimeProgram) { + this.uploadWaitMs += util_exports.now() - start; + } + } else { + const newTexture = this.acquireTexture(texShape, usage, dtype, isPacked); + texData.texture = newTexture; + } + } + convertAndCacheOnCPU(dataId, float32Values) { + const texData = this.texData.get(dataId); + const { dtype } = texData; + this.releaseGPUData(dataId); + if (float32Values != null) { + texData.values = float32ToTypedArray(float32Values, dtype); + } + return texData.values; + } + acquireTexture(texShape, texType, dtype, isPacked) { + this.numBytesInGPU += this.computeBytes(texShape, dtype); + if (!this.warnedAboutMemory && this.numBytesInGPU > this.numMBBeforeWarning * 1024 * 1024) { + const mb = (this.numBytesInGPU / 1024 / 1024).toFixed(2); + this.warnedAboutMemory = true; + console.warn(`High memory usage in GPU: ${mb} MB, most likely due to a memory leak`); + } + return this.textureManager.acquireTexture(texShape, texType, isPacked); + } + computeBytes(shape, dtype) { + return shape[0] * shape[1] * util_exports.bytesPerElement(dtype); + } + checkCompileCompletion() { + for (const [, binary] of Object.entries(this.binaryCache)) { + this.checkCompletion_(binary); + } + } + async checkCompileCompletionAsync() { + const ps = []; + if (this.gpgpu.parallelCompilationExtension) { + for (const [, binary] of Object.entries(this.binaryCache)) { + ps.push(this.checkCompletionAsync_(binary)); + } + return Promise.all(ps); + } else { + for (const [, binary] of Object.entries(this.binaryCache)) { + const p2 = new Promise((resolve) => { + try { + this.checkCompletion_(binary); + resolve(true); + } catch (error) { + throw error; + } + }); + ps.push(p2); + } + return Promise.all(ps); + } + } + async checkCompletionAsync_(binary) { + if (this.gpgpu.gl.getProgramParameter(binary.webGLProgram, this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)) { + return this.checkCompletion_(binary); + } else { + await nextFrame(); + return this.checkCompletionAsync_(binary); + } + } + checkCompletion_(binary) { + if (this.gpgpu.gl.getProgramParameter(binary.webGLProgram, this.gpgpu.gl.LINK_STATUS) === false) { + console.log(this.gpgpu.gl.getProgramInfoLog(binary.webGLProgram)); + if (this.gpgpu.gl.getShaderParameter(binary.fragmentShader, this.gpgpu.gl.COMPILE_STATUS) === false) { + logShaderSourceAndInfoLog(binary.source, this.gpgpu.gl.getShaderInfoLog(binary.fragmentShader)); + throw new Error("Failed to compile fragment shader."); + } + throw new Error("Failed to link vertex and fragment shaders."); + } + return true; + } + getUniformLocations() { + for (const [, binary] of Object.entries(this.binaryCache)) { + const { uniformLocations, customUniformLocations, infLoc, nanLoc, inShapesLocations, inTexShapesLocations, outShapeLocation, outShapeStridesLocation, outTexShapeLocation } = getUniformLocations(this.gpgpu, binary.program, binary.webGLProgram); + binary.uniformLocations = uniformLocations; + binary.customUniformLocations = customUniformLocations; + binary.infLoc = infLoc; + binary.nanLoc = nanLoc; + binary.inShapesLocations = inShapesLocations; + binary.inTexShapesLocations = inTexShapesLocations; + binary.outShapeLocation = outShapeLocation; + binary.outShapeStridesLocation = outShapeStridesLocation; + binary.outTexShapeLocation = outTexShapeLocation; + } + } + }; + MathBackendWebGL.nextDataId = 0; + function float32ToTypedArray(a, dtype) { + if (dtype === "float32" || dtype === "complex64") { + return a; + } else if (dtype === "int32" || dtype === "bool") { + const result = dtype === "int32" ? new Int32Array(a.length) : new Uint8Array(a.length); + for (let i = 0; i < result.length; ++i) { + result[i] = Math.round(a[i]); + } + return result; + } else { + throw new Error(`Unknown dtype ${dtype}`); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/base.js + if (device_util_exports.isBrowser()) { + registerBackend("webgl", () => new MathBackendWebGL(), 2); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/register_all_kernels.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/_FusedMatMul.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchMatMul_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/kernel_funcs_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_gpu.js + init_define_BUILD_VERSION(); + var CHECK_NAN_SNIPPET2 = ` + if (isnan(a)) return a; + if (isnan(b)) return b; +`; + var BinaryOpProgram = class { + constructor(op2, aShape, bShape) { + this.variableNames = ["A", "B"]; + this.outputShape = backend_util_exports.assertAndGetBroadcastShape(aShape, bShape); + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + this.userCode = ` + float binaryOperation(float a, float b) { + ${op2} + } + + void main() { + float a = getAAtOutCoords(); + float b = getBAtOutCoords(); + setOutput(binaryOperation(a, b)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_packed_gpu.js + init_define_BUILD_VERSION(); + var CHECK_NAN_SNIPPET3 = ` + result.r = isNaN.r > 0. ? NAN : result.r; + result.g = isNaN.g > 0. ? NAN : result.g; + result.b = isNaN.b > 0. ? NAN : result.b; + result.a = isNaN.a > 0. ? NAN : result.a; +`; + var BinaryOpPackedProgram = class { + constructor(op2, aShape, bShape, checkOutOfBounds = false) { + this.variableNames = ["A", "B"]; + this.supportsBroadcasting = true; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = backend_util_exports.assertAndGetBroadcastShape(aShape, bShape); + const rank = this.outputShape.length; + this.enableShapeUniforms = useShapeUniforms(rank); + let checkOutOfBoundsString = ""; + if (checkOutOfBounds) { + if (rank === 0 || util_exports.sizeFromShape(this.outputShape) === 1) { + checkOutOfBoundsString = ` + result.y = 0.; + result.z = 0.; + result.w = 0.; + `; + } else { + const dtype = getCoordsDataType(rank); + checkOutOfBoundsString = ` + ${dtype} coords = getOutputCoords(); + `; + if (rank === 1) { + if (this.enableShapeUniforms) { + checkOutOfBoundsString += ` + result.y = (coords + 1) >= outShape ? 0. : result.y; + result.z = 0.; + result.w = 0.; + `; + } else { + checkOutOfBoundsString += ` + result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y; + result.z = 0.; + result.w = 0.; + `; + } + } else { + const channels = getChannels("coords", rank); + if (this.enableShapeUniforms) { + checkOutOfBoundsString += ` + bool nextRowOutOfBounds = + (${channels[rank - 2]} + 1) >= outShape[${rank} - 2]; + bool nextColOutOfBounds = + (${channels[rank - 1]} + 1) >= outShape[${rank} - 1]; + result.y = nextColOutOfBounds ? 0. : result.y; + result.z = nextRowOutOfBounds ? 0. : result.z; + result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; + `; + } else { + checkOutOfBoundsString += ` + bool nextRowOutOfBounds = + (${channels[rank - 2]} + 1) >= ${this.outputShape[rank - 2]}; + bool nextColOutOfBounds = + (${channels[rank - 1]} + 1) >= ${this.outputShape[rank - 1]}; + result.y = nextColOutOfBounds ? 0. : result.y; + result.z = nextRowOutOfBounds ? 0. : result.z; + result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; + `; + } + } + } + } + this.userCode = ` + vec4 binaryOperation(vec4 a, vec4 b) { + ${op2} + } + + void main() { + vec4 a = getAAtOutCoords(); + vec4 b = getBAtOutCoords(); + + vec4 result = binaryOperation(a, b); + ${checkOutOfBoundsString} + + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Complex.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Identity.js + init_define_BUILD_VERSION(); + function identity2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + backend2.incRef(x.dataId); + return { dataId: x.dataId, shape: x.shape, dtype: x.dtype }; + } + var identityConfig2 = { + kernelName: Identity, + backendName: "webgl", + kernelFunc: identity2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Complex.js + function complex3(args) { + const { inputs, backend: backend2 } = args; + const { real: real4, imag: imag4 } = inputs; + const complexInfo = backend2.makeTensorInfo(real4.shape, "complex64"); + const complex4 = backend2.texData.get(complexInfo.dataId); + const realTensorInfo = identity2({ inputs: { x: real4 }, backend: backend2 }); + const imagTensorInfo = identity2({ inputs: { x: imag4 }, backend: backend2 }); + complex4.complexTensorInfos = { real: realTensorInfo, imag: imagTensorInfo }; + return complexInfo; + } + var complexConfig2 = { + kernelName: Complex, + backendName: "webgl", + kernelFunc: complex3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LeakyRelu.js + init_define_BUILD_VERSION(); + var LEAKYRELU = `return (a < 0.) ? b * a : a;`; + var LEAKYRELU_PACKED = ` + vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); + return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); +`; + function leakyRelu3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { alpha } = attrs; + const $alpha = backend2.makeTensorInfo([], "float32", util_exports.createScalarValue(alpha, "float32")); + const program = env().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new BinaryOpPackedProgram(LEAKYRELU_PACKED, x.shape, $alpha.shape) : new BinaryOpProgram(LEAKYRELU, x.shape, $alpha.shape); + const result = backend2.runWebGLProgram(program, [x, $alpha], "float32"); + backend2.disposeIntermediateTensorInfo($alpha); + return result; + } + var leakyReluConfig2 = { + kernelName: LeakyRelu, + backendName: "webgl", + kernelFunc: leakyRelu3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Prelu.js + init_define_BUILD_VERSION(); + var PRELU = `return (a < 0.) ? b * a : a;`; + var PRELU_PACKED = ` + vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); + return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); +`; + function prelu3(args) { + const { inputs, backend: backend2 } = args; + const { x, alpha } = inputs; + const program = env().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new BinaryOpPackedProgram(PRELU_PACKED, x.shape, alpha.shape) : new BinaryOpProgram(PRELU, x.shape, alpha.shape); + return backend2.runWebGLProgram(program, [x, alpha], "float32"); + } + var preluConfig2 = { + kernelName: Prelu, + backendName: "webgl", + kernelFunc: prelu3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/kernel_funcs_utils.js + var CHECK_NAN_SNIPPET_UNARY = `if (isnan(x)) return x;`; + var CHECK_NAN_SNIPPET_BINARY = ` + if (isnan(a)) return a; + if (isnan(b)) return b; +`; + var CHECK_NAN_SNIPPET_BINARY_PACKED = ` + result.r = isNaN.r > 0. ? NAN : result.r; + result.g = isNaN.g > 0. ? NAN : result.g; + result.b = isNaN.b > 0. ? NAN : result.b; + result.a = isNaN.a > 0. ? NAN : result.a; +`; + function unaryKernelFunc2({ opSnippet, packedOpSnippet, cpuKernelImpl, dtype }) { + return ({ inputs, backend: backend2 }) => { + const { x } = inputs; + const webglBackend = backend2; + const $dtype = dtype || x.dtype; + if (webglBackend.shouldExecuteOnCPU([x]) && cpuKernelImpl != null) { + const xData = webglBackend.texData.get(x.dataId); + const outValues = cpuKernelImpl(xData.values, $dtype); + return webglBackend.makeTensorInfo(x.shape, $dtype, outValues); + } + const shouldUsePackedProgram = env().getBool("WEBGL_PACK_UNARY_OPERATIONS") && packedOpSnippet != null; + let program; + if (shouldUsePackedProgram) { + program = new UnaryOpPackedProgram(x.shape, packedOpSnippet); + } else { + program = new UnaryOpProgram(x.shape, opSnippet); + } + return webglBackend.runWebGLProgram(program, [x], $dtype); + }; + } + function binaryKernelFunc2({ opSnippet, packedOpSnippet, checkOutOfBounds = false, supportsComplex = false, cpuKernelImpl, dtype }) { + return ({ inputs, backend: backend2 }) => { + const { a, b } = inputs; + const webglBackend = backend2; + if (supportsComplex && a.dtype === "complex64") { + const aData = webglBackend.texData.get(a.dataId); + const bData = webglBackend.texData.get(b.dataId); + const [real4, imag4] = [ + [aData.complexTensorInfos.real, bData.complexTensorInfos.real], + [aData.complexTensorInfos.imag, bData.complexTensorInfos.imag] + ].map((complexParts) => { + const [aPart, bPart] = complexParts; + const aHandle = { + dataId: aPart.dataId, + dtype: aPart.dtype, + shape: a.shape + }; + const bHandle = { + dataId: bPart.dataId, + dtype: bPart.dtype, + shape: b.shape + }; + const program2 = new BinaryOpProgram(opSnippet, a.shape, b.shape); + return webglBackend.runWebGLProgram(program2, [aHandle, bHandle], upcastType(aPart.dtype, bPart.dtype)); + }); + const complexOutput = complex3({ inputs: { real: real4, imag: imag4 }, backend: webglBackend }); + webglBackend.disposeIntermediateTensorInfo(real4); + webglBackend.disposeIntermediateTensorInfo(imag4); + return complexOutput; + } + const $dtype = dtype || upcastType(a.dtype, b.dtype); + if ((a.dtype === "string" || b.dtype === "string" || webglBackend.shouldExecuteOnCPU([a, b])) && cpuKernelImpl != null) { + const aVals = webglBackend.texData.get(a.dataId).values; + const bVals = webglBackend.texData.get(b.dataId).values; + const decodedAVals = a.dtype === "string" ? backend_util_exports.fromUint8ToStringArray(aVals) : aVals; + const decodedBVals = a.dtype === "string" ? backend_util_exports.fromUint8ToStringArray(bVals) : bVals; + const [outValues, outShape] = cpuKernelImpl(a.shape, b.shape, decodedAVals, decodedBVals, $dtype); + const out = webglBackend.makeTensorInfo(outShape, $dtype); + const outData = webglBackend.texData.get(out.dataId); + outData.values = outValues; + return out; + } + const shouldUsePackedProgram = env().getBool("WEBGL_PACK_BINARY_OPERATIONS") && packedOpSnippet != null; + let program; + if (shouldUsePackedProgram) { + program = new BinaryOpPackedProgram(packedOpSnippet, a.shape, b.shape, checkOutOfBounds); + } else { + program = new BinaryOpProgram(opSnippet, a.shape, b.shape); + } + return webglBackend.runWebGLProgram(program, [a, b], $dtype); + }; + } + function mapActivationToShaderProgram(activation, packed = false) { + if (activation === "linear") { + if (packed) { + return LINEAR2; + } + return LINEAR; + } else if (activation === "relu") { + if (packed) { + return RELU2; + } + return RELU; + } else if (activation === "elu") { + if (packed) { + return ELU3; + } + return ELU2; + } else if (activation === "relu6") { + if (packed) { + return RELU62; + } + return RELU6; + } else if (activation === "prelu") { + if (packed) { + return PRELU_PACKED; + } + return PRELU; + } else if (activation === "leakyrelu") { + if (packed) { + return LEAKYRELU_PACKED; + } + return LEAKYRELU; + } else if (activation === "sigmoid") { + if (packed) { + return SIGMOID2; + } + return SIGMOID; + } + throw new Error(`Activation ${activation} has not been implemented for the WebGL backend.`); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/mulmat_packed_gpu.js + init_define_BUILD_VERSION(); + var MatMulPackedProgram = class { + constructor(aShape, bShape, outputShape, transposeA = false, transposeB = false, addBias = false, activation = null, hasPreluActivation = false, hasLeakyreluActivation = false) { + this.variableNames = ["matrixA", "matrixB"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + const sharedDim = transposeA ? aShape[1] : aShape[2]; + const sharedDimensionPacked = Math.ceil(sharedDim / 2); + const aSample = transposeA ? "i * 2, rc.y" : "rc.y, i * 2"; + const bSample = transposeB ? "rc.z, i * 2" : "i * 2, rc.z"; + const aSwizzle = transposeA ? ["a.xxyy", "a.zzww"] : ["a.xxzz", "a.yyww"]; + const bSwizzle = transposeB ? ["b.xzxz", "b.ywyw"] : ["b.xyxy", "b.zwzw"]; + let activationSnippet = "", applyActivationSnippet = ""; + if (activation) { + if (hasPreluActivation) { + activationSnippet = `vec4 activation(vec4 a) { + vec4 b = getPreluActivationWeightsAtOutCoords(); + ${activation} + }`; + } else if (hasLeakyreluActivation) { + activationSnippet = `vec4 activation(vec4 a) { + vec4 b = getLeakyreluAlphaAtOutCoords(); + ${activation} + }`; + } else { + activationSnippet = `vec4 activation(vec4 x) { + ${activation} + }`; + } + applyActivationSnippet = `result = activation(result);`; + } + const addBiasSnippet = addBias ? "result += getBiasAtOutCoords();" : ""; + if (addBias) { + this.variableNames.push("bias"); + } + if (hasPreluActivation) { + this.variableNames.push("preluActivationWeights"); + } + if (hasLeakyreluActivation) { + this.variableNames.push("leakyreluAlpha"); + } + let batchASnippet = "rc.x"; + let batchBSnippet = "rc.x"; + if (aShape[0] < bShape[0]) { + batchASnippet = `int(min(float(rc.x), ${aShape[0] - 1}.))`; + } else if (bShape[0] < aShape[0]) { + batchBSnippet = `int(min(float(rc.x), ${bShape[0] - 1}.))`; + } + this.userCode = ` + ${activationSnippet} + // Don't use uniform for sharedDimensionPacked for performance. + const float sharedDimension = ${sharedDimensionPacked}.0; + + vec4 dot2x2ARowBCol(ivec3 rc) { + vec4 result = vec4(0); + for (int i = 0; i < ${sharedDimensionPacked}; i++) { + int batchA = ${batchASnippet}; + int batchB = ${batchBSnippet}; + vec4 a = getMatrixA(batchA, ${aSample}); + vec4 b = getMatrixB(batchB, ${bSample}); + + // These swizzled products need to be separately added. + // See: https://github.com/tensorflow/tfjs/issues/1735 + result += (${aSwizzle[0]} * ${bSwizzle[0]}); + result += (${aSwizzle[1]} * ${bSwizzle[1]}); + } + return result; + } + + void main() { + ivec3 rc = getOutputCoords(); + vec4 result = dot2x2ARowBCol(rc); + + ${addBiasSnippet} + + ${applyActivationSnippet} + + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multiply.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_complex_gpu.js + init_define_BUILD_VERSION(); + var COMPLEX_MULTIPLY = { + REAL: "return areal * breal - aimag * bimag;", + IMAG: "return areal * bimag + aimag * breal;" + }; + var BinaryOpComplexProgram = class { + constructor(op2, aShape, bShape) { + this.variableNames = ["AReal", "AImag", "BReal", "BImag"]; + this.outputShape = backend_util_exports.assertAndGetBroadcastShape(aShape, bShape); + this.userCode = ` + float binaryOpComplex( + float areal, float aimag, float breal, float bimag) { + ${op2} + } + + void main() { + float areal = getARealAtOutCoords(); + float aimag = getAImagAtOutCoords(); + float breal = getBRealAtOutCoords(); + float bimag = getBImagAtOutCoords(); + setOutput(binaryOpComplex(areal, aimag, breal, bimag)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multiply.js + var MUL = "return a * b;"; + function multiply2(args) { + const { inputs, backend: backend2 } = args; + const { a, b } = inputs; + const dtype = backend_util_exports.upcastType(a.dtype, b.dtype); + if (a.dtype === "complex64") { + const aData = backend2.texData.get(a.dataId); + const bData = backend2.texData.get(b.dataId); + const realProgram = new BinaryOpComplexProgram(COMPLEX_MULTIPLY.REAL, a.shape, b.shape); + const imagProgram = new BinaryOpComplexProgram(COMPLEX_MULTIPLY.IMAG, a.shape, b.shape); + const inputs2 = [ + { + dataId: aData.complexTensorInfos.real.dataId, + dtype: aData.complexTensorInfos.real.dtype, + shape: a.shape + }, + { + dataId: aData.complexTensorInfos.imag.dataId, + dtype: aData.complexTensorInfos.imag.dtype, + shape: a.shape + }, + { + dataId: bData.complexTensorInfos.real.dataId, + dtype: bData.complexTensorInfos.real.dtype, + shape: b.shape + }, + { + dataId: bData.complexTensorInfos.imag.dataId, + dtype: bData.complexTensorInfos.imag.dtype, + shape: b.shape + } + ]; + const realPart = backend2.runWebGLProgram(realProgram, inputs2, "float32"); + const imagPart = backend2.runWebGLProgram(imagProgram, inputs2, "float32"); + const complexOutput = complex3({ inputs: { real: realPart, imag: imagPart }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(imagPart); + return complexOutput; + } + if (backend2.shouldExecuteOnCPU([a, b])) { + const aData = backend2.texData.get(a.dataId); + const bData = backend2.texData.get(b.dataId); + const [outValues, outShape] = multiplyImplCPU(a.shape, b.shape, aData.values, bData.values, dtype); + const out = backend2.makeTensorInfo(outShape, dtype); + const outData = backend2.texData.get(out.dataId); + outData.values = outValues; + return out; + } + let program; + if (env().getBool("WEBGL_PACK_BINARY_OPERATIONS")) { + program = new BinaryOpPackedProgram(MUL, a.shape, b.shape); + } else { + program = new BinaryOpProgram(MUL, a.shape, b.shape); + } + return backend2.runWebGLProgram(program, [a, b], dtype); + } + var multiplyConfig2 = { + kernelName: Multiply, + backendName: "webgl", + kernelFunc: multiply2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reshape.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/reshape.js + init_define_BUILD_VERSION(); + function packedReshape(input2, afterShape, backend2) { + const input3DShape = [ + getBatchDim(input2.shape), + ...getRowsCols(input2.shape) + ]; + const input3D = { + dtype: input2.dtype, + shape: input3DShape, + dataId: input2.dataId + }; + const afterShapeAs3D = [ + getBatchDim(afterShape), + ...getRowsCols(afterShape) + ]; + const program = new ReshapePackedProgram(afterShapeAs3D, input3DShape); + const preventEagerUnpackingOfOutput = true; + const customValues = [input3DShape]; + const output = backend2.runWebGLProgram(program, [input3D], input2.dtype, customValues, preventEagerUnpackingOfOutput); + return { dataId: output.dataId, shape: afterShape, dtype: output.dtype }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reshape.js + function reshape3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { shape } = attrs; + const webglBackend = backend2; + const xSize = util_exports.sizeFromShape(x.shape); + const $shape = util_exports.inferFromImplicitShape(shape, xSize); + const $xSize = util_exports.sizeFromShape($shape); + util_exports.assert(xSize === $xSize, () => `The new shape (${$shape}) has ${$xSize} elements and the old shape (${x.shape}) has ${xSize} elements. The new shape and old shape must have the same number of elements.`); + const xTexData = webglBackend.texData.get(x.dataId); + if (xTexData.isPacked && !isReshapeFree(x.shape, $shape) && !(xTexData.texture !== null && isReshapeFree(xTexData.shape, $shape))) { + return packedReshape(x, $shape, webglBackend); + } + webglBackend.incRef(x.dataId); + return { dataId: x.dataId, shape: $shape, dtype: x.dtype }; + } + var reshapeConfig2 = { + kernelName: Reshape, + backendName: "webgl", + kernelFunc: reshape3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/reduce.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/mean_gpu.js + init_define_BUILD_VERSION(); + var MeanProgram = class { + constructor(reduceInfo, divisor) { + this.variableNames = ["x"]; + const { windowSize, batchSize, inSize, outSize } = reduceInfo; + this.outputShape = [batchSize, outSize]; + const windowSizeNearestVec4 = Math.floor(windowSize / 4) * 4; + const windowSizeVec4Remainder = windowSize % 4; + let updateSnippet = `sumValue += dot(values, ones);`; + if (divisor != null) { + const denominator = 1 / divisor; + updateSnippet = `sumValue += dot(values * ${util_exports.isInt(denominator) ? denominator.toPrecision(2) : denominator}, ones);`; + } + let checkOutOfBounds = ""; + if (inSize % windowSize > 0) { + checkOutOfBounds = ` + if (inIdx < 0 || inIdx >= ${inSize}) { + return 0.0; + } + `; + } + this.userCode = ` + const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); + + float getValue(int batch, int inIdx) { + ${checkOutOfBounds} + return getX(batch, inIdx); + } + + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int outIdx = coords[1]; + int inOffset = outIdx * ${windowSize}; + + float sumValue = 0.0; + + for (int i = 0; i < ${windowSizeNearestVec4}; i += 4) { + int inIdx = inOffset + i; + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), + getValue(batch, inIdx + 3) + ); + + ${updateSnippet} + } + + int inIdx = inOffset + ${windowSizeNearestVec4}; + if (${windowSizeVec4Remainder === 1}) { + vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 2}) { + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), 0.0, 0.0); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 3}) { + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), 0.0); + + ${updateSnippet} + } + setOutput(sumValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/reduce_gpu.js + init_define_BUILD_VERSION(); + var ReduceProgram = class { + constructor(reduceInfo, reduceType) { + this.variableNames = ["x"]; + const { windowSize, batchSize, inSize, outSize } = reduceInfo; + this.outputShape = [batchSize, outSize]; + let initializationValue = "0.0"; + let compareOp = ``; + if (reduceType === "prod") { + initializationValue = "1.0"; + } else if (reduceType === "min") { + initializationValue = "1.0 / 1e-20"; + compareOp = `min`; + } else if (reduceType === "max") { + initializationValue = "-1.0 / 1e-20"; + compareOp = `max`; + } + let returnValue = `${reduceType}(${reduceType}(${reduceType}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; + if (reduceType === "sum") { + returnValue = `sumValue`; + } else if (reduceType === "prod") { + returnValue = `prodValue`; + } else if (reduceType === "all") { + returnValue = `allValue`; + } else if (reduceType === "any") { + returnValue = `anyValue`; + } + const windowSizeNearestVec4 = Math.floor(windowSize / 4) * 4; + const windowSizeVec4Remainder = windowSize % 4; + let updateSnippet = ` + if (${reduceType === "sum"}) { + sumValue += dot(values, ones); + } else if (${reduceType === "prod"}) { + vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]); + prodValue *= tmp[0] * tmp[1]; + } else { + minMaxValue = ${compareOp}(values, minMaxValue); + if (${reduceType === "min"} || ${reduceType === "max"}) { + minMaxValue = ${compareOp}(values, minMaxValue); + bvec4 isNaN = isnan(values); + if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) { + minMaxValue = vec4(NAN); + } + } + } + `; + let vecType = `vec4`; + if (reduceType === "all") { + initializationValue = "1.0"; + updateSnippet = ` + bool reducedAllValue = all(values); + float floatedReducedAllValue = float(reducedAllValue); + allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); + `; + vecType = `bvec4`; + } else if (reduceType === "any") { + initializationValue = "0.0"; + updateSnippet = ` + bool reducedAnyValue = any(values); + float floatedReducedAnyValue = float(reducedAnyValue); + anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0); + `; + vecType = `bvec4`; + } + let checkOutOfBounds = ""; + if (inSize % windowSize > 0) { + checkOutOfBounds = ` + if (inIdx < 0 || inIdx >= ${inSize}) { + return initializationValue; + } + `; + } + this.userCode = ` + const float initializationValue = ${initializationValue}; + const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); + + float getValue(int batch, int inIdx) { + ${checkOutOfBounds} + return getX(batch, inIdx); + } + + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int outIdx = coords[1]; + int inOffset = outIdx * ${windowSize}; + + vec4 minMaxValue = vec4(${initializationValue}); + float prodValue = 1.0; + float sumValue = 0.0; + float allValue = 1.0; + float anyValue = 0.0; + + for (int i = 0; i < ${windowSizeNearestVec4}; i += 4) { + int inIdx = inOffset + i; + ${vecType} values = ${vecType}( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), + getValue(batch, inIdx + 3) + ); + + ${updateSnippet} + } + + int inIdx = inOffset + ${windowSizeNearestVec4}; + if (${windowSizeVec4Remainder === 1}) { + ${vecType} values = ${vecType}( + getValue(batch, inIdx), + initializationValue, + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 2}) { + ${vecType} values = ${vecType}( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 3}) { + ${vecType} values = ${vecType}( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), + initializationValue + ); + + ${updateSnippet} + } + setOutput(${returnValue}); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/reduce.js + function getReductionStages(inShape) { + const stages = []; + while (stages.length === 0 || stages[stages.length - 1].outSize !== 1) { + const outSize = stages.length ? stages[stages.length - 1].outSize : inShape[1]; + const windowSize = backend_util_exports.computeOptimalWindowSize(outSize); + stages.push({ + inSize: outSize, + windowSize, + outSize: Math.ceil(outSize / windowSize) + }); + } + return stages; + } + function reduce(x, dtype, reductionType, backend2) { + const reductionStages = getReductionStages(x.shape); + let result = x; + for (let i = 0; i < reductionStages.length; i++) { + const { inSize, windowSize, outSize } = reductionStages[i]; + let program; + let previousResult; + if (reductionType === "mean") { + program = i === 0 ? new MeanProgram({ windowSize, inSize, batchSize: x.shape[0], outSize }, inSize) : new MeanProgram({ windowSize, inSize, batchSize: x.shape[0], outSize }); + } else { + program = new ReduceProgram({ windowSize, inSize, batchSize: x.shape[0], outSize }, reductionType); + } + previousResult = result; + result = backend2.runWebGLProgram(program, [result], dtype); + if (previousResult.dataId !== x.dataId) { + backend2.disposeIntermediateTensorInfo(previousResult); + } + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transpose_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/transpose_gpu.js + init_define_BUILD_VERSION(); + var TransposeProgram = class { + constructor(aShape, newDim) { + this.variableNames = ["A"]; + const outputShape = new Array(aShape.length); + for (let i = 0; i < outputShape.length; i++) { + outputShape[i] = aShape[newDim[i]]; + } + this.outputShape = outputShape; + this.rank = outputShape.length; + const dtype = getCoordsDataType(this.rank); + const switched = getSwitchedCoords(newDim); + this.userCode = ` + void main() { + ${dtype} resRC = getOutputCoords(); + setOutput(getA(${switched})); + } + `; + } + }; + function getSwitchedCoords(newDim) { + const rank = newDim.length; + if (rank > 6) { + throw Error(`Transpose for rank ${rank} is not yet supported`); + } + const originalOrder = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u", "resRC.v"]; + const switchedCoords = new Array(rank); + for (let i = 0; i < newDim.length; i++) { + switchedCoords[newDim[i]] = originalOrder[i]; + } + return switchedCoords.join(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/transpose_packed_gpu.js + init_define_BUILD_VERSION(); + var TransposePackedProgram = class { + constructor(aShape, newDim) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + const outputShape = new Array(aShape.length); + for (let i = 0; i < outputShape.length; i++) { + outputShape[i] = aShape[newDim[i]]; + } + this.outputShape = outputShape; + this.rank = outputShape.length; + if (this.rank > 6) { + throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`); + } + const dtype = getCoordsDataType(this.rank); + const outputOrder = getVecChannels("rc", this.rank); + const switchedOrder = new Array(this.rank); + for (let i = 0; i < newDim.length; i++) { + switchedOrder[newDim[i]] = outputOrder[i]; + } + const innerDims = `vec2(${switchedOrder.slice(-2).join()})`; + const nextColumn = `++${outputOrder[this.rank - 1]} < ${outputShape[this.rank - 1]}`; + const getc = `getChannel(getA(${switchedOrder.join()}), ${innerDims})`; + this.userCode = ` + void main() { + ${dtype} rc = getOutputCoords(); + vec4 result = vec4(0.); + result[0] = ${getc}; + if(${nextColumn}) { + result[1] = ${getc}; + } + --${outputOrder[this.rank - 1]}; + if(++${outputOrder[this.rank - 2]} < ${outputShape[this.rank - 2]}) { + result[2] = ${getc}; + if(${nextColumn}) { + result[3] = ${getc}; + } + } + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transpose_impl.js + function transposeImpl2(x, perm, backend2) { + const program = env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new TransposePackedProgram(x.shape, perm) : new TransposeProgram(x.shape, perm); + return backend2.runWebGLProgram(program, [x], x.dtype); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum_impl.js + function sumImpl(x, axis, keepDims, backend2) { + const reductionIndices = axis; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(reductionIndices, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + const sumInputIsTransposed = permutedAxes != null; + let sumInput = x; + if (sumInputIsTransposed) { + sumInput = transposeImpl2(x, permutedAxes, backend2); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("sum", axes, xRank); + const [sumOutShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(sumInput.shape, axes); + let outShape = sumOutShape; + if (keepDims) { + outShape = backend_util_exports.expandShapeToKeepDim(sumOutShape, origAxes); + } + const inSize = util_exports.sizeFromShape(reduceShape); + const xSize = util_exports.sizeFromShape(x.shape); + const batchSize = xSize / inSize; + const reshapedInput = reshape3({ inputs: { x: sumInput }, attrs: { shape: [batchSize, inSize] }, backend: backend2 }); + const outType = sumOutType(x.dtype); + const reduced = reduce(reshapedInput, outType, "sum", backend2); + const out = reshape3({ inputs: { x: reduced }, attrs: { shape: outShape }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(reshapedInput); + backend2.disposeIntermediateTensorInfo(reduced); + if (sumInputIsTransposed) { + backend2.disposeIntermediateTensorInfo(sumInput); + } + return out; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum.js + function sum4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + return sumImpl(x, axis, keepDims, backend2); + } + var sumConfig2 = { + kernelName: Sum, + backendName: "webgl", + kernelFunc: sum4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transpose.js + init_define_BUILD_VERSION(); + function transpose3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { perm } = attrs; + const webglBackend = backend2; + const xRank = x.shape.length; + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = x.shape[perm[i]]; + } + let out; + if (webglBackend.shouldExecuteOnCPU([x])) { + const xTexData = webglBackend.texData.get(x.dataId); + const values = xTexData.values; + const outValues = transposeImplCPU(values, x.shape, x.dtype, perm, newShape); + out = webglBackend.makeTensorInfo(newShape, x.dtype); + const outData = webglBackend.texData.get(out.dataId); + outData.values = outValues; + } else { + out = transposeImpl2(x, perm, webglBackend); + } + return out; + } + var transposeConfig2 = { + kernelName: Transpose, + backendName: "webgl", + kernelFunc: transpose3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchMatMul_impl.js + var MATMUL_SHARED_DIM_THRESHOLD = 1e3; + function batchMatMulImpl({ a, b, transposeA, transposeB, backend: backend2, bias = null, preluActivationWeights = null, leakyreluAlpha = 0, activation = null }) { + const aRank = a.shape.length; + const bRank = b.shape.length; + const innerShapeA = transposeA ? a.shape[aRank - 2] : a.shape[aRank - 1]; + const innerShapeB = transposeB ? b.shape[bRank - 1] : b.shape[bRank - 2]; + const outerShapeA = transposeA ? a.shape[aRank - 1] : a.shape[aRank - 2]; + const outerShapeB = transposeB ? b.shape[bRank - 2] : b.shape[bRank - 1]; + const outerDimsA = a.shape.slice(0, -2); + const outerDimsB = b.shape.slice(0, -2); + const batchDimA = util_exports.sizeFromShape(outerDimsA); + const batchDimB = util_exports.sizeFromShape(outerDimsB); + const outShapeOuterDims = broadcast_util_exports.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2)); + const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]); + util_exports.assert(innerShapeA === innerShapeB, () => `Error in matMul: inner shapes (${innerShapeA}) and (${innerShapeB}) of Tensors with shapes ${a.shape} and ${b.shape} and transposeA=${transposeA} and transposeB=${transposeB} must match.`); + const a3dShape = transposeA ? [batchDimA, innerShapeA, outerShapeA] : [batchDimA, outerShapeA, innerShapeA]; + const b3dShape = transposeB ? [batchDimB, outerShapeB, innerShapeB] : [batchDimB, innerShapeB, outerShapeB]; + const a3d = reshape3({ inputs: { x: a }, backend: backend2, attrs: { shape: a3dShape } }); + const b3d = reshape3({ inputs: { x: b }, backend: backend2, attrs: { shape: b3dShape } }); + const intermediates = [a3d, b3d]; + const batchDim = Math.max(batchDimA, batchDimB); + const sharedDim = transposeA ? a3d.shape[1] : a3d.shape[2]; + const hasBias = bias != null; + const hasPreluActivationWeights = preluActivationWeights != null; + const hasLeakyreluAlpha = activation === "leakyrelu"; + const fusedActivation = activation != null ? mapActivationToShaderProgram(activation, true) : null; + const containsFusedOps = hasBias || hasPreluActivationWeights || hasLeakyreluAlpha || fusedActivation != null; + let out; + if ((outerShapeA === 1 || outerShapeB === 1) && sharedDim > MATMUL_SHARED_DIM_THRESHOLD && containsFusedOps === false) { + let aVec = a3d; + let bVec = b3d; + if (transposeA) { + aVec = transpose3({ inputs: { x: a3d }, backend: backend2, attrs: { perm: [0, 2, 1] } }); + intermediates.push(aVec); + } + if (transposeB) { + bVec = transpose3({ inputs: { x: b3d }, backend: backend2, attrs: { perm: [0, 2, 1] } }); + intermediates.push(bVec); + } + const shouldReshapeA = outerShapeB !== 1; + const shouldReshapeB = outerShapeB === 1; + let aVec3d = aVec; + if (shouldReshapeA) { + aVec3d = reshape3({ + inputs: { x: aVec }, + backend: backend2, + attrs: { shape: [batchDim, sharedDim, 1] } + }); + intermediates.push(aVec3d); + } + const axis = outerShapeB === 1 ? 2 : 1; + let bVec3d = bVec; + if (shouldReshapeB) { + bVec3d = reshape3({ + inputs: { x: bVec }, + backend: backend2, + attrs: { shape: [batchDim, 1, sharedDim] } + }); + intermediates.push(bVec3d); + } + const product = multiply2({ inputs: { a: aVec3d, b: bVec3d }, backend: backend2 }); + out = sum4({ inputs: { x: product }, backend: backend2, attrs: { axis, keepDims: true } }); + intermediates.push(product); + } else { + const dtype = upcastType(a.dtype, b.dtype); + const program = new MatMulPackedProgram(a3dShape, b3dShape, [batchDim, outerShapeA, outerShapeB], transposeA, transposeB, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha); + const inputs = [a3d, b3d]; + if (bias != null) { + inputs.push(bias); + } + if (hasPreluActivationWeights) { + inputs.push(preluActivationWeights); + } + if (hasLeakyreluAlpha) { + const $leakyreluAlpha = backend2.makeTensorInfo([], "float32", util_exports.createScalarValue(leakyreluAlpha, "float32")); + inputs.push($leakyreluAlpha); + intermediates.push($leakyreluAlpha); + } + out = backend2.runWebGLProgram(program, inputs, dtype); + } + const outReshaped = reshape3({ inputs: { x: out }, backend: backend2, attrs: { shape: outShape } }); + intermediates.push(out); + for (const i of intermediates) { + backend2.disposeIntermediateTensorInfo(i); + } + return outReshaped; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/_FusedMatMul.js + function _fusedMatMul2(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b, bias, preluActivationWeights } = inputs; + const { transposeA, transposeB, activation, leakyreluAlpha } = attrs; + return batchMatMulImpl({ + a, + b, + transposeA, + transposeB, + backend: backend2, + bias, + preluActivationWeights, + leakyreluAlpha, + activation + }); + } + var _fusedMatMulConfig2 = { + kernelName: _FusedMatMul, + backendName: "webgl", + kernelFunc: _fusedMatMul2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Abs.js + init_define_BUILD_VERSION(); + var ABS2 = `return abs(x);`; + function abs3(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (backend2.shouldExecuteOnCPU([x]) && x.dtype !== "complex64") { + const xData = backend2.texData.get(x.dataId); + const outValues = simpleAbsImplCPU(xData.values); + return backend2.makeTensorInfo(x.shape, x.dtype, outValues); + } + let program; + if (env().getBool("WEBGL_PACK_UNARY_OPERATIONS")) { + program = new UnaryOpPackedProgram(x.shape, ABS2); + } else { + program = new UnaryOpProgram(x.shape, ABS2); + } + return backend2.runWebGLProgram(program, [x], x.dtype); + } + var absConfig2 = { + kernelName: Abs, + backendName: "webgl", + kernelFunc: abs3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Acos.js + init_define_BUILD_VERSION(); + var ACOS = CHECK_NAN_SNIPPET + ` + if (abs(x) > 1.) { + return NAN; + } + return acos(x); +`; + var acos3 = unaryKernelFunc2({ opSnippet: ACOS }); + var acosConfig2 = { + kernelName: Acos, + backendName: "webgl", + kernelFunc: acos3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Acosh.js + init_define_BUILD_VERSION(); + var ACOSH = CHECK_NAN_SNIPPET + ` + if (x < 1.0) return NAN; +return log(x + sqrt(x * x - 1.0));`; + var acosh3 = unaryKernelFunc2({ opSnippet: ACOSH }); + var acoshConfig2 = { + kernelName: Acosh, + backendName: "webgl", + kernelFunc: acosh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Add.js + init_define_BUILD_VERSION(); + var ADD = "return a + b;"; + var addKernelFunc = binaryKernelFunc2({ + opSnippet: ADD, + packedOpSnippet: ADD, + supportsComplex: true, + cpuKernelImpl: addImplCPU + }); + var addConfig2 = { + kernelName: Add, + backendName: "webgl", + kernelFunc: addKernelFunc + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AddN.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/addn_gpu.js + init_define_BUILD_VERSION(); + var AddNProgram = class { + constructor(outputShape, shapes) { + this.outputShape = []; + this.outputShape = outputShape; + this.variableNames = shapes.map((_, i) => `T${i}`); + const snippets = []; + this.variableNames.forEach((variable2) => { + snippets.push(`float v${variable2} = get${variable2}AtOutCoords();`); + }); + const operation = this.variableNames.map((variable2) => { + return `v${variable2}`; + }).join(" + "); + this.userCode = ` + void main() { + ${snippets.join("\n ")} + + float result = ${operation}; + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/addn_packed_gpu.js + init_define_BUILD_VERSION(); + var AddNPackedProgram = class { + constructor(outputShape, shapes) { + this.outputShape = []; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = outputShape; + this.variableNames = shapes.map((_, i) => `T${i}`); + const snippets = []; + this.variableNames.forEach((variable2) => { + snippets.push(`vec4 v${variable2} = get${variable2}AtOutCoords();`); + }); + const operation = this.variableNames.map((variable2) => { + return `v${variable2}`; + }).join(" + "); + this.userCode = ` + void main() { + ${snippets.join("\n ")} + + vec4 result = ${operation}; + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AddN.js + function addN2(args) { + const { inputs, backend: backend2 } = args; + const tensors = inputs; + if (tensors.length === 1) { + return identity2({ inputs: { x: tensors[0] }, backend: backend2 }); + } + if (tensors.length > env().get("WEBGL_MAX_TEXTURES_IN_SHADER")) { + const midIndex = Math.floor(tensors.length / 2); + const leftSide = addN2({ inputs: tensors.slice(0, midIndex), backend: backend2 }); + const rightSide = addN2({ inputs: tensors.slice(midIndex), backend: backend2 }); + return addN2({ inputs: [leftSide, rightSide], backend: backend2 }); + } + const dtype = tensors.map((t) => t.dtype).reduce((d1, d2) => upcastType(d1, d2)); + const shapes = tensors.map((t) => t.shape); + const usePackedOp = env().getBool("WEBGL_PACK"); + const program = usePackedOp ? new AddNPackedProgram(tensors[0].shape, shapes) : new AddNProgram(tensors[0].shape, shapes); + return backend2.runWebGLProgram(program, tensors, dtype); + } + var addNConfig2 = { + kernelName: AddN, + backendName: "webgl", + kernelFunc: addN2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/All.js + init_define_BUILD_VERSION(); + function all3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let permutedX = x; + if (permutedAxes != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("all", axes, xRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(permutedX.shape, axes); + const inSize = util_exports.sizeFromShape(reduceShape); + const a2D = reshape3({ inputs: { x: permutedX }, backend: backend2, attrs: { shape: [-1, inSize] } }); + const reduced = reduce(a2D, a2D.dtype, "all", backend2); + let res; + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: newShape } }); + } else { + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: outShape } }); + } + backend2.disposeIntermediateTensorInfo(a2D); + backend2.disposeIntermediateTensorInfo(reduced); + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo(permutedX); + } + return res; + } + var allConfig2 = { + kernelName: All, + backendName: "webgl", + kernelFunc: all3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Any.js + init_define_BUILD_VERSION(); + function any3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let permutedX = x; + if (permutedAxes != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("any", axes, xRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(permutedX.shape, axes); + const inSize = util_exports.sizeFromShape(reduceShape); + const a2D = reshape3({ inputs: { x: permutedX }, backend: backend2, attrs: { shape: [-1, inSize] } }); + const reduced = reduce(a2D, a2D.dtype, "any", backend2); + let res; + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: newShape } }); + } else { + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: outShape } }); + } + backend2.disposeIntermediateTensorInfo(a2D); + backend2.disposeIntermediateTensorInfo(reduced); + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo(permutedX); + } + return res; + } + var anyConfig2 = { + kernelName: Any, + backendName: "webgl", + kernelFunc: any3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ArgMax.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/arg_min_max.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/argminmax_gpu.js + init_define_BUILD_VERSION(); + var ArgMinMaxProgram = class { + constructor(reduceInfo, op2, firstPass) { + this.variableNames = ["A"]; + const { windowSize, batchSize, outSize } = reduceInfo; + if (!firstPass) { + this.variableNames.push("bestIndicesA"); + } + this.outputShape = [batchSize, outSize]; + const compOp = op2 === "max" ? ">" : "<"; + const indexSnippet = firstPass ? "inOffset + i;" : "round(getBestIndicesA(batch, inOffset + i));"; + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int outIdx = coords[1]; + int inOffset = outIdx * ${windowSize}; + + int bestIndex = inOffset; + float bestValue = getA(batch, bestIndex); + + for (int i = 0; i < ${windowSize}; i++) { + int inIdx = ${indexSnippet}; + float candidate = getA(batch, inIdx); + if (candidate ${compOp} bestValue) { + bestValue = candidate; + bestIndex = inIdx; + } + } + setOutput(float(bestIndex)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/argminmax_packed_gpu.js + init_define_BUILD_VERSION(); + var ArgMinMaxPackedProgram = class { + constructor(shape, windowSize, op2, firstPass) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + util_exports.assert(shape.length > 2, () => `Packed arg${op2.charAt(0).toUpperCase() + op2.slice(1)} supports only inputs with rank above 2.`); + const inSize = shape[shape.length - 1]; + const outSize = Math.ceil(inSize / windowSize); + this.outputShape = shape.slice(0, -1); + if (outSize > 1) { + this.outputShape.push(outSize); + } + if (!firstPass) { + this.variableNames.push("bestIndicesA"); + } + const outShape = this.outputShape; + const rank = outShape.length; + const dtype = getCoordsDataType(rank); + const coords2 = getChannels("coords", rank); + let sourceLocSetup; + let sourceRank; + if (outSize === 1) { + sourceRank = rank + 1; + const sourceLocDType = getCoordsDataType(sourceRank); + sourceLocSetup = ` + ${sourceLocDType} sourceLocR = ${sourceLocDType}(${coords2.join()}, 0); + ++${coords2[rank - 1]}; + ${sourceLocDType} sourceLocG = ${sourceLocDType}(${coords2.join()}, 0); + ++${coords2[rank - 2]}; + ${sourceLocDType} sourceLocA = ${sourceLocDType}(${coords2.join()}, 0); + --${coords2[rank - 1]}; + ${sourceLocDType} sourceLocB = ${sourceLocDType}(${coords2.join()}, 0); + --${coords2[rank - 2]};`; + } else { + sourceRank = rank; + sourceLocSetup = ` + ${dtype} sourceLocR = coords; + ++${coords2[rank - 1]}; + ${dtype} sourceLocG = coords; + ++${coords2[rank - 2]}; + ${dtype} sourceLocA = coords; + --${coords2[rank - 1]}; + ${dtype} sourceLocB = coords; + --${coords2[rank - 2]};`; + } + const channels = ["x", "y", "z", "w", "u", "v"].slice(0, sourceRank); + const inChannel = "." + channels[sourceRank - 1]; + const intChannels = channels.map((x) => "int " + x); + const srcRCoords = getChannels("sourceLocR", sourceRank - 1).concat("inIdx.r"); + const srcGCoords = getChannels("sourceLocG", sourceRank - 1).concat("inIdx.g"); + const srcBCoords = getChannels("sourceLocB", sourceRank - 1).concat("inIdx.b"); + const srcACoords = getChannels("sourceLocA", sourceRank - 1).concat("inIdx.a"); + const compOp = op2 === "max" ? "greaterThan" : "lessThan"; + const fetchCandidateIdx = firstPass ? "" : ` + inIdx = round(vec4(getBestIndicesAChannel(${srcRCoords.join()}), + getBestIndicesAChannel(${srcGCoords.join()}), + getBestIndicesAChannel(${srcBCoords.join()}), + getBestIndicesAChannel(${srcACoords.join()})));`; + const fetchValue = `vec4( + getAChannel(${srcRCoords.join()}), + hasNextCol ? getAChannel(${srcGCoords.join()}) : 0., + hasNextRow ? getAChannel(${srcBCoords.join()}) : 0., + hasNextRow && hasNextCol ? getAChannel(${srcACoords.join()}) : 0.)`; + const getBestIndicesAChannelSnippet = firstPass ? "" : ` + float getBestIndicesAChannel(${intChannels.join()}) { + return getChannel(getBestIndicesA(${channels.join()}), + vec2(${channels.slice(-2).join()})); + }`; + this.userCode = ` + float getAChannel(${intChannels.join()}) { + return getChannel(getA(${channels.join()}), + vec2(${channels.slice(-2).join()})); + } + ${getBestIndicesAChannelSnippet} + void main() { + ${dtype} coords = getOutputCoords(); + bool hasNextCol = ${coords2[rank - 1]} < ${outShape[rank - 1] - 1}; + bool hasNextRow = ${coords2[rank - 2]} < ${outShape[rank - 2] - 1}; + ${sourceLocSetup} + ivec4 srcIdx = ivec4(sourceLocR${inChannel}, sourceLocG${inChannel}, + sourceLocB${inChannel}, sourceLocA${inChannel}) * ${windowSize}; + ivec4 inIdx = srcIdx; + vec4 bestIndex = vec4(inIdx); + vec4 bestValue = ${fetchValue}; + + for (int i = 0; i < ${windowSize}; i++) { + inIdx = srcIdx; + ${fetchCandidateIdx} + vec4 candidate = ${fetchValue}; + bvec4 nan = isnan(candidate); + bvec4 replace = bvec4( + vec4(${compOp}(candidate, bestValue)) * (vec4(1.0) - vec4(nan))); + + bestValue = vec4(replace.x ? candidate.x : bestValue.x, + replace.y ? candidate.y : bestValue.y, + replace.z ? candidate.z : bestValue.z, + replace.w ? candidate.w : bestValue.w); + bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace)); + srcIdx++; + } + setOutput(bestIndex); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/arg_min_max.js + function argReduce(backend2, x, reduceType, bestIndicesA = null) { + let batchSize = x.shape[0]; + let inSize = x.shape[1]; + if (bestIndicesA != null) { + batchSize = bestIndicesA.shape[0]; + inSize = bestIndicesA.shape[1]; + } + const windowSize = backend_util_exports.computeOptimalWindowSize(inSize); + const reduceInfo = { windowSize, inSize, batchSize, outSize: Math.ceil(inSize / windowSize) }; + const program = new ArgMinMaxProgram(reduceInfo, reduceType, bestIndicesA == null); + const inputs = [x]; + if (bestIndicesA != null) { + inputs.push(bestIndicesA); + } + const output = backend2.runWebGLProgram(program, inputs, "int32"); + if (output.shape[1] === 1) { + return output; + } + const result = argReduce(backend2, x, reduceType, output); + backend2.disposeIntermediateTensorInfo(output); + return result; + } + function argReducePacked(backend2, x, reduceType, bestIndicesA = null) { + const inShape = bestIndicesA != null ? bestIndicesA.shape : x.shape; + const inSize = inShape[inShape.length - 1]; + const windowSize = backend_util_exports.computeOptimalWindowSize(inSize); + const program = new ArgMinMaxPackedProgram(inShape, windowSize, reduceType, bestIndicesA == null); + const inputs = bestIndicesA == null ? [x] : [x, bestIndicesA]; + const output = backend2.runWebGLProgram(program, inputs, "int32"); + if (output.shape.length === x.shape.length) { + const result = argReducePacked(backend2, x, reduceType, output); + backend2.disposeIntermediateTensorInfo(output); + return result; + } + return output; + } + function argMinMaxReduce(backend2, x, axis, reduceType) { + const axes = [axis]; + backend_util_exports.assertAxesAreInnerMostDims("arg" + reduceType.charAt(0).toUpperCase() + reduceType.slice(1), axes, x.shape.length); + if (!env().getBool("WEBGL_PACK_REDUCE") || x.shape.length <= 2) { + const intermediateTensorInfos = []; + const xtexData = backend2.texData.get(x.dataId); + const xIsPacked = xtexData !== null && xtexData.isPacked; + let xUnPacked = x; + if (xIsPacked) { + xUnPacked = backend2.unpackTensor(x); + intermediateTensorInfos.push(xUnPacked); + } + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(xUnPacked.shape, axes); + const inSize = util_exports.sizeFromShape(reduceShape); + const a2D = reshape3({ inputs: { x: xUnPacked }, backend: backend2, attrs: { shape: [-1, inSize] } }); + intermediateTensorInfos.push(a2D); + const reduced = argReduce(backend2, a2D, reduceType); + intermediateTensorInfos.push(reduced); + const reshaped = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: outShape } }); + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return reshaped; + } + return argReducePacked(backend2, x, reduceType); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ArgMax.js + function argMax3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis } = attrs; + let axes = util_exports.parseAxisParam(axis, x.shape); + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + const intermediateTensorInfos = []; + if (permutedAxes != null) { + $x = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + intermediateTensorInfos.push($x); + axes = backend_util_exports.getInnerMostAxes(axes.length, $x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("argMax", [axes[0]], $x.shape.length); + const out = argMinMaxReduce(backend2, $x, axes[0], "max"); + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return out; + } + var argMaxConfig2 = { + kernelName: ArgMax, + backendName: "webgl", + kernelFunc: argMax3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ArgMin.js + init_define_BUILD_VERSION(); + function argMin3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis } = attrs; + let axes = util_exports.parseAxisParam(axis, x.shape); + const permutedAxes = backend_util_exports.getAxesPermutation(axes, x.shape.length); + let $x = x; + const intermediateTensorInfos = []; + if (permutedAxes != null) { + $x = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + intermediateTensorInfos.push($x); + axes = backend_util_exports.getInnerMostAxes(axes.length, $x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("argMin", [axes[0]], $x.shape.length); + const out = argMinMaxReduce(backend2, $x, axes[0], "min"); + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return out; + } + var argMinConfig2 = { + kernelName: ArgMin, + backendName: "webgl", + kernelFunc: argMin3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Asin.js + init_define_BUILD_VERSION(); + var ASIN = CHECK_NAN_SNIPPET + ` + if (abs(x) > 1.) { + return NAN; + } + return asin(x); +`; + var asin3 = unaryKernelFunc2({ opSnippet: ASIN }); + var asinConfig2 = { + kernelName: Asin, + backendName: "webgl", + kernelFunc: asin3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Asinh.js + init_define_BUILD_VERSION(); + var ASINH = CHECK_NAN_SNIPPET + `return log(x + sqrt(x * x + 1.0));`; + var asinh3 = unaryKernelFunc2({ opSnippet: ASINH }); + var asinhConfig2 = { + kernelName: Asinh, + backendName: "webgl", + kernelFunc: asinh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atan.js + init_define_BUILD_VERSION(); + var ATAN = CHECK_NAN_SNIPPET + ` + return atan(x); +`; + var atan4 = unaryKernelFunc2({ opSnippet: ATAN }); + var atanConfig2 = { + kernelName: Atan, + backendName: "webgl", + kernelFunc: atan4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atan2.js + init_define_BUILD_VERSION(); + var ATAN2 = CHECK_NAN_SNIPPET_BINARY + ` + return atan(a, b); +`; + var ATAN2_PACKED = ` + vec4 result = atan(a, b); + vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); + ` + CHECK_NAN_SNIPPET_BINARY_PACKED + ` + return result; +`; + var atan23 = binaryKernelFunc2({ opSnippet: ATAN2, packedOpSnippet: ATAN2_PACKED }); + var atan2Config2 = { + kernelName: Atan2, + backendName: "webgl", + kernelFunc: atan23 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atanh.js + init_define_BUILD_VERSION(); + var ATANH = CHECK_NAN_SNIPPET + ` + if ((x < -1.0) || (x > 1.0)) return NAN; +return (log(1.0 + x) - log(1.0 - x)) / 2.0;`; + var atanh3 = unaryKernelFunc2({ opSnippet: ATANH }); + var atanhConfig2 = { + kernelName: Atanh, + backendName: "webgl", + kernelFunc: atanh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/pool_gpu.js + init_define_BUILD_VERSION(); + var Pool2DProgram = class { + constructor(convInfo, poolType, computePositions, flattenPositions = false, includeBatchInIndex = false) { + this.variableNames = ["x"]; + if (poolType === "avg" && computePositions) { + throw new Error("Cannot compute positions for average pool."); + } + const filterWidth = convInfo.filterWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + this.outputShape = convInfo.outShape; + const isAvgPool = poolType === "avg"; + const batchFlattenPositionStr = `((batch * ${convInfo.inHeight} + xR) * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + d`; + const flattenPositionStr = `(xR * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + d`; + let initializationValue = "0.0"; + if (!isAvgPool) { + initializationValue = "-1.0 / 1e-20"; + } + if (computePositions) { + const compareOp2 = ">="; + this.userCode = ` + const ivec2 strides = ivec2(${strideHeight}, ${strideWidth}); + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords[0]; + int d = coords[3]; + + ivec2 xRCCorner = coords.yz * strides - pads; + int xRCorner = xRCCorner.x; + int xCCorner = xRCCorner.y; + + // max/min x(?, ?, d) to get y(yR, yC, d). + // ? = to be determined + float minMaxValue = 0.0; + float minMaxValueFound = 0.0; + int minMaxPosition = 0; + float avgValue = 0.0; + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + int xR = xRCorner + wR; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${effectiveFilterWidth}; + wC += ${dilationWidth}) { + int xC = xCCorner + wC; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + float value = getX(batch, xR, xC, d); + + // If a min / max value has already been found, use it. If not, + // use the current value. + float currMinMaxValue = mix( + value, minMaxValue, minMaxValueFound); + if (value ${compareOp2} currMinMaxValue) { + minMaxValue = value; + minMaxValueFound = 1.0; + minMaxPosition = ${flattenPositions ? includeBatchInIndex ? batchFlattenPositionStr : flattenPositionStr : `wR * ${effectiveFilterWidth} + wC`}; + } + } + } + setOutput(float(minMaxPosition)); + } + `; + return; + } + const compareOp = "max"; + let returnValue = `${poolType}(${poolType}(${poolType}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; + if (poolType === "avg") { + returnValue = `avgValue / count`; + } + const filterWidthNearestVec4 = Math.floor(filterWidth / 4) * 4; + const filterWidthVec4Remainder = filterWidth % 4; + const updateSnippet = ` + if (${isAvgPool}) { + avgValue += dot(values, ones); + } else { + minMaxValue = ${compareOp}(values, minMaxValue); + } + `; + this.userCode = ` + const ivec2 strides = ivec2(${strideHeight}, ${strideWidth}); + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + const float initializationValue = ${initializationValue}; + const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); + + float count = 0.0; + + float getValue(int batch, int xR, int xC, int d) { + if (xC < 0 || xC >= ${convInfo.inWidth}) { + return initializationValue; + } + count += 1.0; + return getX(batch, xR, xC, d); + } + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords[0]; + int d = coords[3]; + + ivec2 xRCCorner = coords.yz * strides - pads; + int xRCorner = xRCCorner.x; + int xCCorner = xRCCorner.y; + + // max/min x(?, ?, d) to get y(yR, yC, d). + // ? = to be determined + vec4 minMaxValue = vec4(${initializationValue}); + float avgValue = 0.0; + count = 0.0; + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + int xR = xRCorner + wR; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${filterWidthNearestVec4}; wC += 4) { + int xC = xCCorner + wC * ${dilationWidth}; + + vec4 values = vec4( + getValue(batch, xR, xC, d), + getValue(batch, xR, xC + ${dilationWidth}, d), + getValue(batch, xR, xC + 2 * ${dilationWidth}, d), + getValue(batch, xR, xC + 3 * ${dilationWidth}, d) + ); + + ${updateSnippet} + } + + int xC = xCCorner + ${filterWidthNearestVec4}; + if (${filterWidthVec4Remainder === 1}) { + vec4 values = vec4( + getValue(batch, xR, xC, d), + initializationValue, + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${filterWidthVec4Remainder === 2}) { + vec4 values = vec4( + getValue(batch, xR, xC, d), + getValue(batch, xR, xC + ${dilationWidth}, d), + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${filterWidthVec4Remainder === 3}) { + vec4 values = vec4( + getValue(batch, xR, xC, d), + getValue(batch, xR, xC + ${dilationWidth}, d), + getValue(batch, xR, xC + 2 * ${dilationWidth}, d), + initializationValue + ); + + ${updateSnippet} + } + } + setOutput(${returnValue}); + } + `; + } + }; + var Pool3DProgram = class { + constructor(convInfo, poolType, computePositions, flattenPositions = false, includeBatchInIndex = false) { + this.variableNames = ["x"]; + if (poolType === "avg" && computePositions) { + throw new Error("Cannot compute positions for average pool."); + } + const filterWidth = convInfo.filterWidth; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = convInfo.padInfo.front; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + this.outputShape = convInfo.outShape; + const isAvgPool = poolType === "avg"; + let initializationValue = "0.0"; + if (!isAvgPool) { + initializationValue = "-1.0 / 1e-20"; + } + if (computePositions) { + const compareOp2 = ">="; + this.userCode = ` + const ivec3 strides = + ivec3(${strideDepth}, ${strideHeight}, ${strideWidth}); + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int ch = coords.u; + + ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; + int xDCorner = xCorner.x; + int xRCorner = xCorner.y; + int xCCorner = xCorner.z; + + // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch). + // ? = to be determined + float minMaxValue = 0.0; + float minMaxValueFound = 0.0; + int minMaxPosition = 0; + + for (int wD = 0; wD < ${effectiveFilterDepth}; + wD += ${dilationDepth}) { + int xD = xDCorner + wD; + + if (xD < 0 || xD >= ${convInfo.inDepth}) { + continue; + } + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + int xR = xRCorner + wR; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${effectiveFilterWidth}; + wC += ${dilationWidth}) { + int xC = xCCorner + wC; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + float value = getX(batch, xD, xR, xC, ch); + + // If a min / max value has already been found, use it. If not, + // use the current value. + float currMinMaxValue = mix( + value, minMaxValue, minMaxValueFound); + if (value ${compareOp2} currMinMaxValue) { + minMaxValue = value; + minMaxValueFound = 1.0; + minMaxPosition = ${flattenPositions ? includeBatchInIndex ? `(((batch * ${convInfo.inDepth} + xD) * ${convInfo.inHeight} + xR) * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + ch` : `((xD * ${convInfo.inHeight} + xR) * ${convInfo.inWidth} + xC) * ${convInfo.inChannels} + ch` : `wD * ${effectiveFilterHeight} * ${effectiveFilterWidth} + + wR * ${effectiveFilterWidth} + wC`}; + } + } + } + } + setOutput(float(minMaxPosition)); + } + `; + return; + } + const compareOp = "max"; + let returnValue = `${poolType}(${poolType}(${poolType}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; + if (poolType === "avg") { + returnValue = `avgValue / count`; + } + const filterWidthNearestVec4 = Math.floor(filterWidth / 4) * 4; + const filterWidthVec4Remainder = filterWidth % 4; + const updateSnippet = ` + if (${isAvgPool}) { + avgValue += dot(values, ones); + } else { + minMaxValue = ${compareOp}(values, minMaxValue); + } + `; + this.userCode = ` + const ivec3 strides = + ivec3(${strideDepth}, ${strideHeight}, ${strideWidth}); + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + const float initializationValue = ${initializationValue}; + const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); + + float count = 0.0; + + float getValue(int batch, int xD, int xR, int xC, int ch) { + if (xC < 0 || xC >= ${convInfo.inWidth}) { + return initializationValue; + } + count += 1.0; + return getX(batch, xD, xR, xC, ch); + } + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int ch = coords.u; + + ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; + int xDCorner = xCorner.x; + int xRCorner = xCorner.y; + int xCCorner = xCorner.z; + + // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch). + // ? = to be determined + vec4 minMaxValue = vec4(${initializationValue}); + float avgValue = 0.0; + count = 0.0; + + for (int wD = 0; wD < ${effectiveFilterDepth}; + wD += ${dilationDepth}) { + int xD = xDCorner + wD; + + if (xD < 0 || xD >= ${convInfo.inDepth}) { + continue; + } + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + int xR = xRCorner + wR; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${filterWidthNearestVec4}; wC += 4) { + int xC = xCCorner + wC * ${dilationWidth}; + + vec4 values = vec4( + getValue(batch, xD, xR, xC, ch), + getValue(batch, xD, xR, xC + ${dilationWidth}, ch), + getValue(batch, xD, xR, xC + 2 * ${dilationWidth}, ch), + getValue(batch, xD, xR, xC + 3 * ${dilationWidth}, ch) + ); + + ${updateSnippet} + } + + int xC = xCCorner + ${filterWidthNearestVec4}; + if (${filterWidthVec4Remainder === 1}) { + vec4 values = vec4( + getValue(batch, xD, xR, xC, ch), + initializationValue, + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${filterWidthVec4Remainder === 2}) { + vec4 values = vec4( + getValue(batch, xD, xR, xC, ch), + getValue(batch, xD, xR, xC + ${dilationWidth}, ch), + initializationValue, + initializationValue + ); + + ${updateSnippet} + } else if (${filterWidthVec4Remainder === 3}) { + vec4 values = vec4( + getValue(batch, xD, xR, xC, ch), + getValue(batch, xD, xR, xC + ${dilationWidth}, ch), + getValue(batch, xD, xR, xC + 2 * ${dilationWidth}, ch), + initializationValue + ); + + ${updateSnippet} + } + } + setOutput(${returnValue}); + } + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool.js + function avgPool3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + assertNotComplex2(x, "avgPool"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = 1; + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 && util_exports.arraysEqual(convInfo.inShape, convInfo.outShape)) { + return identity2({ inputs: { x }, backend: backend2 }); + } + const avgPoolProgram = new Pool2DProgram(convInfo, "avg", false); + return backend2.runWebGLProgram(avgPoolProgram, [x], "float32"); + } + var avgPoolConfig2 = { + kernelName: AvgPool, + backendName: "webgl", + kernelFunc: avgPool3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool3D.js + init_define_BUILD_VERSION(); + function avgPool3D2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { filterSize, strides, pad: pad3, dimRoundingMode, dataFormat } = attrs; + const dilations = [1, 1, 1]; + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode, dataFormat); + const avgPoolProgram = new Pool3DProgram(convInfo, "avg", false); + return backend2.runWebGLProgram(avgPoolProgram, [x], "float32"); + } + var avgPool3DConfig2 = { + kernelName: AvgPool3D, + backendName: "webgl", + kernelFunc: avgPool3D2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool3DGrad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/avg_pool_backprop_gpu.js + init_define_BUILD_VERSION(); + var AvgPool2DBackpropProgram = class { + constructor(convInfo) { + this.variableNames = ["dy"]; + this.outputShape = convInfo.inShape; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const avgMultiplier = 1 / (filterHeight * filterWidth); + this.userCode = ` + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + const float avgMultiplier = float(${avgMultiplier}); + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + + ivec2 dyRCCorner = coords.yz - pads; + int dyRCorner = dyRCCorner.x; + int dyCCorner = dyRCCorner.y; + + // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + for (int wC = 0; wC < ${effectiveFilterWidth}; + wC+= ${dilationWidth}) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + float dyValue = getDy(b, idyR, idyC, d); + + dotProd += dyValue * avgMultiplier; + } + } + setOutput(dotProd); + } + `; + } + }; + var AvgPool3DBackpropProgram = class { + constructor(convInfo) { + this.variableNames = ["dy"]; + this.outputShape = convInfo.inShape; + const filterDepth = convInfo.filterDepth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const avgMultiplier = 1 / (filterDepth * filterHeight * filterWidth); + this.userCode = ` + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + const float avgMultiplier = float(${avgMultiplier}); + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int ch = coords.u; + + ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; + int dyDCorner = dyCorner.x; + int dyRCorner = dyCorner.y; + int dyCCorner = dyCorner.z; + + // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get + // dx(xD, xR, xC, ch). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + + for (int wD = 0; wD < ${effectiveFilterDepth}; + wD += ${dilationDepth}) { + float dyD = float(dyDCorner + wD) / ${strideDepth}.0; + + if (dyD < 0.0 || dyD >= ${convInfo.outDepth}.0 || fract(dyD) > 0.0) { + continue; + } + int idyD = int(dyD); + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || + fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + for (int wC = 0; wC < ${effectiveFilterWidth}; + wC += ${dilationWidth}) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + float dyValue = getDy(batch, idyD, idyR, idyC, ch); + + dotProd += dyValue * avgMultiplier; + } + } + } + setOutput(dotProd); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool3DGrad.js + function avgPool3DGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const x = input2; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = [1, 1, 1]; + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + const avgPoolBackpropProgram = new AvgPool3DBackpropProgram(convInfo); + return backend2.runWebGLProgram(avgPoolBackpropProgram, [dy], x.dtype); + } + var avgPool3DGradConfig3 = { + kernelName: AvgPool3DGrad, + backendName: "webgl", + kernelFunc: avgPool3DGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPoolGrad.js + init_define_BUILD_VERSION(); + function avgPoolGrad3(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const x = input2; + assertNotComplex2([dy, input2], "avgPoolGrad"); + const { filterSize, strides, pad: pad3 } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3); + const avgPoolBackpropProgram = new AvgPool2DBackpropProgram(convInfo); + return backend2.runWebGLProgram(avgPoolBackpropProgram, [dy], x.dtype); + } + var avgPoolGradConfig3 = { + kernelName: AvgPoolGrad, + backendName: "webgl", + kernelFunc: avgPoolGrad3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchMatMul.js + init_define_BUILD_VERSION(); + function batchMatMul2(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b } = inputs; + const { transposeA, transposeB } = attrs; + return batchMatMulImpl({ a, b, transposeA, transposeB, backend: backend2 }); + } + var batchMatMulConfig2 = { + kernelName: BatchMatMul, + backendName: "webgl", + kernelFunc: batchMatMul2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchNorm.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/batchnorm_gpu.js + init_define_BUILD_VERSION(); + var BatchNormProgram = class { + constructor(xShape, meanShape, varianceShape, offsetShape, scaleShape, varianceEpsilon) { + this.outputShape = []; + this.variableNames = ["x", "mean", "variance"]; + backend_util_exports.assertAndGetBroadcastShape(xShape, meanShape); + backend_util_exports.assertAndGetBroadcastShape(xShape, varianceShape); + let offsetSnippet = "0.0"; + if (offsetShape != null) { + backend_util_exports.assertAndGetBroadcastShape(xShape, offsetShape); + this.variableNames.push("offset"); + offsetSnippet = "getOffsetAtOutCoords()"; + } + let scaleSnippet = "1.0"; + if (scaleShape != null) { + backend_util_exports.assertAndGetBroadcastShape(xShape, scaleShape); + this.variableNames.push("scale"); + scaleSnippet = "getScaleAtOutCoords()"; + } + this.outputShape = xShape; + this.userCode = ` + void main() { + float x = getXAtOutCoords(); + float mean = getMeanAtOutCoords(); + float variance = getVarianceAtOutCoords(); + float offset = ${offsetSnippet}; + float scale = ${scaleSnippet}; + float inv = scale * inversesqrt(variance + float(${varianceEpsilon})); + setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/batchnorm_packed_gpu.js + init_define_BUILD_VERSION(); + var BatchNormPackedProgram = class { + constructor(xShape, meanShape, varianceShape, offsetShape, scaleShape, varianceEpsilon) { + this.packedInputs = true; + this.packedOutput = true; + this.variableNames = ["x", "mean", "variance"]; + backend_util_exports.assertAndGetBroadcastShape(xShape, meanShape); + backend_util_exports.assertAndGetBroadcastShape(xShape, varianceShape); + let offsetSnippet = "vec4(0.0)"; + if (offsetShape != null) { + backend_util_exports.assertAndGetBroadcastShape(xShape, offsetShape); + this.variableNames.push("offset"); + offsetSnippet = "getOffsetAtOutCoords()"; + } + let scaleSnippet = "vec4(1.0)"; + if (scaleShape != null) { + backend_util_exports.assertAndGetBroadcastShape(xShape, scaleShape); + this.variableNames.push("scale"); + scaleSnippet = "getScaleAtOutCoords()"; + } + this.outputShape = xShape; + this.userCode = ` + void main() { + vec4 offset = ${offsetSnippet}; + vec4 scale = ${scaleSnippet}; + + vec4 x = getXAtOutCoords(); + vec4 mean = getMeanAtOutCoords(); + vec4 variance = getVarianceAtOutCoords(); + + vec4 inv = scale * inversesqrt(variance + vec4(${varianceEpsilon})); + + setOutput((x - mean) * inv + offset); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchNorm.js + var batchNorm3 = ({ inputs, backend: backend2, attrs }) => { + const { x, mean: mean4, variance, offset, scale: scale2 } = inputs; + util_exports.assert(mean4.shape.length === variance.shape.length, () => "Batch normalization gradient requires mean and variance to have equal ranks."); + util_exports.assert(offset == null || mean4.shape.length === offset.shape.length, () => "Batch normalization gradient requires mean and offset to have equal ranks."); + util_exports.assert(scale2 == null || mean4.shape.length === scale2.shape.length, () => "Batch normalization gradient requires mean and scale to have equal ranks."); + let { varianceEpsilon } = attrs; + if (varianceEpsilon == null) { + varianceEpsilon = 1e-3; + } + const finalInputs = [x, mean4, variance]; + let offsetShape = null; + if (offset != null) { + offsetShape = offset.shape; + finalInputs.push(offset); + } + let scaleShape = null; + if (scale2 != null) { + scaleShape = scale2.shape; + finalInputs.push(scale2); + } + const program = env().getBool("WEBGL_PACK_NORMALIZATION") ? new BatchNormPackedProgram(x.shape, mean4.shape, variance.shape, offsetShape, scaleShape, varianceEpsilon) : new BatchNormProgram(x.shape, mean4.shape, variance.shape, offsetShape, scaleShape, varianceEpsilon); + const output = backend2.runWebGLProgram(program, finalInputs, finalInputs[0].dtype); + return output; + }; + var batchNormConfig2 = { + kernelName: FusedBatchNorm, + backendName: "webgl", + kernelFunc: batchNorm3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchToSpaceND.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Slice.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/slice_gpu.js + init_define_BUILD_VERSION(); + var SliceProgram = class { + constructor(destSize) { + this.variableNames = ["source"]; + this.outputShape = destSize; + this.rank = destSize.length; + const dtype = getCoordsDataType(this.rank); + this.customUniforms = [{ name: "start", arrayIndex: this.rank, type: "int" }]; + const sourceCoords = getCoords(this.rank); + let body; + const coordSum = destSize.map((_, i) => { + return `sourceLoc.${coords[i]} = start[${i}] + coords.${coords[i]};`; + }); + body = ` + ${dtype} sourceLoc; + ${dtype} coords = getOutputCoords(); + ${coordSum.join("\n")} + `; + this.userCode = ` + void main() { + ${body} + setOutput(getSource(${sourceCoords})); + } + `; + } + }; + var coords = ["x", "y", "z", "w", "u", "v"]; + function getCoords(rank) { + if (rank === 1) { + return "sourceLoc"; + } else if (rank <= 6) { + return coords.slice(0, rank).map((x) => "sourceLoc." + x).join(","); + } else { + throw Error(`Slicing for rank ${rank} is not yet supported`); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/slice_packed_gpu.js + init_define_BUILD_VERSION(); + var SlicePackedProgram = class { + constructor(destSize) { + this.variableNames = ["source"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = destSize; + this.rank = destSize.length; + this.customUniforms = [{ name: "start", arrayIndex: this.rank, type: "int" }]; + const dtype = getCoordsDataType(this.rank); + const coords2 = getChannels("coords", this.rank); + const sourceLoc = getChannels("sourceLoc", this.rank); + const innerDims = this.rank === 1 ? "sourceLoc" : `vec2(${sourceLoc.slice(-2).join()})`; + const getChannel = `getChannel(getSource(${sourceLoc.join()}), ${innerDims})`; + const upperRow = ` + result.x = ${getChannel}; + if (++${coords2[this.rank - 1]} < ${destSize[this.rank - 1]}) { + ++${sourceLoc[this.rank - 1]}; + result.y = ${getChannel}; + --${sourceLoc[this.rank - 1]}; + } + `; + const lowerRow = this.rank === 1 ? "" : ` + --${coords2[this.rank - 1]}; + if (++${coords2[this.rank - 2]} < ${destSize[this.rank - 2]}) { + ++${sourceLoc[this.rank - 2]}; + result.z = ${getChannel}; + if (++${coords2[this.rank - 1]} < ${destSize[this.rank - 1]}) { + ++${sourceLoc[this.rank - 1]}; + result.w = ${getChannel}; + } + } + `; + const sourceLocSetup = this.rank <= 4 ? `sourceLoc = coords + + ${dtype}(${destSize.map((_, i) => `start[${i}]`).join()});` : destSize.map((_, i) => `${sourceLoc[i]} = ${coords2[i]} + start[${i}];`).join("\n"); + this.userCode = ` + void main() { + ${dtype} coords = getOutputCoords(); + ${dtype} sourceLoc; + ${sourceLocSetup} + vec4 result = vec4(0.); + ${upperRow} + ${lowerRow} + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Slice.js + function shallowSlice(x, begin, size, backend2) { + const xTexData = backend2.texData.get(x.dataId); + const t = backend2.makeTensorInfo(size, x.dtype); + const newTexData = backend2.texData.get(t.dataId); + Object.assign(newTexData, xTexData); + newTexData.refCount = 1; + newTexData.shape = size; + newTexData.dtype = x.dtype; + let flatOffset = slice_util_exports.computeFlatOffset(begin, util_exports.computeStrides(x.shape)); + if (xTexData.slice) { + flatOffset += xTexData.slice.flatOffset; + } + newTexData.slice = { + flatOffset, + origDataId: xTexData.slice && xTexData.slice.origDataId || x.dataId + }; + const refCount = backend2.dataRefCount.get(newTexData.slice.origDataId) || 1; + backend2.dataRefCount.set(newTexData.slice.origDataId, refCount + 1); + return t; + } + function slice3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { begin, size } = attrs; + const [$begin, $size] = slice_util_exports.parseSliceParams(x, begin, size); + slice_util_exports.assertParamsValid(x, $begin, $size); + if (util_exports.sizeFromShape($size) === 0) { + return backend2.makeTensorInfo($size, x.dtype, []); + } + if (backend2.shouldExecuteOnCPU([x]) || x.dtype === "string") { + const xTexData = backend2.texData.get(x.dataId); + const outValues = sliceImplCPU(xTexData.values, $begin, $size, x.shape, x.dtype); + return backend2.makeTensorInfo($size, x.dtype, outValues); + } + const { isPacked } = backend2.texData.get(x.dataId); + const isContinous = slice_util_exports.isSliceContinous(x.shape, $begin, $size); + if (isPacked || !isContinous) { + const program = env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new SlicePackedProgram($size) : new SliceProgram($size); + const customValues = [$begin]; + return backend2.runWebGLProgram(program, [x], x.dtype, customValues); + } + backend2.uploadToGPU(x.dataId); + return shallowSlice(x, $begin, $size, backend2); + } + var sliceConfig2 = { + kernelName: Slice, + backendName: "webgl", + kernelFunc: slice3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchToSpaceND.js + var batchToSpaceND3 = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, crops } = attrs; + util_exports.assert(x.shape.length <= 4, () => "batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"); + const prod5 = blockShape.reduce((a, b) => a * b); + const reshaped = backend_util_exports.getReshaped(x.shape, blockShape, prod5); + const permuted = backend_util_exports.getPermuted(reshaped.length, blockShape.length); + const reshapedPermuted = backend_util_exports.getReshapedPermuted(x.shape, blockShape, prod5); + const sliceBeginCoords = backend_util_exports.getSliceBeginCoords(crops, blockShape.length); + const sliceSize = backend_util_exports.getSliceSize(reshapedPermuted, crops, blockShape.length); + const toDispose = []; + const reshapedIntermediate = reshape3({ inputs: { x }, backend: backend2, attrs: { shape: reshaped } }); + const transposedIntermediate = transpose3({ inputs: { x: reshapedIntermediate }, backend: backend2, attrs: { perm: permuted } }); + const reshapedIntermediate2 = reshape3({ + inputs: { x: transposedIntermediate }, + backend: backend2, + attrs: { shape: reshapedPermuted } + }); + const sliced = slice3({ + inputs: { x: reshapedIntermediate2 }, + backend: backend2, + attrs: { begin: sliceBeginCoords, size: sliceSize } + }); + toDispose.push(reshapedIntermediate); + toDispose.push(transposedIntermediate); + toDispose.push(reshapedIntermediate2); + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return sliced; + }; + var batchToSpaceNDConfig2 = { + kernelName: BatchToSpaceND, + backendName: "webgl", + kernelFunc: batchToSpaceND3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Bincount.js + init_define_BUILD_VERSION(); + function bincount3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, weights } = inputs; + const { size } = attrs; + const xVals = backend2.readSync(x.dataId); + const weightsVals = backend2.readSync(weights.dataId); + const outVals = bincountImplCPU(xVals, weightsVals, weights.dtype, weights.shape, size); + return backend2.makeTensorInfo([size], weights.dtype, outVals); + } + var bincountConfig2 = { + kernelName: Bincount, + backendName: "webgl", + kernelFunc: bincount3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BroadcastArgs.js + init_define_BUILD_VERSION(); + function broadcastArgs2(args) { + const { inputs, backend: backend2 } = args; + const { s0, s1 } = inputs; + const s0Vals = backend2.readSync(s0.dataId); + const s1Vals = backend2.readSync(s1.dataId); + const broadcastShape = backend_util_exports.assertAndGetBroadcastShape(Array.from(s0Vals), Array.from(s1Vals)); + return backend2.makeTensorInfo([broadcastShape.length], "int32", Int32Array.from(broadcastShape)); + } + var broadcastArgsConfig2 = { + kernelName: BroadcastArgs, + backendName: "webgl", + kernelFunc: broadcastArgs2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cast.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NotEqual.js + init_define_BUILD_VERSION(); + var NOT_EQUAL = `return float(a != b);`; + var notEqual3 = binaryKernelFunc2({ opSnippet: NOT_EQUAL, cpuKernelImpl: notEqualImplCPU, dtype: "bool" }); + var notEqualConfig2 = { + kernelName: NotEqual, + backendName: "webgl", + kernelFunc: notEqual3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Real.js + init_define_BUILD_VERSION(); + function real3(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const inputData = backend2.texData.get(input2.dataId); + return identity2({ inputs: { x: inputData.complexTensorInfos.real }, backend: backend2 }); + } + var realConfig2 = { + kernelName: Real, + backendName: "webgl", + kernelFunc: real3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/int.js + init_define_BUILD_VERSION(); + var TO_INT = `return float(int(x));`; + function int(input2, backend2) { + const program = new UnaryOpProgram(input2.shape, TO_INT); + const output = backend2.runWebGLProgram(program, [input2], "int32"); + return { dataId: output.dataId, shape: output.shape, dtype: output.dtype }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cast.js + function cast4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { dtype } = attrs; + if (dtype === "complex64") { + if (x.dtype === "complex64") { + return identity2({ inputs: { x }, backend: backend2 }); + } + const zerosTensor = zeros(x.shape); + const floatX = cast4({ inputs: { x }, backend: backend2, attrs: { dtype: "float32" } }); + const result = complex3({ inputs: { real: floatX, imag: zerosTensor }, backend: backend2 }); + zerosTensor.dispose(); + backend2.disposeIntermediateTensorInfo(floatX); + return result; + } + if (x.dtype === "complex64") { + const realPart = real3({ inputs: { input: x }, backend: backend2 }); + const result = cast4({ inputs: { x: realPart }, backend: backend2, attrs: { dtype } }); + backend2.disposeIntermediateTensorInfo(realPart); + return result; + } + if (!util_exports.hasEncodingLoss(x.dtype, dtype)) { + const result = identity2({ inputs: { x }, backend: backend2 }); + return { dataId: result.dataId, shape: result.shape, dtype }; + } + if (dtype === "int32") { + return int(x, backend2); + } + if (dtype === "bool") { + const zerosTensorInfo = backend2.makeTensorInfo([], "bool", util_exports.getTypedArrayFromDType("bool", 1)); + const binaryInputs = { a: x, b: zerosTensorInfo }; + const result = notEqual3({ inputs: binaryInputs, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(zerosTensorInfo); + return result; + } + throw new Error(`Error in Cast: failed to cast ${x.dtype} to ${dtype}`); + } + var castConfig2 = { + kernelName: Cast, + backendName: "webgl", + kernelFunc: cast4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Ceil.js + init_define_BUILD_VERSION(); + var CEIL = `return ceil(x);`; + var ceil3 = unaryKernelFunc2({ opSnippet: CEIL, packedOpSnippet: CEIL, cpuKernelImpl: ceilImplCPU }); + var ceilConfig2 = { + kernelName: Ceil, + backendName: "webgl", + kernelFunc: ceil3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ClipByValue.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/clip_gpu.js + init_define_BUILD_VERSION(); + var ClipProgram = class { + constructor(aShape) { + this.variableNames = ["A"]; + this.customUniforms = [ + { name: "minVal", type: "float" }, + { name: "maxVal", type: "float" } + ]; + this.outputShape = aShape; + this.userCode = ` + + void main() { + float value = getAAtOutCoords(); + if (isnan(value)) { + setOutput(value); + return; + } + + setOutput(clamp(value, minVal, maxVal)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/clip_packed_gpu.js + init_define_BUILD_VERSION(); + var ClipPackedProgram = class { + constructor(aShape) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.customUniforms = [ + { name: "minVal", type: "float" }, + { name: "maxVal", type: "float" } + ]; + this.outputShape = aShape; + this.userCode = ` + void main() { + vec4 value = getAAtOutCoords(); + + if (any(isnan(value))) { + setOutput(value); + return; + } + + setOutput(clamp(value, vec4(minVal), vec4(maxVal))); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ClipByValue.js + function clipByValue3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { clipValueMin, clipValueMax } = attrs; + let program; + if (env().getBool("WEBGL_PACK_CLIP")) { + program = new ClipPackedProgram(x.shape); + } else { + program = new ClipProgram(x.shape); + } + const customValues = [[clipValueMin], [clipValueMax]]; + return backend2.runWebGLProgram(program, [x], x.dtype, customValues); + } + var clipByValueConfig2 = { + kernelName: ClipByValue, + backendName: "webgl", + kernelFunc: clipByValue3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ComplexAbs.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/complex_abs_gpu.js + init_define_BUILD_VERSION(); + var ComplexAbsProgram = class { + constructor(shape) { + this.variableNames = ["real", "imag"]; + this.outputShape = shape; + this.userCode = ` + void main() { + float re = abs(getRealAtOutCoords()); + float im = abs(getImagAtOutCoords()); + float mx = max(re, im); + + // sadly the length function in glsl is not underflow-safe + // (at least not on Intel GPUs). So the safe solution is + // to ensure underflow-safety in all cases. + setOutput( + mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) + ); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ComplexAbs.js + function makeComplexComponentTensorInfo(complexTensor, complexPart) { + return { + dataId: complexPart.dataId, + dtype: complexPart.dtype, + shape: complexTensor.shape + }; + } + function complexAbs2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + const xData = backend2.texData.get(x.dataId); + const program = new ComplexAbsProgram(x.shape); + const programInputs = [ + makeComplexComponentTensorInfo(x, xData.complexTensorInfos.real), + makeComplexComponentTensorInfo(x, xData.complexTensorInfos.imag) + ]; + return backend2.runWebGLProgram(program, programInputs, programInputs[0].dtype); + } + var complexAbsConfig2 = { + kernelName: ComplexAbs, + backendName: "webgl", + kernelFunc: complexAbs2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/concat_gpu.js + init_define_BUILD_VERSION(); + var ConcatProgram = class { + constructor(shapes) { + this.outputShape = []; + this.outputShape = backend_util_exports.computeOutShape(shapes, 1); + this.variableNames = shapes.map((_, i) => `T${i}`); + const offsets = new Array(shapes.length - 1); + offsets[0] = shapes[0][1]; + for (let i = 1; i < offsets.length; i++) { + offsets[i] = offsets[i - 1] + shapes[i][1]; + } + const snippets = [`if (yC < ${offsets[0]}) setOutput(getT0(yR, yC));`]; + for (let i = 1; i < offsets.length; i++) { + const shift = offsets[i - 1]; + snippets.push(`else if (yC < ${offsets[i]}) setOutput(getT${i}(yR, yC-${shift}));`); + } + const lastIndex = offsets.length; + const lastShift = offsets[offsets.length - 1]; + snippets.push(`else setOutput(getT${lastIndex}(yR, yC-${lastShift}));`); + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + int yR = coords.x; + int yC = coords.y; + + ${snippets.join("\n ")} + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/concat_packed_gpu.js + init_define_BUILD_VERSION(); + var ConcatPackedProgram = class { + constructor(shapes, axis) { + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = []; + this.outputShape = backend_util_exports.computeOutShape(shapes, axis); + const shape = this.outputShape; + const rank = shape.length; + const dtype = getCoordsDataType(rank); + const coords2 = getChannels("coords", rank); + const channels = ["x", "y", "z", "w", "u", "v"].slice(0, rank); + this.variableNames = shapes.map((_, i) => `T${i}`); + const offsets = new Array(shapes.length - 1); + offsets[0] = shapes[0][axis]; + for (let i = 1; i < offsets.length; i++) { + offsets[i] = offsets[i - 1] + shapes[i][axis]; + } + const channel = channels[axis]; + const lastChannels = channels.slice(-2); + const allChannels = channels.join(); + let getValueSnippet = `if (${channel} < ${offsets[0]}) { + return getChannel( + getT0(${allChannels}), vec2(${lastChannels.join()})); + }`; + for (let i = 1; i < offsets.length; i++) { + const shift2 = offsets[i - 1]; + getValueSnippet += ` + if (${channel} < ${offsets[i]} && ${channel} >= ${offsets[i - 1]}) { + return getChannel( + getT${i}(${shiftedChannels(channels, channel, shift2)}), + vec2(${shiftedChannels(lastChannels, channel, shift2)})); + }`; + } + const lastIndex = offsets.length; + const shift = offsets[offsets.length - 1]; + getValueSnippet += ` + return getChannel( + getT${lastIndex}(${shiftedChannels(channels, channel, shift)}), + vec2(${shiftedChannels(lastChannels, channel, shift)}));`; + this.userCode = ` + float getValue(${channels.map((x) => "int " + x)}) { + ${getValueSnippet} + } + + void main() { + ${dtype} coords = getOutputCoords(); + vec4 result = vec4(getValue(${coords2}), 0., 0., 0.); + + ${coords2[rank - 1]} = ${coords2[rank - 1]} + 1; + if (${coords2[rank - 1]} < ${shape[rank - 1]}) { + result.g = getValue(${coords2}); + } + + ${coords2[rank - 2]} = ${coords2[rank - 2]} + 1; + if (${coords2[rank - 2]} < ${shape[rank - 2]}) { + result.a = getValue(${coords2}); + } + + ${coords2[rank - 1]} = ${coords2[rank - 1]} - 1; + if (${coords2[rank - 2]} < ${shape[rank - 2]} && + ${coords2[rank - 1]} < ${shape[rank - 1]}) { + result.b = getValue(${coords2}); + } + setOutput(result); + } + `; + } + }; + function shiftedChannels(channels, channel, shift) { + const channelIdx = channels.indexOf(channel); + const res = channels.map((c, idx) => { + if (idx === channelIdx) { + return `${c} - ${shift}`; + } else { + return c; + } + }); + return res.join(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Imag.js + init_define_BUILD_VERSION(); + function imag3(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + const inputData = backend2.texData.get(input2.dataId); + return identity2({ inputs: { x: inputData.complexTensorInfos.imag }, backend: backend2 }); + } + var imagConfig2 = { + kernelName: Imag, + backendName: "webgl", + kernelFunc: imag3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat_impl.js + function concatImpl2(inputs, axis, backend2) { + const dtype = inputs[0].dtype; + if (dtype === "complex64") { + const reals = inputs.map((t) => real3({ inputs: { input: t }, backend: backend2 })); + const imags = inputs.map((t) => imag3({ inputs: { input: t }, backend: backend2 })); + const realConcated = concatImpl2(reals, axis, backend2); + const imagConcated = concatImpl2(imags, axis, backend2); + const result2 = complex3({ inputs: { real: realConcated, imag: imagConcated }, backend: backend2 }); + reals.forEach((r) => backend2.disposeIntermediateTensorInfo(r)); + imags.forEach((i) => backend2.disposeIntermediateTensorInfo(i)); + backend2.disposeIntermediateTensorInfo(realConcated); + backend2.disposeIntermediateTensorInfo(imagConcated); + return result2; + } + let runOnCpu = backend2.shouldExecuteOnCPU(inputs); + if (dtype === "string") { + runOnCpu = true; + } + if (runOnCpu) { + const tensors2D2 = inputs.map((t) => { + const innerSize = util_exports.sizeFromShape(t.shape.slice(axis)); + const shape = [-1, innerSize]; + return reshape3({ inputs: { x: t }, backend: backend2, attrs: { shape } }); + }); + const inputsValShapes = tensors2D2.map((t) => { + return { vals: backend2.readSync(t.dataId), shape: t.shape }; + }); + const outShape2 = backend_util_exports.computeOutShape(tensors2D2.map((t) => t.shape), 1); + const simplyConcat = tensors2D2[0].shape[0] === 1; + const outVals = concatImplCPU(inputsValShapes, outShape2, dtype, simplyConcat); + const finalOutShape = backend_util_exports.computeOutShape(inputs.map((t) => t.shape), axis); + const outInfo = backend2.makeTensorInfo(finalOutShape, dtype, outVals); + tensors2D2.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return outInfo; + } + const maxTexturesInShader = env().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER"); + if (inputs.length > maxTexturesInShader) { + const reducedInputs = []; + for (let i = 0; i < inputs.length; i += maxTexturesInShader) { + const subArray = inputs.slice(i, i + maxTexturesInShader); + reducedInputs.push(concatImpl2(subArray, axis, backend2)); + } + const result2 = concatImpl2(reducedInputs, axis, backend2); + for (const i of reducedInputs) { + backend2.disposeIntermediateTensorInfo(i); + } + return result2; + } + if (env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") && inputs[0].shape.length > 1) { + const program2 = new ConcatPackedProgram(inputs.map((t) => t.shape), axis); + return backend2.runWebGLProgram(program2, inputs, dtype); + } + const { tensors2D, outShape } = computeTensors2D(inputs, axis, backend2); + const program = new ConcatProgram(tensors2D.map((t) => t.shape)); + const result = backend2.runWebGLProgram(program, tensors2D, dtype); + tensors2D.forEach((r) => backend2.disposeIntermediateTensorInfo(r)); + const reshapedResult = reshape3({ inputs: { x: result }, attrs: { shape: outShape }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(result); + return reshapedResult; + } + function computeTensors2D(inputs, axis, backend2) { + const outShape = backend_util_exports.computeOutShape(inputs.map((t) => t.shape), axis); + const tensors2D = inputs.map((x) => reshape3({ + inputs: { x }, + attrs: { shape: [-1, util_exports.sizeFromShape(x.shape.slice(axis))] }, + backend: backend2 + })); + return { tensors2D, outShape }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat.js + function concat3(args) { + const { inputs, backend: backend2, attrs } = args; + const { axis } = attrs; + const $axis = util_exports.parseAxisParam(axis, inputs[0].shape)[0]; + const outShape = backend_util_exports.computeOutShape(inputs.map((t) => t.shape), $axis); + if (util_exports.sizeFromShape(outShape) === 0) { + return backend2.makeTensorInfo(outShape, inputs[0].dtype, []); + } + const $inputs = inputs.filter((t) => util_exports.sizeFromShape(t.shape) > 0); + if ($inputs.length === 1) { + return identity2({ inputs: { x: $inputs[0] }, backend: backend2 }); + } + const shapes = $inputs.map((t) => t.shape); + backend_util_exports.assertParamsConsistent(shapes, $axis); + return concatImpl2($inputs, $axis, backend2); + } + var concatConfig2 = { + kernelName: Concat, + backendName: "webgl", + kernelFunc: concat3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_gpu.js + init_define_BUILD_VERSION(); + var Conv2DProgram = class { + constructor(convInfo, addBias = false, activation = null, hasPreluActivationWeights = false, hasLeakyreluAlpha = false) { + this.variableNames = ["x", "W"]; + this.outputShape = convInfo.outShape; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const inputDepthNearestVec4 = Math.floor(convInfo.inChannels / 4) * 4; + const inputDepthVec4Remainder = convInfo.inChannels % 4; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const rowDim = isChannelsLast ? 1 : 2; + const colDim = isChannelsLast ? 2 : 3; + const channelDim = isChannelsLast ? 3 : 1; + let activationSnippet = "", applyActivationSnippet = ""; + if (activation) { + if (hasPreluActivationWeights) { + activationSnippet = `float activation(float a) { + float b = getPreluActivationWeightsAtOutCoords(); + ${activation} + }`; + } else if (hasLeakyreluAlpha) { + activationSnippet = `float activation(float a) { + float b = getLeakyreluAlphaAtOutCoords(); + ${activation} + }`; + } else { + activationSnippet = ` + float activation(float x) { + ${activation} + } + `; + } + applyActivationSnippet = `result = activation(result);`; + } + const addBiasSnippet = addBias ? "result += getBiasAtOutCoords();" : ""; + if (addBias) { + this.variableNames.push("bias"); + } + if (hasPreluActivationWeights) { + this.variableNames.push("preluActivationWeights"); + } + if (hasLeakyreluAlpha) { + this.variableNames.push("leakyreluAlpha"); + } + this.userCode = ` + ${activationSnippet} + + const ivec2 strides = ivec2(${strideHeight}, ${strideWidth}); + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords[0]; + int d2 = coords[${channelDim}]; + + ivec2 xRCCorner = + ivec2(coords[${rowDim}], coords[${colDim}]) * strides - pads; + int xRCorner = xRCCorner.x; + int xCCorner = xRCCorner.y; + + // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + for (int wR = 0; wR < ${filterHeight}; wR++) { + int xR = xRCorner + wR * ${dilationHeight}; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${filterWidth}; wC++) { + int xC = xCCorner + wC * ${dilationWidth}; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + for (int d1 = 0; d1 < ${inputDepthNearestVec4}; d1 += 4) { + vec4 wValues = vec4( + getW(wR, wC, d1, d2), + getW(wR, wC, d1 + 1, d2), + getW(wR, wC, d1 + 2, d2), + getW(wR, wC, d1 + 3, d2) + ); + + if (${isChannelsLast}) { + vec4 xValues = vec4( + getX(batch, xR, xC, d1), + getX(batch, xR, xC, d1 + 1), + getX(batch, xR, xC, d1 + 2), + getX(batch, xR, xC, d1 + 3) + ); + dotProd += dot(xValues, wValues); + } else { + vec4 xValues = vec4( + getX(batch, d1, xR, xC), + getX(batch, d1 + 1, xR, xC), + getX(batch, d1 + 2, xR, xC), + getX(batch, d1 + 3, xR, xC) + ); + dotProd += dot(xValues, wValues); + } + } + + if (${inputDepthVec4Remainder === 1}) { + + if (${isChannelsLast}) { + dotProd += + getX(batch, xR, xC, ${inputDepthNearestVec4}) * + getW(wR, wC, ${inputDepthNearestVec4}, d2); + } else { + dotProd += + getX(batch, ${inputDepthNearestVec4}, xR, xC) * + getW(wR, wC, ${inputDepthNearestVec4}, d2); + } + + } else if (${inputDepthVec4Remainder === 2}) { + vec2 wValues = vec2( + getW(wR, wC, ${inputDepthNearestVec4}, d2), + getW(wR, wC, ${inputDepthNearestVec4} + 1, d2) + ); + + if (${isChannelsLast}) { + vec2 xValues = vec2( + getX(batch, xR, xC, ${inputDepthNearestVec4}), + getX(batch, xR, xC, ${inputDepthNearestVec4} + 1) + ); + dotProd += dot(xValues, wValues); + } else { + vec2 xValues = vec2( + getX(batch, ${inputDepthNearestVec4}, xR, xC), + getX(batch, ${inputDepthNearestVec4} + 1, xR, xC) + ); + dotProd += dot(xValues, wValues); + } + + } else if (${inputDepthVec4Remainder === 3}) { + vec3 wValues = vec3( + getW(wR, wC, ${inputDepthNearestVec4}, d2), + getW(wR, wC, ${inputDepthNearestVec4} + 1, d2), + getW(wR, wC, ${inputDepthNearestVec4} + 2, d2) + ); + + if (${isChannelsLast}) { + vec3 xValues = vec3( + getX(batch, xR, xC, ${inputDepthNearestVec4}), + getX(batch, xR, xC, ${inputDepthNearestVec4} + 1), + getX(batch, xR, xC, ${inputDepthNearestVec4} + 2) + ); + dotProd += dot(xValues, wValues); + } else { + vec3 xValues = vec3( + getX(batch, ${inputDepthNearestVec4}, xR, xC), + getX(batch, ${inputDepthNearestVec4} + 1, xR, xC), + getX(batch, ${inputDepthNearestVec4} + 2, xR, xC) + ); + dotProd += dot(xValues, wValues); + } + + } + } + } + + float result = dotProd; + ${addBiasSnippet} + ${applyActivationSnippet} + setOutput(result); + } + `; + } + }; + var Conv3DProgram = class { + constructor(convInfo) { + this.variableNames = ["x", "W"]; + this.outputShape = convInfo.outShape; + const padFront = convInfo.padInfo.front; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const filterDepth = convInfo.filterDepth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const inputDepthNearestVec4 = Math.floor(convInfo.inChannels / 4) * 4; + const inputDepthVec4Remainder = convInfo.inChannels % 4; + this.userCode = ` + const ivec3 strides = ivec3(${strideDepth}, ${strideHeight}, ${strideWidth}); + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int d2 = coords.u; + + ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; + int xFCorner = xFRCCorner.x; + int xRCorner = xFRCCorner.y; + int xCCorner = xFRCCorner.z; + + // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get + // y(yF, yR, yC, d2). ? = to be determined. : = across all + // values in that axis. + float dotProd = 0.0; + for (int wF = 0; wF < ${filterDepth}; wF++) { + int xF = xFCorner + wF * ${dilationDepth}; + + if (xF < 0 || xF >= ${convInfo.inDepth}) { + continue; + } + + for (int wR = 0; wR < ${filterHeight}; wR++) { + int xR = xRCorner + wR * ${dilationHeight}; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int wC = 0; wC < ${filterWidth}; wC++) { + int xC = xCCorner + wC * ${dilationWidth}; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + for (int d1 = 0; d1 < ${inputDepthNearestVec4}; d1 += 4) { + vec4 xValues = vec4( + getX(batch, xF, xR, xC, d1), + getX(batch, xF, xR, xC, d1 + 1), + getX(batch, xF, xR, xC, d1 + 2), + getX(batch, xF, xR, xC, d1 + 3) + ); + vec4 wValues = vec4( + getW(wF, wR, wC, d1, d2), + getW(wF, wR, wC, d1 + 1, d2), + getW(wF, wR, wC, d1 + 2, d2), + getW(wF, wR, wC, d1 + 3, d2) + ); + + dotProd += dot(xValues, wValues); + } + + if (${inputDepthVec4Remainder === 1}) { + dotProd += + getX(batch, xF, xR, xC, ${inputDepthNearestVec4}) * + getW(wF, wR, wC, ${inputDepthNearestVec4}, d2); + } else if (${inputDepthVec4Remainder === 2}) { + vec2 xValues = vec2( + getX(batch, xF, xR, xC, ${inputDepthNearestVec4}), + getX(batch, xF, xR, xC, ${inputDepthNearestVec4} + 1) + ); + vec2 wValues = vec2( + getW(wF, wR, wC, ${inputDepthNearestVec4}, d2), + getW(wF, wR, wC, ${inputDepthNearestVec4} + 1, d2) + ); + dotProd += dot(xValues, wValues); + } else if (${inputDepthVec4Remainder === 3}) { + vec3 xValues = vec3( + getX(batch, xF, xR, xC, ${inputDepthNearestVec4}), + getX(batch, xF, xR, xC, ${inputDepthNearestVec4} + 1), + getX(batch, xF, xR, xC, ${inputDepthNearestVec4} + 2) + ); + vec3 wValues = vec3( + getW(wF, wR, wC, ${inputDepthNearestVec4}, d2), + getW(wF, wR, wC, ${inputDepthNearestVec4} + 1, d2), + getW(wF, wR, wC, ${inputDepthNearestVec4} + 2, d2) + ); + dotProd += dot(xValues, wValues); + } + } + } + } + setOutput(dotProd); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/im2col_packed_gpu.js + init_define_BUILD_VERSION(); + var Im2ColPackedProgram = class { + constructor(outputShape, convInfo) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.customUniforms = [ + { name: "inputShape", type: "ivec4" }, + { name: "pad", type: "ivec2" }, + { name: "stride", type: "ivec2" }, + { name: "dilation", type: "ivec2" }, + { name: "inChannels", type: "int" }, + { name: "itemsPerBlockRow", type: "int" }, + { name: "outWidth", type: "int" } + ]; + this.outputShape = outputShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + const { dataFormat } = convInfo; + const glsl = getGlslDifferences(); + const isChannelsLast = dataFormat === "channelsLast"; + const rowDim = isChannelsLast ? 1 : 2; + const colDim = isChannelsLast ? 2 : 3; + const boundsCheckingSnippet = this.enableShapeUniforms ? "if(blockIndex < outShape[2] && pos < outShape[1]) {" : `if(blockIndex < ${outputShape[2]} && pos < ${outputShape[1]}) {`; + let unrolled = ``; + for (let row = 0; row <= 1; row++) { + for (let col = 0; col <= 1; col++) { + unrolled += ` + blockIndex = rc.z + ${col}; + pos = rc.y + ${row}; + + ${boundsCheckingSnippet} + offsetY = int(blockIndex / outWidth) * stride[0] - pad[0]; + d0 = offsetY + dilation[0] * (pos / itemsPerBlockRow); + + if(d0 < inputShape[${rowDim}] && d0 >= 0) { + // Use custom imod instead mod. On Intel GPU, mod may generate + // unexpected value. + // https://github.com/tensorflow/tfjs/issues/5447 + offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1]; + d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) / + inChannels); + + if(d1 < inputShape[${colDim}] && d1 >= 0) { + + ch = imod(pos, inChannels); + + if (${isChannelsLast}) { + innerDims = vec2(d1, ch); + result[${row * 2 + col}] = getChannel( + getA(rc.x, d0, int(innerDims.x), + int(innerDims.y)), innerDims); + } else { + innerDims = vec2(d0, d1); + result[${row * 2 + col}] = getChannel( + getA(rc.x, ch, int(innerDims.x), + int(innerDims.y)), innerDims); + } + } + } + } + `; + } + } + this.userCode = ` + void main() { + ivec3 rc = getOutputCoords(); + + vec4 result = vec4(0); + + int blockIndex, pos, offsetY, d0, offsetX, d1, ch; + vec2 innerDims; + + ${unrolled} + + ${glsl.output} = result; + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D_impl.js + function getShapeForBatchMatMul(shape, isChannelsLast) { + const length = shape.length; + if (length >= 3) { + return isChannelsLast ? [ + ...shape.slice(0, -3), + shape[length - 3] * shape[length - 2], + shape[length - 1] + ] : [ + ...shape.slice(0, -3), + shape[length - 3], + shape[length - 2] * shape[length - 1] + ]; + } else if (!isChannelsLast && length === 1 && shape[0] > 1) { + return [shape[0], 1]; + } else { + return null; + } + } + function conv2dByMatMul({ x, filter, convInfo, backend: backend2, bias = null, preluActivationWeights = null, leakyreluAlpha = 0, activation = null }) { + const xShape = x.shape; + const xTexData = backend2.texData.get(x.dataId); + const sharedMatMulDim = convInfo.inChannels; + const outerShapeX = xShape[0] * xShape[1] * xShape[2]; + const outerShapeFilter = convInfo.outChannels; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const transposeA = false; + const transposeB = false; + let out; + const intermediates = []; + if (preluActivationWeights != null) { + const targetShape = getShapeForBatchMatMul(preluActivationWeights.shape, isChannelsLast); + if (targetShape != null) { + preluActivationWeights = reshape3({ + inputs: { x: preluActivationWeights }, + backend: backend2, + attrs: { shape: targetShape } + }); + intermediates.push(preluActivationWeights); + } + } + if (bias != null) { + const targetShape = getShapeForBatchMatMul(bias.shape, isChannelsLast); + if (targetShape != null) { + bias = reshape3({ inputs: { x: bias }, backend: backend2, attrs: { shape: targetShape } }); + intermediates.push(bias); + } + } + const batchMatMulWillBeUnpacked = (outerShapeX === 1 || outerShapeFilter === 1) && sharedMatMulDim > MATMUL_SHARED_DIM_THRESHOLD; + const canOptimize = !batchMatMulWillBeUnpacked && xTexData.isPacked && isChannelsLast && xTexData.texture != null && xShape[2] % 2 !== 0 && util_exports.arraysEqual(xTexData.shape.slice(-3), xShape.slice(-3)); + if (canOptimize) { + const targetShape = xShape[0] * xShape[1] * (xShape[2] + 1); + const xReshaped = { + dataId: x.dataId, + shape: [1, targetShape, convInfo.inChannels], + dtype: x.dtype + }; + const originalXTexDataShape = xTexData.shape; + xTexData.shape = xTexData.shape.slice(); + xTexData.shape[xTexData.shape.length - 2]++; + util_exports.assert(isReshapeFree(xTexData.shape, xReshaped.shape), () => `packed reshape ${xTexData.shape} to ${xReshaped.shape} isn't free`); + const filterReshaped = reshape3({ + inputs: { x: filter }, + backend: backend2, + attrs: { shape: [1, convInfo.inChannels, convInfo.outChannels] } + }); + intermediates.push(filterReshaped); + const pointwiseConv = batchMatMulImpl({ + a: xReshaped, + b: filterReshaped, + backend: backend2, + transposeA, + transposeB, + bias, + activation, + preluActivationWeights, + leakyreluAlpha + }); + const pointwiseConvTexData = backend2.texData.get(pointwiseConv.dataId); + util_exports.assert(pointwiseConvTexData.isPacked, () => "batchMatMul result is expected to be packed"); + xTexData.shape = originalXTexDataShape; + pointwiseConvTexData.shape = convInfo.outShape; + out = identity2({ inputs: { x: pointwiseConv }, backend: backend2 }); + out.shape = convInfo.outShape; + intermediates.push(pointwiseConv); + } else { + const numCols = convInfo.outHeight * convInfo.outWidth; + const xReshaped = reshape3({ + inputs: { x }, + backend: backend2, + attrs: { + shape: isChannelsLast ? [convInfo.batchSize, numCols, convInfo.inChannels] : [convInfo.batchSize, convInfo.inChannels, numCols] + } + }); + const filterReshaped = reshape3({ + inputs: { x: filter }, + backend: backend2, + attrs: { shape: [1, convInfo.inChannels, convInfo.outChannels] } + }); + const result = batchMatMulImpl({ + a: isChannelsLast ? xReshaped : filterReshaped, + b: isChannelsLast ? filterReshaped : xReshaped, + transposeA: !isChannelsLast, + transposeB, + backend: backend2, + bias, + activation, + preluActivationWeights, + leakyreluAlpha + }); + out = reshape3({ inputs: { x: result }, backend: backend2, attrs: { shape: convInfo.outShape } }); + intermediates.push(xReshaped); + intermediates.push(filterReshaped); + intermediates.push(result); + } + for (const i of intermediates) { + backend2.disposeIntermediateTensorInfo(i); + } + return out; + } + function conv2dWithIm2Row({ x, filter, convInfo, backend: backend2, bias = null, preluActivationWeights = null, leakyreluAlpha = 0, activation = null }) { + const { filterWidth, filterHeight, inChannels, outWidth, outHeight, dataFormat } = convInfo; + const isChannelsLast = dataFormat === "channelsLast"; + const sharedDim = filterWidth * filterHeight * inChannels; + const numCols = outHeight * outWidth; + const x2ColShape = [convInfo.batchSize, sharedDim, numCols]; + const transposeA = true; + const transposeB = false; + const intermediates = []; + if (preluActivationWeights != null) { + const targetShape = getShapeForBatchMatMul(preluActivationWeights.shape, isChannelsLast); + if (targetShape != null) { + preluActivationWeights = reshape3({ + inputs: { x: preluActivationWeights }, + backend: backend2, + attrs: { shape: targetShape } + }); + intermediates.push(preluActivationWeights); + } + } + if (bias != null) { + const targetShape = getShapeForBatchMatMul(bias.shape, isChannelsLast); + if (targetShape != null) { + bias = reshape3({ inputs: { x: bias }, backend: backend2, attrs: { shape: targetShape } }); + intermediates.push(bias); + } + } + const w2Row = reshape3({ + inputs: { x: filter }, + backend: backend2, + attrs: { shape: [1, sharedDim, util_exports.sizeFromShape(filter.shape) / sharedDim] } + }); + intermediates.push(w2Row); + const im2ColProgram = new Im2ColPackedProgram(x2ColShape, convInfo); + const customValues = [ + x.shape, + [convInfo.padInfo.top, convInfo.padInfo.left], + [convInfo.strideHeight, convInfo.strideWidth], + [convInfo.dilationHeight, convInfo.dilationWidth], + [convInfo.inChannels], + [convInfo.filterWidth * convInfo.inChannels], + [convInfo.outWidth] + ]; + const im2Col = backend2.runWebGLProgram(im2ColProgram, [x], "float32", customValues); + const im2ColReshaped = reshape3({ inputs: { x: im2Col }, backend: backend2, attrs: { shape: x2ColShape } }); + intermediates.push(im2Col); + intermediates.push(im2ColReshaped); + const hasBias = bias != null; + const hasPreluActivationWeights = preluActivationWeights != null; + const hasLeakyreluAlpha = activation === "leakyrelu"; + const fusedActivation = activation ? mapActivationToShaderProgram(activation, true) : null; + const matmulProgram = new MatMulPackedProgram(isChannelsLast ? im2ColReshaped.shape : w2Row.shape, isChannelsLast ? w2Row.shape : im2ColReshaped.shape, isChannelsLast ? [convInfo.batchSize, numCols, convInfo.outChannels] : [convInfo.batchSize, convInfo.outChannels, numCols], transposeA, transposeB, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha); + const inputs = isChannelsLast ? [im2ColReshaped, w2Row] : [w2Row, im2ColReshaped]; + if (bias) { + inputs.push(bias); + } + if (hasPreluActivationWeights) { + inputs.push(preluActivationWeights); + } + if (hasLeakyreluAlpha) { + const $leakyreluAlpha = backend2.makeTensorInfo([], "float32", util_exports.createScalarValue(leakyreluAlpha, "float32")); + inputs.push($leakyreluAlpha); + intermediates.push($leakyreluAlpha); + } + const product = backend2.runWebGLProgram(matmulProgram, inputs, "float32"); + const out = reshape3({ inputs: { x: product }, backend: backend2, attrs: { shape: convInfo.outShape } }); + intermediates.push(product); + for (const i of intermediates) { + backend2.disposeIntermediateTensorInfo(i); + } + return out; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D.js + function conv2d3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dataFormat, dilations, dimRoundingMode } = attrs; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode, false, $dataFormat); + let out; + if (convInfo.filterHeight === 1 && convInfo.filterWidth === 1 && convInfo.dilationHeight === 1 && convInfo.dilationWidth === 1 && convInfo.strideHeight === 1 && convInfo.strideWidth === 1 && (convInfo.padInfo.type === "SAME" || convInfo.padInfo.type === "VALID")) { + out = conv2dByMatMul({ x, filter, convInfo, backend: backend2 }); + } else if (env().getBool("WEBGL_CONV_IM2COL")) { + out = conv2dWithIm2Row({ x, filter, convInfo, backend: backend2 }); + } else { + const program = new Conv2DProgram(convInfo); + out = backend2.runWebGLProgram(program, [x, filter], "float32"); + } + const outReshaped = reshape3({ inputs: { x: out }, backend: backend2, attrs: { shape: convInfo.outShape } }); + backend2.disposeIntermediateTensorInfo(out); + return outReshaped; + } + var conv2DConfig2 = { + kernelName: Conv2D, + backendName: "webgl", + kernelFunc: conv2d3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2DBackpropFilter.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_backprop_gpu.js + init_define_BUILD_VERSION(); + var Conv2DDerFilterProgram = class { + constructor(convInfo) { + this.variableNames = ["x", "dy"]; + this.outputShape = convInfo.filterShape; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int wR = coords.x; + int wC = coords.y; + int d1 = coords.z; + int d2 = coords.w; + + // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + + for (int b = 0; b < ${convInfo.batchSize}; b++) { + for (int yR = 0; yR < ${convInfo.outHeight}; yR++) { + int xR = wR + yR * ${strideHeight} - ${padTop}; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int yC = 0; yC < ${convInfo.outWidth}; yC++) { + int xC = wC + yC * ${strideWidth} - ${padLeft}; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + if (${isChannelsLast}) { + float dyValue = getDy(b, yR, yC, d2); + float xValue = getX(b, xR, xC, d1); + dotProd += (xValue * dyValue); + } else { + float dyValue = getDy(b, d2, yR, yC); + float xValue = getX(b, d1, xR, xC); + dotProd += (xValue * dyValue); + } + + } + } + } + setOutput(dotProd); + } + `; + } + }; + var Conv2DDerInputProgram = class { + constructor(convInfo) { + this.variableNames = ["dy", "W"]; + this.outputShape = convInfo.inShape; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const padTop = filterHeight - 1 - convInfo.padInfo.top; + const padLeft = filterWidth - 1 - convInfo.padInfo.left; + const rowDim = isChannelsLast ? 1 : 2; + const colDim = isChannelsLast ? 2 : 3; + const channelDim = isChannelsLast ? 3 : 1; + this.userCode = ` + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords[0]; + int d1 = coords[${channelDim}]; + + ivec2 dyCorner = ivec2(coords[${rowDim}], coords[${colDim}]) - pads; + int dyRCorner = dyCorner.x; + int dyCCorner = dyCorner.y; + + // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + for (int wR = 0; wR < ${filterHeight}; wR++) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + int wRPerm = ${filterHeight} - 1 - wR; + + for (int wC = 0; wC < ${filterWidth}; wC++) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + int wCPerm = ${filterWidth} - 1 - wC; + + for (int d2 = 0; d2 < ${convInfo.outChannels}; d2++) { + + if (${isChannelsLast}) { + float xValue = getDy(batch, idyR, idyC, d2); + float wValue = getW(wRPerm, wCPerm, d1, d2); + dotProd += xValue * wValue; + } else { + float xValue = getDy(batch, d2, idyR, idyC); + float wValue = getW(wRPerm, wCPerm, d1, d2); + dotProd += xValue * wValue; + } + + } + } + } + setOutput(dotProd); + } + `; + } + }; + var Conv3DDerFilterProgram = class { + constructor(convInfo) { + this.variableNames = ["x", "dy"]; + this.outputShape = convInfo.filterShape; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const padFront = convInfo.padInfo.front; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + this.userCode = ` + void main() { + ivec5 coords = getOutputCoords(); + int wF = coords.x; + int wR = coords.y; + int wC = coords.z; + int d1 = coords.w; + int d2 = coords.u; + + float dotProd = 0.0; + + for (int b = 0; b < ${convInfo.batchSize}; b++) { + for (int yF = 0; yF < ${convInfo.outDepth}; yF++) { + int xF = wF + yF * ${strideDepth} - ${padFront}; + + if (xF < 0 || xF >= ${convInfo.inDepth}) { + continue; + } + + for (int yR = 0; yR < ${convInfo.outHeight}; yR++) { + int xR = wR + yR * ${strideHeight} - ${padTop}; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int yC = 0; yC < ${convInfo.outWidth}; yC++) { + int xC = wC + yC * ${strideWidth} - ${padLeft}; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + float dyValue = getDy(b, yF, yR, yC, d2); + float xValue = getX(b, xF, xR, xC, d1); + dotProd += (xValue * dyValue); + } + } + } + } + setOutput(dotProd); + } + `; + } + }; + var Conv3DDerInputProgram = class { + constructor(convInfo) { + this.variableNames = ["dy", "W"]; + this.outputShape = convInfo.inShape; + const filterDepth = convInfo.filterDepth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const padFront = filterDepth - 1 - convInfo.padInfo.front; + const padTop = filterHeight - 1 - convInfo.padInfo.top; + const padLeft = filterWidth - 1 - convInfo.padInfo.left; + this.userCode = ` + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int d1 = coords.u; + + + ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; + int dyFCorner = dyCorner.x; + int dyRCorner = dyCorner.y; + int dyCCorner = dyCorner.z; + + float dotProd = 0.0; + for (int wF = 0; wF < ${filterDepth}; wF++) { + float dyF = float(dyFCorner + wF) / ${strideDepth}.0; + + if (dyF < 0.0 || dyF >= ${convInfo.outDepth}.0 || fract(dyF) > 0.0) { + continue; + } + int idyF = int(dyF); + + int wFPerm = ${filterDepth} - 1 - wF; + + for (int wR = 0; wR < ${filterHeight}; wR++) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || + fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + int wRPerm = ${filterHeight} - 1 - wR; + + for (int wC = 0; wC < ${filterWidth}; wC++) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + int wCPerm = ${filterWidth} - 1 - wC; + + for (int d2 = 0; d2 < ${convInfo.outChannels}; d2++) { + float xValue = getDy(batch, idyF, idyR, idyC, d2); + float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2); + dotProd += xValue * wValue; + } + } + } + } + setOutput(dotProd); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2DBackpropFilter.js + function conv2DBackpropFilter3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, pad: pad3, dataFormat, dimRoundingMode, filterShape } = attrs; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filterShape, strides, 1, pad3, dimRoundingMode, false, $dataFormat); + const program = new Conv2DDerFilterProgram(convInfo); + return backend2.runWebGLProgram(program, [x, dy], "float32"); + } + var conv2DBackpropFilterConfig2 = { + kernelName: Conv2DBackpropFilter, + backendName: "webgl", + kernelFunc: conv2DBackpropFilter3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2DBackpropInput.js + init_define_BUILD_VERSION(); + function conv2DBackpropInput3(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { inputShape, strides, pad: pad3, dataFormat, dimRoundingMode } = attrs; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(inputShape, filter.shape, strides, 1, pad3, dimRoundingMode, false, $dataFormat); + const program = new Conv2DDerInputProgram(convInfo); + return backend2.runWebGLProgram(program, [dy, filter], "float32"); + } + var conv2DBackpropInputConfig2 = { + kernelName: Conv2DBackpropInput, + backendName: "webgl", + kernelFunc: conv2DBackpropInput3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3D.js + init_define_BUILD_VERSION(); + function conv3D2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dilations } = attrs; + const convInfo = backend_util_exports.computeConv3DInfo(x.shape, filter.shape, strides, dilations, pad3); + const program = new Conv3DProgram(convInfo); + return backend2.runWebGLProgram(program, [x, filter], "float32"); + } + var conv3DConfig2 = { + kernelName: Conv3D, + backendName: "webgl", + kernelFunc: conv3D2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3DBackpropFilterV2.js + init_define_BUILD_VERSION(); + function conv3DBackpropFilterV22(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, pad: pad3, filterShape } = attrs; + const convInfo = backend_util_exports.computeConv3DInfo(x.shape, filterShape, strides, 1, pad3); + const program = new Conv3DDerFilterProgram(convInfo); + return backend2.runWebGLProgram(program, [x, dy], "float32"); + } + var conv3DBackpropFilterV2Config2 = { + kernelName: Conv3DBackpropFilterV2, + backendName: "webgl", + kernelFunc: conv3DBackpropFilterV22 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3DBackpropInputV2.js + init_define_BUILD_VERSION(); + function conv3DBackpropInput2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { pad: pad3, strides, inputShape } = attrs; + const convInfo = backend_util_exports.computeConv3DInfo(inputShape, filter.shape, strides, 1, pad3); + const program = new Conv3DDerInputProgram(convInfo); + return backend2.runWebGLProgram(program, [dy, filter], "float32"); + } + var conv3DBackpropInputConfig = { + kernelName: Conv3DBackpropInputV2, + backendName: "webgl", + kernelFunc: conv3DBackpropInput2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cos.js + init_define_BUILD_VERSION(); + var COS = CHECK_NAN_SNIPPET_UNARY + ` + return cos(x); +`; + var cos3 = unaryKernelFunc2({ opSnippet: COS }); + var cosConfig2 = { + kernelName: Cos, + backendName: "webgl", + kernelFunc: cos3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cosh.js + init_define_BUILD_VERSION(); + var COSH = ` + float e2x = exp(-x); + return (e2x + 1.0 / e2x) / 2.0; +`; + var cosh3 = unaryKernelFunc2({ opSnippet: COSH }); + var coshConfig2 = { + kernelName: Cosh, + backendName: "webgl", + kernelFunc: cosh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/CropAndResize.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/crop_and_resize_gpu.js + init_define_BUILD_VERSION(); + var CropAndResizeProgram = class { + constructor(imageShape, boxShape, cropSize, method, extrapolationValue) { + this.variableNames = ["Image", "Boxes", "BoxInd"]; + this.outputShape = []; + const [batch, imageHeight, imageWidth, depth] = imageShape; + const [numBoxes] = boxShape; + const [cropHeight, cropWidth] = cropSize; + this.outputShape = [numBoxes, cropHeight, cropWidth, depth]; + const methodId = method === "bilinear" ? 1 : 0; + const [inputHeightFloat, inputWidthFloat] = [`${imageHeight - 1}.0`, `${imageWidth - 1}.0`]; + const [heightRatio, heightScale, inY] = cropHeight > 1 ? [ + `${(imageHeight - 1) / (cropHeight - 1)}`, + "(y2-y1) * height_ratio", + `y1*${inputHeightFloat} + float(y)*(height_scale)` + ] : [ + "0.0", + "0.0", + `0.5 * (y1+y2) * ${inputHeightFloat}` + ]; + const [widthRatio, widthScale, inX] = cropWidth > 1 ? [ + `${(imageWidth - 1) / (cropWidth - 1)}`, + "(x2-x1) * width_ratio", + `x1*${inputWidthFloat} + float(x)*(width_scale)` + ] : [ + "0.0", + "0.0", + `0.5 * (x1+x2) * ${inputWidthFloat}` + ]; + this.userCode = ` + const float height_ratio = float(${heightRatio}); + const float width_ratio = float(${widthRatio}); + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int y = coords[1]; + int x = coords[2]; + int d = coords[3]; + + // get box vals + float y1 = getBoxes(b,0); + float x1 = getBoxes(b,1); + float y2 = getBoxes(b,2); + float x2 = getBoxes(b,3); + + // get image in batch index + int bInd = round(getBoxInd(b)); + if(bInd < 0 || bInd >= ${batch}) { + return; + } + + float height_scale = ${heightScale}; + float width_scale = ${widthScale}; + + float in_y = ${inY}; + if( in_y < 0.0 || in_y > ${inputHeightFloat} ) { + setOutput(float(${extrapolationValue})); + return; + } + float in_x = ${inX}; + if( in_x < 0.0 || in_x > ${inputWidthFloat} ) { + setOutput(float(${extrapolationValue})); + return; + } + + vec2 sourceFracIndexCR = vec2(in_x,in_y); + if(${methodId} == 1) { + // Compute the four integer indices. + ivec2 sourceFloorCR = ivec2(sourceFracIndexCR); + ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR)); + + float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d); + float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d); + float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d); + float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d); + + vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR); + + float top = topLeft + (topRight - topLeft) * fracCR.x; + float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x; + float newValue = top + (bottom - top) * fracCR.y; + setOutput(newValue); + } else { + // Compute the coordinators of nearest neighbor point. + ivec2 sourceNearestCR = ivec2(floor( + sourceFracIndexCR + vec2(0.5,0.5))); + float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d); + setOutput(newValue); + } + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/CropAndResize.js + var cropAndResize3 = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { image: image2, boxes, boxInd } = inputs; + const { cropSize, method, extrapolationValue } = attrs; + const program = new CropAndResizeProgram(image2.shape, boxes.shape, cropSize, method, extrapolationValue); + return backend2.runWebGLProgram(program, [image2, boxes, boxInd], "float32"); + }; + var cropAndResizeConfig2 = { + kernelName: CropAndResize, + backendName: "webgl", + kernelFunc: cropAndResize3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cumprod.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/cum_gpu.js + init_define_BUILD_VERSION(); + var CumOpType; + (function(CumOpType2) { + CumOpType2["Prod"] = "*"; + CumOpType2["Sum"] = "+"; + })(CumOpType || (CumOpType = {})); + var CumProgram = class { + constructor(op2, outputShape, exclusive, reverse5) { + this.op = op2; + this.outputShape = outputShape; + this.variableNames = ["x"]; + this.customUniforms = [{ name: "index", type: "float" }]; + const rank = this.outputShape.length; + const initVal = this.op === CumOpType.Prod ? "1.0" : "0.0"; + const val = exclusive ? initVal : `getX(${getCoords2(rank, "coords", this.op)})`; + const length = this.outputShape[this.outputShape.length - 1]; + let condition = ""; + let idxString = ""; + if (exclusive) { + condition = reverse5 ? `end != ${length - 1}` : "end != 0"; + idxString = reverse5 ? "end + 1" : "end - 1"; + } else { + condition = reverse5 ? `end + pow2 < ${length}` : "end >= pow2"; + idxString = reverse5 ? "end + pow2" : "end - pow2"; + } + this.userCode = ` + void main() { + ${getCoordsDataType(rank)} coords = getOutputCoords(); + int end = ${getFinalCoord(rank, "coords", this.op)}; + float val = ${val}; + int pow2 = int(pow(2.0, index)); + if (${condition}) { + int idx = ${idxString}; + ${getFinalCoord(rank, "coords", this.op)} = idx; + val ${this.op}= getX(${getCoords2(rank, "coords", this.op)}); + } + setOutput(val); + } + `; + } + }; + function getCoords2(rank, name, op2) { + if (rank === 1) { + return `${name}`; + } else if (rank === 2) { + return `${name}.x, ${name}.y`; + } else if (rank === 3) { + return `${name}.x, ${name}.y, ${name}.z`; + } else if (rank === 4) { + return `${name}.x, ${name}.y, ${name}.z, ${name}.w`; + } else { + throw new Error(`Cumulative ${op2} for rank ${rank} is not yet supported`); + } + } + function getFinalCoord(rank, name, op2) { + if (rank === 1) { + return `${name}`; + } else if (rank === 2) { + return `${name}.y`; + } else if (rank === 3) { + return `${name}.z`; + } else if (rank === 4) { + return `${name}.w`; + } else { + throw new Error(`Cumulative ${op2} for rank ${rank} is not yet supported`); + } + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cum_impl.js + init_define_BUILD_VERSION(); + function cumImpl(op2, x, backend2, axis, exclusive, reverse5) { + const xRank = x.shape.length; + const permutation = backend_util_exports.getAxesPermutation([axis], xRank); + let permutedX = x; + if (permutation != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutation } }); + } + const permutedAxis = backend_util_exports.getInnerMostAxes(1, xRank)[0]; + if (permutedAxis !== xRank - 1) { + throw new Error(`WebGL cumprod shader expects an inner-most axis=${x.shape.length - 1} but got axis=${axis}`); + } + const size = permutedX.shape[permutedAxis]; + let result = identity2({ inputs: { x: permutedX }, backend: backend2 }); + for (let i = 0; i <= Math.ceil(Math.log2(size)) - 1; i++) { + const program = new CumProgram(op2, permutedX.shape, false, reverse5); + const customValues = [[i]]; + const prevResult = result; + result = backend2.runWebGLProgram(program, [result], result.dtype, customValues); + backend2.disposeIntermediateTensorInfo(prevResult); + } + if (exclusive) { + const program = new CumProgram(op2, permutedX.shape, exclusive, reverse5); + const prevResult = result; + result = backend2.runWebGLProgram(program, [result], result.dtype); + backend2.disposeIntermediateTensorInfo(prevResult); + } + if (permutation != null) { + const reversePermutation = backend_util_exports.getUndoAxesPermutation(permutation); + const reverseTransposedResult = transpose3({ inputs: { x: result }, backend: backend2, attrs: { perm: reversePermutation } }); + backend2.disposeIntermediateTensorInfo(result); + backend2.disposeIntermediateTensorInfo(permutedX); + return reverseTransposedResult; + } + return result; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cumprod.js + function cumprod3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + return cumImpl(CumOpType.Prod, x, backend2, axis, exclusive, reverse5); + } + var cumprodConfig2 = { + kernelName: Cumprod, + backendName: "webgl", + kernelFunc: cumprod3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cumsum.js + init_define_BUILD_VERSION(); + function cumsum3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + return cumImpl(CumOpType.Sum, x, backend2, axis, exclusive, reverse5); + } + var cumsumConfig2 = { + kernelName: Cumsum, + backendName: "webgl", + kernelFunc: cumsum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DenseBincount.js + init_define_BUILD_VERSION(); + function denseBincount2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, weights } = inputs; + const { size, binaryOutput } = attrs; + if (x.shape.length === 1) { + const xVals = backend2.readSync(x.dataId); + const weightsVals = backend2.readSync(weights.dataId); + const outVals = bincountImplCPU(xVals, weightsVals, weights.dtype, weights.shape, size); + return backend2.makeTensorInfo([size], weights.dtype, outVals); + } else if (x.shape.length === 2) { + const xBuf = backend2.bufferSync(x); + const weightsBuf = backend2.bufferSync(weights); + const outBuf = bincountReduceImplCPU(xBuf, weightsBuf, size, binaryOutput); + return backend2.makeTensorInfo(outBuf.shape, weights.dtype, outBuf.values); + } + throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${x.shape.length}.`); + } + var denseBincountConfig2 = { + kernelName: DenseBincount, + backendName: "webgl", + kernelFunc: denseBincount2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthToSpace.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/depth_to_space_gpu.js + init_define_BUILD_VERSION(); + var DepthToSpaceProgram = class { + constructor(outputShape, blockSize, dataFormat) { + this.variableNames = ["x"]; + this.outputShape = []; + this.outputShape = outputShape; + this.blockSize = blockSize; + this.dataFormat = dataFormat; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int h = ${this.getHeightCoordString()}; + int w = ${this.getWidthCoordString()}; + int d = ${this.getDepthCoordString()}; + + int in_h = h / ${blockSize}; + int offset_h = imod(h, ${blockSize}); + int in_w = w / ${blockSize}; + int offset_w = imod(w, ${blockSize}); + int offset_d = (offset_h * ${blockSize} + offset_w) * + ${this.getOutputDepthSize()}; + int in_d = d + offset_d; + + float result = ${this.getInputSamplingString()}; + setOutput(result); + } + `; + } + getHeightCoordString() { + if (this.dataFormat === "NHWC") { + return `coords[1]`; + } else { + return `coords[2]`; + } + } + getWidthCoordString() { + if (this.dataFormat === "NHWC") { + return `coords[2]`; + } else { + return `coords[3]`; + } + } + getDepthCoordString() { + if (this.dataFormat === "NHWC") { + return `coords[3]`; + } else { + return `coords[1]`; + } + } + getOutputDepthSize() { + if (this.dataFormat === "NHWC") { + return this.outputShape[3]; + } else { + return this.outputShape[1]; + } + } + getInputSamplingString() { + if (this.dataFormat === "NHWC") { + return `getX(b, in_h, in_w, in_d)`; + } else { + return `getX(b, in_d, in_h, in_w)`; + } + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthToSpace.js + function depthToSpace3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockSize, dataFormat } = attrs; + const batchSize = x.shape[0]; + const inputHeight = dataFormat === "NHWC" ? x.shape[1] : x.shape[2]; + const inputWidth = dataFormat === "NHWC" ? x.shape[2] : x.shape[3]; + const inputDepth = dataFormat === "NHWC" ? x.shape[3] : x.shape[1]; + const outputHeight = inputHeight * blockSize; + const outputWidth = inputWidth * blockSize; + const outputDepth = inputDepth / (blockSize * blockSize); + const outputShape = dataFormat === "NHWC" ? [batchSize, outputHeight, outputWidth, outputDepth] : [batchSize, outputDepth, outputHeight, outputWidth]; + const program = new DepthToSpaceProgram(outputShape, blockSize, dataFormat); + return backend2.runWebGLProgram(program, [x], x.dtype); + } + var depthToSpaceConfig2 = { + kernelName: DepthToSpace, + backendName: "webgl", + kernelFunc: depthToSpace3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNative.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_gpu_depthwise.js + init_define_BUILD_VERSION(); + var DepthwiseConv2DProgram = class { + constructor(convInfo, addBias = false, activation = null, hasPreluActivation = false, hasLeakyReluAlpha = false) { + this.variableNames = ["x", "W"]; + this.customUniforms = [ + { name: "pads", type: "ivec2" }, + { name: "strides", type: "ivec2" }, + { name: "dilations", type: "ivec2" }, + { name: "inDims", type: "ivec2" } + ]; + this.outputShape = convInfo.outShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const channelMul = convInfo.outChannels / convInfo.inChannels; + let activationSnippet = "", applyActivationSnippet = ""; + if (activation) { + if (hasPreluActivation) { + activationSnippet = `float activation(float a) { + float b = getPreluActivationWeightsAtOutCoords(); + ${activation} + }`; + } else if (hasLeakyReluAlpha) { + activationSnippet = `float activation(float a) { + float b = getLeakyreluAlphaAtOutCoords(); + ${activation} + }`; + } else { + activationSnippet = ` + float activation(float x) { + ${activation} + } + `; + } + applyActivationSnippet = `result = activation(result);`; + } + const addBiasSnippet = addBias ? "result += getBiasAtOutCoords();" : ""; + if (addBias) { + this.variableNames.push("bias"); + } + if (hasPreluActivation) { + this.variableNames.push("preluActivationWeights"); + } + if (hasLeakyReluAlpha) { + this.variableNames.push("leakyreluAlpha"); + } + this.userCode = ` + ${activationSnippet} + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords.x; + ivec2 xRCCorner = coords.yz * strides - pads; + int d2 = coords.w; + int d1 = d2 / ${channelMul}; + int q = d2 - d1 * ${channelMul}; + + int xRCorner = xRCCorner.x; + int xCCorner = xRCCorner.y; + + // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations. + for (int wR = 0; wR < ${filterHeight}; wR++) { + int xR = xRCorner + wR * dilations[0]; + + if (xR < 0 || xR >= inDims[0]) { + continue; + } + + for (int wC = 0; wC < ${filterWidth}; wC++) { + int xC = xCCorner + wC * dilations[1]; + + if (xC < 0 || xC >= inDims[1]) { + continue; + } + + float xVal = getX(batch, xR, xC, d1); + float wVal = getW(wR, wC, d1, q); + dotProd += xVal * wVal; + } + } + + float result = dotProd; + ${addBiasSnippet} + ${applyActivationSnippet} + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_packed_gpu_depthwise.js + init_define_BUILD_VERSION(); + var DepthwiseConvPacked2DProgram = class { + constructor(convInfo, addBias = false, activation = null, hasPreluActivation = false, hasLeakyReluAlpha = false) { + this.variableNames = ["x", "W"]; + this.packedInputs = true; + this.packedOutput = true; + this.customUniforms = [ + { name: "pads", type: "ivec2" }, + { name: "strides", type: "ivec2" }, + { name: "dilations", type: "ivec2" }, + { name: "inDims", type: "ivec2" } + ]; + this.outputShape = convInfo.outShape; + this.enableShapeUniforms = useShapeUniforms(this.outputShape.length); + const channelMul = convInfo.outChannels / convInfo.inChannels; + const padLeft = convInfo.padInfo.left; + const strideWidth = convInfo.strideWidth; + const dilationWidth = convInfo.dilationWidth; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const texelsAcross = filterWidth; + let mainLoop = ` + int xR; int xC; int xCOffset; + vec4 wTexel; vec4 previous; vec4 final;`; + for (let c = 0; c < filterWidth; c++) { + mainLoop += ` + vec4 xTexelC${c * 2}; + int xTexelC${c * 2}Ready; + vec4 xTexelC${c * 2 + 1}; + int xTexelC${c * 2 + 1}Ready; + vec4 xC${c};`; + } + mainLoop += ` + for (int r = 0; r < ${filterHeight}; r++) { + `; + for (let c = 0; c < filterWidth; c++) { + mainLoop += ` + xTexelC${c * 2} = vec4(0.0); + xTexelC${c * 2}Ready = 0; + xTexelC${c * 2 + 1} = vec4(0.0); + xTexelC${c * 2 + 1}Ready = 0; + xC${c} = vec4(0.0);`; + } + mainLoop += ` + xR = xRCorner + r * dilations[0]; + if (xR >=0 && xR < inDims[0]) { + `; + for (let texelC = 0; texelC < (texelsAcross + 1) / 2; texelC++) { + const colIndex = texelC * 2; + mainLoop += ` + xC = xCCorner + ${colIndex * dilationWidth}; + `; + if (strideWidth === 1) { + if (colIndex < filterWidth) { + if (padLeft % 2 === 1) { + mainLoop += ` + xCOffset = xC + 1; + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex}Ready == 0) { + xTexelC${colIndex} = getX(batch, xR, xCOffset, d1); + + // Need to manually clear unused channels in case + // we're reading from recycled texture. + if (xCOffset + 1 >= inDims[1]) { + xTexelC${colIndex}.zw = vec2(0.0); + } + xTexelC${colIndex}Ready = 1; + } + `; + if (dilationWidth === 1 && colIndex > 0) { + mainLoop += ` + xC${colIndex} = vec4(xTexelC${colIndex - 2}.zw, xTexelC${colIndex}.xy); + `; + } else { + mainLoop += ` + xCOffset = xC + 1 - 2; + + if (xCOffset >= 0 && xCOffset < inDims[1]) { + previous = getX(batch, xR, xCOffset, d1); + + // Need to manually clear unused channels in case + // we're reading from recycled texture. + if (xCOffset + 1 >= inDims[1]) { + previous.zw = vec2(0.0); + } + + xC${colIndex} = vec4(previous.zw, xTexelC${colIndex}.xy); + } else { + xC${colIndex} = vec4(0.0, 0.0, xTexelC${colIndex}.xy); + } + `; + } + } else { + mainLoop += ` + if (xC >= 0 && xC < inDims[1] && xTexelC${colIndex}Ready == 0) { + xTexelC${colIndex} = getX(batch, xR, xC, d1); + if (xC + 1 >= inDims[1]) { + xTexelC${colIndex}.zw = vec2(0.0); + } + xTexelC${colIndex}Ready = 1; + } + + xC${colIndex} = xTexelC${colIndex}; + `; + } + if (colIndex + 1 < filterWidth) { + const nextTexelOffset = padLeft % 2 === 0 ? util_exports.nearestLargerEven(dilationWidth) : dilationWidth; + if (dilationWidth % 2 === 0 && padLeft % 2 === 1 || dilationWidth % 2 !== 0 && padLeft % 2 !== 1) { + mainLoop += ` + xCOffset = xC + imod(pads[1], 2) + ${nextTexelOffset}; + + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex + 1}Ready == 0) { + xTexelC${colIndex + 1} = getX(batch, xR, xCOffset, d1); + + // Need to manually clear unused channels in case + // we're reading from recycled texture. + if (xCOffset + 1 >= inDims[1]) { + xTexelC${colIndex + 1}.zw = vec2(0.0); + } + xTexelC${colIndex + 1}Ready = 1; + } + `; + if (dilationWidth > 1) { + mainLoop += ` + xCOffset -= 2; + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex}Ready == 0) { + xTexelC${colIndex} = getX(batch, xR, xCOffset, d1); + xTexelC${colIndex}Ready = 1; + } + `; + } + mainLoop += ` + xC${colIndex + 1} = vec4(xTexelC${colIndex}.zw, xTexelC${colIndex + 1}.xy); + `; + } else { + if (nextTexelOffset === 1) { + mainLoop += ` + xC${colIndex + 1} = xTexelC${colIndex}; + `; + } else { + mainLoop += ` + xCOffset = xC + ${nextTexelOffset}; + + if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex + 1}Ready == 0) { + xTexelC${colIndex + 1} = getX(batch, xR, xCOffset, d1); + if (xCOffset + 1 >= inDims[1]) { + xTexelC${colIndex + 1}.zw = vec2(0.0); + } + xTexelC${colIndex + 1}Ready = 1; + } + + xC${colIndex + 1} = xTexelC${colIndex + 1}; + `; + } + } + } + } + } else { + if (colIndex < filterWidth) { + if (padLeft % 2 === 1) { + mainLoop += ` + xCOffset = xC + 1 - strides[1]; + if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex}Ready == 0) { + xTexelC${colIndex} = getX(batch, xR, xCOffset, d1); + // Need to manually clear unused channels in case + // we're reading from recycled texture. + if (xCOffset + 1 >= inDims[1]) { + xTexelC${colIndex}.zw = vec2(0.0); + } + xTexelC${colIndex}Ready = 1; + } + + if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${colIndex + 1}Ready == 0) { + xTexelC${colIndex + 1} = getX(batch, xR, xC + 1, d1); + // Need to manually clear unused channels in case + // we're reading from recycled texture. + if (xC + 2 >= inDims[1]) { + xTexelC${colIndex + 1}.zw = vec2(0.0); + } + xTexelC${colIndex + 1}Ready = 1; + } + + xC${colIndex} = vec4(xTexelC${colIndex}.zw, xTexelC${colIndex + 1}.zw); + `; + if (colIndex + 1 < filterWidth) { + mainLoop += ` + final = vec4(0.0); + xCOffset = xC + 1 + strides[1]; + if(xCOffset >= 0 && xCOffset < inDims[1]) { + final = getX(batch, xR, xCOffset, d1); + } + xC${colIndex + 1} = vec4(xTexelC${colIndex + 1}.xy, final.xy); + `; + } + } else { + mainLoop += ` + if(xC >= 0 && xC < inDims[1] && xTexelC${colIndex}Ready == 0) { + xTexelC${colIndex} = getX(batch, xR, xC, d1); + if (xC + 1 >= inDims[1]) { + xTexelC${colIndex}.zw = vec2(0.0); + } + xTexelC${colIndex}Ready = 1; + } + + xCOffset = xC + strides[1]; + if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${colIndex + 1}Ready == 0) { + xTexelC${colIndex + 1} = getX(batch, xR, xCOffset, d1); + if (xCOffset + 1 >= inDims[1]) { + xTexelC${colIndex + 1}.zw = vec2(0.); + } + xTexelC${colIndex + 1}Ready = 1; + } + + xC${colIndex} = vec4( + xTexelC${colIndex}.xy, xTexelC${colIndex + 1}.xy); + `; + if (colIndex + 1 < filterWidth) { + mainLoop += ` + xC${colIndex + 1} = vec4(xTexelC${colIndex}.zw, xTexelC${colIndex + 1}.zw); + `; + } + } + } + } + if (colIndex < filterWidth) { + mainLoop += ` + wTexel = getW(r, ${colIndex}, d1, q); + dotProd += xC${colIndex} * vec4(wTexel.xz, wTexel.xz); + `; + if (colIndex + 1 < filterWidth) { + mainLoop += ` + wTexel = getW(r, ${colIndex + 1}, d1, q); + dotProd += xC${colIndex + 1} * vec4(wTexel.xz, wTexel.xz); + `; + } + } + } + mainLoop += ` + } + `; + mainLoop += ` + } + `; + let activationSnippet = "", applyActivationSnippet = ""; + if (activation) { + if (hasPreluActivation) { + activationSnippet = `vec4 activation(vec4 a) { + vec4 b = getPreluActivationWeightsAtOutCoords(); + ${activation} + }`; + } else if (hasLeakyReluAlpha) { + activationSnippet = `vec4 activation(vec4 a) { + vec4 b = getLeakyreluAlphaAtOutCoords(); + ${activation} + }`; + } else { + activationSnippet = `vec4 activation(vec4 x) { + ${activation} + }`; + } + applyActivationSnippet = `result = activation(result);`; + } + const addBiasSnippet = addBias ? "result += getBiasAtOutCoords();" : ""; + if (addBias) { + this.variableNames.push("bias"); + } + if (hasPreluActivation) { + this.variableNames.push("preluActivationWeights"); + } + if (hasLeakyReluAlpha) { + this.variableNames.push("leakyreluAlpha"); + } + this.userCode = ` + ${activationSnippet} + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords.x; + ivec2 xRCCorner = coords.yz * strides - pads; + int d2 = coords.w; + int d1 = d2 / ${channelMul}; + int q = d2 - d1 * ${channelMul}; + int xRCorner = xRCCorner.x; + int xCCorner = xRCCorner.y; + + //intialize dotProd with a small epsilon seems to reduce GPU accuracy loss. + vec4 dotProd = vec4(0.000000000000001); + + ${mainLoop} + + vec4 result = dotProd - vec4(0.000000000000001); + ${addBiasSnippet} + ${applyActivationSnippet} + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNative.js + function depthwiseConv2dNative2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dilations, dimRoundingMode } = attrs; + let $dilations = dilations; + if ($dilations == null) { + $dilations = [1, 1]; + } + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, $dilations), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${strides} and dilations '${$dilations}'`); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad3, dimRoundingMode, true); + let program; + if (env().getBool("WEBGL_PACK_DEPTHWISECONV") && convInfo.strideWidth <= 2 && convInfo.outChannels / convInfo.inChannels === 1) { + program = new DepthwiseConvPacked2DProgram(convInfo); + } else { + program = new DepthwiseConv2DProgram(convInfo); + } + const customValues = [ + [convInfo.padInfo.top, convInfo.padInfo.left], + [convInfo.strideHeight, convInfo.strideWidth], + [convInfo.dilationHeight, convInfo.dilationWidth], + [convInfo.inHeight, convInfo.inWidth] + ]; + return backend2.runWebGLProgram(program, [x, filter], "float32", customValues); + } + var depthwiseConv2dNativeConfig2 = { + kernelName: DepthwiseConv2dNative, + backendName: "webgl", + kernelFunc: depthwiseConv2dNative2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_backprop_gpu_depthwise.js + init_define_BUILD_VERSION(); + var DepthwiseConv2DDerFilterProgram = class { + constructor(convInfo) { + this.variableNames = ["x", "dy"]; + this.outputShape = convInfo.filterShape; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const padTop = convInfo.padInfo.top; + const padLeft = convInfo.padInfo.left; + const channelMul = convInfo.outChannels / convInfo.inChannels; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int wR = coords.x; + int wC = coords.y; + int d1 = coords.z; + int dm = coords.w; + int d2 = d1 * ${channelMul} + dm; + + float dotProd = 0.0; + + // TO DO: Vec4 over the batch size + for (int b = 0; b < ${convInfo.batchSize}; b++) { + for (int yR = 0; yR < ${convInfo.outHeight}; yR++) { + int xR = wR + yR * ${strideHeight} - ${padTop}; + + if (xR < 0 || xR >= ${convInfo.inHeight}) { + continue; + } + + for (int yC = 0; yC < ${convInfo.outWidth}; yC++) { + int xC = wC + yC * ${strideWidth} - ${padLeft}; + + if (xC < 0 || xC >= ${convInfo.inWidth}) { + continue; + } + + float dyValue = getDy(b, yR, yC, d2); + float xValue = getX(b, xR, xC, d1); + dotProd += (xValue * dyValue); + } + } + } + setOutput(dotProd); + } + `; + } + }; + var DepthwiseConv2DDerInputProgram = class { + constructor(convInfo) { + this.variableNames = ["dy", "W"]; + this.outputShape = convInfo.inShape; + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const padTop = filterHeight - 1 - convInfo.padInfo.top; + const padLeft = filterWidth - 1 - convInfo.padInfo.left; + const channelMul = convInfo.outChannels / convInfo.inChannels; + this.userCode = ` + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords[0]; + int d1 = coords[3]; + ivec2 dyCorner = coords.yz - pads; + int dyRCorner = dyCorner.x; + int dyCCorner = dyCorner.y; + + float dotProd = 0.0; + + for (int wR = 0; wR < ${filterHeight}; wR++) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + int wRPerm = ${filterHeight} - 1 - wR; + + for (int wC = 0; wC < ${filterWidth}; wC++) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + int wCPerm = ${filterWidth} - 1 - wC; + + // TO DO: Vec4 over the channelMul + for (int dm = 0; dm < ${channelMul}; dm++) { + int d2 = d1 * ${channelMul} + dm; + float xValue = getDy(batch, idyR, idyC, d2); + float wValue = getW(wRPerm, wCPerm, d1, dm); + dotProd += xValue * wValue; + } + } + } + setOutput(dotProd); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js + function depthwiseConv2dNativeBackpropFilter3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, dy } = inputs; + const { strides, dilations, pad: pad3, dimRoundingMode, filterShape } = attrs; + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filterShape, strides, dilations, pad3, dimRoundingMode, true); + const program = new DepthwiseConv2DDerFilterProgram(convInfo); + return backend2.runWebGLProgram(program, [x, dy], "float32"); + } + var depthwiseConv2dNativeBackpropFilterConfig2 = { + kernelName: DepthwiseConv2dNativeBackpropFilter, + backendName: "webgl", + kernelFunc: depthwiseConv2dNativeBackpropFilter3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNativeBackpropInput.js + init_define_BUILD_VERSION(); + function depthwiseConv2dNativeBackpropInput3(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, filter } = inputs; + const { strides, dilations, pad: pad3, dimRoundingMode, inputShape } = attrs; + const convInfo = backend_util_exports.computeConv2DInfo(inputShape, filter.shape, strides, dilations, pad3, dimRoundingMode, true); + const program = new DepthwiseConv2DDerInputProgram(convInfo); + return backend2.runWebGLProgram(program, [dy, filter], "float32"); + } + var depthwiseConv2dNativeBackpropInputConfig2 = { + kernelName: DepthwiseConv2dNativeBackpropInput, + backendName: "webgl", + kernelFunc: depthwiseConv2dNativeBackpropInput3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Diag.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/diag_gpu.js + init_define_BUILD_VERSION(); + var DiagProgram = class { + constructor(size) { + this.variableNames = ["X"]; + this.outputShape = [size, size]; + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0; + setOutput(val); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Diag.js + function diag2(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + const outShape = [...x.shape, ...x.shape]; + const xSize = util_exports.sizeFromShape(x.shape); + const flat = reshape3({ inputs: { x }, backend: backend2, attrs: { shape: [xSize] } }); + const program = new DiagProgram(xSize); + const res = backend2.runWebGLProgram(program, [flat], flat.dtype); + const out = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape: outShape } }); + backend2.disposeIntermediateTensorInfo(flat); + backend2.disposeIntermediateTensorInfo(res); + return out; + } + var diagConfig2 = { + kernelName: Diag, + backendName: "webgl", + kernelFunc: diag2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Dilation2D.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/dilation_gpu.js + init_define_BUILD_VERSION(); + var Dilation2DProgram = class { + constructor(convInfo) { + this.variableNames = ["x", "W"]; + this.outputShape = convInfo.outShape; + const { inHeight, inWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth } = convInfo; + const { top: padTop, left: padLeft } = padInfo; + this.userCode = ` + const ivec2 strides = ivec2(${strideHeight}, ${strideWidth}); + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + const float neg_infinity = -3.4e38; + + void main() { + ivec4 coords = getOutputCoords(); + int batch = coords.x; + int d1 = coords.w; + ivec2 outTopLeftCorner = + coords.yz * strides - pads; + int hBeg = outTopLeftCorner.x; + int wBeg = outTopLeftCorner.y; + + float curVal = neg_infinity; + for (int h = 0; h < ${filterHeight}; h++) { + int hIn = hBeg + h * ${dilationHeight}; + + if (hIn >= 0 && hIn < ${inHeight}) { + for (int w = 0; w < ${filterWidth}; w++) { + int wIn = wBeg + w * ${dilationWidth}; + + if (wIn >= 0 && wIn < ${inWidth}) { + float xVal = getX(batch, hIn, wIn, d1); + float wVal = getW(h, w, d1); + + float val = xVal + wVal; + if (val > curVal) { + curVal = val; + } + } + } + } + } + + float result = curVal; + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Dilation2D.js + function dilation2D(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter } = inputs; + const { strides, pad: pad3, dilations } = attrs; + const convInfo = backend_util_exports.computeDilation2DInfo(x.shape, filter.shape, strides, pad3, "NHWC", dilations); + let out; + const program = new Dilation2DProgram(convInfo); + out = backend2.runWebGLProgram(program, [x, filter], "float32"); + const outReshaped = reshape3({ inputs: { x: out }, backend: backend2, attrs: { shape: convInfo.outShape } }); + backend2.disposeIntermediateTensorInfo(out); + return outReshaped; + } + var dilation2DConfig2 = { + kernelName: Dilation2D, + backendName: "webgl", + kernelFunc: dilation2D + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Einsum.js + init_define_BUILD_VERSION(); + function einsum2(args) { + const { inputs, backend: backend2, attrs } = args; + const { equation } = attrs; + const tensors = inputs; + const { allDims, summedDims, idDims } = backend_util_exports.decodeEinsumEquation(equation, tensors.length); + backend_util_exports.checkEinsumDimSizes(allDims.length, idDims, tensors); + const { path, steps } = backend_util_exports.getEinsumComputePath(summedDims, idDims); + const nSteps = steps.length; + let out = null; + let numDimsRemaining = allDims.length; + const tensorsToDispose = []; + for (let i = 0; i < nSteps; ++i) { + for (const idTerm of steps[i]) { + const { permutationIndices: perm, expandDims: dimsToExpand } = backend_util_exports.getEinsumPermutation(numDimsRemaining, idDims[idTerm]); + let x; + if (backend_util_exports.isIdentityPermutation(perm)) { + x = tensors[idTerm]; + } else { + x = transpose3({ inputs: { x: tensors[idTerm] }, backend: backend2, attrs: { perm } }); + tensorsToDispose.push(x); + } + const targetShape = x.shape.slice(); + for (let k = 0; k < dimsToExpand.length; ++k) { + targetShape.splice(dimsToExpand[k], 0, 1); + } + if (!util_exports.arraysEqual(x.shape, targetShape)) { + x = reshape3({ inputs: { x }, backend: backend2, attrs: { shape: targetShape } }); + tensorsToDispose.push(x); + } + if (out === null) { + out = x; + } else { + out = multiply2({ inputs: { a: x, b: out }, backend: backend2 }); + tensorsToDispose.push(out); + } + } + if (i < nSteps - 1) { + if (path[i] >= 0) { + out = sum4({ + inputs: { x: out }, + backend: backend2, + attrs: { + axis: path[i] - (allDims.length - numDimsRemaining), + keepDims: false + } + }); + tensorsToDispose.push(out); + } + numDimsRemaining--; + } + } + for (const tensorInfo of tensorsToDispose) { + if (tensorInfo === out) { + continue; + } + backend2.disposeIntermediateTensorInfo(tensorInfo); + } + return out; + } + var einsumConfig2 = { + kernelName: Einsum, + backendName: "webgl", + kernelFunc: einsum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Elu.js + init_define_BUILD_VERSION(); + var ELU4 = `return (x >= 0.0) ? x : (exp(x) - 1.0);`; + var ELU_PACKED = ` + vec4 result; + + result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); + result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0); + result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0); + result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); + + return result; +`; + var elu4 = unaryKernelFunc2({ opSnippet: ELU4, packedOpSnippet: ELU_PACKED }); + var eluConfig2 = { + kernelName: Elu, + backendName: "webgl", + kernelFunc: elu4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/EluGrad.js + init_define_BUILD_VERSION(); + var ELU_DER = `return (b >= 1.0) ? a : a * (b + 1.0);`; + var ELU_DER_PACKED = ` + vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); + return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); +`; + var eluGrad2 = (args) => { + const { inputs, backend: backend2 } = args; + const { dy, y } = inputs; + const program = env().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new BinaryOpPackedProgram(ELU_DER_PACKED, dy.shape, y.shape) : new BinaryOpProgram(ELU_DER, dy.shape, y.shape); + return backend2.runWebGLProgram(program, [dy, y], dy.dtype); + }; + var eluGradConfig3 = { + kernelName: EluGrad, + backendName: "webgl", + kernelFunc: eluGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Equal.js + init_define_BUILD_VERSION(); + var PACKED_EQUAL = ` + return vec4(equal(a, b)); +`; + var EQUAL = `return float(a == b);`; + var equal3 = binaryKernelFunc2({ + opSnippet: EQUAL, + packedOpSnippet: PACKED_EQUAL, + dtype: "bool", + cpuKernelImpl: equalImplCPU + }); + var equalConfig2 = { + kernelName: Equal, + backendName: "webgl", + kernelFunc: equal3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Erf.js + init_define_BUILD_VERSION(); + var ERF = ` + // Error function is calculated approximately with elementary function. + // See "Handbook of Mathematical Functions with Formulas, + // Graphs, and Mathematical Tables", Abramowitz and Stegun. + float p = ${backend_util_exports.ERF_P}; + float a1 = ${backend_util_exports.ERF_A1}; + float a2 = ${backend_util_exports.ERF_A2}; + float a3 = ${backend_util_exports.ERF_A3}; + float a4 = ${backend_util_exports.ERF_A4}; + float a5 = ${backend_util_exports.ERF_A5}; + + float sign = sign(x); + x = abs(x); + float t = 1.0 / (1.0 + p * x); + return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x)); +`; + var erf3 = unaryKernelFunc2({ opSnippet: ERF }); + var erfConfig2 = { + kernelName: Erf, + backendName: "webgl", + kernelFunc: erf3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Exp.js + init_define_BUILD_VERSION(); + var EXP = CHECK_NAN_SNIPPET_UNARY + ` + return exp(x); +`; + var EXP_PACKED = ` + vec4 result = exp(x); + bvec4 isNaN = isnan(x); + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var exp3 = unaryKernelFunc2({ + opSnippet: EXP, + packedOpSnippet: EXP_PACKED, + cpuKernelImpl: expImplCPU, + dtype: "float32" + }); + var expConfig2 = { + kernelName: Exp, + backendName: "webgl", + kernelFunc: exp3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ExpandDims.js + init_define_BUILD_VERSION(); + function expandDims4(args) { + const { inputs, attrs, backend: backend2 } = args; + const { dim } = attrs; + const { input: input2 } = inputs; + const inputRank = input2.shape.length; + const newShape = input2.shape.slice(); + let $dim = dim; + if (dim < 0) { + util_exports.assert(-(inputRank + 1) <= dim, () => `Axis must be in the interval [${-(inputRank + 1)}, ${inputRank}]`); + $dim = inputRank + dim + 1; + } + newShape.splice($dim, 0, 1); + return reshape3({ inputs: { x: input2 }, backend: backend2, attrs: { shape: newShape } }); + } + var expandDimsConfig2 = { + kernelName: ExpandDims, + backendName: "webgl", + kernelFunc: expandDims4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Expm1.js + init_define_BUILD_VERSION(); + var EXPM1 = `return exp(x) - 1.0;`; + var expm13 = unaryKernelFunc2({ opSnippet: EXPM1, packedOpSnippet: EXPM1, cpuKernelImpl: expm1ImplCPU }); + var expm1Config2 = { + kernelName: Expm1, + backendName: "webgl", + kernelFunc: expm13 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT_impl.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/fft_gpu.js + init_define_BUILD_VERSION(); + var FFTProgram = class { + constructor(component, inputShape, inverse) { + this.variableNames = ["real", "imag"]; + const innerDim = inputShape[1]; + this.outputShape = inputShape; + const exponentMultiplierSnippet = inverse ? `2.0 * ${Math.PI}` : `-2.0 * ${Math.PI}`; + const resultDenominator = inverse ? `${innerDim}.0` : "1.0"; + let opString; + if (component === "real") { + opString = "return real * expR - imag * expI;"; + } else if (component === "imag") { + opString = "return real * expI + imag * expR;"; + } else { + throw new Error(`FFT component must be either "real" or "imag", got ${component}.`); + } + this.userCode = ` + const float exponentMultiplier = ${exponentMultiplierSnippet}; + + float unaryOpComplex(float real, float expR, float imag, float expI) { + ${opString} + } + + float mulMatDFT(int batch, int index) { + float indexRatio = float(index) / float(${innerDim}); + float exponentMultiplierTimesIndexRatio = + exponentMultiplier * indexRatio; + + float result = 0.0; + + for (int i = 0; i < ${innerDim}; i++) { + // x = (-2|2 * PI / N) * index * i; + float x = exponentMultiplierTimesIndexRatio * float(i); + float expR = cos(x); + float expI = sin(x); + float real = getReal(batch, i); + float imag = getImag(batch, i); + + result += + unaryOpComplex(real, expR, imag, expI) / ${resultDenominator}; + } + + return result; + } + + void main() { + ivec2 coords = getOutputCoords(); + setOutput(mulMatDFT(coords[0], coords[1])); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT_impl.js + function fftImpl2(x, inverse, backend2) { + const xData = backend2.texData.get(x.dataId); + const inputSize = util_exports.sizeFromShape(x.shape); + const innerDimensionSize = x.shape[x.shape.length - 1]; + const batch = inputSize / innerDimensionSize; + const input2D = reshape3({ inputs: { x }, backend: backend2, attrs: { shape: [batch, innerDimensionSize] } }); + const xShape = input2D.shape; + const realProgram = new FFTProgram("real", xShape, inverse); + const imagProgram = new FFTProgram("imag", xShape, inverse); + const inputs = [ + { + dataId: xData.complexTensorInfos.real.dataId, + dtype: xData.complexTensorInfos.real.dtype, + shape: xShape + }, + { + dataId: xData.complexTensorInfos.imag.dataId, + dtype: xData.complexTensorInfos.imag.dtype, + shape: xShape + } + ]; + const realPart = backend2.runWebGLProgram(realProgram, inputs, "float32"); + const imagPart = backend2.runWebGLProgram(imagProgram, inputs, "float32"); + const complexOutput = complex3({ inputs: { real: realPart, imag: imagPart }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(imagPart); + const complexOutputReshaped = reshape3({ inputs: { x: complexOutput }, backend: backend2, attrs: { shape: x.shape } }); + backend2.disposeIntermediateTensorInfo(input2D); + backend2.disposeIntermediateTensorInfo(complexOutput); + return complexOutputReshaped; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT.js + function fft3(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + return fftImpl2(input2, false, backend2); + } + var fftConfig2 = { + kernelName: FFT, + backendName: "webgl", + kernelFunc: fft3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Fill.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/fill_gpu.js + init_define_BUILD_VERSION(); + var FillProgram = class { + constructor(shape, value) { + this.outputShape = []; + this.customUniforms = [{ name: "value", type: "float" }]; + this.variableNames = ["x"]; + this.outputShape = shape; + this.userCode = ` + void main() { + // Input can be obtained from uniform value. + setOutput(value); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Fill.js + function fill3(args) { + const { backend: backend2, attrs } = args; + const { shape, value } = attrs; + let { dtype } = attrs; + dtype = dtype || util_exports.inferDtype(value); + if (dtype === "string") { + const values = util_exports.getArrayFromDType(dtype, util_exports.sizeFromShape(shape)); + values.fill(value); + return backend2.makeTensorInfo(shape, dtype, values); + } else { + const program = new FillProgram(shape, value); + const customValues = [[value]]; + return backend2.runWebGLProgram(program, [], dtype, customValues); + } + } + var fillConfig2 = { + kernelName: Fill, + backendName: "webgl", + kernelFunc: fill3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FlipLeftRight.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/flip_left_right_gpu.js + init_define_BUILD_VERSION(); + var FlipLeftRightProgram = class { + constructor(imageShape) { + this.variableNames = ["Image"]; + this.outputShape = []; + const imageWidth = imageShape[2]; + this.outputShape = imageShape; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int x = coords[2]; + + int coordX = ${imageWidth} - x - 1; + float outputValue; + if(coordX >= 0 && coordX < ${imageWidth}) { + outputValue = getImage(coords[0], coords[1], coordX, coords[3]); + } else { + outputValue = getImage(coords[0], coords[1], coords[2], coords[3]); + } + setOutput(outputValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FlipLeftRight.js + var flipLeftRightConfig2 = { + kernelName: FlipLeftRight, + backendName: "webgl", + kernelFunc: ({ inputs, backend: backend2 }) => { + const { image: image2 } = inputs; + const webglBackend = backend2; + const program = new FlipLeftRightProgram(image2.shape); + const output = webglBackend.runWebGLProgram(program, [image2], image2.dtype); + return output; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Floor.js + init_define_BUILD_VERSION(); + var FLOOR = `return floor(x);`; + var floor3 = unaryKernelFunc2({ opSnippet: FLOOR, packedOpSnippet: FLOOR, cpuKernelImpl: floorImplCPU }); + var floorConfig2 = { + kernelName: Floor, + backendName: "webgl", + kernelFunc: floor3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FloorDiv.js + init_define_BUILD_VERSION(); + var INT_DIV = ` + float s = sign(a) * sign(b); + int ia = round(a); + int ib = round(b); + if (ib != 0) { + // Windows (D3D) wants guaranteed non-zero int division at compile-time. + return float(idiv(ia, ib, s)); + } else { + return NAN; + } +`; + var INT_DIV_PACKED = ` + ivec4 ia = round(a); + ivec4 ib = round(b); + bvec4 cond = notEqual(ib, ivec4(0)); + ivec4 result = ivec4(0); + vec4 s = sign(a) * sign(b); + + // Windows (D3D) wants guaranteed non-zero int division at compile-time. + if (cond[0]) { + result[0] = idiv(ia[0], ib[0], s[0]); + } + if (cond[1]) { + result[1] = idiv(ia[1], ib[1], s[1]); + } + if (cond[2]) { + result[2] = idiv(ia[2], ib[2], s[2]); + } + if (cond[3]) { + result[3] = idiv(ia[3], ib[3], s[3]); + } + return vec4(result); +`; + var floorDiv3 = binaryKernelFunc2({ opSnippet: INT_DIV, packedOpSnippet: INT_DIV_PACKED, dtype: "int32" }); + var floorDivConfig2 = { + kernelName: FloorDiv, + backendName: "webgl", + kernelFunc: floorDiv3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels_utils/from_pixels_gpu.js + init_define_BUILD_VERSION(); + var FromPixelsProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + const glsl = getGlslDifferences(); + const [height, width] = outputShape; + this.outputShape = outputShape; + this.userCode = ` + void main() { + ivec3 coords = getOutputCoords(); + int texR = coords[0]; + int texC = coords[1]; + int depth = coords[2]; + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${width}.0, ${height}.0); + + vec4 values = ${glsl.texture2D}(A, uv); + float value; + if (depth == 0) { + value = values.r; + } else if (depth == 1) { + value = values.g; + } else if (depth == 2) { + value = values.b; + } else if (depth == 3) { + value = values.a; + } + + setOutput(floor(value * 255.0 + 0.5)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels_utils/from_pixels_packed_gpu.js + init_define_BUILD_VERSION(); + var FromPixelsPackedProgram = class { + constructor(outputShape) { + this.variableNames = ["A"]; + this.packedInputs = false; + this.packedOutput = true; + const glsl = getGlslDifferences(); + const [height, width] = outputShape; + this.outputShape = outputShape; + this.userCode = ` + void main() { + ivec3 coords = getOutputCoords(); + int texR = coords[0]; + int texC = coords[1]; + int depth = coords[2]; + + vec4 result = vec4(0.); + + for(int row=0; row<=1; row++) { + for(int col=0; col<=1; col++) { + texC = coords[1] + row; + depth = coords[2] + col; + + vec2 uv = (vec2(texC, texR) + halfCR) / + vec2(${width}.0, ${height}.0); + vec4 values = ${glsl.texture2D}(A, uv); + float value; + if (depth == 0) { + value = values.r; + } else if (depth == 1) { + value = values.g; + } else if (depth == 2) { + value = values.b; + } else if (depth == 3) { + value = values.a; + } + + result[row * 2 + col] = floor(value * 255.0 + 0.5); + } + } + + ${glsl.output} = result; + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels.js + var fromPixelsConfig = { + kernelName: FromPixels, + backendName: "webgl", + kernelFunc: fromPixels + }; + var fromPixels2DContext; + function fromPixels(args) { + const { inputs, backend: backend2, attrs } = args; + let { pixels } = inputs; + const { numChannels } = attrs; + const isVideo = typeof HTMLVideoElement !== "undefined" && pixels instanceof HTMLVideoElement; + const isImage = typeof HTMLImageElement !== "undefined" && pixels instanceof HTMLImageElement; + const [width, height] = isVideo ? [ + pixels.videoWidth, + pixels.videoHeight + ] : [pixels.width, pixels.height]; + const texShape = [height, width]; + const outShape = [height, width, numChannels]; + if (isImage || isVideo) { + if (fromPixels2DContext == null) { + fromPixels2DContext = document.createElement("canvas").getContext("2d"); + } + fromPixels2DContext.canvas.width = width; + fromPixels2DContext.canvas.height = height; + fromPixels2DContext.drawImage(pixels, 0, 0, width, height); + pixels = fromPixels2DContext.canvas; + } + const tempPixelHandle = backend2.makeTensorInfo(texShape, "int32"); + backend2.texData.get(tempPixelHandle.dataId).usage = TextureUsage.PIXELS; + backend2.gpgpu.uploadPixelDataToTexture(backend2.getTexture(tempPixelHandle.dataId), pixels); + const program = env().getBool("WEBGL_PACK") ? new FromPixelsPackedProgram(outShape) : new FromPixelsProgram(outShape); + const res = backend2.runWebGLProgram(program, [tempPixelHandle], "int32"); + backend2.disposeData(tempPixelHandle.dataId); + return res; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FusedConv2D.js + init_define_BUILD_VERSION(); + function fusedConv2d(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dataFormat, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode, false, $dataFormat); + let out; + const intermediates = []; + if (convInfo.filterHeight === 1 && convInfo.filterWidth === 1 && convInfo.dilationHeight === 1 && convInfo.dilationWidth === 1 && convInfo.strideHeight === 1 && convInfo.strideWidth === 1 && (convInfo.padInfo.type === "SAME" || convInfo.padInfo.type === "VALID")) { + out = conv2dByMatMul({ + x, + filter, + convInfo, + backend: backend2, + bias, + activation, + preluActivationWeights, + leakyreluAlpha + }); + } else if (env().getBool("WEBGL_CONV_IM2COL")) { + out = conv2dWithIm2Row({ + x, + filter, + convInfo, + backend: backend2, + bias, + activation, + preluActivationWeights, + leakyreluAlpha + }); + } else { + const hasBias = bias != null; + const hasPreluActivationWeights = preluActivationWeights != null; + const hasLeakyreluAlpha = activation === "leakyrelu"; + const fusedActivation = activation ? mapActivationToShaderProgram(activation, false) : null; + const program = new Conv2DProgram(convInfo, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha); + const inputs2 = [x, filter]; + const alignInputWithDataFormat = (input2, dataFormat2) => { + if (dataFormat2 === "NCHW" && input2.shape.length === 1 && input2.shape[0] !== 1) { + const alignedInput = reshape3({ + inputs: { x: input2 }, + backend: backend2, + attrs: { shape: [input2.shape[0], 1, 1] } + }); + intermediates.push(alignedInput); + return alignedInput; + } + return input2; + }; + if (hasBias) { + inputs2.push(alignInputWithDataFormat(bias, dataFormat)); + } + if (hasPreluActivationWeights) { + inputs2.push(alignInputWithDataFormat(preluActivationWeights, dataFormat)); + } + if (hasLeakyreluAlpha) { + const $leakyreluAlpha = backend2.makeTensorInfo([], "float32", util_exports.createScalarValue(leakyreluAlpha, "float32")); + inputs2.push($leakyreluAlpha); + intermediates.push($leakyreluAlpha); + } + out = backend2.runWebGLProgram(program, inputs2, "float32"); + } + const outReshaped = reshape3({ inputs: { x: out }, backend: backend2, attrs: { shape: convInfo.outShape } }); + intermediates.push(out); + intermediates.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return outReshaped; + } + var fusedConv2DConfig2 = { + kernelName: FusedConv2D, + backendName: "webgl", + kernelFunc: fusedConv2d + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FusedDepthwiseConv2D.js + init_define_BUILD_VERSION(); + function fusedDepthwiseConv2D2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs; + const intermediates = []; + let $dilations = dilations; + if ($dilations == null) { + $dilations = [1, 1]; + } + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, $dilations), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${strides} and dilations '${$dilations}'`); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad3, dimRoundingMode, true); + const shouldPackDepthwiseConv = env().getBool("WEBGL_PACK_DEPTHWISECONV") && convInfo.strideWidth <= 2 && convInfo.outChannels / convInfo.inChannels === 1; + const fusedActivation = activation ? mapActivationToShaderProgram(activation, shouldPackDepthwiseConv) : null; + const programInputs = [x, filter]; + const hasBias = bias != null; + const hasPreluActivationWeights = preluActivationWeights != null; + const hasLeakyreluAlpha = activation === "leakyrelu"; + if (hasBias) { + programInputs.push(bias); + } + if (hasPreluActivationWeights) { + programInputs.push(preluActivationWeights); + } + if (hasLeakyreluAlpha) { + const $leakyreluAlpha = backend2.makeTensorInfo([], "float32", util_exports.createScalarValue(leakyreluAlpha, "float32")); + programInputs.push($leakyreluAlpha); + intermediates.push($leakyreluAlpha); + } + let program; + if (shouldPackDepthwiseConv) { + program = new DepthwiseConvPacked2DProgram(convInfo, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha); + } else { + program = new DepthwiseConv2DProgram(convInfo, hasBias, fusedActivation, hasPreluActivationWeights, hasLeakyreluAlpha); + } + const customValues = [ + [convInfo.padInfo.top, convInfo.padInfo.left], + [convInfo.strideHeight, convInfo.strideWidth], + [convInfo.dilationHeight, convInfo.dilationWidth], + [convInfo.inHeight, convInfo.inWidth] + ]; + const result = backend2.runWebGLProgram(program, programInputs, "float32", customValues); + intermediates.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var fusedDepthwiseConv2DConfig2 = { + kernelName: FusedDepthwiseConv2D, + backendName: "webgl", + kernelFunc: fusedDepthwiseConv2D2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherNd.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gather_nd_gpu.js + init_define_BUILD_VERSION(); + var GatherNDProgram = class { + constructor(sliceDim, strides, shape, paramsShape) { + this.sliceDim = sliceDim; + this.strides = strides; + this.paramsShape = paramsShape; + this.variableNames = ["x", "indices"]; + this.outputShape = shape; + const stridesType = getCoordsDataType(strides.length); + const dtype = getCoordsDataType(shape.length); + const strideString = this.sliceDim > 1 ? "strides[j]" : "strides"; + const paramsShapeType = getCoordsDataType(paramsShape.length); + const paramsShapeString = paramsShape.length > 1 ? "paramsShape[j]" : "paramsShape"; + this.userCode = ` + ${stridesType} strides = ${stridesType}(${this.strides}); + ${paramsShapeType} paramsShape = ${paramsShapeType}(${this.paramsShape}); + void main() { + ${dtype} coords = getOutputCoords(); + int flattenIndex = 0; + bool out_of_bounds = false; + for (int j = 0; j < ${this.sliceDim}; j++) { + int index = round(getIndices(coords[0], j)); + out_of_bounds = out_of_bounds || index < 0; + out_of_bounds = out_of_bounds || index >= ${paramsShapeString}; + flattenIndex += index * ${strideString}; + } + setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1])); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherNd.js + function gatherNd2(args) { + const { inputs, backend: backend2 } = args; + const { params, indices } = inputs; + const indicesShape = indices.shape; + const sliceRank = indicesShape[indicesShape.length - 1]; + const paramsSize = util_exports.sizeFromShape(params.shape); + const [resultShape, numSlices, sliceSize, strides] = backend_util_exports.prepareAndValidate(params, indices); + const flattenIndices = reshape3({ inputs: { x: indices }, backend: backend2, attrs: { shape: [numSlices, sliceRank] } }); + const flattenX = reshape3({ + inputs: { x: params }, + backend: backend2, + attrs: { shape: [util_exports.sizeFromShape(params.shape) / sliceSize, sliceSize] } + }); + if (backend2.shouldExecuteOnCPU([params, indices]) || params.dtype === "string") { + const indicesData = backend2.readSync(indices.dataId); + const paramsBuf = backend2.bufferSync(params); + const outValue = gatherNdImplCPU(indicesData, paramsBuf, params.dtype, numSlices, sliceRank, sliceSize, strides, params.shape, paramsSize); + return backend2.makeTensorInfo(resultShape, params.dtype, outValue.values); + } + const program = new GatherNDProgram(sliceRank, strides, [numSlices, sliceSize], params.shape); + const res = backend2.runWebGLProgram(program, [flattenX, flattenIndices], flattenX.dtype); + const reshaped = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape: resultShape } }); + backend2.disposeIntermediateTensorInfo(flattenIndices); + backend2.disposeIntermediateTensorInfo(flattenX); + backend2.disposeIntermediateTensorInfo(res); + return reshaped; + } + var gatherNdConfig2 = { + kernelName: GatherNd, + backendName: "webgl", + kernelFunc: gatherNd2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherV2.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/gather_gpu.js + init_define_BUILD_VERSION(); + var GatherProgram = class { + constructor(aShape, outputShape) { + this.variableNames = ["A", "indices"]; + this.outputShape = outputShape; + this.rank = outputShape.length; + const dtype = getCoordsDataType(this.rank); + const sourceCoords = getSourceCoords2(aShape, 2); + this.userCode = ` + void main() { + ${dtype} resRC = getOutputCoords(); + int index = int(getIndices(resRC.x, resRC.z)); + float inBounds = (index >= 0) && (index < ${aShape[2]}) ? 1.0 : 0.0; + setOutput(inBounds * getA(${sourceCoords})); + } + `; + } + }; + function getSourceCoords2(aShape, axis) { + const currentCoords = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"]; + const sourceCoords = []; + for (let i = 0; i < aShape.length; i++) { + if (i === 2) { + sourceCoords.push("index"); + } else { + sourceCoords.push(`${currentCoords[i]}`); + } + } + return sourceCoords.join(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherV2.js + function gatherV22(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, indices } = inputs; + const { axis, batchDims } = attrs; + const parsedAxis = util_exports.parseAxisParam(axis, x.shape)[0]; + if (env().get("DEBUG")) { + const indicesVals = backend2.readSync(indices.dataId); + const axisDim = x.shape[parsedAxis]; + for (let i = 0; i < indicesVals.length; ++i) { + const index = indicesVals[i]; + util_exports.assert(index <= axisDim - 1 && index >= 0, () => `GatherV2: the index value ${index} is not in [0, ${axisDim - 1}]`); + } + } + const shapeInfo = backend_util_exports.segment_util.collectGatherOpShapeInfo(x, indices, parsedAxis, batchDims); + const indicesSize = util_exports.sizeFromShape(indices.shape); + const toDispose = []; + const flattenX = reshape3({ + inputs: { x }, + backend: backend2, + attrs: { + shape: [ + shapeInfo.batchSize, + shapeInfo.outerSize, + shapeInfo.dimSize, + shapeInfo.sliceSize + ] + } + }); + const flattenIndex = reshape3({ + inputs: { x: indices }, + backend: backend2, + attrs: { shape: [shapeInfo.batchSize, indicesSize / shapeInfo.batchSize] } + }); + toDispose.push(flattenX); + toDispose.push(flattenIndex); + const flattenOutputShape = [ + shapeInfo.batchSize, + shapeInfo.outerSize, + indicesSize / shapeInfo.batchSize, + shapeInfo.sliceSize + ]; + if (backend2.shouldExecuteOnCPU([x, indices]) || x.dtype === "string") { + const indicesBuf = backend2.bufferSync(flattenIndex); + const xBuf = backend2.bufferSync(flattenX); + const outBuf = gatherV2ImplCPU(xBuf, indicesBuf, flattenOutputShape); + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return backend2.makeTensorInfo(shapeInfo.outputShape, outBuf.dtype, outBuf.values); + } + const program = new GatherProgram(flattenX.shape, flattenOutputShape); + const res = backend2.runWebGLProgram(program, [flattenX, flattenIndex], flattenX.dtype); + toDispose.push(res); + const reshaped = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape: shapeInfo.outputShape } }); + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return reshaped; + } + var gatherV2Config2 = { + kernelName: GatherV2, + backendName: "webgl", + kernelFunc: gatherV22 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Greater.js + init_define_BUILD_VERSION(); + var GREATER = `return float(a > b);`; + var GREATER_PACKED = ` + return vec4(greaterThan(a, b)); +`; + var greater3 = binaryKernelFunc2({ + opSnippet: GREATER, + packedOpSnippet: GREATER_PACKED, + cpuKernelImpl: greaterImplCPU, + dtype: "bool" + }); + var greaterConfig2 = { + kernelName: Greater, + backendName: "webgl", + kernelFunc: greater3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GreaterEqual.js + init_define_BUILD_VERSION(); + var GREATER_EQUAL = `return float(a >= b);`; + var GREATER_EQUAL_PACKED = ` + return vec4(greaterThanEqual(a, b)); +`; + var greaterEqual3 = binaryKernelFunc2({ + opSnippet: GREATER_EQUAL, + packedOpSnippet: GREATER_EQUAL_PACKED, + dtype: "bool", + cpuKernelImpl: greaterEqualImplCPU + }); + var greaterEqualConfig2 = { + kernelName: GreaterEqual, + backendName: "webgl", + kernelFunc: greaterEqual3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IFFT.js + init_define_BUILD_VERSION(); + function ifft3(args) { + const { inputs, backend: backend2 } = args; + const { input: input2 } = inputs; + return fftImpl2(input2, true, backend2); + } + var ifftConfig2 = { + kernelName: IFFT, + backendName: "webgl", + kernelFunc: ifft3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsFinite.js + init_define_BUILD_VERSION(); + var IS_FINITE = `return float(!isnan(x) && !isinf(x));`; + var isFinite4 = unaryKernelFunc2({ opSnippet: IS_FINITE, dtype: "bool" }); + var isFiniteConfig2 = { + kernelName: IsFinite, + backendName: "webgl", + kernelFunc: isFinite4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsInf.js + init_define_BUILD_VERSION(); + var IS_INF = `return float(isinf(x));`; + var isInf3 = unaryKernelFunc2({ opSnippet: IS_INF, dtype: "bool" }); + var isInfConfig2 = { + kernelName: IsInf, + backendName: "webgl", + kernelFunc: isInf3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsNaN.js + init_define_BUILD_VERSION(); + var IS_NAN = `return float(isnan(x));`; + var isNaN4 = unaryKernelFunc2({ opSnippet: IS_NAN, dtype: "bool" }); + var isNaNConfig2 = { + kernelName: IsNan, + backendName: "webgl", + kernelFunc: isNaN4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Less.js + init_define_BUILD_VERSION(); + var LESS = `return float(a < b);`; + var LESS_PACKED = ` + return vec4(lessThan(a, b)); +`; + var less3 = binaryKernelFunc2({ + opSnippet: LESS, + packedOpSnippet: LESS_PACKED, + cpuKernelImpl: lessImplCPU, + dtype: "bool" + }); + var lessConfig2 = { + kernelName: Less, + backendName: "webgl", + kernelFunc: less3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LessEqual.js + init_define_BUILD_VERSION(); + var LESS_EQUAL = `return float(a <= b);`; + var LESS_EQUAL_PACKED = ` + return vec4(lessThanEqual(a, b)); +`; + var lessEqual3 = binaryKernelFunc2({ + opSnippet: LESS_EQUAL, + packedOpSnippet: LESS_EQUAL_PACKED, + cpuKernelImpl: lessEqualImplCPU, + dtype: "bool" + }); + var lessEqualConfig2 = { + kernelName: LessEqual, + backendName: "webgl", + kernelFunc: lessEqual3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LinSpace.js + init_define_BUILD_VERSION(); + function linSpace2(args) { + const { backend: backend2, attrs } = args; + const { start, stop, num } = attrs; + const outVals = linSpaceImplCPU(start, stop, num); + return backend2.makeTensorInfo([outVals.length], "float32", outVals); + } + var linSpaceConfig2 = { + kernelName: LinSpace, + backendName: "webgl", + kernelFunc: linSpace2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Log.js + init_define_BUILD_VERSION(); + var LOG = CHECK_NAN_SNIPPET_UNARY + ` + return x < 0.0 ? 0./0. : log(x); +`; + var LOG_PACKED = ` + vec4 result = log(x); + bvec4 isNaN = isnan(x); + result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r); + result.g = isNaN.g ? x.g : (x.g < 0.0 ? 0./0. : result.g); + result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b); + result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a); + return result; +`; + var log4 = unaryKernelFunc2({ opSnippet: LOG, packedOpSnippet: LOG_PACKED, cpuKernelImpl: logImplCPU }); + var logConfig2 = { + kernelName: Log, + backendName: "webgl", + kernelFunc: log4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Log1p.js + init_define_BUILD_VERSION(); + var LOG1P = CHECK_NAN_SNIPPET_UNARY + ` + return log(1.0 + x); +`; + var log1p3 = unaryKernelFunc2({ opSnippet: LOG1P }); + var log1pConfig2 = { + kernelName: Log1p, + backendName: "webgl", + kernelFunc: log1p3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalAnd.js + init_define_BUILD_VERSION(); + var LOGICAL_AND = `return float(a >= 1.0 && b >= 1.0);`; + var LOGICAL_AND_PACKED = ` + return vec4( + vec4(greaterThanEqual(a, vec4(1.0))) * + vec4(greaterThanEqual(b, vec4(1.0)))); +`; + var logicalAnd3 = binaryKernelFunc2({ + opSnippet: LOGICAL_AND, + packedOpSnippet: LOGICAL_AND_PACKED, + dtype: "bool" + }); + var logicalAndConfig2 = { + kernelName: LogicalAnd, + backendName: "webgl", + kernelFunc: logicalAnd3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalNot.js + init_define_BUILD_VERSION(); + var LOGICAL_NOT = `return float(!(x >= 1.0));`; + var logicalNot3 = unaryKernelFunc2({ opSnippet: LOGICAL_NOT }); + var logicalNotConfig2 = { + kernelName: LogicalNot, + backendName: "webgl", + kernelFunc: logicalNot3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalOr.js + init_define_BUILD_VERSION(); + var LOGICAL_OR = `return float(a >= 1.0 || b >= 1.0);`; + var LOGICAL_OR_PACKED = ` + return min( + vec4(greaterThanEqual(a, vec4(1.0))) + + vec4(greaterThanEqual(b, vec4(1.0))), + vec4(1.0)); +`; + var logicalOr3 = binaryKernelFunc2({ opSnippet: LOGICAL_OR, packedOpSnippet: LOGICAL_OR_PACKED, dtype: "bool" }); + var logicalOrConfig2 = { + kernelName: LogicalOr, + backendName: "webgl", + kernelFunc: logicalOr3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRN.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_gpu.js + init_define_BUILD_VERSION(); + var LRNProgram = class { + constructor(xShape, radius, bias, alpha, beta) { + this.variableNames = ["x"]; + this.outputShape = []; + const rad = radius; + const maxD = xShape[3] - 1; + this.outputShape = xShape; + let powOperator; + const basis = `float(${bias}) + float(${alpha}) * sum`; + if (beta === 0.5) { + powOperator = `inversesqrt(${basis})`; + } else if (beta === 1) { + powOperator = `1.0/(${basis})`; + } else { + powOperator = `exp(log(${basis}) * float(-${beta}));`; + } + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int r = coords[1]; + int c = coords[2]; + int d = coords[3]; + float x = getX(b, r, c, d); + float sum = 0.0; + for (int j = -${rad}; j <= ${rad}; j++) { + int idx = d + j; + if (idx >= 0 && idx <= ${maxD}) { + float z = getX(b, r, c, idx); + sum += z * z; + } + } + float val = x * ${powOperator}; + setOutput(val); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_packed_gpu.js + init_define_BUILD_VERSION(); + var LRNPackedProgram = class { + constructor(xShape, radius, bias, alpha, beta) { + this.variableNames = ["x"]; + this.outputShape = []; + this.packedInputs = true; + this.packedOutput = true; + const rad = radius; + const maxD = xShape[3] - 1; + this.outputShape = xShape; + let powOperator; + const basis = `float(${bias}) + float(${alpha}) * sum`; + if (beta === 0.5) { + powOperator = `inversesqrt(${basis})`; + } else if (beta === 1) { + powOperator = `1.0/(${basis})`; + } else { + powOperator = `exp(log(${basis}) * float(-${beta}));`; + } + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords.x; + int r = coords.y; + int c = coords.z; + int d = coords.w; + + bool hasNextCol = d < ${this.outputShape[3]}; + bool hasNextRow = c < ${this.outputShape[2]}; + + vec4 sum = vec4(0.); + vec4 xFragAtOutputCoords = getX(b, r, c, d); + + vec4 xAtOutputCoords = vec4( + getChannel(xFragAtOutputCoords, vec2(c, d)), + hasNextCol ? + getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0, + hasNextRow ? + getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0, + (hasNextRow && hasNextCol) ? + getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0 + ); + + int firstChannel = d - ${rad}; + vec2 cache = vec2(0.); + if(firstChannel >= 0){ + vec4 firstChannelFrag = getX(b, r, c, firstChannel); + cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel)); + if(hasNextRow){ + cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel)); + } + } + + ivec2 depth = ivec2(d, d + 1); + for (int j = - ${rad}; j <= ${rad}; j++) { + ivec2 idx = depth + j; + bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0)); + bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${maxD})); + + bool depthInRange = aboveLowerBound.x && belowUpperBound.x; + bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y; + + if(depthInRange || depthPlusOneInRange){ + vec4 z = vec4(0.); + vec4 xFragAtCurrentDepth; + z.xz = cache.xy; + if(depthPlusOneInRange && hasNextCol){ + xFragAtCurrentDepth = idx.y != d ? + getX(b, r, c, idx.y) : xFragAtOutputCoords; + z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y)); + if(hasNextRow){ + z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y)); + } + } + cache.xy = z.yw; + sum += z * z; + } + } + vec4 result = xAtOutputCoords * ${powOperator}; + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRN.js + var lrn = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { depthRadius, bias, alpha, beta } = attrs; + const program = env().getBool("WEBGL_PACK_NORMALIZATION") ? new LRNPackedProgram(x.shape, depthRadius, bias, alpha, beta) : new LRNProgram(x.shape, depthRadius, bias, alpha, beta); + return backend2.runWebGLProgram(program, [x], x.dtype); + }; + var LRNConfig2 = { + kernelName: LRN, + backendName: "webgl", + kernelFunc: lrn + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRNGrad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_grad_gpu.js + init_define_BUILD_VERSION(); + var LRNGradProgram = class { + constructor(inputShape, depthRadius, bias, alpha, beta) { + this.variableNames = ["inputImage", "outputImage", "dy"]; + this.outputShape = []; + this.outputShape = inputShape; + this.depth = inputShape[3]; + this.depthRadius = depthRadius; + this.bias = bias; + this.alpha = alpha; + this.beta = beta; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int r = coords[1]; + int c = coords[2]; + + float result = 0.0; + for (int d = 0; d < ${this.depth}; ++d) { + int depthBegin = int(max(0.0, float(d - ${depthRadius}))); + int depthEnd = int(min(float(${this.depth}), + float(d + ${depthRadius} + 1))); + + const int MIN_DEPTH_BEGIN = 0; + const int MAX_DEPTH_END = ${this.depth}; + + float norm = 0.0; + for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) { + if (k < depthBegin){ + continue; + } + else if (k >= depthBegin && k < depthEnd) { + norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k); + } + else { + break; + } + } + + norm = float(${alpha}) * norm + float(${bias}); + + for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){ + if (k < depthBegin){ + continue; + } + else if (k >= depthBegin && k < depthEnd){ + float dyi = -2.0 * float(${alpha}) + * float(${beta}) + * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d) + / norm; + if (k == d) { + dyi += pow(norm, -1.0 * ${beta}); + } + if (k == coords[3]) { + dyi *= getDy(b, r, c, d); + result += dyi; + } + } + else { + break; + } + } + } + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRNGrad.js + var lrnGrad = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { x, y, dy } = inputs; + const { depthRadius, bias, alpha, beta } = attrs; + const program = new LRNGradProgram(x.shape, depthRadius, bias, alpha, beta); + return backend2.runWebGLProgram(program, [x, y, dy], x.dtype); + }; + var LRNGradConfig2 = { + kernelName: LRNGrad, + backendName: "webgl", + kernelFunc: lrnGrad + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Max.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Max_impl.js + init_define_BUILD_VERSION(); + function maxImpl2(x, reduceShape, outShape, backend2) { + const inSize = util_exports.sizeFromShape(reduceShape); + const xSize = util_exports.sizeFromShape(x.shape); + const batchSize = xSize / inSize; + const reshapedInput = reshape3({ inputs: { x }, attrs: { shape: [batchSize, inSize] }, backend: backend2 }); + const reduced = reduce(reshapedInput, x.dtype, "max", backend2); + const reshapedOutput = reshape3({ inputs: { x: reduced }, attrs: { shape: outShape }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(reshapedInput); + backend2.disposeIntermediateTensorInfo(reduced); + return reshapedOutput; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Max.js + function max4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { reductionIndices, keepDims } = attrs; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(reductionIndices, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + const maxInputIsTransposed = permutedAxes != null; + const shouldExecuteOnCPU = backend2.shouldExecuteOnCPU([x]); + let maxInput = x; + if (maxInputIsTransposed) { + if (shouldExecuteOnCPU) { + const xTexData = backend2.texData.get(maxInput.dataId); + const values = xTexData.values; + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = x.shape[permutedAxes[i]]; + } + const maxInputValues = transposeImplCPU(values, x.shape, x.dtype, permutedAxes, newShape); + maxInput = backend2.makeTensorInfo(newShape, x.dtype); + const maxInputData = backend2.texData.get(maxInput.dataId); + maxInputData.values = maxInputValues; + } else { + maxInput = transposeImpl2(x, permutedAxes, backend2); + } + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("max", axes, xRank); + const [maxOutShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(maxInput.shape, axes); + let outShape = maxOutShape; + if (keepDims) { + outShape = backend_util_exports.expandShapeToKeepDim(maxOutShape, origAxes); + } + let out; + if (shouldExecuteOnCPU) { + const xTexData = backend2.texData.get(maxInput.dataId); + const values = xTexData.values; + const outValues = maxImplCPU(values, util_exports.sizeFromShape(reduceShape), outShape, x.dtype); + out = backend2.makeTensorInfo(outShape, x.dtype); + const outData = backend2.texData.get(out.dataId); + outData.values = outValues; + } else { + out = maxImpl2(maxInput, reduceShape, outShape, backend2); + } + if (maxInputIsTransposed) { + backend2.disposeIntermediateTensorInfo(maxInput); + } + return out; + } + var maxConfig2 = { + kernelName: Max, + backendName: "webgl", + kernelFunc: max4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Maximum.js + init_define_BUILD_VERSION(); + var MAXIMUM = CHECK_NAN_SNIPPET2 + ` + return max(a, b); +`; + var MAXIMUM_PACKED = ` + vec4 result = vec4(max(a, b)); + vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); + ` + CHECK_NAN_SNIPPET3 + ` + return result; +`; + var maximum3 = binaryKernelFunc2({ + opSnippet: MAXIMUM, + packedOpSnippet: MAXIMUM_PACKED, + cpuKernelImpl: maximumImplCPU + }); + var maximumConfig2 = { + kernelName: Maximum, + backendName: "webgl", + kernelFunc: maximum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool.js + init_define_BUILD_VERSION(); + function maxPool3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + assertNotComplex2(x, "maxPool"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = 1; + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 && util_exports.arraysEqual(convInfo.inShape, convInfo.outShape)) { + return identity2({ inputs: { x }, backend: backend2 }); + } + const maxPoolProgram = new Pool2DProgram(convInfo, "max", false); + return backend2.runWebGLProgram(maxPoolProgram, [x], x.dtype); + } + var maxPoolConfig2 = { + kernelName: MaxPool, + backendName: "webgl", + kernelFunc: maxPool3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool3D.js + init_define_BUILD_VERSION(); + function maxPool3d2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { filterSize, strides, pad: pad3, dataFormat, dimRoundingMode } = attrs; + const dilations = [1, 1, 1]; + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode, dataFormat); + const maxPoolProgram = new Pool3DProgram(convInfo, "max", false); + return backend2.runWebGLProgram(maxPoolProgram, [x], x.dtype); + } + var maxPool3DConfig2 = { + kernelName: MaxPool3D, + backendName: "webgl", + kernelFunc: maxPool3d2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool3DGrad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/max_pool_backprop_gpu.js + init_define_BUILD_VERSION(); + var MaxPool2DBackpropProgram = class { + constructor(convInfo) { + this.variableNames = ["dy", "maxPos"]; + this.outputShape = convInfo.inShape; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationHeight = convInfo.dilationHeight; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const lastIndex = effectiveFilterHeight * effectiveFilterWidth - 1; + this.userCode = ` + const ivec2 pads = ivec2(${padTop}, ${padLeft}); + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + + ivec2 dyRCCorner = coords.yz - pads; + int dyRCorner = dyRCCorner.x; + int dyCCorner = dyRCCorner.y; + + // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + for (int wC = 0; wC < ${effectiveFilterWidth}; wC++) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + float dyValue = getDy(b, idyR, idyC, d); + int maxPosValue = ${lastIndex} - int(getMaxPos(b, idyR, idyC, d)); + + // Get the current value, check it against the value from the + // position matrix. + int curPosValue = wR * ${effectiveFilterWidth} + wC; + float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); + + dotProd += dyValue * mask; + } + } + setOutput(dotProd); + } + `; + } + }; + var MaxPool3DBackpropProgram = class { + constructor(convInfo) { + this.variableNames = ["dy", "maxPos"]; + this.outputShape = convInfo.inShape; + const strideDepth = convInfo.strideDepth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const dilationDepth = convInfo.dilationDepth; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const effectiveFilterDepth = convInfo.effectiveFilterDepth; + const effectiveFilterHeight = convInfo.effectiveFilterHeight; + const effectiveFilterWidth = convInfo.effectiveFilterWidth; + const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front; + const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top; + const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left; + const lastIndex = effectiveFilterDepth * effectiveFilterHeight * effectiveFilterWidth - 1; + this.userCode = ` + const ivec3 pads = ivec3(${padFront}, ${padTop}, ${padLeft}); + + void main() { + ivec5 coords = getOutputCoords(); + int batch = coords.x; + int ch = coords.u; + + ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; + int dyDCorner = dyCorner.x; + int dyRCorner = dyCorner.y; + int dyCCorner = dyCorner.z; + + // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get + // dx(xD, xR, xC, ch). + // ? = to be determined. : = across all values in that axis. + float dotProd = 0.0; + + for (int wD = 0; wD < ${effectiveFilterDepth}; + wD += ${dilationDepth}) { + float dyD = float(dyDCorner + wD) / ${strideDepth}.0; + + if (dyD < 0.0 || dyD >= ${convInfo.outDepth}.0 || fract(dyD) > 0.0) { + continue; + } + int idyD = int(dyD); + + for (int wR = 0; wR < ${effectiveFilterHeight}; + wR += ${dilationHeight}) { + float dyR = float(dyRCorner + wR) / ${strideHeight}.0; + + if (dyR < 0.0 || dyR >= ${convInfo.outHeight}.0 || + fract(dyR) > 0.0) { + continue; + } + int idyR = int(dyR); + + for (int wC = 0; wC < ${effectiveFilterWidth}; + wC += ${dilationWidth}) { + float dyC = float(dyCCorner + wC) / ${strideWidth}.0; + + if (dyC < 0.0 || dyC >= ${convInfo.outWidth}.0 || + fract(dyC) > 0.0) { + continue; + } + int idyC = int(dyC); + + float dyValue = getDy(batch, idyD, idyR, idyC, ch); + int maxPosValue = ${lastIndex} - + int(getMaxPos(batch, idyD, idyR, idyC, ch)); + + // Get the current value, check it against the value from the + // position matrix. + int curPosValue = + wD * ${effectiveFilterHeight} * ${effectiveFilterWidth} + + wR * ${effectiveFilterWidth} + wC; + float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); + + dotProd += dyValue * mask; + } + } + } + setOutput(dotProd); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool3DGrad.js + function maxPool3DGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2 } = inputs; + const x = input2; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const dilations = [1, 1, 1]; + const convInfo = backend_util_exports.computePool3DInfo(x.shape, filterSize, strides, dilations, pad3, dimRoundingMode); + const maxPool3dPositionsProgram = new Pool3DProgram(convInfo, "max", true); + const maxPool3dPositions2 = backend2.runWebGLProgram(maxPool3dPositionsProgram, [x], x.dtype); + const maxPoolBackpropProgram = new MaxPool3DBackpropProgram(convInfo); + const result = backend2.runWebGLProgram(maxPoolBackpropProgram, [dy, maxPool3dPositions2], x.dtype); + backend2.disposeIntermediateTensorInfo(maxPool3dPositions2); + return result; + } + var maxPool3DGradConfig3 = { + kernelName: MaxPool3DGrad, + backendName: "webgl", + kernelFunc: maxPool3DGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolGrad.js + init_define_BUILD_VERSION(); + function maxPoolGrad3(args) { + const { inputs, backend: backend2, attrs } = args; + const { dy, input: input2, output } = inputs; + const x = input2; + assertNotComplex2([input2, output], "maxPoolGrad"); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const getPositions = true; + const maxPoolPositionsProgram = new Pool2DProgram(convInfo, "max", getPositions); + const maxPoolPositions2 = backend2.runWebGLProgram(maxPoolPositionsProgram, [x], x.dtype); + const maxPoolBackPropProgram = new MaxPool2DBackpropProgram(convInfo); + const result = backend2.runWebGLProgram(maxPoolBackPropProgram, [dy, maxPoolPositions2], x.dtype); + backend2.disposeIntermediateTensorInfo(maxPoolPositions2); + return result; + } + var maxPoolGradConfig3 = { + kernelName: MaxPoolGrad, + backendName: "webgl", + kernelFunc: maxPoolGrad3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolWithArgmax.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolWithArgmax_impl.js + init_define_BUILD_VERSION(); + function maxPoolWithArgmaxImpl2(x, includeBatchInIndex, convInfo, backend2) { + let program = new Pool2DProgram(convInfo, "max", false); + const poolOutput = backend2.runWebGLProgram(program, [x], "float32"); + program = new Pool2DProgram(convInfo, "max", true, true, includeBatchInIndex); + const indexOutput = backend2.runWebGLProgram(program, [x], "float32"); + return [poolOutput, indexOutput]; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolWithArgmax.js + var maxPoolWithArgmaxConfig2 = { + kernelName: MaxPoolWithArgmax, + backendName: "webgl", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { x } = inputs; + const { filterSize, strides, pad: pad3, includeBatchInIndex } = attrs; + const webglBackend = backend2; + util_exports.assert(x.shape.length === 4, () => `Error in maxPool: input must be rank 4 but got rank ${x.shape.length}.`); + const dilations = [1, 1]; + util_exports.assert(backend_util_exports.eitherStridesOrDilationsAreOne(strides, dilations), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${strides} and dilations '${dilations}'`); + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, dilations, pad3); + const [result, indexes] = maxPoolWithArgmaxImpl2(x, includeBatchInIndex, convInfo, webglBackend); + return [result, indexes]; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mean.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mean_impl.js + init_define_BUILD_VERSION(); + function meanImpl(x, reduceShape, outShape, backend2) { + const inSize = util_exports.sizeFromShape(reduceShape); + const xSize = util_exports.sizeFromShape(x.shape); + const batchSize = xSize / inSize; + const reshapedInput = reshape3({ inputs: { x }, attrs: { shape: [batchSize, inSize] }, backend: backend2 }); + const reduced = reduce(reshapedInput, "float32", "mean", backend2); + const reshapedOutput = reshape3({ inputs: { x: reduced }, attrs: { shape: outShape }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(reshapedInput); + backend2.disposeIntermediateTensorInfo(reduced); + return reshapedOutput; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mean.js + var meanConfig2 = { + kernelName: Mean, + backendName: "webgl", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { x } = inputs; + const { keepDims, axis } = attrs; + const webglBackend = backend2; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + const meanInputIsTransposed = permutedAxes != null; + const shouldExecuteOnCPU = webglBackend.shouldExecuteOnCPU([x]); + const intermediates = []; + let meanInput = x; + if (meanInputIsTransposed) { + if (shouldExecuteOnCPU) { + const xTexData = webglBackend.texData.get(meanInput.dataId); + const values = xTexData.values; + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = x.shape[permutedAxes[i]]; + } + const meanInputValues = transposeImplCPU(values, x.shape, x.dtype, permutedAxes, newShape); + meanInput = webglBackend.makeTensorInfo(newShape, x.dtype); + const meanInputData = webglBackend.texData.get(meanInput.dataId); + meanInputData.values = meanInputValues; + } else { + meanInput = transposeImpl2(x, permutedAxes, webglBackend); + } + intermediates.push(meanInput); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + } + backend_util_exports.assertAxesAreInnerMostDims("sum", axes, xRank); + const [meanOutShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(meanInput.shape, axes); + let outShape = meanOutShape; + if (keepDims) { + outShape = backend_util_exports.expandShapeToKeepDim(meanOutShape, origAxes); + } + const out = meanImpl(meanInput, reduceShape, outShape, webglBackend); + for (const i of intermediates) { + webglBackend.disposeIntermediateTensorInfo(i); + } + return out; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Min.js + init_define_BUILD_VERSION(); + function min4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + const xRank = x.shape.length; + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let permutedX = x; + if (permutedAxes != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, x.shape.length); + } + backend_util_exports.assertAxesAreInnerMostDims("min", axes, xRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(permutedX.shape, axes); + const inSize = util_exports.sizeFromShape(reduceShape); + const a2D = reshape3({ inputs: { x: permutedX }, backend: backend2, attrs: { shape: [-1, inSize] } }); + const reduced = reduce(a2D, a2D.dtype, "min", backend2); + let res; + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(outShape, origAxes); + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: newShape } }); + } else { + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: outShape } }); + } + backend2.disposeIntermediateTensorInfo(a2D); + backend2.disposeIntermediateTensorInfo(reduced); + if (permutedAxes != null) { + backend2.disposeIntermediateTensorInfo(permutedX); + } + return res; + } + var minConfig2 = { + kernelName: Min, + backendName: "webgl", + kernelFunc: min4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Minimum.js + init_define_BUILD_VERSION(); + var MINIMUM = CHECK_NAN_SNIPPET2 + ` + return min(a, b); +`; + var MINIMUM_PACKED = ` + vec4 result = vec4(min(a, b)); + vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); + ` + CHECK_NAN_SNIPPET3 + ` + return result; +`; + var minimum3 = binaryKernelFunc2({ + opSnippet: MINIMUM, + packedOpSnippet: MINIMUM_PACKED, + cpuKernelImpl: minimumImplCPU + }); + var minimumConfig2 = { + kernelName: Minimum, + backendName: "webgl", + kernelFunc: minimum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MirrorPad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/mirror_pad_gpu.js + init_define_BUILD_VERSION(); + var MirrorPadProgram = class { + constructor(xShape, paddings, mode) { + this.variableNames = ["x"]; + this.outputShape = paddings.map((p2, i) => p2[0] + xShape[i] + p2[1]); + const rank = xShape.length; + const dtype = getCoordsDataType(rank); + const start = paddings.map((p2) => p2[0]).join(","); + const end = paddings.map((p2, i) => p2[0] + xShape[i]).join(","); + const unpackedCoords = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, rank); + const offset = mode === "reflect" ? 0 : 1; + if (rank === 1) { + this.userCode = ` + int start = ${start}; + int end = ${end}; + + void main() { + int outC = getOutputCoords(); + if (outC < start) { + outC = start * 2 - outC - ${offset}; + } else if(outC >= end) { + outC = (end - 1) * 2 - outC + ${offset}; + } + setOutput(getX(outC - start)); + } + `; + return; + } + this.userCode = ` + ${dtype} start = ${dtype}(${start}); + ${dtype} end = ${dtype}(${end}); + + void main() { + ${dtype} outC = getOutputCoords(); + for (int i = 0; i < ${rank}; i++) { + if (outC[i] < start[i]) { + outC[i] = start[i] * 2 - outC[i] - ${offset}; + } else if(outC[i] >= end[i]) { + outC[i] = (end[i] - 1) * 2 - outC[i] + ${offset}; + } + } + ${dtype} coords = outC - start; + setOutput(getX(${unpackedCoords})); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/mirror_pad_packed_gpu.js + init_define_BUILD_VERSION(); + var MirrorPadPackedProgram = class { + constructor(xShape, paddings, mode) { + this.variableNames = ["x"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = paddings.map((p2, i) => p2[0] + xShape[i] + p2[1]); + const rank = xShape.length; + const dtype = getCoordsDataType(rank); + const start = paddings.map((p2) => p2[0]).join(","); + const end = paddings.map((p2, i) => p2[0] + xShape[i]).join(","); + const coords2 = getChannels("rc", rank); + const source = getChannels("source", rank); + const cLimit = `${coords2[rank - 1]} < ${this.outputShape[rank - 1]}`; + const innerDims = rank === 1 ? "source" : `vec2(${source.slice(-2).join()})`; + const offset = mode === "reflect" ? 0 : 1; + let mainLoop = ""; + if (rank === 1) { + const padSetup = ` + ${dtype} source = rc; + if (source < start) { + source = start * 2 - source - ${offset}; + } else if (source >= end) { + source = (end - 1) * 2 - source + ${offset}; + } + source -= start; + `; + mainLoop = ` + ${dtype} rc = outputLoc; + ${padSetup} + result[0] = getChannel(getX(${source.join()}), ${innerDims}); + ${coords2[rank - 1]} += 1; + if(${cLimit}) { + ${padSetup} + result[1] = getChannel(getX(${source.join()}), ${innerDims}); + } + `; + } else { + const padSetup = ` + ${dtype} source = rc; + ${dtype} lt = ${dtype}(lessThan(source, start)); + ${dtype} gte = ${dtype}(greaterThanEqual(source, end)); + ${dtype} orig = 1 - (lt + gte); + source = orig * source + + lt * (start * 2 - source - ${offset}) + + gte * ((end - 1) * 2 - source + ${offset}); + source -= start; + `; + mainLoop = ` + ${dtype} rc = outputLoc; + ${padSetup} + result[0] = getChannel(getX(${source.join()}), ${innerDims}); + ${coords2[rank - 1]} += 1; + if(${cLimit}) { + ${padSetup} + result[1] = getChannel(getX(${source.join()}), ${innerDims}); + } + rc = outputLoc; + ${coords2[rank - 2]} += 1; + if(${coords2[rank - 2]} < ${this.outputShape[rank - 2]}) { + ${padSetup} + result[2] = getChannel(getX(${source.join()}), ${innerDims}); + ${coords2[rank - 1]} += 1; + if(${cLimit}) { + ${padSetup} + result[3] = getChannel(getX(${source.join()}), ${innerDims}); + } + } + `; + } + this.userCode = ` + const ${dtype} start = ${dtype}(${start}); + const ${dtype} end = ${dtype}(${end}); + + void main() { + ${dtype} outputLoc = getOutputCoords(); + vec4 result = vec4(0.); + ${mainLoop} + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MirrorPad.js + var mirrorPadKernelFunc = ({ inputs, backend: backend2, attrs }) => { + const { x } = inputs; + const { paddings, mode } = attrs; + const program = env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new MirrorPadPackedProgram(x.shape, paddings, mode) : new MirrorPadProgram(x.shape, paddings, mode); + const output = backend2.runWebGLProgram(program, [x], x.dtype); + return output; + }; + var mirrorPadConfig2 = { + kernelName: MirrorPad, + backendName: "webgl", + kernelFunc: mirrorPadKernelFunc + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mod.js + init_define_BUILD_VERSION(); + var MOD = `if (b == 0.0) return NAN; + return mod(a, b);`; + var MOD_PACKED = ` + vec4 result = mod(a, b); + vec4 isNaN = vec4(equal(b, vec4(0.0))); + ` + CHECK_NAN_SNIPPET3 + ` + return result; +`; + var mod3 = binaryKernelFunc2({ + opSnippet: MOD, + packedOpSnippet: MOD_PACKED + }); + var modConfig2 = { + kernelName: Mod, + backendName: "webgl", + kernelFunc: mod3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multinomial.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/multinomial_gpu.js + init_define_BUILD_VERSION(); + var MultinomialProgram = class { + constructor(batchSize, numOutcomes, numSamples) { + this.variableNames = ["probs"]; + this.customUniforms = [{ name: "seed", type: "float" }]; + this.outputShape = [batchSize, numSamples]; + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + + float r = random(seed); + float cdf = 0.0; + + for (int i = 0; i < ${numOutcomes - 1}; i++) { + cdf += getProbs(batch, i); + + if (r < cdf) { + setOutput(float(i)); + return; + } + } + + // If no other event happened, last event happened. + setOutput(float(${numOutcomes - 1})); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Softmax.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RealDiv.js + init_define_BUILD_VERSION(); + var DIV = ` +if (a == b) { + return 1.0; +}; +return a / b;`; + var DIV_PACKED = ` + // vec4 one = vec4(equal(a, b)); + // return one + (vec4(1.0) - one) * a / b; + vec4 result = a / b; + if(a.x == b.x) { + result.x = 1.; + } + if(a.y == b.y) { + result.y = 1.; + } + if(a.z == b.z) { + result.z = 1.; + } + if(a.w == b.w) { + result.w = 1.; + } + + return result; +`; + var realDiv = binaryKernelFunc2({ opSnippet: DIV, packedOpSnippet: DIV_PACKED, checkOutOfBounds: true }); + var realDivConfig2 = { + kernelName: RealDiv, + backendName: "webgl", + kernelFunc: realDiv + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sub.js + init_define_BUILD_VERSION(); + var SUB = "return a - b;"; + var sub3 = binaryKernelFunc2({ + opSnippet: SUB, + packedOpSnippet: SUB, + supportsComplex: true, + cpuKernelImpl: subImplCPU + }); + var subConfig2 = { + kernelName: Sub, + backendName: "webgl", + kernelFunc: sub3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Softmax.js + function softmax3(args) { + const { inputs, backend: backend2, attrs } = args; + const { logits } = inputs; + const { dim } = attrs; + const axes = util_exports.parseAxisParam([dim], logits.shape); + const maxLogit = max4({ + inputs: { x: logits }, + backend: backend2, + attrs: { reductionIndices: axes, keepDims: false } + }); + const expandedShape = backend_util_exports.expandShapeToKeepDim(maxLogit.shape, axes); + const maxLogitsReshaped = reshape3({ inputs: { x: maxLogit }, backend: backend2, attrs: { shape: expandedShape } }); + const a = sub3({ inputs: { a: logits, b: maxLogitsReshaped }, backend: backend2 }); + const b = exp3({ inputs: { x: a }, backend: backend2 }); + const sumExp = sum4({ inputs: { x: b }, backend: backend2, attrs: { axis: axes, keepDims: false } }); + const sumExpReshaped = reshape3({ inputs: { x: sumExp }, backend: backend2, attrs: { shape: expandedShape } }); + const res = realDiv({ inputs: { a: b, b: sumExpReshaped }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(maxLogit); + backend2.disposeIntermediateTensorInfo(maxLogitsReshaped); + backend2.disposeIntermediateTensorInfo(a); + backend2.disposeIntermediateTensorInfo(b); + backend2.disposeIntermediateTensorInfo(sumExp); + backend2.disposeIntermediateTensorInfo(sumExpReshaped); + return res; + } + var softmaxConfig2 = { + kernelName: Softmax, + backendName: "webgl", + kernelFunc: softmax3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multinomial.js + function multinomial2(args) { + const { inputs, backend: backend2, attrs } = args; + const { logits } = inputs; + const { numSamples, seed, normalized } = attrs; + const probs = normalized ? logits : softmax3({ inputs: { logits }, backend: backend2, attrs: { dim: logits.shape.length - 1 } }); + const batchSize = probs.shape[0]; + const numOutcomes = probs.shape[1]; + const program = new MultinomialProgram(batchSize, numOutcomes, numSamples); + const customValues = [[seed]]; + const res = backend2.runWebGLProgram(program, [probs], "int32", customValues); + if (!normalized) { + backend2.disposeIntermediateTensorInfo(probs); + } + return res; + } + var multinomialConfig2 = { + kernelName: Multinomial, + backendName: "webgl", + kernelFunc: multinomial2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Neg.js + init_define_BUILD_VERSION(); + var NEG = CHECK_NAN_SNIPPET + ` + return -x; +`; + var NEG_PACKED = ` + vec4 result = -x; + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + function neg3(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (backend2.shouldExecuteOnCPU([x])) { + const xData = backend2.texData.get(x.dataId); + const [outValues, newShape] = negImplCPU(xData.values, x.shape, x.dtype); + return backend2.makeTensorInfo(newShape, x.dtype, outValues); + } + let program; + if (env().getBool("WEBGL_PACK_UNARY_OPERATIONS")) { + program = new UnaryOpPackedProgram(x.shape, NEG_PACKED); + } else { + program = new UnaryOpProgram(x.shape, NEG); + } + return backend2.runWebGLProgram(program, [x], x.dtype); + } + var negConfig2 = { + kernelName: Neg, + backendName: "webgl", + kernelFunc: neg3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV3.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV3Impl3 = kernel_impls_exports.nonMaxSuppressionV3Impl; + function nonMaxSuppressionV32(args) { + backend_util_exports.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold } = attrs; + const boxesVals = backend2.readSync(boxes.dataId); + const scoresVals = backend2.readSync(scores.dataId); + const { selectedIndices } = nonMaxSuppressionV3Impl3(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold); + return backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)); + } + var nonMaxSuppressionV3Config2 = { + kernelName: NonMaxSuppressionV3, + backendName: "webgl", + kernelFunc: nonMaxSuppressionV32 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV4.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV4Impl3 = kernel_impls_exports.nonMaxSuppressionV4Impl; + function nonMaxSuppressionV42(args) { + backend_util_exports.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize } = attrs; + const boxesVals = backend2.readSync(boxes.dataId); + const scoresVals = backend2.readSync(scores.dataId); + const { selectedIndices, validOutputs } = nonMaxSuppressionV4Impl3(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize); + return [ + backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)), + backend2.makeTensorInfo([], "int32", new Int32Array([validOutputs])) + ]; + } + var nonMaxSuppressionV4Config2 = { + kernelName: NonMaxSuppressionV4, + backendName: "webgl", + kernelFunc: nonMaxSuppressionV42 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV5.js + init_define_BUILD_VERSION(); + var nonMaxSuppressionV5Impl3 = kernel_impls_exports.nonMaxSuppressionV5Impl; + function nonMaxSuppressionV52(args) { + backend_util_exports.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + const { inputs, backend: backend2, attrs } = args; + const { boxes, scores } = inputs; + const { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma } = attrs; + const boxesVals = backend2.readSync(boxes.dataId); + const scoresVals = backend2.readSync(scores.dataId); + const maxOutputSizeVal = maxOutputSize; + const iouThresholdVal = iouThreshold; + const scoreThresholdVal = scoreThreshold; + const softNmsSigmaVal = softNmsSigma; + const { selectedIndices, selectedScores } = nonMaxSuppressionV5Impl3(boxesVals, scoresVals, maxOutputSizeVal, iouThresholdVal, scoreThresholdVal, softNmsSigmaVal); + return [ + backend2.makeTensorInfo([selectedIndices.length], "int32", new Int32Array(selectedIndices)), + backend2.makeTensorInfo([selectedScores.length], "float32", new Float32Array(selectedScores)) + ]; + } + var nonMaxSuppressionV5Config2 = { + kernelName: NonMaxSuppressionV5, + backendName: "webgl", + kernelFunc: nonMaxSuppressionV52 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OneHot.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/onehot_gpu.js + init_define_BUILD_VERSION(); + var OneHotProgram = class { + constructor(numIndices, depth, onValue, offValue) { + this.variableNames = ["indices"]; + this.outputShape = [numIndices, depth]; + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + int index = round(getIndices(coords.x)); + setOutput(mix(float(${offValue}), float(${onValue}), + float(index == coords.y))); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OneHot.js + var oneHot3 = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { indices } = inputs; + const { depth, onValue, offValue } = attrs; + const indicesSize = util_exports.sizeFromShape(indices.shape); + const program = new OneHotProgram(indicesSize, depth, onValue, offValue); + const reshaped = reshape3({ inputs: { x: indices }, backend: backend2, attrs: { shape: [indicesSize] } }); + const result = backend2.runWebGLProgram(program, [reshaped], indices.dtype); + backend2.disposeIntermediateTensorInfo(reshaped); + const outShape = [...indices.shape, depth]; + const out = reshape3({ inputs: { x: result }, backend: backend2, attrs: { shape: outShape } }); + backend2.disposeIntermediateTensorInfo(result); + return out; + }; + var oneHotConfig2 = { + kernelName: OneHot, + backendName: "webgl", + kernelFunc: oneHot3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OnesLike.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ZerosLike.js + init_define_BUILD_VERSION(); + function zerosLike3(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (x.dtype === "complex64") { + const realPart = real3({ inputs: { input: x }, backend: backend2 }); + const r = zerosLike3({ inputs: { x: realPart }, backend: backend2 }); + const imagPart = imag3({ inputs: { input: x }, backend: backend2 }); + const i = zerosLike3({ inputs: { x: imagPart }, backend: backend2 }); + const result = complex3({ inputs: { real: r, imag: i }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(r); + backend2.disposeIntermediateTensorInfo(imagPart); + backend2.disposeIntermediateTensorInfo(i); + return result; + } else { + return fill3({ + attrs: { + shape: x.shape, + dtype: x.dtype, + value: x.dtype === "string" ? "" : 0 + }, + backend: backend2 + }); + } + } + var zerosLikeConfig2 = { + kernelName: ZerosLike, + backendName: "webgl", + kernelFunc: zerosLike3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OnesLike.js + function onesLike3(args) { + const { inputs, backend: backend2 } = args; + const { x } = inputs; + if (x.dtype === "string") { + throw new Error("onesLike is not supported under string dtype"); + } else if (x.dtype === "complex64") { + const realPart = real3({ inputs: { input: x }, backend: backend2 }); + const r = onesLike3({ inputs: { x: realPart }, backend: backend2 }); + const imagPart = imag3({ inputs: { input: x }, backend: backend2 }); + const i = zerosLike3({ inputs: { x: imagPart }, backend: backend2 }); + const result = complex3({ inputs: { real: r, imag: i }, backend: backend2 }); + backend2.disposeIntermediateTensorInfo(realPart); + backend2.disposeIntermediateTensorInfo(r); + backend2.disposeIntermediateTensorInfo(imagPart); + backend2.disposeIntermediateTensorInfo(i); + return result; + } else { + return fill3({ attrs: { shape: x.shape, dtype: x.dtype, value: 1 }, backend: backend2 }); + } + } + var onesLikeConfig2 = { + kernelName: OnesLike, + backendName: "webgl", + kernelFunc: onesLike3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Pack.js + init_define_BUILD_VERSION(); + function pack2(args) { + const { inputs, backend: backend2, attrs } = args; + const { axis } = attrs; + if (inputs.length === 1) { + return expandDims4({ inputs: { input: inputs[0] }, backend: backend2, attrs: { dim: axis } }); + } + const shape = inputs[0].shape; + const dtype = inputs[0].dtype; + inputs.forEach((t) => { + util_exports.assertShapesMatch(shape, t.shape, "All tensors passed to stack must have matching shapes"); + util_exports.assert(dtype === t.dtype, () => "All tensors passed to stack must have matching dtypes"); + }); + const intermediateTensorInfos = []; + const expandedTensors = inputs.map((t) => { + const expandedT = expandDims4({ inputs: { input: t }, backend: backend2, attrs: { dim: axis } }); + intermediateTensorInfos.push(expandedT); + return expandedT; + }); + const result = concat3({ inputs: expandedTensors, backend: backend2, attrs: { axis } }); + intermediateTensorInfos.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var packConfig2 = { + kernelName: Pack, + backendName: "webgl", + kernelFunc: pack2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/PadV2.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/pad_gpu.js + init_define_BUILD_VERSION(); + var PadProgram = class { + constructor(xShape, paddings, constantValue) { + this.variableNames = ["x"]; + this.customUniforms = [{ name: "value", type: "float" }]; + this.outputShape = paddings.map((p2, i) => p2[0] + xShape[i] + p2[1]); + const rank = xShape.length; + const type = getCoordsDataType(rank); + const start = paddings.map((p2) => p2[0]).join(","); + const end = paddings.map((p2, i) => p2[0] + xShape[i]).join(","); + const unpackedCoords = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, rank); + if (rank === 1) { + this.userCode = ` + int start = ${start}; + int end = ${end}; + + void main() { + int outC = getOutputCoords(); + if (outC < start || outC >= end) { + setOutput(value); + } else { + setOutput(getX(outC - start)); + } + } + `; + return; + } + this.userCode = ` + ${type} start = ${type}(${start}); + ${type} end = ${type}(${end}); + + void main() { + ${type} outC = getOutputCoords(); + if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) { + setOutput(value); + } else { + ${type} coords = outC - start; + setOutput(getX(${unpackedCoords})); + } + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/pad_packed_gpu.js + init_define_BUILD_VERSION(); + var PadPackedProgram = class { + constructor(xShape, paddings, constantValue) { + this.variableNames = ["x"]; + this.packedInputs = true; + this.packedOutput = true; + this.customUniforms = [{ name: "value", type: "float" }]; + this.outputShape = paddings.map((p2, i) => p2[0] + xShape[i] + p2[1]); + const rank = xShape.length; + const dtype = getCoordsDataType(rank); + const start = paddings.map((p2) => p2[0]).join(","); + const end = paddings.map((p2, i) => p2[0] + xShape[i]).join(","); + const coords2 = getChannels("rc", rank); + const source = getChannels("source", rank); + const cLimit = `${coords2[rank - 1]} < ${this.outputShape[rank - 1]}`; + const innerDims = rank === 1 ? "source" : `vec2(${source.slice(-2).join()})`; + const componentSetup = [ + `${dtype} rc = outputLoc;`, + `${coords2[rank - 1]} += 1; + if(${cLimit}) { + `, + rank === 1 ? "" : `} + rc = outputLoc; + ${coords2[rank - 2]} += 1; + if(${coords2[rank - 2]} < ${this.outputShape[rank - 2]}) {`, + rank === 1 ? "" : ` ${coords2[rank - 1]} += 1; + if(${cLimit}) {` + ]; + const paddingArea = rank === 1 ? "rc < start || rc >= end" : "any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))"; + let mainLoop = ""; + for (let i = 0, j = rank === 1 ? 2 : 4; i < j; i++) { + mainLoop += ` + ${componentSetup[i]} + if (${paddingArea}) { + result[${i}] = float(value); + } else { + ${dtype} source = rc - start; + result[${i}] = getChannel(getX(${source.join()}), ${innerDims}); + } + `; + } + mainLoop += rank === 1 ? `} ` : `}}`; + this.userCode = ` + const ${dtype} start = ${dtype}(${start}); + const ${dtype} end = ${dtype}(${end}); + + void main() { + ${dtype} outputLoc = getOutputCoords(); + vec4 result = vec4(0.); + ${mainLoop} + setOutput(result); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/PadV2.js + var padV22 = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { paddings, constantValue } = attrs; + if (util_exports.sizeFromShape(x.shape) === 0) { + const outputShape = paddings.map((p2, i) => p2[0] + x.shape[i] + p2[1]); + return fill3({ + backend: backend2, + attrs: { shape: outputShape, value: constantValue, dtype: x.dtype } + }); + } + const program = env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new PadPackedProgram(x.shape, paddings, constantValue) : new PadProgram(x.shape, paddings, constantValue); + const customValues = [[constantValue]]; + return backend2.runWebGLProgram(program, [x], x.dtype, customValues); + }; + var padV2Config2 = { + kernelName: PadV2, + backendName: "webgl", + kernelFunc: padV22 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Pow.js + init_define_BUILD_VERSION(); + var POW = ` + if(a < 0.0 && floor(b) < b){ + return NAN; + } + if (b == 0.0) { + return 1.0; + } + return (round(mod(b, 2.0)) != 1) ? + pow(abs(a), b) : sign(a) * pow(abs(a), b); +`; + var POW_PACKED = ` + // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. + vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); + vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); + vec4 result = multiplier * pow(abs(a), b); + + // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS + bvec4 isExpZero = equal(b, vec4(0.0)); + result.r = isExpZero.r ? 1.0 : result.r; + result.g = isExpZero.g ? 1.0 : result.g; + result.b = isExpZero.b ? 1.0 : result.b; + result.a = isExpZero.a ? 1.0 : result.a; + + vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b)); + ` + CHECK_NAN_SNIPPET3 + ` + return result; +`; + var pow3 = binaryKernelFunc2({ opSnippet: POW, packedOpSnippet: POW_PACKED }); + var powConfig2 = { + kernelName: Pow, + backendName: "webgl", + kernelFunc: pow3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Prod.js + init_define_BUILD_VERSION(); + function prod3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, keepDims } = attrs; + const xRank = x.shape.length; + const toDispose = []; + const origAxes = util_exports.parseAxisParam(axis, x.shape); + let axes = origAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let permutedX = x; + if (permutedAxes != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutedAxes } }); + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + toDispose.push(permutedX); + } + backend_util_exports.assertAxesAreInnerMostDims("prod", axes, xRank); + let res; + if (backend2.shouldExecuteOnCPU([permutedX])) { + const xVals = backend2.texData.get(permutedX.dataId).values; + const { outVals, outShape, outDtype } = prodImplCPU(permutedX.shape, permutedX.dtype, xVals, axes); + res = backend2.makeTensorInfo(outShape, outDtype, outVals); + } else { + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(permutedX.shape, axes); + const inSize = util_exports.sizeFromShape(reduceShape); + const a2D = reshape3({ inputs: { x: permutedX }, backend: backend2, attrs: { shape: [-1, inSize] } }); + const outputDType = sumOutType(x.dtype); + const reduced = reduce(a2D, outputDType, "prod", backend2); + res = reshape3({ inputs: { x: reduced }, backend: backend2, attrs: { shape: outShape } }); + toDispose.push(a2D); + toDispose.push(reduced); + } + if (keepDims) { + toDispose.push(res); + const newShape = backend_util_exports.expandShapeToKeepDim(res.shape, origAxes); + res = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape: newShape } }); + } + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return res; + } + var prodConfig2 = { + kernelName: Prod, + backendName: "webgl", + kernelFunc: prod3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Range.js + init_define_BUILD_VERSION(); + var range4 = (args) => { + const { backend: backend2, attrs } = args; + const { start, stop, step: step5, dtype } = attrs; + const values = rangeImplCPU(start, stop, step5, dtype); + return backend2.makeTensorInfo([values.length], dtype, values); + }; + var rangeConfig2 = { + kernelName: Range, + backendName: "webgl", + kernelFunc: range4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reciprocal.js + init_define_BUILD_VERSION(); + var RECIPROCAL = `return 1.0 / x;`; + var reciprocal3 = unaryKernelFunc2({ opSnippet: RECIPROCAL }); + var reciprocalConfig2 = { + kernelName: Reciprocal, + backendName: "webgl", + kernelFunc: reciprocal3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Relu.js + init_define_BUILD_VERSION(); + var RELU3 = CHECK_NAN_SNIPPET + ` + return (x < 0.0) ? 0.0 : x; +`; + var RELU_PACKED = ` + vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var relu3 = unaryKernelFunc2({ opSnippet: RELU3, packedOpSnippet: RELU_PACKED }); + var reluConfig2 = { + kernelName: Relu, + backendName: "webgl", + kernelFunc: relu3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Relu6.js + init_define_BUILD_VERSION(); + var RELU63 = CHECK_NAN_SNIPPET + ` + return (x < 0.0) ? 0.0 : min(6.0, x); +`; + var RELU6_PACKED = ` + vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var relu63 = unaryKernelFunc2({ opSnippet: RELU63, packedOpSnippet: RELU6_PACKED }); + var relu6Config2 = { + kernelName: Relu6, + backendName: "webgl", + kernelFunc: relu63 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinear.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_gpu.js + init_define_BUILD_VERSION(); + var ResizeBilinearProgram = class { + constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) { + this.variableNames = ["A"]; + this.outputShape = []; + const [batch, oldHeight, oldWidth, depth] = inputShape; + this.outputShape = [batch, newHeight, newWidth, depth]; + const effectiveInSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + let sourceFracIndexRC; + if (halfPixelCenters) { + sourceFracIndexRC = `(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)`; + } else { + sourceFracIndexRC = `vec2(yRC) * effectiveInputOverOutputRatioRC`; + } + this.userCode = ` + const vec2 effectiveInputOverOutputRatioRC = vec2( + ${effectiveInSize[0] / effectiveOutSize[0]}, + ${effectiveInSize[1] / effectiveOutSize[1]}); + const vec2 inputShapeRC = vec2(${oldHeight}.0, ${oldWidth}.0); + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + ivec2 yRC = coords.yz; + + // Fractional source index. + vec2 sourceFracIndexRC = ${sourceFracIndexRC}; + + // Compute the four integer indices. + ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0))); + ivec2 sourceCeilRC = ivec2( + min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); + + float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d); + float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d); + float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d); + float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d); + + vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC); + + float top = topLeft + (topRight - topLeft) * fracRC.y; + float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y; + float newValue = top + (bottom - top) * fracRC.x; + + setOutput(newValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_packed_gpu.js + init_define_BUILD_VERSION(); + var ResizeBilinearPackedProgram = class { + constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = []; + const [batch, oldHeight, oldWidth, depth] = inputShape; + this.outputShape = [batch, newHeight, newWidth, depth]; + const effectiveInSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + let sourceFracIndexRC; + if (halfPixelCenters) { + sourceFracIndexRC = `(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)`; + } else { + sourceFracIndexRC = `vec3(yRC) * effectiveInputOverOutputRatioRC`; + } + this.userCode = ` + const vec3 effectiveInputOverOutputRatioRC = vec3( + ${effectiveInSize[0] / effectiveOutSize[0]}, + ${effectiveInSize[1] / effectiveOutSize[1]}, + ${effectiveInSize[1] / effectiveOutSize[1]}); + const vec3 inputShapeRC = vec3(${oldHeight}.0, ${oldWidth}.0, + ${oldWidth}.0); + + float getAValue(int b, int r, int c, int d) { + return getChannel(getA(b, r, c, d), vec2(c, d)); + } + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + // Calculate values for next column in yRC.z. + ivec3 yRC = coords.yzz + ivec3(0, 0, 1); + + // Fractional source index. + vec3 sourceFracIndexRC = ${sourceFracIndexRC}; + + // Compute the four integer indices. + ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0))); + ivec3 sourceCeilRC = ivec3( + min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); + + // Should we calculate next column and row elements in 2x2 packed cell. + bool hasNextCol = d < ${depth - 1}; + bool hasNextRow = coords.z < ${newWidth - 1}; + + // In parallel, construct four corners for all four components in + // packed 2x2 cell. + vec4 topLeft = vec4( + getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d), + hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1) + : 0.0, + hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d) + : 0.0, + (hasNextRow && hasNextCol) ? + getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0); + + vec4 bottomLeft = vec4( + getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d), + hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1) + : 0.0, + hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d) + : 0.0, + (hasNextRow && hasNextCol) ? + getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0); + + vec4 topRight = vec4( + getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d), + hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1) + : 0.0, + hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d) + : 0.0, + (hasNextRow && hasNextCol) ? + getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0); + + vec4 bottomRight = vec4( + getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d), + hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1) + : 0.0, + hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d) + : 0.0, + (hasNextRow && hasNextCol) ? + getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0); + + vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC); + + vec4 top = mix(topLeft, topRight, fracRC.yyzz); + vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz); + vec4 newValue = mix(top, bottom, fracRC.x); + + setOutput(newValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinear.js + function resizeBilinear3(args) { + const { inputs, backend: backend2, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + const [newHeight, newWidth] = size; + const program = env().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new ResizeBilinearPackedProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters) : new ResizeBilinearProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters); + return backend2.runWebGLProgram(program, [images], "float32"); + } + var resizeBilinearConfig2 = { + kernelName: ResizeBilinear, + backendName: "webgl", + kernelFunc: resizeBilinear3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinearGrad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_backprop_gpu.js + init_define_BUILD_VERSION(); + var ResizeBilinearBackpropProgram = class { + constructor(dyShape, inputShape, alignCorners) { + this.variableNames = ["dy"]; + this.outputShape = []; + this.outputShape = inputShape; + const [, xHeight, xWidth] = inputShape; + const [, yHeight, yWidth] = dyShape; + const effectiveXSize = [ + alignCorners && yHeight > 1 ? xHeight - 1 : xHeight, + alignCorners && yWidth > 1 ? xWidth - 1 : xWidth + ]; + const effectiveYSize = [ + alignCorners && yHeight > 1 ? yHeight - 1 : yHeight, + alignCorners && yWidth > 1 ? yWidth - 1 : yWidth + ]; + const heightScale = effectiveXSize[0] / effectiveYSize[0]; + const widthScale = effectiveXSize[1] / effectiveYSize[1]; + const invHeightScale = 1 / heightScale; + const invWidthScale = 1 / widthScale; + const winHeight = Math.ceil(invHeightScale) * 2 + 2; + const winWidth = Math.ceil(invWidthScale) * 2 + 2; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + int r = coords[1]; + int c = coords[2]; + + float accumulator = 0.0; + + const float heightScale = float(${heightScale}); + const float widthScale = float(${widthScale}); + + const float invHeightScale = float(${invHeightScale}); + const float invWidthScale = float(${invWidthScale}); + + const int winHeight = int(${winHeight}); + const int winWidth = int(${winWidth}); + + // Compute bounds for where in dy we will look + float startRLerp = floor(float(r) * invHeightScale); + int startDyR = int(startRLerp - float(winHeight / 2)); + + float startCLerp = floor(float(c) * invWidthScale); + int startDyC = int(startCLerp - float(winWidth / 2)); + + // Loop over dy + for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { + int dyR = dyROffset + startDyR; + + // Guard against the window exceeding the bounds of dy + if (dyR < 0 || dyR >= ${yHeight}) { + continue; + } + + for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { + int dyC = dyCOffset + startDyC; + + // Guard against the window exceeding the bounds of dy + if (dyC < 0 || dyC >= ${yWidth}) { + continue; + } + + float dxR = float(dyR) * heightScale; + int topDxRIndex = int(floor(dxR)); + int bottomDxRIndex = int(min(ceil(dxR), ${xHeight - 1}.0)); + float dxRLerp = dxR - float(topDxRIndex); + float inverseDxRLerp = 1.0 - dxRLerp; + + float dxC = float(dyC) * widthScale; + int leftDxCIndex = int(floor(dxC)); + int rightDxCIndex = int(min(ceil(dxC), ${xWidth - 1}.0)); + float dxCLerp = dxC - float(leftDxCIndex); + float inverseDxCLerp = 1.0 - dxCLerp; + + if (r == topDxRIndex && c == leftDxCIndex) { + // topLeft + accumulator += + getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp; + } + + if (r == topDxRIndex && c == rightDxCIndex) { + // topRight + accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp; + } + + if (r == bottomDxRIndex && c == leftDxCIndex) { + // bottomLeft + accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp; + } + + if (r == bottomDxRIndex && c == rightDxCIndex) { + // bottomRight + accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp; + } + } + } + // End loop over dy + + setOutput(accumulator); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinearGrad.js + function resizeBilinearGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { images, dy } = inputs; + const { alignCorners } = attrs; + const program = new ResizeBilinearBackpropProgram(dy.shape, images.shape, alignCorners); + return backend2.runWebGLProgram(program, [dy], dy.dtype); + } + var resizeBilinearGradConfig3 = { + kernelName: ResizeBilinearGrad, + backendName: "webgl", + kernelFunc: resizeBilinearGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighbor.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_gpu.js + init_define_BUILD_VERSION(); + var ResizeNearestNeighborProgram = class { + constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) { + this.variableNames = ["A"]; + this.outputShape = []; + const [batch, oldHeight, oldWidth, depth] = inputShape; + this.outputShape = [batch, newHeight, newWidth, depth]; + const effectiveInSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + const roundBase = alignCorners ? "0.5" : "0.0"; + let sourceFracIndexRC; + if (halfPixelCenters) { + sourceFracIndexRC = `max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))`; + } else { + sourceFracIndexRC = `vec2(yRC) * effectiveInputOverOutputRatioRC`; + } + this.userCode = ` + const vec2 effectiveInputOverOutputRatioRC = vec2( + ${effectiveInSize[0] / effectiveOutSize[0]}, + ${effectiveInSize[1] / effectiveOutSize[1]}); + const vec2 inputShapeRC = vec2(${oldHeight}.0, ${oldWidth}.0); + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + ivec2 yRC = coords.yz; + + // Fractional source index. + vec2 sourceFracIndexRC = ${sourceFracIndexRC}; + + // Compute the coordinators of nearest neighbor point. + ivec2 sourceNearestRC = ivec2( + min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${roundBase}))); + float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d); + + setOutput(newValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_packed_gpu.js + init_define_BUILD_VERSION(); + var ResizeNearestNeighborPackedProgram = class { + constructor(inputShape, newHeight, newWidth, alignCorners, halfPixelCenters) { + this.variableNames = ["A"]; + this.packedInputs = true; + this.packedOutput = true; + this.outputShape = []; + const [batch, oldHeight, oldWidth, depth] = inputShape; + this.outputShape = [batch, newHeight, newWidth, depth]; + const effectiveInSize = [ + alignCorners && newHeight > 1 ? oldHeight - 1 : oldHeight, + alignCorners && newWidth > 1 ? oldWidth - 1 : oldWidth + ]; + const effectiveOutSize = [ + alignCorners && newHeight > 1 ? newHeight - 1 : newHeight, + alignCorners && newWidth > 1 ? newWidth - 1 : newWidth + ]; + const roundBase = alignCorners ? "0.5" : "0.0"; + let sourceFracIndexRC; + if (halfPixelCenters) { + sourceFracIndexRC = `max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))`; + } else { + sourceFracIndexRC = `vec3(yRC) * effectiveInputOverOutputRatioRC`; + } + this.userCode = ` + const vec3 effectiveInputOverOutputRatioRC = vec3( + ${effectiveInSize[0] / effectiveOutSize[0]}, + ${effectiveInSize[1] / effectiveOutSize[1]}, + ${effectiveInSize[1] / effectiveOutSize[1]}); + const vec3 inputShapeRC = vec3(${oldHeight}.0, ${oldWidth}.0, + ${oldWidth}.0); + + float getAValue(int b, int r, int c, int d) { + return getChannel(getA(b, r, c, d), vec2(c, d)); + } + + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + // Calculate values for next column in yRC.z. + ivec3 yRC = coords.yzz + ivec3(0, 0, 1); + + // Fractional source index. + vec3 sourceFracIndexRC = ${sourceFracIndexRC}; + + // Compute the coordinators of nearest neighbor point. + ivec3 sourceNearestRC = ivec3( + min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${roundBase}))); + + // Should we calculate next column and row elements in 2x2 packed cell. + bool hasNextCol = d < ${depth - 1}; + bool hasNextRow = coords.z < ${newWidth - 1}; + + vec4 newValue = vec4( + getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d), + hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1) + : 0.0, + hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d) + : 0.0, + (hasNextRow && hasNextCol) ? + getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0); + + setOutput(newValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighbor.js + function resizeNearestNeighbor3(args) { + const { inputs, backend: backend2, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + const [newHeight, newWidth] = size; + const program = env().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new ResizeNearestNeighborPackedProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters) : new ResizeNearestNeighborProgram(images.shape, newHeight, newWidth, alignCorners, halfPixelCenters); + return backend2.runWebGLProgram(program, [images], images.dtype); + } + var resizeNearestNeighborConfig2 = { + kernelName: ResizeNearestNeighbor, + backendName: "webgl", + kernelFunc: resizeNearestNeighbor3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighborGrad.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_backprop_gpu.js + init_define_BUILD_VERSION(); + var ResizeNearestNeigborBackpropProgram = class { + constructor(dyShape, inputShape, alignCorners) { + this.variableNames = ["dy"]; + this.outputShape = []; + this.outputShape = inputShape; + const [, xHeight, xWidth] = inputShape; + const [, yHeight, yWidth] = dyShape; + const effectiveXSize = [ + alignCorners && yHeight > 1 ? xHeight - 1 : xHeight, + alignCorners && yWidth > 1 ? xWidth - 1 : xWidth + ]; + const effectiveYSize = [ + alignCorners && yHeight > 1 ? yHeight - 1 : yHeight, + alignCorners && yWidth > 1 ? yWidth - 1 : yWidth + ]; + const heightScale = effectiveXSize[0] / effectiveYSize[0]; + const widthScale = effectiveXSize[1] / effectiveYSize[1]; + const invHeightScale = 1 / heightScale; + const invWidthScale = 1 / widthScale; + const winHeight = Math.ceil(invHeightScale) * 2 + 2; + const winWidth = Math.ceil(invWidthScale) * 2 + 2; + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[3]; + int r = coords[1]; + int c = coords[2]; + + float accumulator = 0.0; + + const float heightScale = float(${heightScale}); + const float widthScale = float(${widthScale}); + + const float invHeightScale = float(${invHeightScale}); + const float invWidthScale = float(${invWidthScale}); + + const int winHeight = int(${winHeight}); + const int winWidth = int(${winWidth}); + + // Compute bounds for where in dy we will look + float startRLerp = floor(float(r) * invHeightScale); + int startDyR = int(floor(startRLerp - float(winHeight / 2))); + + float startCLerp = floor(float(c) * invWidthScale); + int startDyC = int(floor(startCLerp - float(winWidth / 2))); + + // Loop over dy + for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { + int dyR = dyROffset + startDyR; + + // Guard against the window exceeding the bounds of dy + if (dyR < 0 || dyR >= ${yHeight}) { + continue; + } + + for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { + int dyC = dyCOffset + startDyC; + + // Guard against the window exceeding the bounds of dy + if (dyC < 0 || dyC >= ${yWidth}) { + continue; + } + + float sourceFracRow = + float(${effectiveXSize[0]}) * + (float(dyR) / float(${effectiveYSize[0]})); + + float sourceFracCol = + float(${effectiveXSize[1]}) * + (float(dyC) / float(${effectiveYSize[1]})); + + int sourceNearestRow = int(min( + float(int(${xHeight}) - 1), + ${alignCorners} ? float(round(sourceFracRow)) : + float(floor(sourceFracRow)))); + + int sourceNearestCol = int(min( + float(int(${xWidth}) - 1), + ${alignCorners} ? float(round(sourceFracCol)) : + float(floor(sourceFracCol)))); + + if (r == sourceNearestRow && c == sourceNearestCol) { + accumulator += getDy(b, dyR, dyC, d); + } + } + } + // End loop over dy + + setOutput(accumulator); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighborGrad.js + function resizeNearestNeighborGrad2(args) { + const { inputs, backend: backend2, attrs } = args; + const { images, dy } = inputs; + const { alignCorners } = attrs; + const program = new ResizeNearestNeigborBackpropProgram(dy.shape, images.shape, alignCorners); + return backend2.runWebGLProgram(program, [dy], dy.dtype); + } + var resizeNearestNeighborGradConfig3 = { + kernelName: ResizeNearestNeighborGrad, + backendName: "webgl", + kernelFunc: resizeNearestNeighborGrad2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reverse.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/reverse_gpu.js + init_define_BUILD_VERSION(); + var ReverseProgram = class { + constructor(xShape, axis) { + this.variableNames = ["x"]; + const rank = xShape.length; + if (rank > 4) { + throw new Error(`WebGL backend: Reverse of rank-${rank} tensor is not yet supported`); + } + this.outputShape = xShape; + if (rank === 1) { + this.userCode = ` + void main() { + int coord = getOutputCoords(); + setOutput(getX(${xShape[0]} - coord - 1)); + } + `; + return; + } + const getInCoord = (i) => { + if (axis.indexOf(i) !== -1 && xShape[i] !== 1) { + return `${xShape[i]} - coords[${i}] - 1`; + } + return `coords[${i}]`; + }; + const inCoords = xShape.map((_, i) => getInCoord(i)).join(","); + const type = getCoordsDataType(rank); + this.userCode = ` + void main() { + ${type} coords = getOutputCoords(); + setOutput(getX(${inCoords})); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/reverse_packed_gpu.js + init_define_BUILD_VERSION(); + var ReversePackedProgram = class { + constructor(xShape, axis) { + this.variableNames = ["x"]; + this.packedInputs = true; + this.packedOutput = true; + const rank = xShape.length; + if (rank > 4) { + throw new Error(`WebGL backend: Reverse of rank-${rank} tensor is not yet supported`); + } + this.outputShape = xShape; + const channels = getChannels("rc", rank); + const nextColumn = `${channels[rank - 1]} + 1 < ${this.outputShape[rank - 1]}`; + const nextRow = `${channels[rank - 2]} + 1 < ${this.outputShape[rank - 2]}`; + const type = getCoordsDataType(rank); + if (rank === 1) { + this.userCode = ` + void main(){ + int rc = getOutputCoords(); + vec4 result = vec4(0.); + result.r = getChannel(getX(${xShape[0]} - rc - 1), + ${xShape[0]} - rc - 1); + if(${nextColumn}){ + result.g = getChannel(getX(${xShape[0]} - (rc + 1) - 1), + ${xShape[0]} - (rc + 1) - 1); + } + setOutput(result); + } + `; + } else { + this.userCode = ` + void main() { + ${type} rc = getOutputCoords(); + vec4 result = vec4(0.); + result.r = ${getR(channels.slice())}; + if(${nextColumn}){ + result.g = ${getG(channels.slice())}; + } + if(${nextRow}) { + result.b = ${getB(channels.slice())}; + if(${nextColumn}) { + result.a = ${getA(channels.slice())}; + } + } + setOutput(result); + } + `; + } + function getR(channels2) { + return getChannel(channels2); + } + function getG(channels2) { + channels2[rank - 1] = "(" + channels2[rank - 1] + ` + 1)`; + return getChannel(channels2); + } + function getB(channels2) { + channels2[rank - 2] = "(" + channels2[rank - 2] + ` + 1)`; + return getChannel(channels2); + } + function getA(channels2) { + channels2[rank - 1] = "(" + channels2[rank - 1] + ` + 1)`; + channels2[rank - 2] = "(" + channels2[rank - 2] + ` + 1)`; + return getChannel(channels2); + } + function getChannel(channels2) { + const inCoordsArray = xShape.map((_, i) => getInCoord(i, channels2)); + const inCoords = inCoordsArray.join(","); + const innerDims = inCoordsArray.slice(-2).join(","); + return `getChannel(getX(${inCoords}), vec2(${innerDims}))`; + } + function getInCoord(i, channels1) { + if (axis.indexOf(i) !== -1 && xShape[i] !== 1) { + return `${xShape[i]} - ${channels1[i]} - 1`; + } else { + return `${channels1[i]}`; + } + } + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reverse.js + function reverse3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { dims } = attrs; + const xRank = x.shape.length; + const $dims = util_exports.parseAxisParam(dims, x.shape); + if (xRank === 0) { + return identity2({ inputs: { x }, backend: backend2 }); + } + const program = env().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new ReversePackedProgram(x.shape, $dims) : new ReverseProgram(x.shape, $dims); + return backend2.runWebGLProgram(program, [x], x.dtype); + } + var reverseConfig2 = { + kernelName: Reverse, + backendName: "webgl", + kernelFunc: reverse3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RotateWithOffset.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/rotate_gpu.js + init_define_BUILD_VERSION(); + var RotateProgram = class { + constructor(imageShape, fillValue) { + this.variableNames = ["Image"]; + this.outputShape = []; + this.customUniforms = [{ name: "params", type: "vec4" }]; + const imageHeight = imageShape[1]; + const imageWidth = imageShape[2]; + this.outputShape = imageShape; + let fillSnippet = ""; + if (typeof fillValue === "number") { + fillSnippet = `float outputValue = ${fillValue.toFixed(2)};`; + } else { + fillSnippet = ` + vec3 fill = vec3(${fillValue.join(",")}); + float outputValue = fill[coords[3]];`; + } + this.userCode = ` + void main() { + ivec4 coords = getOutputCoords(); + int x = coords[2]; + int y = coords[1]; + float coordXFloat = (float(x) - params[0]) * params[3] - + (float(y) - params[1]) * params[2]; + float coordYFloat = (float(x) - params[0]) * params[2] + + (float(y) - params[1]) * params[3]; + int coordX = int(round(coordXFloat + params[0])); + int coordY = int(round(coordYFloat + params[1])); + ${fillSnippet} + if(coordX >= 0 && coordX < ${imageWidth} && coordY >= 0 && coordY < ${imageHeight}) { + outputValue = getImage(coords[0], coordY, coordX, coords[3]); + } + setOutput(outputValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RotateWithOffset.js + var rotateWithOffsetConfig2 = { + kernelName: RotateWithOffset, + backendName: "webgl", + kernelFunc: ({ inputs, attrs, backend: backend2 }) => { + const { image: image2 } = inputs; + const { radians, fillValue, center } = attrs; + const webglBackend = backend2; + const program = new RotateProgram(image2.shape, fillValue); + const [centerX, centerY] = backend_util_exports.getImageCenter(center, image2.shape[1], image2.shape[2]); + const customValues = [[centerX, centerY, Math.sin(radians), Math.cos(radians)]]; + const output = webglBackend.runWebGLProgram(program, [image2], image2.dtype, customValues); + return output; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Round.js + init_define_BUILD_VERSION(); + var ROUND = ` + // OpenGL ES does not support round function. + // The algorithm is based on banker's rounding. + float base = floor(x); + if ((x - base) < 0.5) { + return floor(x); + } else if ((x - base) > 0.5) { + return ceil(x); + } else { + if (mod(base, 2.0) == 0.0) { + return base; + } else { + return base + 1.0; + } + } +`; + var round4 = unaryKernelFunc2({ opSnippet: ROUND }); + var roundConfig2 = { + kernelName: Round, + backendName: "webgl", + kernelFunc: round4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Rsqrt.js + init_define_BUILD_VERSION(); + var RSQRT = `return inversesqrt(x);`; + var rsqrt3 = unaryKernelFunc2({ opSnippet: RSQRT, cpuKernelImpl: rsqrtImplCPU }); + var rsqrtConfig2 = { + kernelName: Rsqrt, + backendName: "webgl", + kernelFunc: rsqrt3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ScatterNd.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/scatter_gpu.js + init_define_BUILD_VERSION(); + var ScatterProgram = class { + constructor(updateSize, sliceDim, indicesRank, updatesRank, strides, shape, summingDupeIndex = true) { + this.variableNames = ["updates", "indices", "defaultValue"]; + this.outputShape = shape; + const stridesType = getCoordsDataType(strides.length); + const dtype = getCoordsDataType(shape.length); + let indicesString = ""; + if (indicesRank === 1) { + indicesString = "i"; + } else if (indicesRank === 2) { + indicesString = "i, j"; + } + const indicesSnippet = `getIndices(${indicesString})`; + let updatesString = ""; + if (updatesRank === 1) { + updatesString = "i"; + } else if (updatesRank === 2) { + updatesString = "i, coords[1]"; + } + const updatesSnippet = `getUpdates(${updatesString})`; + const strideString = sliceDim > 1 ? "strides[j]" : "strides"; + this.userCode = ` + ${stridesType} strides = ${stridesType}(${strides}); + + void main() { + ${dtype} coords = getOutputCoords(); + float sum = 0.0; + bool found = false; + for (int i = 0; i < ${updateSize}; i++) { + int flattenedIndex = 0; + for (int j = 0; j < ${sliceDim}; j++) { + int index = round(${indicesSnippet}); + flattenedIndex += index * ${strideString}; + } + if (flattenedIndex == coords[0]) { + sum += ${updatesSnippet}; + found = true; + } + } + setOutput(mix(getDefaultValue(), sum, float(found))); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ScatterNd.js + function scatterNd2(args) { + const { inputs, backend: backend2, attrs } = args; + const { indices, updates } = inputs; + const { shape } = attrs; + const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util_exports.calculateShapes(updates, indices, shape); + const flattenShape = [outputSize / sliceSize, sliceSize]; + if (outputSize === 0) { + return backend2.makeTensorInfo(shape, indices.dtype); + } + const flattenIndices = reshape3({ inputs: { x: indices }, backend: backend2, attrs: { shape: [numUpdates, sliceRank] } }); + const flattenX = reshape3({ inputs: { x: updates }, backend: backend2, attrs: { shape: [numUpdates, sliceSize] } }); + const defaultValue = backend2.makeTensorInfo([], "float32", new Float32Array([0])); + const program = new ScatterProgram(numUpdates, sliceRank, flattenIndices.shape.length, flattenX.shape.length, strides, flattenShape); + const res = backend2.runWebGLProgram(program, [flattenX, flattenIndices, defaultValue], flattenX.dtype); + const reshaped = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape } }); + backend2.disposeIntermediateTensorInfo(flattenIndices); + backend2.disposeIntermediateTensorInfo(flattenX); + backend2.disposeIntermediateTensorInfo(res); + backend2.disposeIntermediateTensorInfo(defaultValue); + return reshaped; + } + var scatterNdConfig2 = { + kernelName: ScatterNd, + backendName: "webgl", + kernelFunc: scatterNd2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SearchSorted.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/search_sorted_gpu.js + init_define_BUILD_VERSION(); + var SearchSortedProgram = class { + constructor(batchSize, numInputs, numValues, side) { + this.variableNames = ["sortedSequence", "values"]; + this.customUniforms = [{ name: "numInputs", type: "int" }]; + this.outputShape = [batchSize, numValues]; + const webGL2LoopHead = "while (left < right) {"; + const webGL1LoopHead = `for (int i = 0; i < ${Math.ceil(Math.log2(numInputs + 1))}; ++i) { if (left >= right) break;`; + const loopHead = env().getNumber("WEBGL_VERSION") === 2 ? webGL2LoopHead : webGL1LoopHead; + const boundComparator = side === "left" ? "<" : "<="; + this.userCode = ` + int findBound(int batch, float value) { + int left = 0; + int right = numInputs; + int mid; + ${loopHead} + mid = (left + right) / 2; + if (getSortedSequence(batch, mid) ${boundComparator} value) { + left = mid + 1; + } else { + right = mid; + } + } + return right; + } + + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int valueIndex = coords[1]; + + float value = getValues(batch, valueIndex); + + setOutput(float(findBound(batch, value))); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SearchSorted.js + function searchSorted2(args) { + const { inputs, backend: backend2, attrs } = args; + const { sortedSequence, values } = inputs; + const { side } = attrs; + const program = new SearchSortedProgram(sortedSequence.shape[0], sortedSequence.shape[1], values.shape[1], side); + const customValues = [[sortedSequence.shape[1]]]; + return backend2.runWebGLProgram(program, [sortedSequence, values], "int32", customValues); + } + var searchSortedConfig2 = { + kernelName: SearchSorted, + backendName: "webgl", + kernelFunc: searchSorted2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Select.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/select_gpu.js + init_define_BUILD_VERSION(); + var SelectProgram = class { + constructor(cRank, shape, rank) { + this.variableNames = ["c", "a", "b"]; + this.outputShape = shape; + let cCoords; + let abCoords; + if (rank > 4) { + throw Error(`Where for rank ${rank} is not yet supported`); + } + if (rank === 1) { + abCoords = `resRC`; + cCoords = `resRC`; + } else { + const currentCoords = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"]; + const cCoordVars = []; + const abCoordVars = []; + for (let i = 0; i < shape.length; i++) { + abCoordVars.push(`${currentCoords[i]}`); + if (i < cRank) { + cCoordVars.push(`${currentCoords[i]}`); + } + } + cCoords = cCoordVars.join(); + abCoords = abCoordVars.join(); + } + const dtype = getCoordsDataType(rank); + this.userCode = ` + void main() { + ${dtype} resRC = getOutputCoords(); + float cVal = getC(${cCoords}); + if (cVal >= 1.0) { + setOutput(getA(${abCoords})); + } else { + setOutput(getB(${abCoords})); + } + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Select.js + function select3(args) { + const { inputs, backend: backend2 } = args; + const { condition, t, e } = inputs; + const program = new SelectProgram(condition.shape.length, t.shape, t.shape.length); + return backend2.runWebGLProgram(program, [condition, t, e], upcastType(t.dtype, e.dtype)); + } + var selectConfig2 = { + kernelName: Select, + backendName: "webgl", + kernelFunc: select3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Selu.js + init_define_BUILD_VERSION(); + var SELU = ` + // Stable and Attracting Fixed Point (0, 1) for Normalized Weights. + // see: https://arxiv.org/abs/1706.02515 + float scaleAlpha = ${backend_util_exports.SELU_SCALEALPHA}; + float scale = ${backend_util_exports.SELU_SCALE}; + return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); +`; + var selu3 = unaryKernelFunc2({ opSnippet: SELU }); + var seluConfig2 = { + kernelName: Selu, + backendName: "webgl", + kernelFunc: selu3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sigmoid.js + init_define_BUILD_VERSION(); + var SIGMOID3 = CHECK_NAN_SNIPPET_UNARY + ` + return 1.0 / (1.0 + exp(-1.0 * x)); +`; + var SIGMOID_PACKED = ` + vec4 result = 1.0 / (1.0 + exp(-1.0 * x)); + bvec4 isNaN = isnan(x); + + result.r = isNaN.r ? x.r : result.r; + result.g = isNaN.g ? x.g : result.g; + result.b = isNaN.b ? x.b : result.b; + result.a = isNaN.a ? x.a : result.a; + + return result; +`; + var sigmoid3 = unaryKernelFunc2({ + opSnippet: SIGMOID3, + packedOpSnippet: SIGMOID_PACKED, + cpuKernelImpl: sigmoidImplCPU + }); + var sigmoidConfig2 = { + kernelName: Sigmoid, + backendName: "webgl", + kernelFunc: sigmoid3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sign.js + init_define_BUILD_VERSION(); + var SIGN = ` + if (isnan(x)) { return 0.0; } + return sign(x); +`; + var sign3 = unaryKernelFunc2({ opSnippet: SIGN }); + var signConfig2 = { + kernelName: Sign, + backendName: "webgl", + kernelFunc: sign3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sin.js + init_define_BUILD_VERSION(); + var SIN = CHECK_NAN_SNIPPET_UNARY + ` + return sin(x); +`; + var sin3 = unaryKernelFunc2({ opSnippet: SIN }); + var sinConfig2 = { + kernelName: Sin, + backendName: "webgl", + kernelFunc: sin3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sinh.js + init_define_BUILD_VERSION(); + var SINH = ` + float e2x = exp(x); + return (e2x - 1.0 / e2x) / 2.0; +`; + var sinh3 = unaryKernelFunc2({ opSnippet: SINH }); + var sinhConfig2 = { + kernelName: Sinh, + backendName: "webgl", + kernelFunc: sinh3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Softplus.js + init_define_BUILD_VERSION(); + var SOFTPLUS = ` + float epsilon = 1.1920928955078125e-7; + float threshold = log(epsilon) + 2.0; + + bool too_large = x > -threshold; + bool too_small = x < threshold; + + float result; + float exp_x = exp(x); + + if (too_large){ + result = x; + } + else if (too_small){ + result = exp_x; + } + else{ + result = log(exp_x + 1.0); + } + return result; +`; + var softplus3 = unaryKernelFunc2({ opSnippet: SOFTPLUS }); + var softplusConfig2 = { + kernelName: Softplus, + backendName: "webgl", + kernelFunc: softplus3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SpaceToBatchND.js + init_define_BUILD_VERSION(); + var spaceToBatchND3 = (args) => { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, paddings } = attrs; + util_exports.assert(x.shape.length <= 4, () => "spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"); + const prod5 = blockShape.reduce((a, b) => a * b); + const completePaddings = [[0, 0]]; + completePaddings.push(...paddings); + for (let i = 1 + blockShape.length; i < x.shape.length; ++i) { + completePaddings.push([0, 0]); + } + const toDispose = []; + const paddedX = padV22({ + inputs: { x }, + backend: backend2, + attrs: { paddings: completePaddings, constantValue: 0 } + }); + const reshapedPaddedShape = backend_util_exports.getReshaped(paddedX.shape, blockShape, prod5, false); + const permutedReshapedPaddedPermutation = backend_util_exports.getPermuted(reshapedPaddedShape.length, blockShape.length, false); + const flattenShape = backend_util_exports.getReshapedPermuted(paddedX.shape, blockShape, prod5, false); + const reshapedPaddedX = reshape3({ inputs: { x: paddedX }, backend: backend2, attrs: { shape: reshapedPaddedShape } }); + const paddedXT = transpose3({ + inputs: { x: reshapedPaddedX }, + backend: backend2, + attrs: { perm: permutedReshapedPaddedPermutation } + }); + const result = reshape3({ inputs: { x: paddedXT }, backend: backend2, attrs: { shape: flattenShape } }); + toDispose.push(paddedX); + toDispose.push(reshapedPaddedX); + toDispose.push(paddedXT); + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + }; + var spaceToBatchNDConfig2 = { + kernelName: SpaceToBatchND, + backendName: "webgl", + kernelFunc: spaceToBatchND3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseFillEmptyRows.js + init_define_BUILD_VERSION(); + function sparseFillEmptyRows2(args) { + const { inputs, backend: backend2 } = args; + const { indices, values, denseShape, defaultValue } = inputs; + if (denseShape.shape.length !== 1) { + throw new Error(`Dense shape must be a vector, saw: + ${denseShape.shape}`); + } + if (indices.shape.length !== 2) { + throw new Error(`Indices must be a matrix, saw: + ${indices.shape}`); + } + if (values.shape.length !== 1) { + throw new Error(`Values must be a vector, saw: + ${values.shape}`); + } + if (defaultValue.shape.length !== 0) { + throw new Error(`Default value must be a scalar, saw: + ${defaultValue.shape}`); + } + const $indices = backend2.readSync(indices.dataId); + const $values = backend2.readSync(values.dataId); + const $denseShape = backend2.readSync(denseShape.dataId); + const $defaultValue = backend2.readSync(defaultValue.dataId)[0]; + const [outputIndices, outputIndicesShape, outputValues, emptyRowIndicator, reverseIndexMap] = sparseFillEmptyRowsImplCPU($indices, indices.shape, indices.dtype, $values, values.dtype, $denseShape, $defaultValue); + return [ + backend2.makeTensorInfo(outputIndicesShape, indices.dtype, outputIndices), + backend2.makeTensorInfo([outputIndicesShape[0]], values.dtype, outputValues), + backend2.makeTensorInfo([emptyRowIndicator.length], "bool", new Uint8Array(emptyRowIndicator.map((value) => Number(value)))), + backend2.makeTensorInfo([reverseIndexMap.length], indices.dtype, new Int32Array(reverseIndexMap)) + ]; + } + var sparseFillEmptyRowsConfig2 = { + kernelName: SparseFillEmptyRows, + backendName: "webgl", + kernelFunc: sparseFillEmptyRows2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseReshape.js + init_define_BUILD_VERSION(); + function sparseReshape2(args) { + const { inputs, backend: backend2 } = args; + const { inputIndices, inputShape, newShape } = inputs; + if (inputIndices.shape.length !== 2) { + throw new Error(`Input indices should be a matrix but received shape ${inputIndices.shape}`); + } + if (inputShape.shape.length !== 1) { + throw new Error(`Input shape should be a vector but received shape ${inputShape.shape}`); + } + if (newShape.shape.length !== 1) { + throw new Error(`Target shape should be a vector but received shape ${newShape.shape}`); + } + const $inputShape = Array.from(backend2.readSync(inputShape.dataId)); + const $inputIndices = backend2.readSync(inputIndices.dataId); + const targetShape = Array.from(backend2.readSync(newShape.dataId)); + const [newIndices, indicesShape, outputShape] = sparseReshapeImplCPU($inputIndices, inputIndices.shape, inputIndices.dtype, $inputShape, targetShape); + return [ + backend2.makeTensorInfo(indicesShape, inputIndices.dtype, newIndices), + backend2.makeTensorInfo([outputShape.length], newShape.dtype, new Int32Array(outputShape)) + ]; + } + var sparseReshapeConfig2 = { + kernelName: SparseReshape, + backendName: "webgl", + kernelFunc: sparseReshape2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseSegmentMean.js + init_define_BUILD_VERSION(); + function sparseSegmentMean2(args) { + const { inputs, backend: backend2 } = args; + const { data, indices, segmentIds } = inputs; + if (data.shape.length < 1) { + throw new Error(`Data should be at least 1 dimensional but received scalar`); + } + if (indices.shape.length !== 1) { + throw new Error(`Indices should be a vector but received shape + ${indices.shape}`); + } + if (segmentIds.shape.length !== 1) { + throw new Error(`Segment ids should be a vector but received shape + ${segmentIds.shape}`); + } + const $data = backend2.readSync(data.dataId); + const $indices = backend2.readSync(indices.dataId); + const $segmentIds = backend2.readSync(segmentIds.dataId); + const [outputData, outputDataShape] = sparseSegmentReductionImplCPU($data, data.shape, data.dtype, $indices, $segmentIds, true); + return backend2.makeTensorInfo(outputDataShape, data.dtype, outputData); + } + var sparseSegmentMeanConfig2 = { + kernelName: SparseSegmentMean, + backendName: "webgl", + kernelFunc: sparseSegmentMean2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseSegmentSum.js + init_define_BUILD_VERSION(); + function sparseSegmentSum2(args) { + const { inputs, backend: backend2 } = args; + const { data, indices, segmentIds } = inputs; + if (data.shape.length < 1) { + throw new Error(`Data should be at least 1 dimensional but received scalar`); + } + if (indices.shape.length !== 1) { + throw new Error(`Indices should be a vector but received shape + ${indices.shape}`); + } + if (segmentIds.shape.length !== 1) { + throw new Error(`Segment ids should be a vector but received shape + ${segmentIds.shape}`); + } + const $data = backend2.readSync(data.dataId); + const $indices = backend2.readSync(indices.dataId); + const $segmentIds = backend2.readSync(segmentIds.dataId); + const [outputData, outputDataShape] = sparseSegmentReductionImplCPU($data, data.shape, data.dtype, $indices, $segmentIds); + return backend2.makeTensorInfo(outputDataShape, data.dtype, outputData); + } + var sparseSegmentSumConfig2 = { + kernelName: SparseSegmentSum, + backendName: "webgl", + kernelFunc: sparseSegmentSum2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseToDense.js + init_define_BUILD_VERSION(); + function sparseToDense2(args) { + const { inputs, backend: backend2, attrs } = args; + const { sparseIndices, sparseValues, defaultValue } = inputs; + const { outputShape } = attrs; + const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util_exports.calculateShapes(sparseValues, sparseIndices, outputShape); + const sumDupeIndices = false; + if (sparseValues.dtype === "string") { + const indicesBuf = backend2.bufferSync(sparseIndices); + const updatesBuf = backend2.bufferSync(sparseValues); + const $defaultValue = util_exports.decodeString(backend2.readSync(defaultValue.dataId)[0]); + const outBuf = scatterImplCPU(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices); + return backend2.makeTensorInfo(outputShape, outBuf.dtype, outBuf.values); + } + const program = new ScatterProgram(numUpdates, sliceRank, sparseIndices.shape.length, sparseValues.shape.length, strides, [outputSize, 1], sumDupeIndices); + const res = backend2.runWebGLProgram(program, [sparseValues, sparseIndices, defaultValue], sparseValues.dtype); + const reshaped = reshape3({ inputs: { x: res }, backend: backend2, attrs: { shape: outputShape } }); + backend2.disposeIntermediateTensorInfo(res); + return reshaped; + } + var sparseToDenseConfig2 = { + kernelName: SparseToDense, + backendName: "webgl", + kernelFunc: sparseToDense2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SplitV.js + init_define_BUILD_VERSION(); + function splitV2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { numOrSizeSplits, axis } = attrs; + const $axis = util_exports.parseAxisParam(axis, x.shape)[0]; + const splitSizes = backend_util_exports.prepareSplitSize(x, numOrSizeSplits, $axis); + const xRank = x.shape.length; + const begin = new Array(xRank).fill(0); + const size = x.shape.slice(); + return splitSizes.map((s) => { + const sliceSize = [...size]; + sliceSize[$axis] = s; + const sliceT = slice3({ inputs: { x }, backend: backend2, attrs: { begin, size: sliceSize } }); + begin[$axis] += s; + return sliceT; + }); + } + var splitVConfig2 = { + kernelName: SplitV, + backendName: "webgl", + kernelFunc: splitV2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sqrt.js + init_define_BUILD_VERSION(); + var SQRT = `return sqrt(x);`; + var sqrt3 = unaryKernelFunc2({ opSnippet: SQRT, packedOpSnippet: SQRT, cpuKernelImpl: sqrtImplCPU }); + var sqrtConfig2 = { + kernelName: Sqrt, + backendName: "webgl", + kernelFunc: sqrt3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Square.js + init_define_BUILD_VERSION(); + var SQUARE = `return x * x;`; + var square3 = unaryKernelFunc2({ opSnippet: SQUARE }); + var squareConfig2 = { + kernelName: Square, + backendName: "webgl", + kernelFunc: square3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SquaredDifference.js + init_define_BUILD_VERSION(); + var SQUARED_DIFFERENCE = "return (a - b) * (a - b);"; + var squaredDifference3 = binaryKernelFunc2({ opSnippet: SQUARED_DIFFERENCE, packedOpSnippet: SQUARED_DIFFERENCE }); + var squaredDifferenceConfig2 = { + kernelName: SquaredDifference, + backendName: "webgl", + kernelFunc: squaredDifference3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Step.js + init_define_BUILD_VERSION(); + function step3({ inputs, attrs, backend: backend2 }) { + const { x } = inputs; + const opSnippet = CHECK_NAN_SNIPPET + ` + return x > 0.0 ? 1.0 : float(${attrs.alpha}); + `; + const program = new UnaryOpProgram(x.shape, opSnippet); + return backend2.runWebGLProgram(program, [x], x.dtype); + } + var stepConfig2 = { + kernelName: Step, + backendName: "webgl", + kernelFunc: step3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StridedSlice.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/strided_slice_gpu.js + init_define_BUILD_VERSION(); + var StridedSliceProgram = class { + constructor(begin, strides, size) { + this.variableNames = ["x"]; + this.outputShape = size; + const rank = size.length; + const inputDtype = getCoordsDataType(size.length); + const dtype = getCoordsDataType(size.length); + let newCoords = ""; + if (rank === 1) { + newCoords = "coords * strides + begin"; + } else { + let outputAxis = 0; + newCoords = size.map((_, i) => { + outputAxis++; + return size.length === 1 ? `coords * strides[${i}] + begin[${i}]` : `coords[${outputAxis - 1}] * strides[${i}] + begin[${i}]`; + }).join(","); + } + this.userCode = ` + ${inputDtype} begin = ${inputDtype}(${begin}); + ${inputDtype} strides = ${inputDtype}(${strides}); + + void main() { + ${dtype} coords = getOutputCoords(); + setOutput(getX(${newCoords})); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StridedSlice.js + function stridedSlice3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask } = attrs; + const { finalShapeSparse, finalShape, isIdentity, sliceDim0, isSimpleSlice, begin: $begin, end: $end, strides: $strides } = slice_util_exports.sliceInfo(x.shape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask); + let result; + if (isIdentity) { + result = reshape3({ inputs: { x }, backend: backend2, attrs: { shape: finalShape } }); + } else if (sliceDim0 || isSimpleSlice) { + util_exports.assert(x.shape.length >= 1, () => `Input must have rank at least 1, got: ${x.shape.length}`); + const size = slice_util_exports.computeOutShape($begin, $end, $strides); + const sliced = slice3({ inputs: { x }, backend: backend2, attrs: { begin: $begin, size } }); + result = reshape3({ inputs: { x: sliced }, backend: backend2, attrs: { shape: finalShape } }); + backend2.disposeIntermediateTensorInfo(sliced); + } else { + const shouldExecuteOnCPU = backend2.shouldExecuteOnCPU([x]); + if (shouldExecuteOnCPU) { + const values = backend2.readSync(x.dataId); + const xBuf = buffer(x.shape, x.dtype, values); + const resultValues = stridedSliceImplCPU(finalShapeSparse, xBuf, $strides, $begin); + result = backend2.makeTensorInfo(finalShape, x.dtype, resultValues.values); + } else { + const program = new StridedSliceProgram($begin, $strides, finalShapeSparse); + result = backend2.runWebGLProgram(program, [x], x.dtype); + } + } + const resultReshaped = reshape3({ inputs: { x: result }, backend: backend2, attrs: { shape: finalShape } }); + backend2.disposeIntermediateTensorInfo(result); + return resultReshaped; + } + var stridedSliceConfig2 = { + kernelName: StridedSlice, + backendName: "webgl", + kernelFunc: stridedSlice3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StringNGrams.js + init_define_BUILD_VERSION(); + function stringNGrams2(args) { + const { inputs, backend: backend2, attrs } = args; + const { separator, nGramWidths, leftPad, rightPad: rightPad2, padWidth, preserveShortSequences } = attrs; + const { data, dataSplits } = inputs; + const $data = backend2.readSync(data.dataId); + const $dataSplits = backend2.readSync(dataSplits.dataId); + const [nGrams, nGramsSplits] = stringNGramsImplCPU($data, $dataSplits, separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences); + return [ + backend2.makeTensorInfo([nGrams.length], "string", nGrams), + backend2.makeTensorInfo(dataSplits.shape, "int32", nGramsSplits) + ]; + } + var stringNGramsConfig2 = { + kernelName: StringNGrams, + backendName: "webgl", + kernelFunc: stringNGrams2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StringSplit.js + init_define_BUILD_VERSION(); + function stringSplit2(args) { + const { inputs, backend: backend2, attrs } = args; + const { skipEmpty } = attrs; + const { input: input2, delimiter } = inputs; + if (input2.dtype !== "string") { + throw new Error("Input must be of datatype string"); + } + if (input2.shape.length !== 1) { + throw new Error(`Input must be a vector, got shape: ${input2.shape}`); + } + if (delimiter.shape.length !== 0) { + throw new Error(`Delimiter must be a scalar, got shape: ${delimiter.shape}`); + } + const $input = backend2.readSync(input2.dataId); + const $delimiter = backend2.readSync(delimiter.dataId)[0]; + const [indices, values, shape] = stringSplitImplCPU($input, $delimiter, skipEmpty); + const outputSize = values.length; + return [ + backend2.makeTensorInfo([outputSize, 2], "int32", indices), + backend2.makeTensorInfo([outputSize], "string", values), + backend2.makeTensorInfo([2], "int32", new Int32Array(shape)) + ]; + } + var stringSplitConfig2 = { + kernelName: StringSplit, + backendName: "webgl", + kernelFunc: stringSplit2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StringToHashBucketFast.js + init_define_BUILD_VERSION(); + function stringToHashBucketFast2(args) { + const { inputs, backend: backend2, attrs } = args; + const { numBuckets } = attrs; + const { input: input2 } = inputs; + if (input2.dtype !== "string") { + throw new Error("Input must be of datatype string"); + } + if (numBuckets <= 0) { + throw new Error(`Number of buckets must be at least 1`); + } + const $input = backend2.readSync(input2.dataId); + const output = stringToHashBucketFastImplCPU($input, numBuckets); + return backend2.makeTensorInfo(input2.shape, "int32", output); + } + var stringToHashBucketFastConfig2 = { + kernelName: StringToHashBucketFast, + backendName: "webgl", + kernelFunc: stringToHashBucketFast2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tan.js + init_define_BUILD_VERSION(); + var TAN = `return tan(x);`; + var tan3 = unaryKernelFunc2({ opSnippet: TAN }); + var tanConfig2 = { + kernelName: Tan, + backendName: "webgl", + kernelFunc: tan3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tanh.js + init_define_BUILD_VERSION(); + var TANH = ` + float e2x = exp(-2.0 * abs(x)); + return sign(x) * (1.0 - e2x) / (1.0 + e2x); +`; + var tanh4 = unaryKernelFunc2({ opSnippet: TANH }); + var tanhConfig2 = { + kernelName: Tanh, + backendName: "webgl", + kernelFunc: tanh4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tile.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/tile_gpu.js + init_define_BUILD_VERSION(); + var TileProgram = class { + constructor(aShape, reps) { + this.variableNames = ["A"]; + const outputShape = new Array(aShape.length); + for (let i = 0; i < outputShape.length; i++) { + outputShape[i] = aShape[i] * reps[i]; + } + this.outputShape = outputShape; + this.rank = outputShape.length; + const dtype = getCoordsDataType(this.rank); + const sourceCoords = getSourceCoords3(aShape); + this.userCode = ` + void main() { + ${dtype} resRC = getOutputCoords(); + setOutput(getA(${sourceCoords})); + } + `; + } + }; + function getSourceCoords3(aShape) { + const rank = aShape.length; + if (rank > 5) { + throw Error(`Tile for rank ${rank} is not yet supported`); + } + if (rank === 1) { + return `imod(resRC, ${aShape[0]})`; + } + const currentCoords = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u"]; + const sourceCoords = []; + for (let i = 0; i < aShape.length; i++) { + sourceCoords.push(`imod(${currentCoords[i]}, ${aShape[i]})`); + } + return sourceCoords.join(); + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tile.js + function tile4(params) { + const { inputs, backend: backend2, attrs } = params; + const { x } = inputs; + const { reps } = attrs; + if (x.dtype === "string" || x.shape.length > 5) { + const data = backend2.readSync(x.dataId); + const value = x.dtype === "string" ? data.map((d) => util_exports.decodeString(d)) : data; + const buf = buffer(x.shape, x.dtype, value); + const outBuf = tileImplCPU(buf, reps); + return backend2.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values); + } + const program = new TileProgram(x.shape, reps); + const output = backend2.runWebGLProgram(program, [x], x.dtype); + return output; + } + var tileConfig2 = { + kernelName: Tile, + backendName: "webgl", + kernelFunc: tile4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/TopK.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/top_k_gpu.js + init_define_BUILD_VERSION(); + var SwapProgram = class { + constructor(shape) { + this.variableNames = ["x", "indices"]; + this.customUniforms = [ + { name: "n", type: "int" }, + { name: "firstPass", type: "int" }, + { name: "negativeInf", type: "float" }, + { name: "dir", type: "int" }, + { name: "inc", type: "int" } + ]; + this.outputShape = shape; + this.userCode = ` + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int elemIdx = coords[1]; + + // We compare elements pair-wise within a group of size 2 * inc. + // The comparing rule for each group alternates between ascending + // and descending. Within each group, we compare each pair at + // positions i and i+inc. To decide whether an element at position i + // is x0 or x1, we mod it by 2 * inc, if the result is smaller than + // inc, it is in the first half of the group, we denote it as x0, + // otherwise we denote it as x1. + // For example, as shown in the Bitonic top K paper referenced above, + // Figure5(a) shows that element[1] is in the + // second half of the group when group size is 2, but it is in the + // first half of the group when group size is 4. + + bool isFirstInPair = imod(elemIdx, 2 * inc) < inc; + int i = isFirstInPair ? elemIdx : elemIdx - inc; + + int i0 = firstPass == 1 ? i : int(getIndices(batch, i)); + int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc)); + float x0 = i0 < n ? getX(batch, i0) : negativeInf; + float x1 = i1 < n ? getX(batch, i1) : negativeInf; + + // Denotes which direction indices are in (ascending or descending). + bool reverse = imod(elemIdx, 2 * dir) >= dir; + bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0); + if (reverse == isGreater) { // Elements in opposite order of direction + int iTemp = i0; + i0 = i1; + i1 = iTemp; + } + if (isFirstInPair) { + setOutput(float(i0)); + } else { + setOutput(float(i1)); + } + } + `; + } + }; + var MergeProgram = class { + constructor(shape) { + this.variableNames = ["x", "indices"]; + this.customUniforms = [ + { name: "n", type: "int" }, + { name: "firstPass", type: "int" }, + { name: "k", type: "int" } + ]; + this.outputShape = shape; + this.userCode = ` + void main() { + // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ... + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int elemIdx = coords[1]; + + // The output size is half of the previous size. + // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _ (k=4), + // we only need to output the indices at positions |, the indices at + // positions _ can be thrown away, see Figure5(b) After Phase 2 + // (Merge phase) in the Bitonic Top K paper referenced above. + // For example, the paper shows we only need to output the orange bars. + // The output sequence should look like this | | | | | | | |. + // Because the sequence is halved, to map the output index back + // to the previous sequence to find the corresponding value, + // we need to double the index. When we double the index, + // we basically interpolate a position, so 2i looks like + // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position + // of each 2k positions by - elemIdx % k. E.g. for output at + // index 4,5,6,7, we want to get the corresponding element at + // original index 8,9,10,11, for output at index 8,9,10,11, + // we want to get the corresponding element at original index + // 16,17,18,19, so on and so forth. + + int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k)); + int i0 = firstPass == 1 ? i : int(getIndices(batch, i)); + int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k)); + + float x0 = getX(batch, i0); + float x1 = i1 < n ? getX(batch, i1) : x0; + + setOutput(x0 >= x1 ? float(i0) : float(i1)); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/TopK.js + function disposeIntermediateTensorInfoOrNull(backend2, tensorInfo) { + if (tensorInfo !== null) { + backend2.disposeIntermediateTensorInfo(tensorInfo); + } + } + function roundUpToPow2(num) { + let pow22 = 1; + while (pow22 < num) { + pow22 *= 2; + } + return pow22; + } + function topK2(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { k, sorted } = attrs; + const TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD = env().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"); + const TOPK_K_CPU_HANDOFF_THRESHOLD = env().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"); + const xShape = x.shape; + const lastDim = xShape[xShape.length - 1]; + if (backend2.shouldExecuteOnCPU([x]) || lastDim < TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD || k > TOPK_K_CPU_HANDOFF_THRESHOLD) { + const xVals = backend2.readSync(x.dataId); + const [allTopKVals, allTopKIndices] = topKImplCPU(xVals, xShape, x.dtype, k, sorted); + return [ + backend2.makeTensorInfo(allTopKVals.shape, allTopKVals.dtype, allTopKVals.values), + backend2.makeTensorInfo(allTopKIndices.shape, allTopKIndices.dtype, allTopKIndices.values) + ]; + } + if (k === 0) { + xShape[xShape.length - 1] = 0; + return [ + backend2.makeTensorInfo(xShape, x.dtype, []), + backend2.makeTensorInfo(xShape, "int32", []) + ]; + } + if (lastDim === 1) { + return [ + x, + fill3({ attrs: { shape: xShape, dtype: "int32", value: 0 }, backend: backend2 }) + ]; + } + const xtexData = backend2.texData.get(x.dataId); + const xIsPacked = xtexData !== null && xtexData.isPacked; + const xUnPacked = xIsPacked ? backend2.unpackTensor(x) : x; + const xSize = util_exports.sizeFromShape(xShape); + const batch = xSize / lastDim; + const x2D = reshape3({ inputs: { x: xUnPacked }, attrs: { shape: [batch, lastDim] }, backend: backend2 }); + if (xIsPacked) { + disposeIntermediateTensorInfoOrNull(backend2, xUnPacked); + } + const kPow2 = roundUpToPow2(k); + const lastDimPow2 = roundUpToPow2(lastDim); + let indices = null; + const getInputs = () => indices === null ? [x2D, x2D] : [x2D, indices]; + const runSwap = (dir, inc, shape) => { + const inputs2 = getInputs(); + const program = new SwapProgram(shape); + const fistPass = indices === null ? 1 : 0; + const customValues = [[lastDim], [fistPass], [Number.NEGATIVE_INFINITY], [dir], [inc]]; + const prevIndices2 = indices; + indices = backend2.runWebGLProgram(program, inputs2, "int32", customValues); + disposeIntermediateTensorInfoOrNull(backend2, prevIndices2); + }; + for (let len = 1; len < kPow2; len *= 2) { + const dir = len * 2; + for (let inc = len; inc >= 1; inc /= 2) { + runSwap(dir, inc, [batch, lastDimPow2]); + } + } + for (let indicesSize = lastDimPow2; indicesSize > kPow2; indicesSize /= 2) { + const inputs2 = getInputs(); + const mergeProgram = new MergeProgram([batch, indicesSize / 2]); + const firstPass = indices === null ? 1 : 0; + const customValues = [[lastDim], [firstPass], [kPow2]]; + const prevIndices2 = indices; + indices = backend2.runWebGLProgram(mergeProgram, inputs2, "int32", customValues); + disposeIntermediateTensorInfoOrNull(backend2, prevIndices2); + const len = kPow2 / 2; + const dir = len * 2; + for (let inc = len; inc >= 1; inc /= 2) { + runSwap(dir, inc, indices.shape); + } + } + let prevIndices = indices; + indices = slice3({ inputs: { x: indices }, backend: backend2, attrs: { begin: 0, size: [batch, k] } }); + disposeIntermediateTensorInfoOrNull(backend2, prevIndices); + let values = gatherV22({ inputs: { x: x2D, indices }, backend: backend2, attrs: { axis: 1, batchDims: 1 } }); + disposeIntermediateTensorInfoOrNull(backend2, x2D); + const newShape = xShape.slice(0, -1); + newShape.push(k); + prevIndices = indices; + indices = reshape3({ inputs: { x: indices }, attrs: { shape: newShape }, backend: backend2 }); + disposeIntermediateTensorInfoOrNull(backend2, prevIndices); + const prevValues = values; + values = reshape3({ inputs: { x: values }, attrs: { shape: newShape }, backend: backend2 }); + disposeIntermediateTensorInfoOrNull(backend2, prevValues); + return [values, indices]; + } + var topKConfig2 = { + kernelName: TopK, + backendName: "webgl", + kernelFunc: topK2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transform.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/transform_gpu.js + init_define_BUILD_VERSION(); + var TransformProgram = class { + constructor(imageHeight, imageWidth, interpolation, fillMode, fillValue, outShape) { + this.variableNames = ["Image", "Transforms"]; + this.outputShape = outShape; + const interpolationModeId = interpolation === "nearest" ? 1 : 2; + let fillModeId; + switch (fillMode) { + case "constant": + fillModeId = 1; + break; + case "reflect": + fillModeId = 2; + break; + case "wrap": + fillModeId = 3; + break; + case "nearest": + fillModeId = 4; + break; + default: + fillModeId = 1; + break; + } + this.userCode = ` + float mapCoord(float outCoord, float len) { + float inCoord = outCoord; + if(${fillModeId} == 2) { + if (inCoord < 0.0) { + if (len <= 1.0) { + inCoord = 0.0; + } else { + float sz2 = 2.0 * len; + if (inCoord < sz2) { + inCoord = sz2 * float(int(float(-inCoord / sz2))) + + inCoord; + } + inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0; + } + } else if (inCoord > len - 1.0) { + if (len <= 1.0) { + inCoord = 0.0; + } else { + float sz2 = 2.0 * len; + inCoord -= sz2 * float(int(float(inCoord / sz2))); + if (inCoord >= len) { + inCoord = sz2 - inCoord - 1.0; + } + } + } + return clamp(inCoord, 0.0, len - 1.0); + } else if (${fillModeId} == 3) { + if (inCoord < 0.0) { + if (len <= 1.0) { + inCoord = 0.0; + } else { + float sz = len - 1.0; + inCoord += len * (float(int(float(-inCoord / sz))) + 1.0); + } + } else if (inCoord > len - 1.0) { + if (len <= 1.0) { + inCoord = 0.0; + } else { + float sz = len - 1.0; + inCoord -= len * float(int(float(inCoord / sz))); + } + } + return clamp(inCoord, 0.0, len - 1.0); + } else if (${fillModeId} == 4) { + return clamp(outCoord, 0.0, len - 1.0); + } else { + return outCoord; + } + } + + float readWithFillValue(int batch, int coordY, int coordX, + int channel) { + float outputValue; + if (0 <= coordY && coordY < ${imageHeight} && 0 <= coordX && coordX < ${imageWidth}) { + outputValue = getImage(batch, coordY, coordX, channel); + } else { + outputValue = float(${fillValue}); + } + return outputValue; + } + + void main() { + ivec4 coords = getOutputCoords(); + float outputValue; + int batch = coords[0]; + int x = coords[2]; + int y = coords[1]; + int channel = coords[3]; + float xf = float(x); + float yf = float(y); + float a1 = getTransforms(batch, 0); + float a2 = getTransforms(batch, 1); + float a3 = getTransforms(batch, 2); + float b1 = getTransforms(batch, 3); + float b2 = getTransforms(batch, 4); + float b3 = getTransforms(batch, 5); + float c1 = getTransforms(batch, 6); + float c2 = getTransforms(batch, 7); + float projection = c1 * xf + c2 * yf + 1.0; + if (projection == 0.0) { + outputValue = float(${fillValue}); + } else { + float inX = (a1 * xf + a2 * yf + a3) / projection; + float inY = (b1 * xf + b2 * yf + b3) / projection; + float mapX = mapCoord(inX, float(${imageWidth})); + float mapY = mapCoord(inY, float(${imageHeight})); + + if (${interpolationModeId} == 1) { + int coordY = int(round(mapY)); + int coordX = int(round(mapX)); + outputValue = readWithFillValue(batch, coordY, coordX, + channel); + } else { + float yFloor = floor(mapY); + float xFloor = floor(mapX); + float yCeil = yFloor + 1.0; + float xCeil = xFloor + 1.0; + float valueYFloor = (xCeil - mapX) * + readWithFillValue(batch, int(yFloor), int(xFloor), channel) + + (mapX - xFloor) * + readWithFillValue(batch, int(yFloor), int(xCeil), channel); + float valueYCeil = (xCeil - mapX) * + readWithFillValue(batch, int(yCeil), int(xFloor), channel) + + (mapX - xFloor) * + readWithFillValue(batch, int(yCeil), int(xCeil), channel); + outputValue = (yCeil - mapY) * valueYFloor + + (mapY - yFloor) * valueYCeil; + } + } + setOutput(outputValue); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transform.js + function transform3(args) { + const { inputs, backend: backend2, attrs } = args; + const { image: image2, transforms } = inputs; + const { interpolation, fillMode, fillValue, outputShape } = attrs; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const [outHeight, outWidth] = outputShape != null ? outputShape : [imageHeight, imageWidth]; + const outShape = [ + batch, + outHeight, + outWidth, + numChannels + ]; + const program = new TransformProgram(imageHeight, imageWidth, interpolation, fillMode, fillValue, outShape); + return backend2.runWebGLProgram(program, [image2, transforms], "float32"); + } + var transformConfig2 = { + kernelName: Transform, + backendName: "webgl", + kernelFunc: transform3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Unique.js + init_define_BUILD_VERSION(); + function unique4(args) { + const { inputs, attrs, backend: backend2 } = args; + const { axis } = attrs; + const { x } = inputs; + assertNotComplex2(x, "unique"); + console.warn("WARNING: ", "UI might be locked temporarily as data is being downloaded"); + const values = backend2.readSync(x.dataId); + const { outputValues, outputShape, indices } = uniqueImplCPU(values, axis, x.shape, x.dtype); + return [ + backend2.makeTensorInfo(outputShape, x.dtype, outputValues), + backend2.makeTensorInfo([indices.length], "int32", indices) + ]; + } + var uniqueConfig2 = { + kernelName: Unique, + backendName: "webgl", + kernelFunc: unique4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Unpack.js + init_define_BUILD_VERSION(); + function unpack2(args) { + const { inputs, backend: backend2, attrs } = args; + const { value } = inputs; + let { axis } = attrs; + if (axis < 0) { + axis += value.shape.length; + } + const x = value; + const xRank = x.shape.length; + const num = value.shape[axis]; + const outShape = new Array(xRank - 1); + let outIndex = 0; + for (let i = 0; i < xRank; i++) { + if (i !== axis) { + outShape[outIndex++] = x.shape[i]; + } + } + const toDispose = []; + const begin = new Array(xRank).fill(0); + const size = x.shape.slice(); + size[axis] = 1; + const res = new Array(num); + for (let i = 0; i < res.length; i++) { + begin[axis] = i; + const sliced = slice3({ inputs: { x }, backend: backend2, attrs: { begin, size } }); + const reshaped = reshape3({ inputs: { x: sliced }, backend: backend2, attrs: { shape: outShape } }); + res[i] = reshaped; + toDispose.push(sliced); + } + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return res; + } + var unpackConfig2 = { + kernelName: Unpack, + backendName: "webgl", + kernelFunc: unpack2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/UnsortedSegmentSum.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/segment_gpu.js + init_define_BUILD_VERSION(); + var SegmentOpProgram = class { + constructor(segOpInfo, segOpType) { + this.variableNames = ["x", "segmentIds"]; + const windowSize = segOpInfo.windowSize; + const batchSize = segOpInfo.batchSize; + const inSize = segOpInfo.inSize; + const numSegments = segOpInfo.numSegments; + const outSize = numSegments * Math.ceil(inSize / windowSize); + this.outputShape = [batchSize, outSize]; + const initializationValue = "0.0"; + const returnValue = `sumValue`; + const windowSizeNearestVec4 = Math.floor(windowSize / 4) * 4; + const windowSizeVec4Remainder = windowSize % 4; + const updateSnippet = ` + sumValue += dot(values, segFilter); + `; + let checkValueOutOfBounds = ""; + if (inSize % windowSize > 0) { + checkValueOutOfBounds = ` + if (inIdx < 0 || inIdx >= ${inSize}) { + return initializationValue; + } + `; + } + let checkSegmentIdOutOfBounds = ""; + if (inSize % windowSize > 0) { + checkSegmentIdOutOfBounds = ` + if (inIdx < 0 || inIdx >= ${inSize}) { + return -1.0; + } + `; + } + this.userCode = ` + const float initializationValue = ${initializationValue}; + + float getValue(int batch, int inIdx) { + ${checkValueOutOfBounds} + return getX(batch, inIdx); + } + + float getSegmentIdAtIndex(int inIdx) { + ${checkSegmentIdOutOfBounds} + return getSegmentIds(inIdx); + } + + void main() { + ivec2 coords = getOutputCoords(); + int batch = coords[0]; + int outIdx = coords[1]; + int inOffset = int(floor(float(outIdx) / float( + ${numSegments})) * float(${windowSize})); + int currentSeg = int(mod(float(outIdx), float(${numSegments}))); + + float sumValue = 0.0; + + for (int i = 0; i < ${windowSizeNearestVec4}; i += 4) { + int inIdx = inOffset + i; + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), + getValue(batch, inIdx + 3) + ); + + vec4 segFilter = vec4( + int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0 + ); + + ${updateSnippet} + } + + int inIdx = inOffset + ${windowSizeNearestVec4}; + if (${windowSizeVec4Remainder === 1}) { + vec4 values = vec4( + getValue(batch, inIdx), + initializationValue, + initializationValue, + initializationValue + ); + + int inIdxSeg = int(getSegmentIdAtIndex(inIdx)); + + vec4 segFilter = vec4( + int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, + 0, + 0, + 0 + ); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 2}) { + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + initializationValue, + initializationValue + ); + + vec4 segFilter = vec4( + int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, + 0, + 0 + ); + + ${updateSnippet} + } else if (${windowSizeVec4Remainder === 3}) { + vec4 values = vec4( + getValue(batch, inIdx), + getValue(batch, inIdx + 1), + getValue(batch, inIdx + 2), + initializationValue + ); + + vec4 segFilter = vec4( + int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, + int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, + 0 + ); + + ${updateSnippet} + } + setOutput(${returnValue}); + } + `; + } + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/UnsortedSegmentSum.js + function unsortedSegmentSum3(args) { + const { inputs, backend: backend2, attrs } = args; + const { x, segmentIds } = inputs; + const { numSegments } = attrs; + const xRank = x.shape.length; + const toDispose = []; + let axis = 0; + const permutation = backend_util_exports.getAxesPermutation([axis], xRank); + let permutedX = x; + if (permutation != null) { + permutedX = transpose3({ inputs: { x }, backend: backend2, attrs: { perm: permutation } }); + toDispose.push(permutedX); + axis = backend_util_exports.getInnerMostAxes(1, xRank)[0]; + } + const outShape = backend_util_exports.segment_util.computeOutShape(permutedX.shape, axis, numSegments); + const inSize = util_exports.sizeFromShape([permutedX.shape[axis]]); + const a2D = reshape3({ inputs: { x: permutedX }, backend: backend2, attrs: { shape: [-1, inSize] } }); + toDispose.push(a2D); + const outputDType = sumOutType(x.dtype); + const segOpCompute = (x2, segOpType, segmentIds2, dtype, numSegments2) => { + const batchSize = x2.shape[0]; + const inSize2 = x2.shape[1]; + const windowSize = backend_util_exports.segment_util.segOpComputeOptimalWindowSize(inSize2, numSegments2); + const segOpInfo = { windowSize, inSize: inSize2, batchSize, numSegments: numSegments2 }; + const program = new SegmentOpProgram(segOpInfo, segOpType); + const output = backend2.compileAndRun(program, [x2, segmentIds2], dtype); + toDispose.push(output); + if (output.shape[1] === numSegments2) { + return output; + } + const rangeInfo = range4({ + backend: backend2, + attrs: { start: 0, stop: numSegments2, step: 1, dtype: "float32" } + }); + const tileInfo = tile4({ + inputs: { x: rangeInfo }, + backend: backend2, + attrs: { reps: [inSize2 / windowSize] } + }); + toDispose.push(rangeInfo); + toDispose.push(tileInfo); + const result2 = segOpCompute(output, segOpType, tileInfo, dtype, numSegments2); + return result2; + }; + const segOpResult = segOpCompute(a2D, "unsortedSegmentSum", segmentIds, outputDType, numSegments); + const reshaped = reshape3({ inputs: { x: segOpResult }, backend: backend2, attrs: { shape: outShape } }); + let result = reshaped; + if (permutation != null) { + toDispose.push(reshaped); + const perm = backend_util_exports.getUndoAxesPermutation(permutation); + result = transpose3({ inputs: { x: result }, backend: backend2, attrs: { perm } }); + } + toDispose.forEach((t) => backend2.disposeIntermediateTensorInfo(t)); + return result; + } + var unsortedSegmentSumConfig2 = { + kernelName: UnsortedSegmentSum, + backendName: "webgl", + kernelFunc: unsortedSegmentSum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-webgl@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-webgl/dist/register_all_kernels.js + var kernelConfigs2 = [ + _fusedMatMulConfig2, + absConfig2, + acosConfig2, + acoshConfig2, + addConfig2, + addNConfig2, + allConfig2, + anyConfig2, + argMaxConfig2, + argMinConfig2, + asinConfig2, + asinhConfig2, + atanConfig2, + atan2Config2, + atanhConfig2, + avgPoolConfig2, + avgPool3DConfig2, + avgPool3DGradConfig3, + avgPoolGradConfig3, + batchMatMulConfig2, + batchNormConfig2, + batchToSpaceNDConfig2, + bincountConfig2, + broadcastArgsConfig2, + castConfig2, + ceilConfig2, + clipByValueConfig2, + complexConfig2, + complexAbsConfig2, + concatConfig2, + conv2DConfig2, + conv2DBackpropFilterConfig2, + conv2DBackpropInputConfig2, + conv3DConfig2, + conv3DBackpropFilterV2Config2, + conv3DBackpropInputConfig, + cosConfig2, + coshConfig2, + cropAndResizeConfig2, + cumprodConfig2, + cumsumConfig2, + denseBincountConfig2, + depthToSpaceConfig2, + depthwiseConv2dNativeConfig2, + depthwiseConv2dNativeBackpropFilterConfig2, + depthwiseConv2dNativeBackpropInputConfig2, + diagConfig2, + dilation2DConfig2, + einsumConfig2, + eluConfig2, + eluGradConfig3, + equalConfig2, + erfConfig2, + expConfig2, + expandDimsConfig2, + expm1Config2, + fftConfig2, + fillConfig2, + flipLeftRightConfig2, + floorConfig2, + floorDivConfig2, + fromPixelsConfig, + fusedConv2DConfig2, + fusedDepthwiseConv2DConfig2, + gatherNdConfig2, + gatherV2Config2, + greaterConfig2, + greaterEqualConfig2, + identityConfig2, + ifftConfig2, + imagConfig2, + isFiniteConfig2, + isInfConfig2, + isNaNConfig2, + leakyReluConfig2, + lessConfig2, + lessEqualConfig2, + linSpaceConfig2, + logConfig2, + log1pConfig2, + logicalAndConfig2, + logicalNotConfig2, + logicalOrConfig2, + LRNConfig2, + LRNGradConfig2, + maxConfig2, + maximumConfig2, + maxPoolConfig2, + maxPool3DConfig2, + maxPool3DGradConfig3, + maxPoolGradConfig3, + maxPoolWithArgmaxConfig2, + meanConfig2, + minConfig2, + minimumConfig2, + mirrorPadConfig2, + modConfig2, + multinomialConfig2, + multiplyConfig2, + negConfig2, + nonMaxSuppressionV3Config2, + nonMaxSuppressionV4Config2, + nonMaxSuppressionV5Config2, + notEqualConfig2, + oneHotConfig2, + onesLikeConfig2, + packConfig2, + padV2Config2, + powConfig2, + preluConfig2, + prodConfig2, + rangeConfig2, + realConfig2, + realDivConfig2, + reciprocalConfig2, + reluConfig2, + relu6Config2, + reshapeConfig2, + resizeBilinearConfig2, + resizeBilinearGradConfig3, + resizeNearestNeighborConfig2, + resizeNearestNeighborGradConfig3, + reverseConfig2, + rotateWithOffsetConfig2, + roundConfig2, + rsqrtConfig2, + scatterNdConfig2, + searchSortedConfig2, + selectConfig2, + seluConfig2, + sigmoidConfig2, + signConfig2, + sinConfig2, + sinhConfig2, + sliceConfig2, + softmaxConfig2, + softplusConfig2, + spaceToBatchNDConfig2, + sparseFillEmptyRowsConfig2, + sparseReshapeConfig2, + sparseSegmentMeanConfig2, + sparseSegmentSumConfig2, + sparseToDenseConfig2, + splitVConfig2, + sqrtConfig2, + squareConfig2, + squaredDifferenceConfig2, + stepConfig2, + stridedSliceConfig2, + stringNGramsConfig2, + stringSplitConfig2, + stringToHashBucketFastConfig2, + subConfig2, + sumConfig2, + tanConfig2, + tanhConfig2, + tileConfig2, + topKConfig2, + transformConfig2, + transposeConfig2, + uniqueConfig2, + unpackConfig2, + unsortedSegmentSumConfig2, + zerosLikeConfig2 + ]; + for (const kernelConfig of kernelConfigs2) { + registerKernel(kernelConfig); + } + + // node_modules/.pnpm/@tensorflow+tfjs@3.19.0_seedrandom@3.0.5/node_modules/@tensorflow/tfjs/dist/version.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/index.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/register_all_kernels.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/_FusedMatMul.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/types.js + init_define_BUILD_VERSION(); + var CppDType; + (function(CppDType2) { + CppDType2[CppDType2["float32"] = 0] = "float32"; + CppDType2[CppDType2["int32"] = 1] = "int32"; + CppDType2[CppDType2["bool"] = 2] = "bool"; + CppDType2[CppDType2["string"] = 3] = "string"; + CppDType2[CppDType2["complex64"] = 4] = "complex64"; + })(CppDType || (CppDType = {})); + var FusableActivation; + (function(FusableActivation2) { + FusableActivation2[FusableActivation2["linear"] = 0] = "linear"; + FusableActivation2[FusableActivation2["relu"] = 1] = "relu"; + FusableActivation2[FusableActivation2["relu6"] = 2] = "relu6"; + FusableActivation2[FusableActivation2["prelu"] = 3] = "prelu"; + FusableActivation2[FusableActivation2["leakyrelu"] = 4] = "leakyrelu"; + FusableActivation2[FusableActivation2["sigmoid"] = 5] = "sigmoid"; + FusableActivation2[FusableActivation2["elu"] = 6] = "elu"; + })(FusableActivation || (FusableActivation = {})); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/_FusedMatMul.js + var wasmFusedMatMul; + function setup(backend2) { + wasmFusedMatMul = backend2.wasm.cwrap(_FusedMatMul, null, [ + "number", + "array", + "number", + "number", + "array", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function fusedBatchMatMul(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b, bias, preluActivationWeights } = inputs; + if (a.dtype !== "float32" || b.dtype !== "float32") { + throw new Error(`_FusedMatMul for non non-float32 tensors not yet supported.`); + } + const { transposeA, transposeB, activation, leakyreluAlpha } = attrs; + const aId = backend2.dataIdMap.get(a.dataId).id; + const bId = backend2.dataIdMap.get(b.dataId).id; + let biasId = 0; + if (bias != null) { + const biasData = backend2.dataIdMap.get(bias.dataId); + if (biasData.shape.length !== 1) { + throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${biasData.shape.length}.`); + } + biasId = biasData.id; + } + const preluActivationWeightsId = preluActivationWeights == null ? 0 : backend2.dataIdMap.get(preluActivationWeights.dataId).id; + const fusedActivation = FusableActivation[activation]; + if (fusedActivation == null) { + throw new Error(`${activation} activation not yet supported for FusedConv2D in the wasm backend.`); + } + const leftDim = transposeA ? a.shape[2] : a.shape[1]; + const rightDim = transposeB ? b.shape[1] : b.shape[2]; + const batchDims = broadcast_util_exports.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2)); + const out = backend2.makeOutput([...batchDims, leftDim, rightDim], a.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const aShapeBytes = new Uint8Array(new Int32Array(a.shape).buffer); + const bShapeBytes = new Uint8Array(new Int32Array(b.shape).buffer); + wasmFusedMatMul(aId, aShapeBytes, a.shape.length, bId, bShapeBytes, b.shape.length, transposeA, transposeB, fusedActivation, biasId, preluActivationWeightsId, leakyreluAlpha || 0, outId); + return out; + } + var _fusedMatMulConfig3 = { + kernelName: _FusedMatMul, + backendName: "wasm", + setupFunc: setup, + kernelFunc: fusedBatchMatMul + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Abs.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/unary_kernel.js + init_define_BUILD_VERSION(); + function createUnaryKernelConfig(kernelName, outType) { + let wasmFunc9; + function setupFunc3(backend2) { + wasmFunc9 = backend2.wasm.cwrap(kernelName, null, [ + "number", + "number", + "number" + ]); + } + function kernelFunc3(args) { + const { backend: backend2, inputs: { x } } = args; + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(x.shape, outType || x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + if (util_exports.sizeFromShape(out.shape) === 0) { + return out; + } + wasmFunc9(xId, CppDType[x.dtype], outId); + return out; + } + return { kernelName, backendName: "wasm", setupFunc: setupFunc3, kernelFunc: kernelFunc3 }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Abs.js + var absConfig3 = createUnaryKernelConfig(Abs); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Add.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/binary_kernel.js + init_define_BUILD_VERSION(); + function createBinaryKernelConfig(kernelName, supportsFullBroadcast19, dtype) { + let wasmFunc9; + function setupFunc3(backend2) { + wasmFunc9 = backend2.wasm.cwrap(kernelName, null, [ + "number", + "array", + "number", + "number", + "array", + "number", + "number", + "number" + ]); + } + function kernelFunc3(args) { + const { backend: backend2, inputs } = args; + const { a, b } = inputs; + const aId = backend2.dataIdMap.get(a.dataId).id; + const bId = backend2.dataIdMap.get(b.dataId).id; + const outputType = dtype != null ? dtype : a.dtype; + const newShape = backend_util_exports.assertAndGetBroadcastShape(a.shape, b.shape); + const out = backend2.makeOutput(newShape, outputType); + if (util_exports.sizeFromShape(newShape) === 0) { + return out; + } + const aShapeBytes = new Uint8Array(new Int32Array(a.shape).buffer); + const bShapeBytes = new Uint8Array(new Int32Array(b.shape).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + const kernelFunc4 = () => wasmFunc9(aId, aShapeBytes, a.shape.length, bId, bShapeBytes, b.shape.length, CppDType[a.dtype], outId); + kernelFunc4(); + return out; + } + return { kernelName, backendName: "wasm", setupFunc: setupFunc3, kernelFunc: kernelFunc3 }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Add.js + var supportsFullBroadcast = true; + var addConfig3 = createBinaryKernelConfig(Add, supportsFullBroadcast); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/AddN.js + init_define_BUILD_VERSION(); + var wasmFunc; + function setupFunc(backend2) { + wasmFunc = backend2.wasm.cwrap(AddN, null, [ + "array", + "number", + "number", + "number" + ]); + } + function addn(args) { + const { inputs, backend: backend2 } = args; + const out = backend2.makeOutput(inputs[0].shape, inputs[0].dtype); + if (util_exports.sizeFromShape(out.shape) === 0) { + return out; + } + const inputIds = inputs.map((x) => backend2.dataIdMap.get(x.dataId).id); + const inputIdsBytes = new Uint8Array(new Int32Array(inputIds).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmFunc(inputIdsBytes, inputIds.length, CppDType[out.dtype], outId); + return out; + } + var addNConfig3 = { + kernelName: AddN, + backendName: "wasm", + setupFunc, + kernelFunc: addn + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/All.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/kernel_utils.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Transpose.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Identity.js + init_define_BUILD_VERSION(); + function identity3(args) { + const { inputs: { x }, backend: backend2 } = args; + const out = backend2.makeOutput(x.shape, x.dtype); + const inVals = backend2.typedArrayFromHeap(x); + const outVals = backend2.typedArrayFromHeap(out); + outVals.set(inVals); + return out; + } + var identityConfig3 = { + kernelName: Identity, + backendName: "wasm", + kernelFunc: identity3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Transpose.js + var wasmTranspose; + function setup2(backend2) { + wasmTranspose = backend2.wasm.cwrap(Transpose, null, [ + "number", + "array", + "number", + "number", + "number", + "array", + "number" + ]); + } + function transpose4(args) { + const { inputs, backend: backend2, attrs } = args; + const [reducedShape, perm] = removeOneSizeDims(inputs.x.shape, attrs.perm); + let permIsNoOp = true; + for (let i = 0; i < perm.length; i++) { + if (perm[i] !== i) { + permIsNoOp = false; + } + } + const outShape = computeOutShape4(inputs.x.shape, attrs.perm); + const x = { + dataId: inputs.x.dataId, + shape: reducedShape, + dtype: inputs.x.dtype + }; + if (permIsNoOp) { + const cloned = identity3({ inputs, backend: backend2 }); + cloned.shape = outShape; + return cloned; + } + const out = backend2.makeOutput(outShape, x.dtype); + const xId = backend2.dataIdMap.get(x.dataId).id; + const outId = backend2.dataIdMap.get(out.dataId).id; + const permBytes = new Uint8Array(new Int32Array(perm).buffer); + const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + wasmTranspose(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], outId, permBytes, perm.length); + return out; + } + function computeOutShape4(inShape, perm) { + const outShape = new Array(inShape.length); + for (let i = 0; i < outShape.length; i++) { + outShape[i] = inShape[perm[i]]; + } + return outShape; + } + function removeOneSizeDims(shape, perm) { + const newShape = []; + const newPerm = []; + for (let i = 0; i < shape.length; ++i) { + if (shape[i] !== 1) { + newShape.push(shape[i]); + } + if (shape[perm[i]] !== 1) { + newPerm.push(perm[i]); + } + } + for (let i = 0; i < newPerm.length; ++i) { + let minValIdx = -1; + for (let j = 0; j < newPerm.length; ++j) { + if (newPerm[j] >= i && (minValIdx === -1 || newPerm[minValIdx] > newPerm[j])) { + minValIdx = j; + } + } + newPerm[minValIdx] = i; + } + return [newShape, newPerm]; + } + var transposeConfig3 = { + kernelName: Transpose, + backendName: "wasm", + kernelFunc: transpose4, + setupFunc: setup2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/kernel_utils.js + function permuteAxesAndTranspose(x, axis, backend2) { + const xShape = x.shape; + const xRank = x.shape.length; + const originalAxes = util_exports.parseAxisParam(axis, xShape); + let axes = originalAxes; + const permutedAxes = backend_util_exports.getAxesPermutation(axes, xRank); + let xTransposed = null; + let inputWasTransposed = false; + if (permutedAxes != null) { + const newShape = new Array(xRank); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = xShape[permutedAxes[i]]; + } + axes = backend_util_exports.getInnerMostAxes(axes.length, xRank); + xTransposed = transpose4({ inputs: { x }, attrs: { perm: permutedAxes }, backend: backend2 }); + const xId = backend2.dataIdMap.get(x.dataId).id; + const transposedId = backend2.dataIdMap.get(xTransposed.dataId).id; + if (transposedId !== xId) { + inputWasTransposed = true; + } + } + return { transposed: xTransposed, originalAxes, axes, inputWasTransposed }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/All.js + var wasmAll; + function setup3(backend2) { + wasmAll = backend2.wasm.cwrap(All, null, ["number, number, number"]); + } + function all4(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + input2 = transposed; + inputId = transposedId; + } + const inputRank = input2.shape.length; + backend_util_exports.assertAxesAreInnerMostDims("all", axes, inputRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, x.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmAll(inputId, reduceSize, outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var allConfig3 = { + kernelName: All, + backendName: "wasm", + setupFunc: setup3, + kernelFunc: all4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Any.js + init_define_BUILD_VERSION(); + var wasmAny; + function setup4(backend2) { + wasmAny = backend2.wasm.cwrap(Any, null, ["number, number, number"]); + } + function any4(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + input2 = transposed; + inputId = transposedId; + } + const inputRank = input2.shape.length; + backend_util_exports.assertAxesAreInnerMostDims("any", axes, inputRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, x.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmAny(inputId, reduceSize, outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var anyConfig3 = { + kernelName: Any, + backendName: "wasm", + setupFunc: setup4, + kernelFunc: any4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ArgMax.js + init_define_BUILD_VERSION(); + var wasmFunc2; + function setup5(backend2) { + wasmFunc2 = backend2.wasm.cwrap(ArgMax, null, [ + "number", + "number", + "number", + "number", + "number" + ]); + } + function argmax(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + if (transposedId !== xId) { + input2 = transposed; + inputId = transposedId; + } + } + const outShape = input2.shape.slice(0, -1); + const out = backend2.makeOutput(outShape, "int32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const outerSize = util_exports.sizeFromShape(out.shape); + const innerSize = input2.shape[axes[0]]; + wasmFunc2(inputId, CppDType[input2.dtype], outerSize, innerSize, outId); + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + return out; + } + var argMaxConfig3 = { + kernelName: ArgMax, + backendName: "wasm", + kernelFunc: argmax, + setupFunc: setup5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/AvgPool.js + init_define_BUILD_VERSION(); + var wasmAvgPool; + function setup6(backend2) { + wasmAvgPool = backend2.wasm.cwrap(AvgPool, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function avgPool4(args) { + const { inputs, attrs, backend: backend2 } = args; + const x = inputs.x; + const xId = backend2.dataIdMap.get(x.dataId).id; + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const channels = convInfo.inChannels; + if (convInfo.dataFormat !== "channelsLast") { + throw new Error(`wasm backend does not support dataFormat:'${convInfo.dataFormat}'. Please use 'channelsLast'.`); + } + if (convInfo.dilationWidth !== 1 || convInfo.dilationHeight !== 1) { + throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${convInfo.dilationHeight}, ${convInfo.dilationWidth}].`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmAvgPool(xId, x.shape[0], x.shape[1], x.shape[2], filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, strideHeight, strideWidth, channels, outId); + return out; + } + var avgPoolConfig3 = { + kernelName: AvgPool, + backendName: "wasm", + setupFunc: setup6, + kernelFunc: avgPool4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BatchMatMul.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Reshape.js + init_define_BUILD_VERSION(); + function reshape4(args) { + const { inputs, attrs } = args; + const { x } = inputs; + const { shape } = attrs; + const xSize = util_exports.sizeFromShape(x.shape); + const $shape = util_exports.inferFromImplicitShape(shape, xSize); + util_exports.assert(xSize === util_exports.sizeFromShape($shape), () => `new shape: ${$shape}, old shape: ${x.shape}. New shape and old shape must have the same number of elements.`); + args.backend.incRef(x.dataId); + return { dataId: x.dataId, shape: $shape, dtype: x.dtype }; + } + var reshapeConfig3 = { + kernelName: Reshape, + backendName: "wasm", + kernelFunc: reshape4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BatchMatMul.js + var wasmBatchMatMul; + function setup7(backend2) { + wasmBatchMatMul = backend2.wasm.cwrap(BatchMatMul, null, [ + "number", + "array", + "number", + "number", + "array", + "number", + "number", + "number", + "number" + ]); + } + function batchMatMul3(args) { + const { inputs, backend: backend2, attrs } = args; + const { a, b } = inputs; + const { transposeA, transposeB } = attrs; + if (a.dtype !== "float32" || b.dtype !== "float32") { + throw new Error(`BatchMatMul for non non-float32 tensors not yet supported.`); + } + const aRank = a.shape.length; + const bRank = b.shape.length; + const innerShapeA = transposeA ? a.shape[aRank - 2] : a.shape[aRank - 1]; + const innerShapeB = transposeB ? b.shape[bRank - 1] : b.shape[bRank - 2]; + const outerShapeA = transposeA ? a.shape[aRank - 1] : a.shape[aRank - 2]; + const outerShapeB = transposeB ? b.shape[bRank - 2] : b.shape[bRank - 1]; + const outerDimsA = a.shape.slice(0, -2); + const outerDimsB = b.shape.slice(0, -2); + const batchDimA = util_exports.sizeFromShape(outerDimsA); + const batchDimB = util_exports.sizeFromShape(outerDimsB); + const outShapeOuterDims = broadcast_util_exports.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2)); + const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]); + util_exports.assert(innerShapeA === innerShapeB, () => `Error in matMul: inner shapes (${innerShapeA}) and (${innerShapeB}) of Tensors with shapes ${a.shape} and ${b.shape} and transposeA=${transposeA} and transposeB=${transposeB} must match.`); + const a3dShape = transposeA ? [batchDimA, innerShapeA, outerShapeA] : [batchDimA, outerShapeA, innerShapeA]; + const b3dShape = transposeB ? [batchDimB, outerShapeB, innerShapeB] : [batchDimB, innerShapeB, outerShapeB]; + const a3d = reshape4({ inputs: { x: a }, backend: backend2, attrs: { shape: a3dShape } }); + const b3d = reshape4({ inputs: { x: b }, backend: backend2, attrs: { shape: b3dShape } }); + const a3dId = backend2.dataIdMap.get(a3d.dataId).id; + const b3dId = backend2.dataIdMap.get(b3d.dataId).id; + const leftDim = transposeA ? a3d.shape[2] : a3d.shape[1]; + const rightDim = transposeB ? b3d.shape[1] : b3d.shape[2]; + const batchDim = Math.max(batchDimA, batchDimB); + const out = backend2.makeOutput([batchDim, leftDim, rightDim], a3d.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const aShapeBytes = new Uint8Array(new Int32Array(a3d.shape).buffer); + const bShapeBytes = new Uint8Array(new Int32Array(b3d.shape).buffer); + wasmBatchMatMul(a3dId, aShapeBytes, a3d.shape.length, b3dId, bShapeBytes, b3d.shape.length, transposeA, transposeB, outId); + backend2.disposeData(a3d.dataId); + backend2.disposeData(b3d.dataId); + out.shape = outShape; + return out; + } + var batchMatMulConfig3 = { + kernelName: BatchMatMul, + backendName: "wasm", + setupFunc: setup7, + kernelFunc: batchMatMul3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BatchToSpaceND.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Slice.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernel_utils/shared.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Slice.js + function slice4(args) { + const { inputs: { x }, attrs: { begin, size }, backend: backend2 } = args; + const [begin_, size_] = slice_util_exports.parseSliceParams(x, begin, size); + const isContinous = slice_util_exports.isSliceContinous(x.shape, begin_, size_); + const xVals = backend2.readSync(x.dataId); + const out = backend2.makeOutput(size_, x.dtype); + const xStrides = util_exports.computeStrides(x.shape); + const outData = backend2.dataIdMap.get(out.dataId); + if (isContinous) { + const flatOffset = slice_util_exports.computeFlatOffset(begin_, xStrides); + if (x.dtype === "string") { + outData.stringBytes = xVals.slice(flatOffset, flatOffset + util_exports.sizeFromShape(size_)); + } else { + const outVals2 = backend2.typedArrayFromHeap(out); + outVals2.set(xVals.subarray(flatOffset, flatOffset + util_exports.sizeFromShape(size_))); + } + return out; + } + if (x.dtype === "string") { + const res = sliceImpl(xVals, begin_, size_, x.shape, x.dtype); + outData.stringBytes = res; + return out; + } + const outVals = backend2.typedArrayFromHeap(out); + const rank = x.shape.length; + if (rank === 2) { + slice2d2(xVals, xStrides[0], outVals, begin_, size_); + } else if (rank === 3) { + slice3d2(xVals, xStrides[0], xStrides[1], outVals, begin_, size_); + } else if (rank === 4) { + slice4d2(xVals, xStrides[0], xStrides[1], xStrides[2], outVals, begin_, size_); + } else { + const res = sliceImpl(xVals, begin_, size_, x.shape, x.dtype); + outVals.set(res); + } + return out; + } + function slice2d2(xVals, xStride, outVals, begin, size) { + let outOffset = 0; + const beginI = begin[0]; + const beginJ = begin[1]; + const endI = beginI + size[0]; + for (let i = beginI; i < endI; i++) { + const xOffset = i * xStride + beginJ; + outVals.set(xVals.subarray(xOffset, xOffset + size[1]), outOffset); + outOffset += size[1]; + } + } + function slice3d2(xVals, xStride1, xStride2, outVals, begin, size) { + let outOffset = 0; + const beginI = begin[0]; + const beginJ = begin[1]; + const beginK = begin[2]; + const endI = beginI + size[0]; + const endJ = beginJ + size[1]; + for (let i = beginI; i < endI; i++) { + for (let j = beginJ; j < endJ; j++) { + const xOffset = i * xStride1 + j * xStride2 + beginK; + outVals.set(xVals.subarray(xOffset, xOffset + size[2]), outOffset); + outOffset += size[2]; + } + } + } + function slice4d2(xVals, xStride1, xStride2, xStride3, outVals, begin, size) { + let outOffset = 0; + const beginI = begin[0]; + const beginJ = begin[1]; + const beginK = begin[2]; + const endI = beginI + size[0]; + const endJ = beginJ + size[1]; + const endK = beginK + size[2]; + const beginL = begin[3]; + for (let i = beginI; i < endI; i++) { + for (let j = beginJ; j < endJ; j++) { + for (let k = beginK; k < endK; k++) { + const xOffset = i * xStride1 + j * xStride2 + k * xStride3 + beginL; + outVals.set(xVals.subarray(xOffset, xOffset + size[3]), outOffset); + outOffset += size[3]; + } + } + } + } + var sliceConfig3 = { + kernelName: Slice, + backendName: "wasm", + kernelFunc: slice4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BatchToSpaceND.js + function batchToSpaceND4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, crops } = attrs; + const prod5 = blockShape.reduce((a, b) => a * b); + const reshaped = backend_util_exports.getReshaped(x.shape, blockShape, prod5); + const permuted = backend_util_exports.getPermuted(reshaped.length, blockShape.length); + const reshapedPermuted = backend_util_exports.getReshapedPermuted(x.shape, blockShape, prod5); + const sliceBeginCoords = backend_util_exports.getSliceBeginCoords(crops, blockShape.length); + const sliceSize = backend_util_exports.getSliceSize(reshapedPermuted, crops, blockShape.length); + const xReshaped = reshape4({ inputs: { x }, backend: backend2, attrs: { shape: reshaped } }); + const xTransposed = transpose4({ inputs: { x: xReshaped }, backend: backend2, attrs: { perm: permuted } }); + const xTransposedReshaped = reshape4({ inputs: { x: xTransposed }, backend: backend2, attrs: { shape: reshapedPermuted } }); + const result = slice4({ + inputs: { x: xTransposedReshaped }, + backend: backend2, + attrs: { begin: sliceBeginCoords, size: sliceSize } + }); + backend2.disposeData(xReshaped.dataId); + backend2.disposeData(xTransposed.dataId); + backend2.disposeData(xReshaped.dataId); + return result; + } + var batchToSpaceNDConfig3 = { + kernelName: BatchToSpaceND, + backendName: "wasm", + kernelFunc: batchToSpaceND4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cast.js + init_define_BUILD_VERSION(); + function cast5(args) { + const { inputs: { x }, attrs: { dtype }, backend: backend2 } = args; + const out = backend2.makeOutput(x.shape, dtype); + const inVals = backend2.typedArrayFromHeap(x); + const outVals = backend2.typedArrayFromHeap(out); + outVals.set(inVals); + return out; + } + var castConfig3 = { + kernelName: Cast, + backendName: "wasm", + kernelFunc: cast5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Ceil.js + init_define_BUILD_VERSION(); + var ceilConfig3 = createUnaryKernelConfig(Ceil); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ClipByValue.js + init_define_BUILD_VERSION(); + var wasmClip; + function setup8(backend2) { + wasmClip = backend2.wasm.cwrap(ClipByValue, null, [ + "number", + "number", + "number", + "number" + ]); + } + function clip(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { clipValueMin, clipValueMax } = attrs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(x.shape, x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmClip(xId, clipValueMin, clipValueMax, outId); + return out; + } + var clipByValueConfig3 = { + kernelName: ClipByValue, + backendName: "wasm", + setupFunc: setup8, + kernelFunc: clip + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Concat.js + init_define_BUILD_VERSION(); + function concat4(args) { + const { inputs, backend: backend2 } = args; + const axis = util_exports.parseAxisParam(args.attrs.axis, inputs[0].shape)[0]; + let outShape = backend_util_exports.computeOutShape(inputs.map((t) => t.shape), axis); + const $inputs = inputs.filter((t) => util_exports.sizeFromShape(t.shape) > 0); + if ($inputs.length === 1) { + return identity3({ inputs: { x: $inputs[0] }, backend: backend2 }); + } + const out = backend2.makeOutput(outShape, inputs[0].dtype); + if (util_exports.sizeFromShape(outShape) === 0) { + return out; + } + const shapes = $inputs.map((t) => t.shape); + backend_util_exports.assertParamsConsistent(shapes, axis); + if ($inputs[0].dtype === "string") { + const inputs2D = $inputs.map((t) => { + const innerSize = util_exports.sizeFromShape(t.shape.slice(axis)); + const shape = [-1, innerSize]; + return reshape4({ inputs: { x: t }, backend: backend2, attrs: { shape } }); + }); + const inputsValShapes = inputs2D.map((t) => { + return { vals: backend2.readSync(t.dataId), shape: t.shape }; + }); + outShape = backend_util_exports.computeOutShape(inputs2D.map((t) => t.shape), 1); + const simplyConcat = inputs2D[0].shape[0] === 1; + const outVals2 = concatImpl(inputsValShapes, outShape, inputs[0].dtype, simplyConcat); + const finalOutShape = backend_util_exports.computeOutShape($inputs.map((t) => t.shape), axis); + out.shape = finalOutShape; + const outData = backend2.dataIdMap.get(out.dataId); + outData.stringBytes = backend_util_exports.fromStringArrayToUint8(outVals2); + inputs2D.forEach((t) => backend2.disposeData(t.dataId)); + return out; + } + const batchDim = util_exports.sizeFromShape($inputs[0].shape.slice(0, axis)); + let sumInnerDims = 0; + const innerDims = $inputs.map((input2) => { + const innerDim = util_exports.sizeFromShape(input2.shape.slice(axis)); + sumInnerDims += innerDim; + return innerDim; + }); + const inVals = $inputs.map((input2) => backend2.typedArrayFromHeap(input2)); + const outVals = backend2.typedArrayFromHeap(out); + for (let b = 0; b < batchDim; b++) { + let outOffset = b * sumInnerDims; + for (let i = 0; i < inVals.length; i++) { + const innerDim = innerDims[i]; + const inOffset = b * innerDim; + const vals = inVals[i].subarray(inOffset, inOffset + innerDim); + outVals.set(vals, outOffset); + outOffset += innerDim; + } + } + return out; + } + var concatConfig3 = { + kernelName: Concat, + backendName: "wasm", + kernelFunc: concat4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Conv2D.js + init_define_BUILD_VERSION(); + var wasmConv2d; + function setup9(backend2) { + wasmConv2d = backend2.wasm.cwrap(Conv2D, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function conv2d4(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x, filter } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const filterId = backend2.dataIdMap.get(filter.dataId).id; + const { strides, dilations, pad: pad3, dimRoundingMode, dataFormat } = attrs; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode, false, $dataFormat); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const inputChannels = convInfo.inChannels; + const outputChannels = convInfo.outChannels; + const isSamePad = convInfo.padInfo.type === "SAME" ? 1 : 0; + if (convInfo.dataFormat !== "channelsLast") { + throw new Error(`wasm backend Conv2D does not support dataFormat:'${convInfo.dataFormat}'. Please use 'channelsLast'.`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmConv2d(xId, x.shape[0], x.shape[1], x.shape[2], filterId, filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, outId); + return out; + } + var conv2DConfig3 = { + kernelName: Conv2D, + backendName: "wasm", + setupFunc: setup9, + kernelFunc: conv2d4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Conv2DBackpropInput.js + init_define_BUILD_VERSION(); + var wasmConv2DBackpropInput; + function setup10(backend2) { + wasmConv2DBackpropInput = backend2.wasm.cwrap(Conv2DBackpropInput, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function conv2DBackpropInput4(args) { + const { backend: backend2, inputs, attrs } = args; + const { dy, filter } = inputs; + const { strides, pad: pad3, dataFormat, dimRoundingMode, inputShape } = attrs; + const dilations = 1; + const $dataFormat = backend_util_exports.convertConv2DDataFormat(dataFormat); + const convInfo = backend_util_exports.computeConv2DInfo(inputShape, filter.shape, strides, dilations, pad3, dimRoundingMode, false, $dataFormat); + const { batchSize, filterHeight, filterWidth, inChannels, inHeight, inWidth, outChannels, outHeight, outWidth, strideHeight, strideWidth } = convInfo; + const topPad = filterHeight - 1 - convInfo.padInfo.top; + const leftPad = filterWidth - 1 - convInfo.padInfo.left; + const isChannelsLast = convInfo.dataFormat === "channelsLast"; + const dxStrides = util_exports.computeStrides(convInfo.inShape); + const dyStrides = util_exports.computeStrides(dy.shape); + const [fltS0, fltS1, fltS2] = util_exports.computeStrides(filter.shape); + const xBatchStride = dxStrides[0]; + const xRowStride = isChannelsLast ? dxStrides[1] : dxStrides[2]; + const xColStride = isChannelsLast ? dxStrides[2] : 1; + const xChannelStride = isChannelsLast ? 1 : dxStrides[1]; + const yBatchStride = dyStrides[0]; + const yRowStride = isChannelsLast ? dyStrides[1] : dyStrides[2]; + const yColStride = isChannelsLast ? dyStrides[2] : 1; + const yChannelStride = isChannelsLast ? 1 : dyStrides[1]; + const out = backend2.makeOutput(convInfo.inShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const dyId = backend2.dataIdMap.get(dy.dataId).id; + const filterId = backend2.dataIdMap.get(filter.dataId).id; + wasmConv2DBackpropInput(dyId, filterId, batchSize, filterHeight, filterWidth, inHeight, inWidth, inChannels, outHeight, outWidth, outChannels, strideHeight, strideWidth, topPad, leftPad, fltS0, fltS1, fltS2, xBatchStride, xRowStride, xColStride, xChannelStride, yBatchStride, yRowStride, yColStride, yChannelStride, outId); + return out; + } + var conv2DBackpropInputConfig3 = { + kernelName: Conv2DBackpropInput, + backendName: "wasm", + setupFunc: setup10, + kernelFunc: conv2DBackpropInput4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cos.js + init_define_BUILD_VERSION(); + var cosConfig3 = createUnaryKernelConfig(Cos); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cosh.js + init_define_BUILD_VERSION(); + var coshConfig3 = createUnaryKernelConfig(Cosh); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/CropAndResize.js + init_define_BUILD_VERSION(); + var InterpolationMethod; + (function(InterpolationMethod2) { + InterpolationMethod2[InterpolationMethod2["bilinear"] = 0] = "bilinear"; + InterpolationMethod2[InterpolationMethod2["nearest"] = 1] = "nearest"; + })(InterpolationMethod || (InterpolationMethod = {})); + var wasmCropAndResize; + function setup11(backend2) { + wasmCropAndResize = backend2.wasm.cwrap(CropAndResize, null, [ + "number", + "number", + "number", + "number", + "array", + "number", + "number", + "number", + "number", + "number" + ]); + } + function cropAndResize4(args) { + const { backend: backend2, inputs, attrs } = args; + const { method, extrapolationValue, cropSize } = attrs; + const { image: image2, boxes, boxInd } = inputs; + const numBoxes = boxes.shape[0]; + const [cropHeight, cropWidth] = cropSize; + const outShape = [numBoxes, cropHeight, cropWidth, image2.shape[3]]; + let imagesData = backend2.dataIdMap.get(image2.dataId); + let castedData; + if (image2.dtype !== "float32") { + castedData = cast5({ backend: backend2, inputs: { x: image2 }, attrs: { dtype: "float32" } }); + imagesData = backend2.dataIdMap.get(castedData.dataId); + } + const imagesId = imagesData.id; + const boxesId = backend2.dataIdMap.get(boxes.dataId).id; + const boxIndId = backend2.dataIdMap.get(boxInd.dataId).id; + const out = backend2.makeOutput(outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const imagesShapeBytes = new Uint8Array(new Int32Array(image2.shape).buffer); + wasmCropAndResize(imagesId, boxesId, boxIndId, numBoxes, imagesShapeBytes, cropHeight, cropWidth, InterpolationMethod[method], extrapolationValue, outId); + if (castedData != null) { + backend2.disposeData(castedData.dataId); + } + return out; + } + var cropAndResizeConfig3 = { + kernelName: CropAndResize, + backendName: "wasm", + setupFunc: setup11, + kernelFunc: cropAndResize4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cumprod.js + init_define_BUILD_VERSION(); + var wasmCumprod; + function setup12(backend2) { + wasmCumprod = backend2.wasm.cwrap(Cumprod, null, [ + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function cumprod4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + const xRank = x.shape.length; + util_exports.assert(x.dtype === "float32" || x.dtype === "int32", () => `cumprod does not support ${x.dtype} tensors in the WASM backend`); + const permutation = backend_util_exports.getAxesPermutation([axis], xRank); + let permutedX = x; + if (permutation !== null) { + permutedX = transpose4({ inputs: { x }, attrs: { perm: permutation }, backend: backend2 }); + } + const permutedAxis = backend_util_exports.getInnerMostAxes(1, xRank)[0]; + backend_util_exports.assertAxesAreInnerMostDims("cumprod", [permutedAxis], xRank); + const permutedOut = backend2.makeOutput(permutedX.shape, permutedX.dtype); + const finalDim = permutedX.shape[permutedAxis]; + const permutedXId = backend2.dataIdMap.get(permutedX.dataId).id; + const permutedOutId = backend2.dataIdMap.get(permutedOut.dataId).id; + wasmCumprod(permutedXId, exclusive ? 1 : 0, reverse5 ? 1 : 0, finalDim, permutedOutId, CppDType[x.dtype]); + let out = permutedOut; + if (permutation !== null) { + const undoPermutation = backend_util_exports.getUndoAxesPermutation(permutation); + out = transpose4({ inputs: { x: permutedOut }, attrs: { perm: undoPermutation }, backend: backend2 }); + backend2.disposeData(permutedX.dataId); + backend2.disposeData(permutedOut.dataId); + } + return out; + } + var cumprodConfig3 = { + kernelName: Cumprod, + backendName: "wasm", + setupFunc: setup12, + kernelFunc: cumprod4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cumsum.js + init_define_BUILD_VERSION(); + var wasmCumsum; + function setup13(backend2) { + wasmCumsum = backend2.wasm.cwrap(Cumsum, null, [ + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function cumsum4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { axis, exclusive, reverse: reverse5 } = attrs; + const xRank = x.shape.length; + util_exports.assert(x.dtype === "float32" || x.dtype === "int32", () => `cumsum does not support ${x.dtype} tensors in the WASM backend`); + const permutation = backend_util_exports.getAxesPermutation([axis], xRank); + let permutedX = x; + if (permutation !== null) { + permutedX = transpose4({ inputs: { x }, attrs: { perm: permutation }, backend: backend2 }); + } + const permutedAxis = backend_util_exports.getInnerMostAxes(1, xRank)[0]; + backend_util_exports.assertAxesAreInnerMostDims("cumsum", [permutedAxis], xRank); + const permutedOut = backend2.makeOutput(permutedX.shape, permutedX.dtype); + const finalDim = permutedX.shape[permutedAxis]; + const permutedXId = backend2.dataIdMap.get(permutedX.dataId).id; + const permutedOutId = backend2.dataIdMap.get(permutedOut.dataId).id; + wasmCumsum(permutedXId, exclusive ? 1 : 0, reverse5 ? 1 : 0, finalDim, permutedOutId, CppDType[x.dtype]); + let out = permutedOut; + if (permutation !== null) { + const undoPermutation = backend_util_exports.getUndoAxesPermutation(permutation); + out = transpose4({ inputs: { x: permutedOut }, attrs: { perm: undoPermutation }, backend: backend2 }); + backend2.disposeData(permutedX.dataId); + backend2.disposeData(permutedOut.dataId); + } + return out; + } + var cumsumConfig3 = { + kernelName: Cumsum, + backendName: "wasm", + setupFunc: setup13, + kernelFunc: cumsum4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/DepthToSpace.js + init_define_BUILD_VERSION(); + var wasmDepthToSpace; + function setup14(backend2) { + wasmDepthToSpace = backend2.wasm.cwrap(DepthToSpace, null, [ + "number", + "number", + "number", + "array", + "number", + "array", + "array", + "number", + "number" + ]); + } + function depthToSpace4(args) { + const { backend: backend2, inputs, attrs } = args; + const { x } = inputs; + const { blockSize, dataFormat } = attrs; + const batchSize = x.shape[0]; + const inputHeight = dataFormat === "NHWC" ? x.shape[1] : x.shape[2]; + const inputWidth = dataFormat === "NHWC" ? x.shape[2] : x.shape[3]; + const inputDepth = dataFormat === "NHWC" ? x.shape[3] : x.shape[1]; + const outputHeight = inputHeight * blockSize; + const outputWidth = inputWidth * blockSize; + const outputDepth = inputDepth / (blockSize * blockSize); + const outputShape = dataFormat === "NHWC" ? [batchSize, outputHeight, outputWidth, outputDepth] : [batchSize, outputDepth, outputHeight, outputWidth]; + const out = backend2.makeOutput(outputShape, "float32"); + const xData = backend2.dataIdMap.get(x.dataId); + const xId = xData.id; + const xStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(x.shape)).buffer); + const outputShapeBytes = new Uint8Array(new Int32Array(outputShape).buffer); + const outStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(outputShape)).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + const channelsLast = dataFormat === "NHWC" ? 1 : 0; + wasmDepthToSpace(xId, blockSize, channelsLast, xStridesBytes, x.shape.length - 1, outputShapeBytes, outStridesBytes, outputShape.length, outId); + return out; + } + var depthToSpaceConfig3 = { + kernelName: DepthToSpace, + backendName: "wasm", + setupFunc: setup14, + kernelFunc: depthToSpace4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/DepthwiseConv2dNative.js + init_define_BUILD_VERSION(); + var wasmDepthwiseConv2d; + function setup15(backend2) { + wasmDepthwiseConv2d = backend2.wasm.cwrap(DepthwiseConv2dNative, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function depthwiseConv2d4(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x, filter } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const filterId = backend2.dataIdMap.get(filter.dataId).id; + const { strides, dilations, pad: pad3, dimRoundingMode } = attrs; + const $dilations = dilations == null ? [1, 1] : dilations; + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad3, dimRoundingMode, true); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const inputChannels = convInfo.inChannels; + const outputChannels = convInfo.outChannels; + const isSamePad = convInfo.padInfo.type === "SAME" ? 1 : 0; + if (convInfo.dataFormat !== "channelsLast") { + throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${convInfo.dataFormat}'. Please use 'channelsLast'.`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmDepthwiseConv2d(xId, x.shape[0], x.shape[1], x.shape[2], filterId, filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, outId); + return out; + } + var depthwiseConv2dNativeConfig3 = { + kernelName: DepthwiseConv2dNative, + backendName: "wasm", + setupFunc: setup15, + kernelFunc: depthwiseConv2d4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Elu.js + init_define_BUILD_VERSION(); + var eluConfig3 = createUnaryKernelConfig(Elu); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Equal.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast2 = false; + var equalConfig3 = createBinaryKernelConfig(Equal, supportsFullBroadcast2, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Exp.js + init_define_BUILD_VERSION(); + var expConfig3 = createUnaryKernelConfig(Exp, "float32"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ExpandDims.js + init_define_BUILD_VERSION(); + function expandDims5(args) { + const { inputs, attrs, backend: backend2 } = args; + const { input: input2 } = inputs; + const { dim } = attrs; + const inputRank = input2.shape.length; + const newShape = input2.shape.slice(); + let $dim = dim; + if (dim < 0) { + util_exports.assert(-(inputRank + 1) <= dim, () => `Axis must be in the interval [${-(inputRank + 1)}, ${inputRank}]`); + $dim = inputRank + dim + 1; + } + newShape.splice($dim, 0, 1); + return reshape4({ inputs: { x: input2 }, backend: backend2, attrs: { shape: newShape } }); + } + var expandDimsConfig3 = { + kernelName: ExpandDims, + backendName: "wasm", + kernelFunc: expandDims5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Fill.js + init_define_BUILD_VERSION(); + function fill4(args) { + const { attrs: { shape, value, dtype }, backend: backend2 } = args; + const out = backend2.makeOutput(shape, dtype); + const outVals = backend2.typedArrayFromHeap(out); + outVals.fill(value); + return out; + } + var fillConfig3 = { + kernelName: Fill, + backendName: "wasm", + kernelFunc: fill4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FlipLeftRight.js + init_define_BUILD_VERSION(); + var wasmFlipLeftRight; + function setup16(backend2) { + wasmFlipLeftRight = backend2.wasm.cwrap(FlipLeftRight, null, [ + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function flipLeftRight2(args) { + const { inputs, backend: backend2 } = args; + const { image: image2 } = inputs; + const out = backend2.makeOutput(image2.shape, image2.dtype); + const imageId = backend2.dataIdMap.get(image2.dataId).id; + const outId = backend2.dataIdMap.get(out.dataId).id; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + wasmFlipLeftRight(imageId, batch, imageHeight, imageWidth, numChannels, outId); + return out; + } + var flipLeftRightConfig3 = { + kernelName: FlipLeftRight, + backendName: "wasm", + kernelFunc: flipLeftRight2, + setupFunc: setup16 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Floor.js + init_define_BUILD_VERSION(); + var floorConfig3 = createUnaryKernelConfig(Floor); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FloorDiv.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast3 = false; + var floorDivConfig3 = createBinaryKernelConfig(FloorDiv, supportsFullBroadcast3); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FusedBatchNorm.js + init_define_BUILD_VERSION(); + var wasmBatchNorm; + function setup17(backend2) { + wasmBatchNorm = backend2.wasm.cwrap(FusedBatchNorm, null, ["number", "number", "number", "number", "number", "number", "number"]); + } + function fusedBatchNorm(args) { + const { backend: backend2, inputs, attrs } = args; + const { varianceEpsilon } = attrs; + const { x, mean: mean4, variance, offset, scale: scale2 } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const meanId = backend2.dataIdMap.get(mean4.dataId).id; + const varianceId = backend2.dataIdMap.get(variance.dataId).id; + const offsetId = offset != null ? backend2.dataIdMap.get(offset.dataId).id : 0; + const scaleId = scale2 != null ? backend2.dataIdMap.get(scale2.dataId).id : 0; + const out = backend2.makeOutput(x.shape, x.dtype); + if (util_exports.sizeFromShape(x.shape) === 0) { + return out; + } + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmBatchNorm(xId, meanId, varianceId, offsetId, scaleId, varianceEpsilon, outId); + return out; + } + var fusedBatchNormConfig = { + kernelName: FusedBatchNorm, + backendName: "wasm", + setupFunc: setup17, + kernelFunc: fusedBatchNorm + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FusedConv2D.js + init_define_BUILD_VERSION(); + var wasmFusedConv2d; + function setup18(backend2) { + wasmFusedConv2d = backend2.wasm.cwrap(FusedConv2D, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function fusedConv2d2(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dilations, dataFormat, dimRoundingMode, activation, leakyreluAlpha } = attrs; + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode); + const fusedActivation = FusableActivation[activation]; + if (fusedActivation == null) { + throw new Error(`${activation} activation not yet supported for FusedConv2D in the wasm backend.`); + } + const xId = backend2.dataIdMap.get(x.dataId).id; + const filterId = backend2.dataIdMap.get(filter.dataId).id; + const outputChannels = convInfo.outChannels; + let biasId = 0; + if (bias != null) { + const biasData = backend2.dataIdMap.get(bias.dataId); + if (biasData.shape.length !== 1) { + throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${biasData.shape.length}.`); + } + if (biasData.shape[0] !== outputChannels) { + throw new Error(`FusedConv2D bias shape (${biasData.shape}) does not match the number of output channels (${outputChannels})`); + } + biasId = biasData.id; + } + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const inputChannels = convInfo.inChannels; + const isSamePad = convInfo.padInfo.type === "SAME" ? 1 : 0; + const batchSize = convInfo.batchSize; + const inHeight = convInfo.inHeight; + const inWidth = convInfo.inWidth; + if (dataFormat !== "NHWC") { + throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${dataFormat}'. Please use 'NHWC'.`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const preluActivationWeightsId = preluActivationWeights == null ? 0 : backend2.dataIdMap.get(preluActivationWeights.dataId).id; + wasmFusedConv2d(xId, batchSize, inHeight, inWidth, filterId, filterHeight, filterWidth, biasId, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, fusedActivation, preluActivationWeightsId, leakyreluAlpha || 0, outId); + return out; + } + var fusedConv2DConfig3 = { + kernelName: FusedConv2D, + backendName: "wasm", + setupFunc: setup18, + kernelFunc: fusedConv2d2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FusedDepthwiseConv2D.js + init_define_BUILD_VERSION(); + var wasmFusedDepthwiseConv2d; + function setup19(backend2) { + wasmFusedDepthwiseConv2d = backend2.wasm.cwrap(FusedDepthwiseConv2D, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function fusedDepthwiseConv2d(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x, filter, bias, preluActivationWeights } = inputs; + const { strides, pad: pad3, dilations, dataFormat, dimRoundingMode, activation, leakyreluAlpha } = attrs; + const convInfo = backend_util_exports.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad3, dimRoundingMode, true); + const fusedActivation = FusableActivation[activation]; + if (fusedActivation == null) { + throw new Error(`${activation} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`); + } + const xId = backend2.dataIdMap.get(x.dataId).id; + const filterId = backend2.dataIdMap.get(filter.dataId).id; + const outputChannels = convInfo.outChannels; + let biasId = 0; + if (bias != null) { + const biasData = backend2.dataIdMap.get(bias.dataId); + if (biasData.shape.length !== 1) { + throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${biasData.shape.length}.`); + } + if (biasData.shape[0] !== outputChannels) { + throw new Error(`FusedDepthwiseConv2D bias shape (${biasData.shape}) does not match the number of output channels (${outputChannels})`); + } + biasId = biasData.id; + } + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const inputChannels = convInfo.inChannels; + const isSamePad = convInfo.padInfo.type === "SAME" ? 1 : 0; + const batchSize = convInfo.batchSize; + const inHeight = convInfo.inHeight; + const inWidth = convInfo.inWidth; + if (dataFormat !== "NHWC") { + throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${dataFormat}'. Please use 'NHWC'.`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const preluActivationWeightsId = preluActivationWeights == null ? 0 : backend2.dataIdMap.get(preluActivationWeights.dataId).id; + wasmFusedDepthwiseConv2d(xId, batchSize, inHeight, inWidth, filterId, filterHeight, filterWidth, biasId, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, fusedActivation, preluActivationWeightsId, leakyreluAlpha || 0, outId); + return out; + } + var fusedDepthwiseConv2DConfig3 = { + kernelName: FusedDepthwiseConv2D, + backendName: "wasm", + setupFunc: setup19, + kernelFunc: fusedDepthwiseConv2d + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/GatherNd.js + init_define_BUILD_VERSION(); + var wasmGatherNd; + function setup20(backend2) { + wasmGatherNd = backend2.wasm.cwrap(GatherNd, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "array", + "number" + ]); + } + function gatherNd3(args) { + const { backend: backend2, inputs } = args; + const { params, indices } = inputs; + const [resultShape, numSlices, sliceSize, strides] = gather_nd_util_exports.prepareAndValidate(params, indices); + const out = backend2.makeOutput(resultShape, params.dtype); + if (numSlices === 0) { + return out; + } + const indicesShape = indices.shape; + const sliceRank = indicesShape[indicesShape.length - 1]; + const xData = backend2.dataIdMap.get(params.dataId); + const xId = xData.id; + const indicesData = backend2.dataIdMap.get(indices.dataId); + const indicesId = indicesData.id; + const stridesBytes = new Uint8Array(new Int32Array(strides).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmGatherNd(xId, CppDType[params.dtype], indicesId, numSlices, sliceRank, sliceSize, stridesBytes, outId); + return out; + } + var gatherNdConfig3 = { + kernelName: GatherNd, + backendName: "wasm", + setupFunc: setup20, + kernelFunc: gatherNd3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/GatherV2.js + init_define_BUILD_VERSION(); + var wasmGather; + function setup21(backend2) { + wasmGather = backend2.wasm.cwrap("Gather", null, [ + "number", + "number", + "array", + "number", + "number", + "number", + "array", + "number" + ]); + } + function gatherV23(args) { + const { backend: backend2, inputs, attrs } = args; + const { x, indices } = inputs; + const { axis, batchDims } = attrs; + const parsedAxis = util_exports.parseAxisParam(axis, x.shape)[0]; + const indicesVals = backend2.readSync(indices.dataId); + const axisDim = x.shape[parsedAxis]; + for (let i = 0; i < indicesVals.length; ++i) { + const index = indicesVals[i]; + util_exports.assert(index <= axisDim - 1 && index >= 0, () => `GatherV2: the index value ${index} is not in [0, ${axisDim - 1}]`); + } + const shapeInfo = backend_util_exports.segment_util.collectGatherOpShapeInfo(x, indices, parsedAxis, batchDims); + const flattenX = reshape4({ + inputs: { x }, + attrs: { + shape: [ + shapeInfo.batchSize, + shapeInfo.outerSize, + shapeInfo.dimSize, + shapeInfo.sliceSize + ] + }, + backend: backend2 + }); + const indicesSize = util_exports.sizeFromShape(indices.shape); + const flattenIndex = reshape4({ + inputs: { x: indices }, + attrs: { shape: [shapeInfo.batchSize, indicesSize / shapeInfo.batchSize] }, + backend: backend2 + }); + const flattenOutputShape = [ + shapeInfo.batchSize, + shapeInfo.outerSize, + indicesSize / shapeInfo.batchSize, + shapeInfo.sliceSize + ]; + const out = backend2.makeOutput(flattenOutputShape, x.dtype); + if (util_exports.sizeFromShape(x.shape) === 0) { + return out; + } + const stridesSize = flattenX.shape.length - 1; + const xData = backend2.dataIdMap.get(flattenX.dataId); + const xId = xData.id; + const indicesData = backend2.dataIdMap.get(flattenIndex.dataId); + const indicesId = indicesData.id; + const outId = backend2.dataIdMap.get(out.dataId).id; + const xStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(flattenX.shape)).buffer); + const outStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(flattenOutputShape)).buffer); + wasmGather(xId, CppDType[x.dtype], xStridesBytes, stridesSize, indicesId, shapeInfo.batchSize, outStridesBytes, outId); + backend2.disposeData(flattenX.dataId); + backend2.disposeData(flattenIndex.dataId); + out.shape = shapeInfo.outputShape; + return out; + } + var gatherV2Config3 = { + kernelName: GatherV2, + backendName: "wasm", + setupFunc: setup21, + kernelFunc: gatherV23 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Greater.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast4 = false; + var greaterConfig3 = createBinaryKernelConfig(Greater, supportsFullBroadcast4, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/GreaterEqual.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast5 = false; + var greaterEqualConfig3 = createBinaryKernelConfig(GreaterEqual, supportsFullBroadcast5, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LeakyRelu.js + init_define_BUILD_VERSION(); + var wasmFunc3; + function setupFunc2(backend2) { + wasmFunc3 = backend2.wasm.cwrap(LeakyRelu, null, [ + "number", + "number", + "number", + "number" + ]); + } + function leakyRelu4(args) { + const { inputs: { x }, attrs: { alpha }, backend: backend2 } = args; + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(x.shape, "float32"); + if (util_exports.sizeFromShape(x.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmFunc3(xId, CppDType[x.dtype], alpha, outId); + } + return out; + } + var leakyReluConfig3 = { + kernelName: LeakyRelu, + backendName: "wasm", + setupFunc: setupFunc2, + kernelFunc: leakyRelu4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Less.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast6 = false; + var lessConfig3 = createBinaryKernelConfig(Less, supportsFullBroadcast6, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LessEqual.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast7 = false; + var lessEqualConfig3 = createBinaryKernelConfig(LessEqual, supportsFullBroadcast7, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Log.js + init_define_BUILD_VERSION(); + var logConfig3 = createUnaryKernelConfig(Log); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalAnd.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast8 = false; + var logicalAndConfig3 = createBinaryKernelConfig(LogicalAnd, supportsFullBroadcast8, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalNot.js + init_define_BUILD_VERSION(); + var logicalNotConfig3 = createUnaryKernelConfig(LogicalNot); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalOr.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast9 = false; + var logicalOrConfig3 = createBinaryKernelConfig(LogicalOr, supportsFullBroadcast9, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalXor.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast10 = false; + var logicalXorConfig = createBinaryKernelConfig(LogicalXor, supportsFullBroadcast10, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Max.js + init_define_BUILD_VERSION(); + var wasmMax; + function setup22(backend2) { + wasmMax = backend2.wasm.cwrap(Max, null, [ + "number", + "number", + "number", + "number" + ]); + } + function max5(args) { + const { backend: backend2, inputs, attrs } = args; + const { reductionIndices: axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + input2 = transposed; + inputId = transposedId; + } + const inputRank = input2.shape.length; + backend_util_exports.assertAxesAreInnerMostDims("max", axes, inputRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, x.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmMax(inputId, CppDType[x.dtype], reduceSize, outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var maxConfig3 = { + kernelName: Max, + backendName: "wasm", + setupFunc: setup22, + kernelFunc: max5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Maximum.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast11 = false; + var maximumConfig3 = createBinaryKernelConfig(Maximum, supportsFullBroadcast11); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/MaxPool.js + init_define_BUILD_VERSION(); + var wasmMaxPool; + function setup23(backend2) { + wasmMaxPool = backend2.wasm.cwrap(MaxPool, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function maxPool4(args) { + const { inputs, attrs, backend: backend2 } = args; + const x = inputs.x; + const xId = backend2.dataIdMap.get(x.dataId).id; + util_exports.assert(x.dtype === "float32", () => `Error in MaxPool: only float32 input is supported. Got ${x.dtype}.`); + const { filterSize, strides, pad: pad3, dimRoundingMode } = attrs; + const convInfo = backend_util_exports.computePool2DInfo(x.shape, filterSize, strides, 1, pad3, dimRoundingMode); + const filterHeight = convInfo.filterHeight; + const filterWidth = convInfo.filterWidth; + const padTop = convInfo.padInfo.top; + const padRight = convInfo.padInfo.right; + const padBottom = convInfo.padInfo.bottom; + const padLeft = convInfo.padInfo.left; + const dilationHeight = convInfo.dilationHeight; + const dilationWidth = convInfo.dilationWidth; + const strideHeight = convInfo.strideHeight; + const strideWidth = convInfo.strideWidth; + const inputChannels = convInfo.inChannels; + const outputChannels = convInfo.outChannels; + if (convInfo.dataFormat !== "channelsLast") { + throw new Error(`wasm backend does not support dataFormat:'${convInfo.dataFormat}'. Please use 'channelsLast'.`); + } + const out = backend2.makeOutput(convInfo.outShape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmMaxPool(xId, x.shape[0], x.shape[1], x.shape[2], filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, outId); + return out; + } + var maxPoolConfig3 = { + kernelName: MaxPool, + backendName: "wasm", + setupFunc: setup23, + kernelFunc: maxPool4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Mean.js + init_define_BUILD_VERSION(); + var wasmMean; + function setup24(backend2) { + wasmMean = backend2.wasm.cwrap(Mean, null, ["number, number, number"]); + } + function mean3(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + let reductionAxes = axes; + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + if (transposedId !== xId) { + input2 = transposed; + inputId = transposedId; + reductionAxes = backend_util_exports.getInnerMostAxes(reductionAxes.length, input2.shape.length); + } + } + backend_util_exports.assertAxesAreInnerMostDims("mean", reductionAxes, input2.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, reductionAxes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + let castedInput = input2; + if (input2.dtype !== "float32") { + castedInput = cast5({ backend: backend2, inputs: { x: input2 }, attrs: { dtype: "float32" } }); + inputId = backend2.dataIdMap.get(castedInput.dataId).id; + } + const out = backend2.makeOutput(outShape, "float32"); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmMean(inputId, reduceSize, outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + if (input2.dtype !== "float32") { + backend2.disposeData(castedInput.dataId); + } + return out; + } + var meanConfig3 = { + kernelName: Mean, + backendName: "wasm", + setupFunc: setup24, + kernelFunc: mean3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Min.js + init_define_BUILD_VERSION(); + var wasmMin; + function setup25(backend2) { + wasmMin = backend2.wasm.cwrap(Min, null, [ + "number", + "number", + "number", + "number" + ]); + } + function min5(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + if (transposedId !== xId) { + input2 = transposed; + inputId = transposedId; + } + } + const inputRank = input2.shape.length; + backend_util_exports.assertAxesAreInnerMostDims("min", axes, inputRank); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, axes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, input2.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmMin(inputId, CppDType[x.dtype], reduceSize, outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var minConfig3 = { + kernelName: Min, + backendName: "wasm", + setupFunc: setup25, + kernelFunc: min5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Minimum.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast12 = false; + var minimumConfig3 = createBinaryKernelConfig(Minimum, supportsFullBroadcast12); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/MirrorPad.js + init_define_BUILD_VERSION(); + var MirrorPaddingMode; + (function(MirrorPaddingMode2) { + MirrorPaddingMode2[MirrorPaddingMode2["reflect"] = 0] = "reflect"; + MirrorPaddingMode2[MirrorPaddingMode2["symmetric"] = 1] = "symmetric"; + })(MirrorPaddingMode || (MirrorPaddingMode = {})); + var wasmMirrorPad; + function setup26(backend2) { + wasmMirrorPad = backend2.wasm.cwrap(MirrorPad, null, [ + "number", + "array", + "number", + "number", + "array", + "array", + "number", + "number" + ]); + } + function mirrorPad3(args) { + const { inputs: { x }, backend: backend2, attrs: { paddings, mode } } = args; + const outShape = paddings.map((p2, i) => p2[0] + x.shape[i] + p2[1]); + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(outShape, x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + const prePaddingsFlat = paddings.map((padTuple) => padTuple[0]); + const postPaddingsFlat = paddings.map((padTuple) => padTuple[1]); + const prePaddingsBytes = new Uint8Array(new Int32Array(prePaddingsFlat).buffer); + const postPaddingsBytes = new Uint8Array(new Int32Array(postPaddingsFlat).buffer); + wasmMirrorPad(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], prePaddingsBytes, postPaddingsBytes, MirrorPaddingMode[mode], outId); + return out; + } + var mirrorPadConfig3 = { + kernelName: MirrorPad, + backendName: "wasm", + kernelFunc: mirrorPad3, + setupFunc: setup26 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Multiply.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast13 = true; + var multiplyConfig3 = createBinaryKernelConfig(Multiply, supportsFullBroadcast13); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Neg.js + init_define_BUILD_VERSION(); + var negConfig3 = createUnaryKernelConfig(Neg); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppressionV3.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppression_util.js + init_define_BUILD_VERSION(); + function parseResultStruct(backend2, resOffset) { + const result = new Int32Array(backend2.wasm.HEAPU8.buffer, resOffset, 4); + const pSelectedIndices = result[0]; + const selectedSize = result[1]; + const pSelectedScores = result[2]; + const pValidOutputs = result[3]; + backend2.wasm._free(resOffset); + return { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs }; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppressionV3.js + var wasmFunc4; + function setup27(backend2) { + wasmFunc4 = backend2.wasm.cwrap( + NonMaxSuppressionV3, + "number", + [ + "number", + "number", + "number", + "number", + "number" + ] + ); + } + function kernelFunc(args) { + const { backend: backend2, inputs, attrs } = args; + const { iouThreshold, maxOutputSize, scoreThreshold } = attrs; + const { boxes, scores } = inputs; + const boxesId = backend2.dataIdMap.get(boxes.dataId).id; + const scoresId = backend2.dataIdMap.get(scores.dataId).id; + const resOffset = wasmFunc4(boxesId, scoresId, maxOutputSize, iouThreshold, scoreThreshold); + const { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs } = parseResultStruct(backend2, resOffset); + backend2.wasm._free(pSelectedScores); + backend2.wasm._free(pValidOutputs); + const selectedIndicesTensor = backend2.makeOutput([selectedSize], "int32", pSelectedIndices); + return selectedIndicesTensor; + } + var nonMaxSuppressionV3Config3 = { + kernelName: NonMaxSuppressionV3, + backendName: "wasm", + setupFunc: setup27, + kernelFunc + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppressionV4.js + init_define_BUILD_VERSION(); + var wasmFunc5; + function setup28(backend2) { + wasmFunc5 = backend2.wasm.cwrap( + NonMaxSuppressionV4, + "number", + [ + "number", + "number", + "number", + "number", + "number", + "bool" + ] + ); + } + function nonMaxSuppressionV43(args) { + const { backend: backend2, inputs, attrs } = args; + const { iouThreshold, maxOutputSize, scoreThreshold, padToMaxOutputSize } = attrs; + const { boxes, scores } = inputs; + const boxesId = backend2.dataIdMap.get(boxes.dataId).id; + const scoresId = backend2.dataIdMap.get(scores.dataId).id; + const resOffset = wasmFunc5(boxesId, scoresId, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize); + const { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs } = parseResultStruct(backend2, resOffset); + backend2.wasm._free(pSelectedScores); + const selectedIndicesTensor = backend2.makeOutput([selectedSize], "int32", pSelectedIndices); + const validOutputsTensor = backend2.makeOutput([], "int32", pValidOutputs); + return [selectedIndicesTensor, validOutputsTensor]; + } + var nonMaxSuppressionV4Config3 = { + kernelName: NonMaxSuppressionV4, + backendName: "wasm", + setupFunc: setup28, + kernelFunc: nonMaxSuppressionV43 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppressionV5.js + init_define_BUILD_VERSION(); + var wasmFunc6; + function setup29(backend2) { + wasmFunc6 = backend2.wasm.cwrap( + NonMaxSuppressionV5, + "number", + [ + "number", + "number", + "number", + "number", + "number", + "number" + ] + ); + } + function kernelFunc2(args) { + const { backend: backend2, inputs, attrs } = args; + const { iouThreshold, maxOutputSize, scoreThreshold, softNmsSigma } = attrs; + const { boxes, scores } = inputs; + const boxesId = backend2.dataIdMap.get(boxes.dataId).id; + const scoresId = backend2.dataIdMap.get(scores.dataId).id; + const resOffset = wasmFunc6(boxesId, scoresId, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma); + const { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs } = parseResultStruct(backend2, resOffset); + backend2.wasm._free(pValidOutputs); + const selectedIndicesTensor = backend2.makeOutput([selectedSize], "int32", pSelectedIndices); + const selectedScoresTensor = backend2.makeOutput([selectedSize], "float32", pSelectedScores); + return [selectedIndicesTensor, selectedScoresTensor]; + } + var nonMaxSuppressionV5Config3 = { + kernelName: NonMaxSuppressionV5, + backendName: "wasm", + setupFunc: setup29, + kernelFunc: kernelFunc2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NotEqual.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast14 = false; + var notEqualConfig3 = createBinaryKernelConfig(NotEqual, supportsFullBroadcast14, "bool"); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/OneHot.js + init_define_BUILD_VERSION(); + var wasmOneHot; + function setup30(backend2) { + wasmOneHot = backend2.wasm.cwrap(OneHot, null, [ + "number", + "number", + "number", + "number", + "number" + ]); + } + function oneHot4(args) { + const { inputs, backend: backend2, attrs } = args; + const { indices } = inputs; + const { depth, onValue, offValue } = attrs; + const out = backend2.makeOutput([...indices.shape, depth], "int32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + const indicesData = backend2.dataIdMap.get(indices.dataId); + const indicesId = indicesData.id; + wasmOneHot(indicesId, depth, onValue, offValue, outId); + return out; + } + var oneHotConfig3 = { + kernelName: OneHot, + backendName: "wasm", + setupFunc: setup30, + kernelFunc: oneHot4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/OnesLike.js + init_define_BUILD_VERSION(); + function onesLike4(args) { + const { inputs: { x }, backend: backend2 } = args; + const out = backend2.makeOutput(x.shape, x.dtype); + const outVals = backend2.typedArrayFromHeap(out); + outVals.fill(1); + return out; + } + var onesLikeConfig3 = { + kernelName: OnesLike, + backendName: "wasm", + kernelFunc: onesLike4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Pack.js + init_define_BUILD_VERSION(); + function pack3(args) { + const { inputs, backend: backend2, attrs } = args; + const { axis } = attrs; + if (inputs.length === 1) { + return expandDims5({ inputs: { input: inputs[0] }, backend: backend2, attrs: { dim: axis } }); + } + const shape = inputs[0].shape; + const dtype = inputs[0].dtype; + inputs.forEach((t) => { + util_exports.assertShapesMatch(shape, t.shape, "All tensors passed to stack must have matching shapes"); + util_exports.assert(dtype === t.dtype, () => "All tensors passed to stack must have matching dtypes"); + }); + const intermediateTensorInfos = []; + const expandedTensors = inputs.map((t) => { + const expandedT = expandDims5({ inputs: { input: t }, backend: backend2, attrs: { dim: axis } }); + intermediateTensorInfos.push(expandedT); + return expandedT; + }); + const result = concat4({ inputs: expandedTensors, backend: backend2, attrs: { axis } }); + intermediateTensorInfos.forEach((t) => backend2.disposeData(t.dataId)); + return result; + } + var packConfig3 = { + kernelName: Pack, + backendName: "wasm", + kernelFunc: pack3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/PadV2.js + init_define_BUILD_VERSION(); + var wasmPadV2; + function setup31(backend2) { + wasmPadV2 = backend2.wasm.cwrap(PadV2, null, [ + "number", + "array", + "number", + "number", + "array", + "array", + "number", + "number" + ]); + } + function pad2(args) { + const { inputs: { x }, backend: backend2, attrs: { paddings, constantValue } } = args; + const outShape = paddings.map((p2, i) => p2[0] + x.shape[i] + p2[1]); + if (util_exports.sizeFromShape(x.shape) === 0) { + return fill4({ + backend: backend2, + attrs: { shape: outShape, value: constantValue, dtype: x.dtype } + }); + } + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(outShape, x.dtype); + const outTensorData = backend2.dataIdMap.get(out.dataId); + const outId = outTensorData.id; + const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + const prePaddingsFlat = paddings.map((padTuple) => padTuple[0]); + const postPaddingsFlat = paddings.map((padTuple) => padTuple[1]); + const prePaddingsBytes = new Uint8Array(new Int32Array(prePaddingsFlat).buffer); + const postPaddingsBytes = new Uint8Array(new Int32Array(postPaddingsFlat).buffer); + wasmPadV2(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], prePaddingsBytes, postPaddingsBytes, constantValue, outId); + return out; + } + var padV2Config3 = { + kernelName: PadV2, + backendName: "wasm", + kernelFunc: pad2, + setupFunc: setup31 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Pow.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast15 = false; + var powConfig3 = createBinaryKernelConfig(Pow, supportsFullBroadcast15); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Prelu.js + init_define_BUILD_VERSION(); + var wasmPrelu; + function setup32(backend2) { + wasmPrelu = backend2.wasm.cwrap(Prelu, null, [ + "number", + "number", + "number" + ]); + } + function prelu4(args) { + const { inputs, backend: backend2 } = args; + const { x, alpha } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const weightsId = backend2.dataIdMap.get(alpha.dataId).id; + let inputId = xId; + const input2 = x; + let castedInput = input2; + if (input2.dtype !== "float32") { + castedInput = cast5({ backend: backend2, inputs: { x }, attrs: { dtype: "float32" } }); + inputId = backend2.dataIdMap.get(castedInput.dataId).id; + } + const out = backend2.makeOutput(x.shape, "float32"); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmPrelu(inputId, weightsId, outId); + if (input2.dtype !== "float32") { + backend2.disposeData(castedInput.dataId); + } + return out; + } + var preluConfig3 = { + kernelName: Prelu, + backendName: "wasm", + setupFunc: setup32, + kernelFunc: prelu4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Prod.js + init_define_BUILD_VERSION(); + var wasmProd; + function setup33(backend2) { + wasmProd = backend2.wasm.cwrap(Prod, null, [ + "number", + "number", + "number", + "number" + ]); + } + function prod4(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + let reductionAxes = axes; + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + if (transposedId !== xId) { + input2 = transposed; + inputId = transposedId; + reductionAxes = backend_util_exports.getInnerMostAxes(reductionAxes.length, input2.shape.length); + } + } + backend_util_exports.assertAxesAreInnerMostDims("prod", reductionAxes, input2.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, reductionAxes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, input2.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmProd(inputId, reduceSize, CppDType[out.dtype], outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var prodConfig3 = { + kernelName: Prod, + backendName: "wasm", + setupFunc: setup33, + kernelFunc: prod4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Range.js + init_define_BUILD_VERSION(); + var range5 = (args) => { + const { backend: backend2, attrs } = args; + const { start, stop, step: step5, dtype } = attrs; + const values = rangeImpl(start, stop, step5, dtype); + const out = backend2.makeOutput([values.length], dtype); + const outVals = backend2.typedArrayFromHeap(out); + outVals.set(values); + return out; + }; + var rangeConfig3 = { + kernelName: Range, + backendName: "wasm", + kernelFunc: range5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/RealDiv.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast16 = true; + var realDivConfig3 = createBinaryKernelConfig(RealDiv, supportsFullBroadcast16); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Relu.js + init_define_BUILD_VERSION(); + var reluConfig3 = createUnaryKernelConfig(Relu); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Relu6.js + init_define_BUILD_VERSION(); + var relu6Config3 = createUnaryKernelConfig(Relu6); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ResizeBilinear.js + init_define_BUILD_VERSION(); + var wasmResizeBilinear; + function setup34(backend2) { + wasmResizeBilinear = backend2.wasm.cwrap(ResizeBilinear, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function resizeBilinear4(args) { + const { backend: backend2, inputs, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + const [newHeight, newWidth] = size; + const [batch, oldHeight, oldWidth, numChannels] = images.shape; + const outShape = [batch, newHeight, newWidth, numChannels]; + let xData = backend2.dataIdMap.get(images.dataId); + let castedData; + if (xData.dtype !== "float32") { + castedData = cast5({ backend: backend2, inputs: { x: images }, attrs: { dtype: "float32" } }); + xData = backend2.dataIdMap.get(castedData.dataId); + } + const xId = xData.id; + const out = backend2.makeOutput(outShape, "float32"); + if (util_exports.sizeFromShape(images.shape) === 0) { + return out; + } + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmResizeBilinear(xId, batch, oldHeight, oldWidth, numChannels, newHeight, newWidth, alignCorners ? 1 : 0, halfPixelCenters ? 1 : 0, outId); + if (castedData != null) { + backend2.disposeData(castedData.dataId); + } + return out; + } + var resizeBilinearConfig3 = { + kernelName: ResizeBilinear, + backendName: "wasm", + setupFunc: setup34, + kernelFunc: resizeBilinear4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ResizeNearestNeighbor.js + init_define_BUILD_VERSION(); + var wasmResizeNearestNeighbor; + function setup35(backend2) { + wasmResizeNearestNeighbor = backend2.wasm.cwrap(ResizeNearestNeighbor, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function resizeNearestNeighbor4(args) { + const { backend: backend2, inputs, attrs } = args; + const { images } = inputs; + const { alignCorners, halfPixelCenters, size } = attrs; + const [newHeight, newWidth] = size; + const [batch, oldHeight, oldWidth, numChannels] = images.shape; + const outShape = [batch, newHeight, newWidth, numChannels]; + const out = backend2.makeOutput(outShape, "float32"); + if (util_exports.sizeFromShape(images.shape) === 0) { + return out; + } + let xData = backend2.dataIdMap.get(images.dataId); + let castedData; + if (xData.dtype !== "float32") { + castedData = cast5({ + backend: backend2, + inputs: { x: images }, + attrs: { dtype: "float32" } + }); + xData = backend2.dataIdMap.get(castedData.dataId); + } + const xId = xData.id; + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmResizeNearestNeighbor(xId, batch, oldHeight, oldWidth, numChannels, newHeight, newWidth, alignCorners ? 1 : 0, halfPixelCenters ? 1 : 0, outId); + if (castedData != null) { + backend2.disposeData(castedData.dataId); + } + return out; + } + var resizeNearestNeighborConfig3 = { + kernelName: ResizeNearestNeighbor, + backendName: "wasm", + setupFunc: setup35, + kernelFunc: resizeNearestNeighbor4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Reverse.js + init_define_BUILD_VERSION(); + var wasmReverse; + function setup36(backend2) { + wasmReverse = backend2.wasm.cwrap(Reverse, null, [ + "number", + "array", + "number", + "array", + "number", + "number" + ]); + } + function reverse4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { dims } = attrs; + const axes = util_exports.parseAxisParam(dims, x.shape); + if (x.shape.length === 0) { + return identity3({ inputs: { x }, backend: backend2 }); + } + const out = backend2.makeOutput(x.shape, x.dtype); + const xId = backend2.dataIdMap.get(x.dataId).id; + const outId = backend2.dataIdMap.get(out.dataId).id; + const axesBytes = new Uint8Array(new Int32Array(axes).buffer); + const outShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + wasmReverse(xId, axesBytes, axes.length, outShapeBytes, x.shape.length, outId); + const reshaped = reshape4({ inputs: { x: out }, attrs: { shape: x.shape }, backend: backend2 }); + backend2.disposeData(out.dataId); + return reshaped; + } + var reverseConfig3 = { + kernelName: Reverse, + backendName: "wasm", + kernelFunc: reverse4, + setupFunc: setup36 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/RotateWithOffset.js + init_define_BUILD_VERSION(); + var wasmRotate; + function setup37(backend2) { + wasmRotate = backend2.wasm.cwrap(RotateWithOffset, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "array", + "number", + "number" + ]); + } + function rotateWithOffset2(args) { + const { inputs, backend: backend2, attrs } = args; + const { image: image2 } = inputs; + const { radians, fillValue, center } = attrs; + const out = backend2.makeOutput(image2.shape, image2.dtype); + const imageId = backend2.dataIdMap.get(image2.dataId).id; + const outId = backend2.dataIdMap.get(out.dataId).id; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const [centerX, centerY] = backend_util_exports.getImageCenter(center, imageHeight, imageWidth); + const fillIsBlack = fillValue === 0; + const fullOpacityValue = 255; + const fillValues2 = typeof fillValue === "number" ? [fillValue, fillValue, fillValue, fillIsBlack ? 0 : fullOpacityValue] : [...fillValue, fullOpacityValue]; + const fillBytes = new Uint8Array(new Int32Array(fillValues2).buffer); + wasmRotate(imageId, batch, imageHeight, imageWidth, numChannels, radians, centerX, centerY, fillBytes, fillValues2.length, outId); + return out; + } + var rotateWithOffsetConfig3 = { + kernelName: RotateWithOffset, + backendName: "wasm", + kernelFunc: rotateWithOffset2, + setupFunc: setup37 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Round.js + init_define_BUILD_VERSION(); + var roundConfig3 = createUnaryKernelConfig(Round); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Rsqrt.js + init_define_BUILD_VERSION(); + var rsqrtConfig3 = createUnaryKernelConfig(Rsqrt); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ScatterNd.js + init_define_BUILD_VERSION(); + var wasmScatterNd; + function setup38(backend2) { + wasmScatterNd = backend2.wasm.cwrap(ScatterNd, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "array", + "number", + "number" + ]); + } + function scatterNd3(args) { + const { backend: backend2, inputs, attrs } = args; + const { indices, updates } = inputs; + const { shape } = attrs; + const out = backend2.makeOutput(shape, updates.dtype); + if (util_exports.sizeFromShape(shape) === 0) { + return out; + } + const { sliceRank, numUpdates, sliceSize, strides, outputSize } = scatter_nd_util_exports.calculateShapes(updates, indices, shape); + const indicesData = backend2.dataIdMap.get(indices.dataId); + const indicesId = indicesData.id; + const updatesData = backend2.dataIdMap.get(updates.dataId); + const updatesId = updatesData.id; + const stridesBytes = new Uint8Array(new Int32Array(strides).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmScatterNd(indicesId, updatesId, CppDType[updates.dtype], sliceRank, numUpdates, sliceSize, stridesBytes, outputSize, outId); + return out; + } + var scatterNdConfig3 = { + kernelName: ScatterNd, + backendName: "wasm", + setupFunc: setup38, + kernelFunc: scatterNd3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Select.js + init_define_BUILD_VERSION(); + var wasmSelect; + function setup39(backend2) { + wasmSelect = backend2.wasm.cwrap("SelectV2", null, [ + "number", + "number", + "number", + "number", + "number" + ]); + } + function select4(args) { + const { inputs, backend: backend2 } = args; + const { condition, t, e } = inputs; + const conditionId = backend2.dataIdMap.get(condition.dataId).id; + const tId = backend2.dataIdMap.get(t.dataId).id; + const eId = backend2.dataIdMap.get(e.dataId).id; + const out = backend2.makeOutput(t.shape, t.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const cRank = condition.shape.length; + const tRank = t.shape.length; + const offset = cRank === 0 || cRank > 1 || tRank === 1 ? 1 : util_exports.sizeFromShape(t.shape.slice(1)); + wasmSelect(conditionId, tId, eId, offset, outId); + return out; + } + var selectConfig3 = { + kernelName: Select, + backendName: "wasm", + kernelFunc: select4, + setupFunc: setup39 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sigmoid.js + init_define_BUILD_VERSION(); + var wasmFunc7; + function setup40(backend2) { + wasmFunc7 = backend2.wasm.cwrap(Sigmoid, null, ["number", "number"]); + } + function sigmoid4(args) { + const { backend: backend2, inputs: { x } } = args; + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(x.shape, x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + if (util_exports.sizeFromShape(out.shape) === 0) { + return out; + } + wasmFunc7(xId, outId); + return out; + } + var sigmoidConfig3 = { + kernelName: "Sigmoid", + backendName: "wasm", + setupFunc: setup40, + kernelFunc: sigmoid4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sin.js + init_define_BUILD_VERSION(); + var sinConfig3 = createUnaryKernelConfig(Sin); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Softmax.js + init_define_BUILD_VERSION(); + var wasmFunc8; + function setup41(backend2) { + wasmFunc8 = backend2.wasm.cwrap(Softmax, null, [ + "number", + "number", + "number", + "number" + ]); + } + function softmax4(args) { + const { backend: backend2, inputs: { logits }, attrs: { dim } } = args; + const xId = backend2.dataIdMap.get(logits.dataId).id; + const out = backend2.makeOutput(logits.shape, logits.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const channels = logits.shape[dim]; + const batch = util_exports.sizeFromShape(logits.shape) / channels; + if (util_exports.sizeFromShape(out.shape) === 0) { + return out; + } + wasmFunc8(xId, outId, channels, batch); + return out; + } + var softmaxConfig3 = { + kernelName: Softmax, + backendName: "wasm", + setupFunc: setup41, + kernelFunc: softmax4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SpaceToBatchND.js + init_define_BUILD_VERSION(); + function spaceToBatchND4(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const { blockShape, paddings } = attrs; + const prod5 = util_exports.sizeFromShape(blockShape); + const completePaddings = [[0, 0]]; + completePaddings.push(...paddings); + for (let i = 1 + blockShape.length; i < x.shape.length; ++i) { + completePaddings.push([0, 0]); + } + const paddedX = padV2Config3.kernelFunc({ + inputs: { x }, + backend: backend2, + attrs: { paddings: completePaddings, constantValue: 0 } + }); + const reshapedPaddedShape = backend_util_exports.getReshaped(paddedX.shape, blockShape, prod5, false); + const permutedReshapedPaddedPermutation = backend_util_exports.getPermuted(reshapedPaddedShape.length, blockShape.length, false); + const flattenShape = backend_util_exports.getReshapedPermuted(paddedX.shape, blockShape, prod5, false); + const reshapeInputs = { x: paddedX }; + const reshapeAttrs = { shape: reshapedPaddedShape }; + const paddedXReshaped = reshape4({ inputs: reshapeInputs, backend: backend2, attrs: reshapeAttrs }); + const transposeInputs = { x: paddedXReshaped }; + const transposeAttrs = { perm: permutedReshapedPaddedPermutation }; + const paddedXT = transpose4({ inputs: transposeInputs, backend: backend2, attrs: transposeAttrs }); + const resultReshapeInputs = { x: paddedXT }; + const resultReshapeAttrs = { shape: flattenShape }; + const result = reshape4({ inputs: resultReshapeInputs, backend: backend2, attrs: resultReshapeAttrs }); + backend2.disposeData(paddedX.dataId); + backend2.disposeData(paddedXReshaped.dataId); + backend2.disposeData(paddedXT.dataId); + return result; + } + var spaceToBatchNDConfig3 = { + kernelName: SpaceToBatchND, + backendName: "wasm", + kernelFunc: spaceToBatchND4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseFillEmptyRows.js + init_define_BUILD_VERSION(); + var wasmSparseFillEmptyRows; + function setup42(backend2) { + wasmSparseFillEmptyRows = backend2.wasm.cwrap("SparseFillEmptyRows", "number", [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function sparseFillEmptyRows3(args) { + const { backend: backend2, inputs } = args; + const { indices, values, denseShape, defaultValue } = inputs; + const indicesCount = indices.shape[0]; + const rank = indices.shape[1]; + const denseRows = backend2.readSync(denseShape.dataId)[0]; + const maxOutputIndicesShape = [indicesCount + denseRows, rank]; + const indicesId = backend2.dataIdMap.get(indices.dataId).id; + const valuesId = backend2.dataIdMap.get(values.dataId).id; + const defaultValueId = backend2.dataIdMap.get(defaultValue.dataId).id; + const outputIndices = backend2.makeOutput(maxOutputIndicesShape, indices.dtype); + const outputIndicesId = backend2.dataIdMap.get(outputIndices.dataId).id; + const outputValues = backend2.makeOutput(maxOutputIndicesShape.slice(0, 1), values.dtype); + const outputValuesId = backend2.dataIdMap.get(outputValues.dataId).id; + const emptyRowIndicator = backend2.makeOutput([denseRows], "bool"); + const emptyRowIndicatorId = backend2.dataIdMap.get(emptyRowIndicator.dataId).id; + const reverseIndexMap = backend2.makeOutput([indicesCount], indices.dtype); + const reverseIndexMapId = backend2.dataIdMap.get(reverseIndexMap.dataId).id; + const exceptionValues = backend2.makeOutput([4], "int32"); + const exceptionValuesId = backend2.dataIdMap.get(exceptionValues.dataId).id; + const outputRows = wasmSparseFillEmptyRows(indicesId, valuesId, CppDType[values.dtype], indicesCount, denseRows, rank, defaultValueId, outputIndicesId, outputValuesId, emptyRowIndicatorId, reverseIndexMapId, exceptionValuesId); + const exceptionValuesArray = backend2.readSync(exceptionValues.dataId); + let exceptionMessage; + switch (exceptionValuesArray[0]) { + case 1: { + exceptionMessage = backend_util_exports.getSparseFillEmptyRowsIndicesDenseShapeMismatch(exceptionValuesArray[1]); + break; + } + case 2: { + exceptionMessage = backend_util_exports.getSparseFillEmptyRowsNegativeIndexErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]); + break; + } + case 3: + exceptionMessage = backend_util_exports.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2], exceptionValuesArray[3]); + break; + default: + exceptionMessage = ""; + } + backend2.disposeData(exceptionValues.dataId); + if (exceptionMessage) { + backend2.disposeData(outputIndices.dataId); + backend2.disposeData(outputValues.dataId); + backend2.disposeData(emptyRowIndicator.dataId); + backend2.disposeData(reverseIndexMap.dataId); + throw new Error(exceptionMessage); + } + let resizedIndices = outputIndices; + let resizedValues = outputValues; + if (outputRows !== maxOutputIndicesShape[0]) { + resizedIndices = slice4({ + inputs: { x: outputIndices }, + attrs: { begin: 0, size: [outputRows, rank] }, + backend: backend2 + }); + resizedValues = slice4({ + inputs: { x: outputValues }, + attrs: { begin: 0, size: outputRows }, + backend: backend2 + }); + backend2.disposeData(outputIndices.dataId); + backend2.disposeData(outputValues.dataId); + } + return [resizedIndices, resizedValues, emptyRowIndicator, reverseIndexMap]; + } + var sparseFillEmptyRowsConfig3 = { + kernelName: SparseFillEmptyRows, + backendName: "wasm", + setupFunc: setup42, + kernelFunc: sparseFillEmptyRows3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseReshape.js + init_define_BUILD_VERSION(); + var wasmSparseReshape; + function setup43(backend2) { + wasmSparseReshape = backend2.wasm.cwrap(SparseReshape, null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function sparseReshape3(args) { + const { backend: backend2, inputs } = args; + const { inputIndices, inputShape, newShape } = inputs; + if (inputIndices.shape.length !== 2) { + throw new Error(`Input indices should be a matrix but received shape + ${inputIndices.shape}`); + } + if (inputShape.shape.length !== 1) { + throw new Error(`Input shape should be a vector but received shape + ${inputShape.shape}`); + } + if (newShape.shape.length !== 1) { + throw new Error(`Target shape should be a vector but received shape ${newShape.shape}`); + } + const inputIndicesId = backend2.dataIdMap.get(inputIndices.dataId).id; + const inputShapeId = backend2.dataIdMap.get(inputShape.dataId).id; + const newShapeId = backend2.dataIdMap.get(newShape.dataId).id; + const nnz = inputIndices.shape[0]; + const outputRank = util_exports.sizeFromShape(newShape.shape); + const newIndices = backend2.makeOutput([nnz, outputRank], inputIndices.dtype); + const newIndicesId = backend2.dataIdMap.get(newIndices.dataId).id; + const outputShape = backend2.makeOutput([outputRank], newShape.dtype); + const outputShapeId = backend2.dataIdMap.get(outputShape.dataId).id; + const exceptionValues = backend2.makeOutput([3], "int32"); + const exceptionValuesId = backend2.dataIdMap.get(exceptionValues.dataId).id; + wasmSparseReshape(inputIndicesId, inputShapeId, newShapeId, nnz, newIndicesId, outputShapeId, exceptionValuesId); + const exceptionValuesArray = backend2.readSync(exceptionValues.dataId); + let exceptionMessage; + switch (exceptionValuesArray[0]) { + case 0: { + exceptionMessage = backend_util_exports.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]); + break; + } + case 1: { + exceptionMessage = backend_util_exports.getSparseReshapeNegativeOutputDimErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]); + break; + } + case 2: + exceptionMessage = backend_util_exports.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage(); + break; + case 3: { + const inputShapeValues = Array.from(backend2.readSync(inputShape.dataId)), outputShapeValues = Array.from(backend2.readSync(outputShape.dataId)); + exceptionMessage = backend_util_exports.getSparseReshapeInputOutputMultipleErrorMessage(inputShapeValues, outputShapeValues); + break; + } + case 4: { + const inputShapeValues = Array.from(backend2.readSync(inputShape.dataId)), outputShapeValues = Array.from(backend2.readSync(outputShape.dataId)); + exceptionMessage = backend_util_exports.getSparseReshapeInputOutputMismatchErrorMessage(inputShapeValues, outputShapeValues); + break; + } + default: + exceptionMessage = ""; + } + backend2.disposeData(exceptionValues.dataId); + if (exceptionMessage) { + backend2.disposeData(newIndices.dataId); + backend2.disposeData(outputShape.dataId); + throw new Error(exceptionMessage); + } + return [newIndices, outputShape]; + } + var sparseReshapeConfig3 = { + kernelName: SparseReshape, + backendName: "wasm", + setupFunc: setup43, + kernelFunc: sparseReshape3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseSegmentMean.js + init_define_BUILD_VERSION(); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseSegmentReduction.js + init_define_BUILD_VERSION(); + var wasmSparseSegmentReduction; + function setup44(backend2) { + wasmSparseSegmentReduction = backend2.wasm.cwrap("SparseSegmentReduction", null, [ + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number", + "number" + ]); + } + function sparseSegmentReduction(args, isMean) { + const { backend: backend2, inputs } = args; + const { data, indices, segmentIds } = inputs; + const numIndices = indices.shape[0]; + const segmentIdsBack = backend2.readSync(segmentIds.dataId, numIndices - 1, numIndices)[0]; + const lastSegmentIdPlusOne = numIndices > 0 ? segmentIdsBack + 1 : 0; + const outputRows = lastSegmentIdPlusOne; + if (outputRows < 0) { + throw new Error(backend_util_exports.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + } + const outputShape = data.shape.slice(); + outputShape[0] = outputRows; + const dataId = backend2.dataIdMap.get(data.dataId).id; + const indicesId = backend2.dataIdMap.get(indices.dataId).id; + const segmentIdsId = backend2.dataIdMap.get(segmentIds.dataId).id; + const output = backend2.makeOutput(outputShape, data.dtype); + const outputId = backend2.dataIdMap.get(output.dataId).id; + const exceptionValues = backend2.makeOutput([4], "int32"); + const exceptionValuesId = backend2.dataIdMap.get(exceptionValues.dataId).id; + wasmSparseSegmentReduction(dataId, CppDType[data.dtype], data.shape[0], indicesId, segmentIdsId, outputId, exceptionValuesId, isMean, 0); + const exceptionValuesArray = backend2.readSync(exceptionValues.dataId); + let exceptionMessage; + switch (exceptionValuesArray[0]) { + case 0: { + exceptionMessage = backend_util_exports.getSparseSegmentReductionNegativeSegmentIdsErrorMessage(); + break; + } + case 1: { + exceptionMessage = backend_util_exports.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage(); + break; + } + case 2: + exceptionMessage = backend_util_exports.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]); + break; + case 3: + exceptionMessage = backend_util_exports.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2], exceptionValuesArray[3]); + break; + default: + exceptionMessage = ""; + } + backend2.disposeData(exceptionValues.dataId); + if (exceptionMessage) { + backend2.disposeData(output.dataId); + throw new Error(exceptionMessage); + } + return output; + } + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseSegmentMean.js + function sparseSegmentMean3(args) { + return sparseSegmentReduction(args, true); + } + var sparseSegmentMeanConfig3 = { + kernelName: SparseSegmentMean, + backendName: "wasm", + setupFunc: setup44, + kernelFunc: sparseSegmentMean3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseSegmentSum.js + init_define_BUILD_VERSION(); + function sparseSegmentSum3(args) { + return sparseSegmentReduction(args, false); + } + var sparseSegmentSumConfig3 = { + kernelName: SparseSegmentSum, + backendName: "wasm", + setupFunc: setup44, + kernelFunc: sparseSegmentSum3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SplitV.js + init_define_BUILD_VERSION(); + function splitV3(args) { + const { inputs, attrs, backend: backend2 } = args; + const { x } = inputs; + const { numOrSizeSplits, axis } = attrs; + const $axis = util_exports.parseAxisParam(axis, x.shape)[0]; + const splitSizes = backend_util_exports.prepareSplitSize(x, numOrSizeSplits, $axis); + const begin = new Array(x.shape.length).fill(0); + const size = x.shape.slice(); + return splitSizes.map((s) => { + const xSliceSize = [...size]; + xSliceSize[$axis] = s; + const xSlice = slice4({ inputs: { x }, attrs: { begin, size: xSliceSize }, backend: backend2 }); + begin[$axis] += s; + return xSlice; + }); + } + var splitVConfig3 = { + kernelName: SplitV, + backendName: "wasm", + kernelFunc: splitV3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sqrt.js + init_define_BUILD_VERSION(); + var sqrtConfig3 = createUnaryKernelConfig(Sqrt); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Square.js + init_define_BUILD_VERSION(); + var squareConfig3 = createUnaryKernelConfig(Square); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SquaredDifference.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast17 = true; + var squaredDifferenceConfig3 = createBinaryKernelConfig(SquaredDifference, supportsFullBroadcast17); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Step.js + init_define_BUILD_VERSION(); + var wasmStep; + function setup45(backend2) { + wasmStep = backend2.wasm.cwrap(Step, null, [ + "number", + "number", + "number", + "number" + ]); + } + function step4(args) { + const { backend: backend2, inputs, attrs } = args; + const { alpha } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const out = backend2.makeOutput(x.shape, x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmStep(xId, alpha, CppDType[x.dtype], outId); + return out; + } + var stepConfig3 = { + kernelName: Step, + backendName: "wasm", + setupFunc: setup45, + kernelFunc: step4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StridedSlice.js + init_define_BUILD_VERSION(); + var wasmStridedSlice; + function setup46(backend2) { + wasmStridedSlice = backend2.wasm.cwrap(StridedSlice, null, [ + "number", + "array", + "number", + "array", + "array", + "array", + "array", + "array", + "number", + "number" + ]); + } + function stridedSlice4(args) { + const { backend: backend2, inputs, attrs } = args; + const { x } = inputs; + const { begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask } = attrs; + const { finalShapeSparse, finalShape, isIdentity, sliceDim0, isSimpleSlice, begin: $begin, end: $end, strides: $strides } = slice_util_exports.sliceInfo(x.shape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask); + let result; + if (isIdentity) { + result = reshape4({ inputs: { x }, backend: backend2, attrs: { shape: finalShape } }); + } else if (sliceDim0 || isSimpleSlice) { + util_exports.assert(x.shape.length >= 1, () => `Input must have rank at least 1, got: ${x.shape.length}`); + const size = slice_util_exports.computeOutShape($begin, $end, $strides); + const sliced = slice4({ inputs: { x }, backend: backend2, attrs: { begin: $begin, size } }); + result = reshape4({ inputs: { x: sliced }, backend: backend2, attrs: { shape: finalShape } }); + backend2.disposeData(sliced.dataId); + } else { + const out = backend2.makeOutput(finalShapeSparse, "float32"); + const xId = backend2.dataIdMap.get(x.dataId).id; + const xStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(x.shape)).buffer); + const beginBytes = new Uint8Array(new Int32Array($begin).buffer); + const endBytes = new Uint8Array(new Int32Array($end).buffer); + const stridesBytes = new Uint8Array(new Int32Array($strides).buffer); + const outputShapeBytes = new Uint8Array(new Int32Array(finalShapeSparse).buffer); + const outStridesBytes = new Uint8Array(new Int32Array(util_exports.computeStrides(finalShapeSparse)).buffer); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmStridedSlice(xId, xStridesBytes, x.shape.length, beginBytes, endBytes, stridesBytes, outputShapeBytes, outStridesBytes, finalShapeSparse.length, outId); + result = reshape4({ inputs: { x: out }, backend: backend2, attrs: { shape: finalShape } }); + backend2.disposeData(out.dataId); + } + return result; + } + var stridedSliceConfig3 = { + kernelName: StridedSlice, + backendName: "wasm", + setupFunc: setup46, + kernelFunc: stridedSlice4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StringNGrams.js + init_define_BUILD_VERSION(); + function stringNGrams3(args) { + const { backend: backend2, inputs, attrs } = args; + const { data, dataSplits } = inputs; + const { separator, nGramWidths, leftPad, rightPad: rightPad2, padWidth, preserveShortSequences } = attrs; + const $data = backend2.readSync(data.dataId); + const $dataSplits = backend2.readSync(dataSplits.dataId); + const [nGrams, nGramsSplits] = stringNGramsImpl($data, $dataSplits, separator, nGramWidths, leftPad, rightPad2, padWidth, preserveShortSequences); + const nGramsOut = backend2.makeOutput([nGrams.length], "string"); + const nGramsOutData = backend2.dataIdMap.get(nGramsOut.dataId); + nGramsOutData.stringBytes = nGrams; + const nGramsSplitsOut = backend2.makeOutput(dataSplits.shape, "int32"); + const nGramsSplitsOutVals = backend2.typedArrayFromHeap(nGramsSplitsOut); + nGramsSplitsOutVals.set(nGramsSplits); + return [nGramsOut, nGramsSplitsOut]; + } + var stringNGramsConfig3 = { + kernelName: StringNGrams, + backendName: "wasm", + kernelFunc: stringNGrams3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StringSplit.js + init_define_BUILD_VERSION(); + function stringSplit3(args) { + const { backend: backend2, inputs, attrs } = args; + const { input: input2, delimiter } = inputs; + const { skipEmpty } = attrs; + const inputVals = backend2.readSync(input2.dataId); + const delimiterVals = backend2.readSync(delimiter.dataId); + const [indices, values, shape] = stringSplitImpl(inputVals, delimiterVals[0], skipEmpty); + const outputSize = values.length; + const indicesOut = backend2.makeOutput([outputSize, 2], "int32"); + const indicesOutVals = backend2.typedArrayFromHeap(indicesOut); + indicesOutVals.set(indices); + const valuesOut = backend2.makeOutput([outputSize], "string"); + const valuesOutData = backend2.dataIdMap.get(valuesOut.dataId); + valuesOutData.stringBytes = values; + const shapeOut = backend2.makeOutput([2], "int32"); + const shapeOutVals = backend2.typedArrayFromHeap(shapeOut); + shapeOutVals.set(shape); + return [indicesOut, valuesOut, shapeOut]; + } + var stringSplitConfig3 = { + kernelName: StringSplit, + backendName: "wasm", + kernelFunc: stringSplit3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StringToHashBucketFast.js + init_define_BUILD_VERSION(); + function stringToHashBucketFast3(args) { + const { backend: backend2, inputs, attrs } = args; + const { input: input2 } = inputs; + const { numBuckets } = attrs; + const inputVals = backend2.readSync(input2.dataId); + const values = stringToHashBucketFastImpl(inputVals, numBuckets); + const out = backend2.makeOutput(input2.shape, "int32"); + const outVals = backend2.typedArrayFromHeap(out); + outVals.set(values); + return out; + } + var stringToHashBucketFastConfig3 = { + kernelName: StringToHashBucketFast, + backendName: "wasm", + kernelFunc: stringToHashBucketFast3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sub.js + init_define_BUILD_VERSION(); + var supportsFullBroadcast18 = true; + var subConfig3 = createBinaryKernelConfig(Sub, supportsFullBroadcast18); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sum.js + init_define_BUILD_VERSION(); + var wasmSum; + function setup47(backend2) { + wasmSum = backend2.wasm.cwrap(Sum, null, [ + "number", + "number", + "number", + "number" + ]); + } + function sum5(args) { + const { backend: backend2, inputs, attrs } = args; + const { axis, keepDims } = attrs; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + let inputId = xId; + let input2 = x; + const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend2); + let reductionAxes = axes; + if (inputWasTransposed) { + const transposedId = backend2.dataIdMap.get(transposed.dataId).id; + if (transposedId !== xId) { + input2 = transposed; + inputId = transposedId; + reductionAxes = backend_util_exports.getInnerMostAxes(reductionAxes.length, input2.shape.length); + } + } + backend_util_exports.assertAxesAreInnerMostDims("sum", reductionAxes, input2.shape.length); + const [outShape, reduceShape] = backend_util_exports.computeOutAndReduceShapes(input2.shape, reductionAxes); + const reduceSize = util_exports.sizeFromShape(reduceShape); + const out = backend2.makeOutput(outShape, input2.dtype); + if (util_exports.sizeFromShape(input2.shape) !== 0) { + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmSum(inputId, reduceSize, CppDType[out.dtype], outId); + } + if (inputWasTransposed) { + backend2.disposeData(transposed.dataId); + } + if (keepDims) { + const newShape = backend_util_exports.expandShapeToKeepDim(out.shape, originalAxes); + out.shape = newShape; + } + return out; + } + var sumConfig3 = { + kernelName: Sum, + backendName: "wasm", + setupFunc: setup47, + kernelFunc: sum5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Tan.js + init_define_BUILD_VERSION(); + var tanConfig3 = createUnaryKernelConfig(Tan); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Tanh.js + init_define_BUILD_VERSION(); + var tanhConfig3 = createUnaryKernelConfig(Tanh); + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Tile.js + init_define_BUILD_VERSION(); + var wasmTile; + function setup48(backend2) { + wasmTile = backend2.wasm.cwrap(Tile, null, [ + "number", + "array", + "number", + "array", + "number", + "number" + ]); + } + function tile5(args) { + const { inputs, backend: backend2, attrs } = args; + const { x } = inputs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const { reps } = attrs; + const newShape = new Array(x.shape.length); + for (let i = 0; i < newShape.length; i++) { + newShape[i] = x.shape[i] * reps[i]; + } + const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + const newShapeBytes = new Uint8Array(new Int32Array(newShape).buffer); + const out = backend2.makeOutput(newShape, x.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + wasmTile(xId, xShapeBytes, x.shape.length, newShapeBytes, newShape.length, CppDType[out.dtype], outId); + return out; + } + var tileConfig3 = { + kernelName: Tile, + backendName: "wasm", + setupFunc: setup48, + kernelFunc: tile5 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/TopK.js + init_define_BUILD_VERSION(); + var wasmTopK; + function setup49(backend2) { + wasmTopK = backend2.wasm.cwrap(TopK, null, [ + "number", + "array", + "number", + "number", + "number", + "bool", + "number", + "number" + ]); + } + var topk2 = ({ inputs, backend: backend2, attrs }) => { + const { x } = inputs; + const { k, sorted } = attrs; + const xId = backend2.dataIdMap.get(x.dataId).id; + const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer); + const outputShape = x.shape.slice(); + outputShape[outputShape.length - 1] = k; + const outValues = backend2.makeOutput(outputShape, x.dtype); + const outValuesId = backend2.dataIdMap.get(outValues.dataId).id; + const outIndices = backend2.makeOutput(outputShape, "int32"); + const outIndicesId = backend2.dataIdMap.get(outIndices.dataId).id; + wasmTopK(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], k, sorted, outValuesId, outIndicesId); + return [outValues, outIndices]; + }; + var topKConfig3 = { + kernelName: TopK, + backendName: "wasm", + setupFunc: setup49, + kernelFunc: topk2 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Transform.js + init_define_BUILD_VERSION(); + var wasmTransform; + function setup50(backend2) { + wasmTransform = backend2.wasm.cwrap(Transform, null, [ + "number", + "number", + "bool", + "number", + "number", + "number", + "number", + "number", + "number", + "array", + "number", + "number", + "number", + "number", + "number" + ]); + } + function transform4(args) { + const { backend: backend2, inputs, attrs } = args; + const { image: image2, transforms } = inputs; + const { interpolation, fillMode, fillValue, outputShape } = attrs; + const [batch, imageHeight, imageWidth, numChannels] = image2.shape; + const [outHeight, outWidth] = outputShape != null ? outputShape : [imageHeight, imageWidth]; + const outShape = [ + batch, + outHeight, + outWidth, + numChannels + ]; + const strides = new Uint8Array(new Int32Array(util_exports.computeStrides(image2.shape)).buffer); + const out = backend2.makeOutput(outShape, image2.dtype); + const outId = backend2.dataIdMap.get(out.dataId).id; + const imageData = backend2.dataIdMap.get(image2.dataId); + const imageId = imageData.id; + const transformsData = backend2.dataIdMap.get(transforms.dataId); + const transformsId = transformsData.id; + const interpolationModeId = interpolation === "nearest" ? 1 : 2; + let fillModeId; + switch (fillMode) { + case "constant": + fillModeId = 1; + break; + case "reflect": + fillModeId = 2; + break; + case "wrap": + fillModeId = 3; + break; + case "nearest": + fillModeId = 4; + break; + default: + fillModeId = 1; + break; + } + wasmTransform(imageId, transformsId, transforms.shape[0] > 1, batch, outHeight, outWidth, numChannels, imageWidth, imageHeight, strides, image2.shape.length - 1, interpolationModeId, fillModeId, fillValue, outId); + return out; + } + var transformConfig3 = { + kernelName: Transform, + backendName: "wasm", + setupFunc: setup50, + kernelFunc: transform4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Unpack.js + init_define_BUILD_VERSION(); + function unpack3(args) { + const { inputs, backend: backend2, attrs } = args; + const { value } = inputs; + let { axis } = attrs; + if (axis < 0) { + axis += value.shape.length; + } + const numOutputs = value.shape[axis]; + const rank = value.shape.length; + const outShape = new Array(rank - 1); + let outIndex = 0; + for (let i = 0; i < rank; i++) { + if (i !== axis) { + outShape[outIndex++] = value.shape[i]; + } + } + const outs = new Array(numOutputs); + const begin = new Array(rank).fill(0); + const size = value.shape.slice(); + size[axis] = 1; + for (let i = 0; i < outs.length; i++) { + begin[axis] = i; + outs[i] = slice4({ inputs: { x: value }, attrs: { begin, size }, backend: backend2 }); + } + return outs.map(({ dataId, dtype }) => ({ dataId, dtype, shape: outShape })); + } + var unpackConfig3 = { + kernelName: Unpack, + backendName: "wasm", + kernelFunc: unpack3 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ZerosLike.js + init_define_BUILD_VERSION(); + function zerosLike4(args) { + const { inputs: { x }, backend: backend2 } = args; + const out = backend2.makeOutput(x.shape, x.dtype); + const outVals = backend2.typedArrayFromHeap(out); + outVals.fill(0); + return out; + } + var zerosLikeConfig3 = { + kernelName: ZerosLike, + backendName: "wasm", + kernelFunc: zerosLike4 + }; + + // node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@3.19.0_@tensorflow+tfjs-core@3.19.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/register_all_kernels.js + var kernelConfigs3 = [ + _fusedMatMulConfig3, + absConfig3, + addConfig3, + addNConfig3, + allConfig3, + anyConfig3, + argMaxConfig3, + avgPoolConfig3, + batchMatMulConfig3, + batchToSpaceNDConfig3, + castConfig3, + ceilConfig3, + clipByValueConfig3, + concatConfig3, + conv2DConfig3, + conv2DBackpropInputConfig3, + cosConfig3, + coshConfig3, + cropAndResizeConfig3, + cumprodConfig3, + cumsumConfig3, + depthToSpaceConfig3, + depthwiseConv2dNativeConfig3, + eluConfig3, + equalConfig3, + expConfig3, + expandDimsConfig3, + fillConfig3, + flipLeftRightConfig3, + floorConfig3, + floorDivConfig3, + fusedBatchNormConfig, + fusedConv2DConfig3, + fusedDepthwiseConv2DConfig3, + gatherNdConfig3, + gatherV2Config3, + greaterConfig3, + greaterEqualConfig3, + identityConfig3, + leakyReluConfig3, + lessConfig3, + lessEqualConfig3, + logConfig3, + logicalAndConfig3, + logicalNotConfig3, + logicalOrConfig3, + logicalXorConfig, + maxConfig3, + maximumConfig3, + maxPoolConfig3, + meanConfig3, + minConfig3, + minimumConfig3, + mirrorPadConfig3, + multiplyConfig3, + negConfig3, + nonMaxSuppressionV3Config3, + nonMaxSuppressionV4Config3, + nonMaxSuppressionV5Config3, + notEqualConfig3, + oneHotConfig3, + onesLikeConfig3, + packConfig3, + padV2Config3, + powConfig3, + preluConfig3, + prodConfig3, + rangeConfig3, + realDivConfig3, + reluConfig3, + relu6Config3, + reshapeConfig3, + resizeBilinearConfig3, + resizeNearestNeighborConfig3, + reverseConfig3, + rotateWithOffsetConfig3, + roundConfig3, + rsqrtConfig3, + scatterNdConfig3, + selectConfig3, + sigmoidConfig3, + sinConfig3, + sliceConfig3, + softmaxConfig3, + spaceToBatchNDConfig3, + sparseFillEmptyRowsConfig3, + sparseReshapeConfig3, + sparseSegmentMeanConfig3, + sparseSegmentSumConfig3, + splitVConfig3, + sqrtConfig3, + squareConfig3, + squaredDifferenceConfig3, + stepConfig3, + stridedSliceConfig3, + stringNGramsConfig3, + stringSplitConfig3, + stringToHashBucketFastConfig3, + subConfig3, + sumConfig3, + tanConfig3, + tanhConfig3, + tileConfig3, + topKConfig3, + transformConfig3, + transposeConfig3, + unpackConfig3, + zerosLikeConfig3 + ]; + for (const kernelConfig of kernelConfigs3) { + registerKernel(kernelConfig); + } + + init_define_BUILD_VERSION(); + // node_modules/@tensorflow/tfjs-backend-wasm/dist/flags_wasm.js + init_define_BUILD_VERSION(); + var ENV6 = env(); + ENV6.registerFlag( + "WASM_HAS_SIMD_SUPPORT", + async () => WebAssembly.validate(new Uint8Array([ + 0, + 97, + 115, + 109, + 1, + 0, + 0, + 0, + 1, + 4, + 1, + 96, + 0, + 0, + 3, + 2, + 1, + 0, + 10, + 9, + 1, + 7, + 0, + 65, + 0, + 253, + 15, + 26, + 11 + ])) + ); + ENV6.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT", async () => { + if (ENV6.get("IS_NODE")) { + return false; + } + try { + new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)); + return WebAssembly.validate(new Uint8Array([ + 0, + 97, + 115, + 109, + 1, + 0, + 0, + 0, + 1, + 4, + 1, + 96, + 0, + 0, + 3, + 2, + 1, + 0, + 5, + 4, + 1, + 3, + 1, + 1, + 10, + 11, + 1, + 9, + 0, + 65, + 0, + 254, + 16, + 2, + 0, + 26, + 11 + ])); + } catch (e) { + return false; + } + }); + + // node_modules/@tensorflow/tfjs-backend-wasm/dist/backend_wasm.js + init_define_BUILD_VERSION(); + var wasmFactoryThreadedSimd_import = __toESM(require_tfjs_backend_wasm_threaded_simd()); + var import_tfjs_backend_wasm_threaded_simd_worker = __toESM(require_tfjs_backend_wasm_threaded_simd_worker()); + var wasmFactory_import = __toESM(require_tfjs_backend_wasm()); + var wasmFactoryThreadedSimd = wasmFactoryThreadedSimd_import.default || wasmFactoryThreadedSimd_import; + var wasmFactory = wasmFactory_import.default || wasmFactory_import; + var BackendWasm = class extends KernelBackend { + constructor(wasm) { + super(); + this.wasm = wasm; + this.dataIdNextNumber = 1; + this.wasm.tfjs.initWithThreadsCount(threadsCount); + actualThreadsCount = this.wasm.tfjs.getThreadsCount(); + this.dataIdMap = new DataStorage(this, engine()); + } + write(values, shape, dtype) { + const dataId = { id: this.dataIdNextNumber++ }; + this.move(dataId, values, shape, dtype, 1); + return dataId; + } + numDataIds() { + return this.dataIdMap.numDataIds(); + } + async time(f) { + const start = util_exports.now(); + f(); + const kernelMs = util_exports.now() - start; + return { kernelMs }; + } + move(dataId, values, shape, dtype, refCount) { + const id = this.dataIdNextNumber++; + if (dtype === "string") { + const stringBytes = values; + this.dataIdMap.set(dataId, { id, stringBytes, shape, dtype, memoryOffset: null, refCount }); + return; + } + const size = util_exports.sizeFromShape(shape); + const numBytes = size * util_exports.bytesPerElement(dtype); + const memoryOffset = this.wasm._malloc(numBytes); + this.dataIdMap.set(dataId, { id, memoryOffset, shape, dtype, refCount }); + this.wasm.tfjs.registerTensor(id, size, memoryOffset); + if (values != null) { + this.wasm.HEAPU8.set(new Uint8Array(values.buffer, values.byteOffset, numBytes), memoryOffset); + } + } + async read(dataId) { + return this.readSync(dataId); + } + readSync(dataId, start, end) { + const { memoryOffset, dtype, shape, stringBytes } = this.dataIdMap.get(dataId); + if (dtype === "string") { + if ((start == null || start === 0) && (end == null || end >= stringBytes.length)) { + return stringBytes; + } + return stringBytes.slice(start, end); + } + start = start || 0; + end = end || util_exports.sizeFromShape(shape); + const bytesPerElement2 = util_exports.bytesPerElement(dtype); + const bytes = this.wasm.HEAPU8.slice(memoryOffset + start * bytesPerElement2, memoryOffset + end * bytesPerElement2); + return typedArrayFromBuffer(bytes.buffer, dtype); + } + disposeData(dataId, force = false) { + if (this.dataIdMap.has(dataId)) { + const data = this.dataIdMap.get(dataId); + data.refCount--; + if (!force && data.refCount > 0) { + return false; + } + this.wasm._free(data.memoryOffset); + this.wasm.tfjs.disposeData(data.id); + this.dataIdMap.delete(dataId); + } + return true; + } + refCount(dataId) { + if (this.dataIdMap.has(dataId)) { + const tensorData = this.dataIdMap.get(dataId); + return tensorData.refCount; + } + return 0; + } + incRef(dataId) { + const data = this.dataIdMap.get(dataId); + if (data != null) { + data.refCount++; + } + } + floatPrecision() { + return 32; + } + getMemoryOffset(dataId) { + return this.dataIdMap.get(dataId).memoryOffset; + } + dispose() { + this.wasm.tfjs.dispose(); + if ("PThread" in this.wasm) { + this.wasm.PThread.terminateAllThreads(); + } + this.wasm = null; + } + memory() { + return { unreliable: false }; + } + makeOutput(shape, dtype, memoryOffset) { + let dataId; + if (memoryOffset == null) { + dataId = this.write(null, shape, dtype); + } else { + const id = this.dataIdNextNumber++; + dataId = { id }; + this.dataIdMap.set(dataId, { id, memoryOffset, shape, dtype, refCount: 1 }); + const size = util_exports.sizeFromShape(shape); + this.wasm.tfjs.registerTensor(id, size, memoryOffset); + } + return { dataId, shape, dtype }; + } + typedArrayFromHeap({ shape, dtype, dataId }) { + const buffer2 = this.wasm.HEAPU8.buffer; + const { memoryOffset } = this.dataIdMap.get(dataId); + const size = util_exports.sizeFromShape(shape); + switch (dtype) { + case "float32": + return new Float32Array(buffer2, memoryOffset, size); + case "int32": + return new Int32Array(buffer2, memoryOffset, size); + case "bool": + return new Uint8Array(buffer2, memoryOffset, size); + default: + throw new Error(`Unknown dtype ${dtype}`); + } + } + }; + function createInstantiateWasmFunc(path) { + return (imports, callback) => { + util_exports.fetch(path, { credentials: "same-origin" }).then((response) => { + if (!response["ok"]) { + imports.env.a(`failed to load wasm binary file at '${path}'`); + } + response.arrayBuffer().then((binary) => { + WebAssembly.instantiate(binary, imports).then((output) => { + callback(output.instance, output.module); + }); + }); + }); + return {}; + }; + } + function getPathToWasmBinary(simdSupported, threadsSupported, wasmModuleFolder) { + if (wasmPath != null) { + return wasmPath; + } + let path = "tfjs-backend-wasm.wasm"; + if (simdSupported && threadsSupported) { + path = "tfjs-backend-wasm-threaded-simd.wasm"; + } else if (simdSupported) { + path = "tfjs-backend-wasm-simd.wasm"; + } + if (wasmFileMap != null) { + if (wasmFileMap[path] != null) { + return wasmFileMap[path]; + } + } + return wasmModuleFolder + path; + } + async function init() { + const [simdSupported, threadsSupported] = await Promise.all([ + env().getAsync("WASM_HAS_SIMD_SUPPORT"), + env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT") + ]); + return new Promise((resolve, reject) => { + const factoryConfig = {}; + factoryConfig.locateFile = (path, prefix) => { + if (path.endsWith(".worker.js")) { + const response = import_tfjs_backend_wasm_threaded_simd_worker.wasmWorkerContents.replace(/\n/g, "\\n"); + const blob = new Blob([response], { type: "application/javascript" }); + return URL.createObjectURL(blob); + } + if (path.endsWith(".wasm")) { + return getPathToWasmBinary(simdSupported, threadsSupported, wasmPathPrefix != null ? wasmPathPrefix : prefix); + } + return prefix + path; + }; + if (customFetch) { + factoryConfig.instantiateWasm = createInstantiateWasmFunc(getPathToWasmBinary(simdSupported, threadsSupported, wasmPathPrefix != null ? wasmPathPrefix : "")); + } + let initialized = false; + factoryConfig.onAbort = () => { + if (initialized) { + return; + } + if (initAborted) { + return; + } + initAborted = true; + const rejectMsg = "Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"; + reject({ message: rejectMsg }); + }; + let wasm; + if (threadsSupported && simdSupported && wasmPath == null) { + factoryConfig.mainScriptUrlOrBlob = new Blob([`var WasmBackendModuleThreadedSimd = ` + wasmFactoryThreadedSimd.toString()], { type: "text/javascript" }); + wasm = wasmFactoryThreadedSimd(factoryConfig); + } else { + wasm = wasmFactory(factoryConfig); + } + wasm.then((module) => { + initialized = true; + initAborted = false; + const voidReturnType = null; + module.tfjs = { + init: module.cwrap("init", null, []), + initWithThreadsCount: module.cwrap("init_with_threads_count", null, ["number"]), + getThreadsCount: module.cwrap("get_threads_count", "number", []), + registerTensor: module.cwrap("register_tensor", null, [ + "number", + "number", + "number" + ]), + disposeData: module.cwrap("dispose_data", voidReturnType, ["number"]), + dispose: module.cwrap("dispose", voidReturnType, []) + }; + resolve({ wasm: module }); + }).catch(reject); + }); + } + function typedArrayFromBuffer(buffer2, dtype) { + switch (dtype) { + case "float32": + return new Float32Array(buffer2); + case "int32": + return new Int32Array(buffer2); + case "bool": + return new Uint8Array(buffer2); + default: + throw new Error(`Unknown dtype ${dtype}`); + } + } + var wasmBinaryNames = [ + "tfjs-backend-wasm.wasm", + "tfjs-backend-wasm-simd.wasm", + "tfjs-backend-wasm-threaded-simd.wasm" + ]; + var wasmPath = null; + var wasmPathPrefix = null; + var wasmFileMap = {}; + var initAborted = false; + var customFetch = false; + function setWasmPaths(prefixOrFileMap, usePlatformFetch = false) { + if (initAborted) { + throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`"); + } + if (typeof prefixOrFileMap === "string") { + wasmPathPrefix = prefixOrFileMap; + } else { + wasmFileMap = prefixOrFileMap; + const missingPaths = wasmBinaryNames.filter((name) => wasmFileMap[name] == null); + if (missingPaths.length > 0) { + throw new Error(`There were no entries found for the following binaries: ${missingPaths.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`); + } + } + customFetch = usePlatformFetch; + } + var threadsCount = -1; + var actualThreadsCount = -1; + + init_define_BUILD_VERSION(); + // node_modules/@tensorflow/tfjs-backend-wasm/dist/base.js + var WASM_PRIORITY = 2; + registerBackend("wasm", async () => { + const { wasm } = await init(); + return new BackendWasm(wasm); + }, WASM_PRIORITY); + + // src/model.json + var model_default = { format: "layers-model", generatedBy: "keras v2.13.1", convertedBy: "TensorFlow.js Converter v4.10.0", modelTopology: { keras_version: "2.13.1", backend: "tensorflow", model_config: { class_name: "Functional", config: { name: "model", trainable: true, layers: [{ class_name: "InputLayer", config: { batch_input_shape: [null, 300, 80, 1], dtype: "float32", sparse: false, ragged: false, name: "image" }, name: "image", inbound_nodes: [] }, { class_name: "Conv2D", config: { name: "Conv1", trainable: true, dtype: "float32", filters: 32, kernel_size: [3, 3], strides: [1, 1], padding: "same", data_format: "channels_last", dilation_rate: [1, 1], groups: 1, activation: "relu", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "HeNormal", config: { seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, kernel_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, bias_constraint: null }, name: "Conv1", inbound_nodes: [[["image", 0, 0, {}]]] }, { class_name: "MaxPooling2D", config: { name: "pool1", trainable: true, dtype: "float32", pool_size: [2, 2], padding: "valid", strides: [2, 2], data_format: "channels_last" }, name: "pool1", inbound_nodes: [[["Conv1", 0, 0, {}]]] }, { class_name: "Conv2D", config: { name: "Conv2", trainable: true, dtype: "float32", filters: 64, kernel_size: [3, 3], strides: [1, 1], padding: "same", data_format: "channels_last", dilation_rate: [1, 1], groups: 1, activation: "relu", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "HeNormal", config: { seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, kernel_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, bias_constraint: null }, name: "Conv2", inbound_nodes: [[["pool1", 0, 0, {}]]] }, { class_name: "MaxPooling2D", config: { name: "pool2", trainable: true, dtype: "float32", pool_size: [2, 2], padding: "valid", strides: [2, 2], data_format: "channels_last" }, name: "pool2", inbound_nodes: [[["Conv2", 0, 0, {}]]] }, { class_name: "Reshape", config: { name: "reshape", trainable: true, dtype: "float32", target_shape: [75, 1280] }, name: "reshape", inbound_nodes: [[["pool2", 0, 0, {}]]] }, { class_name: "Dense", config: { name: "dense1", trainable: true, dtype: "float32", units: 64, activation: "relu", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "GlorotUniform", config: { seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, kernel_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, bias_constraint: null }, name: "dense1", inbound_nodes: [[["reshape", 0, 0, {}]]] }, { class_name: "Dropout", config: { name: "dropout_9", trainable: true, dtype: "float32", rate: 0.2, noise_shape: null, seed: null }, name: "dropout_9", inbound_nodes: [[["dense1", 0, 0, {}]]] }, { class_name: "Bidirectional", config: { name: "bidirectional_19", trainable: true, dtype: "float32", layer: { module: "keras.layers", class_name: "LSTM", config: { name: "lstm_19", trainable: true, dtype: "float32", return_sequences: true, return_state: false, go_backwards: false, stateful: false, unroll: false, time_major: false, units: 128, activation: "tanh", recurrent_activation: "sigmoid", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "GlorotUniform", config: { seed: null }, registered_name: null }, recurrent_initializer: { module: "keras.initializers", class_name: "Orthogonal", config: { gain: 1, seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, unit_forget_bias: true, kernel_regularizer: null, recurrent_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, recurrent_constraint: null, bias_constraint: null, dropout: 0.25, recurrent_dropout: 0, implementation: 2 }, registered_name: null }, merge_mode: "concat" }, name: "bidirectional_19", inbound_nodes: [[["dropout_9", 0, 0, {}]]] }, { class_name: "Bidirectional", config: { name: "bidirectional_20", trainable: true, dtype: "float32", layer: { module: "keras.layers", class_name: "LSTM", config: { name: "lstm_20", trainable: true, dtype: "float32", return_sequences: true, return_state: false, go_backwards: false, stateful: false, unroll: false, time_major: false, units: 64, activation: "tanh", recurrent_activation: "sigmoid", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "GlorotUniform", config: { seed: null }, registered_name: null }, recurrent_initializer: { module: "keras.initializers", class_name: "Orthogonal", config: { gain: 1, seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, unit_forget_bias: true, kernel_regularizer: null, recurrent_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, recurrent_constraint: null, bias_constraint: null, dropout: 0.25, recurrent_dropout: 0, implementation: 2 }, registered_name: null }, merge_mode: "concat" }, name: "bidirectional_20", inbound_nodes: [[["bidirectional_19", 0, 0, {}]]] }, { class_name: "Dense", config: { name: "dense2", trainable: true, dtype: "float32", units: 24, activation: "softmax", use_bias: true, kernel_initializer: { module: "keras.initializers", class_name: "GlorotUniform", config: { seed: null }, registered_name: null }, bias_initializer: { module: "keras.initializers", class_name: "Zeros", config: {}, registered_name: null }, kernel_regularizer: null, bias_regularizer: null, activity_regularizer: null, kernel_constraint: null, bias_constraint: null }, name: "dense2", inbound_nodes: [[["bidirectional_20", 0, 0, {}]]] }], input_layers: [["image", 0, 0]], output_layers: [["dense2", 0, 0]] } } }, weightsManifest: [{ paths: ["group1-shard1of1.bin"], weights: [{ name: "Conv1/kernel", shape: [3, 3, 1, 32], dtype: "float32" }, { name: "Conv1/bias", shape: [32], dtype: "float32" }, { name: "Conv2/kernel", shape: [3, 3, 32, 64], dtype: "float32" }, { name: "Conv2/bias", shape: [64], dtype: "float32" }, { name: "bidirectional_19/forward_lstm_19/lstm_cell_58/kernel", shape: [64, 512], dtype: "float32" }, { name: "bidirectional_19/forward_lstm_19/lstm_cell_58/recurrent_kernel", shape: [128, 512], dtype: "float32" }, { name: "bidirectional_19/forward_lstm_19/lstm_cell_58/bias", shape: [512], dtype: "float32" }, { name: "bidirectional_19/backward_lstm_19/lstm_cell_59/kernel", shape: [64, 512], dtype: "float32" }, { name: "bidirectional_19/backward_lstm_19/lstm_cell_59/recurrent_kernel", shape: [128, 512], dtype: "float32" }, { name: "bidirectional_19/backward_lstm_19/lstm_cell_59/bias", shape: [512], dtype: "float32" }, { name: "bidirectional_20/forward_lstm_20/lstm_cell_61/kernel", shape: [256, 256], dtype: "float32" }, { name: "bidirectional_20/forward_lstm_20/lstm_cell_61/recurrent_kernel", shape: [64, 256], dtype: "float32" }, { name: "bidirectional_20/forward_lstm_20/lstm_cell_61/bias", shape: [256], dtype: "float32" }, { name: "bidirectional_20/backward_lstm_20/lstm_cell_62/kernel", shape: [256, 256], dtype: "float32" }, { name: "bidirectional_20/backward_lstm_20/lstm_cell_62/recurrent_kernel", shape: [64, 256], dtype: "float32" }, { name: "bidirectional_20/backward_lstm_20/lstm_cell_62/bias", shape: [256], dtype: "float32" }, { name: "dense1/kernel", shape: [1280, 64], dtype: "float32" }, { name: "dense1/bias", shape: [64], dtype: "float32" }, { name: "dense2/kernel", shape: [128, 24], dtype: "float32" }, { name: "dense2/bias", shape: [24], dtype: "float32" }] }] }; + + // src/ccl.ts + init_define_BUILD_VERSION(); + function connectedComponentLabeling(binaryImage, width, height) { + const labels = Array(binaryImage.length).fill(0); + const linked = []; + let nextLabel = 1; + function find(x) { + if (x !== linked[x]) { + linked[x] = find(linked[x]); + } + return linked[x]; + } + function union(x, y) { + linked[find(x)] = find(y); + } + function getNeighbors(row, col) { + const neighbors = []; + if (row > 0 && labels[(row - 1) * width + col] > 0) { + neighbors.push(labels[(row - 1) * width + col]); + } + if (col > 0 && labels[row * width + col - 1] > 0) { + neighbors.push(labels[row * width + col - 1]); + } + if (row > 0 && col > 0 && labels[(row - 1) * width + col - 1] > 0) { + neighbors.push(labels[(row - 1) * width + col - 1]); + } + if (row > 0 && col < width - 1 && labels[(row - 1) * width + col + 1] > 0) { + neighbors.push(labels[(row - 1) * width + col + 1]); + } + return neighbors; + } + for (let row = 0; row < height; row++) { + for (let col = 0; col < width; col++) { + const idx = row * width + col; + if (binaryImage[idx] !== 0) { + const neighbors = getNeighbors(row, col); + if (neighbors.length === 0) { + linked[nextLabel] = nextLabel; + labels[idx] = nextLabel; + nextLabel++; + } else { + neighbors.sort(); + const smallestLabel = neighbors[0]; + labels[idx] = smallestLabel; + for (const neighbor of neighbors) { + if (neighbor !== smallestLabel) { + union(smallestLabel, neighbor); + } + } + } + } + } + } + for (let idx = 0; idx < binaryImage.length; idx++) { + if (binaryImage[idx] !== 0) { + labels[idx] = find(labels[idx]); + } + } + return labels; + } + function computeBounds(labels, width, height) { + const bounds = {}; + for (let row = 0; row < height; row++) { + for (let col = 0; col < width; col++) { + const idx = row * width + col; + const label = labels[idx]; + if (label > 0) { + if (!bounds[label]) { + bounds[label] = { minRow: row, minCol: col, maxRow: row, maxCol: col, area: 1 }; + } else { + if (row < bounds[label].minRow) + bounds[label].minRow = row; + if (col < bounds[label].minCol) + bounds[label].minCol = col; + if (row > bounds[label].maxRow) + bounds[label].maxRow = row; + if (col > bounds[label].maxCol) + bounds[label].maxCol = col; + ++bounds[label].area; + } + } + } + } + return bounds; + } + + // src/main.ts + var charset = [" ", "0", "2", "4", "5", "8", "A", "D", "G", "H", "J", "K", "M", "N", "P", "R", "S", "T", "V", "W", "X", "Y"]; + var weightsData; + var model2; + enableProdMode(); + var wasmToUrl = (wasm) => { + const blb = new Blob([wasm], { type: "application/wasm" }); + return URL.createObjectURL(blb); + }; + var backendloaded = (async () => { + try { + if (true) { + weightsData = (await Promise.resolve().then(() => (init_group1_shard1of1(), group1_shard1of1_exports))).default; + const tfwasmthreadedsimd = (await Promise.resolve().then(() => (init_tfjs_backend_wasm_threaded_simd(), tfjs_backend_wasm_threaded_simd_exports))).default; + const tfwasmsimd = (await Promise.resolve().then(() => (init_tfjs_backend_wasm_simd(), tfjs_backend_wasm_simd_exports))).default; + const tfwasm = (await Promise.resolve().then(() => (init_tfjs_backend_wasm(), tfjs_backend_wasm_exports))).default; + setWasmPaths({ + "tfjs-backend-wasm.wasm": wasmToUrl(tfwasm), + "tfjs-backend-wasm-simd.wasm": wasmToUrl(tfwasmsimd), + "tfjs-backend-wasm-threaded-simd.wasm": wasmToUrl(tfwasmthreadedsimd) + }); + } else { + weightsData = new Uint8Array(await (await fetch(chrome.runtime.getURL("./group1-shard1of1.bin"))).arrayBuffer()); + const args = { + "tfjs-backend-wasm.wasm": chrome.runtime.getURL("tfjs-backend-wasm.wasm"), + "tfjs-backend-wasm-simd.wasm": chrome.runtime.getURL("tfjs-backend-wasm-simd.wasm"), + "tfjs-backend-wasm-threaded-simd.wasm": chrome.runtime.getURL("tfjs-backend-wasm-threaded-simd.wasm") + }; + setWasmPaths(args); + } + const l = await setBackend("wasm"); + console.log("tf backend loaded", l); + } catch (err) { + console.log("tf err", err); + } + })(); + function toggle(obj, v) { + if (v) + obj.style.display = ""; + else + obj.style.display = "none"; + } + var iohander = { + load: function() { + return new Promise((resolve, reject) => { + resolve({ + modelTopology: model_default.modelTopology, + weightSpecs: model_default.weightsManifest[0].weights, + weightData: weightsData.buffer, + format: model_default.format, + generatedBy: model_default.generatedBy, + convertedBy: model_default.convertedBy + }); + }); + } + }; + async function load() { + model2 = await loadLayersModel(iohander); + return model2; + } + function pxlBlackOrWhite(r, g, b) { + return r + g + b > 384 ? 0 : 1; + } + function getBoundries(imgdata) { + const data = imgdata.data; + const width = imgdata.width; + let i = data.length - 1; + let cl = 0; + let cr = 0; + const chkArray = []; + let opq = true; + while (i > 0) { + const a = data[i] > 128; + if (a !== opq) { + if (data[i - 4] > 128 === opq) { + i -= 4; + continue; + } + if (a) { + const pos = (i + 1) / 4; + const x = pos % width; + const y = (pos - x) / width; + const clr = pxlBlackOrWhite(data[i - 1], data[i - 2], data[i - 3]); + chkArray.push([x, y, clr]); + cr += 1; + } else { + const pos = (i - 3) / 4; + const x = pos % width; + const y = (pos - x) / width; + const clr = pxlBlackOrWhite(data[i + 1], data[i + 2], data[i + 3]); + chkArray.push([x, y, clr]); + cl += 1; + } + opq = a; + } + i -= 4; + } + return chkArray; + } + function getBestPos(bgdata, chkArray, slideWidth) { + const data = bgdata.data; + const width = bgdata.width; + let bestSimilarity = 0; + let bestPos = 0; + for (let s = 0; s <= slideWidth; s += 1) { + let similarity = 0; + const amount = chkArray.length; + for (let p2 = 0; p2 < amount; p2 += 1) { + const chk = chkArray[p2]; + const x = chk[0] + s; + const y = chk[1]; + const clr = chk[2]; + const off = (y * width + x) * 4; + const bgclr = pxlBlackOrWhite(data[off], data[off + 1], data[off + 2]); + if (bgclr === clr) { + similarity += 1; + } + } + if (similarity > bestSimilarity) { + bestSimilarity = similarity; + bestPos = s; + } + } + return bestPos / slideWidth * 100; + } + async function getImageDataFromURI(uri) { + const image2 = await imageFromUri(uri); + if (!image2) + throw new Error("No image"); + const canvas = document.createElement("canvas"); + canvas.width = image2.width; + canvas.height = image2.height; + const ctx = canvas.getContext("2d"); + ctx.drawImage(image2, 0, 0); + return ctx.getImageData(0, 0, canvas.width, canvas.height); + } + async function slideCaptcha(tfgElement, tbgElement, sliderElement) { + const tbgUri = tbgElement.style.backgroundImage.slice(5, -2); + const tfgUri = tfgElement.style.backgroundImage.slice(5, -2); + const igd = await getImageDataFromURI(tfgUri); + const chkArray = getBoundries(igd); + const sigd = await getImageDataFromURI(tbgUri); + const slideWidth = sigd.width - igd.width; + const sliderPos = getBestPos(sigd, chkArray, slideWidth); + sliderElement.value = "" + sliderPos; + sliderElement.dispatchEvent(new Event("input"), { bubbles: true }); + return 0 - sliderPos / 2; + } + async function imageFromCanvas(img, bg, off) { + const h = img.height; + const w = img.width; + const th = 80; + const ph = 0; + const pw = 16; + const scale2 = th / h; + const canvas = document.createElement("canvas"); + const cw = w * scale2 + pw * 2; + canvas.width = cw >= 300 ? 300 : cw; + canvas.height = th; + const ctx = canvas.getContext("2d", { willReadFrequently: true }); + ctx.fillStyle = "rgb(238,238,238)"; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.translate(canvas.width / 2, canvas.height / 2); + const draw = function(off2) { + if (bg) { + const border = 4; + ctx.drawImage( + bg, + -off2 + border, + 0, + w - border * 2, + h, + -w / 2 + border, + -h / 2, + w - border * 2, + h + ); + } + ctx.drawImage(img, -w / 2, -h / 2, w, h); + }; + if (bg && off == null) { + off = await slideCaptcha(document.getElementById("t-fg"), document.getElementById("t-bg"), document.getElementById("t-slider")); + } + draw(off || 0); + return ctx.getImageData(0, 0, canvas.width, canvas.height); + } + function toMonochrome(px) { + const ret = Array(px.length >> 2); + for (let i = 0; i < px.length; i += 4) { + ret[i >> 2] = +(px[i] < 128); + } + return ret; + } + var greedyCTCDecode = (yPred) => tidy(() => yPred.argMax(-1).arraySync()); + function processCTCDecodedSequence(decodedSequence, blankLabel = 0) { + const result = []; + let prevLabel = blankLabel; + for (const label of decodedSequence) { + if (label !== blankLabel && label !== prevLabel) { + result.push(label); + } + prevLabel = label; + } + return result; + } + function indicesToSymbols(decodedIndices) { + return decodedIndices.map((index) => charset[index - 1] || ""); + } + async function predict(img, bg, off) { + if (!model2) { + model2 = await load(); + } + const image2 = await imageFromCanvas(img, bg, off); + if (!image2) + throw new Error("Failed to gen image"); + const mono = toMonochrome(image2.data); + console.log(mono.reduce((a, b) => a + b), 0); + const labels = connectedComponentLabeling(mono, image2.width, image2.height); + const props = computeBounds(labels, image2.width, image2.height); + const sortedByArea = Object.entries(props).sort((a, b) => a[1].area - b[1].area); + const n = 8; + let eightBiggest = sortedByArea.slice(0, -n); + for (const [label, region] of eightBiggest) { + for (let y = region.minRow; y <= region.maxRow; ++y) { + for (let x = region.minCol; x <= region.maxCol; ++x) { + if (labels[y * image2.width + x] === +label) { + labels[y * image2.width + x] = 0; + } + } + } + } + eightBiggest = sortedByArea.slice(-n); + for (const [label, region] of eightBiggest) { + if (region.maxRow - region.minRow > 20) { + continue; + } + for (let y = region.minRow; y <= region.maxRow; ++y) { + for (let x = region.minCol; x <= region.maxCol; ++x) { + if (labels[y * image2.width + x] === +label) { + labels[y * image2.width + x] = 0; + } + } + } + } + for (const [label, region] of eightBiggest) { + if (region.maxRow - region.minRow <= 20) { + continue; + } + for (let y = region.minRow; y <= region.maxRow; ++y) { + for (let x = region.minCol; x <= region.maxCol; ++x) { + if (labels[y * image2.width + x] === +label) { + labels[y * image2.width + x] = 1; + } + } + } + } + const filtered2 = tensor3d(labels, [image2.height, image2.width, 1]).concat(zeros([80, 300 - image2.width, 1]), 1); + const prediction = model2.predict(filtered2.transpose([1, 0, 2]).expandDims(0)); + let d; + if (!Array.isArray(prediction)) { + const v = greedyCTCDecode(prediction); + console.log(v); + const s = processCTCDecodedSequence(v[0], charset.length + 1); + return indicesToSymbols(s).join("").trim(); + } else + throw new Error("unexpected inference"); + return ""; + } + async function imageFromUri(uri) { + if (uri.startsWith('url("')) { + uri = uri.substr(5, uri.length - 7); + } + if (!uri.startsWith("data:")) { + return null; + } + const img = new Image(); + await new Promise((r) => { + img.onload = r; + img.src = uri; + }); + return img; + } + async function predictUri(uri, uribg, bgoff) { + const img = await imageFromUri(uri); + const bg = uribg ? await imageFromUri(uribg) : null; + const off = bgoff ? parseInt(bgoff) : null; + return await predict(img, bg, off); + } + //var solveButton = document.createElement("input"); + //solveButton.id = "t-auto-solve"; + //solveButton.value = "Solve"; + //solveButton.type = "button"; + //solveButton.style.fontSize = "11px"; + //solveButton.style.padding = "0 2px"; + //solveButton.style.margin = "0px 0px 0px 6px"; + //solveButton.style.height = "18px"; + //solveButton.onclick = async function() { + // solve(true); + //}; + //var altsDiv = document.createElement("div"); + //altsDiv.id = "t-auto-options"; + //altsDiv.style.margin = "0"; + //altsDiv.style.padding = "0"; + //var storedPalceholder; + var overrides = {}; + function placeAfter(elem, sibling) { + if (elem.parentElement !== sibling.parentElement) { + setTimeout(function() { + sibling.parentElement?.insertBefore(elem, sibling.nextElementSibling); + }, 1); + } + } + var previousText = null; + async function solve(force) { + const resp = document.getElementById("t-resp"); + if (!resp) + return; + const bg = document.getElementById("t-bg"); + if (!bg) + return; + const fg = document.getElementById("t-fg"); + if (!fg) + return; + const help = document.getElementById("t-help"); + if (!help) + return; + await backendloaded; + //placeAfter(solveButton, resp); + //placeAfter(altsDiv, help); + //setTimeout(function() { + // toggle(solveButton, bg.style.backgroundImage); + //}, 1); + const text = fg.style.backgroundImage; + if (!text) { + // altsDiv.innerHTML = ""; + return; + } + if (text === previousText && !force) + return; + previousText = text; + //altsDiv.innerHTML = ""; + //if (!storedPalceholder) + // storedPalceholder = resp.placeholder; + //resp.placeholder = "solving captcha..."; + overrides = {}; + const result = await predictUri( + text, + bg.style.backgroundImage, + force ? bg.style.backgroundPositionX : null + ); + //resp.placeholder = storedPalceholder; + resp.value = result; + } + //var observer = new MutationObserver(async function(mutationsList, observer2) { + // solve(false); + //}); + //observer.observe(document.body, { + // attributes: true, + // childList: true, + // subtree: true + //}); +//})(); +/** + * @license + * Copyright 2017 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2018 Google LLC + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + * ============================================================================= + */ +/** + * @license + * Copyright 2018 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ============================================================================= + */ +/** + * @license + * Copyright 2018 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2019 Google LLC + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + * ============================================================================= + */ +/** + * @license + * Copyright 2019 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ============================================================================= + */ +/** + * @license + * Copyright 2019 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2019 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2020 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2020 Google LLC + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + * ============================================================================= + */ +/** + * @license + * Copyright 2020 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2020 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2021 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2021 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2022 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2022 Google LLC + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + * ============================================================================= + */ +/** + * @license + * Copyright 2022 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2022 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** @license See the LICENSE file. */ diff --git a/docs/swf_thumb.png b/docs/swf_thumb.png new file mode 100644 index 0000000000..083d8e6af6 Binary files /dev/null and b/docs/swf_thumb.png differ diff --git a/docs/update_api.json b/docs/update_api.json deleted file mode 100644 index 41ee34f6c3..0000000000 --- a/docs/update_api.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "api_version": 1, - "messages": [ - { - "type": "update", - - "code": 56, - "date": "2017-03-18T13:23:06.614104", - "message_html": "

Clover v2.2.0 is available

A new version of Clover is available.

This release fixes stuff.
- aaa
- bbb", - - "apk": { - "default": { - "url": "https://github.com/Floens/Clover/releases/download/v2.2.0/Clover_v2.2.0.apk" - }, - "fdroid": { - "url": "https://f-droid.org/repo/org.floens.chan_56.apk" - } - } - } - ], - "check_interval": 432000000 -} diff --git a/docs/update_api.txt b/docs/update_api.txt deleted file mode 100644 index 23652dca46..0000000000 --- a/docs/update_api.txt +++ /dev/null @@ -1,29 +0,0 @@ -update_api.json describes the update check api that Clover loads periodically. - -api_version -Version of this api, always 1. - -check_interval -the interval of loading the file, overrides the default interval of 5 days if set. - -messages -array of messages - - type: - type of the message, only "update" is supported - - code: - code of the new version. if this is higher than the code of the calling app then the message will be processed. - - date: - ISO8601 date, parsed but not used for now. - - message_html: - message shown to the user, parsed with Html.fromHtml() - - apk: - set of apks for each flavor. each key is only parsed if it equals to the flavor name that the app is compiled for. - - url: - url of the apk file to download and install. - diff --git a/docs/yt-resp-example.json b/docs/yt-resp-example.json new file mode 100644 index 0000000000..9c3d23bae4 --- /dev/null +++ b/docs/yt-resp-example.json @@ -0,0 +1,55 @@ +{ + "videoDetails": { + "videoId": "KnrGMHhnqrw", + "title": "Low Roar - \"I'll Keep Coming\"", + "lengthSeconds": "368", + "keywords": [ + "Low Roar (Musical Artist)", + "Low Roar", + "Iceland (Country)", + "icelandic music", + "I'll Keep Coming", + "Album 0", + "Low Roar new album" + ], + "channelId": "UCyhqBfYUdAlECQtfmNIlbuw", + "isOwnerViewing": false, + "shortDescription": "Track 4, \"I'll Keep Coming\" from Low Roar's new album, 0.\nAlbum available in vinyl, CD and download formats. Visit http://shop.lowroarmusic.com/ for more. \n\nBuy on iTunes http://bit.ly/0album\nBuy on Amazon http://bit.ly/lr0amazon\n\nProduced and recorded by Low Roar, Mike Lindsay, and Andrew Scheps at CMT studios Reykjavik and Punkerpad West, Van Nuys, CA.\n\nMixed by Andrew Scheps at Punkerpad West, Van Nuys, CA.\nArtwork by Anna Fríða Giudice and Valeria Morando at 7factory.\n\nAll sounds made by Low Roar except...\nAmiina: Strings on Breathe In, Phantoms, Vampire On My Fridge, Please Don't Stop (Chapter 2)\nMaria Huld Markan Sigfusdottir: Strings on I'll Keep Coming, I'm Leaving\nSigurlaug Gísladóttir: Vocals on I'll Keep Coming, Please Don't Stop (Chapters 1 & 2)\nKira Kira: Vocals and programming on Anything You Need\nMike Lindsay: Vocals on Half Asleep\nAndrew Scheps: Bass, Keyboards, Theremin and Modular Synth on Nobody Loves Me Like You, Half Asleep, Anything You Need, Dreamer, Please Don't Stop (Chapters 1 & 2)\n \nTQ1402\n© and ℗ 2014, Tonequake Records. All rights reserved. Unlawful reproduction makes you a dick.", + "isCrawlable": true, + "thumbnail": { + "thumbnails": [ + { + "url": "https://i.ytimg.com/vi/KnrGMHhnqrw/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLBG6uZyYuL0FAQqer9htolnc8w2LQ", + "width": 168, + "height": 94 + }, + { + "url": "https://i.ytimg.com/vi/KnrGMHhnqrw/hqdefault.jpg?sqp=-oaymwEiCMQBEG5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLC49PRjCt1d0vgtnYNQ_Y_YJ7HMIQ", + "width": 196, + "height": 110 + }, + { + "url": "https://i.ytimg.com/vi/KnrGMHhnqrw/hqdefault.jpg?sqp=-oaymwEjCPYBEIoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCoMIinZh1NUwXULy31ZxnWfK1ZEg", + "width": 246, + "height": 138 + }, + { + "url": "https://i.ytimg.com/vi/KnrGMHhnqrw/hqdefault.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAWGfTZ7PSQrJou7_71E5-CLXengw", + "width": 336, + "height": 188 + }, + { + "url": "https://i.ytimg.com/vi/KnrGMHhnqrw/maxresdefault.jpg", + "width": 1920, + "height": 1080 + } + ] + }, + "allowRatings": true, + "viewCount": "15128593", + "author": "LOWROARMUSIC", + "isPrivate": false, + "isUnpluggedCorpus": false, + "isLiveContent": false + } +} \ No newline at end of file diff --git a/releases/README b/releases/README deleted file mode 100644 index acf921d2af..0000000000 --- a/releases/README +++ /dev/null @@ -1 +0,0 @@ -Clover APK releases signed by the author can be found at https://github.com/Floens/Clover/releases