dHJlZSA3MjhkYjQxYmIxYzE0Y2MwYjQ1ODY1NjEyODU2OWQ3M2Y3MjRhMzUwCnBhcmVudCBjYzFlYjE2MTlmYmQwOWJlZDQwYzA5ZTMxMjA5OWMxY2NkNzk5MDJjCmF1dGhvciBGculk6XJpYyBM6WNhaWxsZSA8ZmxlY2FpbGxlQGhhcHJveHkuY29tPiAxNTY3NDI1NzQ4ICswMjAwCmNvbW1pdHRlciBXaWxseSBUYXJyZWF1IDx3QDF3dC5ldT4gMTU2NzQyNzk3OCArMDIwMAplbmNvZGluZyBsYXRpbjEKCkJVRy9NRURJVU06IHBlZXJzOiBsb2NhbCBwZWVyIHNvY2tldCBub3QgYm91bmQuCgpUaGlzIGJ1ZyBjYW1lIHdpdGggMDE1ZTRkNyBjb21taXQ6ICJNSU5PUjogc3RpY2stdGFibGVzOiBBZGQgcGVlcnMgcHJvY2VzcwpiaW5kaW5nIGNvbXB1dGluZyIgd2hlcmUgdGhlICJzdGljayIgcnVsZXMgY2FzZXMgd2VyZSBtaXNzaW5nIHdoZW4gY29tcHV0aW5nCnRoZSBwZWVyIGxvY2FsIGxpc3RlbmVyIHByb2Nlc3MgYmluZGluZy4gQXQgcGFyc2luZyB0aW1lIHdlIHN0b3JlIGluIHRoZQpzdGljay10YWJsZSBzdHJ1Y3QgLT5wcm94aWVzX2xpc3QgdGhlIHByb3hpZXMgd2hpY2ggcmVmZXIgdG8gdGhpcyBzdGljay10YWJsZS4KVGhlIHByb2Nlc3MgYmluZGluZyBpcyBjb21wdXRlZCBhZnRlciBoYXZpbmcgcGFyc2VkIHRoZSBlbnRpcmUgY29uZmlndXJhdGlvbiBmaWxlCndpdGggdGhpcyBzaW1wbGUgbG9vcCBpbiBjZmdwYXJzZS5jOgoKICAgICAvKiBjb21wdXRlIHRoZSByZXF1aXJlZCBwcm9jZXNzIGJpbmRpbmdzIGZvciB0aGUgcGVlcnMgZnJvbSA8c3RrdGFibGVzX2xpc3Q+CiAgICAgICogZm9yIGFsbCB0aGUgc3RpY2stdGFibGVzLCB0aGUgb25lcyBjb21pbmcgd2l0aCAicGVlcnMiIHNlY3Rpb25zIGluY2x1ZGVkLgogICAgICAqLwogICAgIGZvciAodCA9IHN0a3RhYmxlc19saXN0OyB0OyB0ID0gdC0+bmV4dCkgewogICAgICAgICAgICAgc3RydWN0IHByb3h5ICpwOwoKICAgICAgICAgICAgIGZvciAocCA9IHQtPnByb3hpZXNfbGlzdDsgcDsgcCA9IHAtPm5leHRfc3RrdF9yZWYpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHQtPnBlZXJzLnAgJiYgdC0+cGVlcnMucC0+cGVlcnNfZmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LT5wZWVycy5wLT5wZWVyc19mZS0+YmluZF9wcm9jIHw9IHAtPmJpbmRfcHJvYzsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgIH0KCk5vdGUgdGhhdCBpZiB0aGlzIHByb2Nlc3MgYmluZGluZyBpcyBub3QgY29ycmVjdGx5IGluaXRpYWxpemVkLCB0aGUgY2hpbGQgZm9ya2VkCmJ5IHRoZSBtYXN0ZXItd29ya2VyIHN0b3BzIHRoZSBwZWVyIGxvY2FsIGxpc3RlbmVyLiBTaG91bGQgYmUgYWxzbyB0aGUgY2FzZQp3aGVuIGRhZW1vbml6aW5nIGhhcHJveHkuCgpNdXN0IGJlIGJhY2twb3J0ZWQgdG8gMi4wLgo=