     }
 
     var monkeyking_qqCallbackName: String {
-        var hexString = String(format: "%02llx", (self as NSString).longLongValue)
-        while hexString.count < 8 {
-            hexString = "0" + hexString
-        }
+        let hexString = String(format: "%08llx", (self as NSString).longLongValue)
+
         return "QQ" + hexString
     }
 }

extension String {

    var monkeyking_base64EncodedString: String? {
        return data(using: .utf8)?.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
    }

    var monkeyking_urlEncodedString: String? {
        return addingPercentEncoding(withAllowedCharacters: CharacterSet.urlHostAllowed)
    }

    var monkeyking_base64AndURLEncodedString: String? {

extension Bundle {

    var monkeyking_displayName: String? {
        let CFBundleDisplayName = (localizedInfoDictionary?["CFBundleDisplayName"] ?? infoDictionary?["CFBundleDisplayName"]) as? String
        let CFBundleName = (localizedInfoDictionary?["CFBundleName"] ?? infoDictionary?["CFBundleName"]) as? String

        return CFBundleDisplayName ?? CFBundleName
    }

    var monkeyking_bundleID: String? {
