Commit 6110cf8f authored by Him188's avatar Him188

Remove `mirai-debug`

parent 9ea6b289
plugins {
id("application")
id("org.openjfx.javafxplugin") version "0.0.8"
kotlin("jvm")
java
id("kotlinx-serialization")
}
javafx {
version = "11"
modules = listOf("javafx.controls")
//mainClassName = "Application"
}
application {
mainClassName = "Application"
}
val kotlinVersion: String by rootProject.ext
val atomicFuVersion: String by rootProject.ext
val coroutinesVersion: String by rootProject.ext
val kotlinXIoVersion: String by rootProject.ext
val coroutinesIoVersion: String by rootProject.ext
val serializationVersion: String by rootProject.ext
val klockVersion: String by rootProject.ext
val ktorVersion: String by rootProject.ext
kotlin {
sourceSets {
all {
languageSettings.enableLanguageFeature("InlineClasses")
languageSettings.useExperimentalAnnotation("kotlin.Experimental")
}
}
}
fun kotlinx(id: String, version: String) = "org.jetbrains.kotlinx:kotlinx-$id:$version"
fun ktor(id: String, version: String) = "io.ktor:ktor-$id:$version"
dependencies {
runtimeOnly(files("../mirai-core/build/classes/kotlin/jvm/main")) // IDE bug
runtimeOnly(files("../mirai-core-qqandroid/build/classes/kotlin/jvm/main")) // IDE bug
implementation(project(":mirai-core-qqandroid"))
// runtimeOnly(files("../mirai-core/build/classes/kotlin/jvm/main")) // classpath is not added correctly by IDE
implementation("org.bouncycastle:bcprov-jdk15on:1.64")
implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion")
implementation("org.pcap4j:pcap4j-distribution:1.8.2")
implementation("no.tornado:tornadofx:1.7.17")
implementation(group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-javafx", version = "1.3.2")
implementation(kotlin("stdlib", kotlinVersion))
implementation("org.jetbrains.kotlinx:atomicfu:$atomicFuVersion")
implementation(kotlinx("io-jvm", kotlinXIoVersion))
implementation(kotlinx("io", kotlinXIoVersion))
implementation(kotlinx("coroutines-io", coroutinesIoVersion))
implementation(kotlinx("coroutines-core", coroutinesVersion))
implementation(kotlinx("serialization-runtime", serializationVersion))
implementation(ktor("http-cio", ktorVersion))
implementation(ktor("http", ktorVersion))
implementation(ktor("client-core-jvm", ktorVersion))
implementation(ktor("client-cio", ktorVersion))
implementation(ktor("client-core", ktorVersion))
implementation(ktor("network", ktorVersion))
testImplementation(kotlin("test-annotations-common"))
testImplementation(kotlin("test"))
testImplementation(kotlin("test-junit"))
testImplementation(kotlin("script-runtime"))
}
\ No newline at end of file
package japttest;
@SuppressWarnings("unused")
public class SuspendTest {
public static void main(String[] args) {
// TODO: 2019/12/6 Kotlin or IDE bug here
// Uncomment the following line.
// boolean bool = JaptTestKt.getLoginResult() == LoginResult.YOU_CAN_WRITE_ANY_THING;
System.out.println("Hello world");
}
}
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
@file:Suppress("UNUSED_VARIABLE")
import net.mamoe.mirai.utils.io.encodeToString
import net.mamoe.mirai.utils.io.hexToBytes
import net.mamoe.mirai.utils.io.toUHexString
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.util.*
import java.util.zip.GZIPInputStream
fun main() {
val short: Short = 0x8b1f.toShort()
// 7字节相同| |18字节向东
val bytes =
"AA 02 56 30 01 3A 40 53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64 9A 01 0F 80 01 01 C8 01 00 F0 01 00 F8 01 00 90 02 00"
.hexToBytes()
println(bytes.encodeToString())
val string = bytes.encodeToString()
// println("53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64".hexToBytes().encodeToString())
println("53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64"
.hexToBytes().unbase64().encodeToString()
)
println("53 4B 4B 2F 6F 59 33 42 39 2F 68 56 54 45 4B 65 6A 5A 39 35 45 4D 7A 68 5A 2F 6F 4A 42 79 35 36 61 6F 50 59 32 6E 51 49 77 41 67 37 47 51 33 34 65 72 43 4C 41 72 50 4B 56 39 35 43 76 65 34 64"
.hexToBytes().unbase64().toUHexString())
//base64解密结果 48 A2 BF A1 8D C1 F7 F8 55 4C 42 9E 8D 9F 79 10 CC E1 67 FA 09 07 2E 7A 6A 83 D8 DA 74 08 C0 08 3B 19 0D F8 7A B0 8B 02 B3 CA 57 DE 42 BD EE 1D
println()
println()
println(Base64.getEncoder().encodeToString(".".repeat(1000).toByteArray()))
// 01 78
val data2 =
"9C CD 92 BB 4E C3 30 14 86 77 9E C2 32 23 4A 73 69 D3 76 48 52 25 25 BD 48 84 56 54 15 97 05 85 C4 09 2E B9 A8 4E D2 92 6E DD 10 0C 88 81 0D 84 90 60 40 42 C0 C4 D6 C7 69 E8 63 E0 94 22 46 46 F8 2D 59 F2 B1 7F 9F E3 EF 58 AA 9D FA 1E 18 21 12 E1 30 90 21 5F E0 20 40 81 15 DA 38 70 65 98 C4 0E 53 85 35 65 0D 50 49 7E E4 82 23 82 91 23 C3 C2 3F 17 04 FE A1 83 3D B4 6D FA 48 86 42 45 2F F3 82 58 64 CA A2 2E 32 25 AD 51 66 54 AD 21 32 AA AA AB 1C 5F 15 04 AE 5E F9 76 F4 F0 84 3A 28 05 D3 8A 97 48 46 18 8D 8D C4 8B B1 11 B9 10 38 9E 49 B9 14 21 88 10 19 61 0B B5 37 E9 4A CC CD 04 45 D8 96 E1 38 ED B7 BA 9D 81 53 2F A5 7B A1 A8 B1 29 6E 69 EE C4 68 75 DB FE 46 C7 76 3B 27 BA 67 F4 93 DD 83 DE 7E 33 16 06 CD B2 C6 0F 35 42 D8 52 63 C7 DE 1A 0E 86 1A 04 0A 90 70 8C 7C E0 99 69 98 C4 B4 27 90 46 62 1C 7B 48 01 7F CD F5 37 01 89 5D 55 0A A4 63 A2 48 2C 9D 56 C5 03 2B F4 42 22 C3 F5 2A 97 0F FA A8 EC EE F1 E3 E6 82 CF 6E EF 17 B3 E7 F9 E5 55 F6 7E 96 4D 5F C1 CF 1D 12 9B 83 50 A4 28 4C 88 85 40 B0 6C E6 62 7A 3E 7F 78 5A BC BC CD 67 D7 90 66 F8 DA CC 0F D3 FF A9 7C 02 73 51 C1 65".replace(
" ",
" "
)
.hexToBytes()
println(data2.size)
println(data2.unbase64().toUHexString())
}
fun ByteArray.unbase64() = Base64.getDecoder().decode(this)
fun ByteArray.ungzip(): ByteArray {
val out = ByteArrayOutputStream()
val `in` = ByteArrayInputStream(this)
val ungzip = GZIPInputStream(`in`)
val buffer = ByteArray(256)
var n: Int
while (ungzip.read(buffer).also { n = it } >= 0) {
out.write(buffer, 0, n)
}
return out.toByteArray()
}
\ No newline at end of file
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
@file:Suppress("EXPERIMENTAL_API_USAGE")
import javafx.geometry.Pos
import javafx.scene.control.TextArea
import javafx.scene.control.TextField
import javafx.scene.layout.Region
import javafx.scene.paint.Color
import javafx.scene.text.FontWeight
import kotlinx.coroutines.*
import kotlinx.io.core.readUByte
import kotlinx.io.core.readUInt
import kotlinx.io.core.readUShort
import net.mamoe.mirai.utils.io.encodeToString
import net.mamoe.mirai.utils.io.hexToBytes
import net.mamoe.mirai.utils.io.read
import net.mamoe.mirai.utils.io.readUVarInt
import tornadofx.*
import java.awt.Toolkit
import java.awt.datatransfer.DataFlavor
/**
* How to run:
*
* `gradle :mirai-debug:run`
*/
class Application : App(HexDebuggerGui::class, Styles::class)
class Styles : Stylesheet() {
companion object {
// Define css classes
val heading by cssclass()
// Define colors
val mainColor = c("#bdbd22")
}
init {
heading {
textFill = mainColor
fontSize = 20.px
fontWeight = FontWeight.BOLD
}
button {
padding = box(vertical = 5.px, horizontal = 15.px)
fontWeight = FontWeight.BOLD
fontSize = 16.px
}
label {
padding = box(vertical = 5.px, horizontal = 15.px)
fontSize = 16.px
}
textField {
padding = box(vertical = 5.px, horizontal = 15.px)
}
textArea {
fontSize = 18.px
}
val flat = mixin {
backgroundInsets += box(0.px)
borderColor += box(Color.DARKGRAY)
}
s(button, textInput) {
+flat
}
}
}
class HexDebuggerGui : View("Mirai Hex Debugger") {
private lateinit var input: TextArea
private lateinit var outSize: TextField
private lateinit var outUVarInt: TextField
private lateinit var outShort: TextField
private lateinit var outUInt: TextField
private lateinit var outString: TextArea
private lateinit var outBits: TextField
private val clip = Toolkit.getDefaultToolkit().systemClipboard
private val clipboardContent: String?
get() {
val trans = clip.getContents(null)
if (trans?.isDataFlavorSupported(DataFlavor.stringFlavor) == true) {
return try {
trans.getTransferData(DataFlavor.stringFlavor) as String
} catch (e: Exception) {
e.printStackTrace()
null
}
}
return null
}
init {
GlobalScope.launch {
var last = clipboardContent
while (true) {
delay(100)
val current = try {
clipboardContent
} catch (e: Exception) {
e.printStackTrace()
null
}
try {
if (current != last) {
withContext(Dispatchers.Main) {
input.text = current
updateOutputs(
current?.lineSequence()
?.map { it.substringBefore("//") }
?.joinToString(" ")
.toString()
.replace("UVarInt", "", ignoreCase = true)
.replace("[", "")
.replace("]", "")
.replace("(", "")
.replace(")", "")
.replace(" ", " ")
.replace(" ", " ")
.replace(" ", " ")
.replace("_", "")
.replace(",", "")
.replace("`", "")
.replace("\"", "")
.replace("'", "")
.replace("*", "")
.replace("\\", "")
.replace("/", "")
.replace("-", "")
)
}
}
} finally {
last = current
}
}
}
}
private fun updateOutputs(value: String) {
outUVarInt.text = runOrNull {
value.hexToBytes().read {
readUVarInt().toString()
}
}
outShort.text = runOrNull {
value.hexToBytes().read {
readShort().toString()
}
}
outUInt.text = runOrNull {
value.hexToBytes().read {
readUInt().toString()
}
}
outSize.text = runOrNull {
value.hexToBytes().size.toString()
}
outBits.text = runOrNull {
value.hexToBytes().read {
when (remaining.toInt()) {
0 -> null
1 -> readUByte().toString(2)
2 -> readUShort().toString(2)
4 -> readUInt().toString(2)
else -> ""
}
}
}
outString.text = runOrNull {
value.hexToBytes().encodeToString()
}
}
override val root = hbox {
//prefWidth = 735.0
minHeight = 300.0
prefHeight = minHeight
input = textarea {
promptText = "Input"
paddingVertical = 10
prefWidth = 150.0
minWidth = 100.0
//maxWidth = 150.0
fitToHeight(this@hbox)
}
vbox(10) {
label(" => ") {
alignment = Pos.CENTER
spacing = 10.0
}
button("_") {
paddingAll = 0.0
setOnMouseClicked {
if (primaryStage.isAlwaysOnTop) {
primaryStage.isAlwaysOnTop = false
text = "_"
} else {
primaryStage.isAlwaysOnTop = true
text = "↑"
}
}
}
alignment = Pos.CENTER
fitToHeight(this@hbox)
}
vbox(10) {
paddingTop = 10
alignment = Pos.TOP_RIGHT
label("size")
label("UVarInt")
label("short")
label("uint")
label("bits")
label("string")
children.filterIsInstance<Region>().forEach {
it.fitToParentWidth()
}
}
vbox(20) {
alignment = Pos.CENTER_RIGHT
outSize = textfield {
promptText = "Size"
isEditable = false
}
outUVarInt = textfield {
promptText = "UVarInt"
isEditable = false
}
outShort = textfield {
promptText = "Short"
isEditable = false
}
outUInt = textfield {
promptText = "UInt"
isEditable = false
}
outBits = textfield {
promptText = "Bits"
isEditable = false
}
outString = textarea {
promptText = "String"
isEditable = false
maxWidth = 100.0
minHeight = 30.0
}
children.filterIsInstance<Region>().forEach {
it.fitToParentWidth()
}
}
input.textProperty().onChange {
if (it == null) {
return@onChange
}
updateOutputs(it)
}
}
}
private inline fun <T> runOrNull(block: () -> T?): T? {
return try {
block()
} catch (e: Exception) {
null
}
}
\ No newline at end of file
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
@file:Suppress("ObjectPropertyName", "MayBeConstant", "NonAsciiCharacters", "SpellCheckingInspection", "unused", "EXPERIMENTAL_UNSIGNED_LITERALS")
package hex
import kotlinx.io.core.toByteArray
import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.io.hexToBytes
import net.mamoe.mirai.utils.io.read
import net.mamoe.mirai.utils.io.readUVarInt
import net.mamoe.mirai.utils.io.toUHexString
import kotlin.math.max
import kotlin.reflect.KProperty0
/**
* 匹配已知 hex 常量并格式化后打印到控制台.
*
* 低效率, 仅调试使用.
*/
internal fun String.printColorize(ignoreUntilFirstConst: Boolean): String = with(HexComparator) { colorize(ignoreUntilFirstConst) }
/**
* 比较两个 hex 并格式化后打印到控制台.
*
* 低效率, 仅调试使用.
*/
@MiraiInternalAPI
fun printCompareHex(hex1s: String, hex2s: String): String = with(HexComparator) {
compare(
hex1s.toUpperCase(),
hex2s.toUpperCase()
)
}
data class NamedHexElement(
val name: String,
val value: String
)
/**
* 初始化用于匹配的 Hex 列表
*/
private fun LinkedHashSet<NamedHexElement>.initConstFileds() {
listOf(
TestConsts,
//TIMProtocol,
PacketIds
).forEach { obj ->
obj::class.members.filterIsInstance<KProperty0<*>>().forEach { property ->
property.get()?.let { add(NamedHexElement(property.name, it.toString())) }
}
}
}
private object TestConsts {
val NIU_BI = "牛逼".toByteArray().toUHexString()
val _1994701021 = 1994701021u.toUHexString(" ")
val _1040400290 = 1040400290u.toUHexString(" ")
val _580266363 = 580266363u.toUHexString(" ")
val _761025446 = 761025446u.toUHexString()
val _1040400290_ = "3E 03 3F A2"
val _1994701021_ = "76 E4 B8 DD"
val _jiahua_ = "B1 89 BE 09"
val _Him188moe_ = "Him188moe".toByteArray().toUHexString()
val 发图片2 = "发图片2".toByteArray().toUHexString()
val 发图片群 = "发图片群".toByteArray().toUHexString()
val 发图片 = "发图片".toByteArray().toUHexString()
val 群 = "群".toByteArray().toUHexString()
val 你好 = "你好".toByteArray().toUHexString()
val MESSAGE_TAIL_10404 =
"0E 00 07 01 00 04 00 00 00 09 19 00 18 01 00 15 AA 02 12 9A 01 0F 80 01 01 C8 01 00 F0 01 00 F8 01 00 90 02 00"
.replace(" ", " ")
val FONT_10404 = "E5 BE AE E8 BD AF E9 9B 85 E9 BB 91"
val varint580266363 = "FB D2 D8 94 02"
val varint1040400290 = "A2 FF 8C F0 03"
val varint1994701021 = "DD F1 92 B7 07"
val varint761025446 = 761025446u.toUHexString().hexToBytes().read { readUVarInt() }.toUHexString()
}
@Suppress("SpellCheckingInspection")
private object PacketIds {
val heartbeat = "00 58"
val friendmsgsend = "00 CD"
val friendmsgevent = "00 CE"
val groupmsg = "00 02"
}
/**
* Hex 比较器, 并着色已知常量
*
* This could be used to check packet encoding..
* but better to run under UNIX
*
* @author NaturalHG
* @author Him188moe
*/
private object HexComparator {
private val RED = "\u001b[31m"
private val GREEN = "\u001b[33m"
private val UNKNOWN_COLOR = "\u001b[30m"
private val BLUE = "\u001b[34m"
@Suppress("unused")
private class ConstMatcher constructor(hex: String) {
private val matches = linkedSetOf<Match>()
fun getMatchedConstName(hexNumber: Int): String? {
for (match in this.matches) {
if (match.range.contains(hexNumber)) {
return match.constName
}
}
return null
}
private class Match internal constructor(val range: IntRange, val constName: String)
init {
CONST_FIELDS.forEach { (name, value) ->
for (match in match(hex, value)) {
matches.add(Match(match, name))
}
}
}
companion object {
val CONST_FIELDS: MutableSet<NamedHexElement> = linkedSetOf<NamedHexElement>().apply { initConstFileds() }
}
private fun match(hex: String, value: String): Set<IntRange> {
val constValue: String
try {
constValue = value.trim { it <= ' ' }
if (constValue.length / 3 <= 3) {//Minimum numbers of const hex bytes
return linkedSetOf()
}
} catch (ignored: ClassCastException) {
return linkedSetOf()
}
return mutableSetOf<IntRange>().apply {
var index = -1
index = hex.indexOf(constValue, index + 1)
while (index != -1) {
add(IntRange(index / 3, (index + constValue.length) / 3))
index = hex.indexOf(constValue, index + 1)
}
}
}
}
private fun buildConstNameChain(length: Int, constMatcher: ConstMatcher, constNameBuilder: StringBuilder) {
//System.out.println(constMatcher.matches);
var i = 0
while (i < length) {
constNameBuilder.append(" ")
val match = constMatcher.getMatchedConstName(i / 4)
if (match != null) {
var appendedNameLength = match.length
constNameBuilder.append(match)
while (match == constMatcher.getMatchedConstName(i++ / 4)) {
if (appendedNameLength-- < 0) {
constNameBuilder.append(" ")
}
}
constNameBuilder.append(" ".repeat(match.length % 4))
}
i++
}
}
fun compare(hex1s: String, hex2s: String): String {
val builder = StringBuilder()
val hex1 = hex1s.trim { it <= ' ' }.replace("\n", "").split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
val hex2 = hex2s.trim { it <= ' ' }.replace("\n", "").split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
val constMatcher1 = ConstMatcher(hex1s)
val constMatcher2 = ConstMatcher(hex2s)
if (hex1.size == hex2.size) {
builder.append(GREEN).append("长度一致:").append(hex1.size)
} else {
builder.append(RED).append("长度不一致").append(hex1.size).append("/").append(hex2.size)
}
val numberLine = StringBuilder()
val hex1ConstName = StringBuilder()
val hex1b = StringBuilder()
val hex2b = StringBuilder()
val hex2ConstName = StringBuilder()
var dif = 0
val length = max(hex1.size, hex2.size) * 4
buildConstNameChain(length, constMatcher1, hex1ConstName)
buildConstNameChain(length, constMatcher2, hex2ConstName)
for (i in 0 until max(hex1.size, hex2.size)) {
var h1: String? = null
var h2: String? = null
var isDif = false
if (hex1.size <= i) {
h1 = RED + "__"
isDif = true
} else {
val matchedConstName = constMatcher1.getMatchedConstName(i)
if (matchedConstName != null) {
h1 = BLUE + hex1[i]
}
}
if (hex2.size <= i) {
h2 = RED + "__"
isDif = true
} else {
val matchedConstName = constMatcher2.getMatchedConstName(i)
if (matchedConstName != null) {
h2 = BLUE + hex2[i]
}
}
if (h1 == null && h2 == null) {
h1 = hex1[i]
h2 = hex2[i]
if (h1 == h2) {
h1 = GREEN + h1
h2 = GREEN + h2
} else {
h1 = RED + h1
h2 = RED + h2
isDif = true
}
} else {
if (h1 == null) {
h1 = RED + hex1[i]
}
if (h2 == null) {
h2 = RED + hex2[i]
}
}
numberLine.append(UNKNOWN_COLOR).append(getFixedNumber(i)).append(" ")
hex1b.append(" ").append(h1).append(" ")
hex2b.append(" ").append(h2).append(" ")
if (isDif) {
++dif
}
//doConstReplacement(hex1b);
//doConstReplacement(hex2b);
}
return builder.append(" ").append(dif).append(" 个不同").append("\n")
.append(numberLine).append("\n")
.append(hex1ConstName).append("\n")
.append(hex1b).append("\n")
.append(hex2b).append("\n")
.append(hex2ConstName).append("\n")
.toString()
}
fun String.colorize(ignoreUntilFirstConst: Boolean = false): String {
val builder = StringBuilder()
val hex = trim { it <= ' ' }.replace("\n", "").split(" ").dropLastWhile { it.isEmpty() }.toTypedArray()
val constMatcher1 = ConstMatcher(this)
val numberLine = StringBuilder()
val hex1ConstName = StringBuilder()
val hex1b = StringBuilder()
buildConstNameChain(length, constMatcher1, hex1ConstName)
var firstConst: String? = null
var constNameOffset = 0//已经因为还没到第一个const跳过了几个char
for (i in hex.indices) {
var h1: String? = null
val matchedConstName = constMatcher1.getMatchedConstName(i)
if (matchedConstName != null) {
firstConst = firstConst ?: matchedConstName
h1 = BLUE + hex[i]
}
if (!ignoreUntilFirstConst || firstConst != null) {//有过任意一个 Const
if (h1 == null) {
h1 = GREEN + hex[i]
}
numberLine.append(UNKNOWN_COLOR).append(getFixedNumber(i)).append(" ")
hex1b.append(" ").append(h1).append(" ")
} else {
constNameOffset++
}
}
return builder.append("\n")
.append(numberLine).append("\n")
.append(if (firstConst == null) hex1ConstName else {
with(hex1ConstName) {
val index = indexOf(firstConst)
if (index == -1) toString() else " " + substring(index, length)
}
}).append("\n")
.append(hex1b).append("\n")
.toString()
}
private fun getFixedNumber(number: Int): String {
if (number < 10) {
return "00$number"
}
return if (number < 100) {
"0$number"
} else number.toString()
}
}
\ No newline at end of file
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
package test
import kotlin.reflect.KProperty
data class Info(
var value: Int
) {
operator fun getValue(c: C, property: KProperty<*>): Int {
return value
}
}
class C(var info: Info) {
val value by info
}
fun main() {
val info = Info(1)
val c = C(info)
println(c.value) //1
info.value = 2
println(c.value) //2
c.info = Info(3)
println(c.value) //2
}
\ No newline at end of file
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
package test
@Suppress("RedundantSuspendModifier")
suspend fun suspendPrintln(arg: String) = println(arg)
suspend fun main() {
suspendPrintln("Hello")
suspendPrintln(" World!")
}
\ No newline at end of file
package jce.jce;
import java.io.UnsupportedEncodingException;
public class HexUtil {
private static final char[] digits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
public static final byte[] emptybytes = new byte[0];
public static String byte2HexStr(byte var0) {
char var1 = digits[var0 & 15];
var0 = (byte) (var0 >>> 4);
return new String(new char[]{digits[var0 & 15], var1});
}
public static String bytes2HexStr(byte[] var0) {
if (var0 != null && var0.length != 0) {
char[] var3 = new char[var0.length * 2];
for (int var1 = 0; var1 < var0.length; ++var1) {
byte var2 = var0[var1];
var3[var1 * 2 + 1] = digits[var2 & 15];
var2 = (byte) (var2 >>> 4);
var3[var1 * 2 + 0] = digits[var2 & 15];
}
return new String(var3);
} else {
return null;
}
}
public static byte char2Byte(char var0) {
if (var0 >= '0' && var0 <= '9') {
return (byte) (var0 - 48);
} else if (var0 >= 'a' && var0 <= 'f') {
return (byte) (var0 - 97 + 10);
} else {
return var0 >= 'A' && var0 <= 'F' ? (byte) (var0 - 65 + 10) : 0;
}
}
public static byte hexStr2Byte(String var0) {
byte var2 = 0;
byte var1 = var2;
if (var0 != null) {
var1 = var2;
if (var0.length() == 1) {
var1 = char2Byte(var0.charAt(0));
}
}
return var1;
}
public static byte[] hexStr2Bytes(String var0) {
if (var0 != null && !var0.equals("")) {
byte[] var4 = new byte[var0.length() / 2];
for (int var3 = 0; var3 < var4.length; ++var3) {
char var1 = var0.charAt(var3 * 2);
char var2 = var0.charAt(var3 * 2 + 1);
var4[var3] = (byte) (char2Byte(var1) * 16 + char2Byte(var2));
}
return var4;
} else {
return emptybytes;
}
}
public static void main(String[] var0) {
try {
byte[] var2 = "Hello WebSocket World?".getBytes("gbk");
System.out.println(bytes2HexStr(var2));
} catch (UnsupportedEncodingException var1) {
var1.printStackTrace();
}
}
}
package jce.jce;
public class JceDecodeException extends RuntimeException {
public JceDecodeException(String var1) {
super(var1);
}
}
package jce.jce;
public class JceEncodeException extends RuntimeException {
public JceEncodeException(String var1) {
super(var1);
}
}
package jce.jce;
public class JceInputStream$HeadData {
public int tag;
public byte type;
public void clear() {
this.type = 0;
this.tag = 0;
}
}
package jce.jce;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Array;
import java.nio.BufferUnderflowException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public final class JceInputStream {
// $FF: renamed from: bs java.nio.ByteBuffer
private ByteBuffer buffer;
protected String sServerEncoding = "GBK";
public JceInputStream() {
}
public JceInputStream(ByteBuffer var1) {
this.buffer = var1;
}
public JceInputStream(byte[] var1) {
this.buffer = ByteBuffer.wrap(var1);
}
public JceInputStream(byte[] var1, int var2) {
this.buffer = ByteBuffer.wrap(var1);
this.buffer.position(var2);
}
public static void main(String[] var0) {
}
private int peakHead(JceInputStream$HeadData var1) {
return readHead(var1, this.buffer.duplicate());
}
private <T> T[] readArrayImpl(T var1, int var2, boolean var3) {
Object[] var7;
if (this.skipToTag(var2)) {
JceInputStream$HeadData var5 = new JceInputStream$HeadData();
this.readHead(var5);
if (var5.type == 9) {
int var4 = this.read(0, 0, true);
if (var4 < 0) {
throw new JceDecodeException("size invalid: " + var4);
} else {
Object[] var6 = (Object[]) Array.newInstance(var1.getClass(), var4);
var2 = 0;
while (true) {
var7 = var6;
if (var2 >= var4) {
return (T[]) var7;
}
var6[var2] = this.read(var1, 0, true);
++var2;
}
}
}
throw new JceDecodeException("type mismatch.");
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
var7 = null;
return (T[]) var7;
}
}
public static int readHead(JceInputStream$HeadData var0, ByteBuffer var1) {
byte var2 = var1.get();
var0.type = (byte) (var2 & 15);
var0.tag = (var2 & 240) >> 4;
if (var0.tag == 15) {
var0.tag = var1.get() & 255;
return 2;
} else {
return 1;
}
}
private <K, V> Map<K, V> readMap(Map<K, V> var1, Map<K, V> var2, int var3, boolean var4) {
Map<K, V> var8;
if (var2 != null && !var2.isEmpty()) {
Entry<K, V> var9 = var2.entrySet().iterator().next();
K var6 = var9.getKey();
V var7 = var9.getValue();
if (this.skipToTag(var3)) {
JceInputStream$HeadData var10 = new JceInputStream$HeadData();
this.readHead(var10);
if (var10.type == 8) {
int var5 = this.read(0, 0, true);
if (var5 < 0) {
throw new JceDecodeException("size invalid: " + var5);
}
var3 = 0;
while (true) {
var8 = var1;
if (var3 >= var5) {
return var8;
}
var1.put((K) this.read(var6, 0, true), (V) this.read(var7, 1, true));
++var3;
}
}
throw new JceDecodeException("type mismatch.");
} else {
var8 = var1;
if (var4) {
throw new JceDecodeException("require field not exist.");
}
}
} else {
var8 = new HashMap<>();
}
return var8;
}
private void skip(int var1) {
this.buffer.position(this.buffer.position() + var1);
}
private void skipField() {
JceInputStream$HeadData var1 = new JceInputStream$HeadData();
this.readHead(var1);
this.skipField(var1.type);
}
private void skipField(byte var1) {
byte var3 = 0;
byte var2 = 0;
int var5;
switch (var1) {
case 0:
this.skip(1);
break;
case 1:
this.skip(2);
return;
case 2:
this.skip(4);
return;
case 3:
this.skip(8);
return;
case 4:
this.skip(4);
return;
case 5:
this.skip(8);
return;
case 6:
byte var7 = this.buffer.get();
var5 = var7;
if (var7 < 0) {
var5 = var7 + 256;
}
this.skip(var5);
return;
case 7:
this.skip(this.buffer.getInt());
return;
case 8:
int var8 = this.read(0, 0, true);
for (var5 = var2; var5 < var8 * 2; ++var5) {
this.skipField();
}
return;
case 9:
int var6 = this.read(0, 0, true);
for (var5 = var3; var5 < var6; ++var5) {
this.skipField();
}
return;
case 10:
this.skipToStructEnd();
return;
case 11:
case 12:
break;
case 13:
JceInputStream$HeadData var4 = new JceInputStream$HeadData();
this.readHead(var4);
if (var4.type != 0) {
throw new JceDecodeException("skipField with invalid type, type value: " + var1 + ", " + var4.type);
}
this.skip(this.read(0, 0, true));
return;
default:
throw new JceDecodeException("invalid type.");
}
}
public JceStruct directRead(JceStruct var1, int var2, boolean var3) {
JceInputStream$HeadData var4 = null;
if (this.skipToTag(var2)) {
try {
var1 = var1.newInit();
} catch (Exception var5) {
throw new JceDecodeException(var5.getMessage());
}
var4 = new JceInputStream$HeadData();
this.readHead(var4);
if (var4.type != 10) {
throw new JceDecodeException("type mismatch.");
}
var1.readFrom(this);
this.skipToStructEnd();
} else {
var1 = null;
if (var3) {
throw new JceDecodeException("require field not exist.");
}
}
return var1;
}
public ByteBuffer getBs() {
return this.buffer;
}
public byte read(byte var1, int var2, boolean var3) {
if (this.skipToTag(var2)) {
JceInputStream$HeadData var4 = new JceInputStream$HeadData();
this.readHead(var4);
switch (var4.type) {
case 0:
return this.buffer.get();
case 12:
return 0;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public double read(double var1, int var3, boolean var4) {
if (this.skipToTag(var3)) {
JceInputStream$HeadData var5 = new JceInputStream$HeadData();
this.readHead(var5);
switch (var5.type) {
case 4:
return this.buffer.getFloat();
case 5:
return this.buffer.getDouble();
case 12:
return 0.0D;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (var4) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public float read(float var1, int var2, boolean var3) {
if (this.skipToTag(var2)) {
JceInputStream$HeadData var4 = new JceInputStream$HeadData();
this.readHead(var4);
switch (var4.type) {
case 4:
return this.buffer.getFloat();
case 12:
return 0.0F;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public int read(int var1, int var2, boolean var3) {
if (this.skipToTag(var2)) {
JceInputStream$HeadData var4 = new JceInputStream$HeadData();
this.readHead(var4);
switch (var4.type) {
case 0:
return this.buffer.get();
case 1:
return this.buffer.getShort();
case 2:
return this.buffer.getInt();
case 12:
return 0;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public long read(long var1, int var3, boolean var4) {
if (this.skipToTag(var3)) {
JceInputStream$HeadData var5 = new JceInputStream$HeadData();
this.readHead(var5);
switch (var5.type) {
case 0:
return this.buffer.get();
case 1:
return this.buffer.getShort();
case 2:
return this.buffer.getInt();
case 3:
return this.buffer.getLong();
case 12:
return 0L;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (var4) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public JceStruct read(JceStruct var1, int var2, boolean var3) {
JceInputStream$HeadData var4 = null;
if (this.skipToTag(var2)) {
try {
var1 = var1.getClass().getConstructor().newInstance();
} catch (Exception var5) {
throw new JceDecodeException(var5.getMessage());
}
System.out.println(var1.toString());
var4 = new JceInputStream$HeadData();
this.readHead(var4);
if (var4.type != 10) {
throw new JceDecodeException("type mismatch.");
}
var1.readFrom(this);
this.skipToStructEnd();
} else {
var1 = null;
if (var3) {
throw new JceDecodeException("require field not exist.");
}
}
return var1;
}
public <T> Object read(T var1, int var2, boolean var3) {
if (var1 instanceof Byte) {
return this.read((byte) 0, var2, var3);
} else if (var1 instanceof Boolean) {
return this.read(false, var2, var3);
} else if (var1 instanceof Short) {
return this.read((short) 0, var2, var3);
} else if (var1 instanceof Integer) {
return this.read(0, var2, var3);
} else if (var1 instanceof Long) {
return this.read(0L, var2, var3);
} else if (var1 instanceof Float) {
return this.read(0.0F, var2, var3);
} else if (var1 instanceof Double) {
return this.read(0.0D, var2, var3);
} else if (var1 instanceof String) {
return this.readString(var2, var3);
} else if (var1 instanceof Map) {
return this.readMap((Map) var1, var2, var3);
} else if (var1 instanceof List) {
return this.readArray((List) var1, var2, var3);
} else if (var1 instanceof JceStruct) {
return this.read((JceStruct) var1, var2, var3);
} else if (var1.getClass().isArray()) {
if (!(var1 instanceof byte[]) && !(var1 instanceof Byte[])) {
if (var1 instanceof boolean[]) {
return this.read((boolean[]) null, var2, var3);
} else if (var1 instanceof short[]) {
return this.read((short[]) null, var2, var3);
} else if (var1 instanceof int[]) {
return this.read((int[]) null, var2, var3);
} else if (var1 instanceof long[]) {
return this.read((long[]) null, var2, var3);
} else if (var1 instanceof float[]) {
return this.read((float[]) null, var2, var3);
} else {
return var1 instanceof double[] ? this.read((double[]) null, var2, var3) : this.readArray((Object[]) var1, var2, var3);
}
} else {
return this.read((byte[]) null, var2, var3);
}
} else {
throw new JceDecodeException("read object error: unsupport type.");
}
}
public String read(String var1, int var2, boolean var3) {
if (this.skipToTag(var2)) {
JceInputStream$HeadData var8 = new JceInputStream$HeadData();
this.readHead(var8);
String var5;
byte[] var9;
switch (var8.type) {
case 6:
byte var4 = this.buffer.get();
var2 = var4;
if (var4 < 0) {
var2 = var4 + 256;
}
var9 = new byte[var2];
this.buffer.get(var9);
try {
var5 = new String(var9, this.sServerEncoding);
return var5;
} catch (UnsupportedEncodingException var7) {
return new String(var9);
}
case 7:
var2 = this.buffer.getInt();
if (var2 <= 104857600 && var2 >= 0 && var2 <= this.buffer.capacity()) {
var9 = new byte[var2];
this.buffer.get(var9);
try {
var5 = new String(var9, this.sServerEncoding);
return var5;
} catch (UnsupportedEncodingException var6) {
return new String(var9);
}
}
throw new JceDecodeException("String too long: " + var2);
default:
throw new JceDecodeException("type mismatch.");
}
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public short read(short var1, int var2, boolean var3) {
if (this.skipToTag(var2)) {
JceInputStream$HeadData var4 = new JceInputStream$HeadData();
this.readHead(var4);
switch (var4.type) {
case 0:
return this.buffer.get();
case 1:
return this.buffer.getShort();
case 12:
return 0;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public boolean read(boolean var1, int var2, boolean var3) {
var1 = this.read((byte) 0, var2, var3) != 0;
return var1;
}
public byte[] read(byte[] var1, int var2, boolean var3) {
var1 = null;
if (this.skipToTag(var2)) {
JceInputStream$HeadData var6 = new JceInputStream$HeadData();
this.readHead(var6);
int var4;
switch (var6.type) {
case 9:
var4 = this.read(0, 0, true);
if (var4 >= 0 && var4 <= this.buffer.capacity()) {
byte[] var7 = new byte[var4];
var2 = 0;
while (true) {
var1 = var7;
if (var2 >= var4) {
return var1;
}
var7[var2] = this.read(var7[0], 0, true);
++var2;
}
}
throw new JceDecodeException("size invalid: " + var4);
case 13:
JceInputStream$HeadData var5 = new JceInputStream$HeadData();
this.readHead(var5);
if (var5.type != 0) {
throw new JceDecodeException("type mismatch, tag: " + var2 + ", type: " + var6.type + ", " + var5.type);
}
var4 = this.read(0, 0, true);
if (var4 < 0 || var4 > this.buffer.capacity()) {
throw new JceDecodeException("invalid size, tag: " + var2 + ", type: " + var6.type + ", " + var5.type + ", size: " + var4);
}
var1 = new byte[var4];
this.buffer.get(var1);
break;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (var3) {
throw new JceDecodeException("require field not exist.");
}
return var1;
}
public double[] read(double[] var1, int var2, boolean var3) {
var1 = null;
if (this.skipToTag(var2)) {
JceInputStream$HeadData var6 = new JceInputStream$HeadData();
this.readHead(var6);
if (var6.type == 9) {
int var4 = this.read(0, 0, true);
if (var4 < 0) {
throw new JceDecodeException("size invalid: " + var4);
} else {
double[] var5 = new double[var4];
var2 = 0;
while (true) {
var1 = var5;
if (var2 >= var4) {
return var1;
}
var5[var2] = this.read(var5[0], 0, true);
++var2;
}
}
}
throw new JceDecodeException("type mismatch.");
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public float[] read(float[] var1, int var2, boolean var3) {
var1 = null;
if (this.skipToTag(var2)) {
JceInputStream$HeadData var6 = new JceInputStream$HeadData();
this.readHead(var6);
if (var6.type == 9) {
int var4 = this.read(0, 0, true);
if (var4 < 0) {
throw new JceDecodeException("size invalid: " + var4);
} else {
float[] var5 = new float[var4];
var2 = 0;
while (true) {
var1 = var5;
if (var2 >= var4) {
return var1;
}
var5[var2] = this.read(var5[0], 0, true);
++var2;
}
}
}
throw new JceDecodeException("type mismatch.");
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public int[] read(int[] var1, int var2, boolean var3) {
var1 = null;
if (this.skipToTag(var2)) {
JceInputStream$HeadData var6 = new JceInputStream$HeadData();
this.readHead(var6);
if (var6.type == 9) {
int var4 = this.read(0, 0, true);
if (var4 < 0) {
throw new JceDecodeException("size invalid: " + var4);
} else {
int[] var5 = new int[var4];
var2 = 0;
while (true) {
var1 = var5;
if (var2 >= var4) {
return var1;
}
var5[var2] = this.read(var5[0], 0, true);
++var2;
}
}
}
throw new JceDecodeException("type mismatch.");
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public long[] read(long[] var1, int var2, boolean var3) {
var1 = null;
if (this.skipToTag(var2)) {
JceInputStream$HeadData var6 = new JceInputStream$HeadData();
this.readHead(var6);
if (var6.type == 9) {
int var4 = this.read(0, 0, true);
if (var4 < 0) {
throw new JceDecodeException("size invalid: " + var4);
} else {
long[] var5 = new long[var4];
var2 = 0;
while (true) {
var1 = var5;
if (var2 >= var4) {
return var1;
}
var5[var2] = this.read(var5[0], 0, true);
++var2;
}
}
}
throw new JceDecodeException("type mismatch.");
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public JceStruct[] read(JceStruct[] var1, int var2, boolean var3) {
return (JceStruct[]) this.readArray((Object[]) var1, var2, var3);
}
public String[] read(String[] var1, int var2, boolean var3) {
return (String[]) this.readArray((Object[]) var1, var2, var3);
}
public short[] read(short[] var1, int var2, boolean var3) {
var1 = null;
if (this.skipToTag(var2)) {
JceInputStream$HeadData var6 = new JceInputStream$HeadData();
this.readHead(var6);
if (var6.type == 9) {
int var4 = this.read(0, 0, true);
if (var4 < 0) {
throw new JceDecodeException("size invalid: " + var4);
} else {
short[] var5 = new short[var4];
var2 = 0;
while (true) {
var1 = var5;
if (var2 >= var4) {
return var1;
}
var5[var2] = this.read(var5[0], 0, true);
++var2;
}
}
}
throw new JceDecodeException("type mismatch.");
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public boolean[] read(boolean[] var1, int var2, boolean var3) {
var1 = null;
if (this.skipToTag(var2)) {
JceInputStream$HeadData var6 = new JceInputStream$HeadData();
this.readHead(var6);
if (var6.type == 9) {
int var4 = this.read(0, 0, true);
if (var4 < 0) {
throw new JceDecodeException("size invalid: " + var4);
} else {
boolean[] var5 = new boolean[var4];
var2 = 0;
while (true) {
var1 = var5;
if (var2 >= var4) {
return var1;
}
var5[var2] = this.read(var5[0], 0, true);
++var2;
}
}
}
throw new JceDecodeException("type mismatch.");
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public <T> List<T> readArray(List<T> var1, int var2, boolean var3) {
byte var4 = 0;
if (var1 != null && !var1.isEmpty()) {
Object[] var6 = this.readArrayImpl(var1.get(0), var2, var3);
if (var6 == null) {
return null;
} else {
ArrayList var5 = new ArrayList();
for (var2 = var4; var2 < var6.length; ++var2) {
var5.add(var6[var2]);
}
return var5;
}
} else {
return new ArrayList<>();
}
}
public <T> T[] readArray(T[] var1, int var2, boolean var3) {
if (var1 != null && var1.length != 0) {
return this.readArrayImpl(var1[0], var2, var3);
} else {
throw new JceDecodeException("unable to get type of key and value.");
}
}
public String readByteString(String var1, int var2, boolean var3) {
if (this.skipToTag(var2)) {
JceInputStream$HeadData var5 = new JceInputStream$HeadData();
this.readHead(var5);
byte[] var6;
switch (var5.type) {
case 6:
byte var4 = this.buffer.get();
var2 = var4;
if (var4 < 0) {
var2 = var4 + 256;
}
var6 = new byte[var2];
this.buffer.get(var6);
return HexUtil.bytes2HexStr(var6);
case 7:
var2 = this.buffer.getInt();
if (var2 <= 104857600 && var2 >= 0 && var2 <= this.buffer.capacity()) {
var6 = new byte[var2];
this.buffer.get(var6);
return HexUtil.bytes2HexStr(var6);
}
throw new JceDecodeException("String too long: " + var2);
default:
throw new JceDecodeException("type mismatch.");
}
} else if (var3) {
throw new JceDecodeException("require field not exist.");
} else {
return var1;
}
}
public void readHead(JceInputStream$HeadData var1) {
readHead(var1, this.buffer);
}
public List<java.io.Serializable> readList(int var1, boolean var2) {
ArrayList<java.io.Serializable> var6 = new ArrayList<java.io.Serializable>();
if (this.skipToTag(var1)) {
JceInputStream$HeadData var7 = new JceInputStream$HeadData();
this.readHead(var7);
if (var7.type == 9) {
int var5 = this.read(0, 0, true);
if (var5 < 0) {
throw new JceDecodeException("size invalid: " + var5);
}
var1 = 0;
for (; var1 < var5; ++var1) {
var7 = new JceInputStream$HeadData();
this.readHead(var7);
switch (var7.type) {
case 0:
this.skip(1);
break;
case 1:
this.skip(2);
break;
case 2:
this.skip(4);
break;
case 3:
this.skip(8);
break;
case 4:
this.skip(4);
break;
case 5:
this.skip(8);
break;
case 6:
byte var4 = this.buffer.get();
int var3 = var4;
if (var4 < 0) {
var3 = var4 + 256;
}
this.skip(var3);
break;
case 7:
this.skip(this.buffer.getInt());
case 8:
case 9:
break;
case 10:
try {
JceStruct var9 = (JceStruct) Class.forName(JceStruct.class.getName()).getConstructor().newInstance();
var9.readFrom(this);
this.skipToStructEnd();
var6.add(var9);
break;
} catch (Exception var8) {
var8.printStackTrace();
throw new JceDecodeException("type mismatch." + var8);
}
case 11:
default:
throw new JceDecodeException("type mismatch.");
case 12:
var6.add(0);
}
}
} else {
throw new JceDecodeException("type mismatch.");
}
} else if (var2) {
throw new JceDecodeException("require field not exist.");
}
return var6;
}
public <K, V> HashMap<K, V> readMap(Map<K, V> var1, int var2, boolean var3) {
return (HashMap<K, V>) this.readMap(new HashMap<K, V>(), var1, var2, var3);
}
public String readString(int var1, boolean var2) {
String var4 = null;
if (this.skipToTag(var1)) {
JceInputStream$HeadData var8 = new JceInputStream$HeadData();
this.readHead(var8);
switch (var8.type) {
case 6:
byte var3 = this.buffer.get();
var1 = var3;
if (var3 < 0) {
var1 = var3 + 256;
}
byte[] var10 = new byte[var1];
this.buffer.get(var10);
try {
var4 = new String(var10, this.sServerEncoding);
break;
} catch (UnsupportedEncodingException var7) {
return new String(var10);
}
case 7:
var1 = this.buffer.getInt();
if (var1 <= 104857600 && var1 >= 0 && var1 <= this.buffer.capacity()) {
byte[] var9 = new byte[var1];
this.buffer.get(var9);
try {
String var5 = new String(var9, this.sServerEncoding);
return var5;
} catch (UnsupportedEncodingException var6) {
return new String(var9);
}
}
throw new JceDecodeException("String too long: " + var1);
default:
throw new JceDecodeException("type mismatch.");
}
} else if (var2) {
throw new JceDecodeException("require field not exist.");
}
return var4;
}
public Map<String, String> readStringMap(int var1, boolean var2) {
HashMap<String, String> var4 = new HashMap<>();
if (this.skipToTag(var1)) {
JceInputStream$HeadData var5 = new JceInputStream$HeadData();
this.readHead(var5);
if (var5.type == 8) {
int var3 = this.read(0, 0, true);
if (var3 < 0) {
throw new JceDecodeException("size invalid: " + var3);
}
for (var1 = 0; var1 < var3; ++var1) {
var4.put(this.readString(0, true), this.readString(1, true));
}
} else {
throw new JceDecodeException("type mismatch.");
}
} else if (var2) {
throw new JceDecodeException("require field not exist.");
}
return var4;
}
public int setServerEncoding(String var1) {
this.sServerEncoding = var1;
return 0;
}
public void skipToStructEnd() {
JceInputStream$HeadData var1 = new JceInputStream$HeadData();
do {
this.readHead(var1);
this.skipField(var1.type);
} while (var1.type != 11);
}
public boolean skipToTag(int n2) {
try {
JceInputStream$HeadData jceInputStream$HeadData = new JceInputStream$HeadData();
do {
int n3 = this.peakHead(jceInputStream$HeadData);
if (jceInputStream$HeadData.type == 11) {
return false;
}
if (n2 <= jceInputStream$HeadData.tag) {
return n2 == jceInputStream$HeadData.tag;
}
this.skip(n3);
this.skipField(jceInputStream$HeadData.type);
} while (true);
} catch (JceDecodeException jceDecodeException) {
return false;
} catch (BufferUnderflowException bufferUnderflowException) {
// empty catch block
}
return false;
}
public void warp(byte[] var1) {
this.wrap(var1);
}
public void wrap(byte[] var1) {
this.buffer = ByteBuffer.wrap(var1);
}
}
package jce.jce;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class JceOutputStream {
// $FF: renamed from: bs java.nio.ByteBuffer
private ByteBuffer field_80728;
private OnIllegalArgumentException exceptionHandler;
protected String sServerEncoding;
public JceOutputStream() {
this(128);
}
public JceOutputStream(int var1) {
this.sServerEncoding = "GBK";
this.field_80728 = ByteBuffer.allocate(var1);
}
public JceOutputStream(ByteBuffer var1) {
this.sServerEncoding = "GBK";
this.field_80728 = var1;
}
public static void main(String[] var0) {
JceOutputStream var2 = new JceOutputStream();
var2.write(1311768467283714885L, 0);
ByteBuffer var1 = var2.getByteBuffer();
System.out.println(HexUtil.bytes2HexStr(var1.array()));
System.out.println(Arrays.toString(var2.toByteArray()));
}
private void writeArray(Object[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public ByteBuffer getByteBuffer() {
return this.field_80728;
}
public OnIllegalArgumentException getExceptionHandler() {
return this.exceptionHandler;
}
public void reserve(int var1) {
if (this.field_80728.remaining() < var1) {
int var2 = (this.field_80728.capacity() + var1) * 2;
ByteBuffer var3;
try {
var3 = ByteBuffer.allocate(var2);
var3.put(this.field_80728.array(), 0, this.field_80728.position());
} catch (IllegalArgumentException var4) {
if (this.exceptionHandler != null) {
this.exceptionHandler.onException(var4, this.field_80728, var1, var2);
}
throw var4;
}
this.field_80728 = var3;
}
}
public void setExceptionHandler(OnIllegalArgumentException var1) {
this.exceptionHandler = var1;
}
public int setServerEncoding(String var1) {
this.sServerEncoding = var1;
return 0;
}
public byte[] toByteArray() {
byte[] var1 = new byte[this.field_80728.position()];
System.arraycopy(this.field_80728.array(), 0, var1, 0, this.field_80728.position());
return var1;
}
public void write(byte var1, int var2) {
this.reserve(3);
if (var1 == 0) {
this.writeHead((byte) 12, var2);
} else {
this.writeHead((byte) 0, var2);
this.field_80728.put(var1);
}
}
public void write(double var1, int var3) {
this.reserve(10);
this.writeHead((byte) 5, var3);
this.field_80728.putDouble(var1);
}
public void write(float var1, int var2) {
this.reserve(6);
this.writeHead((byte) 4, var2);
this.field_80728.putFloat(var1);
}
public void write(int var1, int var2) {
this.reserve(6);
if (var1 >= -32768 && var1 <= 32767) {
this.write((short) var1, var2);
} else {
this.writeHead((byte) 2, var2);
this.field_80728.putInt(var1);
}
}
public void write(long var1, int id) {
this.reserve(10);
if (var1 >= -2147483648L && var1 <= 2147483647L) {
this.write((int) var1, id);
} else {
this.writeHead((byte) 3, id);
this.field_80728.putLong(var1);
}
}
public void write(JceStruct var1, int var2) {
this.reserve(2);
this.writeHead((byte) 10, var2);
var1.writeTo(this);
this.reserve(2);
this.writeHead((byte) 11, 0);
}
public void write(Boolean var1, int var2) {
this.write((boolean) var1, var2);
}
public void write(Byte var1, int var2) {
this.write((byte) var1, var2);
}
public void write(Double var1, int var2) {
this.write((double) var1, var2);
}
public void write(Float var1, int var2) {
this.write((float) var1, var2);
}
public void write(Integer var1, int var2) {
this.write((int) var1, var2);
}
public void write(Long var1, int var2) {
this.write((long) var1, var2);
}
public void write(Object var1, int var2) {
if (var1 instanceof Byte) {
this.write((Byte) var1, var2);
} else if (var1 instanceof Boolean) {
this.write((Boolean) var1, var2);
} else if (var1 instanceof Short) {
this.write((Short) var1, var2);
} else if (var1 instanceof Integer) {
this.write((Integer) var1, var2);
} else if (var1 instanceof Long) {
this.write((Long) var1, var2);
} else if (var1 instanceof Float) {
this.write((Float) var1, var2);
} else if (var1 instanceof Double) {
this.write((Double) var1, var2);
} else if (var1 instanceof String) {
this.write((String) var1, var2);
} else if (var1 instanceof Map) {
this.write((Map) var1, var2);
} else if (var1 instanceof List) {
this.write((List) var1, var2);
} else if (var1 instanceof JceStruct) {
this.write((JceStruct) var1, var2);
} else if (var1 instanceof byte[]) {
this.write((byte[]) var1, var2);
} else if (var1 instanceof boolean[]) {
this.write((boolean[]) var1, var2);
} else if (var1 instanceof short[]) {
this.write((short[]) var1, var2);
} else if (var1 instanceof int[]) {
this.write((int[]) var1, var2);
} else if (var1 instanceof long[]) {
this.write((long[]) var1, var2);
} else if (var1 instanceof float[]) {
this.write((float[]) var1, var2);
} else if (var1 instanceof double[]) {
this.write((double[]) var1, var2);
} else if (var1.getClass().isArray()) {
this.writeArray((Object[]) var1, var2);
} else if (var1 instanceof Collection) {
this.write((Collection) var1, var2);
} else {
throw new JceEncodeException("write object error: unsupport type. " + var1.getClass());
}
}
public void write(Short var1, int var2) {
this.write((short) var1, var2);
}
public void write(String var1, int var2) {
byte[] var5;
label16:
{
byte[] var3;
try {
var3 = var1.getBytes(this.sServerEncoding);
} catch (UnsupportedEncodingException var4) {
var5 = var1.getBytes();
break label16;
}
var5 = var3;
}
this.reserve(var5.length + 10);
if (var5.length > 255) {
this.writeHead((byte) 7, var2);
this.field_80728.putInt(var5.length);
} else {
this.writeHead((byte) 6, var2);
this.field_80728.put((byte) var5.length);
}
this.field_80728.put(var5);
}
public <T> void write(Collection<T> var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
if (var1 == null) {
var2 = 0;
} else {
var2 = var1.size();
}
this.write(var2, 0);
if (var1 != null) {
for (T t : var1) {
this.write(t, 0);
}
}
}
public <K, V> void write(Map<K, V> var1, int var2) {
this.reserve(8);
this.writeHead((byte) 8, var2);
if (var1 == null) {
var2 = 0;
} else {
var2 = var1.size();
}
this.write(var2, 0);
if (var1 != null) {
for (Entry<K, V> kvEntry : var1.entrySet()) {
this.write(((Entry) kvEntry).getKey(), 0);
this.write(((Entry) kvEntry).getValue(), 1);
}
}
}
public void write(short var1, int var2) {
this.reserve(4);
if (var1 >= -128 && var1 <= 127) {
this.write((byte) var1, var2);
} else {
this.writeHead((byte) 1, var2);
this.field_80728.putShort(var1);
}
}
public void write(boolean var1, int var2) {
byte var3;
if (var1) {
var3 = 1;
} else {
var3 = 0;
}
this.write(var3, var2);
}
public void write(byte[] var1, int var2) {
this.reserve(var1.length + 8);
this.writeHead((byte) 13, var2);
this.writeHead((byte) 0, 0);
this.write(var1.length, 0);
this.field_80728.put(var1);
}
public void write(double[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public void write(float[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public void write(int[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public void write(long[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public <T> void write(T[] var1, int var2) {
this.writeArray(var1, var2);
}
public void write(short[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public void write(boolean[] var1, int var2) {
this.reserve(8);
this.writeHead((byte) 9, var2);
this.write(var1.length, 0);
int var3 = var1.length;
for (var2 = 0; var2 < var3; ++var2) {
this.write(var1[var2], 0);
}
}
public void writeByteString(String var1, int var2) {
this.reserve(var1.length() + 10);
byte[] var3 = HexUtil.hexStr2Bytes(var1);
if (var3.length > 255) {
this.writeHead((byte) 7, var2);
this.field_80728.putInt(var3.length);
this.field_80728.put(var3);
} else {
this.writeHead((byte) 6, var2);
this.field_80728.put((byte) var3.length);
this.field_80728.put(var3);
}
}
public void writeHead(byte var1, int tag) {
byte var3;
if (tag < 15) {
var3 = (byte) (tag << 4 | var1);
this.field_80728.put(var3);
} else if (tag < 256) {
var3 = (byte) (var1 | 240);
this.field_80728.put(var3);
this.field_80728.put((byte) tag);
} else {
throw new JceEncodeException("tag is too large: " + tag);
}
}
public void writeStringByte(String var1, int var2) {
byte[] var3 = HexUtil.hexStr2Bytes(var1);
this.reserve(var3.length + 10);
if (var3.length > 255) {
this.writeHead((byte) 7, var2);
this.field_80728.putInt(var3.length);
this.field_80728.put(var3);
} else {
this.writeHead((byte) 6, var2);
this.field_80728.put((byte) var3.length);
this.field_80728.put(var3);
}
}
}
package jce.jce;
import java.io.Serializable;
public abstract class JceStruct implements Serializable {
public static final byte BYTE = 0;
public static final byte DOUBLE = 5;
public static final byte FLOAT = 4;
public static final byte INT = 2;
public static final int JCE_MAX_STRING_LENGTH = 104857600;
public static final byte LIST = 9;
public static final byte LONG = 3;
public static final byte MAP = 8;
public static final byte SHORT = 1;
public static final byte SIMPLE_LIST = 13;
public static final byte STRING1 = 6;
public static final byte STRING4 = 7;
public static final byte STRUCT_BEGIN = 10;
public static final byte STRUCT_END = 11;
public static final byte ZERO_TAG = 12;
public static String toDisplaySimpleString(JceStruct var0) {
if (var0 == null) {
return null;
} else {
StringBuilder var1 = new StringBuilder();
var0.displaySimple(var1, 0);
return var1.toString();
}
}
public boolean containField(String var1) {
return false;
}
public void display(StringBuilder var1, int var2) {
}
public void displaySimple(StringBuilder var1, int var2) {
}
public Object getFieldByName(String var1) {
return null;
}
public JceStruct newInit() {
return null;
}
public abstract void readFrom(JceInputStream var1);
public void recyle() {
}
public void setFieldByName(String var1, Object var2) {
}
public byte[] toByteArray() {
JceOutputStream var1 = new JceOutputStream();
this.writeTo(var1);
return var1.toByteArray();
}
public byte[] toByteArray(String var1) {
JceOutputStream var2 = new JceOutputStream();
var2.setServerEncoding(var1);
this.writeTo(var2);
return var2.toByteArray();
}
public String toString() {
StringBuilder var1 = new StringBuilder();
this.display(var1, 0);
return var1.toString();
}
public abstract void writeTo(JceOutputStream var1);
}
package jce.jce;
import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.List;
public final class JceUtil {
private static final byte[] highDigits;
private static final int iConstant = 37;
private static final int iTotal = 17;
private static final byte[] lowDigits;
static {
byte[] var1 = new byte[]{48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70};
byte[] var2 = new byte[256];
byte[] var3 = new byte[256];
for (int var0 = 0; var0 < 256; ++var0) {
var2[var0] = var1[var0 >>> 4];
var3[var0] = var1[var0 & 15];
}
highDigits = var2;
lowDigits = var3;
}
public static int compareTo(byte var0, byte var1) {
if (var0 < var1) {
return -1;
} else {
return var0 > var1 ? 1 : 0;
}
}
public static int compareTo(char var0, char var1) {
if (var0 < var1) {
return -1;
} else {
return var0 > var1 ? 1 : 0;
}
}
public static int compareTo(double var0, double var2) {
if (var0 < var2) {
return -1;
} else {
return var0 > var2 ? 1 : 0;
}
}
public static int compareTo(float var0, float var1) {
if (var0 < var1) {
return -1;
} else {
return var0 > var1 ? 1 : 0;
}
}
public static int compareTo(int var0, int var1) {
if (var0 < var1) {
return -1;
} else {
return var0 > var1 ? 1 : 0;
}
}
public static int compareTo(long var0, long var2) {
if (var0 < var2) {
return -1;
} else {
return var0 > var2 ? 1 : 0;
}
}
public static <T extends Comparable<T>> int compareTo(T var0, T var1) {
return var0.compareTo(var1);
}
public static <T extends Comparable<T>> int compareTo(List<T> var0, List<T> var1) {
Iterator var3 = var0.iterator();
Iterator var4 = var1.iterator();
while (var3.hasNext() && var4.hasNext()) {
int var2 = ((Comparable) var3.next()).compareTo(var4.next());
if (var2 != 0) {
return var2;
}
}
return compareTo(var3.hasNext(), var4.hasNext());
}
public static int compareTo(short var0, short var1) {
if (var0 < var1) {
return -1;
} else {
return var0 > var1 ? 1 : 0;
}
}
public static int compareTo(boolean var0, boolean var1) {
byte var3 = 1;
byte var2;
if (var0) {
var2 = 1;
} else {
var2 = 0;
}
if (!var1) {
var3 = 0;
}
return var2 - var3;
}
public static int compareTo(byte[] var0, byte[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(char[] var0, char[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(double[] var0, double[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(float[] var0, float[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(int[] var0, int[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(long[] var0, long[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static <T extends Comparable<T>> int compareTo(T[] var0, T[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = var0[var2].compareTo(var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(short[] var0, short[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static int compareTo(boolean[] var0, boolean[] var1) {
int var3 = 0;
for (int var2 = 0; var2 < var0.length && var3 < var1.length; ++var2) {
int var4 = compareTo(var0[var2], var1[var3]);
if (var4 != 0) {
return var4;
}
++var3;
}
return compareTo(var0.length, var1.length);
}
public static boolean equals(byte var0, byte var1) {
return var0 == var1;
}
public static boolean equals(char var0, char var1) {
return var0 == var1;
}
public static boolean equals(double var0, double var2) {
return var0 == var2;
}
public static boolean equals(float var0, float var1) {
return var0 == var1;
}
public static boolean equals(int var0, int var1) {
return var0 == var1;
}
public static boolean equals(long var0, long var2) {
return var0 == var2;
}
public static boolean equals(Object var0, Object var1) {
return var0.equals(var1);
}
public static boolean equals(short var0, short var1) {
return var0 == var1;
}
public static boolean equals(boolean var0, boolean var1) {
return var0 == var1;
}
public static String getHexdump(ByteBuffer var0) {
int var1 = var0.remaining();
if (var1 == 0) {
return "empty";
} else {
StringBuffer var4 = new StringBuffer(var0.remaining() * 3 - 1);
int var2 = var0.position();
int var3 = var0.get() & 255;
var4.append((char) highDigits[var3]);
var4.append((char) lowDigits[var3]);
--var1;
while (var1 > 0) {
var4.append(' ');
var3 = var0.get() & 255;
var4.append((char) highDigits[var3]);
var4.append((char) lowDigits[var3]);
--var1;
}
var0.position(var2);
return var4.toString();
}
}
public static String getHexdump(byte[] var0) {
return getHexdump(ByteBuffer.wrap(var0));
}
public static byte[] getJceBufArray(ByteBuffer var0) {
byte[] var1 = new byte[var0.position()];
System.arraycopy(var0.array(), 0, var1, 0, var1.length);
return var1;
}
public static int hashCode(byte var0) {
return var0 + 629;
}
public static int hashCode(char var0) {
return var0 + 629;
}
public static int hashCode(double var0) {
return hashCode(Double.doubleToLongBits(var0));
}
public static int hashCode(float var0) {
return Float.floatToIntBits(var0) + 629;
}
public static int hashCode(int var0) {
return var0 + 629;
}
public static int hashCode(long var0) {
return (int) (var0 >> 32 ^ var0) + 629;
}
public static int hashCode(Object var0) {
if (var0 == null) {
return 629;
} else if (var0.getClass().isArray()) {
if (var0 instanceof long[]) {
return hashCode((long[]) ((long[]) var0));
} else if (var0 instanceof int[]) {
return hashCode((int[]) ((int[]) var0));
} else if (var0 instanceof short[]) {
return hashCode((short[]) ((short[]) var0));
} else if (var0 instanceof char[]) {
return hashCode((char[]) ((char[]) var0));
} else if (var0 instanceof byte[]) {
return hashCode((byte[]) ((byte[]) var0));
} else if (var0 instanceof double[]) {
return hashCode((double[]) ((double[]) var0));
} else if (var0 instanceof float[]) {
return hashCode((float[]) ((float[]) var0));
} else if (var0 instanceof boolean[]) {
return hashCode((boolean[]) ((boolean[]) var0));
} else {
return var0 instanceof JceStruct[] ? hashCode((JceStruct[]) ((JceStruct[]) var0)) : hashCode((Object) ((Object[]) ((Object[]) var0)));
}
} else {
return var0 instanceof JceStruct ? var0.hashCode() : var0.hashCode() + 629;
}
}
public static int hashCode(short var0) {
return var0 + 629;
}
public static int hashCode(boolean var0) {
byte var1;
if (var0) {
var1 = 0;
} else {
var1 = 1;
}
return var1 + 629;
}
public static int hashCode(byte[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + var0[var2];
++var2;
}
}
return var3;
}
public static int hashCode(char[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + var0[var2];
++var2;
}
}
return var3;
}
public static int hashCode(double[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + (int) (Double.doubleToLongBits(var0[var2]) ^ Double.doubleToLongBits(var0[var2]) >> 32);
++var2;
}
}
return var3;
}
public static int hashCode(float[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + Float.floatToIntBits(var0[var2]);
++var2;
}
}
return var3;
}
public static int hashCode(int[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + var0[var2];
++var2;
}
}
return var3;
}
public static int hashCode(long[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + (int) (var0[var2] ^ var0[var2] >> 32);
++var2;
}
}
return var3;
}
public static int hashCode(JceStruct[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + var0[var2].hashCode();
++var2;
}
}
return var3;
}
public static int hashCode(short[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
var1 = var1 * 37 + var0[var2];
++var2;
}
}
return var3;
}
public static int hashCode(boolean[] var0) {
int var3;
if (var0 == null) {
var3 = 629;
} else {
int var1 = 17;
int var2 = 0;
while (true) {
var3 = var1;
if (var2 >= var0.length) {
break;
}
byte var4;
if (var0[var2]) {
var4 = 0;
} else {
var4 = 1;
}
var1 = var4 + var1 * 37;
++var2;
}
}
return var3;
}
}
package jce.jce;
import java.nio.ByteBuffer;
public interface OnIllegalArgumentException {
void onException(IllegalArgumentException var1, ByteBuffer var2, int var3, int var4);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment