LyoKICoJVmlkZW8gZm9yIExpbnV4IFR3bwogKgogKglBIGdlbmVyaWMgdmlkZW8gZGV2aWNlIGludGVyZmFjZSBmb3IgdGhlIExJTlVYIG9wZXJhdGluZyBzeXN0ZW0KICoJdXNpbmcgYSBzZXQgb2YgZGV2aWNlIHN0cnVjdHVyZXMvdmVjdG9ycyBmb3IgbG93IGxldmVsIG9wZXJhdGlvbnMuCiAqCiAqCVRoaXMgZmlsZSByZXBsYWNlcyB0aGUgdmlkZW9kZXYuYyBmaWxlIHRoYXQgY29tZXMgd2l0aCB0aGUKICoJcmVndWxhciBrZXJuZWwgZGlzdHJpYnV0aW9uLgogKgogKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBBdXRob3I6CUJpbGwgRGlya3MgPGJkaXJrc0BwYWNiZWxsLm5ldD4KICoJCWJhc2VkIG9uIGNvZGUgYnkgQWxhbiBDb3gsIDxhbGFuQGN5bXJ1Lm5ldD4KICoKICovCgovKgogKiBWaWRlbyBjYXB0dXJlIGludGVyZmFjZSBmb3IgTGludXgKICoKICoJQSBnZW5lcmljIHZpZGVvIGRldmljZSBpbnRlcmZhY2UgZm9yIHRoZSBMSU5VWCBvcGVyYXRpbmcgc3lzdGVtCiAqCXVzaW5nIGEgc2V0IG9mIGRldmljZSBzdHJ1Y3R1cmVzL3ZlY3RvcnMgZm9yIGxvdyBsZXZlbCBvcGVyYXRpb25zLgogKgogKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogQXV0aG9yOglBbGFuIENveCwgPGFsYW5AcmVkaGF0LmNvbT4KICoKICogRml4ZXM6CiAqLwoKLyoKICogVmlkZW80bGludXggMS8yIGludGVncmF0aW9uIGJ5IEp1c3RpbiBTY2hvZW1hbgogKiA8anVzdGluQHN1bnRpZ2VyLmVlLnVwLmFjLnphPgogKiAyLjQgUFJPQ0ZTIHN1cHBvcnQgcG9ydGVkIGZyb20gMi40IGtlcm5lbHMgYnkKICogIEnxYWtpIEdhcmPtYSBFdHhlYmFycmlhIDxnYXJldHhlQGV1c2thbG5ldC5uZXQ+CiAqIE1ha2VmaWxlIGZpeCBieSAiVy4gTWljaGFlbCBQZXR1bGxvIiA8bWlrZUBmbHluLm9yZz4KICogMi40IGRldmZzIHN1cHBvcnQgcG9ydGVkIGZyb20gMi40IGtlcm5lbHMgYnkKICogIERhbiBNZXJpbGxhdCA8ZGFuQG1lcmlsbGF0Lm9yZz4KICogQWRkZWQgR2VyZCBLbm9ycnMgdjRsMSBlbmhhbmNlbWVudHMgKEp1c3RpbiBTY2hvZW1hbikKICovCgojaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgojaW5jbHVkZSA8bGludXgvbW0uaD4KI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgojaW5jbHVkZSA8bGludXgvZXJybm8uaD4KI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgojaW5jbHVkZSA8YXNtL2lvLmg+CiNpbmNsdWRlIDxhc20vZGl2NjQuaD4KI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CgojaWZkZWYgQ09ORklHX0tNT0QKI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KI2VuZGlmCgojaWYgZGVmaW5lZChDT05GSUdfVVNUKSB8fCBkZWZpbmVkKENPTkZJR19VU1RfTU9EVUxFKQojaW5jbHVkZSA8bGludXgvdXN0Lmg+CiNlbmRpZgoKCiNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgoKTU9EVUxFX0FVVEhPUigiQmlsbCBEaXJrcywgSnVzdGluIFNjaG9lbWFuLCBHZXJkIEtub3JyIik7Ck1PRFVMRV9ERVNDUklQVElPTigibWlzYyBoZWxwZXIgZnVuY3Rpb25zIGZvciB2NGwyIGRldmljZSBkcml2ZXJzIik7Ck1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKCi8qCiAqCiAqCVYgNCBMIDIgICBEIFIgSSBWIEUgUiAgIEggRSBMIFAgRSBSICAgQSBQIEkKICoKICovCgovKgogKiAgVmlkZW8gU3RhbmRhcmQgT3BlcmF0aW9ucyAoY29udHJpYnV0ZWQgYnkgTWljaGFlbCBTY2hpbWVrKQogKi8KCgovKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgYSB2NGwyX3N0YW5kYXJkIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8gdGhlCiAgICdpZCcgYW5kICd0cmFuc21pc3Npb24nIHBhcmFtZXRlcnMuICBSZXR1cm5zIG5lZ2F0aXZlIG9uIGVycm9yLiAgKi8KaW50IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqdnMsCgkJCSAgICAgaW50IGlkLCBjaGFyICpuYW1lKQp7Cgl1MzIgaW5kZXggPSB2cy0+aW5kZXg7CgoJbWVtc2V0KHZzLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpKTsKCXZzLT5pbmRleCA9IGluZGV4OwoJdnMtPmlkICAgID0gaWQ7CglpZiAoaWQgJiBWNEwyX1NURF81MjVfNjApIHsKCQl2cy0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTAwMTsKCQl2cy0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAzMDAwMDsKCQl2cy0+ZnJhbWVsaW5lcyA9IDUyNTsKCX0gZWxzZSB7CgkJdnMtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDE7CgkJdnMtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMjU7CgkJdnMtPmZyYW1lbGluZXMgPSA2MjU7Cgl9CglzdHJsY3B5KHZzLT5uYW1lLG5hbWUsc2l6ZW9mKHZzLT5uYW1lKSk7CglyZXR1cm4gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogcHJpb3JpdHkgaGFuZGxpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiNkZWZpbmUgVjRMMl9QUklPX1ZBTElEKHZhbCkgKHZhbCA9PSBWNEwyX1BSSU9SSVRZX0JBQ0tHUk9VTkQgICB8fCBcCgkJCSAgICAgIHZhbCA9PSBWNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFICB8fCBcCgkJCSAgICAgIHZhbCA9PSBWNEwyX1BSSU9SSVRZX1JFQ09SRCkKCmludCB2NGwyX3ByaW9faW5pdChzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICpnbG9iYWwpCnsKCW1lbXNldChnbG9iYWwsMCxzaXplb2YoKmdsb2JhbCkpOwoJcmV0dXJuIDA7Cn0KCmludCB2NGwyX3ByaW9fY2hhbmdlKHN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgKmdsb2JhbCwgZW51bSB2NGwyX3ByaW9yaXR5ICpsb2NhbCwKCQkgICAgIGVudW0gdjRsMl9wcmlvcml0eSBuZXcpCnsKCWlmICghVjRMMl9QUklPX1ZBTElEKG5ldykpCgkJcmV0dXJuIC1FSU5WQUw7CglpZiAoKmxvY2FsID09IG5ldykKCQlyZXR1cm4gMDsKCglhdG9taWNfaW5jKCZnbG9iYWwtPnByaW9zW25ld10pOwoJaWYgKFY0TDJfUFJJT19WQUxJRCgqbG9jYWwpKQoJCWF0b21pY19kZWMoJmdsb2JhbC0+cHJpb3NbKmxvY2FsXSk7CgkqbG9jYWwgPSBuZXc7CglyZXR1cm4gMDsKfQoKaW50IHY0bDJfcHJpb19vcGVuKHN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgKmdsb2JhbCwgZW51bSB2NGwyX3ByaW9yaXR5ICpsb2NhbCkKewoJcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoZ2xvYmFsLGxvY2FsLFY0TDJfUFJJT1JJVFlfREVGQVVMVCk7Cn0KCmludCB2NGwyX3ByaW9fY2xvc2Uoc3RydWN0IHY0bDJfcHJpb19zdGF0ZSAqZ2xvYmFsLCBlbnVtIHY0bDJfcHJpb3JpdHkgKmxvY2FsKQp7CglpZiAoVjRMMl9QUklPX1ZBTElEKCpsb2NhbCkpCgkJYXRvbWljX2RlYygmZ2xvYmFsLT5wcmlvc1sqbG9jYWxdKTsKCXJldHVybiAwOwp9CgplbnVtIHY0bDJfcHJpb3JpdHkgdjRsMl9wcmlvX21heChzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICpnbG9iYWwpCnsKCWlmIChhdG9taWNfcmVhZCgmZ2xvYmFsLT5wcmlvc1tWNEwyX1BSSU9SSVRZX1JFQ09SRF0pID4gMCkKCQlyZXR1cm4gVjRMMl9QUklPUklUWV9SRUNPUkQ7CglpZiAoYXRvbWljX3JlYWQoJmdsb2JhbC0+cHJpb3NbVjRMMl9QUklPUklUWV9JTlRFUkFDVElWRV0pID4gMCkKCQlyZXR1cm4gVjRMMl9QUklPUklUWV9JTlRFUkFDVElWRTsKCWlmIChhdG9taWNfcmVhZCgmZ2xvYmFsLT5wcmlvc1tWNEwyX1BSSU9SSVRZX0JBQ0tHUk9VTkRdKSA+IDApCgkJcmV0dXJuIFY0TDJfUFJJT1JJVFlfQkFDS0dST1VORDsKCXJldHVybiBWNEwyX1BSSU9SSVRZX1VOU0VUOwp9CgppbnQgdjRsMl9wcmlvX2NoZWNrKHN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgKmdsb2JhbCwgZW51bSB2NGwyX3ByaW9yaXR5ICpsb2NhbCkKewoJaWYgKCpsb2NhbCA8IHY0bDJfcHJpb19tYXgoZ2xvYmFsKSkKCQlyZXR1cm4gLUVCVVNZOwoJcmV0dXJuIDA7Cn0KCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiBzb21lIGFycmF5cyBmb3IgcHJldHR5LXByaW50aW5nIGRlYnVnIG1lc3NhZ2VzIG9mIGVudW0gdHlwZXMgICAgICAqLwoKY2hhciAqdjRsMl9maWVsZF9uYW1lc1tdID0gewoJW1Y0TDJfRklFTERfQU5ZXSAgICAgICAgPSAiYW55IiwKCVtWNEwyX0ZJRUxEX05PTkVdICAgICAgID0gIm5vbmUiLAoJW1Y0TDJfRklFTERfVE9QXSAgICAgICAgPSAidG9wIiwKCVtWNEwyX0ZJRUxEX0JPVFRPTV0gICAgID0gImJvdHRvbSIsCglbVjRMMl9GSUVMRF9JTlRFUkxBQ0VEXSA9ICJpbnRlcmxhY2VkIiwKCVtWNEwyX0ZJRUxEX1NFUV9UQl0gICAgID0gInNlcS10YiIsCglbVjRMMl9GSUVMRF9TRVFfQlRdICAgICA9ICJzZXEtYnQiLAoJW1Y0TDJfRklFTERfQUxURVJOQVRFXSAgPSAiYWx0ZXJuYXRlIiwKfTsKCmNoYXIgKnY0bDJfdHlwZV9uYW1lc1tdID0gewoJW1Y0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV0gPSAidmlkZW8tY2FwIiwKCVtWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVldID0gInZpZGVvLW92ZXIiLAoJW1Y0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUXSAgPSAidmlkZW8tb3V0IiwKCVtWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFXSAgID0gInZiaS1jYXAiLAoJW1Y0TDJfQlVGX1RZUEVfVkJJX09VVFBVVF0gICAgPSAidmJpLW91dCIsCn07CgpzdGF0aWMgY2hhciAqdjRsMl9tZW1vcnlfbmFtZXNbXSA9IHsKCVtWNEwyX01FTU9SWV9NTUFQXSAgICA9ICJtbWFwIiwKCVtWNEwyX01FTU9SWV9VU0VSUFRSXSA9ICJ1c2VycHRyIiwKCVtWNEwyX01FTU9SWV9PVkVSTEFZXSA9ICJvdmVybGF5IiwKfTsKCiNkZWZpbmUgcHJ0X25hbWVzKGEsYXJyKSAoKChhKT49MCkmJigoYSk8QVJSQVlfU0laRShhcnIpKSk/YXJyW2FdOiJ1bmtub3duIgoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIGRlYnVnIGhlbHAgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKI2lmZGVmIEhBVkVfVjRMMQpzdGF0aWMgY29uc3QgY2hhciAqdjRsMV9pb2N0bHNbXSA9IHsKCVtfSU9DX05SKFZJRElPQ0dDQVApXSAgICAgICA9ICJWSURJT0NHQ0FQIiwKCVtfSU9DX05SKFZJRElPQ0dDSEFOKV0gICAgICA9ICJWSURJT0NHQ0hBTiIsCglbX0lPQ19OUihWSURJT0NTQ0hBTildICAgICAgPSAiVklESU9DU0NIQU4iLAoJW19JT0NfTlIoVklESU9DR1RVTkVSKV0gICAgID0gIlZJRElPQ0dUVU5FUiIsCglbX0lPQ19OUihWSURJT0NTVFVORVIpXSAgICAgPSAiVklESU9DU1RVTkVSIiwKCVtfSU9DX05SKFZJRElPQ0dQSUNUKV0gICAgICA9ICJWSURJT0NHUElDVCIsCglbX0lPQ19OUihWSURJT0NTUElDVCldICAgICAgPSAiVklESU9DU1BJQ1QiLAoJW19JT0NfTlIoVklESU9DQ0FQVFVSRSldICAgID0gIlZJRElPQ0NBUFRVUkUiLAoJW19JT0NfTlIoVklESU9DR1dJTildICAgICAgID0gIlZJRElPQ0dXSU4iLAoJW19JT0NfTlIoVklESU9DU1dJTildICAgICAgID0gIlZJRElPQ1NXSU4iLAoJW19JT0NfTlIoVklESU9DR0ZCVUYpXSAgICAgID0gIlZJRElPQ0dGQlVGIiwKCVtfSU9DX05SKFZJRElPQ1NGQlVGKV0gICAgICA9ICJWSURJT0NTRkJVRiIsCglbX0lPQ19OUihWSURJT0NLRVkpXSAgICAgICAgPSAiVklESU9DS0VZIiwKCVtfSU9DX05SKFZJRElPQ0dGUkVRKV0gICAgICA9ICJWSURJT0NHRlJFUSIsCglbX0lPQ19OUihWSURJT0NTRlJFUSldICAgICAgPSAiVklESU9DU0ZSRVEiLAoJW19JT0NfTlIoVklESU9DR0FVRElPKV0gICAgID0gIlZJRElPQ0dBVURJTyIsCglbX0lPQ19OUihWSURJT0NTQVVESU8pXSAgICAgPSAiVklESU9DU0FVRElPIiwKCVtfSU9DX05SKFZJRElPQ1NZTkMpXSAgICAgICA9ICJWSURJT0NTWU5DIiwKCVtfSU9DX05SKFZJRElPQ01DQVBUVVJFKV0gICA9ICJWSURJT0NNQ0FQVFVSRSIsCglbX0lPQ19OUihWSURJT0NHTUJVRildICAgICAgPSAiVklESU9DR01CVUYiLAoJW19JT0NfTlIoVklESU9DR1VOSVQpXSAgICAgID0gIlZJRElPQ0dVTklUIiwKCVtfSU9DX05SKFZJRElPQ0dDQVBUVVJFKV0gICA9ICJWSURJT0NHQ0FQVFVSRSIsCglbX0lPQ19OUihWSURJT0NTQ0FQVFVSRSldICAgPSAiVklESU9DU0NBUFRVUkUiLAoJW19JT0NfTlIoVklESU9DU1BMQVlNT0RFKV0gID0gIlZJRElPQ1NQTEFZTU9ERSIsCglbX0lPQ19OUihWSURJT0NTV1JJVEVNT0RFKV0gPSAiVklESU9DU1dSSVRFTU9ERSIsCglbX0lPQ19OUihWSURJT0NHUExBWUlORk8pXSAgPSAiVklESU9DR1BMQVlJTkZPIiwKCVtfSU9DX05SKFZJRElPQ1NNSUNST0NPREUpXSA9ICJWSURJT0NTTUlDUk9DT0RFIiwKCVtfSU9DX05SKFZJRElPQ0dWQklGTVQpXSAgICA9ICJWSURJT0NHVkJJRk1UIiwKCVtfSU9DX05SKFZJRElPQ1NWQklGTVQpXSAgICA9ICJWSURJT0NTVkJJRk1UIgp9OwojZGVmaW5lIFY0TDFfSU9DVExTIEFSUkFZX1NJWkUodjRsMV9pb2N0bHMpCiNlbmRpZgoKc3RhdGljIGNvbnN0IGNoYXIgKnY0bDJfaW9jdGxzW10gPSB7CglbX0lPQ19OUihWSURJT0NfUVVFUllDQVApXSAgICAgICAgID0gIlZJRElPQ19RVUVSWUNBUCIsCglbX0lPQ19OUihWSURJT0NfUkVTRVJWRUQpXSAgICAgICAgID0gIlZJRElPQ19SRVNFUlZFRCIsCglbX0lPQ19OUihWSURJT0NfRU5VTV9GTVQpXSAgICAgICAgID0gIlZJRElPQ19FTlVNX0ZNVCIsCglbX0lPQ19OUihWSURJT0NfR19GTVQpXSAgICAgICAgICAgID0gIlZJRElPQ19HX0ZNVCIsCglbX0lPQ19OUihWSURJT0NfU19GTVQpXSAgICAgICAgICAgID0gIlZJRElPQ19TX0ZNVCIsCglbX0lPQ19OUihWSURJT0NfR19NUEVHQ09NUCldICAgICAgID0gIlZJRElPQ19HX01QRUdDT01QIiwKCVtfSU9DX05SKFZJRElPQ19TX01QRUdDT01QKV0gICAgICAgPSAiVklESU9DX1NfTVBFR0NPTVAiLAoJW19JT0NfTlIoVklESU9DX1JFUUJVRlMpXSAgICAgICAgICA9ICJWSURJT0NfUkVRQlVGUyIsCglbX0lPQ19OUihWSURJT0NfUVVFUllCVUYpXSAgICAgICAgID0gIlZJRElPQ19RVUVSWUJVRiIsCglbX0lPQ19OUihWSURJT0NfR19GQlVGKV0gICAgICAgICAgID0gIlZJRElPQ19HX0ZCVUYiLAoJW19JT0NfTlIoVklESU9DX1NfRkJVRildICAgICAgICAgICA9ICJWSURJT0NfU19GQlVGIiwKCVtfSU9DX05SKFZJRElPQ19PVkVSTEFZKV0gICAgICAgICAgPSAiVklESU9DX09WRVJMQVkiLAoJW19JT0NfTlIoVklESU9DX1FCVUYpXSAgICAgICAgICAgICA9ICJWSURJT0NfUUJVRiIsCglbX0lPQ19OUihWSURJT0NfRFFCVUYpXSAgICAgICAgICAgID0gIlZJRElPQ19EUUJVRiIsCglbX0lPQ19OUihWSURJT0NfU1RSRUFNT04pXSAgICAgICAgID0gIlZJRElPQ19TVFJFQU1PTiIsCglbX0lPQ19OUihWSURJT0NfU1RSRUFNT0ZGKV0gICAgICAgID0gIlZJRElPQ19TVFJFQU1PRkYiLAoJW19JT0NfTlIoVklESU9DX0dfUEFSTSldICAgICAgICAgICA9ICJWSURJT0NfR19QQVJNIiwKCVtfSU9DX05SKFZJRElPQ19TX1BBUk0pXSAgICAgICAgICAgPSAiVklESU9DX1NfUEFSTSIsCglbX0lPQ19OUihWSURJT0NfR19TVEQpXSAgICAgICAgICAgID0gIlZJRElPQ19HX1NURCIsCglbX0lPQ19OUihWSURJT0NfU19TVEQpXSAgICAgICAgICAgID0gIlZJRElPQ19TX1NURCIsCglbX0lPQ19OUihWSURJT0NfRU5VTVNURCldICAgICAgICAgID0gIlZJRElPQ19FTlVNU1REIiwKCVtfSU9DX05SKFZJRElPQ19FTlVNSU5QVVQpXSAgICAgICAgPSAiVklESU9DX0VOVU1JTlBVVCIsCglbX0lPQ19OUihWSURJT0NfR19DVFJMKV0gICAgICAgICAgID0gIlZJRElPQ19HX0NUUkwiLAoJW19JT0NfTlIoVklESU9DX1NfQ1RSTCldICAgICAgICAgICA9ICJWSURJT0NfU19DVFJMIiwKCVtfSU9DX05SKFZJRElPQ19HX1RVTkVSKV0gICAgICAgICAgPSAiVklESU9DX0dfVFVORVIiLAoJW19JT0NfTlIoVklESU9DX1NfVFVORVIpXSAgICAgICAgICA9ICJWSURJT0NfU19UVU5FUiIsCglbX0lPQ19OUihWSURJT0NfR19BVURJTyldICAgICAgICAgID0gIlZJRElPQ19HX0FVRElPIiwKCVtfSU9DX05SKFZJRElPQ19TX0FVRElPKV0gICAgICAgICAgPSAiVklESU9DX1NfQVVESU8iLAoJW19JT0NfTlIoVklESU9DX1FVRVJZQ1RSTCldICAgICAgICA9ICJWSURJT0NfUVVFUllDVFJMIiwKCVtfSU9DX05SKFZJRElPQ19RVUVSWU1FTlUpXSAgICAgICAgPSAiVklESU9DX1FVRVJZTUVOVSIsCglbX0lPQ19OUihWSURJT0NfR19JTlBVVCldICAgICAgICAgID0gIlZJRElPQ19HX0lOUFVUIiwKCVtfSU9DX05SKFZJRElPQ19TX0lOUFVUKV0gICAgICAgICAgPSAiVklESU9DX1NfSU5QVVQiLAoJW19JT0NfTlIoVklESU9DX0dfT1VUUFVUKV0gICAgICAgICA9ICJWSURJT0NfR19PVVRQVVQiLAoJW19JT0NfTlIoVklESU9DX1NfT1VUUFVUKV0gICAgICAgICA9ICJWSURJT0NfU19PVVRQVVQiLAoJW19JT0NfTlIoVklESU9DX0VOVU1PVVRQVVQpXSAgICAgICA9ICJWSURJT0NfRU5VTU9VVFBVVCIsCglbX0lPQ19OUihWSURJT0NfR19BVURPVVQpXSAgICAgICAgID0gIlZJRElPQ19HX0FVRE9VVCIsCglbX0lPQ19OUihWSURJT0NfU19BVURPVVQpXSAgICAgICAgID0gIlZJRElPQ19TX0FVRE9VVCIsCglbX0lPQ19OUihWSURJT0NfR19NT0RVTEFUT1IpXSAgICAgID0gIlZJRElPQ19HX01PRFVMQVRPUiIsCglbX0lPQ19OUihWSURJT0NfU19NT0RVTEFUT1IpXSAgICAgID0gIlZJRElPQ19TX01PRFVMQVRPUiIsCglbX0lPQ19OUihWSURJT0NfR19GUkVRVUVOQ1kpXSAgICAgID0gIlZJRElPQ19HX0ZSRVFVRU5DWSIsCglbX0lPQ19OUihWSURJT0NfU19GUkVRVUVOQ1kpXSAgICAgID0gIlZJRElPQ19TX0ZSRVFVRU5DWSIsCglbX0lPQ19OUihWSURJT0NfQ1JPUENBUCldICAgICAgICAgID0gIlZJRElPQ19DUk9QQ0FQIiwKCVtfSU9DX05SKFZJRElPQ19HX0NST1ApXSAgICAgICAgICAgPSAiVklESU9DX0dfQ1JPUCIsCglbX0lPQ19OUihWSURJT0NfU19DUk9QKV0gICAgICAgICAgID0gIlZJRElPQ19TX0NST1AiLAoJW19JT0NfTlIoVklESU9DX0dfSlBFR0NPTVApXSAgICAgICA9ICJWSURJT0NfR19KUEVHQ09NUCIsCglbX0lPQ19OUihWSURJT0NfU19KUEVHQ09NUCldICAgICAgID0gIlZJRElPQ19TX0pQRUdDT01QIiwKCVtfSU9DX05SKFZJRElPQ19RVUVSWVNURCldICAgICAgICAgPSAiVklESU9DX1FVRVJZU1REIiwKCVtfSU9DX05SKFZJRElPQ19UUllfRk1UKV0gICAgICAgICAgPSAiVklESU9DX1RSWV9GTVQiLAoJW19JT0NfTlIoVklESU9DX0VOVU1BVURJTyldICAgICAgICA9ICJWSURJT0NfRU5VTUFVRElPIiwKCVtfSU9DX05SKFZJRElPQ19FTlVNQVVET1VUKV0gICAgICAgPSAiVklESU9DX0VOVU1BVURPVVQiLAoJW19JT0NfTlIoVklESU9DX0dfUFJJT1JJVFkpXSAgICAgICA9ICJWSURJT0NfR19QUklPUklUWSIsCglbX0lPQ19OUihWSURJT0NfU19QUklPUklUWSldICAgICAgID0gIlZJRElPQ19TX1BSSU9SSVRZIiwKI2lmIDEKCVtfSU9DX05SKFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQKV0gPSAiVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVAiLAojZW5kaWYKCVtfSU9DX05SKFZJRElPQ19MT0dfU1RBVFVTKV0gICAgICAgPSAiVklESU9DX0xPR19TVEFUVVMiCn07CiNkZWZpbmUgVjRMMl9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2lvY3RscykKCnN0YXRpYyBjb25zdCBjaGFyICp2NGwyX2ludF9pb2N0bHNbXSA9IHsKI2lmZGVmIEhBVkVfVklERU9fREVDT0RFUgoJW19JT0NfTlIoREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTKV0gICAgPSAiREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTIiwKCVtfSU9DX05SKERFQ09ERVJfR0VUX1NUQVRVUyldICAgICAgICAgID0gIkRFQ09ERVJfR0VUX1NUQVRVUyIsCglbX0lPQ19OUihERUNPREVSX1NFVF9OT1JNKV0gICAgICAgICAgICA9ICJERUNPREVSX1NFVF9OT1JNIiwKCVtfSU9DX05SKERFQ09ERVJfU0VUX0lOUFVUKV0gICAgICAgICAgID0gIkRFQ09ERVJfU0VUX0lOUFVUIiwKCVtfSU9DX05SKERFQ09ERVJfU0VUX09VVFBVVCldICAgICAgICAgID0gIkRFQ09ERVJfU0VUX09VVFBVVCIsCglbX0lPQ19OUihERUNPREVSX0VOQUJMRV9PVVRQVVQpXSAgICAgICA9ICJERUNPREVSX0VOQUJMRV9PVVRQVVQiLAoJW19JT0NfTlIoREVDT0RFUl9TRVRfUElDVFVSRSldICAgICAgICAgPSAiREVDT0RFUl9TRVRfUElDVFVSRSIsCglbX0lPQ19OUihERUNPREVSX1NFVF9HUElPKV0gICAgICAgICAgICA9ICJERUNPREVSX1NFVF9HUElPIiwKCVtfSU9DX05SKERFQ09ERVJfSU5JVCldICAgICAgICAgICAgICAgID0gIkRFQ09ERVJfSU5JVCIsCglbX0lPQ19OUihERUNPREVSX1NFVF9WQklfQllQQVNTKV0gICAgICA9ICJERUNPREVSX1NFVF9WQklfQllQQVNTIiwKCVtfSU9DX05SKERFQ09ERVJfRFVNUCldICAgICAgICAgICAgICAgID0gIkRFQ09ERVJfRFVNUCIsCiNlbmRpZgoJW19JT0NfTlIoQVVEQ19TRVRfUkFESU8pXSAgICAgICAgICAgICAgPSAiQVVEQ19TRVRfUkFESU8iLAoKCVtfSU9DX05SKFRVTkVSX1NFVF9UWVBFX0FERFIpXSAgICAgICAgID0gIlRVTkVSX1NFVF9UWVBFX0FERFIiLAoJW19JT0NfTlIoVFVORVJfU0VUX1NUQU5EQlkpXSAgICAgICAgICAgPSAiVFVORVJfU0VUX1NUQU5EQlkiLAoJW19JT0NfTlIoVERBOTg4N19TRVRfQ09ORklHKV0gICAgICAgICAgPSAiVERBOTg4N19TRVRfQ09ORklHIiwKCglbX0lPQ19OUihWSURJT0NfSU5UX1NfVFVORVJfTU9ERSldICAgICA9ICJWSURJT0NfSU5UX1NfVFVORVJfTU9ERSIsCglbX0lPQ19OUihWSURJT0NfSU5UX1NfUkVHSVNURVIpXSAgICAgICA9ICJWSURJT0NfSU5UX1NfUkVHSVNURVIiLAoJW19JT0NfTlIoVklESU9DX0lOVF9HX1JFR0lTVEVSKV0gICAgICAgPSAiVklESU9DX0lOVF9HX1JFR0lTVEVSIiwKCVtfSU9DX05SKFZJRElPQ19JTlRfUkVTRVQpXSAgICAgICAgICAgID0gIlZJRElPQ19JTlRfUkVTRVQiLAoJW19JT0NfTlIoVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRKV0gPSAiVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRIiwKCVtfSU9DX05SKFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FKV0gID0gIlZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FIiwKCVtfSU9DX05SKFZJRElPQ19JTlRfU19WQklfREFUQSldICAgICAgID0gIlZJRElPQ19JTlRfU19WQklfREFUQSIsCglbX0lPQ19OUihWSURJT0NfSU5UX0dfVkJJX0RBVEEpXSAgICAgICA9ICJWSURJT0NfSU5UX0dfVkJJX0RBVEEiLAoJW19JT0NfTlIoVklESU9DX0lOVF9HX0NISVBfSURFTlQpXSAgICAgPSAiVklESU9DX0lOVF9HX0NISVBfSURFTlQiLAoJW19JT0NfTlIoVklESU9DX0lOVF9JMlNfQ0xPQ0tfRlJFUSldICAgPSAiVklESU9DX0lOVF9JMlNfQ0xPQ0tfRlJFUSIsCglbX0lPQ19OUihWSURJT0NfSU5UX1NfU1RBTkRCWSldICAgICAgICA9ICJWSURJT0NfSU5UX1NfU1RBTkRCWSIsCglbX0lPQ19OUihWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORyldICA9ICJWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORyIsCglbX0lPQ19OUihWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORyldICA9ICJWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORyIsCglbX0lPQ19OUihWSURJT0NfSU5UX1NfVklERU9fUk9VVElORyldICA9ICJWSURJT0NfSU5UX1NfVklERU9fUk9VVElORyIsCglbX0lPQ19OUihWSURJT0NfSU5UX0dfVklERU9fUk9VVElORyldICA9ICJWSURJT0NfSU5UX0dfVklERU9fUk9VVElORyIsCglbX0lPQ19OUihWSURJT0NfSU5UX1NfQ1JZU1RBTF9GUkVRKV0gICA9ICJWSURJT0NfSU5UX1NfQ1JZU1RBTF9GUkVRIgp9OwojZGVmaW5lIFY0TDJfSU5UX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDJfaW50X2lvY3RscykKCnN0YXRpYyB2b2lkIHY0bF9wcmludF9waXhfZm10IChjaGFyICpzLCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpmbXQpCnsKCXByaW50ayAoIiVzOiB3aWR0aD0lZCwgaGVpZ2h0PSVkLCBmb3JtYXQ9JWQsIGZpZWxkPSVzLCAiCgkJImJ5dGVzcGVybGluZT0lZCBzaXplaW1hZ2U9JWQsIGNvbG9yc3BhY2U9JWRcbiIsIHMsCgkJZm10LT53aWR0aCxmbXQtPmhlaWdodCxmbXQtPnBpeGVsZm9ybWF0LAoJCXBydF9uYW1lcyhmbXQtPmZpZWxkLHY0bDJfZmllbGRfbmFtZXMpLAoJCWZtdC0+Ynl0ZXNwZXJsaW5lLGZtdC0+c2l6ZWltYWdlLGZtdC0+Y29sb3JzcGFjZSk7Cn07CgovKiBDb21tb24gaW9jdGwgZGVidWcgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkKICAgZXh0ZXJuYWwgaW9jdGwgbWVzc2FnZXMgYXMgd2VsbCBhcyBpbnRlcm5hbCBWNEwgaW9jdGwgKi8Kdm9pZCB2NGxfcHJpbnRrX2lvY3RsKHVuc2lnbmVkIGludCBjbWQpCnsKCWNoYXIgKmRpcjsKCglzd2l0Y2ggKF9JT0NfRElSKGNtZCkpIHsKCWNhc2UgX0lPQ19OT05FOiAgICAgICAgICAgICAgZGlyID0gIi0tIjsgYnJlYWs7CgljYXNlIF9JT0NfUkVBRDogICAgICAgICAgICAgIGRpciA9ICJyLSI7IGJyZWFrOwoJY2FzZSBfSU9DX1dSSVRFOiAgICAgICAgICAgICBkaXIgPSAiLXciOyBicmVhazsKCWNhc2UgX0lPQ19SRUFEIHwgX0lPQ19XUklURTogZGlyID0gInJ3IjsgYnJlYWs7CglkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgIGRpciA9ICIqRVJSKiI7IGJyZWFrOwoJfQoJc3dpdGNoIChfSU9DX1RZUEUoY21kKSkgewoJY2FzZSAnZCc6CgkJcHJpbnRrKCJ2NGwyX2ludCBpb2N0bCAlcywgZGlyPSVzICgweCUwOHgpXG4iLAoJCSAgICAgICAoX0lPQ19OUihjbWQpIDwgVjRMMl9JTlRfSU9DVExTKSA/CgkJICAgICAgIHY0bDJfaW50X2lvY3Rsc1tfSU9DX05SKGNtZCldIDogIlVOS05PV04iLCBkaXIsIGNtZCk7CgkJYnJlYWs7CiNpZmRlZiBIQVZFX1Y0TDEKCWNhc2UgJ3YnOgoJCXByaW50aygidjRsMSBpb2N0bCAlcywgZGlyPSVzICgweCUwOHgpXG4iLAoJCSAgICAgICAoX0lPQ19OUihjbWQpIDwgVjRMMV9JT0NUTFMpID8KCQkgICAgICAgdjRsMV9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICJVTktOT1dOIiwgZGlyLCBjbWQpOwoJCWJyZWFrOwojZW5kaWYKCWNhc2UgJ1YnOgoJCXByaW50aygidjRsMiBpb2N0bCAlcywgZGlyPSVzICgweCUwOHgpXG4iLAoJCSAgICAgICAoX0lPQ19OUihjbWQpIDwgVjRMMl9JT0NUTFMpID8KCQkgICAgICAgdjRsMl9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICJVTktOT1dOIiwgZGlyLCBjbWQpOwoJCWJyZWFrOwoKCWRlZmF1bHQ6CgkJcHJpbnRrKCJ1bmtub3duIGlvY3RsICclYycsIGRpcj0lcywgIyVkICgweCUwOHgpXG4iLAoJCSAgICAgICBfSU9DX1RZUEUoY21kKSwgZGlyLCBfSU9DX05SKGNtZCksIGNtZCk7Cgl9Cn0KCi8qIENvbW1vbiBpb2N0bCBkZWJ1ZyBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieQogICBleHRlcm5hbCBpb2N0bCBtZXNzYWdlcyBhcyB3ZWxsIGFzIGludGVybmFsIFY0TCBpb2N0bCBhbmQgaXRzCiAgIGFyZ3VtZW50cyAqLwp2b2lkIHY0bF9wcmludGtfaW9jdGxfYXJnKGNoYXIgKnMsdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQp7CglwcmludGsocyk7CglwcmludGsoIjogIik7Cgl2NGxfcHJpbnRrX2lvY3RsKGNtZCk7Cglzd2l0Y2ggKGNtZCkgewoJY2FzZSBWSURJT0NfSU5UX0dfQ0hJUF9JREVOVDoKCXsKCQllbnVtIHY0bDJfY2hpcF9pZGVudCAgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBjaGlwIGlkZW50PSVkXG4iLCBzLCAqcCk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19HX1BSSU9SSVRZOgoJY2FzZSBWSURJT0NfU19QUklPUklUWToKCXsKCQllbnVtIHY0bDJfcHJpb3JpdHkgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBwcmlvcml0eT0lZFxuIiwgcywgKnApOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfSU5UX1NfVFVORVJfTU9ERToKCXsKCQllbnVtIHY0bDJfdHVuZXJfdHlwZSAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHR1bmVyIHR5cGU9JWRcbiIsIHMsICpwKTsKCQlicmVhazsKCX0KCWNhc2UgREVDT0RFUl9TRVRfVkJJX0JZUEFTUzoKCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgoJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6CgljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6CgljYXNlIERFQ09ERVJfU0VUX0dQSU86CgljYXNlIERFQ09ERVJfU0VUX05PUk06CgljYXNlIFZJRElPQ0NBUFRVUkU6CgljYXNlIFZJRElPQ1NZTkM6CgljYXNlIFZJRElPQ1NXUklURU1PREU6CgljYXNlIFRVTkVSX1NFVF9UWVBFX0FERFI6CgljYXNlIFRVTkVSX1NFVF9TVEFOREJZOgoJY2FzZSBUREE5ODg3X1NFVF9DT05GSUc6CgljYXNlIFZJRElPQ19PVkVSTEFZX09MRDoKCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKCWNhc2UgVklESU9DX0dfT1VUUFVUOgoJY2FzZSBWSURJT0NfU19PVVRQVVQ6CgljYXNlIFZJRElPQ19TVFJFQU1PTjoKCWNhc2UgVklESU9DX0dfSU5QVVQ6CgljYXNlIFZJRElPQ19PVkVSTEFZOgoJY2FzZSBWSURJT0NfU19JTlBVVDoKCXsKCQlpbnQgKnA9YXJnOwoJCXByaW50ayAoIiVzOiB2YWx1ZT0lZFxuIiwgcywgKnApOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19BVURJTzoKCWNhc2UgVklESU9DX1NfQVVESU86CgljYXNlIFZJRElPQ19FTlVNQVVESU86CgljYXNlIFZJRElPQ19HX0FVRElPX09MRDoKCXsKCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqcD1hcmc7CgoJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgbmFtZT0lcywgY2FwYWJpbGl0eT0lZCwgbW9kZT0lZFxuIiwKCQkJcyxwLT5pbmRleCwgcC0+bmFtZSxwLT5jYXBhYmlsaXR5LCBwLT5tb2RlKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0dfQVVET1VUOgoJY2FzZSBWSURJT0NfU19BVURPVVQ6CgljYXNlIFZJRElPQ19FTlVNQVVET1VUOgoJY2FzZSBWSURJT0NfR19BVURPVVRfT0xEOgoJewoJCXN0cnVjdCB2NGwyX2F1ZGlvb3V0ICpwPWFyZzsKCQlwcmludGsgKCIlczogaW5kZXg9JWQsIG5hbWU9JXMsIGNhcGFiaWxpdHk9JWQsIG1vZGU9JWRcbiIsIHMsCgkJCQlwLT5pbmRleCwgcC0+bmFtZSwgcC0+Y2FwYWJpbGl0eSxwLT5tb2RlKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX1FCVUY6CgljYXNlIFZJRElPQ19EUUJVRjoKCWNhc2UgVklESU9DX1FVRVJZQlVGOgoJewoJCXN0cnVjdCB2NGwyX2J1ZmZlciAqcD1hcmc7CgkJc3RydWN0IHY0bDJfdGltZWNvZGUgKnRjPSZwLT50aW1lY29kZTsKCQlwcmludGsgKCIlczogJTAybGQ6JTAyZDolMDJkLiUwOGxkIGluZGV4PSVkLCB0eXBlPSVzLCAiCgkJCSJieXRlc3VzZWQ9JWQsIGZsYWdzPTB4JTA4eCwgIgoJCQkiZmllbGQ9JTBkLCBzZXF1ZW5jZT0lZCwgbWVtb3J5PSVzLCBvZmZzZXQvdXNlcnB0cj0weCUwOGx4XG4iLAoJCQkJcywKCQkJCShwLT50aW1lc3RhbXAudHZfc2VjLzM2MDApLAoJCQkJKGludCkocC0+dGltZXN0YW1wLnR2X3NlYy82MCklNjAsCgkJCQkoaW50KShwLT50aW1lc3RhbXAudHZfc2VjJTYwKSwKCQkJCXAtPnRpbWVzdGFtcC50dl91c2VjLAoJCQkJcC0+aW5kZXgsCgkJCQlwcnRfbmFtZXMocC0+dHlwZSx2NGwyX3R5cGVfbmFtZXMpLAoJCQkJcC0+Ynl0ZXN1c2VkLHAtPmZsYWdzLAoJCQkJcC0+ZmllbGQscC0+c2VxdWVuY2UsCgkJCQlwcnRfbmFtZXMocC0+bWVtb3J5LHY0bDJfbWVtb3J5X25hbWVzKSwKCQkJCXAtPm0udXNlcnB0cik7CgkJcHJpbnRrICgiJXM6IHRpbWVjb2RlPSAlMDJkOiUwMmQ6JTAyZCB0eXBlPSVkLCAiCgkJCSJmbGFncz0weCUwOHgsIGZyYW1lcz0lZCwgdXNlcmJpdHM9MHglcFxuIiwKCQkJCXMsdGMtPmhvdXJzLHRjLT5taW51dGVzLHRjLT5zZWNvbmRzLAoJCQkJdGMtPnR5cGUsIHRjLT5mbGFncywgdGMtPmZyYW1lcywgdGMtPnVzZXJiaXRzKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX1FVRVJZQ0FQOgoJewoJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBkcml2ZXI9JXMsIGNhcmQ9JXMsIGJ1cz0lcywgdmVyc2lvbj0weCUwOHgsICIKCQkJImNhcGFiaWxpdGllcz0weCUwOHhcbiIsIHMsCgkJCQlwLT5kcml2ZXIscC0+Y2FyZCxwLT5idXNfaW5mbywKCQkJCXAtPnZlcnNpb24sCgkJCQlwLT5jYXBhYmlsaXRpZXMpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19DVFJMOgoJY2FzZSBWSURJT0NfU19DVFJMOgoJY2FzZSBWSURJT0NfU19DVFJMX09MRDoKCXsKCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpwPWFyZzsKCQlwcmludGsgKCIlczogaWQ9JWQsIHZhbHVlPSVkXG4iLCBzLCBwLT5pZCwgcC0+dmFsdWUpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19DUk9QOgoJY2FzZSBWSURJT0NfU19DUk9QOgoJewoJCXN0cnVjdCB2NGwyX2Nyb3AgKnA9YXJnOwoJCS8qRklYTUU6IFNob3VsZCBhbHNvIHNob3cgcmVjdCBzdHJ1Y3RzICovCgkJcHJpbnRrICgiJXM6IHR5cGU9JWRcbiIsIHMsIHAtPnR5cGUpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfQ1JPUENBUDoKCWNhc2UgVklESU9DX0NST1BDQVBfT0xEOgoJewoJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKnA9YXJnOwoJCS8qRklYTUU6IFNob3VsZCBhbHNvIHNob3cgcmVjdCBzdHJ1Y3RzICovCgkJcHJpbnRrICgiJXM6IHR5cGU9JWRcbiIsIHMsIHAtPnR5cGUpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORToKCXsKCQlzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpc19zZWNvbmRfZmllbGQ9JWQsIHB0cj0weCUwOGx4LCBsaW5lPSVkLCAiCgkJCSJ0eXBlPSVkXG4iLCBzLAoJCQkJcC0+aXNfc2Vjb25kX2ZpZWxkLCh1bnNpZ25lZCBsb25nKXAtPnAscC0+bGluZSxwLT50eXBlKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0VOVU1fRk1UOgoJewoJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgdHlwZT0lZCwgZmxhZ3M9JWQsIGRlc2NyaXB0aW9uPSVzLCIKCQkJIiBwaXhlbGZvcm1hdD0lZFxuIiwgcywKCQkJCXAtPmluZGV4LCBwLT50eXBlLCBwLT5mbGFncyxwLT5kZXNjcmlwdGlvbiwKCQkJCXAtPnBpeGVsZm9ybWF0KTsKCgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19HX0ZNVDoKCWNhc2UgVklESU9DX1NfRk1UOgoJY2FzZSBWSURJT0NfVFJZX0ZNVDoKCXsKCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKnA9YXJnOwoJCXByaW50ayAoIiVzOiB0eXBlPSVzXG4iLCBzLAoJCQkJcHJ0X25hbWVzKHAtPnR5cGUsdjRsMl90eXBlX25hbWVzKSk7CgkJc3dpdGNoIChwLT50eXBlKSB7CgkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CgkJCXY0bF9wcmludF9waXhfZm10IChzLCAmcC0+Zm10LnBpeCk7CgkJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJCWJyZWFrOwoJCX0KCX0KCWNhc2UgVklESU9DX0dfRkJVRjoKCWNhc2UgVklESU9DX1NfRkJVRjoKCXsKCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGNhcGFiaWxpdHk9JWQsIGZsYWdzPSVkLCBiYXNlPTB4JTA4bHhcbiIsIHMsCgkJCQlwLT5jYXBhYmlsaXR5LHAtPmZsYWdzLCAodW5zaWduZWQgbG9uZylwLT5iYXNlKTsKCQl2NGxfcHJpbnRfcGl4X2ZtdCAocywgJnAtPmZtdCk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgoJewoJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHR1bmVyPSVkLCB0eXBlPSVkLCBmcmVxdWVuY3k9JWRcbiIsIHMsCgkJCQlwLT50dW5lcixwLT50eXBlLHAtPmZyZXF1ZW5jeSk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19FTlVNSU5QVVQ6Cgl7CgkJc3RydWN0IHY0bDJfaW5wdXQgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgbmFtZT0lcywgdHlwZT0lZCwgYXVkaW9zZXQ9JWQsICIKCQkJInR1bmVyPSVkLCBzdGQ9JUxkLCBzdGF0dXM9JWRcbiIsIHMsCgkJCQlwLT5pbmRleCxwLT5uYW1lLHAtPnR5cGUscC0+YXVkaW9zZXQsCgkJCQlwLT50dW5lciwKCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcC0+c3RkLAoJCQkJcC0+c3RhdHVzKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0dfSlBFR0NPTVA6CgljYXNlIFZJRElPQ19TX0pQRUdDT01QOgoJewoJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHF1YWxpdHk9JWQsIEFQUG49JWQsIEFQUF9sZW49JWQsIENPTV9sZW49JWQsIgoJCQkiIGpwZWdfbWFya2Vycz0lZFxuIiwgcywKCQkJCXAtPnF1YWxpdHkscC0+QVBQbixwLT5BUFBfbGVuLAoJCQkJcC0+Q09NX2xlbixwLT5qcGVnX21hcmtlcnMpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19NT0RVTEFUT1I6CgljYXNlIFZJRElPQ19TX01PRFVMQVRPUjoKCXsKCQlzdHJ1Y3QgdjRsMl9tb2R1bGF0b3IgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgbmFtZT0lcywgY2FwYWJpbGl0eT0lZCwgcmFuZ2Vsb3c9JWQsIgoJCQkiIHJhbmdlaGlnaD0lZCwgdHhzdWJjaGFucz0lZFxuIiwgcywKCQkJCXAtPmluZGV4LCBwLT5uYW1lLHAtPmNhcGFiaWxpdHkscC0+cmFuZ2Vsb3csCgkJCQlwLT5yYW5nZWhpZ2gscC0+dHhzdWJjaGFucyk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19HX01QRUdDT01QOgoJY2FzZSBWSURJT0NfU19NUEVHQ09NUDoKCXsKCQlzdHJ1Y3QgdjRsMl9tcGVnX2NvbXByZXNzaW9uICpwPWFyZzsKCQkvKkZJWE1FOiBTZXZlcmFsIGZpZWxkcyBub3Qgc2hvd24gKi8KCQlwcmludGsgKCIlczogdHNfcGlkX3BtdD0lZCwgdHNfcGlkX2F1ZGlvPSVkLCB0c19waWRfdmlkZW89JWQsICIKCQkJInRzX3BpZF9wY3I9JWQsIHBzX3NpemU9JWQsIGF1X3NhbXBsZV9yYXRlPSVkLCAiCgkJCSJhdV9wZXNpZD0lYywgdmlfZnJhbWVfcmF0ZT0lZCwgdmlfZnJhbWVzX3Blcl9nb3A9JWQsICIKCQkJInZpX2JmcmFtZXNfY291bnQ9JWQsIHZpX3Blc2lkPSVjXG4iLCBzLAoJCQkJcC0+dHNfcGlkX3BtdCxwLT50c19waWRfYXVkaW8sIHAtPnRzX3BpZF92aWRlbywKCQkJCXAtPnRzX3BpZF9wY3IsIHAtPnBzX3NpemUsIHAtPmF1X3NhbXBsZV9yYXRlLAoJCQkJcC0+YXVfcGVzaWQsIHAtPnZpX2ZyYW1lX3JhdGUsCgkJCQlwLT52aV9mcmFtZXNfcGVyX2dvcCwgcC0+dmlfYmZyYW1lc19jb3VudCwKCQkJCXAtPnZpX3Blc2lkKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0VOVU1PVVRQVVQ6Cgl7CgkJc3RydWN0IHY0bDJfb3V0cHV0ICpwPWFyZzsKCQlwcmludGsgKCIlczogaW5kZXg9JWQsIG5hbWU9JXMsdHlwZT0lZCwgYXVkaW9zZXQ9JWQsICIKCQkJIm1vZHVsYXRvcj0lZCwgc3RkPSVMZFxuIiwKCQkJCXMscC0+aW5kZXgscC0+bmFtZSxwLT50eXBlLHAtPmF1ZGlvc2V0LAoJCQkJcC0+bW9kdWxhdG9yLAoJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwLT5zdGQpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfUVVFUllDVFJMOgoJewoJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGlkPSVkLCB0eXBlPSVkLCBuYW1lPSVzLCBtaW4vbWF4PSVkLyVkLCIKCQkJIiBzdGVwPSVkLCBkZWZhdWx0PSVkLCBmbGFncz0weCUwOHhcbiIsIHMsCgkJCQlwLT5pZCxwLT50eXBlLHAtPm5hbWUscC0+bWluaW11bSxwLT5tYXhpbXVtLAoJCQkJcC0+c3RlcCxwLT5kZWZhdWx0X3ZhbHVlLHAtPmZsYWdzKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX1FVRVJZTUVOVToKCXsKCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpZD0lZCwgaW5kZXg9JWQsIG5hbWU9JXNcbiIsIHMsCgkJCQlwLT5pZCxwLT5pbmRleCxwLT5uYW1lKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0lOVF9HX1JFR0lTVEVSOgoJY2FzZSBWSURJT0NfSU5UX1NfUkVHSVNURVI6Cgl7CgkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpMmNfaWQ9JWQsIHJlZz0lbHUsIHZhbD0lZFxuIiwgcywKCQkJCXAtPmkyY19pZCxwLT5yZWcscC0+dmFsKTsKCgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19SRVFCVUZTOgoJewoJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpwPWFyZzsKCQlwcmludGsgKCIlczogY291bnQ9JWQsIHR5cGU9JXMsIG1lbW9yeT0lc1xuIiwgcywKCQkJCXAtPmNvdW50LAoJCQkJcHJ0X25hbWVzKHAtPnR5cGUsdjRsMl90eXBlX25hbWVzKSwKCQkJCXBydF9uYW1lcyhwLT5tZW1vcnksdjRsMl9tZW1vcnlfbmFtZXMpKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkc6CgljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgoJY2FzZSBWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORzoKCWNhc2UgVklESU9DX0lOVF9HX1ZJREVPX1JPVVRJTkc6Cgl7CgkJc3RydWN0IHY0bDJfcm91dGluZyAgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpbnB1dD0weCV4LCBvdXRwdXQ9MHgleFxuIiwgcywgcC0+aW5wdXQsIHAtPm91dHB1dCk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19JTlRfU19DUllTVEFMX0ZSRVE6Cgl7CgkJc3RydWN0IHY0bDJfY3J5c3RhbF9mcmVxICpwPWFyZzsKCQlwcmludGsgKCIlczogZnJlcT0ldSwgZmxhZ3M9MHgleFxuIiwgcywgcC0+ZnJlcSwgcC0+ZmxhZ3MpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19TTElDRURfVkJJX0NBUDoKCXsKCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHNlcnZpY2Vfc2V0PSVkXG4iLCBzLAoJCQkJcC0+c2VydmljZV9zZXQpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfSU5UX1NfVkJJX0RBVEE6CgljYXNlIFZJRElPQ19JTlRfR19WQklfREFUQToKCXsKCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgICpwPWFyZzsKCQlwcmludGsgKCIlczogaWQ9JWQsIGZpZWxkPSVkLCBsaW5lPSVkXG4iLCBzLAoJCQkJcC0+aWQsIHAtPmZpZWxkLCBwLT5saW5lKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0VOVU1TVEQ6Cgl7CgkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgaWQ9JUxkLCBuYW1lPSVzLCBmcHM9JWQvJWQsICIKCQkJImZyYW1lbGluZXM9JWRcbiIsIHMsIHAtPmluZGV4LAoJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwLT5pZCwgcC0+bmFtZSwKCQkJCXAtPmZyYW1lcGVyaW9kLm51bWVyYXRvciwKCQkJCXAtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yLAoJCQkJcC0+ZnJhbWVsaW5lcyk7CgoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19QQVJNOgoJY2FzZSBWSURJT0NfU19QQVJNOgoJY2FzZSBWSURJT0NfU19QQVJNX09MRDoKCXsKCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwPWFyZzsKCQlwcmludGsgKCIlczogdHlwZT0lZFxuIiwgcywgcC0+dHlwZSk7CgoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19UVU5FUjoKCWNhc2UgVklESU9DX1NfVFVORVI6Cgl7CgkJc3RydWN0IHY0bDJfdHVuZXIgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgbmFtZT0lcywgdHlwZT0lZCwgY2FwYWJpbGl0eT0lZCwgIgoJCQkicmFuZ2Vsb3c9JWQsIHJhbmdlaGlnaD0lZCwgc2lnbmFsPSVkLCBhZmM9JWQsICIKCQkJInJ4c3ViY2hhbnM9JWQsIGF1ZG1vZGU9JWRcbiIsIHMsCgkJCQlwLT5pbmRleCwgcC0+bmFtZSwgcC0+dHlwZSwKCQkJCXAtPmNhcGFiaWxpdHksIHAtPnJhbmdlbG93LHAtPnJhbmdlaGlnaCwKCQkJCXAtPnJ4c3ViY2hhbnMsIHAtPmF1ZG1vZGUsIHAtPnNpZ25hbCwKCQkJCXAtPmFmYyk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ0dWQklGTVQ6CgljYXNlIFZJRElPQ1NWQklGTVQ6Cgl7CgkJc3RydWN0IHZiaV9mb3JtYXQgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBzYW1wbGluZ19yYXRlPSVkLCBzYW1wbGVzX3Blcl9saW5lPSVkLCAiCgkJCSJzYW1wbGVfZm9ybWF0PSVkLCBzdGFydD0lZC8lZCwgY291bnQ9JWQvJWQsIGZsYWdzPSVkXG4iLCBzLAoJCQkJcC0+c2FtcGxpbmdfcmF0ZSxwLT5zYW1wbGVzX3Blcl9saW5lLAoJCQkJcC0+c2FtcGxlX2Zvcm1hdCxwLT5zdGFydFswXSxwLT5zdGFydFsxXSwKCQkJCXAtPmNvdW50WzBdLHAtPmNvdW50WzFdLHAtPmZsYWdzKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR0FVRElPOgoJY2FzZSBWSURJT0NTQVVESU86Cgl7CgkJc3RydWN0IHZpZGVvX2F1ZGlvICpwPWFyZzsKCQlwcmludGsgKCIlczogYXVkaW89JWQsIHZvbHVtZT0lZCwgYmFzcz0lZCwgdHJlYmxlPSVkLCAiCgkJCSJmbGFncz0lZCwgbmFtZT0lcywgbW9kZT0lZCwgYmFsYW5jZT0lZCwgc3RlcD0lZFxuIiwKCQkJCXMscC0+YXVkaW8scC0+dm9sdW1lLHAtPmJhc3MsIHAtPnRyZWJsZSwKCQkJCXAtPmZsYWdzLHAtPm5hbWUscC0+bW9kZSxwLT5iYWxhbmNlLHAtPnN0ZXApOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NHRkJVRjoKCWNhc2UgVklESU9DU0ZCVUY6Cgl7CgkJc3RydWN0IHZpZGVvX2J1ZmZlciAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGJhc2U9JTA4bHgsIGhlaWdodD0lZCwgd2lkdGg9JWQsIGRlcHRoPSVkLCAiCgkJCSJieXRlc3BlcmxpbmU9JWRcbiIsIHMsCgkJCQkodW5zaWduZWQgbG9uZykgcC0+YmFzZSwgcC0+aGVpZ2h0LCBwLT53aWR0aCwKCQkJCXAtPmRlcHRoLHAtPmJ5dGVzcGVybGluZSk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ0dDQVA6Cgl7CgkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBuYW1lPSVzLCB0eXBlPSVkLCBjaGFubmVscz0lZCwgYXVkaW9zPSVkLCAiCgkJCSJtYXh3aWR0aD0lZCwgbWF4aGVpZ2h0PSVkLCBtaW53aWR0aD0lZCwgbWluaGVpZ2h0PSVkXG4iLAoJCQkJcyxwLT5uYW1lLHAtPnR5cGUscC0+Y2hhbm5lbHMscC0+YXVkaW9zLAoJCQkJcC0+bWF4d2lkdGgscC0+bWF4aGVpZ2h0LHAtPm1pbndpZHRoLAoJCQkJcC0+bWluaGVpZ2h0KTsKCgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ0dDQVBUVVJFOgoJY2FzZSBWSURJT0NTQ0FQVFVSRToKCXsKCQlzdHJ1Y3QgdmlkZW9fY2FwdHVyZSAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHg9JWQsIHk9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWQsIGRlY2ltYXRpb249JWQsIgoJCQkiIGZsYWdzPSVkXG4iLCBzLAoJCQkJcC0+eCwgcC0+eSxwLT53aWR0aCwgcC0+aGVpZ2h0LAoJCQkJcC0+ZGVjaW1hdGlvbixwLT5mbGFncyk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ0dDSEFOOgoJY2FzZSBWSURJT0NTQ0hBTjoKCXsKCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGNoYW5uZWw9JWQsIG5hbWU9JXMsIHR1bmVycz0lZCwgZmxhZ3M9JWQsICIKCQkJInR5cGU9JWQsIG5vcm09JWRcbiIsIHMsCgkJCQlwLT5jaGFubmVsLHAtPm5hbWUscC0+dHVuZXJzLAoJCQkJcC0+ZmxhZ3MscC0+dHlwZSxwLT5ub3JtKTsKCgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ1NNSUNST0NPREU6Cgl7CgkJc3RydWN0IHZpZGVvX2NvZGUgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBsb2Fkd2hhdD0lcywgZGF0YXNpemU9JWRcbiIsIHMsCgkJCQlwLT5sb2Fkd2hhdCxwLT5kYXRhc2l6ZSk7CgkJYnJlYWs7Cgl9CgljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKCXsKCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpwPWFyZzsKCQlwcmludGsgKCIlczogZmxhZ3M9JWQsIGlucHV0cz0lZCwgb3V0cHV0cz0lZFxuIiwgcywKCQkJCXAtPmZsYWdzLHAtPmlucHV0cyxwLT5vdXRwdXRzKTsKCQlicmVhazsKCX0KCWNhc2UgREVDT0RFUl9JTklUOgoJewoJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBsZW49JWNcbiIsIHMsIHAtPmxlbik7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ0dQTEFZSU5GTzoKCXsKCQlzdHJ1Y3QgdmlkZW9faW5mbyAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGZyYW1lX2NvdW50PSVkLCBoX3NpemU9JWQsIHZfc2l6ZT0lZCwgIgoJCQkic21wdGVfdGltZWNvZGU9JWQsIHBpY3R1cmVfdHlwZT0lZCwgIgoJCQkidGVtcG9yYWxfcmVmZXJlbmNlPSVkLCB1c2VyX2RhdGE9JXNcbiIsIHMsCgkJCQlwLT5mcmFtZV9jb3VudCwgcC0+aF9zaXplLAoJCQkJcC0+dl9zaXplLCBwLT5zbXB0ZV90aW1lY29kZSwKCQkJCXAtPnBpY3R1cmVfdHlwZSwgcC0+dGVtcG9yYWxfcmVmZXJlbmNlLAoJCQkJcC0+dXNlcl9kYXRhKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DS0VZOgoJewoJCXN0cnVjdCB2aWRlb19rZXkgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBrZXk9JXMsIGZsYWdzPSVkXG4iLCBzLAoJCQkJcC0+a2V5LCBwLT5mbGFncyk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ0dNQlVGOgoJewoJCXN0cnVjdCB2aWRlb19tYnVmICpwPWFyZzsKCQlwcmludGsgKCIlczogc2l6ZT0lZCwgZnJhbWVzPSVkLCBvZmZzZXRzPTB4JTA4bHhcbiIsIHMsCgkJCQlwLT5zaXplLAoJCQkJcC0+ZnJhbWVzLAoJCQkJKHVuc2lnbmVkIGxvbmcpcC0+b2Zmc2V0cyk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ01DQVBUVVJFOgoJewoJCXN0cnVjdCB2aWRlb19tbWFwICpwPWFyZzsKCQlwcmludGsgKCIlczogZnJhbWU9JWQsIGhlaWdodD0lZCwgd2lkdGg9JWQsIGZvcm1hdD0lZFxuIiwgcywKCQkJCXAtPmZyYW1lLAoJCQkJcC0+aGVpZ2h0LCBwLT53aWR0aCwKCQkJCXAtPmZvcm1hdCk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ0dQSUNUOgoJY2FzZSBWSURJT0NTUElDVDoKCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKCXsKCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcD1hcmc7CgoJCXByaW50ayAoIiVzOiBicmlnaHRuZXNzPSVkLCBodWU9JWQsIGNvbG91cj0lZCwgY29udHJhc3Q9JWQsIgoJCQkiIHdoaXRlbmVzcz0lZCwgZGVwdGg9JWQsIHBhbGV0dGU9JWRcbiIsIHMsCgkJCQlwLT5icmlnaHRuZXNzLCBwLT5odWUsIHAtPmNvbG91ciwKCQkJCXAtPmNvbnRyYXN0LCBwLT53aGl0ZW5lc3MsIHAtPmRlcHRoLAoJCQkJcC0+cGFsZXR0ZSk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ1NQTEFZTU9ERToKCXsKCQlzdHJ1Y3QgdmlkZW9fcGxheV9tb2RlICpwPWFyZzsKCQlwcmludGsgKCIlczogbW9kZT0lZCwgcDE9JWQsIHAyPSVkXG4iLCBzLAoJCQkJcC0+bW9kZSxwLT5wMSxwLT5wMik7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ0dUVU5FUjoKCWNhc2UgVklESU9DU1RVTkVSOgoJewoJCXN0cnVjdCB2aWRlb190dW5lciAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHR1bmVyPSVkLCBuYW1lPSVzLCByYW5nZWxvdz0lbGQsIHJhbmdlaGlnaD0lbGQsICIKCQkJImZsYWdzPSVkLCBtb2RlPSVkLCBzaWduYWw9JWRcbiIsIHMsCgkJCQlwLT50dW5lciwgcC0+bmFtZSxwLT5yYW5nZWxvdywgcC0+cmFuZ2VoaWdoLAoJCQkJcC0+ZmxhZ3MscC0+bW9kZSwgcC0+c2lnbmFsKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR1VOSVQ6Cgl7CgkJc3RydWN0IHZpZGVvX3VuaXQgKnA9YXJnOwoJCXByaW50ayAoIiVzOiB2aWRlbz0lZCwgdmJpPSVkLCByYWRpbz0lZCwgYXVkaW89JWQsICIKCQkJInRlbGV0ZXh0PSVkXG4iLCBzLAoJCQkJcC0+dmlkZW8scC0+dmJpLHAtPnJhZGlvLHAtPmF1ZGlvLHAtPnRlbGV0ZXh0KTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR1dJTjoKCWNhc2UgVklESU9DU1dJTjoKCXsKCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICpwPWFyZzsKCQlwcmludGsgKCIlczogeD0lZCwgeT0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZCwgY2hyb21ha2V5PSVkLCIKCQkJIiBmbGFncz0lZCwgY2xpcGNvdW50PSVkXG4iLCBzLAoJCQkJcC0+eCwgcC0+eSxwLT53aWR0aCwgcC0+aGVpZ2h0LAoJCQkJcC0+Y2hyb21ha2V5LHAtPmZsYWdzLAoJCQkJcC0+Y2xpcGNvdW50KTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgoJY2FzZSBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVROgoJY2FzZSBWSURJT0NfSU5UX1NfU1RBTkRCWToKCXsKCQl1MzIgKnA9YXJnOwoKCQlwcmludGsgKCIlczogdmFsdWU9JWRcbiIsIHMsICpwKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR0ZSRVE6CgljYXNlIFZJRElPQ1NGUkVROgoJewoJCXVuc2lnbmVkIGxvbmcgKnA9YXJnOwoJCXByaW50ayAoIiVzOiB2YWx1ZT0lbHVcbiIsIHMsICpwKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0dfU1REOgoJY2FzZSBWSURJT0NfU19TVEQ6CgljYXNlIFZJRElPQ19RVUVSWVNURDoKCXsKCQl2NGwyX3N0ZF9pZCAqcD1hcmc7CgoJCXByaW50ayAoIiVzOiB2YWx1ZT0lTHVcbiIsIHMsICh1bnNpZ25lZCBsb25nIGxvbmcpKnApOwoJCWJyZWFrOwoJfQoJfQp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKRVhQT1JUX1NZTUJPTCh2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3QpOwoKRVhQT1JUX1NZTUJPTCh2NGwyX3ByaW9faW5pdCk7CkVYUE9SVF9TWU1CT0wodjRsMl9wcmlvX2NoYW5nZSk7CkVYUE9SVF9TWU1CT0wodjRsMl9wcmlvX29wZW4pOwpFWFBPUlRfU1lNQk9MKHY0bDJfcHJpb19jbG9zZSk7CkVYUE9SVF9TWU1CT0wodjRsMl9wcmlvX21heCk7CkVYUE9SVF9TWU1CT0wodjRsMl9wcmlvX2NoZWNrKTsKCkVYUE9SVF9TWU1CT0wodjRsMl9maWVsZF9uYW1lcyk7CkVYUE9SVF9TWU1CT0wodjRsMl90eXBlX25hbWVzKTsKRVhQT1JUX1NZTUJPTCh2NGxfcHJpbnRrX2lvY3RsKTsKRVhQT1JUX1NZTUJPTCh2NGxfcHJpbnRrX2lvY3RsX2FyZyk7CgovKgogKiBMb2NhbCB2YXJpYWJsZXM6CiAqIGMtYmFzaWMtb2Zmc2V0OiA4CiAqIEVuZDoKICovCg==