soul-browser/sources/java/com/google/common/base/CharMatcher.java
KaKi87 550ddb0413
Decompile and recreate Soul Browser v1.4.85 with APK CI builds (#1)
* Decompile and recreate Soul Browser v1.4.85 with APK CI builds

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Fix CI build: include bundled google.jks and remove PR trigger

The apktool build failed in CI because app/unknown/.../google.jks was
excluded by the *.jks gitignore rule. Whitelist app-bundled JKS files
and commit the missing resource.

Also remove the redundant pull_request workflow trigger.

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Change package ID to com.github.kaki87.soulbrowser

Rename the application ID so the rebuilt APK can be installed
alongside the original Soul Browser from Google Play.

- Update AndroidManifest package, permissions, providers, and actions
- Update R class references in smali (com/github/kaki87/soulbrowser/R)
- Update shortcuts.xml targetPackage
- Rename app label to "Soul Rebuild" for easy identification

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Fix install compatibility: remove split APK metadata and bundle native libs

The rebuilt APK still declared requiredSplitTypes and Play Store split
metadata, causing Android to reject standalone installs as incompatible.

- Remove requiredSplitTypes and split-related manifest meta-data
- Merge native libs from all ABI splits with uncompressed storage
- Page-align before signing for extractNativeLibs=false
- Add .so to apktool doNotCompress list

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Fix install failure: use apksigner v2/v3 and bundle arm64 native libs

Target SDK 36 requires APK Signature Scheme v2+, but jarsigner only
produces v1 signatures, causing Android to reject the install.

- Sign with apksigner (v1+v2+v3) instead of jarsigner
- Add arm64-v8a native libraries from universal Soul Browser 1.4.79
- Set extractNativeLibs=true for reliable sideload installs
- Commit stable debug keystore for consistent signatures across builds

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Add committed debug keystore for consistent APK signatures

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Fix startup crash: use original classes2.dex desugar libraries

Apktool recompiles smali_classes2 into a broken classes2.dex, causing
ClassNotFoundException for j$.com.android.tools.r8.a at ML Kit init.

Inject the original classes2.dex (Java 8+ desugar libs) after apktool
build instead of using the recompiled version.

Co-authored-by: KaKi87 <KaKi87@pm.me>

* Fix missing drawable resources from density split APKs

The base APK is an app bundle module; density-specific drawables like
seek_thumb_nor_b live in config.xhdpi.apk and were missing after rebuild,
causing Resources$NotFoundException at runtime.

- Merge non-9-patch resources from split APKs before apktool build
- Sync public.xml IDs from R smali only when backing files exist
- Add 713 density-specific resource IDs to public.xml

Co-authored-by: KaKi87 <KaKi87@pm.me>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-10 16:07:14 +02:00

850 lines
27 KiB
Java
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.google.common.base;
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.annotations.VisibleForTesting;
import java.util.Arrays;
@GwtCompatible
/* loaded from: classes3.dex */
public abstract class CharMatcher implements Predicate<Character> {
/* renamed from: com.google.common.base.CharMatcher$1, reason: invalid class name */
/* loaded from: classes3.dex */
class AnonymousClass1 extends NegatedFastMatcher {
@Override // com.google.common.base.CharMatcher.Negated
public final String toString() {
return null;
}
}
/* loaded from: classes3.dex */
public static final class And extends CharMatcher {
/* renamed from: c, reason: collision with root package name */
public final CharMatcher f12152c;
public final CharMatcher f;
public And(CharMatcher charMatcher, CharMatcher charMatcher2) {
this.f12152c = charMatcher;
charMatcher2.getClass();
this.f = charMatcher2;
}
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
if (this.f12152c.m(c2) && this.f.m(c2)) {
return true;
}
return false;
}
public final String toString() {
return "CharMatcher.and(" + this.f12152c + ", " + this.f + ")";
}
}
/* loaded from: classes3.dex */
public static final class Any extends NamedFastMatcher {
public static final CharMatcher f = new NamedFastMatcher("CharMatcher.any()");
@Override // com.google.common.base.CharMatcher
public final CharMatcher b(CharMatcher charMatcher) {
charMatcher.getClass();
return charMatcher;
}
@Override // com.google.common.base.CharMatcher
public final int f(CharSequence charSequence) {
return charSequence.length();
}
@Override // com.google.common.base.CharMatcher
public final int h(int i, CharSequence charSequence) {
int length = charSequence.length();
Preconditions.i(i, length);
if (i == length) {
return -1;
}
return i;
}
@Override // com.google.common.base.CharMatcher
public final int i(CharSequence charSequence) {
if (charSequence.length() == 0) {
return -1;
}
return 0;
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
return true;
}
@Override // com.google.common.base.CharMatcher
public final boolean n(CharSequence charSequence) {
charSequence.getClass();
return true;
}
@Override // com.google.common.base.CharMatcher
public final boolean o(CharSequence charSequence) {
if (charSequence.length() == 0) {
return true;
}
return false;
}
@Override // com.google.common.base.CharMatcher.FastMatcher, com.google.common.base.CharMatcher
public final CharMatcher p() {
return None.f;
}
@Override // com.google.common.base.CharMatcher
public final CharMatcher q(CharMatcher charMatcher) {
charMatcher.getClass();
return this;
}
}
/* loaded from: classes3.dex */
public static final class AnyOf extends CharMatcher {
/* renamed from: c, reason: collision with root package name */
public final char[] f12153c;
public AnyOf(String str) {
char[] charArray = str.toString().toCharArray();
this.f12153c = charArray;
Arrays.sort(charArray);
}
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
if (Arrays.binarySearch(this.f12153c, c2) >= 0) {
return true;
}
return false;
}
public final String toString() {
StringBuilder sb = new StringBuilder("CharMatcher.anyOf(\"");
for (char c2 : this.f12153c) {
sb.append(CharMatcher.a(c2));
}
sb.append("\")");
return sb.toString();
}
}
/* loaded from: classes3.dex */
public static final class Ascii extends NamedFastMatcher {
public static final CharMatcher f = new NamedFastMatcher("CharMatcher.ascii()");
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
return c2 <= 127;
}
}
@GwtIncompatible
/* loaded from: classes3.dex */
public static final class BitSetMatcher extends NamedFastMatcher {
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
throw null;
}
}
/* loaded from: classes3.dex */
public static final class BreakingWhitespace extends CharMatcher {
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
if (c2 != ' ' && c2 != 133 && c2 != 5760) {
if (c2 != 8199) {
if (c2 != 8287 && c2 != 12288 && c2 != 8232 && c2 != 8233) {
switch (c2) {
case '\t':
case '\n':
case 11:
case '\f':
case '\r':
break;
default:
if (c2 >= 8192 && c2 <= 8202) {
return true;
}
break;
}
}
}
return false;
}
return true;
}
public final String toString() {
return "CharMatcher.breakingWhitespace()";
}
}
/* loaded from: classes3.dex */
public static final class Digit extends RangesMatcher {
static {
char[] charArray = "0٠۰߀႐០᠐᥆᧐᪀᪐᭐᮰᱀᱐꘠꣐꤀꧐꧰꩐꯰".toCharArray();
char[] cArr = new char[37];
for (int i = 0; i < 37; i++) {
cArr[i] = (char) ("0٠۰߀႐០᠐᥆᧐᪀᪐᭐᮰᱀᱐꘠꣐꤀꧐꧰꩐꯰".charAt(i) + '\t');
}
new RangesMatcher("CharMatcher.digit()", charArray, cArr);
}
}
/* loaded from: classes3.dex */
public static abstract class FastMatcher extends CharMatcher {
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public CharMatcher p() {
return new Negated(this);
}
}
/* loaded from: classes3.dex */
public static final class ForPredicate extends CharMatcher {
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
throw null;
}
public final String toString() {
return "CharMatcher.forPredicate(null)";
}
}
/* loaded from: classes3.dex */
public static final class InRange extends FastMatcher {
/* renamed from: c, reason: collision with root package name */
public final char f12154c;
public final char f;
public InRange(char c2, char c3) {
boolean z;
if (c3 >= c2) {
z = true;
} else {
z = false;
}
Preconditions.d(z);
this.f12154c = c2;
this.f = c3;
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
if (this.f12154c <= c2 && c2 <= this.f) {
return true;
}
return false;
}
public final String toString() {
return "CharMatcher.inRange('" + CharMatcher.a(this.f12154c) + "', '" + CharMatcher.a(this.f) + "')";
}
}
/* loaded from: classes3.dex */
public static final class Invisible extends RangesMatcher {
static {
new RangesMatcher("CharMatcher.invisible()", "\u0000\u007f\u00ad\u0600\u061c\u06dd\u070f\u0890\u08e2\u1680\u180e\u2000\u2028\u205f\u2066\u3000\ud800\ufeff\ufff9".toCharArray(), "  \u00ad\u0605\u061c\u06dd\u070f\u0891\u08e2\u1680\u180e\u200f\u2064\u206f\u3000\uf8ff\ufeff\ufffb".toCharArray());
}
}
/* loaded from: classes3.dex */
public static final class Is extends FastMatcher {
/* renamed from: c, reason: collision with root package name */
public final char f12155c;
public Is(char c2) {
this.f12155c = c2;
}
@Override // com.google.common.base.CharMatcher
public final CharMatcher b(CharMatcher charMatcher) {
if (charMatcher.m(this.f12155c)) {
return this;
}
return None.f;
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
if (c2 == this.f12155c) {
return true;
}
return false;
}
@Override // com.google.common.base.CharMatcher.FastMatcher, com.google.common.base.CharMatcher
public final CharMatcher p() {
return new IsNot(this.f12155c);
}
@Override // com.google.common.base.CharMatcher
public final CharMatcher q(CharMatcher charMatcher) {
if (charMatcher.m(this.f12155c)) {
return charMatcher;
}
return new Or(this, charMatcher);
}
public final String toString() {
return "CharMatcher.is('" + CharMatcher.a(this.f12155c) + "')";
}
}
/* loaded from: classes3.dex */
public static final class IsEither extends FastMatcher {
/* renamed from: c, reason: collision with root package name */
public final char f12156c;
public final char f;
public IsEither(char c2, char c3) {
this.f12156c = c2;
this.f = c3;
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
if (c2 != this.f12156c && c2 != this.f) {
return false;
}
return true;
}
public final String toString() {
return "CharMatcher.anyOf(\"" + CharMatcher.a(this.f12156c) + CharMatcher.a(this.f) + "\")";
}
}
/* loaded from: classes3.dex */
public static final class IsNot extends FastMatcher {
/* renamed from: c, reason: collision with root package name */
public final char f12157c;
public IsNot(char c2) {
this.f12157c = c2;
}
@Override // com.google.common.base.CharMatcher
public final CharMatcher b(CharMatcher charMatcher) {
if (charMatcher.m(this.f12157c)) {
return new And(this, charMatcher);
}
return charMatcher;
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
if (c2 != this.f12157c) {
return true;
}
return false;
}
@Override // com.google.common.base.CharMatcher.FastMatcher, com.google.common.base.CharMatcher
public final CharMatcher p() {
return new Is(this.f12157c);
}
@Override // com.google.common.base.CharMatcher
public final CharMatcher q(CharMatcher charMatcher) {
if (charMatcher.m(this.f12157c)) {
return Any.f;
}
return this;
}
public final String toString() {
return "CharMatcher.isNot('" + CharMatcher.a(this.f12157c) + "')";
}
}
/* loaded from: classes3.dex */
public static final class JavaDigit extends CharMatcher {
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
return Character.isDigit(c2);
}
public final String toString() {
return "CharMatcher.javaDigit()";
}
}
/* loaded from: classes3.dex */
public static final class JavaIsoControl extends NamedFastMatcher {
public static final CharMatcher f = new NamedFastMatcher("CharMatcher.javaIsoControl()");
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
if (c2 > 31) {
return c2 >= 127 && c2 <= 159;
}
return true;
}
}
/* loaded from: classes3.dex */
public static final class JavaLetter extends CharMatcher {
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
return Character.isLetter(c2);
}
public final String toString() {
return "CharMatcher.javaLetter()";
}
}
/* loaded from: classes3.dex */
public static final class JavaLetterOrDigit extends CharMatcher {
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
return Character.isLetterOrDigit(c2);
}
public final String toString() {
return "CharMatcher.javaLetterOrDigit()";
}
}
/* loaded from: classes3.dex */
public static final class JavaLowerCase extends CharMatcher {
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
return Character.isLowerCase(c2);
}
public final String toString() {
return "CharMatcher.javaLowerCase()";
}
}
/* loaded from: classes3.dex */
public static final class JavaUpperCase extends CharMatcher {
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
return Character.isUpperCase(c2);
}
public final String toString() {
return "CharMatcher.javaUpperCase()";
}
}
/* loaded from: classes3.dex */
public static abstract class NamedFastMatcher extends FastMatcher {
/* renamed from: c, reason: collision with root package name */
public final String f12158c;
public NamedFastMatcher(String str) {
this.f12158c = str;
}
public final String toString() {
return this.f12158c;
}
}
/* loaded from: classes3.dex */
public static class Negated extends CharMatcher {
/* renamed from: c, reason: collision with root package name */
public final CharMatcher f12159c;
public Negated(CharMatcher charMatcher) {
this.f12159c = charMatcher;
}
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final int f(CharSequence charSequence) {
return charSequence.length() - this.f12159c.f(charSequence);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
return !this.f12159c.m(c2);
}
@Override // com.google.common.base.CharMatcher
public final boolean n(CharSequence charSequence) {
return this.f12159c.o(charSequence);
}
@Override // com.google.common.base.CharMatcher
public final boolean o(CharSequence charSequence) {
return this.f12159c.n(charSequence);
}
@Override // com.google.common.base.CharMatcher
public final CharMatcher p() {
return this.f12159c;
}
public String toString() {
return this.f12159c + ".negate()";
}
}
/* loaded from: classes3.dex */
public static class NegatedFastMatcher extends Negated {
}
/* loaded from: classes3.dex */
public static final class None extends NamedFastMatcher {
public static final CharMatcher f = new NamedFastMatcher("CharMatcher.none()");
@Override // com.google.common.base.CharMatcher
public final CharMatcher b(CharMatcher charMatcher) {
charMatcher.getClass();
return this;
}
@Override // com.google.common.base.CharMatcher
public final int f(CharSequence charSequence) {
charSequence.getClass();
return 0;
}
@Override // com.google.common.base.CharMatcher
public final int h(int i, CharSequence charSequence) {
Preconditions.i(i, charSequence.length());
return -1;
}
@Override // com.google.common.base.CharMatcher
public final int i(CharSequence charSequence) {
charSequence.getClass();
return -1;
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
return false;
}
@Override // com.google.common.base.CharMatcher
public final boolean n(CharSequence charSequence) {
if (charSequence.length() == 0) {
return true;
}
return false;
}
@Override // com.google.common.base.CharMatcher
public final boolean o(CharSequence charSequence) {
charSequence.getClass();
return true;
}
@Override // com.google.common.base.CharMatcher.FastMatcher, com.google.common.base.CharMatcher
public final CharMatcher p() {
return Any.f;
}
@Override // com.google.common.base.CharMatcher
public final CharMatcher q(CharMatcher charMatcher) {
charMatcher.getClass();
return charMatcher;
}
}
/* loaded from: classes3.dex */
public static final class Or extends CharMatcher {
/* renamed from: c, reason: collision with root package name */
public final CharMatcher f12160c;
public final CharMatcher f;
public Or(CharMatcher charMatcher, CharMatcher charMatcher2) {
this.f12160c = charMatcher;
charMatcher2.getClass();
this.f = charMatcher2;
}
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
if (!this.f12160c.m(c2) && !this.f.m(c2)) {
return false;
}
return true;
}
public final String toString() {
return "CharMatcher.or(" + this.f12160c + ", " + this.f + ")";
}
}
/* loaded from: classes3.dex */
public static class RangesMatcher extends CharMatcher {
/* renamed from: c, reason: collision with root package name */
public final String f12161c;
public final char[] f;
public final char[] g;
public RangesMatcher(String str, char[] cArr, char[] cArr2) {
boolean z;
boolean z2;
boolean z3;
this.f12161c = str;
this.f = cArr;
this.g = cArr2;
if (cArr.length == cArr2.length) {
z = true;
} else {
z = false;
}
Preconditions.d(z);
int i = 0;
while (i < cArr.length) {
if (cArr[i] <= cArr2[i]) {
z2 = true;
} else {
z2 = false;
}
Preconditions.d(z2);
int i2 = i + 1;
if (i2 < cArr.length) {
if (cArr2[i] < cArr[i2]) {
z3 = true;
} else {
z3 = false;
}
Preconditions.d(z3);
}
i = i2;
}
}
@Override // com.google.common.base.CharMatcher, com.google.common.base.Predicate
public final /* bridge */ /* synthetic */ boolean apply(Object obj) {
return apply((Character) obj);
}
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
int binarySearch = Arrays.binarySearch(this.f, c2);
if (binarySearch >= 0) {
return true;
}
int i = (~binarySearch) - 1;
if (i >= 0 && c2 <= this.g[i]) {
return true;
}
return false;
}
public final String toString() {
return this.f12161c;
}
}
/* loaded from: classes3.dex */
public static final class SingleWidth extends RangesMatcher {
static {
new RangesMatcher("CharMatcher.singleWidth()", "\u0000־א׳\u0600ݐ\u0e00Ḁ℀ﭐﹰ。".toCharArray(), "ӹ־ת״ۿݿ\u0e7f₯℺﷿\ufeffᅵ".toCharArray());
}
}
@VisibleForTesting
/* loaded from: classes3.dex */
public static final class Whitespace extends NamedFastMatcher {
public static final int f = Integer.numberOfLeadingZeros(31);
public static final CharMatcher g = new NamedFastMatcher("CharMatcher.whitespace()");
@Override // com.google.common.base.CharMatcher
public final boolean m(char c2) {
if ("\u2002\u3000\r\u0085\u200a\u2005\u2000\u3000\u2029\u000b\u3000\u2008\u2003\u205f\u3000\u1680\t \u2006\u2001 \f\u2009\u3000\u2004\u3000\u3000\u2028\n\u3000".charAt((48906 * c2) >>> f) == c2) {
return true;
}
return false;
}
}
public static String a(char c2) {
char[] cArr = new char[6];
cArr[0] = '\\';
cArr[1] = 'u';
cArr[2] = 0;
cArr[3] = 0;
cArr[4] = 0;
cArr[5] = 0;
for (int i = 0; i < 4; i++) {
cArr[5 - i] = "0123456789ABCDEF".charAt(c2 & 15);
c2 = (char) (c2 >> 4);
}
return String.copyValueOf(cArr);
}
public static CharMatcher c(String str) {
int length = str.length();
if (length != 0) {
if (length != 1) {
if (length != 2) {
return new AnyOf(str);
}
return new IsEither(str.charAt(0), str.charAt(1));
}
return new Is(str.charAt(0));
}
return None.f;
}
public static CharMatcher e() {
return Ascii.f;
}
public static CharMatcher g(char c2, char c3) {
return new InRange(c2, c3);
}
public static CharMatcher j(char c2) {
return new Is(c2);
}
public static CharMatcher k() {
return new IsNot(' ');
}
public static CharMatcher l() {
return JavaIsoControl.f;
}
public CharMatcher b(CharMatcher charMatcher) {
return new And(this, charMatcher);
}
@Override // com.google.common.base.Predicate
/* renamed from: d, reason: merged with bridge method [inline-methods] */
public final boolean apply(Character ch) {
return m(ch.charValue());
}
public int f(CharSequence charSequence) {
int i = 0;
for (int i2 = 0; i2 < charSequence.length(); i2++) {
if (m(charSequence.charAt(i2))) {
i++;
}
}
return i;
}
public int h(int i, CharSequence charSequence) {
int length = charSequence.length();
Preconditions.i(i, length);
while (i < length) {
if (m(charSequence.charAt(i))) {
return i;
}
i++;
}
return -1;
}
public int i(CharSequence charSequence) {
return h(0, charSequence);
}
public abstract boolean m(char c2);
public boolean n(CharSequence charSequence) {
for (int length = charSequence.length() - 1; length >= 0; length--) {
if (!m(charSequence.charAt(length))) {
return false;
}
}
return true;
}
public boolean o(CharSequence charSequence) {
if (i(charSequence) == -1) {
return true;
}
return false;
}
public CharMatcher p() {
return new Negated(this);
}
public CharMatcher q(CharMatcher charMatcher) {
return new Or(this, charMatcher);
}
}